This commit is contained in:
aozhiwei 2023-02-23 14:11:08 +08:00
parent a82513cd61
commit 700795c533
4 changed files with 32 additions and 5 deletions

View File

@ -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<const mt::GraspBuff*, const mt::GraspBuff*> buffs;
std::function<void()> 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);

View File

@ -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<int, int> signet_hash_;
std::array<list_head, (int)GraspBuffTrigger_e::kEnd> grasp_triggers_ = {};
};

View File

@ -67,7 +67,7 @@ namespace mt
}
int GraspBuff::GetBuffTime(int hero_lv)
int GraspBuff::GetBuffTime(int hero_lv) const
{
switch (hero_lv) {
case 10:

View File

@ -17,7 +17,7 @@ namespace mt
int _trigger_type = 0;
int _trigger_subtype = 0;
std::vector<int> _trigger_cond;
int GetBuffTime(int hero_lv);
int GetBuffTime(int hero_lv) const;
private:
std::vector<int> _buff_times;