SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Português/Portuguese > Lançamentos/Releases

Reply
 
Thread Tools Display Modes
Old 21/08/2013, 07:05 PM   #1
xxRaioxx
Huge Clucker
 
xxRaioxx's Avatar
 
Join Date: Jun 2013
Location: Brazil, Minas Gerais, Varginha
Posts: 284
Reputation: 5
Default Sistema de admin

Olá,estou criando este tutorial para alguns que ainda não tem o sistema de administração, os comandos vão estar em zCMD!

Bom vamos lá!

1. Coloque estas include no começo do GameMode , serão necessárias:
Code:
#include <zcmd>
#include <sscanf>
#include <DOF2>

1,1 . Coloque estas defines no inicio do GameMode:
Code:
#define Moderador 1
#define Guardiao  2
#define Admin   3
#define SubDono     4
#define Dono      5

2. Coloque isto no começo do GameMode:
Code:
enum PlayerAdmin
{
	Level
}
new pAdmin[MAX_PLAYERS][PlayerAdmin];

Explicação
Code:
enum PlayerAdmin // Isto o ( enum ) é chamado Enumeradores, serve pra armazenar valores, como o LEVEL que armazena o level do admin.
{
	Level
}
new pAdmin[MAX_PLAYERS][PlayerAdmin]; // Isso ( new ) é uma Variável , é usada para utilizar o Enumerador PlayerAdmin .

3. Coloque isso em OnGamemodeExit ou se for FS (OnFilterScriptExit) .
Code:
DOF2_Exit();

Explicação

Code:
DOF2_Exit(); // Isso é pra quando o samp-server.exe fechar,a include também,e também  nunca se esqueça de colocar isso! Pode dar alguns warnings ou não funcionar a include direito!

4. Agora vamos criar os comandos, como disse no início, vamos usar zCMD, então no final do GameMode coloque isso:
Code:
CMD:daradmin(playerid, params[])
{
    new id, level, string[256], string2[256], ganhou[MAX_PLAYER_NAME], deu[MAX_PLAYER_NAME];
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xAD0000AA, "{00E5FF}Você não está autorizado.");
    if(sscanf(params, "ud", id, level)) return SendClientMessage(playerid, 0xAD0000AA, "Use /daradmin [ID] [LEVEL]");
    if (level < 0 || level > 5) return SendClientMessage(playerid, 0xFF0000FF, "Level inválido. Use de 1 á 5 .");
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xAD0000AA, "Este jogador não está online.");
    GetPlayerName(id, ganhou, sizeof(ganhou));
    GetPlayerName(playerid, deu, sizeof(deu));
    format(string, sizeof(string), "Você deu admin level %s para o %s", GetLevelAdmin(level), ganhou);
    SendClientMessage(playerid, 0x00F6F6AA, string);
    format(string2, sizeof(string2), "O admin %s deu admin level %s para você.", deu , GetLevelAdmin(level));
    SendClientMessage(id, VERDE, string2);
    pAdmin[id][Level] =  level;
    return 1;
}

Explicação
Code:
CMD:daradmin(playerid, params[])
{
    new id, level, string[256], string2[256], ganhou[MAX_PLAYER_NAME], deu[MAX_PLAYER_NAME]; // Variáveis que vamos usar no comando . 
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xAD0000AA, "{00E5FF}Você não está autorizado."); // Verifica se está na logado na rcon, se não, vai manda a mensagem "Você não está autorizado." .
    if(sscanf(params, "ud", id, level)) return SendClientMessage(playerid, 0xAD0000AA, "Use /daradmin [ID] [LEVEL]"); // Estamos usando o sscanf, este comando do sscanf server para usar um parâmetro.
    if (level < 1 || level > 5) return SendClientMessage(playerid, 0xFF0000FF, "Level inválido. Use de 1 á 5 ."); // Isso verifica se você digitou o level na forma correta, se não manda a mensagem "Level inválido. Use de 1 á 5 ."
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xAD0000AA, "Este jogador não está online."); // Verifica se o id está online, se não, envia a mensagem "Este jogador não está online."
    GetPlayerName(id, ganhou, sizeof(ganhou)); // Isso serve para pegar o nome do player.
    GetPlayerName(playerid, deu, sizeof(deu));  // Isso serve para pegar o nome do player.
    format(string, sizeof(string), "Você deu admin level %s para o %s", GetLevelAdmin(level), ganhou); // Formata a mensagem para ser enviada .
    SendClientMessage(playerid, 0x00F6F6AA, string); //Envia a mensagem formatada a cima .
    format(string2, sizeof(string2), "O admin %s deu admin level %s para você.", deu , GetLevelAdmin(level)); // Formata a mensagem para ser enviada .
    SendClientMessage(id, VERDE, string2); //Envia a mensagem a cima.
    pAdmin[id][Level] =  level; //Muda o level do player para o conforme digitado.
    return 1;
}

