//***********************************************************************************************************
// MAP VOTE PACKAGE
// ORIGINALLY MADE BY NC-17 (codam, powerserver), REWORKED BY wizard220, MODIFIED BY FrAnCkY55, Modified again by bell
//***********************************************************************************************************
Initialise()
{
if(!level.awe_mapvote) return;
if(isdefined(level.awe_uo))
level.awe_mapvotehudoffset = 0;
else
level.awe_mapvotehudoffset = 30;
// Small wait
wait .5;
// Cleanup some stuff to free up some resources
CleanUp();
// Create HUD
CreateHud();
// Start mapvote thread
thread RunMapVote();
// Wait for voting to finish
level waittill("VotingComplete");
// Delete HUD
DeleteHud();
}
CleanUp()
{
// Kill AWE threads
level notify("awe_boot");
// Wait for threads to die
wait .05;
// Delete some HUD elements
if(isdefined(level.clock)) level.clock destroy();
if(isdefined(level.awe_axisicon)) level.awe_axisicon destroy();
if(isdefined(level.awe_axisnumber)) level.awe_axisnumber destroy();
if(isdefined(level.awe_deadaxisicon)) level.awe_deadaxisicon destroy();
if(isdefined(level.awe_deadaxisnumber)) level.awe_deadaxisnumber destroy();
if(isdefined(level.awe_alliedicon)) level.awe_alliedicon destroy();
if(isdefined(level.awe_alliednumber)) level.awe_alliednumber destroy();
if(isdefined(level.awe_deadalliedicon)) level.awe_deadalliedicon destroy();
if(isdefined(level.awe_deadalliednumber)) level.awe_deadalliednumber destroy();
if(isdefined(level.awe_warmupmsg)) level.awe_warmupmsg destroy();
}
CreateHud()
{
level.vote_hud_bgnd = newHudElem();
level.vote_hud_bgnd.archived = false;
level.vote_hud_bgnd.alpha = .7;
level.vote_hud_bgnd.x = 205;
level.vote_hud_bgnd.y = level.awe_mapvotehudoffset + 17;
level.vote_hud_bgnd.sort = 9000;
level.vote_hud_bgnd.color = (0,0,0);
level.vote_hud_bgnd setShader("white", 260, 140);
level.vote_header = newHudElem();
level.vote_header.archived = false;
level.vote_header.alpha = .3;
level.vote_header.x = 208;
level.vote_header.y = level.awe_mapvotehudoffset + 19;
level.vote_header.sort = 9001;
level.vote_header setShader("white", 254, 21);
level.vote_headerText = newHudElem();
level.vote_headerText.archived = false;
level.vote_headerText.x = 210;
level.vote_headerText.y = level.awe_mapvotehudoffset + 21;
level.vote_headerText.sort = 9998;
level.vote_headerText.label = level.mapvotetext["MapVoteHeader"];
level.vote_headerText.fontscale = 1.3;
level.vote_leftline = newHudElem();
level.vote_leftline.archived = false;
level.vote_leftline.alpha = .3;
level.vote_leftline.x = 207;
level.vote_leftline.y = level.awe_mapvotehudoffset + 19;
level.vote_leftline.sort = 9001;
level.vote_leftline setShader("white", 1, 135);
level.vote_rightline = newHudElem();
level.vote_rightline.archived = false;
level.vote_rightline.alpha = .3;
level.vote_rightline.x = 462;
level.vote_rightline.y = level.awe_mapvotehudoffset + 19;
level.vote_rightline.sort = 9001;
level.vote_rightline setShader("white", 1, 135);
level.vote_bottomline = newHudElem();
level.vote_bottomline.archived = false;
level.vote_bottomline.alpha = .3;
level.vote_bottomline.x = 207;
level.vote_bottomline.y = level.awe_mapvotehudoffset + 154;
level.vote_bottomline.sort = 9001;
level.vote_bottomline setShader("white", 256, 1);
/* level.vote_hud_votestext = newHudElem();
level.vote_hud_votestext.archived = false;
level.vote_hud_votestext.x = 435;
level.vote_hud_votestext.y = level.awe_mapvotehudoffset + 56;
level.vote_hud_votestext.sort = 9998;
level.vote_hud_votestext.fontscale = 0.8;
level.vote_hud_votestext.label = level.mapvotetext["Votes"];*/
level.vote_hud_timeleft = newHudElem();
level.vote_hud_timeleft.archived = false;
level.vote_hud_timeleft.x = 400;
level.vote_hud_timeleft.y = level.awe_mapvotehudoffset + 26;
level.vote_hud_timeleft.sort = 9998;
level.vote_hud_timeleft.fontscale = .8;
level.vote_hud_timeleft.label = level.mapvotetext["TimeLeft"];
level.vote_hud_timeleft setValue( level.awe_mapvotetime );
level.vote_hud_instructions = newHudElem();
level.vote_hud_instructions.archived = false;
level.vote_hud_instructions.x = 340;
level.vote_hud_instructions.y = level.awe_mapvotehudoffset + 56;
level.vote_hud_instructions.sort = 9998;
level.vote_hud_instructions.fontscale = 1;
level.vote_hud_instructions.label = level.mapvotetext["MapVote"];
level.vote_hud_instructions.alignX = "center";
level.vote_hud_instructions.alignY = "middle";
level.vote_map1 = newHudElem();
level.vote_map1.archived = false;
level.vote_map1.x = 434;
level.vote_map1.y = level.awe_mapvotehudoffset + 69;
level.vote_map1.sort = 9998;
level.vote_map2 = newHudElem();
level.vote_map2.archived = false;
level.vote_map2.x = 434;
level.vote_map2.y = level.awe_mapvotehudoffset + 85;
level.vote_map2.sort = 9998;
level.vote_map3 = newHudElem();
level.vote_map3.archived = false;
level.vote_map3.x = 434;
level.vote_map3.y = level.awe_mapvotehudoffset + 101;
level.vote_map3.sort = 9998;
level.vote_map4 = newHudElem();
level.vote_map4.archived = false;
level.vote_map4.x = 434;
level.vote_map4.y = level.awe_mapvotehudoffset + 117;
level.vote_map4.sort = 9998;
level.vote_map5 = newHudElem();
level.vote_map5.archived = false;
level.vote_map5.x = 434;
level.vote_map5.y = level.awe_mapvotehudoffset + 133;
level.vote_map5.sort = 9998;
level.vote_map6 = newHudElem();
level.vote_map6.archived = false;
level.vote_map6.x = 434;
level.vote_map6.y = level.awe_mapvotehudoffset + 149;
level.vote_map6.sort = 9998;
}
RunMapVote()
{
currentgt = getcvar("g_gametype");
currentmap = getcvar("mapname");
x = mapsmpgametypes_awe::GetRandomMapRotation();
if(isdefined(x))
{
if(isdefined(x.maps))
maps = x.maps;
x delete();
}
// Any maps?
if(!isdefined(maps))
{
wait 0.05;
level notify("VotingComplete");
return;
}
// Fill all alternatives with the current map in case there is not enough unique maps
for(j=0;j<5;j++)
{
level.mapcandidate[j]["map"] = currentmap;
level.mapcandidate[j]["mapname"] = "Replay this map";
level.mapcandidate[j]["gametype"] = currentgt;
level.mapcandidate[j]["exec"] = undefined;
level.mapcandidate[j]["jeep"] = undefined;
level.mapcandidate[j]["tank"] = undefined;
level.mapcandidate[j]["votes"] = 0;
}
//get candidates
i = 0;
for(j=0;j<5;j++)
{
// Skip current map and gametype combination
if(maps["map"] == currentmap && maps["gametype"] == currentgt)
i++;
// Any maps left?
if(!isdefined(maps))
break;
level.mapcandidate[j]["map"] = maps["map"];
level.mapcandidate[j]["mapname"] = mapsmpgametypes_awe::getMapName(maps["map"]);
level.mapcandidate[j]["gametype"] = maps["gametype"];
level.mapcandidate[j]["exec"] = maps["exec"];
level.mapcandidate[j]["jeep"] = maps["jeep"];
level.mapcandidate[j]["tank"] = maps["tank"];
level.mapcandidate[j]["votes"] = 0;
i++;
// Any maps left?
if(!isdefined(maps))
break;
// Keep current map as last alternative?
if(level.awe_mapvotereplay && j>2)
break;
}
thread DisplayMapChoices();
game["menu_team"] = "";
//start a voting thread per player
players = getentarray("player", "classname");
for(i = 0; i < players.size; i++)
players thread PlayerVote();
thread VoteLogic();
//Take a breath for players to restart with the map
wait 0.1;
level.mapended = true;
}
DeleteHud()
{
level.vote_headerText destroy();
// level.vote_hud_votestext destroy();
level.vote_hud_timeleft destroy();
level.vote_hud_instructions destroy();
level.vote_map1 destroy();
level.vote_map2 destroy();
level.vote_map3 destroy();
level.vote_map4 destroy();
level.vote_map5 destroy();
level.vote_map6 destroy();
level.vote_hud_bgnd destroy();
level.vote_header destroy();
level.vote_leftline destroy();
level.vote_rightline destroy();
level.vote_bottomline destroy();
players = getentarray("player", "classname");
for(i = 0; i < players.size; i++)
if(isdefined(players.vote_indicator))
players.vote_indicator destroy();
}
//Displays the map candidates
DisplayMapChoices()
{
level endon("VotingDone");
for(;;)
{
iprintlnbold(level.mapcandidate[0]["mapname"] + " (" + level.mapcandidate[0]["gametype"] +")");
iprintlnbold(level.mapcandidate[1]["mapname"] + " (" + level.mapcandidate[1]["gametype"] +")");
iprintlnbold(level.mapcandidate[2]["mapname"] + " (" + level.mapcandidate[2]["gametype"] +")");
iprintlnbold(level.mapcandidate[3]["mapname"] + " (" + level.mapcandidate[3]["gametype"] +")");
iprintlnbold(level.mapcandidate[4]["mapname"] + " (" + level.mapcandidate[4]["gametype"] +")");
iprintlnbold(level.mapcandidate[5]["mapname"] + " (" + level.mapcandidate[5]["gametype"] +")");
wait 7.8;
}
}
//Changes the players vote as he hits the attack button and updates HUD
PlayerVote()
{
level endon("VotingDone");
// No voting for spectators
if(self.pers["team"] == "spectator")
novote = true;
// Spawn player as spectator
self mapsmpgametypes_awe::spawnSpectator();
self.sessionstate = "spectator";
self.spectatorclient = -1;
resettimeout();
//remove the scoreboard
self setClientCvar("g_scriptMainMenu", "");
self closeMenu();
self allowSpectateTeam("allies", false);
self allowSpectateTeam("axis", false);
self allowSpectateTeam("freelook", false);
self allowSpectateTeam("none", true);
if(isdefined(novote))
return;
self.votechoice = 0;
colors[0] = (0 , 0, 1);
colors[1] = (0 ,0.5, 1);
colors[2] = (0 , 1, 1);
colors[3] = (0 , 1,0.5);
colors[4] = (0 , 1, 0);
colors[5] = (0 , 1, 0);
self.vote_indicator = newClientHudElem( self );
self.vote_indicator.alignY = "middle";
self.vote_indicator.x = 208;
self.vote_indicator.y = level.awe_mapvotehudoffset + 75;
self.vote_indicator.archived = false;
self.vote_indicator.sort = 9998;
self.vote_indicator.alpha = .3;
self.vote_indicator.color = colors[0];
self.vote_indicator setShader("white", 254, 17);
for (;;)
{
wait .01;
if(self attackButtonPressed() == true)
{
self.votechoice++;
if (self.votechoice == 6)
self.votechoice = 0;
self iprintln("You have voted for ^2" + level.mapcandidate[self.votechoice]["mapname"]);
self.vote_indicator.y = level.awe_mapvotehudoffset + 77 + self.votechoice * 16;
self.vote_indicator.color = colors[self.votechoice];
self playLocalSound("hq_score");
}
while(self attackButtonPressed() == true)
wait.01;
self.sessionstate = "spectator";
self.spectatorclient = -1;
}
}
//Determines winning map and sets rotation
VoteLogic()
{
//Vote Timer
for (;level.awe_mapvotetime>=0;level.awe_mapvotetime--)
{
for(j=0;j<10;j++)
{
// Count votes
for(i=0;i<5;i++) level.mapcandidate["votes"] = 0;
players = getentarray("player", "classname");
for(i = 0; i < players.size; i++)
if(isdefined(players.votechoice))
level.mapcandidate[players.votechoice]["votes"]++;
// Update HUD
level.vote_map1 setValue( level.mapcandidate[0]["votes"] );
level.vote_map2 setValue( level.mapcandidate[1]["votes"] );
level.vote_map3 setValue( level.mapcandidate[2]["votes"] );
level.vote_map4 setValue( level.mapcandidate[3]["votes"] );
level.vote_map5 setValue( level.mapcandidate[4]["votes"] );
level.vote_map6 setValue( level.mapcandidate[5]["votes"] );
wait .1;
}
level.vote_hud_timeleft setValue( level.awe_mapvotetime );
}
wait 0.2;
newmapnum = 0;
topvotes = 0;
for(i=0;i<5;i++)
{
if (level.mapcandidate["votes"] > topvotes)
{
newmapnum = i;
topvotes = level.mapcandidate["votes"];
}
}
SetMapWinner(newmapnum);
}
//change the map rotation to represent the current selection
SetMapWinner(winner)
{
map = level.mapcandidate[winner]["map"];
mapname = level.mapcandidate[winner]["mapname"];
gametype = level.mapcandidate[winner]["gametype"];
exec = level.mapcandidate[winner]["exec"];
jeep = level.mapcandidate[winner]["jeep"];
tank = level.mapcandidate[winner]["tank"];
//write to cvars
if(!isdefined(exec))
exec = "";
else
exec = " exec " + exec;
if(!isdefined(jeep))
jeep = "";
else
jeep = " allow_jeeps " +jeep;
if(!isdefined(tank))
tank = "";
else
tank = " allow_tanks " + tank;
setcvar("sv_maprotationcurrent", exec + jeep + tank + " gametype " + gametype + " map " + map);
wait 0.1;
// Stop threads
level notify( "VotingDone" );
// Wait for threads to die
wait 0.05;
// Announce winner
iprintlnbold(" ");
iprintlnbold(" ");
iprintlnbold(" ");
iprintlnbold("The winner is");
iprintlnbold("^2" + mapname);
iprintlnbold("^2" + mapsmpgametypes_awe::getGametypeName(gametype));
// Fade HUD elements
level.vote_headerText fadeOverTime (1);
// level.vote_hud_votestext fadeOverTime (1);
level.vote_hud_timeleft fadeOverTime (1);
level.vote_hud_instructions fadeOverTime (1);
level.vote_map1 fadeOverTime (1);
level.vote_map2 fadeOverTime (1);
level.vote_map3 fadeOverTime (1);
level.vote_map4 fadeOverTime (1);
level.vote_map5 fadeOverTime (1);
level.vote_map6 fadeOverTime (1);
level.vote_hud_bgnd fadeOverTime (1);
level.vote_header fadeOverTime (1);
level.vote_leftline fadeOverTime (1);
level.vote_rightline fadeOverTime (1);
level.vote_bottomline fadeOverTime (1);
level.vote_headerText.alpha = 0;
// level.vote_hud_votestext.alpha = 0;
level.vote_hud_timeleft.alpha = 0;
level.vote_hud_instructions.alpha = 0;
level.vote_map1.alpha = 0;
level.vote_map2.alpha = 0;
level.vote_map3.alpha = 0;
level.vote_map4.alpha = 0;
level.vote_map5.alpha = 0;
level.vote_map6.alpha = 0;
level.vote_hud_bgnd.alpha = 0;
level.vote_header.alpha = 0;
level.vote_leftline.alpha = 0;
level.vote_rightline.alpha = 0;
level.vote_bottomline.alpha = 0;
players = getentarray("player", "classname");
for(i = 0; i < players.size; i++)
{
if(isdefined(players.vote_indicator))
{
players.vote_indicator fadeOverTime (1);
players.vote_indicator.alpha = 0;
}
}
// Show winning map for a few seconds
wait 4;
level notify( "VotingComplete" );
} |