Mam takie pytanie, do czego służy "@" w PAWN'ie? przykładem jest plugin diablix'a.
Spoiler
#include <amxmodx>
#include <colorchat>
#define VERSION "0.1"
#define TASK_CD 1337
#define tempId(%1) (%1 -= TASK_CD)
#pragma semicolon 1;
new const gszBlockMisc[][] = { "spk fvox/blip.wav", "Przestan spamowac na chatcie!"};
new g_iMaxPlayers;
new fCvarTime, iCvarType, iCvarSound, iCvarKickAsPunishment, iCvarKickAfter;
new g_iTimes[33];
new Array:gBlockCmd;
public plugin_init(){
register_plugin("Anty Spam Advanced", VERSION, "diablix");
register_clcmd("say", "handleSay");
register_clcmd("say_team", "handleSay");
fCvarTime = register_cvar("spam_delay", "2.5"); // co ile można pisać
iCvarType = register_cvar("spam_infotype", "0"); // 1 - konsola | 0 - chat
iCvarSound = register_cvar("spam_sound", "1"); // 1 - tak | 0 - nie
iCvarKickAsPunishment = register_cvar("spam_kick", "0"); // 1 - kickuj | 0 - nie
iCvarKickAfter = register_cvar("spam_kickafter", "0"); // jezeli spam_kick jest rowny 1 -> po piecokrotnym spamie gracz zostanie wyrzucony
g_iMaxPlayers = get_maxplayers();
gBlockCmd = ArrayCreate(1, g_iMaxPlayers);
set_task(5.0, "taskDisableOldOne");
}
@client_connect(id){
g_iTimes[id] = 0;
for(new i = 0; i < ArraySize(gBlockCmd) ; i++){
if(id == ArrayGetCell(gBlockCmd, i)){
ArrayDeleteItem(gBlockCmd, i);
}
}
}
@taskDisableOldOne(){
if(is_plugin_loaded("Anti Flood"))
set_cvar_float("amx_flood_time", 0.1);
}
@handleSay(id){
new szText[192];
read_argv(1, szText, sizeof szText - 1);
if(strlen(szText)){
for(new i = 0; i < ArraySize(gBlockCmd) ; i++){
if(id == ArrayGetCell(gBlockCmd, i)){
switch(get_pcvar_num(iCvarType)){
case 0:{
#if defined _colorchat_included
ColorChat(id, GREY, gszBlockMisc[1]);
#else
client_print(id, 3, gszBlockMisc[1]);
#endif
}
default: console_print(id, gszBlockMisc[1]);
}
if(get_pcvar_num(iCvarSound))
client_cmd(id, "%s", gszBlockMisc[0]);
return 1;
}
}
ArrayPushCell(gBlockCmd, id);
set_task(get_pcvar_float(fCvarTime), "taskRemoveCd", id + TASK_CD);
if(get_pcvar_num(iCvarKickAsPunishment) && get_pcvar_num(iCvarKickAfter)){
g_iTimes[id] ++;
if(g_iTimes[id] >= get_pcvar_num(iCvarKickAfter)){
if(task_exists(id + TASK_CD)) remove_task(id + TASK_CD);
new szName[32];
get_user_name(id, szName, sizeof szName - 1);
server_cmd("kick ^"%s^" ^"%s^"", szName, gszBlockMisc[1]);
}
}
}
return 0;
}
@taskRemoveCd(id){
id = tempId(id);
for(new i = 0; i < ArraySize(gBlockCmd) ; i++){
if(id == ArrayGetCell(gBlockCmd, i)){
ArrayDeleteItem(gBlockCmd, i);
}
}
}
Użytkownik RPK. Shark edytował ten post 20.05.2011 19:18