From 395a2a1a88e9c5663cdcf648097d5c0c215b1608 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 17 Mar 2023 11:42:29 +0800 Subject: [PATCH] 1 --- server/gameserver/gungrasp.cc | 38 ++++++++++++++++++++++++++++------- server/gameserver/gungrasp.h | 6 ++++++ server/gameserver/mt/Grasp.h | 2 +- 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/server/gameserver/gungrasp.cc b/server/gameserver/gungrasp.cc index 136dedf1..4ff035e6 100644 --- a/server/gameserver/gungrasp.cc +++ b/server/gameserver/gungrasp.cc @@ -6,10 +6,13 @@ #include "trigger.h" #include "room.h" #include "effect.h" +#include "weapon.h" +#include "human.h" #include "mt/GraspBuff.h" #include "mt/Grasp.h" #include "mt/Hero.h" +#include "mt/Equip.h" GunGrasp::GunGrasp(Creature* owner) { @@ -22,11 +25,32 @@ GunGrasp::~GunGrasp() void GunGrasp::Init() { - owner_->GetTrigger()->AddListener - ( - kTakeonWeaponEvent, - [this] (const a8::Args& args) mutable - { - } - ); + if (owner_->IsHuman()) { + owner_->GetTrigger()->AddListener + ( + kTakeonWeaponEvent, + [this] (const a8::Args& args) mutable + { + 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); + } + } + } + ); + } +} + +void GunGrasp::Clear() +{ + for (int buff_uniid : hold_buffs_) { + owner_->RemoveBuffByUniId(buff_uniid); + } + hold_buffs_.clear(); } diff --git a/server/gameserver/gungrasp.h b/server/gameserver/gungrasp.h index 3773935e..df0bc43c 100644 --- a/server/gameserver/gungrasp.h +++ b/server/gameserver/gungrasp.h @@ -4,6 +4,7 @@ struct GraspBuff; class Creature; +class Weapon; class GunGrasp { public: @@ -12,6 +13,11 @@ class GunGrasp void Init(); + private: + + void Clear(); + private: Creature* owner_ = nullptr; + std::vector hold_buffs_; }; diff --git a/server/gameserver/mt/Grasp.h b/server/gameserver/mt/Grasp.h index 1be6b128..74bad4d4 100644 --- a/server/gameserver/mt/Grasp.h +++ b/server/gameserver/mt/Grasp.h @@ -17,7 +17,7 @@ namespace mt static void StaticPostInit(); - std::set* GetBuffs(int hero_id, int hero_lv, int gun_id); + static std::set* GetBuffs(int hero_id, int hero_lv, int gun_id); protected: static std::map>> hero_id_lv_gun_hash_;