From cd483b647fb25f9499066e0c0e08b51d3e011f25 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 12 Oct 2022 16:00:46 +0800 Subject: [PATCH] 1 --- server/gameserver/human.cc | 2 +- server/gameserver/skill.cc | 29 +++++++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 5843924c..40074318 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1140,12 +1140,12 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id) hum->dead_timer = nullptr; }); } else { - GetTrigger()->Die(); dead = true; real_dead = true; downed = false; SetHP(0.0f); dead_frameno = room->GetFrameNo(); + GetTrigger()->Die(); OnDie(); KillMgr::Instance()->OnHumanDead(this, &info); room->frame_event.AddDead(GetWeakPtrRef(), 0); diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index 8990bb7d..4b388670 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -750,12 +750,37 @@ void Skill::ProcJYFH() void Skill::ProcFH() { + int relive_times = 0; owner->GetTrigger()->AddListener ( kDieEvent, - [] (const std::vector& params) + [this, relive_times] (const std::vector& params) mutable { - + if (relive_times <= 0) { + ++relive_times; + owner->real_dead = false; + owner->room->xtimer.AddDeadLineTimerAndAttach + ( + meta->number_meta->float_time * 1000 / FRAME_RATE_MS, + a8::XParams() + .SetSender(this), + [] (const a8::XParams& param) + { + Skill* skill = (Skill*)param.sender.GetUserData(); + Creature* owner = skill->owner; + owner->dead = false; + owner->real_dead = false; + owner->downed = false; + owner->SetHP(owner->GetMaxHP() * skill->meta->number_meta->float_ratio2); + owner->SyncAroundPlayers(__FILE__, __LINE__, __func__); + owner->room->frame_event.AddRevive(owner->GetWeakPtrRef()); + }, + &xtimer_attacher.timer_list_, + [] (const a8::XParams& param) + { + } + ); + } } ); }