From db4bf8d09b97e6320374a6162815c03952624eea Mon Sep 17 00:00:00 2001 From: skotlex Date: Tue, 26 Sep 2006 13:59:21 +0000 Subject: - 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://rathena.svn.sourceforge.net/svnroot/rathena/trunk@8875 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 4 ++++ src/char_sql/itemdb.c | 28 ++++------------------------ src/map/battle.c | 4 +++- src/map/pc.c | 9 +++++---- 4 files changed, 16 insertions(+), 29 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 0536cbfa7..5c0d28ccf 100644 --- a/Changelog-Trunk.txt +++ b/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 diff --git a/src/char_sql/itemdb.c b/src/char_sql/itemdb.c index a8148f866..e3d37ca85 100644 --- a/src/char_sql/itemdb.c +++ b/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; diff --git a/src/map/battle.c b/src/map/battle.c index 6d000c46b..db50d4db4 100644 --- a/src/map/battle.c +++ b/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: diff --git a/src/map/pc.c b/src/map/pc.c index 7287c0c81..cb641b3cf 100644 --- a/src/map/pc.c +++ b/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; -- cgit v1.2.3-70-g09d2