diff options
author | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-07-29 03:32:43 +0000 |
---|---|---|
committer | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-07-29 03:32:43 +0000 |
commit | 93c52deb53c4a163e69aeed5fb2af4dba66842c2 (patch) | |
tree | ffc4cda325169043b677a51682f3c6ffae7dcf43 /src/map/battle.c | |
parent | 913faa92611b2cb84b23c5c0296fae6a6e1d4c1f (diff) | |
download | hercules-93c52deb53c4a163e69aeed5fb2af4dba66842c2.tar.gz hercules-93c52deb53c4a163e69aeed5fb2af4dba66842c2.tar.bz2 hercules-93c52deb53c4a163e69aeed5fb2af4dba66842c2.tar.xz hercules-93c52deb53c4a163e69aeed5fb2af4dba66842c2.zip |
- Added A_* constants to identify ammo types.
- Added Ishizu's code to check ammo type on attack. No more using Grenade rounds with Guns.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@7959 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map/battle.c')
-rw-r--r-- | src/map/battle.c | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/src/map/battle.c b/src/map/battle.c index 14d2f6b0e..707cb139b 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -2854,9 +2854,43 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, if (sd) { sd->state.arrow_atk = (sd->status.weapon == W_BOW || (sd->status.weapon >= W_REVOLVER && sd->status.weapon <= W_GRENADE)); - if (sd->state.arrow_atk && sd->equip_index[10]<0) { - clif_arrow_fail(sd,0); - return 0; + if (sd->state.arrow_atk) + { //Recycled damage variable to store index. + damage = sd->equip_index[EQI_AMMO]; + if (damage<0) { + clif_arrow_fail(sd,0); + return 0; + } + //Ammo check by Ishizu-chan + if (sd->inventory_data[damage]) + switch (sd->status.weapon) { + case W_BOW: + if (sd->inventory_data[damage]->look != A_ARROW) { + clif_arrow_fail(sd,0); + return 0; + } + break; + case W_REVOLVER: + case W_RIFLE: + case W_GATLING: + if (sd->inventory_data[damage]->look != A_BULLET) { + clif_arrow_fail(sd,0); + return 0; + } + break; + case W_SHOTGUN: + if (sd->inventory_data[damage]->look != A_SHELL) { + clif_arrow_fail(sd,0); + return 0; + } + break; + case W_GRENADE: + if (sd->inventory_data[damage]->look != A_GRENADE) { + clif_arrow_fail(sd,0); + return 0; + } + break; + } } } |