5. Agora vamos criar o sistema de salvamento, em DOF2 .
Em OnPlayerDisconnect coloque isso:
Code:
new arquiva[34], playernome[MAX_PLAYER_NAME];
	GetPlayerName(playerid, playernome, sizeof(playernome));
	format(arquiva, sizeof(arquiva), "Admins/%s", playernome);
	if(DOF2_FileExists(arquiva))
	{
	    DOF2_SetInt(arquiva, "Level", pAdmin[playerid][Level]);
	    DOF2_SaveFile();
	}
	else
    {
        DOF2_CreateFile(arquiva);
        DOF2_SetInt(arquiva, "Level", pAdmin[playerid][Level]);
        DOF2_SaveFile();
	}

Agora em OnPlayerConnect:
Code:
    new arquivi[34], nomeplayer[MAX_PLAYER_NAME];
    GetPlayerName(playerid, nomeplayer, sizeof(nomeplayer));
    format(arquivi, sizeof(arquivi), "Admins/%s", nomeplayer);
    pAdmin[playerid][Level] = DOF2_GetInt(arquivi, "Level");

Explicação
Code:
new arquiva[34], playernome[MAX_PLAYER_NAME]; //Variáveis que vamos usar .
	GetPlayerName(playerid, playernome, sizeof(playernome)); //Geta o nome do player .
	format(arquiva, sizeof(arquiva), "Admins/%s", playernome); Formata o local da pasta que vai salvar as contas dos admins .
	if(DOF2_FileExists(arquiva)) //Se existir
	{
	    DOF2_SetInt(arquiva, "Level", pAdmin[playerid][Level]); //Criamos o valor de Level na Enum PlayerAdmin,e se a conta existir,atualiza o valor no aquivo da pasta Admin .
	    DOF2_SaveFile(); //Salva o arquivo .
	}
	else //Se a conta não existir
    {
        DOF2_CreateFile(arquiva); //Cria o arquivo
        DOF2_SetInt(arquiva, "Level", pAdmin[playerid][Level]); //Criamos o valor de Level na Enum PlayerAdmin,e se a conta existir,atualiza o valor no aquivo da pasta Admin .
        DOF2_SaveFile(); //Salva o arquivo .
	}

Code:
    new arquivi[34], nomeplayer[MAX_PLAYER_NAME]; //Variáveis que iremos usar .
    GetPlayerName(playerid, nomeplayer, sizeof(nomeplayer)); Geta o nome do player
    format(arquivi, sizeof(arquivi), "Admins/%s", nomeplayer); //Formata o local da pasta que vai salvar as contas dos admins .
    pAdmin[playerid][Level] = DOF2_GetInt(arquivi, "Level"); //Isso vai carregar o valor Level na pasta Admins,no arquivo da conta do admin .

6. Teremos que criar uma stock para verificar o level que você digitou no comando /daradmin . No final do GameMode coloque isso:
Code:
stock GetLevelAdmin(levelid)
{
	new str[50];
	if(levelid == 1)
	{
	    str = "1";
	}
	else if (levelid == 2)
	{
	    str = "2";
	}
	else if (levelid == 3)
	{
		str = "3";
	}
	else if (levelid == 4)
	{
	    str = "4";
	}
	else if (levelid == 5)
	{
		str = "5";
	}
	return str;
}

