Code:
//1. Put this file in the "codam" folder of the "main" server folder.
//2. Add the below line to "modlist.gsc":
//[[register]]("Promod", codam\promod::main);
main(phase, register)
{
switch(phase)
{
case "init": _init(register); break;
}
}
_init(register)
{
if(isDefined(level.promod))
return;
level.promod = true;
[[register]]("PlayerConnect", ::playerConnect, "thread");
[[register]]("PlayerDisconnect", ::deleteVar, "thread");
[[register]]("gt_spawnSpectator", ::spawnSpectator, "thread");
[[register]]("gt_startRound", ::startRound, "thread");
if (getCvar("previousmap") == "") //SERVER JUST STARTED
{
setCvar("previousmap", getCvar("mapname"));
}
else
{
if (getCvar("previousmap") != getCvar("mapname")) //MAP CHANGED
{
level.mapchanged = true;
setCvar("previousmap", getCvar("mapname"));
}
}
}
playerConnect(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, b0, b1, b2, b2, b4, b5, b6, b7, b8, b9)
{
//RESTORE alreadyconnected vars
vidrestart = getCvar("tmp_pm_alreadyconnected");
if (vidrestart != "")
{
vidrestart = codam\_mm_mmm::strTok(vidrestart, ";");
for (i = 0; i < vidrestart.size; i++)
{
num = self getEntityNumber();
user = codam\_mm_mmm::strTok(vidrestart[i], "|");
if (user[1] == num)
{
self.pers["alreadyconnected"] = user[0];
break;
}
}
}
//CHECK IF ALREADY JOINED AND IS A FULLBRIGHT MAP (so no unnecessary vid_restart for r_overBrightBits)
if (isDefined(self.pers["alreadyconnected"]))
{
if (isDefined(level.mapchanged))
{
mapname = getCvar("mapname");
if (mapname == "mp_carentan" || mapname == "mp_depot")
{
self setClientCvar("r_fullbright", 1);
prefix = "1sk_team_vidrestart_";
game["menu_team"] = prefix + game["allies"] + game["axis"];
precacheMenu(prefix + "americangerman");
precacheMenu(prefix + "britishgerman");
precacheMenu(prefix + "russiangerman");
self.pers["removevidrestartmenuneeded"] = true;
}
else
{
//SET NORMAL MENU
prefix = "1sk_team_";
game["menu_team"] = prefix + game["allies"] + game["axis"];
precacheMenu(prefix + "americangerman");
precacheMenu(prefix + "britishgerman");
precacheMenu(prefix + "russiangerman");
}
}
else
{
//SET NORMAL MENU
prefix = "1sk_team_";
game["menu_team"] = prefix + game["allies"] + game["axis"];
precacheMenu(prefix + "americangerman");
precacheMenu(prefix + "britishgerman");
precacheMenu(prefix + "russiangerman");
}
}
//CHECK IF FIRST JOIN: validate r_overBrightBits (that will also do vid_restart in case is a r_fullbright map)
else
{
self setClientCvar("r_overBrightBits", 0);
self setClientCvar("r_swapInterval", 0);
mapname = getCvar("mapname");
if (mapname == "mp_carentan" || mapname == "mp_depot")
{
self setClientCvar("r_fullbright", 1);
}
prefix = "1sk_team_vidrestart_";
game["menu_team"] = prefix + game["allies"] + game["axis"];
precacheMenu(prefix + "americangerman");
precacheMenu(prefix + "britishgerman");
precacheMenu(prefix + "russiangerman");
self.pers["removevidrestartmenuneeded"] = true;
//SET VAR alreadyconnected
self.pers["alreadyconnected"] = true;
clientnum = self getEntityNumber();
removeVar(clientnum);
rSTR = "";
if (getCvar("tmp_pm_alreadyconnected") != "")
{
rSTR += getCvar("tmp_pm_alreadyconnected");
}
rSTR += true;
rSTR += "|" + clientnum;
rSTR += ";";
setCvar("tmp_pm_alreadyconnected", rSTR);
}
}
deleteVar(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9)
{
num = self getEntityNumber();
removeVar(num);
}
removeVar(num)
{
vidrestart = getCvar("tmp_pm_alreadyconnected");
if (vidrestart != "")
{
vidrestart = codam\_mm_mmm::strTok(vidrestart, ";");
validuser = false;
rSTR = "";
for(i = 0; i < vidrestart.size; i++)
{
user = codam\_mm_mmm::strTok(vidrestart[i], "|");
if(user[1] == num)
{
validuser = true;
continue;
}
rSTR += vidrestart[i];
rSTR += ";";
}
if (validuser)
{
setCvar("tmp_pm_alreadyconnected", rSTR);
}
}
}
spawnSpectator(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9)
{
setPlayerCvars(self);
//REMOVE VIDRESTART MENU IF SET
if (isDefined(self.pers["removevidrestartmenuneeded"]))
{
wait 1;
prefix = "1sk_team_";
game["menu_team"] = prefix + game["allies"] + game["axis"];
precacheMenu(prefix + "americangerman");
precacheMenu(prefix + "britishgerman");
precacheMenu(prefix + "russiangerman");
self setClientCvar("g_scriptMainMenu", game["menu_team"]);
self openMenu(game["menu_team"]);
self.pers["removevidrestartmenuneeded"] = undefined;
}
}
startRound(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9)
{
if (getCvar("g_gametype") == "sd")
{
wait 1;
players = getEntArray("player", "classname");
if (players.size > 0)
{
for(i = 0; i < players.size; i++)
{
setPlayerCvars(players[i]);
}
}
}
}
setPlayerCvars(player)
{
if (!isDefined(player.pers["mm_fov"]))
{
player setClientCvar("cg_fov", 93);
}
player setClientCvar("fx_draw", 0);
player setClientCvar("r_fog", 0);
player setClientCvar("r_entFullbright", 1);
}