修复宕机问题
This commit is contained in:
parent
0940d8be4c
commit
7262f36d42
@ -156,7 +156,12 @@ void Human::FillMFObjectFull(cs::MFObjectFull* full_data)
|
||||
p->set_can_revive(false);
|
||||
} else {
|
||||
p->set_can_revive(true);
|
||||
int countdown = std::ceil(room->xtimer.GetRemainTime(revive_timer) / SERVER_FRAME_RATE);
|
||||
int countdown = 0;
|
||||
if (revive_timer) {
|
||||
countdown = std::ceil(room->xtimer.GetRemainTime(revive_timer) / SERVER_FRAME_RATE);
|
||||
} else {
|
||||
a8::UdpLog::Instance()->Warning("Human::FillMFObjectfull revive_timer == nullptr", {});
|
||||
}
|
||||
countdown = std::max(0, countdown - kReviveTimeAdd);
|
||||
p->set_revive_countdown(countdown);
|
||||
}
|
||||
@ -827,13 +832,15 @@ void Human::DecHP(float dec_hp, int killer_id, const std::string& killer_name, i
|
||||
{
|
||||
Human* hum = (Human*)param.sender.GetUserData();
|
||||
if (!hum->downed) {
|
||||
hum->room->xtimer.DeleteTimer(hum->downed_timer);
|
||||
hum->FreeDownedTimer();
|
||||
return;
|
||||
}
|
||||
if (hum->dead) {
|
||||
hum->FreeDownedTimer();
|
||||
return;
|
||||
}
|
||||
if (!hum->HasLiveTeammate()) {
|
||||
hum->FreeDownedTimer();
|
||||
hum->BeKill(param.param1, param.param2, param.param3);
|
||||
return;
|
||||
}
|
||||
@ -2446,6 +2453,22 @@ void Human::OnDie()
|
||||
DeadDrop();
|
||||
}
|
||||
|
||||
void Human::FreeDownedTimer()
|
||||
{
|
||||
if (downed_timer) {
|
||||
room->xtimer.DeleteTimer(downed_timer);
|
||||
downed_timer = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void Human::FreeReviveTimer()
|
||||
{
|
||||
if (revive_timer) {
|
||||
room->xtimer.DeleteTimer(revive_timer);
|
||||
revive_timer = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void Human::Revive()
|
||||
{
|
||||
auto callback =
|
||||
|
@ -216,6 +216,8 @@ class Human : public Entity
|
||||
int SkinLv();
|
||||
void CheckSkinTank();
|
||||
void OnDie();
|
||||
void FreeDownedTimer();
|
||||
void FreeReviveTimer();
|
||||
|
||||
protected:
|
||||
void _UpdateMove(int speed);
|
||||
|
@ -1089,16 +1089,13 @@ void Player::_CMRevive(f8::MsgHdr& hdr, const cs::CMRevive& msg)
|
||||
}
|
||||
if (dead && !real_dead && revive_timer) {
|
||||
dead = false;
|
||||
real_dead = false;
|
||||
downed = false;
|
||||
if (downed_timer) {
|
||||
room->xtimer.DeleteTimer(downed_timer);
|
||||
downed_timer = nullptr;
|
||||
}
|
||||
FreeDownedTimer();
|
||||
health = GetMaxHP();
|
||||
ResetTankSkin();
|
||||
SyncAroundPlayers(__FILE__, __LINE__, __func__);
|
||||
room->xtimer.DeleteTimer(revive_timer);
|
||||
revive_timer = nullptr;
|
||||
FreeReviveTimer();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1108,8 +1105,8 @@ void Player::_CMCancelRevive(f8::MsgHdr& hdr, const cs::CMCancelRevive& msg)
|
||||
dead = true;
|
||||
real_dead = true;
|
||||
downed = false;
|
||||
FreeDownedTimer();
|
||||
OnDie();
|
||||
room->xtimer.DeleteTimer(revive_timer);
|
||||
revive_timer = nullptr;
|
||||
FreeReviveTimer();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user