Explicação
Code:
stock GetLevelAdmin(levelid)
{
	new str[50]; Variável para enviar os levels abaixo.
	if(levelid == 1) //Verifica se o level é 1 .
	{
	    str = "1"; //Vai mostrar a frase "O admin Nome deu admin level 1 para você."
	}
	else if (levelid == 2) //Verifica se o level é 2 .
	{
	    str = "2"; //Vai mostrar a frase "O admin Nome deu admin level 2 para você."
	}
	else if (levelid == 3) //Verifica se o level é 3 .
	{
		str = "3"; //Vai mostrar a frase "O admin Nome deu admin level 3 para você."
	}
	else if (levelid == 4) //Verifica se o level é 4 .
	{
	    str = "4"; //Vai mostrar a frase "O admin Nome deu admin level 4 para você."
	}
	else if (levelid == 5) //Verifica se o level é 5 .
	{
		str = "5"; //Vai mostrar a frase "O admin Nome deu admin level 5 para você."
	}
	return str;
}

7. Ops,esqueci de colocar o comando /tiraradmin , então vamos colocar em baixo do /daradmin
Code:
CMD:tiraradmin(playerid, params[])
{
	new id, player[MAX_PLAYER_NAME], tirou[MAX_PLAYER_NAME], string[256], string2[256];
	if (pAdmin[playerid][Level] != 5) return SendClientMessage(playerid, 0xAD0000AA, "Você não está autorizado.");
	if (sscanf(params, "u", id)) return SendClientMessage(playerid, 0xAD0000AA, "Use /tiraradmin [ID] ");
	if (pAdmin[id][Level] < 1) return SendClientMessage(playerid, VERMELHO, "Este player não é admin ! ");
	GetPlayerName(id, player, sizeof(player));
    GetPlayerName(playerid, tirou, sizeof(tirou));
    format(string, sizeof(string), "Você tirou o admin do %s", player);
    SendClientMessage(playerid, 0x00F6F6AA, string);
    format(string2, sizeof(string2), "O admin %s tirou seu admin.", tirou);
    SendClientMessage(id, VERDE, string2);
    pAdmin[playerid][Level] = 0;
    return 1;
 }

Explicação

Code:
CMD:tiraradmin(playerid, params[])
{
	new id, player[MAX_PLAYER_NAME], tirou[MAX_PLAYER_NAME], string[256], string2[256]; //Variáveis que iremos usar no comando .
	if (pAdmin[playerid][Level] != 5) return SendClientMessage(playerid, 0xAD0000AA, "Você não está autorizado."); // Verifica se é admin level 5, se não, vai manda a mensagem "Você não está autorizado." .
	if (sscanf(params, "u", id)) return SendClientMessage(playerid, 0xAD0000AA, "Use /tiraradmin [ID] "); // Estamos usando o sscanf, este comando do sscanf server para usar um parâmetro. 
	if (pAdmin[id][Level] < 1) return SendClientMessage(playerid, VERMELHO, "Este player não é admin ! "); //Verifica se o player digitado no /tiraradmin é admin ou não .
	GetPlayerName(id, player, sizeof(player)); //Geta o nome do player .
    GetPlayerName(playerid, tirou, sizeof(tirou));//Geta o nome do player .
    format(string, sizeof(string), "Você tirou o admin do %s", player); //Formata a mensagem que será enviada .
    SendClientMessage(playerid, 0x00F6F6AA, string); //Envia a mensagem a cima .
    format(string2, sizeof(string2), "O admin %s tirou seu admin.", tirou); //Formata a mensagem que será enviada .
    SendClientMessage(id, VERDE, string2); //Envia a mensagem acima .
    pAdmin[playerid][Level] = 0; Muda o valor Level do player para 0 .
    return 1;
 }

