diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 767d15a..0314f4a 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -272,19 +272,32 @@ long long Human::GetDeadFrameNo(Room* room) return dead_frameno; } +long long Human::GetRealDeadFrameNo(Room* room) +{ + return real_dead_frameno; +} + void Human::FillMFTeamData(cs::MFTeamData* team_data, bool is_game_over) { { last_sync_teamdata_frameno_ = room->GetFrameNo(); + team_data->set_player_id(GetEntityUniId()); - team_data->set_name(name); - TypeConvert::ToPb(GetPos(), team_data->mutable_pos()); - TypeConvert::ToPb(attack_dir, team_data->mutable_dir()); - team_data->set_health(GetHP()); - team_data->set_max_health(GetMaxHP()); - team_data->set_disconnected(false); - team_data->set_dead(dead); - team_data->set_downed(downed); + if (!real_dead || room->GetFrameNo() - GetRealDeadFrameNo(room) < 4) { + TypeConvert::ToPb(GetPos(), team_data->mutable_pos()); + TypeConvert::ToPb(attack_dir, team_data->mutable_dir()); + team_data->set_health(GetHP()); + team_data->set_max_health(GetMaxHP()); + team_data->set_dead(dead); + team_data->set_downed(downed); + } + + if (room->GetGasData().gas_mode != GasInactive && + room->GetFrameNo() - room->GetBattleStartFrameNo() < 4) { + team_data->set_name(name); + team_data->set_disconnected(socket_handle == 0); + } + if (is_game_over) { team_data->set_account_id(account_id); team_data->set_avatar_url(avatar_url); @@ -2394,6 +2407,7 @@ void Human::FindLocationWithTarget(Entity* target) void Human::OnDie() { + real_dead_frameno_ = room->GetFrameNo(); room->OnHumanDie(this); SyncAroundPlayers(__FILE__, __LINE__, __func__); if (team_members) { diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 7615d56..1d2026a 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -94,6 +94,7 @@ class Human : public MoveableEntity bool aiming = false; bool dead = false; long long dead_frameno = 0; + long long real_dead_frameno = 0; Weapon default_weapon; Weapon tank_weapon; @@ -157,6 +158,7 @@ class Human : public MoveableEntity virtual void GetAabbBox(AabbCollider& aabb_box); virtual bool IsDead(Room* room) override; virtual long long GetDeadFrameNo(Room* room) override; + long long GetRealDeadFrameNo(Room* room); void FillMFTeamData(cs::MFTeamData* team_data, bool is_game_over); void Shot(a8::Vec2& target_dir); void TankShot(a8::Vec2& target_dir);