From 33eac34743b864da72424cd0c52d1280ff8fce50 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Sep 2022 16:02:21 +0800 Subject: [PATCH] 1 --- server/gameserver/bullet.cc | 2 ++ server/gameserver/creature.cc | 27 +++++++++++++++++++++++++++ server/gameserver/creature.h | 1 + 3 files changed, 30 insertions(+) diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 5cb28cf5..3f7d8a12 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -620,6 +620,7 @@ void Bullet::Check(float distance) Creature* c = (Creature*)param.sender.GetUserData(); c->DecDisableMoveTimes(); c->DecDisableAttackDirTimes(); + c->RemoveBuffById(kKeepShotAnimiBuffId); }, &sender.Get()->xtimer_attacher.timer_list_ ); @@ -828,6 +829,7 @@ void Bullet::ProcFlyHook(Entity* target) }, &sender.Get()->xtimer_attacher.timer_list_ ); + sender.Get()->RemoveBuffById(kKeepShotAnimiBuffId); } void Bullet::ForceRemove() diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 9dd48d99..19546bd8 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -402,6 +402,9 @@ void InternalShot(Creature* c, delete bullet_info; } ); + if (skill_meta && skill_meta->GetMagicId() == MAGIC_FG) { + c->TryDelayAddBuff(c, kKeepShotAnimiBuffId, shot_animi_time); + } } } c->GetTrigger()->Shot(weapon_meta); @@ -669,6 +672,30 @@ int Creature::TryAddBuff(Creature* caster, int buff_id) return -1; } +void Creature::TryDelayAddBuff(Creature* caster, int buff_id, int time) +{ + MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id); + if (buff_meta) { + room->xtimer.AddDeadLineTimerAndAttach + ( + time / FRAME_RATE_MS, + a8::XParams() + .SetSender(this) + .SetParam1(caster->GetUniId()) + .SetParam2(buff_id), + [] (const a8::XParams& param) + { + Creature* c = (Creature*)param.sender.GetUserData(); + Entity* e = c->room->GetEntityByUniId(param.param1); + if (e->IsCreature(c->room) && !c->IsDead(c->room)) { + c->TryAddBuff((Creature*)e, param.param2); + } + }, + &xtimer_attacher.timer_list_ + ); + } +} + int Creature::TryAddBuffWithTarget(Creature* caster, int buff_id) { MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id); diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index be5ec490..ad363240 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -136,6 +136,7 @@ class Creature : public MoveableEntity bool no_check_immune = false); bool IsImmuneBuffEffect(int buff_effect); int MustBeAddBuff(Creature* caster, int buff_id); + void TryDelayAddBuff(Creature* caster, int buff_id, int time); int TryAddBuff(Creature* caster, int buff_id); int TryAddBuffWithTarget(Creature* caster, int buff_id); void RemoveBuffById(int buff_id);