From 0121f273112624d531d57fb37cb1bdf9e7c537df Mon Sep 17 00:00:00 2001 From: oy Date: Thu, 16 Dec 2010 03:29:08 +0100 Subject: fixed server crash on too many snap items. Closes #317 --- src/game/server/entities/character.cpp | 38 ++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 18 deletions(-) (limited to 'src/game/server/entities/character.cpp') diff --git a/src/game/server/entities/character.cpp b/src/game/server/entities/character.cpp index 581b0357..e29b778b 100644 --- a/src/game/server/entities/character.cpp +++ b/src/game/server/entities/character.cpp @@ -793,20 +793,22 @@ void CCharacter::Snap(int SnappingClient) if(NetworkClipped(SnappingClient)) return; - CNetObj_Character *Character = static_cast(Server()->SnapNewItem(NETOBJTYPE_CHARACTER, m_pPlayer->GetCID(), sizeof(CNetObj_Character))); + CNetObj_Character *pCharacter = static_cast(Server()->SnapNewItem(NETOBJTYPE_CHARACTER, m_pPlayer->GetCID(), sizeof(CNetObj_Character))); + if(!pCharacter) + return; // write down the m_Core if(!m_ReckoningTick || GameServer()->m_World.m_Paused) { // no dead reckoning when paused because the client doesn't know // how far to perform the reckoning - Character->m_Tick = 0; - m_Core.Write(Character); + pCharacter->m_Tick = 0; + m_Core.Write(pCharacter); } else { - Character->m_Tick = m_ReckoningTick; - m_SendCore.Write(Character); + pCharacter->m_Tick = m_ReckoningTick; + m_SendCore.Write(pCharacter); } // set emote @@ -816,30 +818,30 @@ void CCharacter::Snap(int SnappingClient) m_EmoteStop = -1; } - Character->m_Emote = m_EmoteType; + pCharacter->m_Emote = m_EmoteType; - Character->m_AmmoCount = 0; - Character->m_Health = 0; - Character->m_Armor = 0; + pCharacter->m_AmmoCount = 0; + pCharacter->m_Health = 0; + pCharacter->m_Armor = 0; - Character->m_Weapon = m_ActiveWeapon; - Character->m_AttackTick = m_AttackTick; + pCharacter->m_Weapon = m_ActiveWeapon; + pCharacter->m_AttackTick = m_AttackTick; - Character->m_Direction = m_Input.m_Direction; + pCharacter->m_Direction = m_Input.m_Direction; if(m_pPlayer->GetCID() == SnappingClient) { - Character->m_Health = m_Health; - Character->m_Armor = m_Armor; + pCharacter->m_Health = m_Health; + pCharacter->m_Armor = m_Armor; if(m_aWeapons[m_ActiveWeapon].m_Ammo > 0) - Character->m_AmmoCount = m_aWeapons[m_ActiveWeapon].m_Ammo; + pCharacter->m_AmmoCount = m_aWeapons[m_ActiveWeapon].m_Ammo; } - if (Character->m_Emote == EMOTE_NORMAL) + if(pCharacter->m_Emote == EMOTE_NORMAL) { if(250 - ((Server()->Tick() - m_LastAction)%(250)) < 5) - Character->m_Emote = EMOTE_BLINK; + pCharacter->m_Emote = EMOTE_BLINK; } - Character->m_PlayerState = m_PlayerState; + pCharacter->m_PlayerState = m_PlayerState; } -- cgit 1.4.1