8. Agora un comando que só o player admin possa usar:
Code:
CMD:trazer(playerid, params[])
{
	if(pAdmin[playerid][Level] < 1) return SendClientMessage(playerid, VERMELHO,"Você não está autorizado.");
	new id, Float: x, Float: y, Float: z, string[256], string2[256], namep[MAX_PLAYER_NAME], namead[MAX_PLAYER_NAME];
    if(sscanf(params, "u", id)) return SendClientMessage(playerid, VERMELHO,"Use /trazer [ID]");
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid, VERMELHO,"Este jogador não está online.");
	GetPlayerName(playerid, namead, sizeof(namead));
	GetPlayerName(id, namep, sizeof(namep));
	format(string, sizeof(string), "Trouxe o player %s até você.", namep);
	format(string2, sizeof(string2), "O Administrador %s  trouxe você até ele.", namead);
	SendClientMessage(playerid, Azul_C, string);
	SendClientMessage(id, VERDE, string2);
	GetPlayerPos(playerid, x, y, z);
	SetPlayerPos(id, x+1, y+1, z);
	return 1;
}

Explicação

Code:
CMD:trazer(playerid, params[])
{
	if(pAdmin[playerid][Level] < 1) return SendClientMessage(playerid, VERMELHO,"Você não está autorizado."); //Verifica se o player é admin se não for, manda a mensagem "Você não está autorizado." .
	new id, Float: x, Float: y, Float: z, string[256], string2[256], namep[MAX_PLAYER_NAME], namead[MAX_PLAYER_NAME]; //Variáveis que iremos usar no comando
    if(sscanf(params, "u", id)) return SendClientMessage(playerid, VERMELHO,"Use /trazer [ID]"); //Estamos usando o sscanf, este comando do sscanf server para usar um parâmetro. 
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid, VERMELHO,"Este jogador não está online."); //Verifica se o player está online , se não envia a mensagem "Este jogador não está online." .
	GetPlayerName(playerid, namead, sizeof(namead)); //Pega o nome do player.
	GetPlayerName(id, namep, sizeof(namep)); //Pega o nome do player .
	format(string, sizeof(string), "Trouxe o player %s até você.", namep); //Formata a mensagem que será enviada .
	format(string2, sizeof(string2), "O Administrador %s  trouxe você até ele.", namead); //Formata a mensagem que será enviada .
	SendClientMessage(playerid, Azul_C, string); //Envia a mensagem a cima.
	SendClientMessage(id, VERDE, string2); //Envia a mensagem acima.
	GetPlayerPos(playerid, x, y, z); //Pega a posição do id digitado no comando .
	SetPlayerPos(id, x+1, y+1, z); //Muda a posição do player para o id digitado no comando .
	return 1;
}

Bem galera é isso,e o meu 3º tutorial, sem plágio,explicado, e espero que gostem !

Créditos:

xxRaioxx ( Eu , criador do tutorial )
Criador do zCMD
Criador do DOF2
Criador do sscanf

__________________

---

Tutoriais


FilterScripts

xxRaioxx is offline   Reply With Quote
Old 21/08/2013, 07:10 PM   #2
Juniiro3
High-roller
 
Join Date: Feb 2013
Location: Campinas, Brasil
Posts: 1,807
Reputation: 140
Default Re: Sistema de admin

Legal, mas acho que já tem algo do tipo no forum ... Só acho.
Juniiro3 is offline   Reply With Quote
Old 21/08/2013, 07:33 PM   #3
WLSF
High-roller
 
Join Date: Aug 2011
Posts: 3,535
Reputation: 764
Default Re: Sistema de admin

Ficou mal explicado em relação a complexidade, sem tirar que já existem sistemas de ADMINS completos por ai, é mais interessante para os novatos que pretendem usar em servidor mesmo baixar e modificar / implementar do que criar um do zero.
WLSF is offline   Reply With Quote
Old 21/08/2013, 07:37 PM   #4
smiiir
High-roller
 
smiiir's Avatar
 
Join Date: Oct 2012
Posts: 1,987
Reputation: 175
Default Re: Sistema de admin

