From 1f10c1e8bf05335ab4377ce592d87c4210c14285 Mon Sep 17 00:00:00 2001 From: oy Date: Thu, 10 Mar 2011 10:14:41 +0100 Subject: fixed problem with ctf if there're no flags --- datasrc/network.py | 7 ++++--- src/game/server/gamemodes/ctf.cpp | 30 ++++++++++++++++++++---------- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/datasrc/network.py b/datasrc/network.py index e30b1a9b..3f5c98a2 100644 --- a/datasrc/network.py +++ b/datasrc/network.py @@ -24,7 +24,8 @@ enum TEAM_RED, TEAM_BLUE, - FLAG_ATSTAND=-2, + FLAG_MISSING=-3, + FLAG_ATSTAND, FLAG_TAKEN, SPEC_FREEVIEW=-1, @@ -117,8 +118,8 @@ Objects = [ NetIntAny("m_TeamscoreRed"), NetIntAny("m_TeamscoreBlue"), - NetIntRange("m_FlagCarrierRed", 'FLAG_ATSTAND', 'MAX_CLIENTS-1'), - NetIntRange("m_FlagCarrierBlue", 'FLAG_ATSTAND', 'MAX_CLIENTS-1'), + NetIntRange("m_FlagCarrierRed", 'FLAG_MISSING', 'MAX_CLIENTS-1'), + NetIntRange("m_FlagCarrierBlue", 'FLAG_MISSING', 'MAX_CLIENTS-1'), ]), NetObject("CharacterCore", [ diff --git a/src/game/server/gamemodes/ctf.cpp b/src/game/server/gamemodes/ctf.cpp index 490067dd..fb177d5d 100644 --- a/src/game/server/gamemodes/ctf.cpp +++ b/src/game/server/gamemodes/ctf.cpp @@ -89,18 +89,28 @@ void CGameControllerCTF::Snap(int SnappingClient) pGameDataObj->m_TeamscoreRed = m_aTeamscore[TEAM_RED]; pGameDataObj->m_TeamscoreBlue = m_aTeamscore[TEAM_BLUE]; - if(m_apFlags[TEAM_RED]->m_AtStand) - pGameDataObj->m_FlagCarrierRed = FLAG_ATSTAND; - else if(m_apFlags[TEAM_RED]->m_pCarryingCharacter && m_apFlags[TEAM_RED]->m_pCarryingCharacter->GetPlayer()) - pGameDataObj->m_FlagCarrierRed = m_apFlags[TEAM_RED]->m_pCarryingCharacter->GetPlayer()->GetCID(); + if(m_apFlags[TEAM_RED]) + { + if(m_apFlags[TEAM_RED]->m_AtStand) + pGameDataObj->m_FlagCarrierRed = FLAG_ATSTAND; + else if(m_apFlags[TEAM_RED]->m_pCarryingCharacter && m_apFlags[TEAM_RED]->m_pCarryingCharacter->GetPlayer()) + pGameDataObj->m_FlagCarrierRed = m_apFlags[TEAM_RED]->m_pCarryingCharacter->GetPlayer()->GetCID(); + else + pGameDataObj->m_FlagCarrierRed = FLAG_TAKEN; + } else - pGameDataObj->m_FlagCarrierRed = FLAG_TAKEN; - if(m_apFlags[TEAM_BLUE]->m_AtStand) - pGameDataObj->m_FlagCarrierBlue = FLAG_ATSTAND; - else if(m_apFlags[TEAM_BLUE]->m_pCarryingCharacter && m_apFlags[TEAM_BLUE]->m_pCarryingCharacter->GetPlayer()) - pGameDataObj->m_FlagCarrierBlue = m_apFlags[TEAM_BLUE]->m_pCarryingCharacter->GetPlayer()->GetCID(); + pGameDataObj->m_FlagCarrierRed = FLAG_MISSING; + if(m_apFlags[TEAM_BLUE]) + { + if(m_apFlags[TEAM_BLUE]->m_AtStand) + pGameDataObj->m_FlagCarrierBlue = FLAG_ATSTAND; + else if(m_apFlags[TEAM_BLUE]->m_pCarryingCharacter && m_apFlags[TEAM_BLUE]->m_pCarryingCharacter->GetPlayer()) + pGameDataObj->m_FlagCarrierBlue = m_apFlags[TEAM_BLUE]->m_pCarryingCharacter->GetPlayer()->GetCID(); + else + pGameDataObj->m_FlagCarrierBlue = FLAG_TAKEN; + } else - pGameDataObj->m_FlagCarrierBlue = FLAG_TAKEN; + pGameDataObj->m_FlagCarrierBlue = FLAG_MISSING; } void CGameControllerCTF::Tick() -- cgit 1.4.1