#include "pch.h"
TC_OBJECT_EXTERN_NON_CREATEABLE_IMPL(CAdminGames)
STDMETHODIMP CAdminGames::Add(IAGCGameParameters* pGameParameters)
{
if (!pGameParameters)
return Error("Creation Parameters was Null");
if (!g.strLobbyServer.IsEmpty() && !g.fmLobby.IsConnected())
return Error(IDS_E_GAME_SERVER_PAUSED, IID_IAdminGames);
IAGCPrivatePtr spPrivate(pGameParameters);
assert(NULL != spPrivate);
CGameParamData * pMissionParams = (CGameParamData *)spPrivate->GetIGCVoid();
assert(pMissionParams);
#if defined(ALLSRV_STANDALONE)
const ListFSMission * plistMission = CFSMission::GetMissions();
if (plistMission->n())
return Error(IDS_E_ONE_GAME_PER_SERVER, IID_IAdminGames);
if (pMissionParams->nTotalMaxPlayersPerGame > c_cMaxPlayersPerGame)
pMissionParams->nTotalMaxPlayersPerGame = c_cMaxPlayersPerGame;
pMissionParams->nMinPlayersPerTeam = 1;
if (pMissionParams->nTotalMaxPlayersPerGame == 1)
pMissionParams->nMaxPlayersPerTeam = 1;
else
pMissionParams->nMaxPlayersPerTeam = pMissionParams->nTotalMaxPlayersPerGame / pMissionParams->nTeams;
#else
if (pMissionParams->nMaxPlayersPerTeam > pMissionParams->nTotalMaxPlayersPerGame / pMissionParams->nTeams)
pMissionParams->nMaxPlayersPerTeam = pMissionParams->nTotalMaxPlayersPerGame / pMissionParams->nTeams;
if (pMissionParams->nMinPlayersPerTeam > pMissionParams->nMaxPlayersPerTeam)
pMissionParams->nMinPlayersPerTeam = pMissionParams->nMaxPlayersPerTeam;
#endif const char * szInvalid = pMissionParams->Invalid();
if (szInvalid)
return Error(szInvalid);
pMissionParams->bObjectModelCreated = !pMissionParams->bAllowEmptyTeams;
CComBSTR bstrStoryText;
RETURN_FAILED(pGameParameters->get_StoryText(&bstrStoryText));
USES_CONVERSION;
const char* pszStoryText = bstrStoryText.Length() ?
OLE2CT(bstrStoryText) : NULL;
FedSrvSite * psiteFedSrv = new FedSrvSite();
CFSMission * pfsMissionNew = new CFSMission(*pMissionParams,
NULL, psiteFedSrv,
psiteFedSrv,
pMissionParams,
pszStoryText);
if (g.fmLobby.IsConnected())
{
BEGIN_PFM_CREATE(g.fmLobby, pfmNewMission, S, NEW_MISSION)
END_PFM_CREATE
pfmNewMission->dwIGCMissionID = pfsMissionNew->GetIGCMission()->GetMissionID();
g.fmLobby.SendMessages(g.fmLobby.GetServerConnection(), FM_GUARANTEED, FM_FLUSH);
}
return S_OK;
}