diff --git a/src/game/server/gamecontext.cpp b/src/game/server/gamecontext.cpp index 9ae369de8..6f2f66781 100644 --- a/src/game/server/gamecontext.cpp +++ b/src/game/server/gamecontext.cpp @@ -27,7 +27,10 @@ void CGameContext::Construct(int Resetting) m_pServer = 0; for(int i = 0; i < MAX_CLIENTS; i++) + { m_apPlayers[i] = 0; + mem_zero(m_pReconnectInfo[i].Ip,sizeof(m_pReconnectInfo[i].Ip)); + } m_pController = 0; m_VoteCloseTime = 0; @@ -2420,36 +2423,48 @@ IGameServer *CreateGameServer() { return new CGameContext; } bool CGameContext::ClientLeave(int ClientId) { - Server()->GetClientIP(ClientId,m_pReconnectInfo[ClientId].Ip,sizeof(m_pReconnectInfo[ClientId].Ip)); CCharacter *pChr = GetPlayerChar(ClientId); - if(pChr) + for(int i =0;im_Core; - m_pReconnectInfo[ClientId].m_PlayerInfo.m_StartTime = pChr->m_StartTime; - m_pReconnectInfo[ClientId].m_PlayerInfo.m_RaceState = pChr->m_RaceState; - for(int i = 0; i < WEAPON_NINJA; ++i) + dbg_msg("","%d %d %s ",i,m_pReconnectInfo[i].Ip[0],m_pReconnectInfo[i].Ip); + if (m_pReconnectInfo[i].Ip[0] == 0) { - m_pReconnectInfo[ClientId].m_PlayerInfo.m_aHasWeapon[i] = pChr->m_aWeapons[i].m_Got; + Server()->GetClientIP(i,m_pReconnectInfo[i].Ip,sizeof(m_pReconnectInfo[i].Ip)); + if(pChr) + { + m_pReconnectInfo[i].m_PlayerInfo.m_Core = pChr->m_Core; + m_pReconnectInfo[i].m_PlayerInfo.m_StartTime = pChr->m_StartTime; + m_pReconnectInfo[i].m_PlayerInfo.m_RaceState = pChr->m_RaceState; + for(int j = 0; j < WEAPON_NINJA; ++j) + { + m_pReconnectInfo[i].m_PlayerInfo.m_aHasWeapon[j] = pChr->m_aWeapons[j].m_Got; + } + m_pReconnectInfo[i].m_PlayerInfo.m_FreezeTime=pChr->m_FreezeTime; + m_pReconnectInfo[i].m_PlayerInfo.m_Doored = pChr->m_Doored; + m_pReconnectInfo[i].m_PlayerInfo.m_OldPos = pChr->m_OldPos; + m_pReconnectInfo[i].m_PlayerInfo.m_OlderPos = pChr->m_OlderPos; + m_pReconnectInfo[i].m_PlayerInfo.m_LastAction = pChr->m_LastAction; + m_pReconnectInfo[i].m_PlayerInfo.m_Jumped = pChr->m_Jumped; + m_pReconnectInfo[i].m_PlayerInfo.m_Health = pChr->m_Health; + m_pReconnectInfo[i].m_PlayerInfo.m_Armor = pChr->m_Armor; + m_pReconnectInfo[i].m_PlayerInfo.m_PlayerState = pChr->m_PlayerState; + m_pReconnectInfo[i].m_PlayerInfo.m_LastMove = pChr->m_LastMove; + m_pReconnectInfo[i].m_PlayerInfo.m_PrevPos = pChr->m_PrevPos; + m_pReconnectInfo[i].m_PlayerInfo.m_ActiveWeapon = pChr->m_ActiveWeapon; + m_pReconnectInfo[i].m_PlayerInfo.m_LastWeapon = pChr->m_LastWeapon; + m_pReconnectInfo[i].m_PlayerInfo.m_HammerType = pChr->m_HammerType; + m_pReconnectInfo[i].m_PlayerInfo.m_Super = pChr->m_Super; + m_pReconnectInfo[i].m_PlayerInfo.m_PauseTime = Server()->Tick(); + m_pReconnectInfo[i].m_DisconnectTick = Server()->Tick(); + return true; + } + else + { + mem_zero(m_pReconnectInfo[i].Ip,sizeof(m_pReconnectInfo[i].Ip)); + return false; + } } - m_pReconnectInfo[ClientId].m_PlayerInfo.m_FreezeTime=pChr->m_FreezeTime; - m_pReconnectInfo[ClientId].m_PlayerInfo.m_Doored = pChr->m_Doored; - m_pReconnectInfo[ClientId].m_PlayerInfo.m_OldPos = pChr->m_OldPos; - m_pReconnectInfo[ClientId].m_PlayerInfo.m_OlderPos = pChr->m_OlderPos; - m_pReconnectInfo[ClientId].m_PlayerInfo.m_LastAction = pChr->m_LastAction; - m_pReconnectInfo[ClientId].m_PlayerInfo.m_Jumped = pChr->m_Jumped; - m_pReconnectInfo[ClientId].m_PlayerInfo.m_Health = pChr->m_Health; - m_pReconnectInfo[ClientId].m_PlayerInfo.m_Armor = pChr->m_Armor; - m_pReconnectInfo[ClientId].m_PlayerInfo.m_PlayerState = pChr->m_PlayerState; - m_pReconnectInfo[ClientId].m_PlayerInfo.m_LastMove = pChr->m_LastMove; - m_pReconnectInfo[ClientId].m_PlayerInfo.m_PrevPos = pChr->m_PrevPos; - m_pReconnectInfo[ClientId].m_PlayerInfo.m_ActiveWeapon = pChr->m_ActiveWeapon; - m_pReconnectInfo[ClientId].m_PlayerInfo.m_LastWeapon = pChr->m_LastWeapon; - m_pReconnectInfo[ClientId].m_PlayerInfo.m_HammerType = pChr->m_HammerType; - m_pReconnectInfo[ClientId].m_PlayerInfo.m_Super = pChr->m_Super; - m_pReconnectInfo[ClientId].m_PlayerInfo.m_PauseTime = Server()->Tick(); } - m_pReconnectInfo[ClientId].m_DisconnectTick = Server()->Tick(); - return true; } bool CGameContext::ClientEnter(int ClientId) @@ -2496,15 +2511,3 @@ bool CGameContext::ClientEnter(int ClientId) mem_zero(m_pReconnectInfo[i].Ip,sizeof(m_pReconnectInfo[i].Ip)); return false; } - -bool CGameContext::SearchInfo(int ClientId) -{ - char Temp[64]; - Server()->GetClientIP(ClientId,Temp,sizeof(Temp)); - if (!str_comp(Temp,m_pReconnectInfo[ClientId].Ip)) - { - return true; - } - return false; -} - diff --git a/src/game/server/gamecontext.h b/src/game/server/gamecontext.h index a8d84ec57..eb0cae817 100644 --- a/src/game/server/gamecontext.h +++ b/src/game/server/gamecontext.h @@ -212,7 +212,6 @@ public: int m_ClientId; int m_DisconnectTick; }m_pReconnectInfo[MAX_CLIENTS]; - bool SearchInfo(int ClientId); enum { CHAT_ALL=-2,