summaryrefslogtreecommitdiff
path: root/src/map/battle.c
diff options
context:
space:
mode:
authorskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-07-29 03:32:43 +0000
committerskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-07-29 03:32:43 +0000
commit93c52deb53c4a163e69aeed5fb2af4dba66842c2 (patch)
treeffc4cda325169043b677a51682f3c6ffae7dcf43 /src/map/battle.c
parent913faa92611b2cb84b23c5c0296fae6a6e1d4c1f (diff)
downloadhercules-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.c40
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;
+ }
}
}