PDA

View Full Version : Call a vote



Ni3ls
30th December 2015, 10:28
This is a very simple code to ask a question and see the result. You can improve it with some nice huds.
Libcod needed


case "vote":
if(isdefined(level.pers["voted"]) && level.pers["voted"] == 1)
{
self iprintlnbold("Already a vote running");
return;
}
time =0;
level.pers["voted"] = 1;
level.pers["votesyes"]=0;
level.pers["votesno"]=0;
if(isint(args[args.size-1]))
{
time = int(args[args.size-1]);
level.definetime = 1;
//iprintlnbold("time: "+time);
}
else
{
//iprintlnbold("no time, time set to 20");
time =20;
level.definetime = 0;
}
question = "";
if(isdefined(level.definetime) && level.definetime == 1)
{
for (i = 2; i < args.size-1; i++)
question += args[i] + " ";
}
else
{
for (i = 2; i < args.size; i++)
question += args[i] + " ";
}

iprintlnbold("^1Question^7: "+question);
iprintlnbold("Use !yes and !no to vote");

thread maketimer(time);
wait time;
iprintlnbold("Counting Votes");
wait 1;
iprintlnbold("Votes ^2Yes^7: "+ level.pers["votesyes"]);
iprintlnbold("Votes ^1No^7: "+ level.pers["votesno"]);

level.pers["voted"] = 0;
players = getentarray("player", "classname");
for (i = 0; i < players.size; i++)
{
players[i].pers["hasvoted"]=0;
}

return;

case "yes":
if(!isdefined(level.pers["voted"]) || level.pers["voted"] == 0)
{
self iprintlnbold("No vote running");
return;
}
if(isdefined(self.pers["hasvoted"]) && self.pers["hasvoted"] == 1)
{
self iprintlnbold("Already voted");
return;
}
level.pers["votesyes"] ++;
self.pers["hasvoted"]=1;
self iprintlnbold("You voted: ^2Yes");
return;

case "no":
if(!isdefined(level.pers["voted"]) || level.pers["voted"] == 0)
{
self iprintlnbold("No vote running");
return;
}
if(isdefined(self.pers["hasvoted"]) && self.pers["hasvoted"] == 1)
{
self iprintlnbold("Already voted");
return;
}
level.pers["votesno"] ++;
self iprintlnbold("You voted: ^1No");
return;


maketimer(time)
{
if(isDefined(level.timer))
level.timer destroy();
if(!isDefined(level.timer))
{
level.timer = newHudElem();
level.timer.x = 6;
level.timer.y = 76;
level.timer.horzAlign = "left";
level.timer.vertAlign = "top";
level.timer.fontscale = 1.5;
level.timer.label = &"^1Vote Time: ^3";
level.timer setTenthsTimer(time);
}
wait time;
if(isDefined(level.timer))
level.timer destroy();
}


isint(string)
{
return ((int(string) + "") == string + "");
}

Dont forget to precache
&"^1Vote Time: ^3";

Selbie
30th December 2015, 12:54
I see nothing related to libcod, all of this can be done in vanilla cod(2).

Also I am missing completion, this is just a code snippet (part).
You cannot start a script with a 'case' statement.

Ni3ls
30th December 2015, 13:53
Here you go

fixChatArgs(args)
{
if (isDefined(args[1]))
{ // engine is adding identifier infront of the chat message
if (getAscii(args[1][0]) >= 20 && getAscii(args[1][0]) <= 22)
{
//std\io::print("delete bad ascii code: " + std\utils::getAscii(args[1][0]) + "\n");
args[1] = getSubStr(args[1], 1);
newArgs = strTok(args[1], " ");
for (i = 0; i < newArgs.size; i++)
args[1 + i] = newArgs[i];
}
}
return args;
}
CodeCallback_PlayerCommand(args)
{
command = "";
output = "";
for (i = 0; i < args.size; i++)
output += args[i] + ", ";

//std\io::print("PLAYER COMMAND! message: " + output + "\n");
args = fixChatArgs(args);

if (args[0] == "say" && isDefined(args[1]) && args[1][0] == "!" || args[0] == "say_team" && isDefined(args[1]) && args[1][0] == "!")
{
switch (getSubStr(args[1], 1))
{
case "vote":
if(isdefined(level.pers["voted"]) && level.pers["voted"] == 1)
{
self iprintlnbold("Already a vote running");
return;
}
time =0;
level.pers["voted"] = 1;
level.pers["votesyes"]=0;
level.pers["votesno"]=0;
if(isint(args[args.size-1]))
{
time = int(args[args.size-1]);
level.definetime = 1;
//iprintlnbold("time: "+time);
}
else
{
//iprintlnbold("no time, time set to 20");
time =20;
level.definetime = 0;
}
question = "";
if(isdefined(level.definetime) && level.definetime == 1)
{
for (i = 2; i < args.size-1; i++)
question += args[i] + " ";
}
else
{
for (i = 2; i < args.size; i++)
question += args[i] + " ";
}

iprintlnbold("^1Question^7: "+question);
iprintlnbold("Use !yes and !no to vote");

thread maketimer(time);
wait time;
iprintlnbold("Counting Votes");
wait 1;
iprintlnbold("Votes ^2Yes^7: "+ level.pers["votesyes"]);
iprintlnbold("Votes ^1No^7: "+ level.pers["votesno"]);

level.pers["voted"] = 0;
players = getentarray("player", "classname");
for (i = 0; i < players.size; i++)
{
players[i].pers["hasvoted"]=0;
}

return;

case "yes":
if(!isdefined(level.pers["voted"]) || level.pers["voted"] == 0)
{
self iprintlnbold("No vote running");
return;
}
if(isdefined(self.pers["hasvoted"]) && self.pers["hasvoted"] == 1)
{
self iprintlnbold("Already voted");
return;
}
level.pers["votesyes"] ++;
self.pers["hasvoted"]=1;
self iprintlnbold("You voted: ^2Yes");
return;

case "no":
if(!isdefined(level.pers["voted"]) || level.pers["voted"] == 0)
{
self iprintlnbold("No vote running");
return;
}
if(isdefined(self.pers["hasvoted"]) && self.pers["hasvoted"] == 1)
{
self iprintlnbold("Already voted");
return;
}
level.pers["votesno"] ++;
self iprintlnbold("You voted: ^1No");
return;
}
}

self ClientCommand();


}