Here is the code .. i want to make dhud messages to > hud messages .. and when write amx_gagmenu (reason) i want to add it ...
Code:
#include <amxmodx>
#include <amxmisc>
#include <fvault>
#include <dhudmessage>
#include <engine>
#include <colorchat>
#define ACCESS ADMIN_SLAY //флаг за достъп до amx_gag/amx_ungag
#define WORDS 999 //колко думи да побира automute-words.ini
#define SWEAR_GAGMINUTES 1 //за колко минути да гагва при swear (при хваната дума от automute-words.ini)
new const g_FileName[] = "automute-words.ini"; //amxmodx/configs/ папката
new Array:g_bantimes;
new g_menuOption[33]
new g_menuSettings[33]
new g_menuPosition[33]
new g_menuPlayers[33][32]
new g_menuPlayersNum[33]
new g_coloredMenus
new
bool:g_Gaged[ 33 ],
bool:g_SwearGag[ 33 ], bool:g_CmdGag[ 33 ],
bool:g_NameChanged[33];
new g_GagTime[ 33 ]
new g_reason[ 32 ], g_admin[ 32 ], g_name[ 33 ][ 32 ];
new g_WordsFile[ 128 ];
new g_Words[ WORDS ][ 32 ], g_Count, g_Len;
new point;
new gEnt;
new const g_vault[] = "amx_gag";
public plugin_init()
{
register_plugin("GAG-Manager", "1.4", "ExoTiQ")
register_concmd( "amx_gag", "gag_cmd", ACCESS,"- <name> <minutes> <reason> [Plugin by ExoTiQ]" );
register_concmd( "amx_ungag", "ungag_cmd", ACCESS, "- <name>" );
register_clcmd( "say", "check" );
register_clcmd( "say_team", "check" );
point = get_cvar_pointer( "amx_show_activity" );
fvault_load(g_vault);
register_clcmd("amx_gagmenu", "cmdBanMenu", ADMIN_BAN, "- displays ban menu")
register_menucmd(register_menuid("GAG Menu"), 1023, "actionBanMenu")
g_bantimes = ArrayCreate();
ArrayPushCell(g_bantimes, 0);
ArrayPushCell(g_bantimes, 5);
ArrayPushCell(g_bantimes, 10);
ArrayPushCell(g_bantimes, 15);
ArrayPushCell(g_bantimes, 30);
ArrayPushCell(g_bantimes, 45);
ArrayPushCell(g_bantimes, 60);
g_coloredMenus = colored_menus()
gEnt = create_entity( "info_target" );
entity_set_string( gEnt , EV_SZ_classname, "Presmqtaniq" );
entity_set_float( gEnt , EV_FL_nextthink, get_gametime() + 7.0); // Auto Call when plugin start.
register_think( "Presmqtaniq" , "GAGThink");
}
public GAGThink( entityID ) {
new iPlayersList[32], iPlayersNum, id, i,name[32]
get_players(iPlayersList, iPlayersNum, "c") // add flag "a" so we retrieve only alive players ( h is useless then )
for(i=0; i<iPlayersNum; i++)
{
id = iPlayersList[i]
if(is_user_connected(id)) {
g_GagTime[id] -= 1
if(g_GagTime[id] <= 0 && g_Gaged[id] == true && g_CmdGag[ id ]==true) {
g_Gaged[id] = false;
g_CmdGag[ id ] = false
g_GagTime[id] = 0
get_user_name(id,name,31)
ColorChat( 0, GREY, "^4[^3BlackGaming^4] ^1The gag has expired for ^4%s",name);
SaveMutedPlayers(id)
}
}
}
entity_set_float( gEnt, EV_FL_nextthink, get_gametime( ) + 60.0 );
}
public cmdBanMenu(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
g_menuOption[id] = 0
if (ArraySize(g_bantimes) > 0)
{
g_menuSettings[id] = ArrayGetCell(g_bantimes, g_menuOption[id]);
}
else
{
// should never happen, but failsafe
g_menuSettings[id] = 0
}
displayBanMenu(id, g_menuPosition[id] = 0)
return PLUGIN_HANDLED
}
public actionBanMenu(id, key)
{
switch (key)
{
case 7:
{
++g_menuOption[id]
g_menuOption[id] %= ArraySize(g_bantimes);
g_menuSettings[id] = ArrayGetCell(g_bantimes, g_menuOption[id]);
displayBanMenu(id, g_menuPosition[id])
}
case 8: displayBanMenu(id, ++g_menuPosition[id])
case 9: displayBanMenu(id, --g_menuPosition[id])
default:
{
new player = g_menuPlayers[id][g_menuPosition[id] * 7 + key]
new name[32], name2[32], authid[32], authid2[32]
get_user_name(player, name2, 31)
get_user_authid(id, authid, 31)
get_user_authid(player, authid2, 31)
get_user_name(id, name, 31)
//new userid2 = get_user_name(player)
if (g_menuSettings[id]==0)
{
new maxpl = get_maxplayers();
for (new i = 1; i <= maxpl; i++)
{
}
}
else
{
new tempTime[32];
formatex(tempTime,sizeof(tempTime)-1,"%d",g_menuSettings[id]);
new maxpl = get_maxplayers();
for (new i = 1; i <= maxpl; i++)
{
}
}
server_cmd("amx_gag %s %d gagged", name2,g_menuSettings[id])
server_exec()
displayBanMenu(id, g_menuPosition[id])
}
}
return PLUGIN_HANDLED
}
displayBanMenu(id, pos)
{
if (pos < 0)
return
get_players(g_menuPlayers[id], g_menuPlayersNum[id])
new menuBody[512]
new b = 0
new i
new name[32]
new start = pos * 7
if (start >= g_menuPlayersNum[id])
start = pos = g_menuPosition[id] = 0
new len = format(menuBody, 511, g_coloredMenus ? "\dGAG menu\R%d/%d^n\w^n" : "GAG menu %d/%d^n^n", pos + 1, (g_menuPlayersNum[id] / 7 + ((g_menuPlayersNum[id] % 7) ? 1 : 0)))
new end = start + 7
new keys = MENU_KEY_0|MENU_KEY_8
if (end > g_menuPlayersNum[id])
end = g_menuPlayersNum[id]
for (new a = start; a < end; ++a)
{
i = g_menuPlayers[id][a]
get_user_name(i, name, 31)
if (is_user_bot(i) || (access(i, ADMIN_IMMUNITY) && i != id))
{
++b
if (g_coloredMenus)
len += format(menuBody[len], 511-len, "\d%d. %s^n\w", b, name)
else
len += format(menuBody[len], 511-len, "#. %s^n", name)
} else {
keys |= (1<<b)
if (is_user_admin(i))
len += format(menuBody[len], 511-len, g_coloredMenus ? "%d. %s \r*^n\w" : "%d. %s *^n", ++b, name)
else
len += format(menuBody[len], 511-len, "%d. %s^n", ++b, name)
}
}
if (g_menuSettings[id])
len += format(menuBody[len], 511-len, "^n8. Ban for %d minutes^n", g_menuSettings[id])
else
len += format(menuBody[len], 511-len, "^n8. Ban permanently^n")
if (end != g_menuPlayersNum[id])
{
format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT")
keys |= MENU_KEY_9
}
else
format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT")
show_menu(id, keys, menuBody, -1, "GAG Menu")
}
public plugin_cfg()
{
static dir[ 999 ];
get_localinfo( "amxx_configsdir", dir, 998 );
formatex( g_WordsFile , 127 , "%s/%s" , dir, g_FileName );
if( !file_exists( g_WordsFile ) )
write_file( g_WordsFile, "[Gag Words]", -1 );
new Len;
while( g_Count < WORDS && read_file( g_WordsFile, g_Count ,g_Words[ g_Count ][ 1 ], 30, Len ) )
{
g_Words[ g_Count ][ 0 ] = Len;
g_Count++;
}
}
public client_connect(id)
{
LoadMutedPlayers(id)
}
public gag_cmd( id, level, cid )
{
if( !cmd_access( id, level, cid, 4 ) )
return PLUGIN_HANDLED;
new arg[ 32 ], arg2[ 6 ], reason[ 32 ];
new name[ 32 ], namet[ 32 ];
new minutes;
read_argv(1, arg, 31)
new player = cmd_target(id, arg, 9)
if (!player)
return PLUGIN_HANDLED
read_argv( 1, arg, sizeof arg - 1 );
read_argv( 2, arg2, sizeof arg2 - 1 );
read_argv( 3, reason, sizeof reason - 1 );
get_user_name( id, name, 31 );
copy( g_admin, 31, name );
copy( g_reason, 31, reason );
remove_quotes( reason );
minutes = str_to_num( arg2 );
new target = cmd_target( id, arg, 10 );
if( !target)
return PLUGIN_HANDLED;
if( g_Gaged[ target ] )
{
console_print( id, "Player is already gagged!" );
return PLUGIN_HANDLED;
}
get_user_name( target, namet, 31 );
copy( g_name[ target ], 31, namet );
g_CmdGag[ target ] = true;
g_Gaged[target] = true;
g_GagTime[ target ] = minutes;
ColorChat( 0, GREY, "^4[^3Black Gaming^4] ^3%s: ^4%s ^1has gagged for ^4 %d ^1minutes. ^4Reason: ^3%s",get_pcvar_num( point ) == 2 ? name : "", namet, minutes, reason );
set_dhudmessage(random_num(0,255), random_num(0,255), random_num(0,255), -1.0, 0.20, 0, 0.2, 12.0)
show_dhudmessage(0, "Adnub %s: %s has gagged for %d minutes. Reason: %s." , get_pcvar_num( point ) == 2 ? name : "", namet, minutes, reason );
return PLUGIN_HANDLED;
}
public ungag_cmd( id,level, cid )
{
if( !cmd_access( id, level, cid, 2 ) )
return PLUGIN_HANDLED;
new arg[ 32 ], reason[ 32 ], name[ 32 ];
read_argv( 1, arg, sizeof arg - 1 );
read_argv( 2, reason, sizeof reason - 1 );
get_user_name( id, name, sizeof name - 1 );
remove_quotes( reason );
new target = cmd_target( id, arg, 11 );
if( !target )
return PLUGIN_HANDLED;
new namet[ 32 ];
get_user_name( target, namet, sizeof namet - 1 );
if( !g_Gaged[ target ] )
{
console_print( id, "Player %s has ungagged.", namet );
return PLUGIN_HANDLED;
}
g_Gaged[ target ] = false;
g_SwearGag[ target ] = false;
if( g_NameChanged[ target ] )
client_cmd( target, "name ^"%s^"", g_name[ target ] );
g_NameChanged[ target ] = false;
ColorChat( 0, GREY, "^4[^3Black Gaming^4] ^4%s: ^1 has ungagged ^3%s",get_pcvar_num( point ) == 2 ? name : "", namet );
return PLUGIN_HANDLED;
}
public check( id )
{
new said[ 192 ];
read_args( said, sizeof said - 1 );
if( !strlen( said ) )
return PLUGIN_CONTINUE;
if( g_Gaged[ id ] )
{
if( g_CmdGag[ id ] )
{
ColorChat( id, GREY, "^4[^3Black Gaming^4] ^4[^3You have gagged by ^4%s ^4] ", g_admin);
ColorChat( id, GREY, "^4[^3Black Gaming^4] ^4[ ^1Time before ungag ^3%d minutes ^4] " , g_GagTime[ id ], g_GagTime[ id ] == 1 ? "" : "s" );
ColorChat( id, GREY, "^4[^3Black Gaming^4] ^4[^1Reason: ^3%s ^4] ", g_reason );
return PLUGIN_HANDLED;
} else if( g_SwearGag[ id ] ) {
ColorChat( id, GREY, "^4[^3Black Gaming^4] ^4[^1You have blocked for chat! (^4Reason: ^3Reklama,Obida) ^4] ")
ColorChat( id, GREY, "^4[^3Black Gaming^4] ^4[^3Timeleft for ungag ^4%d ^1minutes ^4] " , g_GagTime[ id ], g_GagTime[ id ] == 1 ? "" : "s" );
return PLUGIN_HANDLED;
}
} else {
new bool:g_Sweared, i, pos;
for( i = 0; i < g_Count; ++i )
{
if( ( pos = containi( said, g_Words[ i ][ 1 ] ) ) != -1 )
{
g_Len = g_Words[ i ][ 0 ];
while( g_Len-- )
said[ pos++ ] = '*';
g_Sweared = true;
continue;
}
}
if( g_Sweared )
{
new cmd[ 32 ], name[ 32 ];
get_user_name( id, name, sizeof name - 1 );
read_argv( 0, cmd, sizeof cmd - 1 );
copy( g_name[ id ], 31, name );
engclient_cmd( id, cmd, said );
g_Gaged[ id ] = true;
g_CmdGag[ id ] = false;
g_SwearGag[ id ] = true;
g_GagTime[ id ] = SWEAR_GAGMINUTES;
ColorChat( 0, GREY, "^4[^3Black Gaming^4] ^1muted ^4%s ^1for ^3 1 ^1minutes",name );
return PLUGIN_HANDLED;
}
}
return PLUGIN_CONTINUE;
}
public client_disconnect(id)
{
if(g_Gaged[id])
{
new Nick[32],userip[32]
get_user_name(id,Nick,31)
get_user_ip(id,userip,31,1);
ColorChat(0, GREY, "^4[^3Black Gaming^4] ^1Gagged Player ^3%s ^4[^3IP: ^3%s^4] ^4has left the server.",Nick,userip)
SaveMutedPlayers(id);
g_Gaged[id] = false;
}
}
public SaveMutedPlayers(id)
{
new name[32], userip[32];
get_user_name(id,name,31);
get_user_ip(id,userip,31,1);
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s[IP: %s]-Muted",name,userip)
format(vaultdata,255,"%i#%i#",g_Gaged[id],g_GagTime[ id ])
fvault_set_data(g_vault,vaultkey,vaultdata)
return PLUGIN_CONTINUE
}
public LoadMutedPlayers(id)
{
new name[32], userip[32];
get_user_name(id,name,31);
get_user_ip(id,userip,31,1);
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s[IP: %s]-Muted",name,userip)
format(vaultdata,255,"%i#%i#",g_Gaged[id], g_GagTime[ id ])
fvault_get_data(g_vault,vaultkey,vaultdata,255)
replace_all(vaultdata, 255, "#", " ")
new isgagged[32];
new bool:gagtime[32];
parse(vaultdata, isgagged, 31, gagtime, 31);
if(str_to_num(isgagged) == 1) {
g_Gaged[id] = true
g_CmdGag[ id ] = true
} else {
g_Gaged[id] = false;
g_CmdGag[ id ] = false
}
g_GagTime[id] = str_to_num(gagtime);
return PLUGIN_CONTINUE
}
stock culoare_scris(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!verde", "^4")
replace_all(msg, 190, "!normal", "^1")
replace_all(msg, 190, "!team", "^3")
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();
}
}
}
}