diff --git a/src/map/clif.c b/src/map/clif.c index 5110ca76be9d2e9eb5706c0ff01e96aa30698ef4..448d1454c3cdb55901787262480ed95ad634d0a4 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -17481,8 +17481,7 @@ void clif_cart_additem_ack(struct map_session_data *sd, int flag) { /* */ unsigned short clif_decrypt_cmd( int cmd, struct map_session_data *sd ) { if( sd ) { - sd->cryptKey = (( sd->cryptKey * clif->cryptKey[1] ) + clif->cryptKey[2]) & 0xFFFFFFFF; - return (cmd ^ ((sd->cryptKey >> 16) & 0x7FFF)); + return (cmd ^ (((( sd->cryptKey * clif->cryptKey[1] ) + clif->cryptKey[2]) >> 16) & 0x7FFF)); } return (cmd ^ (((( clif->cryptKey[0] * clif->cryptKey[1] ) + clif->cryptKey[2]) >> 16) & 0x7FFF)); } @@ -17502,7 +17501,6 @@ unsigned short clif_parse_cmd_optional ( int fd, struct map_session_data *sd ) { cmd = clif->decrypt_cmd( cmd, sd ); if( cmd > MAX_PACKET_DB || packet_db[cmd].len == 0 ) return 0; - RFIFOW(fd, 0) = cmd; } return cmd; @@ -17516,11 +17514,8 @@ unsigned short clif_parse_cmd_decrypt ( int fd, struct map_session_data *sd ) { if (cmd > MAX_PACKET_DB || packet_db[cmd].len == 0 ) return 0; - RFIFOW(fd, 0) = cmd; - return cmd; } - /*========================================== * Main client packet processing function *------------------------------------------*/ @@ -17589,10 +17584,15 @@ int clif_parse(int fd) { return 0; } } - + if ((int)RFIFOREST(fd) < packet_len) return 0; // not enough data received to form the packet + if( cmd != RFIFOW(fd, 0) ) { + RFIFOW(fd, 0) = cmd; + sd->cryptKey = (( sd->cryptKey * clif->cryptKey[1] ) + clif->cryptKey[2]) & 0xFFFFFFFF; + } + if( packet_db[cmd].func == clif->pDebug ) packet_db[cmd].func(fd, sd); else if( packet_db[cmd].func != NULL ) {