Browse Source

- added sending a dummy 0x08b9 packet in the char-server, required to support clients from this year.
- added a fix to status_heal to take into account that -int_max == int_max in some architectures, which leads to an infinite loop (bugreport:3410)


git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@14930 54d463be-8e91-2dee-dedb-b68131a5f0ec

Skotlex 14 years ago
parent
commit
ac41a46e44
4 changed files with 23 additions and 0 deletions
  1. 1 0
      Changelog-Trunk.txt
  2. 10 0
      src/char/char.c
  3. 10 0
      src/char_sql/char.c
  4. 2 0
      src/map/status.c

+ 1 - 0
Changelog-Trunk.txt

@@ -1,6 +1,7 @@
 Date	Added
 
 2011/08/10
+	* Added sending a dummy 0x08b9 packet (PIN auth system) in the char-server, required to support clients from this year. [Skotlex]
 	* Updated unitwarp so that an id of "0" causes the script's rid to be warped. This allows OnTouchNPC scripts to warp the monster. [Skotlex]
 	* Updated @warp/@jump commands so that when an invalid tile is specified, a nearby cell is chosen.
 2011/08/06

+ 10 - 0
src/char/char.c

@@ -2223,6 +2223,16 @@ int parse_fromlogin(int fd)
 				{
 					// send characters to player
 					mmo_char_send006b(i, sd);
+#if PACKETVER >=  20110309
+					// PIN code system, disabled
+					WFIFOHEAD(i, 12);
+					WFIFOW(i, 0) = 0x08B9;
+					WFIFOW(i, 2) = 0;
+					WFIFOW(i, 4) = 0;
+					WFIFOL(i, 6) = sd->account_id;
+					WFIFOW(i, 10) = 0;
+					WFIFOSET(i, 12);
+#endif
 				}
 			}
 			RFIFOSKIP(fd,62);

+ 10 - 0
src/char_sql/char.c

@@ -1942,6 +1942,16 @@ int parse_fromlogin(int fd)
 				{
 					// send characters to player
 					mmo_char_send006b(i, sd);
+#if PACKETVER >=  20110309
+					// PIN code system, disabled
+					WFIFOHEAD(i, 12);
+					WFIFOW(i, 0) = 0x08B9;
+					WFIFOW(i, 2) = 0;
+					WFIFOW(i, 4) = 0;
+					WFIFOL(i, 6) = sd->account_id;
+					WFIFOW(i, 10) = 0;
+					WFIFOSET(i, 12);
+#endif
 				}
 			}
 			RFIFOSKIP(fd,62);

+ 2 - 0
src/map/status.c

@@ -869,6 +869,7 @@ int status_heal(struct block_list *bl,int hp,int sp, int flag)
 		sc = NULL;
 
 	if (hp < 0) {
+		if (hp == INT_MIN) hp++; //-INT_MIN == INT_MIN in some architectures!
 		status_damage(NULL, bl, -hp, 0, 0, 1);
 		hp = 0;
 	}
@@ -882,6 +883,7 @@ int status_heal(struct block_list *bl,int hp,int sp, int flag)
 	}
 
 	if(sp < 0) {
+		if (sp==INT_MIN) sp++;
 		status_damage(NULL, bl, 0, -sp, 0, 1);
 		sp = 0;
 	}