summaryrefslogtreecommitdiff
path: root/src/char
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-04-15 12:56:09 +0300
committerAndrei Karas <akaras@inbox.ru>2015-04-15 12:56:46 +0300
commit555eb0850d0e46aa25de88c15d2f00fbe62385f5 (patch)
tree305a9ab595692591f4f1be8e633ba2861975c8cc /src/char
parent293793b7027029efc87c8b657a0c45d26e0840c5 (diff)
downloadevol-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.c32
-rw-r--r--src/char/char.h4
-rw-r--r--src/char/init.c3
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);