diff --git a/server/gameserver/buff/cond_add.cc b/server/gameserver/buff/cond_add.cc index 9262c6ce..51397c29 100644 --- a/server/gameserver/buff/cond_add.cc +++ b/server/gameserver/buff/cond_add.cc @@ -68,7 +68,7 @@ void CondAddBuff::ProcBulletHit() (const a8::Args& args) { IBullet* bullet = args.Get(0); - Creature* c = args.Get(0); + Creature* c = args.Get(1); if (context->last_hit_frameno > 0 && c->room->GetFrameNo() - context->last_hit_frameno > interval_time * SERVER_FRAME_RATE) { context->hited_times = 0; diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 03fd2bd3..314303a7 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -2732,6 +2732,7 @@ void Creature::OnLand() } } } + gun_grasp_->Init(); } void Creature::CheckBulletHitHoldShield(IBullet* bullet, bool& eat) @@ -3027,5 +3028,4 @@ float Creature::GetSkillRaycastDistance() void Creature::NetInitOk() { - gun_grasp_->Init(); } diff --git a/server/gameserver/gungrasp.cc b/server/gameserver/gungrasp.cc index 4ff035e6..b27cc144 100644 --- a/server/gameserver/gungrasp.cc +++ b/server/gameserver/gungrasp.cc @@ -26,6 +26,7 @@ GunGrasp::~GunGrasp() void GunGrasp::Init() { if (owner_->IsHuman()) { + TakeOnWeapon(owner_->GetCurrWeapon()); owner_->GetTrigger()->AddListener ( kTakeonWeaponEvent, @@ -33,15 +34,7 @@ void GunGrasp::Init() { Weapon* old_weapon = args.Get(0); Weapon* new_weapon = args.Get(1); - std::set* buffs = mt::Grasp::GetBuffs(owner_->AsHuman()->meta->id(), - owner_->GetBattleContext()->GetLevel(), - new_weapon->meta->id()); - Clear(); - if (buffs) { - for (int buff_id : *buffs) { - owner_->TryAddBuff(owner_, buff_id, nullptr); - } - } + TakeOnWeapon(new_weapon); } ); } @@ -54,3 +47,16 @@ void GunGrasp::Clear() } hold_buffs_.clear(); } + +void GunGrasp::TakeOnWeapon(Weapon* weapon) +{ + std::set* buffs = mt::Grasp::GetBuffs(owner_->AsHuman()->meta->id(), + owner_->GetBattleContext()->GetLevel(), + weapon->meta->id()); + Clear(); + if (buffs) { + for (int buff_id : *buffs) { + owner_->TryAddBuff(owner_, buff_id, nullptr); + } + } +} diff --git a/server/gameserver/gungrasp.h b/server/gameserver/gungrasp.h index df0bc43c..6c2766dc 100644 --- a/server/gameserver/gungrasp.h +++ b/server/gameserver/gungrasp.h @@ -16,6 +16,7 @@ class GunGrasp private: void Clear(); + void TakeOnWeapon(Weapon* weapon); private: Creature* owner_ = nullptr; diff --git a/server/gameserver/trigger.cc b/server/gameserver/trigger.cc index dc509619..a00f3a8b 100644 --- a/server/gameserver/trigger.cc +++ b/server/gameserver/trigger.cc @@ -439,6 +439,9 @@ void Trigger::DispatchEvent(int event_id, const std::vector& param) void Trigger::BulletHit(IBullet* bullet, Creature* target) { if (bullet->GetSender().Get()) { + if (bullet->GetSender().Get()->IsPlayer()) { + int i = 0; + } bullet->GetSender().Get()->GetTrigger()->DispatchEvent(kBulletHitEvent, {bullet, target}); } }