13.08.2010, 23:00
(
Last edited by SlashPT; 15/11/2010 at 05:42 PM.
)
Sistema de Admin's MUITO SIMPLES
Bem pessoal й assim primeiro como diz no nome isto e muito simples... este filterscript server para aqueles que nгo sabes sequer fazer um sistema de admins ... nem as bases sabem fazer...
Por isso vamos ao que Interessa...
Por isso vamos ao que Interessa...
Este sistema de admins consiste em:
>Gravar Os Niveis de Admin Seja no OnPlayerDisconnect seja no OnFilterScriptExit
>Grava Os niveis de Admin nos scriptfiles num ficheiro do exemplo DarK_TeaM_PT.cfg
>Ficheiro's de admin sempre criados no primeiro OnPlayerConnect...
Nгo se Preocupe que se ja existir o ficheiro ele nгo vai criar de novo
>Ficheiros de Admin Lidos/Gravados/Criados com Dini por isso se nгo tiver o dini й melhor ir sacar...
>Para Fazer Comandos foram Utilizados dois sistemas o SSCANF e o ZCMD
>ZCMD Um Processador de comandos diferente se nгo tem include: http://forum.sa-mp.com/showthread.ph...highlight=zcmd
>SSCANF Utilizado para reconhecimento dos parametros... tou a utilizar a velha versгo se queres a nova olha aqui: http://forum.sa-mp.com/showthread.ph...highlight=zcmd
>Tem 3 comandos /setaradmin /niveisadmin /criarcarro O criar carro e so um teste para mostrar como utilizar as variaveis...
>Niveis de admin
Nivel 1: Moderador
Nivel 2: Moderador A
Nivel 3: Admin em treino
Nivel 4: Admin
Nivel 5: Dono/Scripter
>/setaradmin [ID] [Nivel de Admin se kiser /niveisadmins]
>/niveisadmins
>/criarcarro [Nome Do carro / Ou ID]
>Mensagens Com os nomes proprios dos seus niveis de admin
>AXO KE E TUDO PARA UM SISTEMA DE ADMINS SUPER SIMPLES XD
E aqui vai o sistema:
>Gravar Os Niveis de Admin Seja no OnPlayerDisconnect seja no OnFilterScriptExit
>Grava Os niveis de Admin nos scriptfiles num ficheiro do exemplo DarK_TeaM_PT.cfg
>Ficheiro's de admin sempre criados no primeiro OnPlayerConnect...
Nгo se Preocupe que se ja existir o ficheiro ele nгo vai criar de novo
>Ficheiros de Admin Lidos/Gravados/Criados com Dini por isso se nгo tiver o dini й melhor ir sacar...
>Para Fazer Comandos foram Utilizados dois sistemas o SSCANF e o ZCMD
>ZCMD Um Processador de comandos diferente se nгo tem include: http://forum.sa-mp.com/showthread.ph...highlight=zcmd
>SSCANF Utilizado para reconhecimento dos parametros... tou a utilizar a velha versгo se queres a nova olha aqui: http://forum.sa-mp.com/showthread.ph...highlight=zcmd
>Tem 3 comandos /setaradmin /niveisadmin /criarcarro O criar carro e so um teste para mostrar como utilizar as variaveis...
>Niveis de admin
Nivel 1: Moderador
Nivel 2: Moderador A
Nivel 3: Admin em treino
Nivel 4: Admin
Nivel 5: Dono/Scripter
>/setaradmin [ID] [Nivel de Admin se kiser /niveisadmins]
>/niveisadmins
>/criarcarro [Nome Do carro / Ou ID]
>Mensagens Com os nomes proprios dos seus niveis de admin
>AXO KE E TUDO PARA UM SISTEMA DE ADMINS SUPER SIMPLES XD
E aqui vai o sistema:
pawn Code:
#include <a_samp> // Fodasse se nгo sabes o que e isto esquece o script... XD
#include <zcmd> // ZCMD um diferente processador de commandos
#include <SII> // Sistema de Registo
//==============================================================================
#define FILTERSCRIPT // Defenindo que й filterscript para nao dar problemas
//==============================================================================
static
Admin[MAX_PLAYERS], // Variavel de admins usada por exemplo para saber se o jogador e admin nivel 3
string[256], // Usada nos formats para mandar mensagems ou assim... Tem string de 256 por causa de ser utilizada no SII
ida,// Usado por exemplo no /setaradmin
ida2,// outra usada no sscanf...
nome[MAX_PLAYER_NAME], // variavel do nome
vehicle,// usado para saber qual o veiculo em que esta no /criarcarro
Float:pos[4] // coords...
;
//==============================================================================
static
VehicleNames[212][] = // Variavel utilizada para mais tarde um comando /criarcarro
{
"Landstalker",
"Bravura",
"Buffalo",
"Linerunner",
"Pereniel",
"Sentinel",
"Dumper",
"Firetruck",
"Trashmaster",
"Stretch",
"Manana",
"Infernus",
"Voodoo",
"Pony",
"Mule",
"Cheetah",
"Ambulance",
"Leviathan",
"Moonbeam",
"Esperanto",
"Taxi",
"Washington",
"Bobcat",
"Mr-Whoopee",
"BF-Injection",
"Hunter",
"Premier",
"Enforcer",
"Securicar",
"Banshee",
"Predator",
"Bus",
"Rhino",
"Barracks",
"Hotknife",
"Trailer",
"Previon",
"Coach",
"Cabbie",
"Stallion",
"Rumpo",
"RC-Bandit",
"Romero",
"Packer",
"Monster",
"Admiral",
"Squalo",
"Seasparrow",
"Pizzaboy",
"Tram",
"Trailer",
"Turismo",
"Speeder",
"Reefer",
"Tropic",
"Flatbed",
"Yankee",
"Caddy",
"Solair",
"Berkley's-RC-Van",
"Skimmer",
"PCJ-600",
"Faggio",
"Freeway",
"RC Baron",
"RC Raider",
"Glendale",
"Oceanic",
"Sanchez",
"Sparrow",
"Patriot",
"Quad",
"Coastguard",
"Dinghy",
"Hermes",
"Sabre",
"Rustler",
"ZR3-50",
"Walton",
"Regina",
"Comet",
"BMX",
"Burrito",
"Camper",
"Marquis",
"Baggage",
"Dozer",
"Maverick",
"News Chopper",
"Rancher",
"FBI Rancher",
"Virgo",
"Greenwood",
"Jetmax",
"Hotring",
"Sandking",
"Blista-Compact",
"Police-Maverick",
"Boxville",
"Benson",
"Mesa",
"RC-Goblin",
"Hotring-Racer",
"Hotring-Racer",
"Bloodring-Banger",
"Rancher",
"Super GT",
"Elegant",
"Journey",
"Bike",
"Mountain Bike",
"Beagle",
"Cropdust",
"Stunt",
"Tanker",
"RoadTrain",
"Nebula",
"Majestic",
"Buccaneer",
"Shamal",
"Hydra",
"FCR-900",
"NRG-500",
"HPV1000",
"Cement-Truck",
"Tow-Truck",
"Fortune",
"Cadrona",
"FBI-Truck",
"Willard",
"Forklift",
"Tractor",
"Combine",
"Feltzer",
"Remington",
"Slamvan",
"Blade",
"Freight",
"Streak",
"Vortex",
"Vincent",
"Bullet",
"Clover",
"Sadler",
"Firetruck",
"Hustler",
"Intruder",
"Primo",
"Cargobob",
"Tampa",
"Sunrise",
"Merit",
"Utility",
"Nevada",
"Yosemite",
"Windsor",
"Monster-A",
"Monster-B",
"Uranus",
"Jester",
"Sultan",
"Stratum",
"Elegy",
"Raindance",
"RC-Tiger",
"Flash",
"Tahoma",
"Savanna",
"Bandito",
"Freight",
"Trailer",
"Kart",
"Mower",
"Duneride",
"Sweeper",
"Broadway",
"Tornado",
"AT-400",
"DFT-30",
"Huntley",
"Stafford",
"BF-400",
"Newsvan",
"Tug",
"Trailer",
"Emperor",
"Wayfarer",
"Euros",
"Hotdog",
"Club",
"Trailer-B",
"Trailer-C",
"Andromada",
"Dodo",
"RC-CaLm",
"Launch",
"Police Car [LSPD]",
"Police Car [SFPD]",
"Police Car [LVPD]",
"Police Ranger",
"Picador",
"S.W.A.T",
"Alpha",
"Phoenix",
"Glendale",
"Sadler",
"Luggage Trailer",
"Luggage Trailer",
"Stair Trailer",
"Boxville",
"Farm Plow",
"Utility Trailer"
};
//==============================================================================
public
OnFilterScriptInit()
{
print("\n**ґґґґґґґґґґґґґґґґґґґSistema de Admin LIGADO``````````````````**");
print("SIMPLES POR ISSO NГO RECLAMES! XD");
print("DE: DarK TeaM PT a.k.a KylePT");
print("**ґґґґґґґґґґґґґґґґґґґSistema de Admin LIGADO``````````````````**\n");
for ( new i = 0; i < MAX_PLAYERS; i++ )
{
if ( IsPlayerConnected( i ) )
{
format(string, sizeof(string),"%s.cfg",NomeJ(i)); // Saber onde ir buscar o ficheiro
if ( fexist(string) ) // Saber se existe o ficheiro
{
INI_Open(string);
Admin[i] = INI_ReadInt("Admin"); // Para ler o nivel de admin do ficheiro...
INI_Close();
SendClientMessage(i,0x00FFFFAA,"Sistema de Admin Ligado!");
Mensagens(i,1); // Mandar mensagem ao jogador
}
}
}
return 1;
}
//==============================================================================
public
OnFilterScriptExit()
{
print("\n**ґґґґґґґґґґґґґґґґґґґSistema de Admin DESLIGADO``````````````````**");
print("SIMPLES POR ISSO NГO RECLAMES! XD");
print("DE: DarK TeaM PT a.k.a KylePT visita www.samppt.co.cc");
print("**ґґґґґґґґґґґґґґґґґґґSistema de Admin DESLIGADO``````````````````**\n");
for ( new i = 0; i < MAX_PLAYERS; i++ )
{
if ( IsPlayerConnected( i ) )
{
format(string, sizeof(string),"%s.cfg",NomeJ(i)); // Saber onde ir buscar o ficheiro
if ( fexist(string) ) // Saber se existe o ficheiro
{
INI_Open(string);
INI_WriteInt("Admin", Admin[i]); // Para gravar o nivel de admin do ficheiro...
INI_Save();
INI_Close();
SendClientMessage(i,0x00FFFFAA,"Sistema de Admin Desligado!");
Mensagens(i,2); // Mandar mensagem ao jogador
Admin[i] = 0; // Resetar Variavel para evitar bugs...
}
}
}
return 1;
}
//==============================================================================
public
OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
return 1;
}
//==============================================================================
public
OnPlayerConnect(playerid)
{
format(string, sizeof(string),"%s.cfg",NomeJ(playerid)); // Saber onde ir buscar o ficheiro
if ( fexist(string) ) // Saber se existe ficheiro
{
INI_Open((string));
Admin[playerid] = INI_ReadInt("Admin"); // Para ler o nivel de admin do ficheiro...
INI_Close();
Mensagens(playerid,1); // Mensagem ao jogador
}
else
{
INI_Open((string)); // Se nгo existir criar conta...
INI_Close();
SendClientMessage(playerid,0xFF9900AA,"A tua conta de admin foi criada com nivel 0!");
Admin[playerid] = 0; // Resetar Variavel para evitar bugs...
}
return 1;
}
//==============================================================================
public
OnPlayerDisconnect(playerid, reason)
{
format(string, sizeof(string),"%s.cfg",NomeJ(playerid)); // Saber onde ir buscar o ficheiro
if ( fexist(string) ) // Saber se existe ficheiro
{
INI_Open(string);
INI_WriteInt("Admin", Admin[playerid]); // Para gravar o nivel de admin do ficheiro...
INI_Save();
INI_Close();
}
Admin[playerid] = 0; // Resetar Variavel para evitar bugs...
return 1;
}
//==============================================================================
cmd(setaradmin,playerid,params[])
{
if ( Admin[playerid] == 5 || IsPlayerAdmin(playerid) ) // Aqui podes utilizar como ves o Admin[playerid] para saber se o admin й aquele nivel o 5 ou superior ou se e RCON
{
if ( sscanf(params,"ii",ida,ida2) )
return SendClientMessage(playerid, 0xAA3333AA, "Uso: /setaradmin [ID] [Nivel]"); // Saber se o jogador meteu os parametros certos...
else
{
if ( ida2 != 0 && ida2 < 6 ) // Nivel de Admin Nгo pode ser superior a 5 ou = 0
{
if ( ida2 == 1 )
{
format(string, sizeof(string),"O Admin %s setoute como admin Parabйns agora йs Moderador",NomeJ(playerid));
SendClientMessage(ida, 0xFF9900AA,string);
format(string, sizeof(string),"Setaste %s como Moderador",NomeJ(ida));
SendClientMessage(playerid, 0xFF9900AA,string);
}
else if ( ida2 == 2 )
{
format(string, sizeof(string),"O Admin %s setoute como admin Parabйns agora йs Moderador A",NomeJ(playerid));
SendClientMessage(ida, 0xFF9900AA,string);
format(string, sizeof(string),"Setaste %s como Moderador A",NomeJ(ida));
SendClientMessage(playerid, 0xFF9900AA,string);
}
else if ( ida2 == 3 )
{
format(string, sizeof(string),"O Admin %s setoute como admin Parabйns agora йs Admin Em Treino",NomeJ(playerid));
SendClientMessage(ida, 0xFF9900AA,string);
format(string, sizeof(string),"Setaste %s como Admin Em Treino",NomeJ(ida));
SendClientMessage(playerid, 0xFF9900AA,string);
}
else if ( ida2 == 4 )
{
format(string, sizeof(string),"O Admin %s setoute como admin Parabйns agora йs Admin",NomeJ(playerid));
SendClientMessage(ida, 0xFF9900AA,string);
format(string, sizeof(string),"Setaste %s como Admin",NomeJ(ida));
SendClientMessage(playerid, 0xFF9900AA,string);
}
else if ( ida2 == 5 )
{
format(string, sizeof(string),"O Admin %s setoute como admin Parabйns agora йs Dono/Scripter",NomeJ(playerid));
SendClientMessage(ida, 0xFF9900AA,string);
format(string, sizeof(string),"Setaste %s como Dono/Scripter",NomeJ(ida));
SendClientMessage(playerid, 0xFF9900AA,string);
}
Admin[ida] = ida2;
}
else
return SendClientMessage(playerid, 0xFF9900AA, "Nivel de Admin Errado Consulta a lista /niveisadmin");
}
}
else
return SendClientMessage(playerid, 0xFF9900AA,"Nгo Tens Autorizaзгo para usar este comando!");
return 1;
}
//==========================================================================
cmd(niveisadmin,playerid,params[])
{
SendClientMessage(playerid,0x6699FFAA,"Nivel Admin 1: Moderador");
SendClientMessage(playerid,0x6699FFAA,"Nivel Admin 2: Moderador A");
SendClientMessage(playerid,0x6699FFAA,"Nivel Admin 3: Admin Em Treino");
SendClientMessage(playerid,0x6699FFAA,"Nivel Admin 4: Admin");
SendClientMessage(playerid,0x6699FFAA,"Nivel Admin 5: Dono/Scripter");
return 1;
}
//==========================================================================
cmd(criarcarro,playerid,params[])// Comando de teste...
{
if ( Admin[playerid] >= 1 ) // Saber se o jogador e nivel 1 = Moderador ou maior..
{
if ( strlen(params) == 0 )
return SendClientMessage(playerid, 0xAA3333AA, "Uso: /criarcarro [Nome/ID]");
if ( !IsNumeric(params) )
ida2 = GetVehicleModelIDFromName(params);
else
ida2 = strval(params);
if ( ida2 < 400 || ida2 > 603 )
return SendClientMessage(playerid ,0xAA3333AA,"Modelo Invalido");
CreatePlayerVehicle(playerid, ida2);
}
else
return SendClientMessage(playerid, 0xFF9900AA,"Nгo Tens Autorizaзгo para usar este comando!");
return 1;
}
//==============================================================================
stock
NomeJ(playerid)
{
GetPlayerName(playerid, nome, MAX_PLAYER_NAME);
return nome;
}
//==============================================================================
stock
sscanf(stringf2[], format[], {Float,_}:...)
{
#if defined isnull
if (isnull(stringf2))
#else
if (stringf2[0] == 0 || (stringf2[0] == 1 && stringf2[1] == 0))
#endif
{
return format[0];
}
#pragma tabsize 4
new
formatPos = 0,
stringf2Pos = 0,
paramPos = 2,
paramCount = numargs(),
delim = ' ';
while (stringf2[stringf2Pos] && stringf2[stringf2Pos] <= ' ')
{
stringf2Pos++;
}
while (paramPos < paramCount && stringf2[stringf2Pos])
{
switch (format[formatPos++])
{
case '\0':
{
return 0;
}
case 'i', 'd':
{
new
neg = 1,
num = 0,
ch = stringf2[stringf2Pos];
if (ch == '-')
{
neg = -1;
ch = stringf2[++stringf2Pos];
}
do
{
stringf2Pos++;
if ('0' <= ch <= '9')
{
num = (num * 10) + (ch - '0');
}
else
{
return -1;
}
}
while ((ch = stringf2[stringf2Pos]) > ' ' && ch != delim);
setarg(paramPos, 0, num * neg);
}
case 'h', 'x':
{
new
num = 0,
ch = stringf2[stringf2Pos];
do
{
stringf2Pos++;
switch (ch)
{
case 'x', 'X':
{
num = 0;
continue;
}
case '0' .. '9':
{
num = (num << 4) | (ch - '0');
}
case 'a' .. 'f':
{
num = (num << 4) | (ch - ('a' - 10));
}
case 'A' .. 'F':
{
num = (num << 4) | (ch - ('A' - 10));
}
default:
{
return -1;
}
}
}
while ((ch = stringf2[stringf2Pos]) > ' ' && ch != delim);
setarg(paramPos, 0, num);
}
case 'c':
{
setarg(paramPos, 0, stringf2[stringf2Pos++]);
}
case 'f':
{
setarg(paramPos, 0, _:floatstr(stringf2[stringf2Pos]));
}
case 'p':
{
delim = format[formatPos++];
continue;
}
case '\'':
{
new
end = formatPos - 1,
ch;
while ((ch = format[++end]) && ch != '\'') {}
if (!ch)
{
return -1;
}
format[end] = '\0';
if ((ch = strfind(stringf2, format[formatPos], false, stringf2Pos)) == -1)
{
if (format[end + 1])
{
return -1;
}
return 0;
}
format[end] = '\'';
stringf2Pos = ch + (end - formatPos);
formatPos = end + 1;
}
case 'u':
{
new
end = stringf2Pos - 1,
id = 0,
bool:num = true,
ch;
while ((ch = stringf2[++end]) && ch != delim)
{
if (num)
{
if ('0' <= ch <= '9')
{
id = (id * 10) + (ch - '0');
}
else
{
num = false;
}
}
}
if (num && IsPlayerConnected(id))
{
setarg(paramPos, 0, id);
}
else
{
#if !defined foreach
#define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
#define __SSCANF_FOREACH__
#endif
stringf2[end] = '\0';
num = false;
new
name[MAX_PLAYER_NAME];
id = end - stringf2Pos;
foreach (Player, playerid)
{
GetPlayerName(playerid, name, sizeof (name));
if (!strcmp(name, stringf2[stringf2Pos], true, id))
{
setarg(paramPos, 0, playerid);
num = true;
break;
}
}
if (!num)
{
setarg(paramPos, 0, INVALID_PLAYER_ID);
}
stringf2[end] = ch;
#if defined __SSCANF_FOREACH__
#undef foreach
#undef __SSCANF_FOREACH__
#endif
}
stringf2Pos = end;
}
case 's', 'z':
{
new
i = 0,
ch;
if (format[formatPos])
{
while ((ch = stringf2[stringf2Pos++]) && ch != delim)
{
setarg(paramPos, i++, ch);
}
if (!i)
{
return -1;
}
}
else
{
while ((ch = stringf2[stringf2Pos++]))
{
setarg(paramPos, i++, ch);
}
}
stringf2Pos--;
setarg(paramPos, i, '\0');
}
default:
{
continue;
}
}
while (stringf2[stringf2Pos] && stringf2[stringf2Pos] != delim && stringf2[stringf2Pos] > ' ')
{
stringf2Pos++;
}
while (stringf2[stringf2Pos] && (stringf2[stringf2Pos] == delim || stringf2[stringf2Pos] <= ' '))
{
stringf2Pos++;
}
paramPos++;
}
do
{
if ((delim = format[formatPos++]) > ' ')
{
if (delim == '\'')
{
while ((delim = format[formatPos++]) && delim != '\'') {}
}
else if (delim != 'z')
{
return delim;
}
}
}
while (delim > ' ');
return 0;
}
//==============================================================================
stock
CreatePlayerVehicle(playerid, modelid)
{
if ( GetPlayerState(playerid) == PLAYER_STATE_DRIVER )
{
vehicle = GetPlayerVehicleID(playerid);
GetVehiclePos(vehicle, pos[0], pos[1], pos[2]);
GetVehicleZAngle(vehicle, pos[3]);
DestroyVehicle(vehicle);
}
else
{
GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
GetPlayerFacingAngle(playerid, pos[3]);
}
vehicle = AddStaticVehicle( modelid, pos[0], pos[1], (pos[2] + 1),pos[3],-1,-1);
LinkVehicleToInterior(vehicle, GetPlayerInterior(playerid));
SetVehicleVirtualWorld(vehicle, GetPlayerVirtualWorld(playerid));
PlayerPlaySound(playerid,1133,0,0,0);
return 1;
}
//==============================================================================
IsNumeric(const stringf2f[])
{
for ( new g = 0, kho = strlen(stringf2f); g < kho; g++ )
if ( stringf2f[g] > '9' || stringf2f[g] < '0' ) return 0;
return 1;
}
//==============================================================================
GetVehicleModelIDFromName(vname[])
{
for ( new i = 0; i < 211; i++ )
{
if ( strfind(VehicleNames[i], vname, true) != -1 )
return i + 400;
}
return -1;
}
//==============================================================================
Mensagens(playerid,modo)
{
if ( modo == 1 )
{
if ( Admin[playerid] == 0 )
format(string, sizeof(string),"Que pena ainda nгo es admin nem moderador...");
else if ( Admin[playerid] == 1 )
format(string, sizeof(string),"Foste autenticado com o nivel de admin: Moderador");
else if ( Admin[playerid] == 2 )
format(string, sizeof(string),"Foste autenticado com o nivel de admin: Moderador A");
else if ( Admin[playerid] == 3 )
format(string, sizeof(string),"Foste autenticado com o nivel de admin: Admin em treino");
else if ( Admin[playerid] == 4 )
format(string, sizeof(string),"Foste autenticado com o nivel de admin: Admin");
else if ( Admin[playerid] == 5 )
format(string, sizeof(string),"Foste autenticado com o nivel de admin: Dono/Scripter");
SendClientMessage(playerid,0x24FF0AB9,string);
}
if ( modo == 2 )
{
if ( Admin[playerid] == 0 )
format(string, sizeof(string),"Que pena ainda nгo es admin nem moderador...");
else if ( Admin[playerid] == 1 )
format(string, sizeof(string),"Foste guardado com o nivel de admin: Moderador");
else if ( Admin[playerid] == 2 )
format(string, sizeof(string),"Foste guardado com o nivel de admin: Moderador A");
else if ( Admin[playerid] == 3 )
format(string, sizeof(string),"Foste guardado com o nivel de admin: Admin em treino");
else if ( Admin[playerid] == 4 )
format(string, sizeof(string),"Foste guardado com o nivel de admin: Admin");
else if ( Admin[playerid] == 5 )
format(string, sizeof(string),"Foste guardado com o nivel de admin: Dono/Scripter");
SendClientMessage(playerid,0x24FF0AB9,string);
}
}
//========================================================================= FIM