summaryrefslogtreecommitdiff
path: root/src/map/battle.cpp
diff options
context:
space:
mode:
authorBen Longbons <b.r.longbons@gmail.com>2014-03-31 10:13:41 -0700
committerBen Longbons <b.r.longbons@gmail.com>2014-03-31 10:18:50 -0700
commit993830a5063b8d2af4240ea5bf1c06dfa4f66b7d (patch)
tree9900dab35a49132158c53497f63fbabd1fa6cc9f /src/map/battle.cpp
parent1a651243bb2c8e18baa9aac30ac52a62185074e7 (diff)
downloadtmwa-993830a5063b8d2af4240ea5bf1c06dfa4f66b7d.tar.gz
tmwa-993830a5063b8d2af4240ea5bf1c06dfa4f66b7d.tar.bz2
tmwa-993830a5063b8d2af4240ea5bf1c06dfa4f66b7d.tar.xz
tmwa-993830a5063b8d2af4240ea5bf1c06dfa4f66b7d.zip
Check the equip index array
Diffstat (limited to 'src/map/battle.cpp')
-rw-r--r--src/map/battle.cpp33
1 files changed, 17 insertions, 16 deletions
diff --git a/src/map/battle.cpp b/src/map/battle.cpp
index 49a0538..75ae4f0 100644
--- a/src/map/battle.cpp
+++ b/src/map/battle.cpp
@@ -1306,8 +1306,9 @@ int battle_is_unarmed(dumb_ptr<block_list> bl)
{
dumb_ptr<map_session_data> sd = bl->is_player();
- return (sd->equip_index[EQUIP::SHIELD] == -1
- && sd->equip_index[EQUIP::WEAPON] == -1);
+ int sidx = sd->equip_index_maybe[EQUIP::SHIELD];
+ int widx = sd->equip_index_maybe[EQUIP::WEAPON];
+ return sidx == -1 && widx == -1;
}
else
return 0;
@@ -1426,15 +1427,14 @@ struct Damage battle_calc_pc_weapon_attack(dumb_ptr<block_list> src,
atkmin = atkmin_ = dex; //最低ATKはDEXで初期化?
sd->state.arrow_atk = 0; //arrow_atk初期化
- if (sd->equip_index[EQUIP::WEAPON] >= 0 && sd->inventory_data[sd->equip_index[EQUIP::WEAPON]])
- atkmin =
- atkmin * (80 +
- sd->inventory_data[sd->equip_index[EQUIP::WEAPON]]->wlv * 20) / 100;
- if (sd->equip_index[EQUIP::SHIELD] >= 0 && sd->inventory_data[sd->equip_index[EQUIP::SHIELD]])
- atkmin_ =
- atkmin_ * (80 +
- sd->inventory_data[sd->equip_index[EQUIP::SHIELD]]->wlv * 20) /
- 100;
+
+ int widx = sd->equip_index_maybe[EQUIP::WEAPON];
+ int sidx = sd->equip_index_maybe[EQUIP::SHIELD];
+
+ if (widx >= 0 && sd->inventory_data[widx])
+ atkmin = atkmin * (80 + sd->inventory_data[widx]->wlv * 20) / 100;
+ if (sidx >= 0 && sd->inventory_data[sidx])
+ atkmin_ = atkmin_ * (80 + sd->inventory_data[sidx]->wlv * 20) / 100;
if (sd->status.weapon == ItemLook::BOW)
{ //武器が弓矢の場合
atkmin = watk * ((atkmin < watk) ? atkmin : watk) / 100; //弓用最低ATK計算
@@ -1989,10 +1989,11 @@ ATK battle_weapon_attack(dumb_ptr<block_list> src, dumb_ptr<block_list> target,
// 攻撃対象となりうるので攻撃
if (sd && sd->status.weapon == ItemLook::BOW)
{
- if (sd->equip_index[EQUIP::ARROW] >= 0)
+ int aidx = sd->equip_index_maybe[EQUIP::ARROW];
+ if (aidx >= 0)
{
if (battle_config.arrow_decrement)
- pc_delitem(sd, sd->equip_index[EQUIP::ARROW], 1, 0);
+ pc_delitem(sd, aidx, 1, 0);
}
else
{
@@ -2036,10 +2037,10 @@ ATK battle_weapon_attack(dumb_ptr<block_list> src, dumb_ptr<block_list> target,
if (src->bl_type == BL::PC)
{
- int weapon_index = sd->equip_index[EQUIP::WEAPON];
+ int weapon_index = sd->equip_index_maybe[EQUIP::WEAPON];
int weapon = 0;
- if (sd->inventory_data[weapon_index]
- && bool(sd->status.inventory[weapon_index].equip & EPOS::WEAPON))
+ if (weapon_index >= 0 && sd->inventory_data[weapon_index]
+ && bool(sd->status.inventory[weapon_index].equip & EPOS::WEAPON))
weapon = sd->inventory_data[weapon_index]->nameid;
MAP_LOG("PC%d %s:%d,%d WPNDMG %s%d %d FOR %d WPN %d",