From ba66001914d104d1b240a3c9dbc0a17c8f9f8058 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 10 Oct 2023 13:52:36 +0800 Subject: [PATCH] 1 --- server/gameserver/human.cc | 66 ++++++++++++++++++++----------------- server/gameserver/player.cc | 4 ++- 2 files changed, 38 insertions(+), 32 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 3c369a10..608c29ae 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -3391,38 +3391,42 @@ void Human::InternalBeKill(int killer_id, const std::string& killer_name, int we 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(); + dead_frameno = room->GetFrameNo(); + GetTrigger()->Die(killer_id, weapon_id); + OnDie(); + KillMgr::Instance()->OnHumanDead(this, &info); + room->frame_event.AddDead(GetWeakPtrRef(), mt::Param::s().pvp_revive_time); + a8::SetBitFlag(status, CS_Reviving); + dead_timer = room->xtimer.SetTimeoutWpEx + (mt::Param::s().pvp_revive_time * SERVER_FRAME_RATE, + [this] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + if (!room->IsGameOver()) { + if (dead) { + a8::UnSetBitFlag(status, CS_Reviving); + ++stats->revive; + dead = false; + real_dead = false; + downed = false; + SetHP(GetMaxHP()); + SyncAroundPlayers(__FILE__, __LINE__, __func__); + room->frame_event.AddRevive(GetWeakPtrRef()); + { + int buff_uniid = TryAddBuff(this, kInvincibleBuffId); + if (buff_uniid) { + Buff* buff = GetBuffByUniId(buff_uniid); + if (buff) { + room->xtimer.ModifyTime(buff->remover_timer, 6 * SERVER_FRAME_RATE); + } + } + } } - }, - &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); - } + } + } + }, + &xtimer_attacher); + ++revive_count; } else { if (room->GetGasData().old_area_meta && room->GetGasData().old_area_meta->CanRevive() && diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index a655260b..edfeb438 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -1271,7 +1271,9 @@ void Player::_CMGameOver(f8::MsgHdr& hdr, const cs::CMGameOver& msg) void Player::_CMWatchWar(f8::MsgHdr& hdr, const cs::CMWatchWar& msg) { - AsyncRequestWatchWar(true); + if (!room->IsMobaModeRoom()) { + AsyncRequestWatchWar(true); + } } void Player::_CMLeave(f8::MsgHdr& hdr, const cs::CMLeave& msg)