From c194c7e71076bc458b8ee2538175d68568355197 Mon Sep 17 00:00:00 2001 From: trml Date: Tue, 31 Aug 2021 00:05:56 +0200 Subject: [PATCH] Send extended entity info --- datasrc/network.py | 9 +++++++++ src/game/server/entities/pickup.cpp | 8 ++++++++ src/game/server/entities/projectile.cpp | 11 +++++++++++ 3 files changed, 28 insertions(+) diff --git a/datasrc/network.py b/datasrc/network.py index 6e8bc643d..99c12e3a2 100644 --- a/datasrc/network.py +++ b/datasrc/network.py @@ -36,6 +36,7 @@ Emoticons = ["OOP", "EXCLAMATION", "HEARTS", "DROP", "DOTDOT", "MUSIC", "SORRY", Powerups = ["HEALTH", "ARMOR", "WEAPON", "NINJA"] Authed = ["NO", "HELPER", "MOD", "ADMIN"] +EntityClasses = ["PICKUP", "PROJECTILE"] RawHeader = ''' @@ -77,6 +78,7 @@ Enums = [ Enum("POWERUP", Powerups), Enum("EMOTICON", Emoticons), Enum("AUTHED", Authed), + Enum("ENTITYCLASS", EntityClasses), ] Flags = [ @@ -313,6 +315,13 @@ Objects = [ NetIntAny("m_Status7"), NetIntAny("m_Status8"), ]), + + # Switch info for map items + NetObjectEx("EntityEx", "entity-ex@netobj.ddnet.tw", [ + NetIntAny("m_SwitchNumber"), + NetIntAny("m_Layer"), + NetIntAny("m_EntityClass"), + ]), ] Messages = [ diff --git a/src/game/server/entities/pickup.cpp b/src/game/server/entities/pickup.cpp index 7e1cbfc85..686da2b25 100644 --- a/src/game/server/entities/pickup.cpp +++ b/src/game/server/entities/pickup.cpp @@ -159,6 +159,14 @@ void CPickup::Snap(int SnappingClient) if(SnappingClient > -1 && (GameServer()->m_apPlayers[SnappingClient]->GetTeam() == -1 || GameServer()->m_apPlayers[SnappingClient]->IsPaused()) && GameServer()->m_apPlayers[SnappingClient]->m_SpectatorID != SPEC_FREEVIEW) Char = GameServer()->GetPlayerChar(GameServer()->m_apPlayers[SnappingClient]->m_SpectatorID); + CNetObj_EntityEx *pEntData = static_cast(Server()->SnapNewItem(NETOBJTYPE_ENTITYEX, GetID(), sizeof(CNetObj_EntityEx))); + if(!pEntData) + return; + + pEntData->m_SwitchNumber = m_Number; + pEntData->m_Layer = m_Layer; + pEntData->m_EntityClass = ENTITYCLASS_PICKUP; + int Tick = (Server()->Tick() % Server()->TickSpeed()) % 11; if(Char && Char->IsAlive() && (m_Layer == LAYER_SWITCH && m_Number > 0 && diff --git a/src/game/server/entities/projectile.cpp b/src/game/server/entities/projectile.cpp index 1abf04c6e..2c525958a 100644 --- a/src/game/server/entities/projectile.cpp +++ b/src/game/server/entities/projectile.cpp @@ -300,6 +300,17 @@ void CProjectile::Snap(int SnappingClient) { float Ct = (Server()->Tick() - m_StartTick) / (float)Server()->TickSpeed(); + if(m_LifeSpan == -2) + { + CNetObj_EntityEx *pEntData = static_cast(Server()->SnapNewItem(NETOBJTYPE_ENTITYEX, GetID(), sizeof(CNetObj_EntityEx))); + if(!pEntData) + return; + + pEntData->m_SwitchNumber = m_Number; + pEntData->m_Layer = m_Layer; + pEntData->m_EntityClass = ENTITYCLASS_PROJECTILE; + } + if(NetworkClipped(SnappingClient, GetPos(Ct))) return;