From 700795c533013d3abd057ea9b86d5aa3087ac504 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 23 Feb 2023 14:11:08 +0800 Subject: [PATCH] 1 --- server/gameserver/gungrasp.cc | 29 ++++++++++++++++++++++++++--- server/gameserver/gungrasp.h | 4 ++++ server/gameserver/mt/GraspBuff.cc | 2 +- server/gameserver/mt/GraspBuff.h | 2 +- 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/server/gameserver/gungrasp.cc b/server/gameserver/gungrasp.cc index 4eb87931..e7798303 100644 --- a/server/gameserver/gungrasp.cc +++ b/server/gameserver/gungrasp.cc @@ -4,6 +4,7 @@ #include "creature.h" #include "battledatacontext.h" #include "trigger.h" +#include "room.h" #include "mt/GraspBuff.h" #include "mt/Grasp.h" @@ -14,6 +15,7 @@ struct GraspBuff list_head entry; std::tuple buffs; std::function on_remove; + a8::Attacher xtimer_attacher; void ProcSignet(GunGrasp* gun_grasp, int count) { @@ -21,6 +23,20 @@ struct GraspBuff const mt::GraspBuff* buff2_meta = std::get<1>(buffs); if (buff1_meta && buff2_meta) { gun_grasp->AddSignet(buff1_meta->graspbuff_id(), count); + if (buff1_meta) { + int buff_time = buff1_meta->GetBuffTime(gun_grasp->GetHeroLv()); + if (buff_time < 9999) { + gun_grasp->GetOwner()->room->xtimer.SetTimeoutEx + ( + buff_time * SERVER_FRAME_RATE, + [] (int event, const a8::Args* args) + { + + }, + &xtimer_attacher); + } + } + } else { } } @@ -47,13 +63,12 @@ void GunGrasp::Clear() void GunGrasp::InstallTriggers() { Clear(); - int hero_lv = 0; int hero_quality = 0; - owner_->GetBattleContext()->GetHeroLvQuality(hero_lv, hero_quality); + owner_->GetBattleContext()->GetHeroLvQuality(hero_lv_, hero_quality); if (owner_->GetHeroMeta()) { mt::GraspBuffs* buffs = mt::Grasp::GetGrasp (owner_->GetHeroMeta()->id(), - hero_lv, + hero_lv_, owner_->GetCurrWeapon()->weapon_id); if (buffs) { for (auto& tuple : *buffs) { @@ -150,6 +165,14 @@ void GunGrasp::AddSignet(int id, int count) } } +void GunGrasp::RemoveSignet(int id, int count) +{ + auto itr = signet_hash_.find(id); + if (itr != signet_hash_.end()) { + itr->second = std::max(0, itr->second - count); + } +} + int GunGrasp::GetSignetCount(int id) { auto itr = signet_hash_.find(id); diff --git a/server/gameserver/gungrasp.h b/server/gameserver/gungrasp.h index 302e5d28..4b75eea1 100644 --- a/server/gameserver/gungrasp.h +++ b/server/gameserver/gungrasp.h @@ -11,7 +11,10 @@ class GunGrasp void Clear(); void InstallTriggers(); void AddSignet(int id, int count); + void RemoveSignet(int id, int count); bool HasBulletBlockBuff(); + Creature* GetOwner() { return owner_; } + int GetHeroLv() { return hero_lv_; } private: void ProcHit(GraspBuff* buff); @@ -24,6 +27,7 @@ class GunGrasp private: Creature* owner_ = nullptr; + int hero_lv_ = 0; std::map signet_hash_; std::array grasp_triggers_ = {}; }; diff --git a/server/gameserver/mt/GraspBuff.cc b/server/gameserver/mt/GraspBuff.cc index 9240c911..f923e17a 100644 --- a/server/gameserver/mt/GraspBuff.cc +++ b/server/gameserver/mt/GraspBuff.cc @@ -67,7 +67,7 @@ namespace mt } - int GraspBuff::GetBuffTime(int hero_lv) + int GraspBuff::GetBuffTime(int hero_lv) const { switch (hero_lv) { case 10: diff --git a/server/gameserver/mt/GraspBuff.h b/server/gameserver/mt/GraspBuff.h index 833a40f2..cd1ea960 100644 --- a/server/gameserver/mt/GraspBuff.h +++ b/server/gameserver/mt/GraspBuff.h @@ -17,7 +17,7 @@ namespace mt int _trigger_type = 0; int _trigger_subtype = 0; std::vector _trigger_cond; - int GetBuffTime(int hero_lv); + int GetBuffTime(int hero_lv) const; private: std::vector _buff_times;