Muito bom, mas aquela stock GetLevelAdmin não é preciso, seria a mesma coisa que

Code:
CMD:daradmin(playerid, params[])
{
    new id, level, string[256], string2[256], ganhou[MAX_PLAYER_NAME], deu[MAX_PLAYER_NAME];
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xAD0000AA, "{00E5FF}Você não está autorizado.");
    if(sscanf(params, "ud", id, level)) return SendClientMessage(playerid, 0xAD0000AA, "Use /daradmin [ID] [LEVEL]");
    if (level < 0 || level > 5) return SendClientMessage(playerid, 0xFF0000FF, "Level inválido. Use de 1 á 5 .");
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xAD0000AA, "Este jogador não está online.");
    GetPlayerName(id, ganhou, sizeof(ganhou));
    GetPlayerName(playerid, deu, sizeof(deu));
    format(string, sizeof(string), "Você deu admin level %d para o %s", level, ganhou);
    SendClientMessage(playerid, 0x00F6F6AA, string);
    format(string2, sizeof(string2), "O admin %s deu admin level %d para você.", deu , level);
    SendClientMessage(id, VERDE, string2);
    pAdmin[id][Level] =  level;
    return 1;
}
smiiir is offline   Reply With Quote
Old 21/08/2013, 07:46 PM   #5
xxRaioxx
Huge Clucker
 
xxRaioxx's Avatar
 
Join Date: Jun 2013
Location: Brazil, Minas Gerais, Varginha
Posts: 284
Reputation: 5
Default Re: Sistema de admin

Obrigado pelos comentários, Willian ,eu sou novato ainda, eu expliquei um pouco do que eu sei ,rs ,mas obrigado a todos mesmo assim.

@iSmirnoff nossa eu nem pensei nisso kkk.
__________________

---

Tutoriais


FilterScripts

xxRaioxx is offline   Reply With Quote
Old 22/08/2013, 11:07 AM   #6
WeslleyScript
Banned
 
Join Date: Jul 2012
Location: Natal/RN
Posts: 697
Reputation: 16
Smile Re: Sistema de admin

@xxRaioxx ficou bom o tutorial mas no proximo tutorial ver se melhorar um pouco na explicação beleza do jeito que o willian é ismirnoff falo.

@Juniiro3 é bom relembrar alguns tutoriais de vez em quando pra quando precisarem não ficar na duvida ai né não ? =)
WeslleyScript is offline   Reply With Quote
Old 22/08/2013, 11:18 AM   #7
mau.tito
High-roller
 
mau.tito's Avatar
 
Join Date: Jan 2012
Location: Curitiba/PR
Posts: 1,944
Reputation: 218
Default Re: Sistema de admin

Fico mal organizado .
__________________
mau.tito is offline   Reply With Quote
Old 13/08/2017, 05:23 PM   #8
fxckshzt
Huge Clucker
 
Join Date: Jul 2017
Location: 127.0.0.1
Posts: 271
Reputation: 11
Default Re: Sistema de admin

Se esqueceu de colocar o formato do arquivo no final da formatação da variável "arquiva".
Assim, do jeito que você deixou, o formato do arquivo o Windows não abre!

Fora isso, ótimo tutorial!


PHP Code:
CallbackOnPlayerConnect OnPlayerDisconnect

format
(arquivasizeof(arquiva), "Admins/%s.ini"playernome); //Formata o local da pasta que vai salvar as contas dos admins . 
__________________
Paz & Amor
fxckshzt is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Pedido] Sistema de ADMIN Chery Português/Portuguese 1 06/08/2013 08:40 AM
[Ajuda] Sistema de Admin YaguinRocha Português/Portuguese 5 18/01/2013 04:04 PM
[FilterScript] Sistema de admin Jeffrey_Hatrix Jeffrey_ Lançamentos/Releases 19 28/03/2012 12:41 AM
Sistema de ADMIN hitachi_uchila Português/Portuguese 2 05/03/2010 03:32 AM


All times are GMT. The time now is 08:16 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.