833 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			833 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
#pragma semicolon 1
 | 
						||
#define DEBUG
 | 
						||
#define PLUGIN_AUTHOR "jenz"
 | 
						||
#define PLUGIN_VERSION "2.00"
 | 
						||
 | 
						||
#include <sourcemod>
 | 
						||
#include <sdktools>
 | 
						||
 | 
						||
#pragma newdecls required
 | 
						||
char g_cPollText[256][512];
 | 
						||
char g_cPollVotes[256][512];
 | 
						||
char g_cPollIRunOutOfNames[256][512];
 | 
						||
char g_cPollTextClient[256];
 | 
						||
char g_cPollVotesCvar[256];
 | 
						||
char g_cPollCommands[512];
 | 
						||
int g_iPollVoteWithHigestResult;
 | 
						||
int g_iPollVotesCvar;
 | 
						||
int g_iPollIndex;
 | 
						||
int g_iAdminSay[MAXPLAYERS];
 | 
						||
int g_iAdminVoteOptions[MAXPLAYERS];
 | 
						||
Handle g_hTimer;
 | 
						||
 | 
						||
public Plugin myinfo = 
 | 
						||
{
 | 
						||
	name = "Unloze ingame polls",
 | 
						||
	author = PLUGIN_AUTHOR,
 | 
						||
	description = "ingame polls",
 | 
						||
	version = PLUGIN_VERSION,
 | 
						||
	url = "www.unloze.com"
 | 
						||
};
 | 
						||
 | 
						||
//----------------------------------------------------------------------------------------------------
 | 
						||
// Purpose:
 | 
						||
//----------------------------------------------------------------------------------------------------
 | 
						||
public void OnPluginStart()
 | 
						||
{
 | 
						||
	//Reg Cmds
 | 
						||
	RegConsoleCmd("sm_poll", Cmd_Polls, "Vote on ongoing polls");
 | 
						||
	RegConsoleCmd("sm_polls", Cmd_Polls, "Vote on ongoing polls");
 | 
						||
	RegConsoleCmd("say", Cmd_Say);
 | 
						||
	
 | 
						||
	//mysql
 | 
						||
	SQL_StartConnection();
 | 
						||
	
 | 
						||
	//admin cmds
 | 
						||
	RegAdminCmd("sm_pollmenu", Cmd_pollAdminMenu, ADMFLAG_GENERIC);
 | 
						||
}
 | 
						||
 | 
						||
public void OnMapStart()
 | 
						||
{
 | 
						||
	MySQLSelectPollTitles();
 | 
						||
	CreateTimer(1.0, evaluatedelayAll, INVALID_HANDLE);
 | 
						||
	g_hTimer = CreateTimer(260.0, pollNotifier, INVALID_HANDLE, TIMER_REPEAT);
 | 
						||
	//change to 260.0 again for main server
 | 
						||
}
 | 
						||
 | 
						||
