diff --git a/server/gameserver/buff.cc b/server/gameserver/buff.cc index 7ead95c..3d7fabd 100644 --- a/server/gameserver/buff.cc +++ b/server/gameserver/buff.cc @@ -178,20 +178,23 @@ void Buff::ProcBecome(Creature* caster) int weapon_id = a8::XValue(strings[i]); MetaData::Equip* weapon_meta = MetaMgr::Instance()->GetEquip(weapon_id); if (weapon_meta && i < caster->weapons.size()) { - Weapon* weapon = &caster->weapons[i]; - hold_weapons_.push_back(*weapon); + int weapon_idx = weapon_meta->GetWeaponIdx(); + if (weapon_idx >= 0 && weapon_idx < caster->weapons.size()) { + Weapon* weapon = &caster->weapons[weapon_idx]; + hold_weapons_.push_back(*weapon); - weapon->weapon_id = weapon_meta->i->id(); - weapon->weapon_lv = 1; - weapon->meta = weapon_meta; - weapon->Recalc(); + weapon->weapon_id = weapon_meta->i->id(); + weapon->weapon_lv = 1; + weapon->meta = weapon_meta; + weapon->Recalc(); #if 1 - weapon->ammo = 10000000; + weapon->ammo = 10000000; #else - weapon->ammo = weapon->GetClipVolume(); + weapon->ammo = weapon->GetClipVolume(); #endif - if (i == 0) { - caster->SetCurrWeapon(weapon); + if (i == 0) { + caster->SetCurrWeapon(weapon); + } } } } diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index 720c66c..e52616a 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -162,6 +162,19 @@ namespace MetaData } } + int Equip::GetWeaponIdx() + { + int weapon_idx = -1; + if (i->equip_type() == EQUIP_TYPE_WEAPON) { + if (i->equip_subtype() == 1) { + return 0; + } else { + return GUN_SLOT1; + } + } + return weapon_idx; + } + void EquipUpgrade::Init() { const int MAX_LV = 20; diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index b2afa1d..93c6ac1 100755 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -69,6 +69,7 @@ namespace MetaData float float_param2 = 0; void Init(); + int GetWeaponIdx(); }; struct EquipUpgrade