This commit is contained in:
aozhiwei 2023-10-10 13:52:36 +08:00
parent 341329b607
commit ba66001914
2 changed files with 38 additions and 32 deletions

View File

@ -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() &&

View File

@ -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)