assuming different servers work fine separated this should be first release,

This commit is contained in:
jenzur 2020-04-14 00:18:16 +02:00
parent 15285e058d
commit ef103951d2

View File

@ -33,7 +33,7 @@ public void OnPluginStart()
RegConsoleCmd("say", cmd_say);
//adm cmds
RegAdminCmd("sm_poll_commands", cmd_poll_commands, ADMFLAG_GENERIC);
RegAdminCmd("sm_exec_pollcommands", cmd_poll_commands, ADMFLAG_GENERIC);
//mysql con
sql_start_connection();
OnMapStart();
@ -42,6 +42,11 @@ public void OnPluginStart()
public void OnMapStart()
{
server_port = GetConVarInt(FindConVar("hostport"));
CreateTimer(1.0, poll_commands, INVALID_HANDLE);
}
public Action poll_commands(Handle timer)
{
mysql_find_poll_commands();
}
@ -58,12 +63,11 @@ public int MenuHandler1(Menu menu, MenuAction action, int client_, int selection
else
{
admin_editing[client_] = 5;
mysql_get_polls("vote", client_);
mysql_get_polls("vote", client_, 0);
}
}
case MenuAction_End:
{
PrintToChatAll("menu action end 1");
if (menu != INVALID_HANDLE)
delete menu;
}
@ -81,7 +85,13 @@ public int MenuHandler2(Menu menu, MenuAction action, int iclient2, int selectio
{
admin_editing[iclient2] = selection;
//PrintToChat(iclient2, "client: %N \nclient[admin_editing]: %i", iclient2, admin_editing[iclient2]);
if (selection == 1)
if (!selection)
{
mysql_find_poll_commands();
PrintToChat(iclient2, "Executed Poll commands");
polladminmenu(iclient2);
}
else if (selection == 1)
{
PrintToChat(iclient2, "Write poll question into the chat, type exit to abort");
}
@ -89,13 +99,12 @@ public int MenuHandler2(Menu menu, MenuAction action, int iclient2, int selectio
{
char pollchoice[16];
menu.GetItem(selection, pollchoice, sizeof(pollchoice));
mysql_get_polls(pollchoice, iclient2);
mysql_get_polls(pollchoice, iclient2, 1);
}
}
case MenuAction_End:
{
admin_editing[iclient2] = 0;
PrintToChatAll("menu action end 2");
if (menu != INVALID_HANDLE)
delete menu;
}
@ -126,7 +135,8 @@ public int menu_vote_poll_options(Menu menu, MenuAction action, int iclient, int
{
char info[32];
menu.GetItem(selection, info, sizeof(info));
mysql_insert_poll_vote(iclient, info, admin_table_edit[iclient]);
int coloumn_index = StringToInt(info);
mysql_insert_poll_vote(iclient, coloumn_index, admin_table_edit[iclient]);
}
case MenuAction_End:
{
@ -148,7 +158,7 @@ public int MenuHandler3(Menu menu, MenuAction action, int iclient3, int selectio
{
char info[32];
menu.GetItem(selection, info, sizeof(info));
PrintToChat(iclient3, "admin_editing[iclient3]: %i \ninfo: %s", admin_editing[iclient3], info);
//PrintToChat(iclient3, "admin_editing[iclient3]: %i \ninfo: %s", admin_editing[iclient3], info);
switch(admin_editing[iclient3])
{
case 2:
@ -176,7 +186,6 @@ public int MenuHandler3(Menu menu, MenuAction action, int iclient3, int selectio
case MenuAction_End:
{
admin_editing[iclient3] = 0;
PrintToChatAll("menu action end 3");
if (menu != INVALID_HANDLE)
delete menu;
}
@ -213,7 +222,6 @@ public int menu_edit_poll_options(Menu menu, MenuAction action, int iclient4, in
}
case MenuAction_End:
{
PrintToChatAll("menu menu_edit_poll_options");
if (menu != INVALID_HANDLE)
delete menu;
}
@ -254,7 +262,6 @@ public int editpollmenu(Menu menu, MenuAction action, int iclient5, int selectio
case MenuAction_End:
{
admin_editing[iclient5] = 0;
PrintToChatAll("menu editpollmenu");
if (menu != INVALID_HANDLE)
delete menu;
}
@ -285,7 +292,7 @@ public Action cmd_polls(int iclient, int args)
else
{
admin_editing[iclient] = 5;
mysql_get_polls("vote", iclient);
mysql_get_polls("vote", iclient, 0);
}
}
return Plugin_Handled;
@ -295,7 +302,7 @@ public void polladminmenu(int client_admin)
{
Menu menu = new Menu(MenuHandler2);
menu.SetTitle("Poll admin menu", "", client_admin);
menu.AddItem("Disabled", "", ITEMDRAW_DISABLED);
menu.AddItem("", "Execute poll commands");
menu.AddItem("", "Create new Poll");
menu.AddItem("Edit", "Edit Poll");
menu.AddItem("Enable/Disable", "Enable/Disable Poll");
@ -419,19 +426,35 @@ public void mysql_delete_poll(int iclient7, char []table_name)
char query_delete[generic_length];
Format(query_delete, sizeof(query_delete), "DROP TABLE unloze_css_polls.`%s`", table_name);
mysql_exec_prepared_statement(query_delete);
Format(query_delete, sizeof(query_delete), "DELETE FROM unloze_css_polls.poll_status WHERE poll_table = '%s'", table_name);
mysql_exec_prepared_statement(query_delete);
PrintToChat(iclient7, "removed poll %s", table_name);
editpoll(iclient7, table_name);
polladminmenu(iclient7);
}
public void mysql_insert_poll_vote(int client, char []coloumn, char table_name)
public void mysql_insert_poll_vote(int client, int coloumn_index, char []table_name)
{
char sSID[24];
DBResultSet rs_vote;
char sSID[64];
GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
Format(sSID, sizeof(sSID), "0%s", sSID[7]);
char query_insert[generic_length];
Format(query_insert, sizeof(query_insert), "DELETE FROM unloze_css_polls.%s WHERE steam_auth = '%s'", table_name, sSID);
Format(query_insert, sizeof(query_insert), "DELETE FROM unloze_css_polls.`%s` WHERE steam_id = '%s'", table_name, sSID);
//PrintToChat(client, "query_insert 0: %s", query_insert);
mysql_exec_prepared_statement(query_insert);
Format(query_insert, sizeof(query_insert), "INSERT INTO unloze_css_polls.%s (%s) VALUES (1) WHERE steam_auth = '%s'", table_name, coloumn, sSID);
Format(query_insert, sizeof(query_insert), "INSERT INTO unloze_css_polls.`%s` (`steam_id`, `%i`) VALUES ('%s', 1)", table_name, coloumn_index, sSID);
//PrintToChat(client, "query_insert 1: %s", query_insert);
mysql_exec_prepared_statement(query_insert);
Format(query_insert, sizeof(query_insert), "SELECT pt.poll_option_text FROM unloze_css_polls.`%s` ht INNER JOIN unloze_css_polls.poll_text pt WHERE pt.poll_id = %i AND ht.`%i` = 1", table_name, coloumn_index, coloumn_index);
//PrintToChat(client, "query_insert 2: %s", query_insert);
if ((rs_vote = SQL_Query(database_connection, query_insert)) != null)
{
char query_vote_result[generic_length];
rs_vote.FetchRow();
rs_vote.FetchString(0, query_vote_result, sizeof(query_vote_result));
PrintToChat(client, "Voted on poll %s for option %s", table_name, query_vote_result);
}
delete rs_vote;
}
public void mysql_vote_poll(int client, char []table_name)
@ -440,21 +463,6 @@ public void mysql_vote_poll(int client, char []table_name)
char query_vote[generic_length];
char sSID[24];
GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
Format(query_vote, sizeof(query_vote), "SELECT enabled from unloze_css_polls.poll_status WHERE poll_table = '%s'", table_name);
if ((rs_vote = SQL_Query(database_connection, query_vote)) == null)
{
delete rs_vote;
return;
}
rs_vote.FetchRow();
int status = rs_vote.FetchInt(0);
if (!status)
{
delete rs_vote;
PrintToChat(client, "Poll %s was disabled by an admin to vote on", table_name);
editpoll(client, table_name);
return;
}
Format(query_vote, sizeof(query_vote), "SELECT PLAYTIME FROM unloze_css_polls.poll_status WHERE poll_table = '%s'", table_name);
if ((rs_vote = SQL_Query(database_connection, query_vote)) == null)
{
@ -463,6 +471,7 @@ public void mysql_vote_poll(int client, char []table_name)
}
rs_vote.FetchRow();
int playtime = rs_vote.FetchInt(0);
//PrintToChatAll("playtime: %i query_vote: %s", playtime, query_vote);
GetClientAuthId(client, AuthId_Steam3, sSID, sizeof(sSID));
if (playtime != 0)
{
@ -490,18 +499,16 @@ public void mysql_vote_poll(int client, char []table_name)
Format(server, sizeof(server), "css-ze");
}
}
ReplaceString(sSID, sizeof(sSID), "[U:", "");
ReplaceString(sSID, sizeof(sSID), "]", "");
Format(sSID, sizeof(sSID), "0%s", sSID[1]);
Format(query_vote, sizeof(query_vote), "SELECT connection_time from unloze_stats.hlstats_Players hp INNER JOIN unloze_stats.hlstats_PlayerUniqueIds pui on hp.playerId = pui.playerId AND pui.uniqueId = '%s' AND pui.game = '%s'", sSID, server);
//PrintToChatAll("query_vote steam: %s", query_vote);
if ((rs_vote = SQL_Query(database_hlstats_connection, query_vote)) == null)
{
delete rs_vote;
return;
}
rs_vote.FetchRow();
if (!rs_vote.RowCount)
{
Format(sSID, sizeof(sSID), "1%s", sSID[1]);
@ -511,12 +518,12 @@ public void mysql_vote_poll(int client, char []table_name)
delete rs_vote;
return;
}
rs_vote.FetchRow();
//PrintToChatAll("query_vote steam 1: %s", query_vote);
}
if (!rs_vote.RowCount)
{
GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
ReplaceString(sSID, sizeof(sSID), "STEAM_1:", "");
Format(sSID, sizeof(sSID), "%s", sSID[8]);
Format(sSID, sizeof(sSID), "0%s", sSID[1]);
Format(query_vote, sizeof(query_vote), "SELECT connection_time from unloze_stats.hlstats_Players hp INNER JOIN unloze_stats.hlstats_PlayerUniqueIds pui on hp.playerId = pui.playerId AND pui.uniqueId = '%s' AND pui.game = '%s'", sSID, server);
if ((rs_vote = SQL_Query(database_hlstats_connection, query_vote)) == null)
@ -524,10 +531,12 @@ public void mysql_vote_poll(int client, char []table_name)
delete rs_vote;
return;
}
rs_vote.FetchRow();
//PrintToChatAll("query_vote steam 2: %s", query_vote);
}
if (!rs_vote.RowCount)
{
GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
Format(sSID, sizeof(sSID), "%s", sSID[8]);
Format(sSID, sizeof(sSID), "1%s", sSID[1]);
Format(query_vote, sizeof(query_vote), "SELECT connection_time from unloze_stats.hlstats_Players hp INNER JOIN unloze_stats.hlstats_PlayerUniqueIds pui on hp.playerId = pui.playerId AND pui.uniqueId = '%s' AND pui.game = '%s'", sSID, server);
if ((rs_vote = SQL_Query(database_hlstats_connection, query_vote)) == null)
@ -535,15 +544,15 @@ public void mysql_vote_poll(int client, char []table_name)
delete rs_vote;
return;
}
rs_vote.FetchRow();
//PrintToChatAll("query_vote steam 3: %s", query_vote);
}
//TODO
if (!rs_vote.RowCount)
{
PrintToChat(client, "you do not have enough time on this server to participate in this vote");
delete rs_vote;
return;
}
rs_vote.FetchRow();
float connection_time_seconds = rs_vote.FetchFloat(0);
float hours_pre = connection_time_seconds / 60;
int hours = RoundToFloor(hours_pre / 60);
@ -561,27 +570,41 @@ public void mysql_vote_poll(int client, char []table_name)
delete rs_vote;
return;
}
Format(query_vote, sizeof(query_vote), "SELECT COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME = '%s'", table_name);
if ((rs_vote = SQL_Query(database_connection, query_vote)) == null)
{
delete rs_vote;
return;
}
char table_names[generic_length];
if (rs_vote.RowCount > 0)
{
int index;
Format(admin_table_edit[client], sizeof(admin_table_edit), table_name);
Menu menu2 = new Menu(menu_vote_poll_options);
menu2.SetTitle("Select which option to vote on for poll: %s", table_name);
for (int i = 0; i < 5; i++)
menu2.AddItem("", "", ITEMDRAW_DISABLED);
while (rs_vote.FetchRow())
{
rs_vote.FetchString(0, table_names[index], sizeof(table_names));
index++;
DBResultSet rs_vote1;
int poll_id = rs_vote.FetchInt(0);
Format(query_vote, sizeof(query_vote), "SELECT COUNT(*), pt.poll_option_text FROM unloze_css_polls.`%s` ta INNER JOIN unloze_css_polls.poll_text pt WHERE pt.poll_id = %i AND ta.`%i` = 1", table_name, poll_id, poll_id);
if ((rs_vote1 = SQL_Query(database_connection, query_vote)) != null)
{
if (rs_vote1.RowCount > 0)
{
rs_vote1.FetchRow();
int poll_vote_count = rs_vote1.FetchInt(0);
char poll_option[generic_length];
char poll_option_vote[generic_length];
rs_vote1.FetchString(1, poll_option, sizeof(poll_option));
Format(poll_option_vote, sizeof(poll_option_vote), "%s Votes: %i", poll_option, poll_vote_count);
char poll_char_id[24];
IntToString(poll_id, poll_char_id, sizeof(poll_char_id));
menu2.AddItem(poll_char_id, poll_option_vote);
}
}
delete rs_vote1;
}
Format(admin_table_edit[client], sizeof(admin_table_edit), table_name);
Menu menu2 = new Menu(menu_vote_poll_options, MENU_ACTIONS_ALL);
menu2.SetTitle("Select which option to vote on for: %s", table_name);
for (int i = sizeof(table_names); i > 0; i--)
menu2.AddItem(table_names[i], table_names[i]);
menu2.ExitButton = true;
menu2.Display(client, MENU_TIME_FOREVER);
}
@ -667,7 +690,7 @@ public void mysql_playtime_requirement(int client, char []info)
int playtime;
rs.FetchRow();
playtime = rs.FetchInt(0);
PrintToChat(client, "playtime: %i", playtime);
PrintToChat(client, "playtime required: %i", playtime);
admin_editing[client] = 7;
Menu menu = new Menu(editpollmenu, MENU_ACTIONS_ALL);
menu.SetTitle("Poll %s has playtime requirement: %i", "", info, playtime);
@ -742,7 +765,7 @@ public void mysql_edit_poll(int client, char []info, int selection)
delete rs;
}
public void mysql_get_polls(char []pollchoice, int client)
public void mysql_get_polls(char []pollchoice, int client, int admin_enable)
{
DBResultSet rs_polls;
char query_get_polls[generic_length];
@ -753,21 +776,29 @@ public void mysql_get_polls(char []pollchoice, int client)
return;
}
char table_names[generic_length];
int index = 0;
if (rs_polls.RowCount > 0)
{
Menu menu3 = new Menu(MenuHandler3);
menu3.SetTitle("Select which poll to %s", pollchoice);
while (rs_polls.FetchRow())
{
rs_polls.FetchString(0, table_names[index], sizeof(table_names));
index++;
DBResultSet rs_vote;
rs_polls.FetchString(0, table_names, sizeof(table_names));
Format(query_get_polls, sizeof(query_get_polls), "SELECT enabled from unloze_css_polls.poll_status WHERE poll_table = '%s'", table_names);
if ((rs_vote = SQL_Query(database_connection, query_get_polls)) != null)
{
rs_vote.FetchRow();
int status = rs_vote.FetchInt(0);
if (!status && !admin_enable)
menu3.AddItem(table_names, table_names, ITEMDRAW_DISABLED);
else
menu3.AddItem(table_names, table_names);
}
delete rs_vote;
}
menu3.ExitButton = true;
menu3.Display(client, MENU_TIME_FOREVER);
}
Menu menu3 = new Menu(MenuHandler3);
menu3.SetTitle("Select which poll to %s", pollchoice);
for (int i = 0; i < index; i++)
menu3.AddItem(table_names[i], table_names[i]);
menu3.ExitButton = true;
menu3.Display(client, MENU_TIME_FOREVER);
delete rs_polls;
}
@ -775,8 +806,8 @@ public void mysql_find_poll_commands()
{
DBResultSet rs;
char query[generic_length];
Format(query, sizeof(query), "SELECT command, polloption FROM unloze_css_polls.poll_reff WHERE server_port = %i", server_port);
//PrintToChatAll("query: %s size: %i", query, sizeof(query));
char query2[generic_length];
Format(query, sizeof(query), "SELECT poll_table FROM unloze_css_polls.poll_status ps WHERE ps.server_port = %i", server_port);
if ((rs = SQL_Query(database_connection, query)) == null)
{
delete rs;
@ -786,14 +817,56 @@ public void mysql_find_poll_commands()
{
while (rs.FetchRow())
{
char table_commands[generic_length];
char table_polloptions[generic_length];
char sPart[2][generic_length];
rs.FetchString(0, table_commands, sizeof(table_commands));
rs.FetchString(1, table_polloptions, sizeof(table_polloptions));
ExplodeString(table_polloptions, ".", sPart, sizeof(sPart), sizeof(sPart[]));
Format(query, sizeof(query), "SELECT COUNT(*) FROM unloze_css_polls.%s", sPart[0]);
//TODO
char table[generic_length];
DBResultSet rs1;
rs.FetchString(0, table, sizeof(table));
Format(query2, sizeof(query2), "SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='unloze_css_polls' AND `TABLE_NAME`='%s'", table);
if ((rs1 = SQL_Query(database_connection, query2)) != null)
{
if (rs1.RowCount > 0)
{
int highest_vote_option = 0;
char highest_poll_option[generic_length];
//skipping steam_ID
rs1.FetchRow();
while (rs1.FetchRow())
{
DBResultSet rs2;
int poll_id = rs1.FetchInt(0);
char column[generic_length];
Format(query, sizeof(query), "SELECT COUNT(*), pt.poll_option_text FROM unloze_css_polls.`%s` ta INNER JOIN unloze_css_polls.poll_text pt WHERE pt.poll_id = %i AND ta.`%i` = 1", table, poll_id, poll_id);
if ((rs2 = SQL_Query(database_connection, query)) != null)
{
rs2.FetchRow();
int vote_count = rs2.FetchInt(0);
rs2.FetchString(1, column, sizeof(column));
if (vote_count > highest_vote_option)
{
highest_vote_option = vote_count;
Format(highest_poll_option, sizeof(highest_poll_option), column);
}
}
delete rs2;
}
if (highest_vote_option > 0)
{
DBResultSet rs2;
Format(query2, sizeof(query2), "SELECT command FROM unloze_css_polls.poll_reff WHERE polloption = '%s.%s'", table, highest_poll_option);
if ((rs2 = SQL_Query(database_connection, query2)) != null)
{
if (!!rs2.RowCount)
{
char command[generic_length];
rs2.FetchRow();
rs2.FetchString(0, command, sizeof(command));
ServerCommand(command);
}
}
delete rs2;
}
}
}
delete rs1;
}
}
delete rs;