Bläddra i källkod

- Updated battle_check_target so that non-offensive skills cannot be used on a homun except for the homun and it's master.
- Steal zeny won't work on treasure chests now.
- Small optimization in the dual-wielding check.
- Some cleaning in char_sql/itemdb.c


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

skotlex 18 år sedan
förälder
incheckning
c2794a9e1b
4 ändrade filer med 16 tillägg och 29 borttagningar
  1. 4 0
      Changelog-Trunk.txt
  2. 4 24
      src/char_sql/itemdb.c
  3. 3 1
      src/map/battle.c
  4. 5 4
      src/map/pc.c

+ 4 - 0
Changelog-Trunk.txt

@@ -3,6 +3,10 @@ Date	Added
 AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
+2006/09/26
+	* Updated battle_check_target so that non-offensive skills cannot be used
+	  on a homun except for the homun and it's master. [Skotlex]
+	* Steal zeny won't work on treasure chests now. [Skotlex]
 2006/09/25
 	* Added an ugly check so that Heal will display 0 when healing a berserked
 	  character (and it will again display full heal amount when healing a player

+ 4 - 24
src/char_sql/itemdb.c

@@ -26,29 +26,9 @@ static struct dbt* item_db;
 static void* create_item(DBKey key, va_list args) {
 	struct item_data *id;
 	int nameid = key.i;
-
 	CREATE(id, struct item_data, 1);
-		id->nameid = nameid;
-	if(nameid>500 && nameid<600)
-		id->type=0;   //heal item
-	else if(nameid>600 && nameid<700)
-		id->type=2;   //use item
-	else if((nameid>700 && nameid<1100) ||
-			(nameid>7000 && nameid<8000))
-		id->type=3;   //correction
-	else if(nameid>=1750 && nameid<1771)
-		id->type=10;  //arrow
-	else if(nameid>1100 && nameid<2000)
-		id->type=4;   //weapon
-	else if((nameid>2100 && nameid<3000) ||
-			(nameid>5000 && nameid<6000))
-		id->type=5;   //armor
-	else if(nameid>4000 && nameid<5000)
-		id->type=6;   //card
-	else if(nameid>9000 && nameid<10000)
-		id->type=7;   //egg
-	else if(nameid>10000)
-		id->type=8;   //petequip
+	id->nameid = nameid;
+	id->type = IT_ETC;
 	return id;
 }
 /*==========================================
@@ -67,7 +47,7 @@ struct item_data* itemdb_search(int nameid)
 int itemdb_isequip(int nameid)
 {
 	int type=itemdb_type(nameid);
-	if(type==0 || type==2 || type==3 || type==6 || type==10)
+	if(type==IT_HEALING || type==IT_USABLE || type==IT_ETC || type==IT_CARD || type==IT_AMMO)
 		return 0;
 	return 1;
 }
@@ -79,7 +59,7 @@ int itemdb_isequip2(struct item_data *data)
 {
 	if(data) {
 		int type=data->type;
-		if(type==0 || type==2 || type==3 || type==6 || type==10)
+		if(type==IT_HEALING || type==IT_USABLE || type==IT_ETC || type==IT_CARD || type==IT_AMMO)
 			return 0;
 		else
 			return 1;

+ 3 - 1
src/map/battle.c

@@ -3198,8 +3198,10 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
 				return 0;
 		}
 			break;
-		//Valid targets with no special checks here.
 		case BL_HOM:
+			//Except for the master/itself, hom can't be targetted with non-offensive skills. [Skotlex]
+			if (t_bl != s_bl && !(flag&BCT_ENEMY))
+				return 0;
 			break;
 		//All else not specified is an invalid target.
 		default:	

+ 5 - 4
src/map/pc.c

@@ -3259,6 +3259,9 @@ int pc_steal_coin(struct map_session_data *sd,struct block_list *target)
 	if(md->state.steal_coin_flag || md->sc.data[SC_STONE].timer != -1 || md->sc.data[SC_FREEZE].timer != -1)
 		return 0;
 
+	if (md->class_>=1324 && md->class_<1364)
+		return 0;
+
 	skill = pc_checkskill(sd,RG_STEALCOIN)*10;
 	rate = skill + (sd->status.base_level - md->level)*3 + sd->battle_status.dex*2 + sd->battle_status.luk*2;
 	if(rand()%1000 < rate) {
@@ -6261,10 +6264,8 @@ int pc_equipitem(struct map_session_data *sd,int n,int req_pos)
 			pos = sd->equip_index[EQI_ACC_L] >= 0 ? EQP_ACC_R : EQP_ACC_L;
 	}
 
-	if(pos == EQP_ARMS && id->equip == EQP_HAND_R &&
-		(pc_checkskill(sd, AS_LEFT) > 0 ||
-		(sd->class_&MAPID_UPPERMASK) == MAPID_ASSASSIN)
-	) {	//Dual wield capable weapon.
+	if(pos == EQP_ARMS && id->equip == EQP_HAND_R)
+	{	//Dual wield capable weapon.
 	  	pos = (req_pos&EQP_ARMS);
 		if (pos == EQP_ARMS) //User specified both slots, pick one for them.
 			pos = sd->equip_index[EQI_HAND_R] >= 0 ? EQP_HAND_L : EQP_HAND_R;