20.07.2012, 18:54
(
Последний раз редактировалось [XPG]MarlonCS; 20.07.2012 в 19:53.
)
Й um mini-sistema AFK com auto-kick no player que estiver AFK, parado ou de ESC por 10 minutos.
Comandos
/afk > fica AFK
/voltar > volta
/ausentes > mostra quem estб AFK
Cуdigo
AMX: aqui
Comandos
/afk > fica AFK
/voltar > volta
/ausentes > mostra quem estб AFK
Cуdigo
pawn Код:
/*
Sistema AFK com Auto-Kick
Feito por [XPG]MarlonCS
Skype: marloncs_22
*/
//includes
#include <a_samp>
#include <zcmd>
// defines
#define cinza 0xBEBEBEFF
#define laranja 0xFFA500FF
#define verde_claro 0x00FF00FF
#define vermelho 0xFF0000FF
// forwards
forward ChecarAfk(playerid);
forward AtualizarAfk(playerid);
forward ChecarPosicao(playerid,Float:afkX,Float:afkY,Float:afkZ);
// news
new
bool:AFKCMD[MAX_PLAYERS],
AfkCount[MAX_PLAYERS],
Text:afk[MAX_PLAYERS],
timeafk[MAX_PLAYERS],
Float:Position[3],
AFK[MAX_PLAYERS],
string[256]
;
public OnFilterScriptInit()
{
SetTimer("ChecarPosicao", 600000, true); // Se o player ficar parado por 10 minutos, ele й tido como AFK
SetTimer("ChecarAfk", 1000, true); // De um em um segundo chega o tempo do player AFK, caso ele esteja 10 minutos, ele й kickado
print("\nSisteminha AFK carregado *.* -------");
print("----------------------by [XPG]MarlonCS\n");
return 1;
}
public OnFilterScriptExit()
{
return 1;
}
public OnPlayerConnect(playerid)
{
CriarTextDraw(playerid);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
if(AFKCMD[playerid]==true) // Se o player sair enquanto tiver AFK antes de usar /voltar
{
AFK[playerid]=0;
AFKCMD[playerid]=false;
}
return 1;
}
CMD:afk(playerid, params[])
{
if(AFKCMD[playerid] == true) { SendClientMessage(playerid, cinza, "[SERVER] Vocк jб estб ausente!"); }
AFK[playerid]=1;
AFKCMD[playerid]=true;
TogglePlayerControllable(playerid,0);
TextDrawShowForPlayer(playerid,afk[playerid]);
timeafk[playerid] = SetTimer("AtualizarAfk", 60000, true);
format(string, sizeof(string), "[SERVER] %s estб ausente. ( /afk )", pnome(playerid));
SendClientMessageToAll(laranja, string);
return 1;
}
CMD:voltar(playerid, params[])
{
if(AFKCMD[playerid] == false) { SendClientMessage(playerid, cinza, "[SERVER] Vocк nгo estб ausente!"); }
AFK[playerid]=0;
AFKCMD[playerid]=false;
TogglePlayerControllable(playerid,1);
TextDrawHideForPlayer(playerid,afk[playerid]);
KillTimer(timeafk[playerid]);
format(string, sizeof(string), "[SERVER] %s voltou ao jogo. ( /voltar )", pnome(playerid));
SendClientMessageToAll(laranja, string);
return 1;
}
CMD:ausentes(playerid, params[])
{
new arm[500];
new str[500];
new Nome[24];
new count;
for(new i=0;i<MAX_PLAYERS;i++) {
if(IsPlayerConnected(i)) {
if(AFK[i] > 0) {
count++;
GetPlayerName(i, Nome, sizeof(Nome));
format(str, sizeof(str),"{FFFFFF}Nome: {FFA500}%s {FFFFFF}[%i]\n", Nome, i);
strcat(arm, str);
}
}
}
if(count<=0)return ShowPlayerDialog(playerid, 10, DIALOG_STYLE_MSGBOX, "===== {FFA500}Ausentes{FFFFFF} ======", "{00FF00}Nenhum player ausente", "OK", "");
if(count>0)ShowPlayerDialog(playerid, 10, DIALOG_STYLE_MSGBOX, "===== {FFA500}Ausentes{FFFFFF} ======", arm, "OK", "");
return 1;
}
public OnPlayerUpdate(playerid)
{
GetPlayerPos(playerid, Position[0], Position[1], Position[2]); // Getar posiзгo
if(AFK[playerid] == 1 && AfkCount[playerid] > 0 && AFKCMD[playerid]==false) // Se o player se mover
{
AfkCount[playerid] = 0;
AFK[playerid]=0;
KillTimer(timeafk[playerid]);
}
return 1;
}
stock CriarTextDraw(playerid)
{
afk[playerid] = TextDrawCreate(260.000000,222.000000,"~r~AFK ~w~( sair: ~g~/voltar~w~ )");
TextDrawSetOutline(afk[playerid], 1);
TextDrawFont(afk[playerid], 2);
TextDrawSetProportional(afk[playerid], true);
TextDrawAlignment(afk[playerid], 1);
TextDrawLetterSize(afk[playerid], 0.4, 3.0);
TextDrawSetShadow(afk[playerid], 1);
return 1;
}
public AtualizarAfk(playerid)
{
AfkCount[playerid]++; // De um em um minuto soma mais 1
return 1;
}
public ChecarPosicao(playerid,Float:afkX,Float:afkY,Float:afkZ) // Checar se o player estб parado
{
GetPlayerPos(playerid,afkX,afkY,afkZ);
if (Position[0] == afkX && Position[1] == afkY && Position[2] == afkZ)
{
AFK[playerid]=1;
timeafk[playerid] = SetTimer("AtualizarAfk", 60000, true);
}
return 1;
}
public ChecarAfk(playerid)
{
if(AFK[playerid]==1 && AfkCount[playerid] > 10) { // Verifica se o player estб afk por 10 minutos
SendClientMessage(playerid, vermelho, "[SERVER] Vocк foi kickado por estar AFK por muito tempo!");
Kick(playerid);
format(string, sizeof string, "[SERVER] %s foi kickado por estar AFK por 10 minutos.", pnome(playerid));
SendClientMessageToAll(vermelho, string);
}
return 1;
}
stock pnome(playerid)
{
new nome[32];
GetPlayerName(playerid, nome, sizeof(nome));
return nome;
}