summaryrefslogtreecommitdiff
path: root/src/char
diff options
context:
space:
mode:
authorshennetsind <ind@henn.et>2014-01-06 15:26:00 -0200
committershennetsind <ind@henn.et>2014-01-08 11:22:00 -0200
commitb79a9d7efa9213e3c791ec356bf21b712878d1aa (patch)
tree043173233a97e805a49089a5ced25f213a86217f /src/char
parent85327cde8e451b8b1bacd1f5a98c034a6f42e5ea (diff)
downloadhercules-b79a9d7efa9213e3c791ec356bf21b712878d1aa.tar.gz
hercules-b79a9d7efa9213e3c791ec356bf21b712878d1aa.tar.bz2
hercules-b79a9d7efa9213e3c791ec356bf21b712878d1aa.tar.xz
hercules-b79a9d7efa9213e3c791ec356bf21b712878d1aa.zip
Introducing Hercules Autotrade Persistency
Aka autotrading merchants survive server restarts. Originally sekai's (aka me). Special Thanks to Haruna, Michieru. Signed-off-by: shennetsind <ind@henn.et>
Diffstat (limited to 'src/char')
-rw-r--r--src/char/char.c31
1 files changed, 26 insertions, 5 deletions
diff --git a/src/char/char.c b/src/char/char.c
index 292973449..9b3f1443d 100644
--- a/src/char/char.c
+++ b/src/char/char.c
@@ -3503,14 +3503,14 @@ int parse_frommap(int fd)
break;
case 0x2b26: // auth request from map-server
- if (RFIFOREST(fd) < 19)
+ if (RFIFOREST(fd) < 20)
return 0;
{
int account_id;
int char_id;
int login_id1;
- char sex;
+ char sex, standalone;
uint32 ip;
struct auth_node* node;
struct mmo_charstatus* cd;
@@ -3521,15 +3521,36 @@ int parse_frommap(int fd)
login_id1 = RFIFOL(fd,10);
sex = RFIFOB(fd,14);
ip = ntohl(RFIFOL(fd,15));
- RFIFOSKIP(fd,19);
+ standalone = RFIFOB(fd, 19);
+ RFIFOSKIP(fd,20);
node = (struct auth_node*)idb_get(auth_db, account_id);
cd = (struct mmo_charstatus*)uidb_get(char_db_,char_id);
- if( cd == NULL )
- { //Really shouldn't happen.
+
+ if( cd == NULL ) { //Really shouldn't happen.
mmo_char_fromsql(char_id, &char_dat, true);
cd = (struct mmo_charstatus*)uidb_get(char_db_,char_id);
}
+
+ if( runflag == CHARSERVER_ST_RUNNING && cd && standalone ) {
+ cd->sex = sex;
+
+ WFIFOHEAD(fd,25 + sizeof(struct mmo_charstatus));
+ WFIFOW(fd,0) = 0x2afd;
+ WFIFOW(fd,2) = 25 + sizeof(struct mmo_charstatus);
+ WFIFOL(fd,4) = account_id;
+ WFIFOL(fd,8) = 0;
+ WFIFOL(fd,12) = 0;
+ WFIFOL(fd,16) = 0;
+ WFIFOL(fd,20) = 0;
+ WFIFOB(fd,24) = 0;
+ memcpy(WFIFOP(fd,25), cd, sizeof(struct mmo_charstatus));
+ WFIFOSET(fd, WFIFOW(fd,2));
+
+ set_char_online(id, char_id, account_id);
+ break;
+ }
+
if( runflag == CHARSERVER_ST_RUNNING &&
cd != NULL &&
node != NULL &&