public void OnMapEnd()
 | 
						||
{
 | 
						||
	if (g_hTimer != INVALID_HANDLE)
 | 
						||
	{
 | 
						||
		KillTimer(g_hTimer);
 | 
						||
		g_hTimer = INVALID_HANDLE;
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
//----------------------------------------------------------------------------------------------------
 | 
						||
// Purpose:
 | 
						||
//----------------------------------------------------------------------------------------------------
 | 
						||
public void InitializeQueries(char[] PollText)
 | 
						||
{
 | 
						||
	int l_iPollVoteOptions;
 | 
						||
	int l_iMax;
 | 
						||
	int i_lCounter;
 | 
						||
	//for loop here to count votes for each option of the specified poll
 | 
						||
	//needs state 0 to only count active votes
 | 
						||
	l_iPollVoteOptions = MySQLSelectPollVotes(PollText, 0);
 | 
						||
	for (int j = 0; j <= l_iPollVoteOptions; j++)
 | 
						||
	{
 | 
						||
		l_iMax = MySQLQueryVotes(PollText, j);
 | 
						||
		if (l_iMax > i_lCounter)
 | 
						||
		{
 | 
						||
			//index 4 is wrong should be 3
 | 
						||
			g_iPollVoteWithHigestResult = j;
 | 
						||
			i_lCounter = l_iMax;
 | 
						||
		}
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
public Action ExecuteVoteCommand(char[] command, bool mapstart)
 | 
						||
{
 | 
						||
	if (StrContains(command, "mp_", true) == -1 && StrContains(command, "sv_", true) == -1 && StrContains(command, "plugins", true) == -1)
 | 
						||
	{
 | 
						||
		ServerCommand(command);	
 | 
						||
	}
 | 
						||
	else if (mapstart)
 | 
						||
	{
 | 
						||
		ServerCommand(command);	
 | 
						||
	}
 | 
						||
	//PrintToChatAll("command: %s", command);
 | 
						||
	return Plugin_Handled;
 | 
						||
}
 | 
						||
 | 
						||
//----------------------------------------------------------------------------------------------------
 | 
						||
// Purpose:
 | 
						||
//----------------------------------------------------------------------------------------------------
 | 
						||
public Action evaluatedelay(Handle timer)
 | 
						||
{
 | 
						||
	char command[512];
 | 
						||
	InitializeQueries(g_cPollTextClient);
 | 
						||
	MySQLSelectHighestVoteForPoll(g_cPollText[g_iPollVotesCvar][256], g_iPollVoteWithHigestResult);
 | 
						||
	Format(command, sizeof(command), g_cPollCommands);
 | 
						||
	ExecuteVoteCommand(command, false);
 | 
						||
}
 | 
						||
 | 
						||
//experimental to launch all on mapstart
 | 
						||
public Action evaluatedelayAll(Handle timer)
 | 
						||
{
 | 
						||
	int l_iIndex;
 | 
						||
	char command[512];
 | 
						||
	//should correctly itterate through all
 | 
						||
	//[numberOfStrings][lengthOfLongestString]
 | 
						||
	while (g_cPollText[l_iIndex][256] != '\0')
 | 
						||
	{
 | 
						||
		InitializeQueries(g_cPollText[l_iIndex][256]);
 | 
						||
		MySQLSelectHighestVoteForPoll(g_cPollText[l_iIndex][256], g_iPollVoteWithHigestResult);
 | 
						||
		Format(command, sizeof(command), g_cPollCommands);
 | 
						||
		ExecuteVoteCommand(command, true);
 | 
						||
		l_iIndex++;	
 | 
						||
	}
 | 
						||
}
 | 
						||
//----------------------------------------------------------------------------------------------------
 | 
						||
// Purpose:
 | 
						||
//----------------------------------------------------------------------------------------------------
 | 
						||
public Action pollNotifier(Handle timer)
 | 
						||
{
 | 
						||
	int l_iIndex;
 | 
						||
	//edited
 | 
						||
	while (g_cPollText[l_iIndex][256] != '\0')
 | 
						||
	{
 | 
						||
		PrintToChatAll("\x06[UNLOZE]\x07 Current Polls: %s", g_cPollText[l_iIndex][256]);
 | 
						||
		l_iIndex++;	
 | 
						||
	}
 | 
						||
	PrintToChatAll("\x06[UNLOZE]\x07 Type !poll to vote");
 | 
						||
}
 | 
						||
 | 
						||
public Action Cmd_pollAdminMenu(int client, int args)
 | 
						||
{
 | 
						||
	EditPollAdminMenu(client);
 | 
						||
}
 | 
						||
 | 
						||
public Action EditPollAdminMenu(int client)
 | 
						||
{
 | 
						||
	Menu menu1 = new Menu(Menu_PollAdminMenu);
 | 
						||
	menu1.SetTitle("[UNLOZE] Admin menu to edit polls");
 | 
						||
	menu1.AddItem("nuffin here", "Create new Poll");
 | 
						||
	menu1.AddItem("nuffin here", "Edit poll");
 | 
						||
	menu1.Display(client, MENU_TIME_FOREVER);
 | 
						||
}
 | 
						||
 | 
						||
//----------------------------------------------------------------------------------------------------
 | 
						||
// Purpose:
 | 
						||
//----------------------------------------------------------------------------------------------------
 | 
						||
public Action Cmd_Say(int client, int args)
 | 
						||
{
 | 
						||
	int l_iIndex;
 | 
						||
	
 | 
						||
	if (g_iAdminSay[client] == 1)
 | 
						||
	{
 | 
						||
		//edited to dimensional array
 | 
						||
		while (g_cPollText[l_iIndex][256] != '\0')
 | 
						||
		{
 | 
						||
			l_iIndex++;	
 | 
						||
		}
 | 
						||
		GetCmdArgString(g_cPollText[l_iIndex][256], sizeof(g_cPollText));
 | 
						||
		ReplaceString(g_cPollText[l_iIndex][256], sizeof(g_cPollText), "\"", "");
 | 
						||
		PrintToChat(client, "Creating new PollTitle: %s", g_cPollText[l_iIndex][256]);
 | 
						||
		//sends a new poll title to DB as a COLUMN
 | 
						||
		sendMYSQLPollTextCOLUMN(g_cPollText[l_iIndex][256]);
 | 
						||
	}
 | 
						||
	else if (g_iAdminSay[client] == 2)
 | 
						||
	{
 | 
						||
		//edited to dimensional array
 | 
						||
		char l_cArgStringUpdate[256];
 | 
						||
		GetCmdArgString(l_cArgStringUpdate, sizeof(l_cArgStringUpdate));
 | 
						||
		ReplaceString(l_cArgStringUpdate, sizeof(l_cArgStringUpdate), "\"", "");
 | 
						||
		PrintToChat(client, "Updating PollTitle to: %s", l_cArgStringUpdate);
 | 
						||
		//update the coloumn title if somebody wants to rename poll
 | 
						||
		//g_iPollIndex stores what POll an admin choose to edit
 | 
						||
		MySQLUpdateTextCOLUMN(g_cPollText[g_iPollIndex][256], l_cArgStringUpdate);
 | 
						||
	}
 | 
						||
	if (g_iAdminVoteOptions[client] == 1)
 | 
						||
	{
 | 
						||
		char l_cDummy[1];
 | 
						||
		GetCmdArgString(g_cPollVotes[client][256], sizeof(g_cPollVotes));
 | 
						||
		ReplaceString(g_cPollVotes[client][256], sizeof(g_cPollVotes), "\"", "");
 | 
						||
		PrintToChat(client, "Made %s an Vote Option", g_cPollVotes[client][256]);
 | 
						||
		PrintToChat(client, "Give the Vote Option a COMMAND BEFORE MAKING NEXT VOTE OPTION");
 | 
						||
		
 | 
						||
		//After each vote option its cvar has to be set before next vote option can be made 
 | 
						||
		mysqlStoreVoteOption(0, l_cDummy[0], client);
 | 
						||
	}
 | 
						||
	else if (g_iAdminVoteOptions[client] == 2)
 | 
						||
	{
 | 
						||
		char l_cPollcommands[256][512];
 | 
						||
		GetCmdArgString(l_cPollcommands[0][256], sizeof(l_cPollcommands));
 | 
						||
		ReplaceString(l_cPollcommands[0][256], sizeof(l_cPollcommands), "\"", "");
 | 
						||
		PrintToChat(client, "\x06Added %s as a cvar/command to vote option: %s", l_cPollcommands[0][256], g_cPollVotesCvar);
 | 
						||
		PrintToChat(client, "You can now add another vote option to the poll");
 | 
						||
		//After each vote option its cvar has to be set before next vote option can be made
 | 
						||
		mysqlStoreVoteOption(1, l_cPollcommands[0][256], client);
 | 
						||
	}
 | 
						||
	//Updating all polltitles
 | 
						||
	MySQLSelectPollTitles();
 | 
						||
	g_iAdminSay[client] = 0;
 | 
						||
	g_iAdminVoteOptions[client] = 0;
 | 
						||
	return Plugin_Continue;
 | 
						||
}
 | 
						||
 | 
						||
public Action Cmd_Polls(int client, int args)
 | 
						||
{
 | 
						||
	//select what poll to vote on
 | 
						||
	pollMenu(client, 0);
 | 
						||
	return Plugin_Handled;
 | 
						||
}
 | 
						||
 | 
						||
public void pollMenu(int client, int state)
 | 
						||
{
 | 
						||
	char c_activePoll1[512][512];
 | 
						||
	Menu menu1;
 | 
						||
	if (state == 0)
 | 
						||
	{
 | 
						||
		menu1 = new Menu(Menu_onGoingPolls);
 | 
						||
	}
 | 
						||
	else
 | 
						||
	{
 | 
						||
		menu1 = new Menu(Menu_EditonGoingPolls);
 | 
						||
		menu1.AddItem("Go Back", "Go Back");
 | 
						||
	}
 | 
						||
	int i;	
 | 
						||
	menu1.SetTitle("Active Polls:");
 | 
						||
	while (g_cPollText[i][256] != '\0')
 | 
						||
	{
 | 
						||
		Format(c_activePoll1[i][256], sizeof(c_activePoll1), g_cPollText[i][256]);
 | 
						||
		menu1.AddItem("nuffin here", c_activePoll1[i][256]);
 | 
						||
		i++;	
 | 
						||
	}
 | 
						||
	if (i < 1)
 | 
						||
	{
 | 
						||
		PrintToChat(client, "There are currently no Active polls to vote on");
 | 
						||
		return;
 | 
						||
	}
 | 
						||
	//display votes count for each vote here
 | 
						||
	menu1.Display(client, MENU_TIME_FOREVER);
 | 
						||
}
 | 
						||
 | 
						||
public void pollSubSection(int client, int selection)
 | 
						||
{
 | 
						||
	char l_cActivePoll[512];
 | 
						||
	char l_cPollIRunOutOfNames[256][512];
 | 
						||
	int l_iPollVoteOptions;
 | 
						||
	int l_iMax;
 | 
						||
	//selection here is the poll index that is voted on
 | 
						||
	g_iPollVotesCvar = selection;
 | 
						||
	Format(l_cActivePoll, sizeof(l_cActivePoll), g_cPollText[selection][256]);
 | 
						||
	Format(g_cPollTextClient, sizeof(g_cPollTextClient), l_cActivePoll);
 | 
						||
	Menu menu = new Menu(Menu_IndividualPoll);
 | 
						||
	//needs state 1 to select all vote options, aka not voted for yet
 | 
						||
	l_iPollVoteOptions = MySQLSelectPollVotes(l_cActivePoll, 1);
 | 
						||
	menu.SetTitle("Poll to vote on: %s", l_cActivePoll);
 | 
						||
	menu.AddItem("Go Back", "Go Back");
 | 
						||
	//for loop here to take care of all vote options for each pollText
 | 
						||
	for (int j = 0; j < l_iPollVoteOptions; j++)
 | 
						||
	{
 | 
						||
		menu.AddItem(g_cPollIRunOutOfNames[j][256], g_cPollIRunOutOfNames[j][256]);
 | 
						||
	}
 | 
						||
	for (int i = 0; i < l_iPollVoteOptions; i++)
 | 
						||
	{
 | 
						||
		//should be correct with searching for polltext
 | 
						||
		l_iMax = MySQLQueryVotes(g_cPollText[selection][256], i);	
 | 
						||
		Format(l_cPollIRunOutOfNames[i][256], sizeof(l_cPollIRunOutOfNames), "%s = VOTES %i", g_cPollIRunOutOfNames[i][256], l_iMax);
 | 
						||
		menu.AddItem("", l_cPollIRunOutOfNames[i][256], ITEMDRAW_DISABLED);
 | 
						||
	}
 | 
						||
	menu.Display(client, MENU_TIME_FOREVER);
 | 
						||
}
 | 
						||
 | 
						||
public int Menu_EditonGoingPolls(Menu menu, MenuAction action, int client, int selection)
 | 
						||
{
 | 
						||
	if (action == MenuAction_Select)
 | 
						||
	{
 | 
						||
		char info[32];
 | 
						||
		menu.GetItem(selection, info, sizeof(info));
 | 
						||
		if (StrContains(info, "Go Back", true) > -1)
 | 
						||
		{
 | 
						||
			EditPollAdminMenu(client);
 | 
						||
		}
 | 
						||
		else
 | 
						||
		{
 | 
						||
			//storing selection
 | 
						||
			char l_cAtivePoll[512];
 | 
						||
			Format(l_cAtivePoll, sizeof(l_cAtivePoll), g_cPollText[selection][256]);
 | 
						||
			//get selected poll to edit down here so the cmd_say knows which index to update
 | 
						||
			g_cPollVotes[client][256] = selection;
 | 
						||
			g_iPollIndex = selection;
 | 
						||
			Menu menu1 = new Menu(Menu_EditSelectedPoll);
 | 
						||
			menu1.SetTitle("Selected Poll to Edit: %s", l_cAtivePoll);
 | 
						||
			menu1.AddItem("", "Rename Poll Title");
 | 
						||
			menu1.AddItem("", "add vote options");
 | 
						||
			menu1.AddItem("", "Add cvar or command to execute for each vote option");
 | 
						||
			menu1.AddItem("", "Delete poll");
 | 
						||
			menu1.Display(client, MENU_TIME_FOREVER);	
 | 
						||
		}
 | 
						||
	}
 | 
						||
	else if (action == MenuAction_End)
 | 
						||
	{
 | 
						||
		delete menu;
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
public int Menu_EditSelectedPoll(Menu menu, MenuAction action, int client, int selection)
 | 
						||
{
 | 
						||
	if (action == MenuAction_Select)
 | 
						||
	{
 | 
						||
		if (selection == 0)
 | 
						||
		{
 | 
						||
			g_iAdminSay[client] = 2;
 | 
						||
			PrintToChat(client, "Enter the poll Title into the chat to update it!");
 | 
						||
		}
 | 
						||
		else if (selection == 1)
 | 
						||
		{
 | 
						||
			//display menu here to list the polls current vote options
 | 
						||
			//and ability to add new one
 | 
						||
			int l_iPollVoteOptions;
 | 
						||
			char c_activePoll[512];
 | 
						||
			Format(c_activePoll, sizeof(c_activePoll), g_cPollText[g_iPollIndex][256]);
 | 
						||
			//needs state 1 to select all possible vote options
 | 
						||
			l_iPollVoteOptions = MySQLSelectPollVotes(c_activePoll, 1);
 | 
						||
			
 | 
						||
			//gets c_activePoll correctly now ingame
 | 
						||
			Menu menu1 = new Menu(Menu_pollSpecificVoteOptions);
 | 
						||
			menu1.SetTitle("Selected Poll %s has Vote Options:", c_activePoll);
 | 
						||
			
 | 
						||
			//gets these correctly now
 | 
						||
			for (int j = 0; j < l_iPollVoteOptions; j++)
 | 
						||
			{
 | 
						||
				menu1.AddItem(g_cPollIRunOutOfNames[j][256], g_cPollIRunOutOfNames[j][256], ITEMDRAW_DISABLED);
 | 
						||
			}
 | 
						||
			
 | 
						||
			menu1.AddItem("AddVote Option", "AddVote Option");
 | 
						||
			menu1.Display(client, MENU_TIME_FOREVER);
 | 
						||
		}
 | 
						||
		else if (selection == 2)
 | 
						||
		{
 | 
						||
			//menu displaying vote options here
 | 
						||
			int l_iPollVoteOptions;
 | 
						||
			char c_activePoll[512];
 | 
						||
			Format(c_activePoll, sizeof(c_activePoll), g_cPollText[g_iPollIndex][256]);
 | 
						||
			//needs state 1 to select all possible vote options
 | 
						||
			l_iPollVoteOptions = MySQLSelectPollVotes(c_activePoll, 1);
 | 
						||
			Menu menu1 = new Menu(Menu_PollAdminCvartoVote);
 | 
						||
			menu1.SetTitle("[UNLOZE] Select what vote Option to Give a cvar/command");
 | 
						||
			for (int j = 0; j < l_iPollVoteOptions; j++)
 | 
						||
			{
 | 
						||
				menu1.AddItem(g_cPollIRunOutOfNames[j][256], g_cPollIRunOutOfNames[j][256]);
 | 
						||
			}
 | 
						||
			if (l_iPollVoteOptions > 0)
 | 
						||
			{
 | 
						||
				menu1.Display(client, MENU_TIME_FOREVER);
 | 
						||
			}
 | 
						||
			else
 | 
						||
			{
 | 
						||
				PrintToChat(client, "There currently aren´t any Vote options, add one to give it a cvar");
 | 
						||
			}
 | 
						||
		}
 | 
						||
		else if (selection == 3)
 | 
						||
		{
 | 
						||
			//add option to delete poll here
 | 
						||
			char c_activePoll[512];
 | 
						||
			Format(c_activePoll, sizeof(c_activePoll), g_cPollText[g_iPollIndex][256]);
 | 
						||
			MySQLDeletePoll(c_activePoll);
 | 
						||
			//Updating all polltitles
 | 
						||
			MySQLSelectPollTitles();
 | 
						||
		}
 | 
						||
	}
 | 
						||
	else if (action == MenuAction_End)
 | 
						||
	{
 | 
						||
		delete menu;
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
public int Menu_pollSpecificVoteOptions(Menu menu, MenuAction action, int client, int selection)
 | 
						||
{
 | 
						||
	if (action == MenuAction_Select)
 | 
						||
	{
 | 
						||
		char info[32];
 | 
						||
		menu.GetItem(selection, info, sizeof(info));
 | 
						||
		if (StrContains(info, "AddVote Option", true) > -1)
 | 
						||
		{
 | 
						||
			//Does insert part correctly with mysql query on mywebsql
 | 
						||
			g_iAdminVoteOptions[client] = 1;
 | 
						||
			PrintToChat(client, "Enter the vote option into the chat!");
 | 
						||
		}
 | 
						||
	}
 | 
						||
	else if (action == MenuAction_End)
 | 
						||
	{
 | 
						||
		delete menu;
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
public int Menu_PollAdminCvartoVote(Menu menu, MenuAction action, int client, int selection)
 | 
						||
{
 | 
						||
	if (action == MenuAction_Select)
 | 
						||
	{
 | 
						||
		//storing which vote option to edit
 | 
						||
		char info[256];
 | 
						||
		menu.GetItem(selection, info, sizeof(info));
 | 
						||
		g_cPollVotesCvar = info;
 | 
						||
		//PrintToChatAll("g_cPollVotesCvar: %s", g_cPollVotesCvar);
 | 
						||
		g_iAdminVoteOptions[client] = 2;
 | 
						||
		PrintToChat(client, "Enter the cvar/command related to the vote into the chat");
 | 
						||
	}
 | 
						||
	else if (action == MenuAction_End)
 | 
						||
	{
 | 
						||
		delete menu;
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
public int Menu_onGoingPolls(Menu menu, MenuAction action, int client, int selection)
 | 
						||
{
 | 
						||
	if (action == MenuAction_Select)
 | 
						||
	{
 | 
						||
		//VoteOption from the Poll to vote on
 | 
						||
		pollSubSection(client, selection);
 | 
						||
	}
 | 
						||
	else if (action == MenuAction_End)
 | 
						||
	{
 | 
						||
		delete menu;
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
public int Menu_IndividualPoll(Menu menu, MenuAction action, int client, int selection)
 | 
						||
{
 | 
						||
	if (action == MenuAction_Select)
 | 
						||
	{	
 | 
						||
		char info[32];
 | 
						||
		menu.GetItem(selection, info, sizeof(info));
 | 
						||
		if (StrContains(info, "Go Back", true) > -1)
 | 
						||
		{
 | 
						||
			pollMenu(client, 0);
 | 
						||
		}
 | 
						||
		else
 | 
						||
		{
 | 
						||
			char VOTE[256];
 | 
						||
			menu.GetItem(selection, VOTE, sizeof(VOTE));
 | 
						||
			PrintToChat(client, "You voted %s", VOTE);
 | 
						||
			MYSQLInsertVotes(client, g_cPollTextClient, VOTE);
 | 
						||
			CreateTimer(1.0, evaluatedelay, INVALID_HANDLE);
 | 
						||
		}
 | 
						||
	}
 | 
						||
	else if (action == MenuAction_End)
 | 
						||
	{
 | 
						||
		delete menu;
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
public int Menu_PollAdminMenu(Menu menu, MenuAction action, int client, int selection)
 | 
						||
{
 | 
						||
	if (action == MenuAction_Select)
 | 
						||
	{
 | 
						||
		if (selection == 0)
 | 
						||
		{
 | 
						||
			g_iAdminSay[client] = 1;
 | 
						||
			PrintToChat(client, "Enter the poll text into the chat!");
 | 
						||
		}
 | 
						||
		else if (selection == 1)
 | 
						||
		{
 | 
						||
			//select what poll to edit
 | 
						||
			pollMenu(client, 1);
 | 
						||
		}
 | 
						||
	}
 | 
						||
	else if (action == MenuAction_End)
 | 
						||
	{
 | 
						||
		delete menu;
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
//----------------------------------------------------------------------------------------------------
 | 
						||
// Purpose:
 | 
						||
//----------------------------------------------------------------------------------------------------
 | 
						||
public void OnClientDisconnect (int client)
 | 
						||
{
 | 
						||
	g_iAdminSay[client] = 0;
 | 
						||
	g_iAdminVoteOptions[client] = 0;
 | 
						||
}
 | 
						||
 | 
						||
public void OnClientPostAdminCheck(int client)
 | 
						||
{
 | 
						||
	g_iAdminSay[client] = 0;
 | 
						||
	g_iAdminVoteOptions[client] = 0;
 | 
						||
}
 | 
						||
 | 
						||
//----------------------------------------------------------------------------------------------------
 | 
						||
// Purpose: MYSQL queries
 | 
						||
//----------------------------------------------------------------------------------------------------
 | 
						||
 
 | 
						||
public void SQL_StartConnection()
 | 
						||
{
 | 
						||
    char error[255];
 | 
						||
    Database db;
 | 
						||
    if (SQL_CheckConfig("unloze_tracerpref"))
 | 
						||
    {
 | 
						||
        db = SQL_Connect("unloze_tracerpref", true, error, sizeof(error));
 | 
						||
    }
 | 
						||
    if (db == null)
 | 
						||
    {
 | 
						||
        PrintToChatAll("{green}[Unloze] {white}Error! Could not connect to MYSQL-DB!");
 | 
						||
        delete db;
 | 
						||
        return;
 | 
						||
    }
 | 
						||
    //create tables
 | 
						||
    char sQuery[255];
 | 
						||
    Format(sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS `unloze_pollvotes` (`steam_id` VARCHAR(64) NOT NULL, PRIMARY KEY (`steam_id`))");
 | 
						||
    SQL_TQuery(db, DummyCallbackSimple, sQuery);
 | 
						||
    Format(sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS `unloze_pollVoteCvars` (`command` VARCHAR(256) NOT NULL, PRIMARY KEY (`command`))");
 | 
						||
    SQL_TQuery(db, DummyCallbackSimple, sQuery);
 | 
						||
    delete db;
 | 
						||
}
 | 
						||
 | 
						||
public void MySQLUpdateTextCOLUMN(char[] CurrentPollText, char[] NewPollText)
 | 
						||
{
 | 
						||
	char error[255];
 | 
						||
	char sQuery[512];
 | 
						||
	Database db;
 | 
						||
	if (SQL_CheckConfig("unloze_tracerpref"))
 | 
						||
	{
 | 
						||
		db = SQL_Connect("unloze_tracerpref", true, error, sizeof(error));
 | 
						||
	}
 | 
						||
	if (db == null)
 | 
						||
	{
 | 
						||
		PrintToChatAll("{green}[Unloze] {white}Error! Could not connect to MYSQL-DB!");
 | 
						||
		delete db;
 | 
						||
		return;
 | 
						||
	}
 | 
						||
	Format(sQuery, sizeof(sQuery), "ALTER TABLE `unloze_pollvotes` CHANGE `%s` `%s` VARCHAR(256) NOT NULL;", CurrentPollText, NewPollText);
 | 
						||
	SQL_TQuery(db, DummyCallbackSimple, sQuery);
 | 
						||
	Format(sQuery, sizeof(sQuery), "ALTER TABLE `unloze_pollVoteCvars` CHANGE `%s` `%s` VARCHAR(256) NOT NULL;", CurrentPollText, NewPollText);
 | 
						||
	SQL_TQuery(db, DummyCallbackSimple, sQuery);
 | 
						||
	delete db;
 | 
						||
}
 | 
						||
 | 
						||
public void sendMYSQLPollTextCOLUMN(char[] pollText)
 | 
						||
{
 | 
						||
	char error[255];
 | 
						||
	char sQuery[512];
 | 
						||
	Database db;
 | 
						||
	if (SQL_CheckConfig("unloze_tracerpref"))
 | 
						||
	{
 | 
						||
		db = SQL_Connect("unloze_tracerpref", true, error, sizeof(error));
 | 
						||
	}
 | 
						||
	if (db == null)
 | 
						||
	{
 | 
						||
		PrintToChatAll("{green}[Unloze] {white}Error! Could not connect to MYSQL-DB!");
 | 
						||
		delete db;
 | 
						||
		return;
 | 
						||
	}
 | 
						||
	Format(sQuery, sizeof(sQuery), "ALTER TABLE `unloze_pollvotes` ADD COLUMN `%s` VARCHAR(256) NOT NULL;", pollText);
 | 
						||
	SQL_TQuery(db, DummyCallbackSimple, sQuery);
 | 
						||
	Format(sQuery, sizeof(sQuery), "ALTER TABLE `unloze_pollVoteCvars` ADD COLUMN `%s` VARCHAR(256) NOT NULL;", pollText);
 | 
						||
	SQL_TQuery(db, DummyCallbackSimple, sQuery);
 | 
						||
	delete db;
 | 
						||
}
 | 
						||
 | 
						||
public void MYSQLInsertVotes(int client, char[] pollText, char[] VOTE)
 | 
						||
{
 | 
						||
	char error[255];
 | 
						||
	char sQuery[512];
 | 
						||
	char sSID[64];
 | 
						||
	Database db;
 | 
						||
	GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
 | 
						||
	if (SQL_CheckConfig("unloze_tracerpref"))
 | 
						||
	{
 | 
						||
		db = SQL_Connect("unloze_tracerpref", true, error, sizeof(error));
 | 
						||
	}
 | 
						||
	if (db == null)
 | 
						||
	{
 | 
						||
		PrintToChat(client, "{green}[Unloze] {white}Error! Could not connect to MYSQL-DB!");
 | 
						||
		delete db;
 | 
						||
		return;
 | 
						||
	}
 | 
						||
	GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
 | 
						||
	Format(sQuery, sizeof(sQuery), "INSERT INTO `unloze_pollvotes` (`steam_id`,`%s`) VALUES ('%s', '%s') ON DUPLICATE KEY UPDATE `%s` = '%s'", pollText, sSID, VOTE, pollText, VOTE);
 | 
						||
	//PrintToChatAll("MYSQLInsertVotes sQuery: %s", sQuery);
 | 
						||
	SQL_TQuery(db, DummyCallbackSimple, sQuery);
 | 
						||
	delete db;
 | 
						||
}
 | 
						||
 | 
						||
public void mysqlStoreVoteOption(int state, char[] Command, int client)
 | 
						||
{
 | 
						||
	char error[255];
 | 
						||
	Database db;
 | 
						||
	
 | 
						||
	if (SQL_CheckConfig("unloze_tracerpref"))
 | 
						||
	{
 | 
						||
		db = SQL_Connect("unloze_tracerpref", true, error, sizeof(error));
 | 
						||
	}
 | 
						||
	if (db == null)
 | 
						||
	{
 | 
						||
		delete db;
 | 
						||
		return;
 | 
						||
	}
 | 
						||
	
 | 
						||
	char sQuery[512];
 | 
						||
	if (state == 1)
 | 
						||
	{
 | 
						||
		Format(sQuery, sizeof(sQuery), "UPDATE `unloze_pollVoteCvars` SET `command`= '%s' WHERE `%s`= '%s'", Command, g_cPollText[g_iPollIndex][256], g_cPollVotesCvar);
 | 
						||
		//PrintToChatAll("VoteOption Squery: %s", sQuery);
 | 
						||
	}
 | 
						||
	else
 | 
						||
	{
 | 
						||
		Format(sQuery, sizeof(sQuery), "INSERT INTO `unloze_pollVoteCvars` (`%s`) VALUES ('%s') ON DUPLICATE KEY UPDATE `%s` = '%s'", g_cPollText[g_iPollIndex][256], g_cPollVotes[client][256], g_cPollText[g_iPollIndex][256], g_cPollVotes[client][256]);
 | 
						||
		//PrintToChatAll("VoteOption Squery: %s", sQuery);
 | 
						||
	}
 | 
						||
	SQL_TQuery(db, DummyCallbackSimple, sQuery);
 | 
						||
	delete db;
 | 
						||
}
 | 
						||
 | 
						||
public void MySQLDeletePoll(char[] PollText)
 | 
						||
{
 | 
						||
	char error[255];
 | 
						||
	Database db;
 | 
						||
	
 | 
						||
	if (SQL_CheckConfig("unloze_tracerpref"))
 | 
						||
	{
 | 
						||
		db = SQL_Connect("unloze_tracerpref", true, error, sizeof(error));
 | 
						||
	}
 | 
						||
	if (db == null)
 | 
						||
	{
 | 
						||
		delete db;
 | 
						||
		return;
 | 
						||
	}
 | 
						||
	
 | 
						||
	char sQuery[512];
 | 
						||
	Format(sQuery, sizeof(sQuery), "ALTER TABLE unloze_pollvotes DROP COLUMN `%s`", PollText);
 | 
						||
	SQL_TQuery(db, DummyCallbackSimple, sQuery);
 | 
						||
	Format(sQuery, sizeof(sQuery), "ALTER TABLE unloze_pollVoteCvars DROP COLUMN `%s`", PollText);
 | 
						||
	SQL_TQuery(db, DummyCallbackSimple, sQuery);
 | 
						||
	delete db;
 | 
						||
}
 | 
						||
 | 
						||
public int MySQLQueryVotes(char[] PollText, int indexJ)
 | 
						||
{
 | 
						||
	char sQuery[512];
 | 
						||
	char error[255];
 | 
						||
	int l_iCounter;
 | 
						||
	Database db;
 | 
						||
	if (SQL_CheckConfig("unloze_tracerpref"))
 | 
						||
	{
 | 
						||
		db = SQL_Connect("unloze_tracerpref", true, error, sizeof(error));
 | 
						||
	}
 | 
						||
	if (db == null)
 | 
						||
	{
 | 
						||
		delete db;
 | 
						||
		return 0;
 | 
						||
	}
 | 
						||
	DBResultSet rs;
 | 
						||
	Format(sQuery, sizeof(sQuery), "SELECT COUNT(*) FROM unloze_pollvotes WHERE `%s` = '%s'", PollText, g_cPollIRunOutOfNames[indexJ][256]);
 | 
						||
 | 
						||
	if ((rs = SQL_Query(db, sQuery)) == null)
 | 
						||
	{  
 | 
						||
		delete db;
 | 
						||
		delete rs;
 | 
						||
		return 0;
 | 
						||
	}
 | 
						||
	//PrintToChatAll("success: %s", sQuery);
 | 
						||
	if (rs.RowCount > 0 && rs.FetchRow())
 | 
						||
	{
 | 
						||
		char l_cPollVoteCounter[512];
 | 
						||
		SQL_FetchString(rs, 0, l_cPollVoteCounter, sizeof(l_cPollVoteCounter));
 | 
						||
		//PrintToChatAll("l_cPollVoteCounter: %s", l_cPollVoteCounter);
 | 
						||
		//counting votes
 | 
						||
		l_iCounter = StringToInt(l_cPollVoteCounter);
 | 
						||
	}
 | 
						||
	delete rs;
 | 
						||
	delete db;
 | 
						||
	return l_iCounter;
 | 
						||
}
 | 
						||
 | 
						||
public void MySQLSelectPollTitles()
 | 
						||
{
 | 
						||
	char error[255];
 | 
						||
	Database db;
 | 
						||
	if (SQL_CheckConfig("unloze_tracerpref"))
 | 
						||
	{
 | 
						||
		db = SQL_Connect("unloze_tracerpref", true, error, sizeof(error));
 | 
						||
	}
 | 
						||
	if (db == null)
 | 
						||
	{
 | 
						||
		delete db;
 | 
						||
		return;
 | 
						||
	}
 | 
						||
	char sQuery[512];
 | 
						||
	//Collects the column_names requires
 | 
						||
	Format(sQuery, sizeof(sQuery), "SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_NAME = 'unloze_pollvotes'");
 | 
						||
	
 | 
						||
	DBResultSet rs;
 | 
						||
	
 | 
						||
	if ((rs = SQL_Query(db, sQuery)) == null)
 | 
						||
	{  
 | 
						||
		delete db;
 | 
						||
		delete rs;
 | 
						||
		Format(g_cPollText[0][256], sizeof(g_cPollText), "No Active polls");
 | 
						||
		return;
 | 
						||
	}
 | 
						||
	int index;
 | 
						||
	if (rs.RowCount > 0)
 | 
						||
	{
 | 
						||
		//should skip steam_id
 | 
						||
		rs.FetchRow();
 | 
						||
		while (rs.FetchRow())
 | 
						||
		{
 | 
						||
			//should be 0
 | 
						||
			SQL_FetchString(rs, 0, g_cPollText[index][256], sizeof(g_cPollText));
 | 
						||
			index++;
 | 
						||
		}
 | 
						||
	}
 | 
						||
	delete rs;
 | 
						||
	delete db;
 | 
						||
}
 | 
						||
 | 
						||
public int MySQLSelectPollVotes(char[] PollText, int state)
 | 
						||
{
 | 
						||
	char error[255];
 | 
						||
	Database db;
 | 
						||
	if (SQL_CheckConfig("unloze_tracerpref"))
 | 
						||
	{
 | 
						||
		db = SQL_Connect("unloze_tracerpref", true, error, sizeof(error));
 | 
						||
	}
 | 
						||
	if (db == null)
 | 
						||
	{
 | 
						||
		delete db;
 | 
						||
		return 0;
 | 
						||
	}
 | 
						||
	char sQuery[512];
 | 
						||
	if (state == 1)
 | 
						||
	{
 | 
						||
		Format(sQuery, sizeof(sQuery), "SELECT `%s` FROM unloze_pollVoteCvars", PollText);
 | 
						||
	}
 | 
						||
	else
 | 
						||
	{
 | 
						||
		Format(sQuery, sizeof(sQuery), "SELECT `%s` FROM unloze_pollvotes", PollText);
 | 
						||
	}
 | 
						||
	//PrintToChatAll("Query i want: %s", sQuery);
 | 
						||
	DBResultSet rs;
 | 
						||
	
 | 
						||
	if ((rs = SQL_Query(db, sQuery)) == null)
 | 
						||
	{  
 | 
						||
		delete db;
 | 
						||
		delete rs;
 | 
						||
		Format(g_cPollIRunOutOfNames[0][256], sizeof(g_cPollIRunOutOfNames), "No Active Votes available for the poll");
 | 
						||
		return 0;
 | 
						||
	}
 | 
						||
	int index;
 | 
						||
	char l_cLocalFix[256][512];
 | 
						||
	//regardless of state 1/0 it should need this to allocate it slightly more effectively
 | 
						||
	if (rs.RowCount > 0)
 | 
						||
	{
 | 
						||
		while (rs.FetchRow())
 | 
						||
		{
 | 
						||
			//preventing empty fields
 | 
						||
			SQL_FetchString(rs, 0, l_cLocalFix[index][256], sizeof(l_cLocalFix));
 | 
						||
			if (l_cLocalFix[index][256] != '\0')
 | 
						||
			{
 | 
						||
				Format(g_cPollIRunOutOfNames[index][256], sizeof(g_cPollIRunOutOfNames), l_cLocalFix[index][256]);
 | 
						||
				//PrintToChatAll("SUCCESS g_cPollIRunOutOfNames[index][256]: %s", g_cPollIRunOutOfNames[index][256]);
 | 
						||
				index++;
 | 
						||
			}
 | 
						||
		}
 | 
						||
	}
 | 
						||
	delete rs;
 | 
						||
	delete db;
 | 
						||
	return index;
 | 
						||
}
 | 
						||
 | 
						||
public void MySQLSelectHighestVoteForPoll(char[] PollText, int index)
 | 
						||
{
 | 
						||
	char error[255];
 | 
						||
	Database db;
 | 
						||
	if (SQL_CheckConfig("unloze_tracerpref"))
 | 
						||
	{
 | 
						||
		db = SQL_Connect("unloze_tracerpref", true, error, sizeof(error));
 | 
						||
	}
 | 
						||
	if (db == null)
 | 
						||
	{
 | 
						||
		delete db;
 | 
						||
		return;
 | 
						||
	}
 | 
						||
	char sQuery[512];
 | 
						||
	Format(sQuery, sizeof(sQuery), "SELECT command FROM unloze_pollVoteCvars WHERE `%s` = '%s'", PollText, g_cPollIRunOutOfNames[index][256]);
 | 
						||
	//PrintToChatAll("MySQLSelectHighestVoteForPoll: %s",sQuery);
 | 
						||
	DBResultSet rs;
 | 
						||
	if ((rs = SQL_Query(db, sQuery)) == null)
 | 
						||
	{  
 | 
						||
		delete db;
 | 
						||
		delete rs;
 | 
						||
		
 | 
						||
		return;
 | 
						||
	}
 | 
						||
	if (rs.RowCount > 0 && rs.FetchRow())
 | 
						||
	{
 | 
						||
		SQL_FetchString(rs, 0, g_cPollCommands, sizeof(g_cPollCommands));
 | 
						||
	}
 | 
						||
	delete rs;
 | 
						||
	delete db;
 | 
						||
}
 | 
						||
 | 
						||
//----------------------------------------------------------------------------------------------------
 | 
						||
// Purpose:
 | 
						||
//----------------------------------------------------------------------------------------------------
 | 
						||
stock bool IsValidClient(int client)
 | 
						||
{
 | 
						||
    if (client > 0 && client <= MaxClients && IsClientInGame(client) && !IsFakeClient(client))
 | 
						||
    {
 | 
						||
        return true;
 | 
						||
    }
 | 
						||
    return false;
 | 
						||
}
 | 
						||
 | 
						||
public void DummyCallbackSimple(Handle hOwner, Handle hChild, const char[] err, DataPack pack1)
 | 
						||
{
 | 
						||
    if (hOwner == null || hChild == null)
 | 
						||
    {
 | 
						||
        LogError("Query error. (%s)", err);
 | 
						||
    }
 | 
						||
} |