viewing paste Unknown #6733 | Diff

Posted on the
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
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 ) {
 
Viewed 287 times, submitted by unknown.