Explorar o código

- battle_check_target will now tag homunculus as invalid target when the source is a skill-type object.
- Added a check on pc_equipitem so that when the client specifies to equip a weapon on the right hand when the left hand is available, the weapon will be sent to the left hand instead (when dual-wielding is possible, obviously). Same for the left/right accessories.


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

skotlex %!s(int64=19) %!d(string=hai) anos
pai
achega
b7bdc0faaa
Modificáronse 3 ficheiros con 21 adicións e 2 borrados
  1. 6 0
      Changelog-Trunk.txt
  2. 5 1
      src/map/battle.c
  3. 10 1
      src/map/pc.c

+ 6 - 0
Changelog-Trunk.txt

@@ -4,6 +4,12 @@ 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/07/21
+	* battle_check_target will now tag homunculus as invalid target when the
+	  source is a skill-type object. [Skotlex]
+	* Added a check on pc_equipitem so that when the client specifies to equip
+	  a weapon on the right hand when the left hand is available, the weapon will
+	  be sent to the left hand instead (when dual-wielding is possible,
+	  obviously). Same for the left/right accessories. [Skotlex]
 	* Added the necessary checks so that Suiton makes Fogwall have double
 	  duration, and to make water-requiring skills to consume their cells.
 	  [Skotlex]

+ 5 - 1
src/map/battle.c

@@ -3082,7 +3082,11 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
 			return 0; //Pets cannot be targetted.
 		}
 		case BL_HOMUNCULUS:
-		{	//Just fallback on master.
+		{	
+			 //For some mysterious reason ground-skills can't target homun.
+			if (src->type == BL_SKILL)
+				return 0;
+			//Just fallback on master.
 			t_bl=(struct block_list *)((TBL_HOMUNCULUS*)target)->master;
 			break;
 		}

+ 10 - 1
src/map/pc.c

@@ -6192,6 +6192,11 @@ int pc_equipitem(struct map_session_data *sd,int n,int req_pos)
 		pos = req_pos&EQP_ACC;
 		if (pos == EQP_ACC) //User specified both slots.. 
 			pos = sd->equip_index[EQI_ACC_L] >= 0 ? EQP_ACC_R : EQP_ACC_L;
+		if (pos == EQP_ACC_L && 
+			sd->equip_index[EQI_ACC_L] >= 0 &&
+			sd->equip_index[EQI_ACC_R] < 0
+		)	//Requesting to reequip on left when right is available?
+			pos = EQP_ACC_R;
 	}
 
 	if(pos == EQP_WEAPON && id->equip == EQP_HAND_R &&
@@ -6201,8 +6206,12 @@ int pc_equipitem(struct map_session_data *sd,int n,int req_pos)
 	  	pos = (req_pos&EQP_WEAPON);
 		if (pos == EQP_WEAPON) //User specified both slots, pick one for them.
 			pos = sd->equip_index[EQI_HAND_R] >= 0 ? EQP_HAND_L : EQP_HAND_R;
+		if (pos == EQP_HAND_R && 
+			sd->equip_index[EQI_HAND_R] >= 0 &&
+			sd->equip_index[EQI_HAND_L] < 0
+		)	//Requesting to reequip on right when left is available?
+			pos = EQP_HAND_L;
 	}
-	
 
 	if (pos&EQP_HAND_R && battle_config.use_weapon_skill_range)
 	{	//Update skill-block range database when weapon range changes. [Skotlex]