26 #include "../../cl_shared.h"
27 #include "../cl_game.h"
31 #include "../../ui/ui_data.h"
39 cgi->UI_ExecuteConfunc(
"multiplayer_setTeamplay %i", isTeamPlay);
40 cgi->UI_InitStack(
"multiplayer_wait",
nullptr);
49 cgi->HUD_InitUI(
"missionoptions");
57 if (cgi->CL_GetPlayerNum() == playerNum) {
58 Com_sprintf(buf,
sizeof(buf),
_(
"You've ended your turn.\n"));
61 Com_sprintf(buf,
sizeof(buf),
_(
"%s ended his turn (team %i).\n"), playerName, team);
64 cgi->HUD_DisplayMessage(buf);
73 if (!cgi->Cvar_GetInteger(
"sv_dedicated") && cgi->GAME_IsTeamEmpty())
74 cgi->GAME_AutoTeam(
"multiplayer_initial", cgi->GAME_GetCharacterArraySize());
76 if (cgi->Cvar_GetInteger(
"sv_teamplay")
78 cgi->UI_Popup(
_(
"Settings doesn't make sense"),
_(
"Set soldiers per player lower than soldiers per team"));
104 cgi->Cvar_SetValue(
"sv_maxteams", md->
teams);
106 cgi->Cvar_SetValue(
"sv_maxteams", 2);
108 cgi->Cmd_ExecuteString(
"map %s %s %s", cgi->Cvar_GetInteger(
"mn_serverday") ?
"day" :
"night", md->
mapTheme, md->
params ? (
const char*)cgi->
LIST_GetRandom(md->
params) :
"");
110 cgi->UI_InitStack(
"multiplayer_wait",
"missionoptions");
128 cgi->UI_InitStack(
"main",
"");
131 int enemiesKilled = 0, enemiesStunned = 0;
132 const int team = cgi->GAME_GetCurrentTeam();
137 enemiesKilled += numKilled[team][
i];
138 enemiesStunned += numStunned[team][
i];
141 cgi->LIST_AddString(&list,
va(
_(
"Enemies killed:\t%i"), enemiesKilled + enemiesStunned));
142 cgi->LIST_AddString(&list,
va(
_(
"Team survivors:\t%i"), numAlive[team]));
143 cgi->UI_RegisterLinkedListText(
TEXT_LIST2, list);
144 if (winner == team) {
145 cgi->UI_PushWindow(
"won");
147 cgi->UI_PushWindow(
"lost");
164 cgi->GAME_SwitchCurrentSelectedMap(step ? step : 1);
168 for (
int j = 0; j < cgi->
csi->
numGTs; j++) {
171 cgi->LIST_AddString(&gameNames,
_(gt->
name));
174 cgi->UI_RegisterLinkedListText(
TEXT_LIST2, gameNames);
175 cgi->Cvar_SetValue(
"ai_singleplayeraliens", md->
maxAliens);
180 cgi->Com_Printf(
"no multiplayer map found for the current selected gametype: '%s'", gameType);
194 cgi->Com_SetGameType();
216 const char* msg =
Com_Trim(message);
217 cgi->LIST_AddString(&mp_chatMessageStack, msg);
218 cgi->HUD_DisplayMessage(msg);
220 cgi->UI_TextScrollEnd(
"hud_chat.allchats.chatscreen.chat");
236 {
nullptr,
nullptr,
nullptr}
242 cgi->
Cvar_Set(
"cl_equip",
"multiplayer_initial");
244 cgi->Cmd_TableAddList(multiplayerCmds);
251 cgi->Cmd_TableRemoveList(multiplayerCmds);
255 cgi->SV_Shutdown(
"Game mode shutdown",
false);
268 cgi->UI_ExecuteConfunc(
"multiplayer_admin_panel 0");
270 cgi->UI_ExecuteConfunc(
"multiplayer_admin_panel 1");
276 if (!cvars[
i]->modified) {
280 if (!cgi->Com_ServerState()) {
281 cgi->Cmd_ExecuteString(
SV_CMD_RCON " set %s %s", cvars[
i]->
name, cvars[
i]->
string);
286 #ifndef HARD_LINKED_CGAME
296 e.
name =
"Multiplayer mode";
297 e.
menu =
"multiplayer";
bool Q_strnull(const char *string)
static void GAME_MP_InitStartup(void)
static bool GAME_MP_HandleServerCommand(const char *command, dbuffer *msg)
static void GAME_MP_Shutdown(void)
static void GAME_MP_UpdateGametype_f(void)
Update the map according to the gametype.
const char * va(const char *format,...)
does a varargs printf into a temp buffer, so I don't need to have varargs versions of all text functi...
This is a cvar definition. Cvars can be user modified and used in our menus e.g.
cvar_t * cl_roundtimelimit
void *IMPORT * LIST_GetRandom(linkedList_t *list)
bool Com_sprintf(char *dest, size_t size, const char *fmt,...)
copies formatted string with buffer-size checking
static const cmdList_t multiplayerCmds[]
Serverlist menu callbacks headers for multiplayer.
cvar_t * rcon_client_password
#define CGAME_HARD_LINKED_FUNCTIONS
cvar_t * cl_maxsoldiersperplayer
char * Com_Trim(char *s)
Removed leading and trailing whitespaces.
const char *IMPORT * Cvar_GetString(const char *varName)
const linkedList_t *IMPORT * LIST_ContainsString(const linkedList_t *list, const char *string)
const char *IMPORT * CL_PlayerGetName(unsigned int player)
void Q_strncpyz(char *dest, const char *src, size_t destsize)
Safe strncpy that ensures a trailing zero.
cvar_t *IMPORT * Cvar_Set(const char *varName, const char *value,...) __attribute__((format(__printf__
static linkedList_t * mp_chatMessageStack
const mapDef_t *EXPORT * MapInfo(int step)
Serverlist management headers for multiplayer.
gametype_t gts[MAX_GAMETYPES]
static void GAME_MP_NotifyEvent(event_t eventType)
event_t
Possible event values.
Multiplayer game type headers.
static void GAME_MP_AddChatMessage(const char *text)
Displays a chat on the hud and add it to the chat buffer.
static const cgame_import_t * cgi
void GAME_MP_CallbacksInit(const cgame_import_t *import)
const mapDef_t *IMPORT * GAME_GetCurrentSelectedMap(void)
static void GAME_MP_EndRoundAnnounce(int playerNum, int team)
void GAME_MP_ParseTeamInfoMessage(dbuffer *msg)
Team selection text.
static const mapDef_t * GAME_MP_MapInfo(int step)
const char *IMPORT * Com_GetRandomMapAssemblyNameForCraft(const char *craftID)
void GAME_MP_ServerListShutdown(void)
static void GAME_MP_RunFrame(float secondsSinceLastFrame)
QGL_EXTERN GLuint GLsizei GLsizei GLint GLenum GLchar * name
static CGAME_HARD_LINKED_FUNCTIONS void GAME_MP_StartBattlescape(bool isTeamPlay)
static void GAME_MP_StartServer_f(void)
Starts a server and checks if the server loads a team unless he is a dedicated server admin...
void GAME_MP_CallbacksShutdown(void)
void GAME_MP_ServerListInit(const cgame_import_t *import)
cvar_t *IMPORT * Cvar_ForceSet(const char *varName, const char *value)
cvar_t * cl_maxsoldiersperteam
static void GAME_MP_Results(dbuffer *msg, int winner, int *numSpawned, int *numAlive, int numKilled[][MAX_TEAMS], int numStunned[][MAX_TEAMS], bool nextmap)
After a mission was finished this function is called.
const cgame_export_t * GetCGameAPI(const cgame_import_t *import)