PDA

View Full Version : double vote , End Map Vote Standalone



malyczolg
2nd May 2013, 13:23
hello , who can help me make double vote for guid ?



Init()
{

min = 0;
max = 0;
level.gametype = getcvar("g_gametype");
level.logging = getcvarint("logfile");

// Map voting
level.mapvote = 0;
if (getcvar("scr_map_vote")!= "" && getcvarint("scr_map_vote") > 0)
level.mapvote = 1;

if(!level.mapvote)
return;

level.mapvotetime = 15;
if (getcvar("scr_map_vote_time") != "" && getcvarint("scr_map_vote_time") > 10)
level.mapvotetime = getcvarint("scr_map_vote_time");
if (level.mapvotetime > 60)
level.mapvotetime = 60;

level.mapvotereplay = 0;
if (getcvar("scr_map_vote_replay")!= "" && getcvarint("scr_map_vote_replay") > 0)
level.mapvotereplay = 1;

if(!isdefined(game["gamestarted"]))
{
// Setup strings
game["MapVote"] = &"Press ^2FIRE^7 to vote Votes";
game["TimeLeft"] = &"Time Left: ";
game["MapVoteHeader"] = &"Next Map Vote";

// Precache stuff used by map voting
precacheShader("white");
precacheString(game["MapVote"]);
precacheString(game["TimeLeft"]);
precacheString(game["MapVoteHeader"]);
}
}

Initialize()
{
if(!level.mapvote)
return;

level.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_killthreads");
// 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.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.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.mapvotehudoffset + 21;
level.vote_headerText.sort = 9998;
level.vote_headerText.label = game["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.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.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.mapvotehudoffset + 154;
level.vote_bottomline.sort = 9001;
level.vote_bottomline setShader("white", 256, 1);

level.vote_hud_timeleft = newHudElem();
level.vote_hud_timeleft.archived = false;
level.vote_hud_timeleft.x = 400;
level.vote_hud_timeleft.y = level.mapvotehudoffset + 26;
level.vote_hud_timeleft.sort = 9998;
level.vote_hud_timeleft.fontscale = .8;
level.vote_hud_timeleft.label = game["TimeLeft"];
level.vote_hud_timeleft setValue( level.mapvotetime );

level.vote_hud_instructions = newHudElem();
level.vote_hud_instructions.archived = false;
level.vote_hud_instructions.x = 340;
level.vote_hud_instructions.y = level.mapvotehudoffset + 56;
level.vote_hud_instructions.sort = 9998;
level.vote_hud_instructions.fontscale = 1;
level.vote_hud_instructions.label = game["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.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.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.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.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.mapvotehudoffset + 133;
level.vote_map5.sort = 9998;
}

RunMapVote()
{
maps = undefined;
x = undefined;

currentmap = getcvar("mapname");
currentgt = level.gametype;

x = GetRandomMapRotation();
if(isdefined(x))
{
if(isdefined(level.maps_in_vote))
maps = level.maps_in_vote;
}

// 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]["votes"] = 0;
}

//get candidates
i = 0;
for(j=0;j<5;j++)
{
// Skip current map and gametype combination
if(maps[i]["map"] == currentmap && maps[i]["gametype"] == level.gametype)
i++;

// Any maps left?
if(!isdefined(maps[i]))
break;

level.mapcandidate[j]["map"] = maps[i]["map"];
level.mapcandidate[j]["mapname"] = getMapName(maps[i]["map"]);
level.mapcandidate[j]["gametype"] = maps[i]["gametype"];
level.mapcandidate[j]["votes"] = 0;

i++;

// Any maps left?
if(!isdefined(maps[i]))
break;

// Keep current map as last alternative?
if(level.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[i] 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_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_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[i].vote_indicator))
players[i].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"] +")");
wait 7.8;
}
}

