diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index b982061e..7a26e66f 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -3539,7 +3539,7 @@ void Creature::ClearIgnoreTarget() } } -void Creature::SetLastAttacker(CreatureWeakPtr& attacker) +void Creature::SetLastAttacker(CreatureWeakPtr attacker) { last_attacker_ = attacker; last_beattack_frameno_ = room->GetFrameNo(); diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 2bf4ed3e..111f6ed9 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -374,7 +374,7 @@ class Creature : public MoveableEntity void DelIgnoreTarget(int target_uniid); bool IsIgnoreTarget(int target_uniid); void ClearIgnoreTarget(); - void SetLastAttacker(CreatureWeakPtr& attacker); + void SetLastAttacker(CreatureWeakPtr attacker); CreatureWeakPtr& GetLastAttacker() { return last_attacker_; } long long GetLastBeAttackFrameNo() { return last_beattack_frameno_; } int GetLastAttackerReviveTimes() { return last_attacker_revive_times_; } diff --git a/server/gameserver/hero.cc b/server/gameserver/hero.cc index 7d1762b7..138033da 100644 --- a/server/gameserver/hero.cc +++ b/server/gameserver/hero.cc @@ -180,6 +180,7 @@ void Hero::OnBulletHit(IBullet* bullet) float finaly_dmg = bullet->GetSender().Get()->GetBattleContext()->CalcDmg(this, bullet); if (bullet->GetSender().Get()->IsHuman()) { bullet->GetSender().Get()->AsHuman()->stats->damage_amount_out += finaly_dmg; + SetLastAttacker(bullet->GetSender()); } if (bullet->GetBulletMeta()->_buff_meta) { MustBeAddBuff(bullet->GetSender().Get(), bullet->GetBulletMeta()->buffid()); diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 1eb92e31..b5f9f963 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -2300,6 +2300,7 @@ void Human::OnBulletHit(IBullet* bullet) #endif if (bullet->GetSender().Get()) { bullet->GetSender().Get()->GetTrigger()->BulletHit(bullet, this); + SetLastAttacker(bullet->GetSender()); } RemoveBuffByEffectId(kBET_PeaceMode); @@ -2455,6 +2456,7 @@ void Human::OnExplosionHit(Explosion* e) if (e->GetSender().Get()) { real_killer_id = e->GetSender().Get()->GetUniId(); real_killer_name = e->GetSender().Get()->GetName(); + SetLastAttacker(e->GetSender()); } RemoveBuffByEffectId(kBET_PeaceMode);