2020-04-08 23:15:46 +02:00
# pragma semicolon 1
# define DEBUG
# define PLUGIN_AUTHOR "jenz"
# define PLUGIN_VERSION "1.00"
# define generic_length 256
# include <sourcemod>
# include <sdktools>
# include <PlayerManager>
int admin_editing [ MAXPLAYERS + 1 ] ;
int server_port ;
char admin_table_edit [ generic_length ] ;
char admin_table_coloumn_edit [ generic_length ] ;
2020-04-14 15:25:33 +02:00
char admin_table_info [ generic_length ] ;
2020-04-08 23:15:46 +02:00
Database database_connection ;
Database database_hlstats_connection ;
public Plugin myinfo =
{
name = " Unloze ingame polls " ,
author = PLUGIN_AUTHOR ,
description = " ingame polls " ,
version = PLUGIN_VERSION ,
url = " www.unloze.com "
} ;
public void OnPluginStart ( )
{
//reg Cmds
RegConsoleCmd ( " sm_poll " , cmd_polls , " Poll menu for unloze " ) ;
RegConsoleCmd ( " sm_polls " , cmd_polls , " Poll menu for unloze " ) ;
RegConsoleCmd ( " say " , cmd_say ) ;
//adm cmds
2020-04-14 00:18:16 +02:00
RegAdminCmd ( " sm_exec_pollcommands " , cmd_poll_commands , ADMFLAG_GENERIC ) ;
2020-04-08 23:15:46 +02:00
//mysql con
sql_start_connection ( ) ;
OnMapStart ( ) ;
}
public void OnMapStart ( )
{
server_port = GetConVarInt ( FindConVar ( " hostport " ) ) ;
2020-04-14 00:18:16 +02:00
CreateTimer ( 1.0 , poll_commands , INVALID_HANDLE ) ;
}
public Action poll_commands ( Handle timer )
{
2020-04-08 23:15:46 +02:00
mysql_find_poll_commands ( ) ;
}
public int MenuHandler1 ( Menu menu , MenuAction action , int client_ , int selection )
{
if ( IsValidClient ( client_ ) )
{
switch ( action )
{
case MenuAction_Select :
{
if ( ! selection )
polladminmenu ( client_ ) ;
else
{
admin_editing [ client_ ] = 5 ;
2020-04-14 00:18:16 +02:00
mysql_get_polls ( " vote " , client_ , 0 ) ;
2020-04-08 23:15:46 +02:00
}
}
case MenuAction_End :
{
if ( menu ! = INVALID_HANDLE )
delete menu ;
}
}
}
}
public int MenuHandler2 ( Menu menu , MenuAction action , int iclient2 , int selection )
{
if ( IsValidClient ( iclient2 ) )
{
switch ( action )
{
case MenuAction_Select :
{
admin_editing [ iclient2 ] = selection ;
//PrintToChat(iclient2, "client: %N \nclient[admin_editing]: %i", iclient2, admin_editing[iclient2]);
2020-04-14 00:18:16 +02:00
if ( ! selection )
{
mysql_find_poll_commands ( ) ;
PrintToChat ( iclient2 , " Executed Poll commands " ) ;
polladminmenu ( iclient2 ) ;
}
else if ( selection = = 1 )
2020-04-08 23:15:46 +02:00
{
PrintToChat ( iclient2 , " Write poll question into the chat, type exit to abort " ) ;
}
else
{
char pollchoice [ 16 ] ;
menu . GetItem ( selection , pollchoice , sizeof ( pollchoice ) ) ;
2020-04-14 00:18:16 +02:00
mysql_get_polls ( pollchoice , iclient2 , 1 ) ;
2020-04-08 23:15:46 +02:00
}
}
case MenuAction_End :
{
admin_editing [ iclient2 ] = 0 ;
if ( menu ! = INVALID_HANDLE )
delete menu ;
}
}
}
}
public void editpoll ( int client_edit , char [ ] table_name_info )
{
Menu menu2 = new Menu ( editpollmenu ) ;
menu2 . SetTitle ( " Poll editing: %s " , table_name_info ) ;
menu2 . AddItem ( table_name_info , " Add option " ) ;
menu2 . AddItem ( table_name_info , " Rewrite option " ) ;
menu2 . AddItem ( table_name_info , " Remove option " ) ;
menu2 . AddItem ( table_name_info , " Add command to options " ) ;
menu2 . AddItem ( table_name_info , " playtime requirement " ) ;
menu2 . ExitButton = true ;
menu2 . Display ( client_edit , MENU_TIME_FOREVER ) ;
}
public int menu_vote_poll_options ( Menu menu , MenuAction action , int iclient , int selection )
{
if ( IsValidClient ( iclient ) )
{
switch ( action )
{
case MenuAction_Select :
{
2020-04-14 01:50:55 +02:00
char info [ generic_length ] ;
2020-04-08 23:15:46 +02:00
menu . GetItem ( selection , info , sizeof ( info ) ) ;
2020-04-14 00:18:16 +02:00
int coloumn_index = StringToInt ( info ) ;
mysql_insert_poll_vote ( iclient , coloumn_index , admin_table_edit [ iclient ] ) ;
2020-04-08 23:15:46 +02:00
}
case MenuAction_End :
{
admin_editing [ iclient ] = 0 ;
if ( menu ! = INVALID_HANDLE )
delete menu ;
}
}
}
}
public int MenuHandler3 ( Menu menu , MenuAction action , int iclient3 , int selection )
{
if ( IsValidClient ( iclient3 ) )
{
switch ( action )
{
case MenuAction_Select :
{
2020-04-14 01:50:55 +02:00
char info [ generic_length ] ;
2020-04-08 23:15:46 +02:00
menu . GetItem ( selection , info , sizeof ( info ) ) ;
2020-04-14 00:18:16 +02:00
//PrintToChat(iclient3, "admin_editing[iclient3]: %i \ninfo: %s", admin_editing[iclient3], info);
2020-04-08 23:15:46 +02:00
switch ( admin_editing [ iclient3 ] )
{
case 2 :
{
//edit poll
editpoll ( iclient3 , info ) ;
}
case 3 :
{
//enable or disable poll
mysql_enable_disable_poll ( iclient3 , info ) ;
}
case 4 :
{
//delete poll
mysql_delete_poll ( iclient3 , info ) ;
}
case 5 :
{
//vote poll
mysql_vote_poll ( iclient3 , info ) ;
}
}
}
case MenuAction_End :
{
admin_editing [ iclient3 ] = 0 ;
if ( menu ! = INVALID_HANDLE )
delete menu ;
}
}
}
}
public int menu_edit_poll_options ( Menu menu , MenuAction action , int iclient4 , int selection )
{
if ( IsValidClient ( iclient4 ) )
{
switch ( action )
{
case MenuAction_Select :
{
2020-04-14 01:50:55 +02:00
char info [ generic_length ] ;
2020-04-08 23:15:46 +02:00
menu . GetItem ( selection , info , sizeof ( info ) ) ;
2020-04-14 15:25:33 +02:00
int poll_id = StringToInt ( info ) ;
DBResultSet rs2 ;
char query_edit3 [ generic_length ] ;
Format ( query_edit3 , sizeof ( query_edit3 ) , " SELECT poll_option_text FROM unloze_css_polls.poll_text pt WHERE pt.poll_id = %i " , poll_id ) ;
if ( ( rs2 = SQL_Query ( database_connection , query_edit3 ) ) ! = null & & rs2 . RowCount > 0 )
2020-04-08 23:15:46 +02:00
{
2020-04-14 15:25:33 +02:00
rs2 . FetchRow ( ) ;
rs2 . FetchString ( 0 , admin_table_info , sizeof ( admin_table_info ) ) ;
if ( StrContains ( admin_table_coloumn_edit , " rewrite " ) ! = - 1 )
{
PrintToChat ( iclient4 , " Rewrite the option into chat. Type exit to abort " ) ;
Format ( admin_table_coloumn_edit , sizeof ( admin_table_coloumn_edit ) , info ) ;
admin_editing [ iclient4 ] = 8 ;
}
else if ( StrContains ( admin_table_coloumn_edit , " remove " ) ! = - 1 )
{
mysql_remove_poll_option ( iclient4 , poll_id , admin_table_edit , admin_table_info ) ;
}
else if ( StrContains ( admin_table_coloumn_edit , " add command option to " ) ! = - 1 )
{
PrintToChat ( iclient4 , " Write the command related to option %s into the chat. Type exit to abort " , info ) ;
Format ( admin_table_coloumn_edit , sizeof ( admin_table_coloumn_edit ) , info ) ;
admin_editing [ iclient4 ] = 9 ;
}
2020-04-08 23:15:46 +02:00
}
2020-04-14 15:25:33 +02:00
delete rs2 ;
2020-04-08 23:15:46 +02:00
}
case MenuAction_End :
{
if ( menu ! = INVALID_HANDLE )
delete menu ;
}
}
}
}
public int editpollmenu ( Menu menu , MenuAction action , int iclient5 , int selection )
{
if ( IsValidClient ( iclient5 ) )
{
switch ( action )
{
case MenuAction_Select :
{
2020-04-14 01:50:55 +02:00
char info [ generic_length ] ;
2020-04-08 23:15:46 +02:00
menu . GetItem ( selection , info , sizeof ( info ) ) ;
if ( admin_editing [ iclient5 ] = = 7 )
{
admin_editing [ iclient5 ] = 0 ;
mysql_playtime_update ( iclient5 , StringToInt ( info ) , admin_table_edit ) ;
}
else if ( ! selection )
{
Format ( admin_table_edit , sizeof ( admin_table_edit ) , info ) ;
admin_editing [ iclient5 ] = 6 ;
PrintToChat ( iclient5 , " type vote option into the chat. Type exit to abort " ) ;
}
else if ( selection = = 4 )
{
Format ( admin_table_edit , sizeof ( admin_table_edit ) , info ) ;
mysql_playtime_requirement ( iclient5 , info ) ;
}
else
mysql_edit_poll ( iclient5 , info , selection ) ;
}
case MenuAction_End :
{
admin_editing [ iclient5 ] = 0 ;
if ( menu ! = INVALID_HANDLE )
delete menu ;
}
}
}
}
public Action cmd_poll_commands ( int i_client , int args )
{
mysql_find_poll_commands ( ) ;
PrintToChat ( i_client , " Executed poll commands " ) ;
return Plugin_Handled ;
}
public Action cmd_polls ( int iclient , int args )
{
if ( IsValidClient ( iclient ) )
{
if ( CheckCommandAccess ( iclient , " " , ADMFLAG_SLAY ) )
{
Menu menu = new Menu ( MenuHandler1 ) ;
menu . SetTitle ( " Choose if you want to vote or use admin menu " , " " ) ;
menu . AddItem ( " " , " Admin menu " ) ;
menu . AddItem ( " " , " Vote on Polls " ) ;
menu . ExitButton = true ;
menu . Display ( iclient , MENU_TIME_FOREVER ) ;
}
else
{
admin_editing [ iclient ] = 5 ;
2020-04-14 00:18:16 +02:00
mysql_get_polls ( " vote " , iclient , 0 ) ;
2020-04-08 23:15:46 +02:00
}
}
return Plugin_Handled ;
}
public void polladminmenu ( int client_admin )
{
Menu menu = new Menu ( MenuHandler2 ) ;
menu . SetTitle ( " Poll admin menu " , " " , client_admin ) ;
2020-04-14 00:18:16 +02:00
menu . AddItem ( " " , " Execute poll commands " ) ;
2020-04-08 23:15:46 +02:00
menu . AddItem ( " " , " Create new Poll " ) ;
menu . AddItem ( " Edit " , " Edit Poll " ) ;
menu . AddItem ( " Enable/Disable " , " Enable/Disable Poll " ) ;
menu . AddItem ( " Delete " , " Delete Poll " ) ;
menu . ExitButton = true ;
menu . Display ( client_admin , MENU_TIME_FOREVER ) ;
}
public void OnClientDisconnect ( int client_disc )
{
admin_editing [ client_disc ] = 0 ;
}
public void OnClientPostAdminCheck ( int client_pos )
{
admin_editing [ client_pos ] = 0 ;
}
public Action cmd_say ( int client_say , int args )
{
if ( ! ! admin_editing [ client_say ] )
{
char info [ generic_length ] ;
GetCmdArgString ( info , sizeof ( info ) ) ;
StripQuotes ( info ) ;
if ( StrEqual ( info , " exit " , false ) )
{
admin_editing [ client_say ] = 0 ;
PrintToChat ( client_say , " Aborted chat reading " ) ;
return Plugin_Continue ;
}
switch ( admin_editing [ client_say ] )
{
case 1 :
{
sql_create_poll_table ( client_say , info ) ;
PrintToChat ( client_say , " Saved %s as poll Question " , info ) ;
admin_editing [ client_say ] = 0 ;
polladminmenu ( client_say ) ;
}
case 6 :
{
mysql_add_poll_option ( client_say , info ) ;
PrintToChat ( client_say , " Saved %s as poll option " , info ) ;
admin_editing [ client_say ] = 0 ;
}
case 8 :
{
mysql_rewrite_poll_option ( client_say , info ) ;
2020-04-14 15:25:33 +02:00
PrintToChat ( client_say , " Rewrote %s into %s " , admin_table_info , info ) ;
2020-04-08 23:15:46 +02:00
admin_editing [ client_say ] = 0 ;
}
case 9 :
{
2020-04-14 15:25:33 +02:00
mysql_add_poll_option_command ( client_say , info , admin_table_info ) ;
2020-04-08 23:15:46 +02:00
PrintToChat ( client_say , " Added %s as command option " , info ) ;
admin_editing [ client_say ] = 0 ;
}
}
}
return Plugin_Continue ;
}
public void mysql_exec_prepared_statement ( char [ ] query_statement )
{
char error [ generic_length ] ;
DBStatement create_statement = SQL_PrepareQuery ( database_connection , query_statement , error , sizeof ( error ) ) ;
if ( create_statement = = INVALID_HANDLE )
{
CloseHandle ( create_statement ) ;
return ;
}
SQL_Execute ( create_statement ) ;
CloseHandle ( create_statement ) ;
}
public void sql_start_connection ( )
{
char error_connect [ generic_length ] ;
if ( SQL_CheckConfig ( " css_polls " ) )
database_connection = SQL_Connect ( " css_polls " , true , error_connect , sizeof ( error_connect ) ) ;
if ( database_connection = = null )
PrintToChatAll ( " {green}[UNLOZE] {white}Error! Could not connect to maria-DB! " ) ;
if ( SQL_CheckConfig ( " hlstatsx " ) )
database_hlstats_connection = SQL_Connect ( " hlstatsx " , true , error_connect , sizeof ( error_connect ) ) ;
if ( database_hlstats_connection = = null )
PrintToChatAll ( " {green}[UNLOZE] {white}Error! Could not connect to maria-DB! " ) ;
char query_start [ generic_length ] ;
Format ( query_start , sizeof ( query_start ) , " CREATE TABLE IF NOT EXISTS unloze_css_polls.`poll_reff` (`polloption` VARCHAR(%i) NOT NULL, `command` text NOT NULL, `server_port` INT NOT NULL, PRIMARY KEY (`polloption`)) " , generic_length ) ;
mysql_exec_prepared_statement ( query_start ) ;
Format ( query_start , sizeof ( query_start ) , " CREATE TABLE IF NOT EXISTS unloze_css_polls.`poll_status` (`poll_table` VARCHAR(%i) NOT NULL, PLAYTIME int(10) DEFAULT 0, `enabled` BOOL DEFAULT false, `server_port` INT default 0, PRIMARY KEY (`poll_table`)) " , generic_length ) ;
mysql_exec_prepared_statement ( query_start ) ;
Format ( query_start , sizeof ( query_start ) , " CREATE TABLE IF NOT EXISTS unloze_css_polls.`poll_text` (`poll_id` INT NOT NULL AUTO_INCREMENT, `poll_option_text` text NOT NULL, PRIMARY KEY (`poll_id`)) " ) ;
mysql_exec_prepared_statement ( query_start ) ;
}
public void mysql_enable_disable_poll ( int iclient6 , char [ ] table_name_enable )
{
DBResultSet rs_disable ;
char query_enabled [ generic_length ] ;
Format ( query_enabled , sizeof ( query_enabled ) , " UPDATE unloze_css_polls.poll_status SET enabled = !enabled where poll_table = '%s' " , table_name_enable ) ;
mysql_exec_prepared_statement ( query_enabled ) ;
Format ( query_enabled , sizeof ( query_enabled ) , " SELECT enabled from unloze_css_polls.poll_status WHERE poll_table = '%s' " , table_name_enable ) ;
if ( ( rs_disable = SQL_Query ( database_connection , query_enabled ) ) = = null )
{
delete rs_disable ;
return ;
}
2020-04-14 01:06:36 +02:00
if ( rs_disable . RowCount > 0 )
{
rs_disable . FetchRow ( ) ;
int status = rs_disable . FetchInt ( 0 ) ;
delete rs_disable ;
if ( status )
PrintToChat ( iclient6 , " Enabled poll %s " , table_name_enable ) ;
else
PrintToChat ( iclient6 , " Disabled poll %s " , table_name_enable ) ;
}
2020-04-08 23:15:46 +02:00
editpoll ( iclient6 , table_name_enable ) ;
}
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 ) ;
2020-04-14 00:18:16 +02:00
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 ) ;
2020-04-08 23:15:46 +02:00
PrintToChat ( iclient7 , " removed poll %s " , table_name ) ;
2020-04-14 00:18:16 +02:00
polladminmenu ( iclient7 ) ;
2020-04-08 23:15:46 +02:00
}
2020-04-14 00:18:16 +02:00
public void mysql_insert_poll_vote ( int client , int coloumn_index , char [ ] table_name )
2020-04-08 23:15:46 +02:00
{
2020-04-14 00:18:16 +02:00
DBResultSet rs_vote ;
char sSID [ 64 ] ;
2020-04-08 23:15:46 +02:00
GetClientAuthId ( client , AuthId_Steam2 , sSID , sizeof ( sSID ) ) ;
2020-04-14 00:18:16 +02:00
Format ( sSID , sizeof ( sSID ) , " 0%s " , sSID [ 7 ] ) ;
2020-04-08 23:15:46 +02:00
char query_insert [ generic_length ] ;
2020-04-14 00:18:16 +02:00
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);
2020-04-08 23:15:46 +02:00
mysql_exec_prepared_statement ( query_insert ) ;
2020-04-14 00:18:16 +02:00
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);
2020-04-08 23:15:46 +02:00
mysql_exec_prepared_statement ( query_insert ) ;
2020-04-14 00:18:16 +02:00
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 ;
2020-04-08 23:15:46 +02:00
}
public void mysql_vote_poll ( int client , char [ ] table_name )
{
DBResultSet rs_vote ;
char query_vote [ generic_length ] ;
char sSID [ 24 ] ;
GetClientAuthId ( client , AuthId_Steam2 , sSID , sizeof ( sSID ) ) ;
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 )
{
delete rs_vote ;
return ;
}
rs_vote . FetchRow ( ) ;
int playtime = rs_vote . FetchInt ( 0 ) ;
2020-04-14 00:18:16 +02:00
//PrintToChatAll("playtime: %i query_vote: %s", playtime, query_vote);
2020-04-08 23:15:46 +02:00
GetClientAuthId ( client , AuthId_Steam3 , sSID , sizeof ( sSID ) ) ;
if ( playtime ! = 0 )
{
char server [ 8 ] ;
switch ( server_port )
{
case 27015 :
{
Format ( server , sizeof ( server ) , " css-ze " ) ;
}
case 27016 :
{
Format ( server , sizeof ( server ) , " css-zr " ) ;
}
case 27017 :
{
Format ( server , sizeof ( server ) , " css-mg " ) ;
}
case 27019 :
{
Format ( server , sizeof ( server ) , " css-ze " ) ;
}
case 27035 :
{
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 ) ;
2020-04-14 00:18:16 +02:00
//PrintToChatAll("query_vote steam: %s", query_vote);
2020-04-08 23:15:46 +02:00
if ( ( rs_vote = SQL_Query ( database_hlstats_connection , query_vote ) ) = = null )
{
delete rs_vote ;
return ;
}
if ( ! rs_vote . RowCount )
{
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 )
{
delete rs_vote ;
return ;
}
2020-04-14 00:18:16 +02:00
//PrintToChatAll("query_vote steam 1: %s", query_vote);
2020-04-08 23:15:46 +02:00
}
if ( ! rs_vote . RowCount )
{
GetClientAuthId ( client , AuthId_Steam2 , sSID , sizeof ( sSID ) ) ;
2020-04-14 00:18:16 +02:00
Format ( sSID , sizeof ( sSID ) , " %s " , sSID [ 8 ] ) ;
2020-04-08 23:15:46 +02:00
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 )
{
delete rs_vote ;
return ;
}
2020-04-14 00:18:16 +02:00
//PrintToChatAll("query_vote steam 2: %s", query_vote);
2020-04-08 23:15:46 +02:00
}
if ( ! rs_vote . RowCount )
{
2020-04-14 00:18:16 +02:00
GetClientAuthId ( client , AuthId_Steam2 , sSID , sizeof ( sSID ) ) ;
Format ( sSID , sizeof ( sSID ) , " %s " , sSID [ 8 ] ) ;
2020-04-08 23:15:46 +02:00
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 )
{
delete rs_vote ;
return ;
}
2020-04-14 00:18:16 +02:00
//PrintToChatAll("query_vote steam 3: %s", query_vote);
2020-04-08 23:15:46 +02:00
}
if ( ! rs_vote . RowCount )
{
PrintToChat ( client , " you do not have enough time on this server to participate in this vote " ) ;
delete rs_vote ;
return ;
}
2020-04-14 00:18:16 +02:00
rs_vote . FetchRow ( ) ;
2020-04-08 23:15:46 +02:00
float connection_time_seconds = rs_vote . FetchFloat ( 0 ) ;
float hours_pre = connection_time_seconds / 60 ;
int hours = RoundToFloor ( hours_pre / 60 ) ;
if ( hours < playtime )
{
PrintToChat ( client , " you have %i hours but require %i to participate in this vote " , hours , playtime ) ;
delete rs_vote ;
return ;
}
}
//check nosteam
if ( ! PM_IsPlayerSteam ( client ) )
{
PrintToChat ( client , " You are not authenticated with steam and can therefore not vote " ) ;
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 ;
}
if ( rs_vote . RowCount > 0 )
{
2020-04-14 00:18:16 +02:00
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 ) ;
2020-04-08 23:15:46 +02:00
while ( rs_vote . FetchRow ( ) )
{
2020-04-14 00:18:16 +02:00
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 ;
2020-04-08 23:15:46 +02:00
}
menu2 . ExitButton = true ;
menu2 . Display ( client , MENU_TIME_FOREVER ) ;
}
delete rs_vote ;
}
2020-04-14 15:25:33 +02:00
public void mysql_remove_poll_option ( int client , int poll_id , char [ ] target_table , char [ ] coloumn_text )
2020-04-08 23:15:46 +02:00
{
DBResultSet rs_add ;
char query_remove [ generic_length ] ;
Format ( query_remove , sizeof ( query_remove ) , " ALTER TABLE unloze_css_polls.`%s` DROP `%i` " , target_table , poll_id ) ;
mysql_exec_prepared_statement ( query_remove ) ;
2020-04-14 15:25:33 +02:00
Format ( query_remove , sizeof ( query_remove ) , " DELETE FROM unloze_css_polls.poll_text WHERE poll_id = %i " , poll_id ) ;
mysql_exec_prepared_statement ( query_remove ) ;
PrintToChat ( client , " removed Option %s from poll %s " , coloumn_text , target_table ) ;
2020-04-08 23:15:46 +02:00
delete rs_add ;
editpoll ( client , target_table ) ;
}
public void mysql_add_poll_option ( int client , char [ ] info )
{
DBResultSet rs_add ;
char query_add [ generic_length ] ;
Format ( query_add , sizeof ( query_add ) , " INSERT INTO unloze_css_polls.`poll_text` (poll_option_text) VALUES ('%s') " , info ) ;
mysql_exec_prepared_statement ( query_add ) ;
Format ( query_add , sizeof ( query_add ) , " SELECT LAST_INSERT_ID() " ) ;
if ( ( rs_add = SQL_Query ( database_connection , query_add ) ) = = null )
{
delete rs_add ;
return ;
}
int insert_id ;
rs_add . FetchRow ( ) ;
insert_id = rs_add . FetchInt ( 0 ) ;
Format ( query_add , sizeof ( query_add ) , " ALTER TABLE unloze_css_polls.`%s` ADD COLUMN IF NOT EXISTS `%i` INT default 0 " , admin_table_edit , insert_id ) ;
mysql_exec_prepared_statement ( query_add ) ;
delete rs_add ;
editpoll ( client , admin_table_edit ) ;
}
public void mysql_add_poll_option_command ( int client , char [ ] command , char [ ] coloumn )
{
char query_command [ generic_length ] ;
Format ( query_command , sizeof ( query_command ) , " INSERT INTO unloze_css_polls.`poll_reff` (polloption, command, server_port) VALUES ('%s.%s', '%s', '%i') ON DUPLICATE KEY UPDATE command = '%s' " , admin_table_edit , coloumn , command , server_port , command ) ;
mysql_exec_prepared_statement ( query_command ) ;
editpoll ( client , admin_table_edit ) ;
}
public void mysql_rewrite_poll_option ( int client , char [ ] info )
{
char query_rewrite [ generic_length ] ;
2020-04-14 15:25:33 +02:00
int poll_id = StringToInt ( admin_table_coloumn_edit ) ;
Format ( query_rewrite , sizeof ( query_rewrite ) , " UPDATE unloze_css_polls.`poll_text` SET poll_option_text = '%s' WHERE poll_id = %i " , info , poll_id ) ;
//PrintToChat(client, "query_rewrite: %s", query_rewrite);
2020-04-08 23:15:46 +02:00
mysql_exec_prepared_statement ( query_rewrite ) ;
}
public void mysql_playtime_update ( int client , int info , char [ ] admin_table_edit_local )
{
char query_playtime [ generic_length ] ;
Format ( query_playtime , sizeof ( query_playtime ) , " UPDATE unloze_css_polls.`poll_status` SET PLAYTIME = %i WHERE poll_table = '%s' " , info , admin_table_edit_local ) ;
mysql_exec_prepared_statement ( query_playtime ) ;
PrintToChat ( client , " Edited playtime requirement %i to poll: %s " , info , admin_table_edit_local ) ;
editpoll ( client , admin_table_edit_local ) ;
}
public void mysql_playtime_requirement ( int client , char [ ] info )
{
//selection = 4 : playtime requirement for poll
DBResultSet rs ;
char query_playtimre_requir [ generic_length ] ;
Format ( query_playtimre_requir , sizeof ( query_playtimre_requir ) , " SELECT PLAYTIME FROM unloze_css_polls.poll_status WHERE poll_table = '%s' " , info ) ;
if ( ( rs = SQL_Query ( database_connection , query_playtimre_requir ) ) = = null )
{
delete rs ;
return ;
}
2020-04-14 01:06:36 +02:00
if ( rs . RowCount > 0 )
{
int playtime ;
rs . FetchRow ( ) ;
playtime = rs . FetchInt ( 0 ) ;
2020-04-14 15:25:33 +02:00
//PrintToChat(client, "playtime required: %i", playtime);
2020-04-14 01:06:36 +02:00
admin_editing [ client ] = 7 ;
Menu menu = new Menu ( editpollmenu , MENU_ACTIONS_ALL ) ;
2020-04-14 15:25:33 +02:00
char menu_title [ generic_length ] ;
Format ( menu_title , sizeof ( menu_title ) , " Poll %s has playtime requirement: %i " , info , playtime ) ;
menu . SetTitle ( menu_title ) ;
2020-04-14 01:06:36 +02:00
menu . AddItem ( " 0 " , " 0 hours playtime requirement " ) ;
menu . AddItem ( " 5 " , " 5 hours playtime requirement " ) ;
menu . AddItem ( " 10 " , " 10 hours playtime requirement " ) ;
menu . AddItem ( " 25 " , " 25 hours playtime requirement " ) ;
menu . AddItem ( " 50 " , " 50 hours playtime requirement " ) ;
menu . AddItem ( " 250 " , " 250 hours playtime requirement " ) ;
menu . AddItem ( " 1000 " , " 1000 hours playtime requirement " ) ;
menu . ExitButton = true ;
menu . Display ( client , MENU_TIME_FOREVER ) ;
}
2020-04-08 23:15:46 +02:00
delete rs ;
}
public void mysql_edit_poll ( int client , char [ ] info , int selection )
{
//selection = 1 : rewrite option
//selection = 2 : remove option
//selection = 3 : add command to option
DBResultSet rs ;
char query_edit2 [ generic_length ] ;
Format ( query_edit2 , sizeof ( query_edit2 ) , " SELECT COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME = '%s' " , info ) ;
if ( ( rs = SQL_Query ( database_connection , query_edit2 ) ) = = null )
{
delete rs ;
return ;
}
if ( rs . RowCount > 0 )
{
//skip steam_auth row which is always first
rs . FetchRow ( ) ;
char pollchoice [ generic_length ] ;
switch ( selection )
{
case 1 :
{
Format ( pollchoice , sizeof ( pollchoice ) , " rewrite " ) ;
}
case 2 :
{
Format ( pollchoice , sizeof ( pollchoice ) , " remove " ) ;
}
case 3 :
{
Format ( pollchoice , sizeof ( pollchoice ) , " add command option to " ) ;
}
}
Format ( admin_table_coloumn_edit , sizeof ( admin_table_coloumn_edit ) , pollchoice ) ;
Format ( admin_table_edit , sizeof ( admin_table_edit ) , info ) ;
2020-04-14 15:25:33 +02:00
Menu menu_poll_options = new Menu ( menu_edit_poll_options ) ;
2020-04-08 23:15:46 +02:00
menu_poll_options . SetTitle ( " Select which option to %s in poll %s " , pollchoice , info ) ;
2020-04-14 15:25:33 +02:00
while ( rs . FetchRow ( ) )
{
DBResultSet rs1 ;
char table_names [ generic_length ] ;
char table_column_poll_ids [ generic_length ] ;
int poll_id = rs . FetchInt ( 0 ) ;
IntToString ( poll_id , table_column_poll_ids , sizeof ( table_column_poll_ids ) ) ;
Format ( query_edit2 , sizeof ( query_edit2 ) , " SELECT poll_option_text FROM unloze_css_polls.poll_text where poll_id = %i " , poll_id ) ;
if ( ( rs1 = SQL_Query ( database_connection , query_edit2 ) ) = = null )
continue ;
rs1 . FetchRow ( ) ;
rs1 . FetchString ( 0 , table_names , sizeof ( table_names ) ) ;
menu_poll_options . AddItem ( table_column_poll_ids , table_names ) ;
delete rs1 ;
}
2020-04-08 23:15:46 +02:00
menu_poll_options . ExitButton = true ;
menu_poll_options . Display ( client , MENU_TIME_FOREVER ) ;
}
delete rs ;
}
2020-04-14 00:18:16 +02:00
public void mysql_get_polls ( char [ ] pollchoice , int client , int admin_enable )
2020-04-08 23:15:46 +02:00
{
DBResultSet rs_polls ;
char query_get_polls [ generic_length ] ;
Format ( query_get_polls , sizeof ( query_get_polls ) , " SELECT poll_table from unloze_css_polls.poll_status where server_port = %i " , server_port ) ;
if ( ( rs_polls = SQL_Query ( database_connection , query_get_polls ) ) = = null )
{
delete rs_polls ;
return ;
}
char table_names [ generic_length ] ;
if ( rs_polls . RowCount > 0 )
{
2020-04-14 00:18:16 +02:00
Menu menu3 = new Menu ( MenuHandler3 ) ;
menu3 . SetTitle ( " Select which poll to %s " , pollchoice ) ;
2020-04-08 23:15:46 +02:00
while ( rs_polls . FetchRow ( ) )
{
2020-04-14 00:18:16 +02:00
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 ;
2020-04-08 23:15:46 +02:00
}
2020-04-14 00:18:16 +02:00
menu3 . ExitButton = true ;
menu3 . Display ( client , MENU_TIME_FOREVER ) ;
2020-04-08 23:15:46 +02:00
}
delete rs_polls ;
}
public void mysql_find_poll_commands ( )
{
DBResultSet rs ;
char query [ generic_length ] ;
2020-04-14 00:18:16 +02:00
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 ) ;
2020-04-08 23:15:46 +02:00
if ( ( rs = SQL_Query ( database_connection , query ) ) = = null )
{
delete rs ;
return ;
}
if ( rs . RowCount > 0 )
{
while ( rs . FetchRow ( ) )
{
2020-04-14 00:18:16 +02:00
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 ;
2020-04-08 23:15:46 +02:00
}
}
delete rs ;
}
public void sql_create_poll_table ( int client , char [ ] info )
{
if ( database_connection = = null )
sql_start_connection ( ) ;
if ( database_connection = = null )
return ;
char query [ generic_length ] ;
Format ( query , sizeof ( query ) , " CREATE TABLE IF NOT EXISTS unloze_css_polls.`%s` (`steam_id` VARCHAR(24) NOT NULL, PRIMARY KEY (`steam_id`)) " , info ) ;
mysql_exec_prepared_statement ( query ) ;
Format ( query , sizeof ( query ) , " INSERT IGNORE INTO unloze_css_polls.`poll_status` (PLAYTIME, enabled, poll_table, server_port) VALUES (0, 0, '%s', %i) " , info , server_port ) ;
mysql_exec_prepared_statement ( query ) ;
}
stock bool IsValidClient ( int client )
{
if ( client > 0 & & client < = MaxClients & & IsClientConnected ( client ) & & IsClientInGame ( client ) )
{
return true ;
}
return false ;
}