diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index c93383fb..5843924c 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1114,7 +1114,7 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id) { Entity* killer = room->GetEntityByUniId(killer_id); if (killer && killer->IsCreature(room)) { - ((Creature*)killer)->GetTrigger()->Kill(this); + ((Creature*)killer)->GetTrigger()->Kill(this, weapon_id); } } if (room->IsPveRoom()){ diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index b42502cf..82becc17 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -418,6 +418,14 @@ void Skill::ProcJSHX() kKillEvent, [this] (const std::vector& params) { + int weapon_id = std::any_cast(params.at(2)); + if (owner->GetCurrWeapon()->meta->i->id() != weapon_id) { + return; + } + if (!owner->GetCurrWeapon()->skill_meta || + owner->GetCurrWeapon()->skill_meta->GetMagicId() != MAGIC_HLYZ) { + return; + } if (!owner->dead) { float add_hp = SkillHelper::GetJshxHp(owner, meta); float real_add_hp = std::max(0.0f, std::min(owner->GetMaxHP() - owner->GetHP(), add_hp)); diff --git a/server/gameserver/trigger.cc b/server/gameserver/trigger.cc index e4ae8c0d..8137b0e0 100644 --- a/server/gameserver/trigger.cc +++ b/server/gameserver/trigger.cc @@ -129,7 +129,7 @@ void Trigger::Shot(MetaData::Equip* weapon_meta) } } -void Trigger::Kill(Creature* target) +void Trigger::Kill(Creature* target, int weapon_id) { if (owner_->IsHuman() && target->IsHuman()) { owner_->AsHuman()->stats.kills++; @@ -149,7 +149,7 @@ void Trigger::Kill(Creature* target) AddBuffs(buff->meta->int_param1, buff->meta->param4_int_list); } }); - DispatchEvent(kKillEvent, {kill_num_, target}); + DispatchEvent(kKillEvent, {kill_num_, target, weapon_id}); } void Trigger::UseItemAction(int slot_id) diff --git a/server/gameserver/trigger.h b/server/gameserver/trigger.h index 5b1ef8e8..ae397850 100644 --- a/server/gameserver/trigger.h +++ b/server/gameserver/trigger.h @@ -55,7 +55,7 @@ public: Creature* GetOwner() { return owner_; }; void TakeonWeapon(Weapon* old_weapon, Weapon* new_weapon); void Shot(MetaData::Equip* weapon_meta); - void Kill(Creature* target); + void Kill(Creature* target, int weapon_id); void UseItemAction(int slot_id); void UseSkill(Skill* skill); void HpChg();