Left 4 Voting

From AlliedModders Wiki
Revision as of 00:30, 27 November 2008 by Devicenull (talk | contribs) (New page: Left 4 Dead has a new VGUI voting system, it's controlled by a bunch of events. If you want to use this, you are fairly limited as there's no way of adding your own issues, you are stuck ...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Left 4 Dead has a new VGUI voting system, it's controlled by a bunch of events. If you want to use this, you are fairly limited as there's no way of adding your own issues, you are stuck with what's there. Still, some of the issues allowed in the resource file are not implemented in game.

You can use a question from the left4dead_english.txt file.

How voting works

Server begins by sending a vote_started event, followed by a vote_changed event. Client's use the "Vote" command to register their votes, after which the server sends a vote_cast_yes or vote_case_no event, along with a vote_changed event.

When the vote is complete, the server sends vote_ended, followed by either vote_passed or vote_failed.

Example voting plugin

#include <sourcemod>
new yesvotes;
new novotes;
#define MAX_VOTES 4

public OnPluginStart()
{
	RegConsoleCmd("testvote",Callvote_Handler);
	RegConsoleCmd("Vote",vote);
}
public Action:Callvote_Handler(client, args)
{
	new Handle:msg = CreateEvent("vote_started");
	SetEventString(msg,"issue","#L4D_vote_kick_player");
	SetEventString(msg,"param1","gaben");
	SetEventInt(msg,"team",0);
	SetEventInt(msg,"initiator",0);
	FireEvent(msg);
	
	yesvotes = 0;
	novotes = 0;
	UpdateVotes();
	
	return Plugin_Handled;
}
public UpdateVotes()
{
	new Handle:msg = CreateEvent("vote_changed");
	SetEventInt(msg,"yesVotes",yesvotes);
	SetEventInt(msg,"noVotes",novotes);
	SetEventInt(msg,"potentialVotes",MAX_VOTES);
	FireEvent(msg);
	
	if (yesvotes+novotes == MAX_VOTES)
	{
		PrintToServer("voting complete!");
		msg = CreateEvent("vote_ended");
		FireEvent(msg);
		if (yesvotes > novotes)
		{
			msg = CreateEvent("vote_passed");
			SetEventString(msg,"details","#L4D_vote_kick_player");
			SetEventString(msg,"param1","gaben");
			SetEventInt(msg,"team",0);
			FireEvent(msg);
		}
		else
		{
			msg = CreateEvent("vote_failed");
			SetEventInt(msg,"team",0);
			FireEvent(msg);
		}
	}
}
public Action:vote(client, args)
{
	new String:arg[8];
	GetCmdArg(1,arg,8);
	PrintToServer("Got vote %s from %i",arg,client);
	if (strcmp(arg,"Yes",true) == 0)
	{
		yesvotes++;
	}
	else if (strcmp(arg,"No",true) == 0)
	{
		novotes++;
	}
	
	UpdateVotes();
	return Plugin_Continue;
}