Move m_pLoadBestTimeResult to IGameController

Gets rid of more CGameControllerDDRace casts.
Those did not show up during compile time only during runtime
of another active controller when asan is active.
This commit is contained in:
ChillerDragon 2023-11-19 16:19:47 +01:00
parent 4d00e8c0e3
commit 16c5a60b53
7 changed files with 31 additions and 30 deletions

View file

@ -953,7 +953,7 @@ void CGameContext::UnlockTeam(int ClientID, int Team)
void CGameContext::ConInviteTeam(IConsole::IResult *pResult, void *pUserData)
{
CGameContext *pSelf = (CGameContext *)pUserData;
CGameControllerDDRace *pController = (CGameControllerDDRace *)pSelf->m_pController;
auto *pController = pSelf->m_pController;
const char *pName = pResult->GetString(0);
if(g_Config.m_SvTeam == SV_TEAM_FORBIDDEN || g_Config.m_SvTeam == SV_TEAM_FORCED_SOLO)
@ -1017,7 +1017,7 @@ void CGameContext::ConInviteTeam(IConsole::IResult *pResult, void *pUserData)
void CGameContext::ConJoinTeam(IConsole::IResult *pResult, void *pUserData)
{
CGameContext *pSelf = (CGameContext *)pUserData;
CGameControllerDDRace *pController = (CGameControllerDDRace *)pSelf->m_pController;
auto *pController = pSelf->m_pController;
if(!CheckClientID(pResult->m_ClientID))
return;

View file

@ -774,7 +774,7 @@ void CGameContext::ConModerate(IConsole::IResult *pResult, void *pUserData)
void CGameContext::ConSetDDRTeam(IConsole::IResult *pResult, void *pUserData)
{
CGameContext *pSelf = (CGameContext *)pUserData;
CGameControllerDDRace *pController = (CGameControllerDDRace *)pSelf->m_pController;
auto *pController = pSelf->m_pController;
if(g_Config.m_SvTeam == SV_TEAM_FORBIDDEN || g_Config.m_SvTeam == SV_TEAM_FORCED_SOLO)
{
@ -800,7 +800,7 @@ void CGameContext::ConSetDDRTeam(IConsole::IResult *pResult, void *pUserData)
void CGameContext::ConUninvite(IConsole::IResult *pResult, void *pUserData)
{
CGameContext *pSelf = (CGameContext *)pUserData;
CGameControllerDDRace *pController = (CGameControllerDDRace *)pSelf->m_pController;
auto *pController = pSelf->m_pController;
pController->Teams().SetClientInvited(pResult->GetInteger(1), pResult->GetVictim(), false);
}

View file

@ -4,6 +4,7 @@
#include <game/generated/protocol.h>
#include <game/mapitems.h>
#include <game/server/score.h>
#include <game/teamscore.h>
#include "gamecontext.h"
@ -19,7 +20,7 @@
#include "entities/projectile.h"
IGameController::IGameController(class CGameContext *pGameServer) :
m_Teams(pGameServer)
m_Teams(pGameServer), m_pLoadBestTimeResult(nullptr)
{
m_pGameServer = pGameServer;
m_pConfig = m_pGameServer->Config();
@ -537,6 +538,23 @@ void IGameController::Tick()
}
}
if(m_pLoadBestTimeResult != nullptr && m_pLoadBestTimeResult->m_Completed)
{
if(m_pLoadBestTimeResult->m_Success)
{
m_CurrentRecord = m_pLoadBestTimeResult->m_CurrentRecord;
for(int i = 0; i < MAX_CLIENTS; i++)
{
if(GameServer()->m_apPlayers[i] && GameServer()->m_apPlayers[i]->GetClientVersion() >= VERSION_DDRACE)
{
GameServer()->SendRecord(i);
}
}
}
m_pLoadBestTimeResult = nullptr;
}
DoActivityCheck();
}

View file

@ -11,6 +11,8 @@
#include <map>
#include <vector>
struct CScoreLoadBestTimeResult;
/*
Class: Game Controller
Controls the main game logic. Keeping track of team and player score,
@ -155,6 +157,7 @@ public:
std::map<int, std::vector<vec2>> m_TeleOuts;
std::map<int, std::vector<vec2>> m_TeleCheckOuts;
CGameTeams &Teams() { return m_Teams; }
std::shared_ptr<CScoreLoadBestTimeResult> m_pLoadBestTimeResult;
};
#endif

View file

@ -15,7 +15,7 @@
#define TEST_TYPE_NAME "TestDDraceNetwork"
CGameControllerDDRace::CGameControllerDDRace(class CGameContext *pGameServer) :
IGameController(pGameServer), m_pLoadBestTimeResult(nullptr)
IGameController(pGameServer)
{
m_pGameType = g_Config.m_SvTestingCommands ? TEST_TYPE_NAME : GAME_TYPE_NAME;
}
@ -159,23 +159,6 @@ void CGameControllerDDRace::Tick()
IGameController::Tick();
Teams().ProcessSaveTeam();
Teams().Tick();
if(m_pLoadBestTimeResult != nullptr && m_pLoadBestTimeResult->m_Completed)
{
if(m_pLoadBestTimeResult->m_Success)
{
m_CurrentRecord = m_pLoadBestTimeResult->m_CurrentRecord;
for(int i = 0; i < MAX_CLIENTS; i++)
{
if(GameServer()->m_apPlayers[i] && GameServer()->m_apPlayers[i]->GetClientVersion() >= VERSION_DDRACE)
{
GameServer()->SendRecord(i);
}
}
}
m_pLoadBestTimeResult = nullptr;
}
}
void CGameControllerDDRace::DoTeamChange(class CPlayer *pPlayer, int Team, bool DoChatMsg)

View file

@ -4,7 +4,6 @@
#include <game/server/gamecontroller.h>
struct CScoreLoadBestTimeResult;
class CGameControllerDDRace : public IGameController
{
public:
@ -23,7 +22,5 @@ public:
void Tick() override;
void DoTeamChange(class CPlayer *pPlayer, int Team, bool DoChatMsg = true) override;
std::shared_ptr<CScoreLoadBestTimeResult> m_pLoadBestTimeResult;
};
#endif // GAME_SERVER_GAMEMODES_DDRACE_H

View file

@ -110,11 +110,11 @@ CScore::CScore(CGameContext *pGameServer, CDbConnectionPool *pPool) :
void CScore::LoadBestTime()
{
if(((CGameControllerDDRace *)(m_pGameServer->m_pController))->m_pLoadBestTimeResult)
if(m_pGameServer->m_pController->m_pLoadBestTimeResult)
return; // already in progress
auto LoadBestTimeResult = std::make_shared<CScoreLoadBestTimeResult>();
((CGameControllerDDRace *)(m_pGameServer->m_pController))->m_pLoadBestTimeResult = LoadBestTimeResult;
m_pGameServer->m_pController->m_pLoadBestTimeResult = LoadBestTimeResult;
auto Tmp = std::make_unique<CSqlLoadBestTimeData>(LoadBestTimeResult);
str_copy(Tmp->m_aMap, g_Config.m_SvMap, sizeof(Tmp->m_aMap));
@ -281,7 +281,7 @@ void CScore::SaveTeam(int ClientID, const char *pCode, const char *pServer)
{
if(RateLimitPlayer(ClientID))
return;
auto *pController = ((CGameControllerDDRace *)(GameServer()->m_pController));
auto *pController = GameServer()->m_pController;
int Team = pController->Teams().m_Core.Team(ClientID);
if(pController->Teams().GetSaving(Team))
return;
@ -326,7 +326,7 @@ void CScore::LoadTeam(const char *pCode, int ClientID)
{
if(RateLimitPlayer(ClientID))
return;
auto *pController = ((CGameControllerDDRace *)(GameServer()->m_pController));
auto *pController = GameServer()->m_pController;
int Team = pController->Teams().m_Core.Team(ClientID);
if(pController->Teams().GetSaving(Team))
return;