#include <amxmodx>
#include <amxmisc>
#include <sqlx>
#define PLUGIN "Advanced SQL Advertisements"
#define VERSION "1.0"
#define AUTHOR "OxYgEn"
/////////////////////////////////
/// START CUSTOMIZATION HERE! ///
/////////////////////////////////
#define MAX_CHAT_MESSAGES 20
#define MAX_HUD_MESSAGES 20
#define MAX_DHUD_MESSAGES 20
#define ADMIN_FLAG ADMIN_BAN //Admin flag for commands
#define USE_PREFIX //define this if u don't want chat prefix
new Host[] = "127.0.0.1"
new User[] = "root"
new Pass[] = ""
new DB[] = "amxx"
new Table[] = "asa_messages"
new const Float:MIN_TIME_CHAT = 60.0
new const Float:MAX_TIME_CHAT = 80.0
new const Float:MIN_TIME_HUD = 120.0
new const Float:MAX_TIME_HUD = 160.0
#if defined USE_PREFIX
new const saychatprefix[] = { "!g[!nInformáció!g]!n" }
#endif
////////////////////////////////////
/// CUSTOMIZATION ENDS HERE! ///
////////////////////////////////////
/// DO NOT DO ANYTHING UNLESS ///
/// YOU KNOW WHAT YOU ARE DOING ///
////////////////////////////////////
new Handle:g_hSqlTuple;
new asa_chat_messages[MAX_CHAT_MESSAGES][512]
new asa_hud_messages[MAX_HUD_MESSAGES][512]
new asa_hud_colors[MAX_HUD_MESSAGES][3]
new asa_dhud_messages[MAX_DHUD_MESSAGES][512]
new asa_dhud_colors[MAX_DHUD_MESSAGES][3]
new num_messages[3] = 0
new count[3] = 0
new g_hud_advs
public plugin_init( )
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_concmd("asa_add_adv", "add_advertisements", ADMIN_FLAG, "<chat|dhud|hud> <message> <red> <green> <blue>")
register_concmd("asa_del_adv", "delete_advertisements", ADMIN_FLAG, "<chat|dhud|hud> <message>")
register_concmd("asa_show_advs", "show_advertisements", ADMIN_FLAG)
register_concmd("asa_reload_advs", "reload_advertisements", ADMIN_FLAG)
register_clcmd("say /advs", "advertisements_menu", ADMIN_FLAG)
g_hud_advs = CreateHudSyncObj()
set_task(1.0, "Mysql_Init")
set_task(5.0, "advertise")
}
/////////////////////////
/// START MYSQL STUFF ///
/////////////////////////
public Mysql_Init()
{
g_hSqlTuple = SQL_MakeDbTuple(Host, User, Pass, DB)
new g_Error[512]
new ErrorCode
new Handle:SqlConnection = SQL_Connect(g_hSqlTuple, ErrorCode, g_Error, charsmax(g_Error))
if(SqlConnection == Empty_Handle)
set_fail_state(g_Error)
new Handle:Queries
Queries = SQL_PrepareQuery( SqlConnection,
"CREATE TABLE IF NOT EXISTS `%s`\
(`adv_type` VARCHAR(9) NOT NULL,\
`adv_message` VARCHAR(512) NOT NULL,\
`adv_r` VARCHAR(4) NOT NULL,\
`adv_g` VARCHAR(4) NOT NULL,\
`adv_b` VARCHAR(4) NOT NULL)",
Table)
if(!SQL_Execute(Queries))
{
SQL_QueryError(Queries, g_Error, charsmax(g_Error))
set_fail_state(g_Error)
}
SQL_FreeHandle(Queries)
SQL_FreeHandle(SqlConnection)
set_task(1.0, "Load_Table")
}
public Load_Table()
{
new szTemp[512]
formatex(szTemp, charsmax(szTemp), "SELECT * FROM `%s`;", Table)
SQL_ThreadQuery(g_hSqlTuple, "QuerySelectMessages", szTemp)
}
public QuerySelectMessages(iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime)
{
if(iFailState == TQUERY_CONNECT_FAILED
|| iFailState == TQUERY_QUERY_FAILED)
{
log_amx("[ASA]: Sikertelen Kapcsolodas [MYSQL]")
}
else if( SQL_NumResults(hQuery))
{
new szMessage[512]
new szType[10]
while(SQL_MoreResults(hQuery))
{
SQL_ReadResult(hQuery, 0, szType, 9)
SQL_ReadResult(hQuery, 1, szMessage, 511)
if(equal(szType, "chat"))
{
format(asa_chat_messages[num_messages[0]], 511, szMessage)
num_messages[0]++
}
if(equal(szType, "hud"))
{
format(asa_hud_messages[num_messages[1]], 511, szMessage)
asa_hud_colors[num_messages[1]][0] = SQL_ReadResult(hQuery, 2)
asa_hud_colors[num_messages[1]][1] = SQL_ReadResult(hQuery, 3)
asa_hud_colors[num_messages[1]][2] = SQL_ReadResult(hQuery, 4)
num_messages[1]++
}
if(equal(szType, "dhud"))
{
format(asa_dhud_messages[num_messages[2]], 511, szMessage)
asa_dhud_colors[num_messages[2]][0] = SQL_ReadResult(hQuery, 2)
asa_dhud_colors[num_messages[2]][1] = SQL_ReadResult(hQuery, 3)
asa_dhud_colors[num_messages[2]][2] = SQL_ReadResult(hQuery, 4)
num_messages[2]++
}
SQL_NextRow(hQuery)
}
}
log_amx("[ASA]: Chat Üzenetek Betöltve: %d", num_messages[0])
log_amx("[ASA]: HUD Üzenetek Betöltve: %d", num_messages[1])
log_amx("[ASA]: DHUD Üzenetek Betöltve: %d", num_messages[2])
}
public IgnoreHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
SQL_FreeHandle(Query)
return PLUGIN_HANDLED
}
///////////////////////
/// END MYSQL STUFF ///
///////////////////////
///////////////////////////////////////////
/// START DISPLAYING THE ADVERTISEMENTS ///
///////////////////////////////////////////
public advertise()
{
if(num_messages[0] > 0)
{
set_task(random_float(MIN_TIME_CHAT, MAX_TIME_CHAT), "display_chat_messages")
}
if(num_messages[1] > 0)
{
set_task(random_float(MIN_TIME_HUD, MAX_TIME_HUD), "display_hud_messages")
}
if(num_messages[2] > 0)
{
set_task(random_float(MAX_TIME_HUD+15.0, MAX_TIME_HUD+40.0), "display_dhud_messages")
}
}
public display_chat_messages()
{
#if defined USE_PREFIX
client_printc(0, "%s %s", saychatprefix, asa_chat_messages[count[0]])
#else
client_printc(0, asa_chat_messages[count[0]])
#endif
count[0]++
if(count[0] == num_messages[0])
count[0] = 0
set_task(random_float(MIN_TIME_CHAT, MAX_TIME_CHAT), "display_chat_messages")
}
public display_hud_messages()
{
set_hudmessage(asa_hud_colors[count[1]][0], asa_hud_colors[count[1]][1], asa_hud_colors[count[1]][2], -1.0, 0.20, 0, 6.0, 12.0)
ShowSyncHudMsg(0, g_hud_advs, asa_hud_messages[count[1]])
count[1]++
if(count[1] == num_messages[1])
count[1] = 0
set_task(random_float(MIN_TIME_HUD, MAX_TIME_HUD), "display_hud_messages")
}
public display_dhud_messages()
{
set_dhudmessage(asa_dhud_colors[count[2]][0], asa_dhud_colors[count[2]][1], asa_dhud_colors[count[2]][2], -1.0, 0.02, 0, 6.0, 12.0)
show_dhudmessage(0, asa_dhud_messages[count[2]])
count[2]++
if(count[2] == num_messages[2])
count[2] = 0
set_task(random_float(MAX_TIME_HUD+15.0, MAX_TIME_HUD+40.0), "display_dhud_messages")
}
/////////////////////////////////////////
/// END DISPLAYING THE ADVERTISEMENTS ///
/////////////////////////////////////////
//////////////////////////
/// START ASA COMMANDS ///
//////////////////////////
public add_advertisements(id, level, cid)
{
if (!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED
new szTemp[512], type[9], message[512], red[4], green[4], blue[4]
read_argv(1, type, charsmax(type))
read_argv(2, message, charsmax(message))
if(equal(type, "chat"))
{
format(szTemp,charsmax(szTemp),"INSERT INTO `%s` ( `adv_type`, `adv_message` ,`adv_r` ,`adv_g`,`adv_b`) VALUES ('%s','%s','0','0','0');",
Table, type, message, red, green, blue)
console_print(id, "[asa] Hozzá Adtál egy hírdetést: Tipus: %s, Message: %s", type, message)
}
else if(equal(type, "dhud"))
{
read_argv(3, red, charsmax(red))
read_argv(4, blue, charsmax(blue))
read_argv(5, green, charsmax(green))
format(szTemp,charsmax(szTemp),"INSERT INTO `%s` ( `adv_type`, `adv_message` ,`adv_r` ,`adv_g`,`adv_b`) VALUES ('%s','%s','%s','%s','%s');",
Table, type, message, red, green, blue)
console_print(id, "[asa] Hozzá Adtál egy hírdetést: Tipus: %s, Üzenet: %s, Red: %s, Green: %s, Blue: %s", type, message, red, green, blue)
}
else if(equal(type, "hud"))
{
read_argv(3, red, charsmax(red))
read_argv(4, blue, charsmax(blue))
read_argv(5, green, charsmax(green))
format(szTemp,charsmax(szTemp),"INSERT INTO `%s` ( `adv_type`, `adv_message` ,`adv_r` ,`adv_g`,`adv_b`) VALUES ('%s','%s','%s','%s','%s');",
Table, type, message, red, green, blue)
console_print(id, "[asa] Hozzá Adtál egy hírdetést: Tipus: %s, Üzenet: %s, Red: %s, Green: %s, Blue: %s", type, message, red, green, blue)
}
else
{
console_print(id, "[asa] Válasz mit szeretnél (chat)(hud)(dhud)")
return PLUGIN_HANDLED
}
SQL_ThreadQuery(g_hSqlTuple,"IgnoreHandle",szTemp)
console_print(id, "[asa] Sikeresen Hozzáadtad a Hírdetést!")
return PLUGIN_HANDLED
}
public delete_advertisements(id, level, cid)
{
if (!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED
new szTemp[512], type[9], message[512]
read_argv(1, type, charsmax(type))
read_argv(2, message, charsmax(message))
if(!equal(type, "chat") && !equal(type, "dhud") && !equal(type, "hud"))
{
console_print(id, "[asa] Válasz mit Szeretnél (chat)(hud)(dhud)")
return PLUGIN_HANDLED
}
format(szTemp,charsmax(szTemp),"DELETE FROM %s WHERE `adv_type`='%s' AND `adv_message`='%s';",
Table, type, message)
SQL_ThreadQuery(g_hSqlTuple,"IgnoreHandle",szTemp)
console_print(id, "[asa] Sikeresen Törölted a Hírdetést: Tipus: %s, Message: %s", type, message)
console_print(id, "[asa] Hírdetés Törölve")
return PLUGIN_HANDLED
}
public show_advertisements(id, level, cid)
{
if (!cmd_access(id, level, cid, 0))
return PLUGIN_HANDLED
if(num_messages[0] <= 0)
{
console_print(id, "[ASA]: Nincs Üzenet amit be lehet Tölteni")
}
else
{
for(new i=0; i<num_messages[0]; i++)
console_print(id, "[ASA]: Tipus: Chat, üzenet: %s", asa_chat_messages[i])
}
if(num_messages[1] <= 0)
{
console_print(id, "[ASA]: Nincs Hud üzenet Betöltve")
}
else
{
for(new i=0; i<num_messages[1]; i++)
console_print(id, "[ASA]: Tipus: HUD, üzenet: %s, Red: %d, Green: %d, Blue: %d",
asa_hud_messages[i], asa_hud_colors[i][0], asa_hud_colors[i][1], asa_hud_colors[i][2])
}
if(num_messages[2] <= 0)
{
console_print(id, "[ASA]: Nincs DHUD üzenet Betöltve")
}
else
{
for(new i=0; i<num_messages[2]; i++)
console_print(id, "[ASA]: Tipus: DHUD, üzenet: %s, Red: %d, Green: %d, Blue: %d",
asa_dhud_messages[i], asa_dhud_colors[i][0], asa_dhud_colors[i][1], asa_dhud_colors[i][2])
}
return PLUGIN_HANDLED
}
public reload_advertisements(id, level, cid)
{
if (!cmd_access(id, level, cid, 0))
return PLUGIN_HANDLED
set_task(1.0, "Mysql_Init")
console_print(id, "[ASA]: Hírdetések Sikeresen Újra Töltve")
return PLUGIN_HANDLED
}
public advertisements_menu(id, level, cid)
{
if (!cmd_access(id, level, cid, 0))
return PLUGIN_HANDLED
new total_advs
for(new i=0; i<3; i++)
total_advs += num_messages[i]
if(total_advs <= 0)
{
client_printc(id, "!g[!nHírdetés Kezellő SQL!g] Nincs !tÜzenet !gBetöltve!n! Hozz !gasa_add_adv !nLétre !tEgyett")
}
else
{
new menu = menu_create("[ASA]: Hírdetés Kezelő Menü:", "advertisements_menu_h")
new Temp[525]
if(num_messages[0] > 0)
{
for(new i=0; i<num_messages[0]; i++)
{
formatex(Temp, charsmax(Temp), "Tipusa: \rChat\w, Message: \r%s", asa_chat_messages[i])
menu_additem(menu, Temp, "")
}
}
if(num_messages[1] > 0)
{
for(new i=0; i<num_messages[1]; i++)
{
formatex(Temp, charsmax(Temp), "Tipusa: \rHUD\w, Message: \r%s\w, Red: \r%d\w, Green: \r%d\w, Blue: \r%d",
asa_hud_messages[i], asa_hud_colors[i][0], asa_hud_colors[i][1], asa_hud_colors[i][2])
menu_additem(menu, Temp, "")
}
}
if(num_messages[2] > 0)
{
for(new i=0; i<num_messages[2]; i++)
{
formatex(Temp, charsmax(Temp), "Tipusa: \rDHUD\w, Message: \r%s\w, Red: \r%d\w, Green: \r%d\w, Blue: \r%d",
asa_dhud_messages[i], asa_dhud_colors[i][0], asa_dhud_colors[i][1], asa_dhud_colors[i][2])
menu_additem(menu, Temp, "")
}
}
menu_display(id, menu, 0)
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
}
return PLUGIN_HANDLED
}
public advertisements_menu_h(id, menu, item)
return PLUGIN_HANDLED
////////////////////////
/// END ASA COMMANDS ///
////////////////////////
//////////////
/// STOCKS ///
//////////////
stock client_printc(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^x04") // Green Color
replace_all(msg, 190, "!n", "^x01") // Default Color
replace_all(msg, 190, "!t", "^x03") // Team Color
if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
write_byte(players[i])
write_string(msg)
message_end()
}
}
}
}
// DHUDMESSAGE, NOT TO NEED INCLUDE ;) Not copyright to me.
stock __dhud_color;
stock __dhud_x;
stock __dhud_y;
stock __dhud_effect;
stock __dhud_fxtime;
stock __dhud_holdtime;
stock __dhud_fadeintime;
stock __dhud_fadeouttime;
stock __dhud_reliable;
stock set_dhudmessage( red = 0, green = 160, blue = 0, Float:x = -1.0, Float:y = 0.65, effects = 2, Float:fxtime = 6.0, Float:holdtime = 3.0, Float:fadeintime = 0.1, Float:fadeouttime = 1.5, bool:reliable = false )
{
#define clamp_byte(%1) ( clamp( %1, 0, 255 ) )
#define pack_color(%1,%2,%3) ( %3 + ( %2 << 8 ) + ( %1 << 16 ) )
__dhud_color = pack_color( clamp_byte( red ), clamp_byte( green ), clamp_byte( blue ) );
__dhud_x = _:x;
__dhud_y = _:y;
__dhud_effect = effects;
__dhud_fxtime = _:fxtime;
__dhud_holdtime = _:holdtime;
__dhud_fadeintime = _:fadeintime;
__dhud_fadeouttime = _:fadeouttime;
__dhud_reliable = _:reliable;
return 1;
}
stock show_dhudmessage( index, const message[], any:... )
{
new buffer[ 128 ];
new numArguments = numargs();
if( numArguments == 2 )
{
send_dhudMessage( index, message );
}
else if( index || numArguments == 3 )
{
vformat( buffer, charsmax( buffer ), message, 3 );
send_dhudMessage( index, buffer );
}
else
{
new playersList[ 32 ], numPlayers;
get_players( playersList, numPlayers, "ch" );
if( !numPlayers )
{
return 0;
}
new Array:handleArrayML = ArrayCreate();
for( new i = 2, j; i < numArguments; i++ )
{
if( getarg( i ) == LANG_PLAYER )
{
while( ( buffer[ j ] = getarg( i + 1, j++ ) ) ) {}
j = 0;
if( GetLangTransKey( buffer ) != TransKey_Bad )
{
ArrayPushCell( handleArrayML, i++ );
}
}
}
new size = ArraySize( handleArrayML );
if( !size )
{
vformat( buffer, charsmax( buffer ), message, 3 );
send_dhudMessage( index, buffer );
}
else
{
for( new i = 0, j; i < numPlayers; i++ )
{
index = playersList[ i ];
for( j = 0; j < size; j++ )
{
setarg( ArrayGetCell( handleArrayML, j ), 0, index );
}
vformat( buffer, charsmax( buffer ), message, 3 );
send_dhudMessage( index, buffer );
}
}
ArrayDestroy( handleArrayML );
}
return 1;
}
stock send_dhudMessage( const index, const message[] )
{
message_begin( __dhud_reliable ? ( index ? MSG_ONE : MSG_ALL ) : ( index ? MSG_ONE_UNRELIABLE : MSG_BROADCAST ), SVC_DIRECTOR, _, index );
{
write_byte( strlen( message ) + 31 );
write_byte( DRC_CMD_MESSAGE );
write_byte( __dhud_effect );
write_long( __dhud_color );
write_long( __dhud_x );
write_long( __dhud_y );
write_long( __dhud_fadeintime );
write_long( __dhud_fadeouttime );
write_long( __dhud_holdtime );
write_long( __dhud_fxtime );
write_string( message );
}
message_end();
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1038\\ f0\\ fs16 \n\\ par }
*/