Przeglądaj źródła

- Updated the status change field "option" to an int rather than short. This fixes the option values for xmas/sightblaster not getting set, which could explain why some people crash when equipping weapons while in xmas suit.
- Also did the same to opt3 since the new packet version uses LONG to store the opt3 values.
- Made the clif weapon view function use the EQI constants instead of ints.


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

skotlex 18 lat temu
rodzic
commit
4fe7389fb0
4 zmienionych plików z 14 dodań i 8 usunięć
  1. 4 0
      Changelog-Trunk.txt
  2. 1 1
      src/common/mmo.h
  3. 7 5
      src/map/clif.c
  4. 2 2
      src/map/map.h

+ 4 - 0
Changelog-Trunk.txt

@@ -4,6 +4,10 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2006/11/27
+	* Updated the status change field "option" to an int rather than short.
+	  This fixes the option values for xmas/sightblaster not getting set, which
+	  could explain why some people crash when equipping weapons while in xmas
+	  suit. [Skotlex]
 	* Fixed the Homunculus hungry timer not starting on login. [Skotlex]
 	* Added logging for standard GM commands (/mm /b /kick etc) [KarLaeda]
 	* Some cleanups on the trade_additem function. When specifying a qty of 0,

+ 1 - 1
src/common/mmo.h

@@ -219,7 +219,7 @@ struct mmo_charstatus {
 	short class_;
 	unsigned short status_point,skill_point;
 	int hp,max_hp,sp,max_sp;
-	unsigned short option;
+	unsigned int option;
 	short manner;
 	unsigned char karma;
 	short hair,hair_color,clothes_color;

+ 7 - 5
src/map/clif.c

@@ -871,9 +871,10 @@ void clif_get_weapon_view(TBL_PC* sd, unsigned short *rhand, unsigned short *lha
 	*rhand = sd->status.weapon;
 	*lhand = sd->status.shield;
 #else
-	if (sd->equip_index[9] >= 0 && sd->inventory_data[sd->equip_index[9]]) 
+	if (sd->equip_index[EQI_HAND_R] >= 0 &&
+		sd->inventory_data[sd->equip_index[EQI_HAND_R]]) 
 	{
-		id = sd->inventory_data[sd->equip_index[9]];
+		id = sd->inventory_data[sd->equip_index[EQI_HAND_R]];
 		if (id->view_id > 0)
 			*rhand = id->view_id;
 		else
@@ -881,10 +882,11 @@ void clif_get_weapon_view(TBL_PC* sd, unsigned short *rhand, unsigned short *lha
 	} else
 		*rhand = 0;
 
-	if (sd->equip_index[8] >= 0 && sd->equip_index[8] != sd->equip_index[9]
-			&& sd->inventory_data[sd->equip_index[8]]) 
+	if (sd->equip_index[EQI_HAND_L] >= 0 &&
+		sd->equip_index[EQI_HAND_L] != sd->equip_index[EQI_HAND_R] &&
+		sd->inventory_data[sd->equip_index[EQI_HAND_L]]) 
 	{
-		id = sd->inventory_data[sd->equip_index[8]];
+		id = sd->inventory_data[sd->equip_index[EQI_HAND_L]];
 		if (id->view_id > 0)
 			*lhand = id->view_id;
 		else

+ 2 - 2
src/map/map.h

@@ -419,8 +419,8 @@ struct status_change_entry {
 struct status_change {
 	struct status_change_entry data[MAX_STATUSCHANGE];
 	short count;
-	short opt1,opt2,opt3;
-	unsigned short option;
+	unsigned short opt1,opt2;
+	unsigned int opt3, option; //Note that older packet versions use short here.
 };
 
 struct vending {