//Changes the players vote as he hits the attack button and updates HUD
PlayerVote()
{
level endon("VotingDone");
self endon("disconnect");

novote = false;

// No voting for spectators
//if(self.pers["team"] == "spectator") //Prueba unicamente voto espectador
// novote = true;

// Spawn player as spectator
self 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(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);

self.vote_indicator = newClientHudElem( self );
self.vote_indicator.alignY = "middle";
self.vote_indicator.x = 208;
self.vote_indicator.y = level.mapvotehudoffset + 75;
self.vote_indicator.archived = false;
self.vote_indicator.sort = 9998;
self.vote_indicator.alpha = 0;
self.vote_indicator.color = colors[0];
self.vote_indicator setShader("white", 254, 17);

hasVoted = false;

for (;;)
{
wait .01;

if(self attackButtonPressed() == true)
{
// -- Added by Number7 --
if(!hasVoted)
{
self.vote_indicator.alpha = .3;
self.votechoice = 0;
hasVoted = true;
}
else
self.votechoice++;

if (self.votechoice == 5)
self.votechoice = 0;

self iprintln("You have voted for ^2" + level.mapcandidate[self.votechoice]["mapname"] + " (" + level.mapcandidate[self.votechoice]["gametype"]+")");
self.vote_indicator.y = level.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.mapvotetime>=0;level.mapvotetime--)
{
for(j=0;j<10;j++)
{
// Count votes
for(i=0;i<5;i++) level.mapcandidate[i]["votes"] = 0;
players = getentarray("player", "classname");
for(i = 0; i < players.size; i++)
if(isdefined(players[i].votechoice))
level.mapcandidate[players[i].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"] );
wait .1;
}
level.vote_hud_timeleft setValue( level.mapvotetime );
}

wait 0.2;

newmapnum = 0;
topvotes = 0;
for(i=0;i<5;i++)
{
if (level.mapcandidate[i]["votes"] > topvotes)
{
newmapnum = i;
topvotes = level.mapcandidate[i]["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"];

setcvar("sv_maprotationcurrent", " 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" + GetGametypeName(gametype));

// Fade HUD elements
level.vote_headerText 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_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_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_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[i].vote_indicator))
{
players[i].vote_indicator fadeOverTime (1);
players[i].vote_indicator.alpha = 0;
}
}

// Show winning map for a few seconds
wait 4;
level notify( "VotingComplete" );
}

GetRandomMapRotation(random, current, number)
{
maprot = strip(getcvar("sv_maprotation"));

if(!isdefined(number))
number = 0;

// No map rotation setup!
if(maprot == "")
return undefined;

// Explode entries into an array
j=0;
temparr2[j] = "";
for(i=0;i<maprot.size;i++)
{
if(maprot[i]==" ")
{
j++;
temparr2[j] = "";
}
else
temparr2[j] += maprot[i];
}

// Remove empty elements (double spaces)
temparr = [];
for(i=0;i<temparr2.size;i++)
{
element = strip(temparr2[i]);
if(element != "")
temparr[temparr.size] = element;
}

level.maps_in_vote = [];
lastgt = level.gametype;
for(i=0;i<temparr.size;)
{
switch(temparr[i])
{
case "gametype":
if(isdefined(temparr[i+1]))
lastgt = temparr[i+1];
i += 2;
break;

case "map":
if(isdefined(temparr[i+1]))
{
level.maps_in_vote[level.maps_in_vote.size]["gametype"] = lastgt;
level.maps_in_vote[level.maps_in_vote.size-1]["map"] = temparr[i+1];
}

i += 2;
break;

// If code get here, then the maprotation is corrupt so we have to fix it
default:
iprintlnbold("Warning: Error detected in map rotation");

if(isGametype(temparr[i]))
lastgt = temparr[i];
else
{
level.maps_in_vote[level.maps_in_vote.size]["gametype"] = lastgt;
level.maps_in_vote[level.maps_in_vote.size-1]["map"] = temparr[i];
}


i += 1;
break;
}
if(number && level.maps_in_vote.size >= number)
break;
}

// Shuffle the array 20 times
for(k = 0; k < 20; k++)
{
for(i = 0; i < level.maps_in_vote.size; i++)
{
j = randomInt(level.maps_in_vote.size);
element = level.maps_in_vote[i];
level.maps_in_vote[i] = level.maps_in_vote[j];
level.maps_in_vote[j] = element;
}
}

return level.maps_in_vote;
}

// Strip blanks at start and end of string
strip(s)
{
if(s=="")
return "";

s2="";
s3="";

i=0;
while(i<s.size && s[i]==" ")
i++;

// String is just blanks?
if(i==s.size)
return "";

for(;i<s.size;i++)
{
s2 += s[i];
}

i=s2.size-1;
while(s2[i]==" " && i>0)
i--;

for(j=0;j<=i;j++)
{
s3 += s2[j];
}

return s3;
}

isGametype(gt)
{
switch(gt)
{
case "dm":
case "tdm":
case "sd":
case "hq":
case "ctf":
case "ihtf":
case "wrz":
case "zom":
case "obj":
case "ft":
case "utd":
return true;

default:
return false;
}
}

getMapName(map)
{
switch(map)
{
case "mp_farmhouse":
mapname = "Beltot";
break;

case "mp_brecourt":
mapname = "Brecourt";
break;

case "mp_burgundy":
mapname = "Burgundy";
break;

case "mp_trainstation":
mapname = "Caen";
break;

case "mp_carentan":
mapname = "Carentan";
break;

case "mp_decoy":
mapname = "El Alamein";
break;

case "mp_leningrad":
mapname = "Leningrad";
break;

case "mp_matmata":
mapname = "Matmata";
break;

case "mp_downtown":
mapname = "Moscow";
break;

case "mp_harbor":
mapname = "Rostov";
break;

case "mp_dawnville":
mapname = "St. Mere Eglise";
break;

case "mp_railyard":
mapname = "Stalingrad";
break;

case "mp_toujane":
mapname = "Toujane";
break;

case "mp_breakout":
mapname = "Villers-Bocage";
break;

case "mp_rhine":
mapname = "Wallendar";
break;

default:
mapname = map;
break;
}

return mapname;
}

spawnSpectator(origin, angles)
{
self notify("spawned");
self notify("end_respawn");

resettimeout();

// Stop shellshock and rumble
self stopShellshock();
self stoprumble("damage_heavy");

self.sessionstate = "spectator";
self.spectatorclient = -1;
self.archivetime = 0;
self.psoffsettime = 0;
self.friendlydamage = undefined;

if(self.pers["team"] == "spectator")
self.statusicon = "";

maps\mp\gametypes\_spectating::setSpectatePermissi ons();

if(isDefined(origin) && isDefined(angles))
self spawn(origin, angles);
else
{
spawnpointname = "mp_global_intermission";
spawnpoints = getentarray(spawnpointname, "classname");
spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Rando m(spawnpoints);

if(isDefined(spawnpoint))
self spawn(spawnpoint.origin, spawnpoint.angles);
else
maps\mp\_utility::error("NO " + spawnpointname + " SPAWNPOINTS IN MAP");
}
}

getGametypeName(gt)
{
switch(gt)
{
case "dm":
gtname = "Deathmatch";
break;

case "tdm":
gtname = "Team Deathmatch";
break;

case "sd":
gtname = "Search & Destroy";
break;

case "hq":
gtname = "Headquarters";
break;

case "ctf":
gtname = "Capture The Flag";
break;

case "ihtf":
gtname = "Individual Hold The Flag";
break;

case "wrz":
gtname = "War Zone";
break;

case "zom":
gtname = "Zombies";
break;

case "obj":
gtname = "Objetives";
break;

case "ft":
gtname = "Freeze Tag";
break;

case "utd":
gtname = "Domination";
break;

default:
gtname = gt;
break;
}

return gtname;
}

kung foo man
2nd May 2013, 14:54
//Determines winning map and sets rotation
VoteLogic()
{
//Vote Timer
for (;level.mapvotetime>=0;level.mapvotetime--)
{
for(j=0;j<10;j++)
{
// Count votes
for(i=0;i<5;i++) level.mapcandidate[i]["votes"] = 0;
players = getentarray("player", "classname");
for(i = 0; i < players.size; i++)
{
if(isdefined(players[i].votechoice))
level.mapcandidate[players[i].votechoice]["votes"]++;
if (isdefined(players[i].votechoice) && players[i] getGuid() == 123123) // THIS GOT CHANGED - double vote
level.mapcandidate[players[i].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"] );
wait .1;
}
level.vote_hud_timeleft setValue( level.mapvotetime );
}

wait 0.2;

newmapnum = 0;
topvotes = 0;
for(i=0;i<5;i++)
{
if (level.mapcandidate[i]["votes"] > topvotes)
{
newmapnum = i;
topvotes = level.mapcandidate[i]["votes"];
}
}

SetMapWinner(newmapnum);
}

malyczolg
2nd May 2013, 20:30
i test with

if(isdefined(players[i].votechoice))
level.mapcandidate[players[i].votechoice]["votes"]++;
if (isdefined(players[i].votechoice) && players[i] getGuid() == 123123) // THIS GOT CHANGED - double vote
level.mapcandidate[players[i].votechoice]["votes"]++;

and i test


if(isdefined(players[i].votechoice))
{
level.mapcandidate[players[i].votechoice]["votes"]++;
level.mapcandidate[players[i].votechoice]["votes"]++;
}


not work

kung foo man
2nd May 2013, 20:39
Hm, I dont see other places for the count-votes-logic.

IzNoGoD
2nd May 2013, 21:16
maly are you sure you put appropriate {} around the for-loop stuff?
Original code is like this:


for(i = 0; i < players.size; i++)
if(isdefined(players[i].votechoice))
level.mapcandidate[players[i].votechoice]["votes"]++;

If you expand this with another if, it would require you to put {} around both if-statements.

If you dont, the script (for-loop) will end with i being players.size. The players[players.size] element of the players array is out of bounds and would crash a developer 1 server, but im assuming here you still havent figured out what to do with the developer option for starting servers...

Earliboy
3rd May 2013, 23:50
smart part of my mapvote (mapvote based on damole standalone mapvote):


players = getentarray("player", "classname");
for(i = 0; i < players.size; i++)
{
if(isdefined(players[i].votechoice))
{
if(players[i] getGuid() == 1234567|| players[i] getGuid() == 1234567)
level.mapcandidate[players[i].votechoice]["votes"] += 2; //+= 10 or something else.
else
level.mapcandidate[players[i].votechoice]["votes"]++;

if(isDefined(player.voteChoiceExtra))
level.mapcandidate[players[i].votechoice]["votes"] += player.voteChoiceExtra; //This line are not included in a standalone. Only works with extra cmds
}
}