Skip to content

Commit 17b8e47

Browse files
Added serverkey to config. Added sv_areainfo command.
1 parent 8861e32 commit 17b8e47

9 files changed

Lines changed: 60 additions & 3 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,4 @@ zones/generic/armor.itm
1717
*.vpw
1818
*.vpwhist
1919
*.vtg
20+
.serverkey

client.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ union ceffect {
268268
#define SV_GOLD 30
269269
#define SV_LOOKINV 31
270270
#define SV_ITEMPRICE 32
271-
#define SV__FREE_FOR_USE1__ 33
271+
#define SV_AREAINFO 33
272272
#define SV_CEFFECT 34
273273
#define SV_UEFFECT 35
274274
#define SV_REALTIME 36

config.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ struct config_data config_data = {
1414
.dbuser = "root",
1515
.dbpass = "tgbdwf3h",
1616
.dbname = "merc",
17-
.chathost = "localhost"};
17+
.chathost = "localhost",
18+
.svrkey = "4241"};
1819

1920
void config_set_name(char *name, char *value) {
2021
if (!strcmp(name, "dbhost")) {
@@ -37,6 +38,11 @@ void config_set_name(char *name, char *value) {
3738
config_data.chathost = strdup(value);
3839
return;
3940
}
41+
if (!strcmp(name, "svrkey")) {
42+
config_data.svrkey = strdup(value);
43+
return;
44+
}
45+
4046
fprintf(stderr, "config_set: unknown name '%s'.\n", name);
4147
exit(1);
4248
}
@@ -123,4 +129,5 @@ void config_getenv(void) {
123129
if ((tmp = getenv("AS3_DBPASS"))) config_data.dbpass = tmp;
124130
if ((tmp = getenv("AS3_DBNAME"))) config_data.dbname = tmp;
125131
if ((tmp = getenv("AS3_CHATHOST"))) config_data.chathost = tmp;
132+
if ((tmp = getenv("AS3_SVRKEY"))) config_data.svrkey = tmp;
126133
}

config.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ struct config_data {
55
char *dbpass;
66
char *dbname;
77
char *chathost;
8+
char *svrkey;
89
};
910
extern struct config_data config_data;
1011

player.c

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@
5959
#include "military.h"
6060
#include "questlog.h"
6161
#include "shrine.h"
62+
#include "config.h"
63+
64+
#define SERVER_PROTOCOL_VERSION 2
6265

6366
#define MAX_IDLE (TICKS * 30)
6467

@@ -360,9 +363,10 @@ static void read_login(int nr) {
360363

361364
if (player[nr]->client_version) {
362365
buf[0] = SV_PROTOCOL;
363-
buf[1] = 1;
366+
buf[1] = SERVER_PROTOCOL_VERSION;
364367
psend(nr, buf, 2);
365368
}
369+
player_areainfo(nr, 0);
366370

367371
if (!(ch[cn].flags & CF_AREACHANGE)) {
368372
show_motd(nr);
@@ -2815,6 +2819,33 @@ int get_player_version(int nr) {
28152819
int get_char_version(int cn) {
28162820
int nr;
28172821

2822+
if (!player) return 0;
2823+
28182824
if ((nr = ch[cn].player) && player[nr]) return player[nr]->client_version;
28192825
else return 0;
28202826
}
2827+
2828+
void player_areainfo(int nr, unsigned short cmd) {
2829+
char buf[80];
2830+
2831+
if (!player) return;
2832+
if (!player[nr]) return;
2833+
2834+
if (player[nr]->client_version < 2) return;
2835+
2836+
buf[0] = SV_AREAINFO;
2837+
*(unsigned short *)(buf + 1) = cmd;
2838+
2839+
switch (cmd) {
2840+
case AIC_SETID:
2841+
*(unsigned short *)(buf + 3) = (unsigned short)areaID;
2842+
*(unsigned short *)(buf + 5) = atoi(config_data.svrkey); // server_key: vanilla 3 is 1, default is 4241
2843+
break;
2844+
case AIC_CLEAR:
2845+
*(unsigned short *)(buf + 3) = 0u;
2846+
*(unsigned short *)(buf + 5) = 0u;
2847+
break;
2848+
}
2849+
2850+
psend(nr, buf, 7);
2851+
}

player.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,3 +163,7 @@ unsigned int get_player_addr(int nr);
163163
void sendquestlog(int cn, int nr);
164164
int get_player_version(int nr);
165165
int get_char_version(int cn);
166+
167+
#define AIC_SETID 0
168+
#define AIC_CLEAR 1
169+
void player_areainfo(int nr, unsigned short cmd);

random.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1260,6 +1260,7 @@ void create_dungeon(int cn, int co, int level, struct master_data *dat) {
12601260
say(cn, "This dungeon will collapse in %.2f minutes.", DUNGEONTIME / (TICKS * 60.0));
12611261

12621262
teleport_char_driver(co, xoff + 2, yoff + 58);
1263+
player_areainfo(ch[co].player, AIC_CLEAR);
12631264
}
12641265

12651266
void enter_dungeon(int cn, int co, int target, struct master_data *dat) {
@@ -1289,6 +1290,7 @@ void enter_dungeon(int cn, int co, int target, struct master_data *dat) {
12891290
say(cn, "This dungeon will collapse in %.2f minutes,", tmp / (TICKS * 60.0));
12901291

12911292
teleport_char_driver(co, (target % 4) * 61 + 4, (target / 4) * 61 + 60);
1293+
player_areainfo(ch[co].player, AIC_CLEAR);
12921294
}
12931295

12941296
void list_dungeon(int cn, struct master_data *dat) {

server.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,9 @@ int main(int argc, char *args[]) {
182182
printf(" ********************************************\n");
183183
printf("\n");
184184

185+
// load serverkey from file first so it can be overwritten by config
186+
config_file(".serverkey");
187+
185188
if (argc > 1) {
186189
while (1) {
187190
c = getopt(argc, args, "a:m:i:dhcs:f:e");

start

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
#!/bin/sh
22

3+
pkill chatserver
4+
pkill server
5+
sleep 1
6+
37
# Chatserver needs to run first
48
echo chatserver
59
./chatserver >/dev/null &
@@ -11,6 +15,10 @@ sleep 1
1115
./server -a 2 -d
1216
sleep 1
1317
./server -a 3 -d
18+
sleep 1
19+
./server -a 14 -d
20+
sleep 1
21+
./server -a 33 -d
1422
# ... add them all here for a full server
1523

1624
echo Done

0 commit comments

Comments
 (0)