diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-04-15 12:56:09 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-04-15 12:56:46 +0300 |
commit | 555eb0850d0e46aa25de88c15d2f00fbe62385f5 (patch) | |
tree | 305a9ab595692591f4f1be8e633ba2861975c8cc /src/char | |
parent | 293793b7027029efc87c8b657a0c45d26e0840c5 (diff) | |
download | evol-hercules-555eb0850d0e46aa25de88c15d2f00fbe62385f5.tar.gz evol-hercules-555eb0850d0e46aa25de88c15d2f00fbe62385f5.tar.bz2 evol-hercules-555eb0850d0e46aa25de88c15d2f00fbe62385f5.tar.xz evol-hercules-555eb0850d0e46aa25de88c15d2f00fbe62385f5.zip |
Add support for change password packet.
Change server version to 6.
Diffstat (limited to 'src/char')
-rw-r--r-- | src/char/char.c | 32 | ||||
-rw-r--r-- | src/char/char.h | 4 | ||||
-rw-r--r-- | src/char/init.c | 3 |
3 files changed, 39 insertions, 0 deletions
diff --git a/src/char/char.c b/src/char/char.c index f971617..dccc7ac 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -157,3 +157,35 @@ void echar_parse_char_ping(int *fdPtr) } hookStop(); } + +void echar_parse_change_paassword(int fd) +{ + if (chr->login_fd < 0) + return; + struct char_session_data* sd = (struct char_session_data*)session[fd]->session_data; + if (!sd) + return; + WFIFOHEAD(chr->login_fd, 54); + WFIFOW(chr->login_fd, 0) = 0x5000; + WFIFOL(chr->login_fd, 2) = sd->account_id; + memcpy (WFIFOP (chr->login_fd, 6), RFIFOP (fd, 2), 24); + memcpy (WFIFOP (chr->login_fd, 30), RFIFOP (fd, 26), 24); + WFIFOSET(chr->login_fd, 54); +} + +void echar_parse_login_password_change_ack(int charFd) +{ + struct char_session_data* sd = NULL; + const int accountId = RFIFOL(charFd, 2); + const int status = RFIFOB(charFd, 6); + + int fd = -1; + ARR_FIND( 0, sockt->fd_max, fd, session[fd] && (sd = (struct char_session_data*)session[fd]->session_data) && sd->auth && sd->account_id == accountId ); + if (fd < sockt->fd_max && fd >= 0) + { + WFIFOHEAD(fd, 3); + WFIFOW(fd, 0) = 0x62; + WFIFOB(fd, 2) = status; + WFIFOSET(fd, 3); + } +} diff --git a/src/char/char.h b/src/char/char.h index eb90bce..b013f44 100644 --- a/src/char/char.h +++ b/src/char/char.h @@ -12,4 +12,8 @@ void echar_creation_failed(int *fdPtr, int *result); void echar_parse_char_ping(int *fdPtr); +void echar_parse_change_paassword(int fd); + +void echar_parse_login_password_change_ack(int charFd); + #endif // EVOL_CHAR_CHAR diff --git a/src/char/init.c b/src/char/init.c index 262a463..6c8e34d 100644 --- a/src/char/init.c +++ b/src/char/init.c @@ -60,6 +60,9 @@ HPExport void plugin_init (void) loginif = GET_SYMBOL("loginif"); mapif = GET_SYMBOL("mapif"); + addPacket(0x0061, 50, echar_parse_change_paassword, hpParse_Char); + addPacket(0x5001, 7, echar_parse_login_password_change_ack, hpParse_FromLogin); + addHookPre("chr->parse_char_login_map_server", echar_parse_char_login_map_server); addHookPre("chr->parse_char_create_new_char", echar_parse_char_create_new_char); //addHookPre("chr->parse_char_ping", echar_parse_char_ping); |