Para fazer um ban serial via comando é simples.
Do modo mais básico,você pode pegar o serial do jogador,e compara-lo,para desbanir é só usar uma booleana,porém,no meu caso,usei o DCMD,que pode ser facilmente setado colocando este código abaixo das includes:
DCMD :
#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
Não liguem para estas instruções iniciais,isso só serve para iniciantes e visitantes que não conhecem.
Meu comando de banimento por serial é simples,e utiliza o DCMD,pois por strtok é meio que mais complicado.
Fiz um banimento e um desbanimento por nome,segue o script:
Ban por Serial (DCMD)(Para Ladmin):Ban no serial (Com Ladmin) :
dcmd_sban(playerid, params[])
{
if(PlayerInfo[playerid][LoggedIn] == 1 && PlayerInfo[playerid][Level] >= 3)
{
new tmp[128], tmp2[128], adminname[MAX_PLAYER_NAME], targetname[MAX_PLAYER_NAME], Index;
GetPlayerName(playerid, adminname, MAX_PLAYER_NAME);
tmp = strtok(params,Index);
tmp2 = strtok(params,Index);
if(!strlen(params)) return SendClientMessage(playerid, red, "[ERRO]:Sintáxe correta: /sban ");
if(!strlen(tmp2)) return SendClientMessage(playerid, red, "[ERRO]:Você deve especificar um motivo.");
new targetid = strval(tmp);
GetPlayerName(targetid, targetname, MAX_PLAYER_NAME);
new targetserial[128];
gpci(targetid, targetserial, sizeof(targetserial));
if(!IsPlayerConnected(targetid)) return SendClientMessage(playerid, red, "[ERRO]:Jogador não conectado.");
if(targetid == playerid) return SendClientMessage(playerid, red, "[ERRO]:Você não pode banir você mesmo.");
if(PlayerInfo[targetid][Level] <= 3) return SendClientMessage(playerid, red, "[ERRO]:Você não pode banir administrador de alto nivel.");
new file[128];
format(file ,sizeof(file), "%s.ini", targetname);
if(!dini_Exists(file))
{
dini_Create(file);
dini_Set(file, "Serial", targetserial);
dini_IntSet(file, "SBanned", 1);
}
else
{
dini_IntSet(file, "SBanned", 1);
}
new string[128], string2[128];
format(string, sizeof(string), "%s teve seu serial banido pelo administrador %s.Motivo : %s.", targetname, adminname, params[2]);
format(string2, sizeof(string2), "[DBAN]:%s teve seu serial banido pelo administrador %s.Motivo : %s.", targetname, adminname, params[2]);
SendClientMessageToAll(grey, string);
print(string2);
Kick(playerid);
CMDMessageToAdmins(playerid,"SBAN");
SaveToFile("BanLog",string);
BanNotify(targetid);
return 1;
}
}
Ban por Serial(DCMD)(Sem ser Ladmin):Ban por Serial (Sem Ladmin) :
dcmd_sban(playerid, params[])
{
if(IsPlayerAdmin(playerid))
{
new tmp[128], tmp2[128], adminname[MAX_PLAYER_NAME], targetname[MAX_PLAYER_NAME], Index;
GetPlayerName(playerid, adminname, MAX_PLAYER_NAME);
tmp = strtok(params,Index);
tmp2 = strtok(params,Index);
if(!strlen(params)) return SendClientMessage(playerid, red, "[ERRO]:Sintáxe correta: /sban ");
if(!strlen(tmp2)) return SendClientMessage(playerid, red, "[ERRO]:Você deve especificar um motivo.");
new targetid = strval(tmp);
GetPlayerName(targetid, targetname, MAX_PLAYER_NAME);
new targetserial[128];
gpci(targetid, targetserial, sizeof(targetserial));
if(!IsPlayerConnected(targetid)) return SendClientMessage(playerid, red, "[ERRO]:Jogador não conectado.");
if(targetid == playerid) return SendClientMessage(playerid, red, "[ERRO]:Você não pode banir você mesmo.");
if(PlayerInfo[targetid][Level] <= 3) return SendClientMessage(playerid, red, "[ERRO]:Você não pode banir administrador de alto nivel.");
new file[128];
format(file ,sizeof(file), "%s.ini", targetname);
if(!dini_Exists(file))
{
dini_Create(file);
dini_Set(file, "Serial", targetserial);
dini_IntSet(file, "SBanned", 1);
}
else
{
dini_IntSet(file, "SBanned", 1);
}
new string[128], string2[128];
format(string, sizeof(string), "%s teve seu serial banido pelo administrador %s.Motivo : %s.", targetname, adminname, params[2]);
format(string2, sizeof(string2), "[DBAN]:%s teve seu serial banido pelo administrador %s.Motivo : %s.", targetname, adminname, params[2]);
SendClientMessageToAll(grey, string);
print(string2);
Kick(playerid);
//CMDMessageToAdmins(playerid,"SBAN");
//SaveToFile("BanLog",string);
//BanNotify(targetid);
return 1;
}else return SendClientMessage(playerid, 0xFF0000FF, "[ERRO]:Você não tem permissão para usar este comando.");
}
Desbanimento do serial(DCMD)(Ladmin)(EXPERIMENTAL):Desban no Serial (Com Ladmin) :
dcmd_unbanserial(playerid,params[])
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO]:Você não tem permissão para usar este comando.");
new adminname[MAX_PLAYER_NAME], targetname[MAX_PLAYER_NAME], Index;
GetPlayerName(playerid, adminname, MAX_PLAYER_NAME);
if(!strlen(params)) return SendClientMessage(playerid, red, "[ERRO]:Sintáxe correta: /unbanserial ");
new file[128];
format(file, sizeof(file), "%s.ini", targetname);
if(!dini_Exists(file)) return SendClientMessage(playerid, red, "[ERRO]:Este jogador não existe.");
if(dini_Int(file,"SBanned") == 0) return SendClientMessage(playerid, red, "[ERRO]:Este jogador não está banido.");
CMDMessageToAdmins(playerid,"UNBANSERIAL");
dini_IntSet(file,"SBanned",0);
new info[128];
format(info, sizeof(info), "[DBAN]:%s desbaniu o serial do jogador %s.", adminname, params);
print(info);
new info2[128];
format(info2, sizeof(info2), "[INFO]:Você desbaniu o serial do jogador %s com sucesso.", params);
SendClientMessage(playerid, blue, info2);
return 1;
}
Desbanimento do serial(DCMD)(Sem Ladmin)(EXPERIMENTAL):Desban Serial (Sem Ladmin) :
dcmd_unbanserial(playerid,params[])
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO]:Você não tem permissão para usar este comando.");
new adminname[MAX_PLAYER_NAME], targetname[MAX_PLAYER_NAME], Index;
GetPlayerName(playerid, adminname, MAX_PLAYER_NAME);
if(!strlen(params)) return SendClientMessage(playerid, red, "[ERRO]:Sintáxe correta: /unbanserial ");
new file[128];
format(file, sizeof(file), "%s.ini", targetname);
if(!dini_Exists(file)) return SendClientMessage(playerid, red, "[ERRO]:Este jogador não existe.");
if(dini_Int(file,"SBanned") == 0) return SendClientMessage(playerid, red, "[ERRO]:Este jogador não está banido.");
//CMDMessageToAdmins(playerid,"UNBANSERIAL");
dini_IntSet(file,"SBanned",0);
new info[128];
format(info, sizeof(info), "[DBAN]:%s desbaniu o serial do jogador %s.", adminname, params);
print(info);
new info2[128];
format(info2, sizeof(info2), "[INFO]:Você desbaniu o serial do jogador %s com sucesso.", params);
SendClientMessage(playerid, blue, info2);
return 1;
}
Lembrando que não mudou muita coisa de um pro outro,porém,independente de você usar ou não Ladmin,o comando irá funcionar.
Para que o mesmo funcione corretamente,é necessário criar a pasta
Serials dentro da
Scriptfiles para que o comando realmente funcione.