From aa7be551cdc989c841d5f2fb483bc9a7f35c03e3 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 2 Oct 2023 21:08:07 +0800 Subject: [PATCH] 1 --- server/gameserver/human.cc | 39 +++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index baad5958..3c369a10 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -3386,7 +3386,44 @@ void Human::InternalBeKill(int killer_id, const std::string& killer_name, int we KillMgr::Instance()->OnHumanDead(this, &info); room->frame_event.AddDead(GetWeakPtrRef(), 0); } - } else { + } else if (room->IsMobaModeRoom()) { + dead = true; + real_dead = false; + downed = false; + SetHP(0.0f); + if (real_killer_id != GetUniId() && GetTeam() && GetTeam()->HasReviveCoin(this)) { + real_dead = true; + dead_frameno = room->GetFrameNo(); + GetTrigger()->Die(killer_id, weapon_id); + if (real_dead) { + real_dead = false; + OnDie(); + KillMgr::Instance()->OnHumanDead(this, &info); + room->frame_event.AddDead(GetWeakPtrRef(), 1000 * mt::Param::s().revive_time); + dead_timer = room->xtimer.SetTimeoutWpEx + (mt::Param::s().revive_time * SERVER_FRAME_RATE, + [this] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + real_dead = true; + SendGameOver(); + } + }, + &xtimer_attacher); + } else { + OnDie(); + KillMgr::Instance()->OnHumanDead(this, &info); + room->frame_event.AddDead(GetWeakPtrRef(), 0); + } + } else { + real_dead = true; + dead_frameno = room->GetFrameNo(); + GetTrigger()->Die(killer_id, weapon_id); + OnDie(); + KillMgr::Instance()->OnHumanDead(this, &info); + room->frame_event.AddDead(GetWeakPtrRef(), 0); + } + } else { if (room->GetGasData().old_area_meta && room->GetGasData().old_area_meta->CanRevive() && revive_count < mt::Param::s().revive_count) {