[Tutorial] Como Criar um GameMode do 0
#1

Bom, Olб Pessoal. Como eu estava sem nada para fazer resolvi criar meu primeiro tutorial, Claramente dedicado aos mais novatos. Este tutorial, irб clarificar como funciona tal funзгo, o que й tal coisa e ensinando a criar comandos.

O seguinte tutorial conta com as seguintes caracterнsticas :

- Sistema de login/registro
- Sistema de Administraзгo
- TextDraw's
- Criando duelos.
- Criando pickup's.


Lembre-se, isto й apenas o ponta pй inicial para sua longa jornada criando o seu gamemode ao seu estilo.



Код:
////////////////////////////////////////////////////////////////////////////////
//
//
//
//            >>>>     Tutorial Criado por leonardo1434
//
//       >>>>     Acesse meu blog para mais informaзхes: http://leonardo1434.blogspot.com.br
//     >>>   Tutorial Sobre Criaзгo de GameModes <<<
//
//
/////////////////////////////////////////////////////////////////////////////////



/*
Formatos da string:

%b	 Numero Bнnario
%c   Caracter
%d   Nъmeros
%f   Floats - Numeros quebrados.
%i	 Inteiros.
%s   Insere uma string, podendo contas numeros,letras,inteiros e etc.
%x   Insere numeros em Hex.
%%   Insere a porcentagem.

Zamaroth Editor 1.0 ( Criador de textdraw's, bem ъtil )

Ao criar um textdraw lembre-se,

Textdraw's para todos >>> [URL="https://sampwiki.blast.hk/wiki/TextDrawCreate"]https://sampwiki.blast.hk/wiki/TextDrawCreate[/URL]

Textdraw bem ъtil para a criaзгode textdraw's visнveis para todos, podendo cria-las para tambйm para cada player, porйm tem necessidade de ser destruнda ao disconnect.

Textdraw's para cada player >>> [URL="https://sampwiki.blast.hk/wiki/CreatePlayerTextDraw"]https://sampwiki.blast.hk/wiki/CreatePlayerTextDraw[/URL]

Bom, estб textdraw й bem ъtil criando uma textdraw para cada player e tambйm sem a necessidade de destruir ao player disconectar.

MAX_PLAYERS  valor 500 slots isso terб um slot para cada jogador, possivelmente ligado , para que vocк saiba os dados para um jogador nгo irб interferir com os dados para um outro jogador. (by Schocc)


*/

// Includes
#include <a_samp>
#include <SII>
#include <zcmd>
#include <sscanf2>

// Definiзхes do id da dialog.
#define DIALOG_REGISTRO 5555
#define DIALOG_LOGAR 6666
#define DIALOG_BOX 7777
#define DIALOG_BAN 8888

// Definiзхes opcionais.
#define chatkill // mostra quem matou e a causa da morte, Caso nгo queira isto, Apenas colocar comentar, ficando assim: //#define chatkill
#define Times // Deixei a opзгo de definir os times ou nгo fica a seu gosto, Caso nгo, modificar para: //#define Times.
//#define comswitch //  Estб opзгo й apenas para mostrar como funciona o switch - Estб comentada pois, Na minha Opniзгo аs vezes utilizando pode occorer uma confunsгo, caso queira. apenas descomentar.
#define semswitch // Estб opзгo й apenas para mostrar como funciona o switch. Caso nгo queira,modificar para: //#define armas
#define armas // Bom, Estб funзгo й para caso queira dar armas para ambos os times, Caso nгo queira,modificar para: //#define armas
#define mensagenss // Irб mostrar as mensagens ao player se desconectar. Caso nгo queira,modificar para: //#define mensagenss
#define status // Irб mostrar o stats de cada jogador em uma textdraw prуpria, Matou & Mortes. Caso nгo queira,modificar para: //#define status
#define pastadesalvamento "Contas3/%s.ini" // modificar a seu gosto, estб й a pasta onde serб salvo as contas.
#define pastadebanimento "Contas3/Banidos%s.ini" // modificar a seu gosto, estб й a pasta onde serб salvo os banidos.
#define skintime0 167 // Time 0, mudar a seu gosto.
#define skintime1 217 // Time 1, mudar a seu gosto.
//#define statsatual // Bom, Estб funзгo irб atualizar o stats mais rбpido, ao invйs de sу atualiza-lo no onplayerdisconnect. Vai atualia-la a todo estante. 

// Nomes do Times.
#define NomeDoTime0 0 // Apenas Modificar б seu gosto.
#define NomeDoTime1 1 // Apenas Modificar б seu gosto.

// Cores.
#define amarelo 0xFFFF00AA // Cor do time 0.
#define azul 0x33CCFFAA // Cor do time 1

// Bom veja aqui, Estamos trabalhando com enum's,Traduзгo de enum й enumerator, Bem semelhante a array "new",Porйm й uma constante.
enum pInfo
{
    pSenha,
    pScore,
    pDinheiro,
    pAdmin,
    pMata,
    pMortes,
    pVip,
    pAvisos,
}
new PlayerInfo[MAX_PLAYERS][pInfo]; // Estб funзгo й basicamente criando um array Para todos os jogadores e ligando com o enum pInfo, Assim podendo ser usado para acessar/inserir dados nas vбriaveis.
// Lembre-se enum's nгo sao vбriaveis,Apenas sгo atribuнdas as vбriaveis.



new bool:tanox1[MAX_PLAYERS]; // Estб var vai setar ele no x1. jogador no x1 ou nгo !
// Pode fazer sem a bool? Sim ! Apenas setar  a var para ambos os playerid !
new x1 = 0; // Estб var irб contar quantos tem no x1.

new times[MAX_PLAYERS]; // Bom, Eu nгo adicionei estб Var ao enum, Poнs muitos novatos poderiam confundir, Estб funзгo й para armazenar os Times.

// TextDraw's
new PlayerText:matou[MAX_PLAYERS]; // Textdraw para cada jogador.
new PlayerText:morreu[MAX_PLAYERS];// Textdraw para cada jogador.
new PlayerText:ping[MAX_PLAYERS];// Textdraw para cada jogador.

// Pickups, Bom iremos criar picukups й muito dнficil ? Nгo.

new pickupvida; // Podemos usar assim, que й apenas um var.
// new tele[50]; ou assim, Tornando-se 50 array's. ex: tele[0],tele[1] e assim pod diante.

//forwards
forward atualizartext(playerid); // forward й uma regra da lнnguagem pawn.(Nunca entendi muito bom porque tem estб regra D:)
forward stats(playerid); // Mesma coisa citada acima.

main() // Isto irб printar no console.
{
	print("\n----------------------------------");
	print(" Qualquer titulo que desejas");
	print("----------------------------------\n");
}


public OnGameModeInit()
{
	// Cordenadas aleбtorias, Modifica-las a seu gosto.
	#if defined Times
	AddPlayerClass(0,1234,1234,25,1234,0,0,0,0,-1,-1); // Classe/time 0, Sempre comeзarб do 0.
    AddPlayerClass(1,1234,1234,25,1234,0,0,0,0,-1,-1); // Classe/time 1 , e assim por diante.
    #endif
    AddPlayerClass(0,1234,1234,25,1234,0,0,0,0,-1,-1); // Caso nгo seja definido os Times, Sempre deixar no mнnimo um addplayerclss, se nгo irб bugar.

    pickupvida = CreatePickup(1240, 2, 1234,1234,2); // aqui, Defindo a pickup vida.
	return 1;
}
public OnGameModeExit()
{
	return 1;
}


public OnPlayerRequestClass(playerid, classid) // Estб funзгo й chamada quando o jogador estб a selecionar os skins.
{
    SetPlayerInterior(playerid,14); // Interior
    SetPlayerPos(playerid,258.4893,-41.4008,1002.0234);// Posiзгo do jogador
    SetPlayerFacingAngle(playerid, 270.0);//Posiзгo do вngulo
    SetPlayerCameraPos(playerid,256.0815,-43.0475,1004.0234);// Posiзгo da camera
    SetPlayerCameraLookAt(playerid,258.4893,-41.4008,1002.0234);// Posiзгo da camera
	#if defined Times
	if(classid == 0) // Classe/time 0
    {
       GameTextForPlayer(playerid,"~y~Classe/Time 0",3000,3); // Isso farб com que a mensagem tenha letras grandes.
    }
    if(classid == 1) // Classe/time 1
    {
       GameTextForPlayer(playerid,"~b~Classe/Time 1",3000,3); // Isso farб com que a mensagem tenha letras grandes.
    }
    #endif
	return 1;
}

public OnPlayerConnect(playerid)
{
    if (fexist(contas(playerid)))//Caso a conta exista mostra isso.
    {
        ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD,"Logar","Digite sua senha abaixo para efetuar login.","Logar","Sair");
    }
    else//Caso nгo exista mostra isso.
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_PASSWORD,"Registraзгo","Digite sua senha abaixo para se registrar","Registrar","Sair");
    }
    #if defined status
    matou[playerid] = CreatePlayerTextDraw(playerid,496.000000, 99.000000, "Matou:"); // Cria a textdraw
	PlayerTextDrawBackgroundColor(playerid,matou[playerid], 255);//Texto de fundo
	PlayerTextDrawFont(playerid,matou[playerid], 1);//Fonte
	PlayerTextDrawLetterSize(playerid,matou[playerid], 0.500000, 1.000000);//Tamanho da letra
	PlayerTextDrawColor(playerid,matou[playerid], 65535); //Cor
	PlayerTextDrawSetOutline(playerid,matou[playerid], 0);//Fora da linha
	PlayerTextDrawSetProportional(playerid,matou[playerid], 1);//Proporзгo
	PlayerTextDrawSetShadow(playerid,matou[playerid], 0);//Escuridгo.

	morreu[playerid] = CreatePlayerTextDraw(playerid,496.000000, 110.000000, "Mortes:");
	PlayerTextDrawBackgroundColor(playerid,morreu[playerid], 255);
	PlayerTextDrawFont(playerid,morreu[playerid], 1);
	PlayerTextDrawLetterSize(playerid,morreu[playerid], 0.500000, 1.000000);
	PlayerTextDrawColor(playerid,morreu[playerid], 65535);
	PlayerTextDrawSetOutline(playerid,morreu[playerid], 0);
	PlayerTextDrawSetProportional(playerid,morreu[playerid], 1);
	PlayerTextDrawSetShadow(playerid,matou[playerid], 0);

    ping[playerid] = CreatePlayerTextDraw(playerid,5.000000, 432.000000, "Ping:");
	PlayerTextDrawBackgroundColor(playerid,ping[playerid], 255);
	PlayerTextDrawFont(playerid,ping[playerid], 1);
	PlayerTextDrawLetterSize(playerid,ping[playerid], 0.500000, 1.000000);
	PlayerTextDrawColor(playerid,ping[playerid],  -65281);
	PlayerTextDrawSetOutline(playerid,ping[playerid], 0);
	PlayerTextDrawSetProportional(playerid,ping[playerid], 1);
	PlayerTextDrawSetShadow(playerid,ping[playerid], 0);

	new tempo[MAX_PLAYERS]; // Criando uma var para todos os players.
	tempo[playerid] = SetTimer("atualizartext",1000,true); // Usando a var para criar um timer para cada player, Assim a cada 1 segundo serб atualizado.
	#endif

	//Bom Aqui comeзar o Sistema de Banimento, Fiz o MБXIMO que pude para deixa bem direto & claro !
    new nome[MAX_PLAYER_NAME],Ip[30],lol[128],Hora, Minuto, Segundo, Dia, Mes, Ano,arquivo[128],administrador[24], motivoban[128];
    GetPlayerName(playerid, nome, sizeof(nome));//formata o nome
 	GetPlayerIp(playerid, Ip, sizeof(Ip));//formata o ip.
 	format(arquivo, sizeof(arquivo), pastadebanimento, nome);//formata a pasta com o nome
	if(fexist(arquivo))//abre a pasta, checa se o nome do player estб banido.
	{//vai ler tudo isso.
		if(INI_Open(arquivo))//Abre o arquivo.
		{
		  INI_ReadString(administrador, "Admin");// Lendo a string...
		  INI_ReadString(motivoban, "MotivoBan");// Lendo a string...
		  Dia = INI_ReadInt("Dia");// Lendo as numeros.
		  Mes = INI_ReadInt("Mes");// Lendo as numeros.
		  Ano = INI_ReadInt("Ano");// Lendo as numeros.
		  Hora = INI_ReadInt("Hora");// Lendo as numeros
		  Minuto = INI_ReadInt("Minuto");// Lendo a string...
		  Segundo = INI_ReadInt("Segundo");// Lendo as numeros  // Aqui embaixo, Formatando a string.
          format(lol, sizeof(lol), "[SERVER] Seu nick estб banido.\n\
		                            [SERVER]: Admin: %s | Data: %d/%d/%d | Hora: %d:%d:%d | Motivo: %s ]", administrador, Dia, Mes, Ano, Hora, Minuto, Segundo, motivoban);
          ShowPlayerDialog( playerid, DIALOG_BAN, DIALOG_STYLE_MSGBOX, "Vocк estб banido !", lol, "Ok...", "");//mostrando a dialog para o player
		  INI_Close();//fecha poнs estava lendo e nгo inserindo.
		}
		Kick(playerid);//kicka o playerid banido.
 	}
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    if(INI_Open(contas(playerid))) // Funзгo que abre a stock contas, estб localizada ao fim do gm.
	{
	  INI_WriteInt("Admin",PlayerInfo[playerid][pAdmin]); // Estб inserindo as informaзхes do jogador.
	  INI_WriteInt("Vip",PlayerInfo[playerid][pVip]); // Estб inserindo as informaзхes do jogador.
      INI_WriteInt("Score",PlayerInfo[playerid][pScore]); // Estб inserindo as informaзхes do jogador.
      INI_WriteInt("Mata",PlayerInfo[playerid][pMata]); // Estб inserindo as informaзхes do jogador.
      INI_WriteInt("Mortes",PlayerInfo[playerid][pMortes]); // Estб inserindo as informaзхes do jogador.
      INI_WriteInt("Avisos",PlayerInfo[playerid][pAvisos]); // Estб inserindo as informaзхes do jogador.
      INI_WriteInt("Dinheiro",GetPlayerMoney(playerid)); // Estб inserindo as informaзхes do jogador.


      INI_Save(); // Salvando as informaзхes do jogador
      INI_Close(); // Fechando as informaзхes do jogador
    }
	#if defined mensagenss
    new mensagens[70],nome[MAX_PLAYER_NAME];
    GetPlayerName(playerid, nome, sizeof(nome));
    switch(reason) // Como o swicth foi jб explicado, й apenas uma transiзгo entre definiзхes.
    {
        case 0: format(mensagens, sizeof(mensagens), "%s Saiu do servidor. (Problema de Conexгo)", nome);
        case 1: format(mensagens, sizeof(mensagens), "%s Saiu do servidor. (Saindo/Saiu)", nome);
        case 2: format(mensagens, sizeof(mensagens), "%s Saiu do servidor. (Kickado / Banido)", nome);
    }
    #endif
    return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case DIALOG_REGISTRO:
        {
            if (!response) return Kick(playerid); // Caso ele clice em Sair.
            if (response)
            {
                if(!strlen(inputtext)) {//Caso ele nгo tenha digitado nada. mostra а dialog
                ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_PASSWORD, "Registrando...","Vocк digitou uma senha invбlida, Por Favor digitar а senha !","Registro","Sair");
                }

                if(INI_Open(contas(playerid))) {
                INI_WriteString("Senha",inputtext); // Pegando o que player digitou na dialog.
                INI_WriteInt("Admin",0); // Inserindo as informaзхes iniciais
                INI_WriteInt("Vip",0);// Inserindo as informaзхes iniciais
                INI_WriteInt("Score",0);// Inserindo as informaзхes iniciais
                INI_WriteInt("Mata",0);// Inserindo as informaзхes iniciais
                INI_WriteInt("Mortes",0);// Inserindo as informaзхes iniciais
                INI_WriteInt("Avisos",0);// Inserindo as informaзхes iniciais
                INI_WriteInt("Dinheiro",0);// Inserindo as informaзхes iniciais

                INI_Save();//Salvando
                INI_Close();//Fechando
				// Ao se registrar vai mostrar estб dialog.
                ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD,"Logando...","Digitar sua senha abaixo para efetuar login.","Logar","Sair");
            }
        }
    }
        case DIALOG_LOGAR:
        {
            if (!response) return Kick (playerid); // Caso ele clice em Sair.
            if(response)
            {
                if(!strlen(inputtext)) {//Caso ele nгo tenha digitado nada
                ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logando...","Vocк digitou uma senha invбlida, Por Favor digitar а senha !","Logar","Sair");
                }

                if(INI_Open(contas(playerid))) {//Abrindo a pasta contas.
                INI_ReadString(PlayerInfo[playerid][pSenha],"Senha",30);// Lendo a senha que foi salva ao se registrar

                if(strcmp(inputtext,PlayerInfo[playerid][pSenha],false))//Caso erre a senha serб mostrada estб dialog.
				{
                  ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logando...","Vocк digitou uma senha invбlida, Por Favor digitar а senha !","Logar","Sair");
                }
                else
				{
                  ResetPlayerMoney(playerid); // Reseta o dinheiro
                  PlayerInfo[playerid][pAdmin] = INI_ReadInt("Admin"); //Lendo o que foi inserido..
                  PlayerInfo[playerid][pVip] = INI_ReadInt("Vip");//Lendo o que foi inserido..
                  SetPlayerScore(playerid,INI_ReadInt("Score"));//Lendo o que foi inserido..
                  PlayerInfo[playerid][pMata] = INI_ReadInt("Mata");//Lendo o que foi inserido..
                  PlayerInfo[playerid][pMortes] = INI_ReadInt("Mortes");//Lendo o que foi inserido..
                  PlayerInfo[playerid][pAvisos] = INI_ReadInt("Avisos");//Lendo o que foi inserido..
                  GivePlayerMoney(playerid,INI_ReadInt( "Dinheiro"));//Lendo o que foi inserido..
                }

                INI_Close(); // Fecha, nгo precisa salvar, poнs apenas estб carregando o stats do jogador, e nгo adicionando/editando.
                }
            }
        }
    }
    return 1;
}
public OnPlayerDeath(playerid, killerid, reason) // Ao jogador morre, estб public й chamada.
{
	#if defined chatkill
    SendDeathMessage(killerid, playerid, reason); // mostra quem matou e a causa da morte.

    #endif

    if(killerid != INVALID_PLAYER_ID) // Se o id й valido.
    {
        PlayerInfo[killerid][pMata]++; // Ira aumentar os kills ao matar alguйm.
        PlayerInfo[killerid][pScore]++; // Ira aumentar o Score ao matar alguйm
        SetPlayerScore(killerid, PlayerInfo[killerid][pScore]); // Vai setar o score que foi aumentado.

        GivePlayerMoney(killerid, 100); // Vai Dar o dinheiro a quem matou.
        // PlayerInfo[killerid][pDinheiro] +=100   <<< Poderia ser usado assim tбmbem, porйm necessitбria de uma atualizaзгo constante do stats.
    }
    PlayerInfo[playerid][pMortes]++; // Ira aumentar as mortes ao morrer.

    if(tanox1[playerid] ==  true) // se ta tanox1 й 1 e tambйm й o jogador que matou, irб executar a funзгo abaixo.
    {
       PlayerInfo[killerid][pMata] = false; // setando a var como falsa, assim nгo contando no stats os kills.
       PlayerInfo[killerid][pScore] = false; // setando a var como falsa, assim nгo contando no stats o score.
       PlayerInfo[playerid][pMortes] = false; // setando a var como falsa, assim nгo contando no stats as mortes.
       SpawnPlayer(playerid); // Ao morrer vai dar respawn.
	   SpawnPlayer(killerid);// Ao matarr vai dar respawn.
	   tanox1[playerid] = false;// Setando a bool como false, assim dizendo que nгo estб mais no x1.
       tanox1[killerid] = false; // Setando a bool como false, assim dizendo que nгo estб mais no x1.
	   x1 = 0; // setando a var x1 para 0.
	   GivePlayerMoney(killerid,10000); // Dando dinheiro para o que matou.
	   new string[60],nome[MAX_PLAYER_NAME],nomevitima[MAX_PLAYER_NAME];
	   GetPlayerName(killerid,nome,sizeof(nome)); // formatando o nome de quem matou
	   GetPlayerName(playerid,nomevitima,sizeof(nomevitima)); // formatando o nome de quem morreu
	   format(string, sizeof(string),"%s Matou %s no X1 !",nome, nomevitima);//formatando a string
	   SendClientMessageToAll(-1,string);// enviando para todos a string.
    }
    return 1;
}
public OnPlayerSpawn(playerid)
{
  SetPlayerInterior(playerid,0);
  #if defined comswitch
  switch(times[playerid]) // O que й um switch ? й basicamente uma transaзгo entre definiзхes.
  {
    case 0: // Classe/Time 0
    {
      SetPlayerPos(playerid,1234,1234,10); // Aqui й para onde o time 0 serб teleportado, ao dar spawn.
      #if defined armas
      GivePlayerWeapon(playerid,4,1); // Estб funзгo irб dar um knife para todos os jogadores do time 0.
      GivePlayerWeapon(playerid,24,1000); // Estб funзгo ira dar uma desert eagle para todos os jogadores do time 0 com 1000 balas.
      GivePlayerWeapon(playerid,26,1000); // Estб funзгo ira dar uma sawn off para todos os jogadores do time 1 com 1000 balas.
      #endif
      SetPlayerSkin(playerid,skintime0);
      SetPlayerColor(playerid,amarelo); // Vai definir a cor do time 0 para amarelo.
      SendClientMessage(playerid,amarelo,"Vocк й do time 0!"); // Esta mensagem serб enviada a todos que derem Spawn e somente se, Forйm do time 0.
    }
    case 1: // Classe/Time 1
    {
      SetPlayerPos(playerid,1234,1234,10); // Aqui й para onde o time 1 serб teleportado, ao dar spawn.
      #if defined armas
      GivePlayerWeapon(playerid,4,1); // Estб funзгo irб dar um knife para todos os jogadores do time 1.
      GivePlayerWeapon(playerid,24,1000); // Estб funзгo ira dar uma desert eagle para todos os jogadores do time 1 com 1000 balas.
      GivePlayerWeapon(playerid,26,1000); // Estб funзгo ira dar uma sawn off para todos os jogadores do time 1 com 1000 balas.
      #endif
      SetPlayerSkin(playerid,skintime1);// seta a skin do time.
      SetPlayerColor(playerid,azul); // set a cor do time.
      SendClientMessage(playerid,azul,"Vocк й do time 1! "); // Esta mensagem serб enviada a todos que derem Spawn e somente se, Forйm do time 1.
    }
  }
  #endif
  #if defined semswitch
  if(times[playerid] == NomeDoTime0) // classe/Time 0
  {
      SetPlayerPos(playerid,1234,1234,10); // Aqui й para onde o time 0 serб teleportado, ao dar spawn.
	  #if defined armas
      GivePlayerWeapon(playerid,4,1); // Estб funзгo irб dar um knife para todos os jogadores do time 0.
      GivePlayerWeapon(playerid,24,1000); // Estб funзгo ira dar uma desert eagle para todos os jogadores do time 0 com 1000 balas.
      GivePlayerWeapon(playerid,26,1000); // Estб funзгo ira dar uma sawn off para todos os jogadores do time 1 com 1000 balas.
      #endif
      SetPlayerSkin(playerid,skintime0);// seta a skin do time.
      SetPlayerColor(playerid,amarelo); // Vai definir a cor do time 0 para amarelo.
      SendClientMessage(playerid,amarelo,"Vocк й do time 0!"); // Esta mensagem serб enviada a todos que derem Spawn e somente se, Forйm do time 0.

  }
  else if(times[playerid] == NomeDoTime1) // Classe/ Time 0
  {
      SetPlayerPos(playerid,1234,1234,10); // Aqui й para onde o time 1 serб teleportado, ao dar spawn.
      #if defined armas
      GivePlayerWeapon(playerid,4,1); // Estб funзгo irб dar um knife para todos os jogadores do time 1.
      GivePlayerWeapon(playerid,24,1000); // Estб funзгo ira dar uma desert eagle para todos os jogadores do time 1 com 1000 balas.
      GivePlayerWeapon(playerid,26,1000); // Estб funзгo ira dar uma sawn off para todos os jogadores do time 1 com 1000 balas.
      #endif
      SetPlayerSkin(playerid,skintime1);// seta a skin do time.
      SetPlayerColor(playerid,azul); // Vai definir a cor do time 1 para azul
      SendClientMessage(playerid,azul,"Vocк й do time 1! "); // Esta mensagem serб enviada a todos que derem Spawn e somente se, Forйm do time 1.
  }
  #endif
  #if defined status
  PlayerTextDrawShow(playerid, matou[playerid]); // mostrando a textdraw ao dar spawn
  PlayerTextDrawShow(playerid, morreu[playerid]); // mostrando a textdraw ao dar spawn
  PlayerTextDrawShow(playerid, ping[playerid]); // mostrando a textdraw ao dar spawn
  #endif
  #if defined statsatual
  new tempo2[MAX_PLAYERS];
  tempo2[playerid] = SetTimer("stats",5000,true); // Usando a var para criar um timer para cada player, Assim a cada 5 segundo serб atualizado.
  #endif
}

public OnPlayerPickUpPickup(playerid, pickupid) // Bom, ao passa sobre o pickup estб public й chamada.
{
    if(pickupid == pickupvida) // Comparando, compara se o pickup й igual a var que nomeamos no нnicio.
	{
	  new Float:Vida;
	  GetPlayerHealth(playerid,Vida); // Pega a vida que ele estб no momento.
	  SetPlayerHealth(playerid,Vida +20); // E adicionar +20 de vida.
    }
    return 1;
}


// COMANDOS

CMD:daradmin(playerid,params[])
{
   new ID,Level,string[128],nomevitima[MAX_PLAYER_NAME],nome[MAX_PLAYER_NAME];
   if(PlayerInfo[playerid][pAdmin] < 5 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Basicamente diz, Caso o level seja menor que 5 e tambйm nгo sejam um rcon admin, Retornar a mensagem.
   if(sscanf(params,"ui",ID,Level)) return SendClientMessage(playerid,-1,"/daradmin [ID] [LEVEL]!"); // Caso o jogador digite parametros errados, irб aparecer estб mensagem.
   if(PlayerInfo[playerid][pAdmin] < PlayerInfo[playerid][pAdmin]) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Prevenзгo, Caso um admin usar seus poderes em outro admin, й necessбrio que seu level seja maior ou igual ao da vнtima,Caso contrбrio retornarб a mensagem
   if (!IsPlayerConnected(ID)) return SendClientMessage(playerid,-1,"Jogador nгo estб conectado! "); // Checa se a vнtima estб conectada, Caso contrбrio retorna a mensagem
   if ( Level < 0 || Level > 5 )  return SendClientMessage(playerid,-1,"Admin level entre 0 - 5 "); // Compara os leveis, Caso seja menor que 0 ou maior que 5 retorna a mensagem
   PlayerInfo[ID][pAdmin] = Level; // Setando o level da vнtima ao Level escolhido pelo playerid.
   GetPlayerName(playerid,nome,sizeof(nome)); // Formatando o nome do playerid
   GetPlayerName(ID,nomevitima,sizeof(nomevitima)); // Formatando o nome da vнtima
   format(string,sizeof(string),"Administrador:%s setou como admin %s level %d",nome,nomevitima,PlayerInfo[ID][pAdmin]); // Formatando o Texto, e mostrando quem deu,quem recebeu,
   SendClientMessageToAll(-1,string); // Enviando a string.
   return 1;
}
CMD:pspawn(playerid,params[])
{
   new ID,nomevitima[MAX_PLAYER_NAME],nome[MAX_PLAYERS];
   if(PlayerInfo[playerid][pAdmin] < 1 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!");// Basicamente diz, Caso o level seja menor que 5 e tambйm nгo sejam um rcon admin, Retornar a mensagem.
   if(sscanf(params,"u",ID)) return SendClientMessage(playerid,-1,"/pspawn [ID/NOME]");// Caso o jogador digite parametros errados, irб aparecer estб mensagem.
   if(PlayerInfo[playerid][pAdmin] < PlayerInfo[playerid][pAdmin]) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!");// Prevenзгo, Caso um admin usar seus poderes em outro admin, й necessбrio que seu level seja maior ou igual ao da vнtima,Caso contrбrio retornarб a mensagem
   if (!IsPlayerConnected(playerid)) return SendClientMessage(playerid,-1,"Jogador nгo estб conectado! ");// Checa se a vнtima estб conectada, Caso contrбrio retorna a mensagem
   SpawnPlayer(ID);//da spawn na vнtima
   new String[35];
   GetPlayerName(ID,nomevitima,sizeof(nomevitima));//formata o nome
   format( String, sizeof String, "%s deu spawn em %s ",nome,nomevitima);//formata o texto
   SendClientMessage(ID, -1, String );//envia pra todos.
   return 1;
}
CMD:darvip(playerid,params[])
{
   new ID,Level,string[70],nomevitima[MAX_PLAYER_NAME],nome[MAX_PLAYER_NAME];
   if(PlayerInfo[playerid][pAdmin] < 5 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Basicamente diz, Caso o level seja menor que 5 e tambйm nгo sejam um rcon admin, Retornar a mensagem.
   if(sscanf(params,"ui",ID,Level)) return SendClientMessage(playerid,-1,"/darvip [ID] [LEVEL]!"); // Caso o jogador digite parametros errados, irб aparecer estб mensagem.
   if(PlayerInfo[playerid][pAdmin] < PlayerInfo[playerid][pAdmin]) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Prevenзгo, Caso um admin usar seus poderes em outro admin, й necessбrio que seu level seja maior ou igual ao da vнtima,Caso contrбrio retornarб a mensagem
   if (!IsPlayerConnected(ID)) return SendClientMessage(playerid,-1,"Jogador nгo estб conectado! "); // Checa se a vнtima estб conectada, Caso contrбrio retorna a mensagem
   if ( Level < 0 || Level > 3 )  return SendClientMessage(playerid,-1,"Vip level entre 0 - 3 "); // Compara os leveis, Caso seja menor que 0 ou maior que 5 retorna a mensagem
   PlayerInfo[ID][pVip] = Level; // Setando o level da vнtima ao Level escolhido pelo playerid.
   GetPlayerName(playerid,nome,sizeof(nome)); // Formatando o nome do playerid
   GetPlayerName(ID,nomevitima,sizeof(nomevitima)); // Formatando o nome da vнtima
   format(string,sizeof(string),"Administrador:%s setou como Vip %s level %d",nome,nomevitima,PlayerInfo[ID][pVip]); // Formatando o Texto, e mostrando quem deu,quem recebeu.
   SendClientMessageToAll(-1,string); // Enviando a string.
   return 1;
}
CMD:x1(playerid,params[])
{
   new nome[MAX_PLAYERS],string[27];
   if(sscanf(params,"")) return SendClientMessage(playerid,-1,"/x1"); // Caso o jogador digite parametros errados, irб aparecer estб mensagem.
   x1++;
   if(x1 == 2) return SendClientMessage(playerid,-1,"Jб tem 2 no x1."); // Caso tenha 2 pessaos, vai retornar estб mensagem.
   if(tanox1[playerid] == true) return SendClientMessage(playerid,-1,"Vocк jб esta no x1"); // Caso ele jб esteja no x1, assim evitando spam.
   SetPlayerPos(playerid,1234,1234,1234); // Colocar aqui as cordenadas do x1.
   format(string,sizeof(string),"%s Entrou no x1 ! ",nome);//formatando a mensagem
   SendClientMessageToAll(-1,string); //enviando a mensagem para todos.
   tanox1[playerid] = true; //setando a var para o playerid.
   return 1;
}
CMD:sairx1(playerid,params[])
{
   new nome[MAX_PLAYERS],string[37];
   if(sscanf(params,"")) return SendClientMessage(playerid,-1,"/sairx1"); // Caso o jogador digite parametros errados, irб aparecer estб mensagem.
   if(x1 == 2) return SendClientMessage(playerid,-1,"Jб tem 2 no x1."); // Caso tenha 2 pessaos, vai retornar estб mensagem.
   format(string,sizeof(string),"%s Saiu do X1 ! ",nome);//formatando a mensagem
   SendClientMessageToAll(-1,string); //enviando a mensagem para todos.
   tanox1[playerid] = false; //setando a var para o playerid.
   SpawnPlayer(playerid);
   return 1;
}
CMD:avisar(playerid,params[])
{
   new ID,string[128],nomevitima[MAX_PLAYER_NAME],nome[MAX_PLAYER_NAME];
   if(PlayerInfo[playerid][pAdmin] < 3 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Basicamente diz, Caso o level seja menor que 5 e tambйm nгo sejam um rcon admin, Retornar a mensagem.
   if(sscanf(params,"us[128]",ID,string)) return SendClientMessage(playerid,-1,"/avisar [ID] [MOTIVO]!"); // Caso o jogador digite parametros errados, irб aparecer estб mensagem.
   if(PlayerInfo[playerid][pAdmin] < PlayerInfo[playerid][pAdmin]) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Prevenзгo, Caso um admin usar seus poderes em outro admin, й necessбrio que seu level seja maior ou igual ao da vнtima,Caso contrбrio retornarб a mensagem
   if (!IsPlayerConnected(ID)) return SendClientMessage(playerid,-1,"Jogador nгo estб conectado! "); // Checa se a vнtima estб conectada, Caso contrбrio retorna a mensagem
   PlayerInfo[ID][pAvisos]++; // Setando o level da vнtima ao Level escolhido pelo playerid.
   GetPlayerName(playerid,nome,sizeof(nome)); // Formatando o nome do playerid
   GetPlayerName(ID,nomevitima,sizeof(nomevitima)); // Formatando o nome da vнtima
   format(string,sizeof(string),"Administrador:%s Avisou %s Motivo: %s",nome,nomevitima,string); // Formatando o Texto, e mostrando quem deu,quem recebeu.
   SendClientMessageToAll(-1,string); // Enviando a string.
   format(string,sizeof(string),"Agora vocк tem %d avisos ! 3 avisos = KICK !",PlayerInfo[ID][pAvisos]); // Formatando o texto !
   SendClientMessage(playerid,-1,string); // Enviando a string.
   if(PlayerInfo[ID][pAvisos] == 3)
   {
   format(string,sizeof(string),"%s foi kickado por ter 3 avisos",nomevitima);
   SendClientMessageToAll(-1,string);
   PlayerInfo[ID][pAvisos] = 0;
   Kick(ID);
   }
   return 1;
}
CMD:stats(playerid,params[])
{
  new string[70],id,ping2[MAX_PLAYERS],nome[MAX_PLAYERS],score2[MAX_PLAYERS];
  ping2[id] = GetPlayerPing(id); // geta o ping.
  score2[id] = GetPlayerScore(id);//geta o score
  GetPlayerName(id, nome, sizeof(nome));//formata o nome
  format(string, sizeof(string), "Nome: %s\nMata %d - Mortes %d - Score: %d  - Ping: %d", nome,PlayerInfo[id][pMata],PlayerInfo[id][pMortes],score2[id],ping2[id]);//formata o texto
  ShowPlayerDialog(playerid, 4000, DIALOG_STYLE_MSGBOX,"Status",string,"Ok !","");//mostra string em dialog.
  return 1;
}
CMD:setaviso(playerid,params[])
{
   new ID,Aviso,string[128],nomevitima[MAX_PLAYER_NAME],nome[MAX_PLAYER_NAME];
   if(PlayerInfo[playerid][pAdmin] < 5 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Basicamente diz, Caso o level seja menor que 5 e tambйm nгo sejam um rcon admin, Retornar a mensagem.
   if(sscanf(params,"ui",ID,Aviso)) return SendClientMessage(playerid,-1,"/setaviso [ID] [AVISOS]!"); // Caso o jogador digite parametros errados, irб aparecer estб mensagem.
   if(PlayerInfo[playerid][pAdmin] < PlayerInfo[playerid][pAdmin]) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Prevenзгo, Caso um admin usar seus poderes em outro admin, й necessбrio que seu level seja maior ou igual ao da vнtima,Caso contrбrio retornarб a mensagem
   if (!IsPlayerConnected(ID)) return SendClientMessage(playerid,-1,"Jogador nгo estб conectado! "); // Checa se a vнtima estб conectada, Caso contrбrio retorna a mensagem
   if ( Aviso < 0 || Aviso > 2 )  return SendClientMessage(playerid,-1,"Avisos entre 0 - 2"); // Compara os warns, Caso seja menor que 0 ou maior que 2 retorna a mensagem
   PlayerInfo[ID][pAvisos] = Aviso; // Setando os avisos da vнtima aos avisos escolhidos pelo playerid.
   GetPlayerName(playerid,nome,sizeof(nome)); // Formatando o nome do playerid
   GetPlayerName(ID,nomevitima,sizeof(nomevitima)); // Formatando o nome da vнtima
   format(string,sizeof(string),"Administrador:%s setou o numero de avisos de %s para %d",nome,nomevitima,PlayerInfo[ID][pAvisos]); // Formatando o Texto, e mostrando quem deu,quem recebeu.
   SendClientMessageToAll(-1,string); // Enviando a string.
   return 1;
}
CMD:setmata(playerid,params[])
{
   new ID,mata,string[128],nomevitima[MAX_PLAYER_NAME],nome[MAX_PLAYER_NAME];
   if(PlayerInfo[playerid][pAdmin] < 5 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!");
   if(sscanf(params,"ui",ID,mata)) return SendClientMessage(playerid,-1,"/setmata [ID/NOME] [NUMERO DE KILLS]");// Caso o jogador digite parametros errados, irб aparecer estб mensagem.
   if(PlayerInfo[playerid][pAdmin] < PlayerInfo[playerid][pAdmin]) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!");// Prevenзгo, Caso um admin usar seus poderes em outro admin, й necessбrio que seu level seja maior ou igual ao da vнtima,Caso contrбrio retornarб a mensagem
   if (!IsPlayerConnected(ID)) return SendClientMessage(playerid,-1,"Jogador nгo estб conectado! ");// Checa se a vнtima estб conectada, Caso contrбrio retorna a mensagem
   if ( mata < 0 || mata > 9999999 )  return SendClientMessage(playerid,-1,"Matar de  0 - 99999999 ");// Compara os mata, Caso seja menor que 0 ou maior que 9999999 retorna a mensagem
   PlayerInfo[ID][pMata] = mata;// Setando o mata da vнtima ao mata escolhido pelo playerid.
   GetPlayerName(playerid,nome,sizeof(nome));// Formatando o nome do playerid
   GetPlayerName(ID,nomevitima,sizeof(nomevitima));// Formatando o nome da vнtima
   format(string,sizeof(string),"%s setou para %s total de kills %d",nome,nomevitima,PlayerInfo[ID][pMata]);// Formatando o Texto, e mostrando quem deu,quem recebeu.
   SendClientMessageToAll(-1,string);//enviando para todos
   return 1;
}
CMD:setmortes(playerid,params[])
{
   new ID,Mortes,string[70],nomevitima[MAX_PLAYER_NAME],nome[MAX_PLAYER_NAME];
   if(PlayerInfo[playerid][pAdmin] < 5 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!");
   if(sscanf(params,"ui",ID,Mortes)) return SendClientMessage(playerid,-1,"/setmortes [ID/NOME] [NUMERO DE MORTES]!");
   if(PlayerInfo[playerid][pAdmin] < PlayerInfo[playerid][pAdmin]) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!");
   if (!IsPlayerConnected(ID)) return SendClientMessage(playerid,-1,"Jogador nгo estб conectado! ");// Checa se a vнtima estб conectada, Caso contrбrio retorna a mensagem
   if ( Mortes < 0 || Mortes > 9999999 )  return SendClientMessage(playerid,-1,"Mortes 0 - 9999999 ");// Compara os mata, Caso seja menor que 0 ou maior que 9999999 retorna a mensagem
   PlayerInfo[ID][pMortes] = Mortes;// Setando o mortes da vнtima ao mortes escolhido pelo playerid.
   GetPlayerName(playerid,nome,sizeof(nome));// Formatando o nome do playerid
   GetPlayerName(ID,nomevitima,sizeof(nomevitima));// Formatando o nome da vнtima
   format(string,sizeof(string),"%s Setou para %s o total de mortes %d",nome,nomevitima,PlayerInfo[ID][pMortes]); // Formatando o Texto, e mostrando quem deu,quem recebeu.
   SendClientMessageToAll(-1,string);//enviando para todos
   return 1;
}
CMD:ir(playerid,params[])
{
   new id,Float:x,Float:y,Float:z,nomevitima[MAX_PLAYER_NAME],nome[MAX_PLAYER_NAME],string[60];
   if(PlayerInfo[playerid][pAdmin] < 1 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Basicamente diz, Caso o level seja menor que 1 e tambйm nгo sejam um rcon admin, Retornar a mensagem.
   if(sscanf(params,"u",id)) return SendClientMessage(playerid,-1,"/ir [ID] ");  // Caso o jogador digite parametros errados, irб aparecer estб messagem.
   if (!IsPlayerConnected(id)) return SendClientMessage(playerid,-1,"Jogador nгo estб conectado! "); // Checa se a vнtima estб conectada, Caso contrбrio retorna a mensagem
   GetPlayerPos(id,x,y,z); // Pega a posiзгo da vнtima.
   SetPlayerPos(playerid,x,y,z); // Seta a posiзгo do playerid, atй a vнtima.
   GetPlayerName(playerid,nome,sizeof(nome)); // Formatando o nome do playerid
   GetPlayerName(id,nomevitima,sizeof(nomevitima)); // Formatando o nome da vнtima
   for(new i=0;i<MAX_PLAYERS;i++) // Loop para mandar a mensagem para todos os administradores.
   {
      if (IsPlayerConnected(i)) // Checando se o jogador estб conectado, assim o loop serб mais rбpido.
      {
        if(PlayerInfo[i][pAdmin] >= 1) // Checa se o jogador tem o level maior ou igual а 1.
        {
          format(string,sizeof(string),"Administrador:%s se teleportou atй %s",nome,nomevitima); // Formatando o Texto, e mostrando quem deu,quem recebeu.
          SendClientMessage(i,-1,string); // Caso seja verdade que й maior ou igual а 1, irб enviar a mensagem.
        }
	  }
   }
   return 1;
}
CMD:pegar(playerid,params[])
{
   new id,Float:x,Float:y,Float:z,nomevitima[MAX_PLAYER_NAME],nome[MAX_PLAYER_NAME],string[60];
   if(PlayerInfo[playerid][pAdmin] < 1 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Basicamente diz, Caso o level seja menor que 1 e tambйm nгo sejam um rcon admin, Retornar a mensagem.
   if(sscanf(params,"u",id)) return SendClientMessage(playerid,-1,"/ir [ID] ");  // Caso o jogador digite parametros errados, irб aparecer estб messagem.
   if (!IsPlayerConnected(id)) return SendClientMessage(playerid,-1,"Jogador nгo estб conectado! "); // Checa se a vнtima estб conectada, Caso contrбrio retorna a mensagem
   GetPlayerPos(playerid,x,y,z); // Pega a sua posiзгo
   SetPlayerPos(id,x,y,z); // Seta a posiзгo do da vнtima atй vocк
   GetPlayerName(playerid,nome,sizeof(nome)); // Formatando o nome do playerid
   GetPlayerName(id,nomevitima,sizeof(nomevitima)); // Formatando o nome da vнtima
   for(new i=0;i<MAX_PLAYERS;i++) // Loop para mandar a mensagem para todos os administradores.
   {
      if (IsPlayerConnected(i)) // Checando se o jogador estб conectado, assim o loop serб mais rбpido.
      {
        if(PlayerInfo[i][pAdmin] >= 1) // Checa se o jogador tem o level maior ou igual а 1.
        {
          format(string,sizeof(string),"Administrador:%s Puxou %s",nome,nomevitima); // Formatando o Texto, e mostrando quem deu,quem recebeu.
          SendClientMessage(i,-1,string); // Caso seja verdade que й maior ou igual а 1, irб enviar a mensagem.
        }
	  }
   }
   return 1;
}
CMD:tapa(playerid,params[])
{
   new id,Float:x,Float:y,Float:z,nomevitima[MAX_PLAYER_NAME],nome[MAX_PLAYER_NAME],string[60];
   if(PlayerInfo[playerid][pAdmin] < 1 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Basicamente diz, Caso o level seja menor que 1 e tambйm nгo sejam um rcon admin, Retornar a mensagem.
   if(sscanf(params,"u",id)) return SendClientMessage(playerid,-1,"/tapa [ID] ");// Caso o jogador digite parametros errados, irб aparecer estб messagem.
   GetPlayerPos(id,x,y,z); // Pega a posiзгo da vнtima
   SetPlayerPos(id,x,y,z+10); // Seta a posiзгo da vнtima um pouco alta.
   GetPlayerName(playerid,nome,sizeof(nome)); // Formatando o nome do playerid
   GetPlayerName(id,nomevitima,sizeof(nomevitima)); // Formatando o nome da vнtima
   format(string,sizeof(string),"Administrador:%s Deu uma tapa em %s !",nome,nomevitima); // Formatando o Texto, e mostrando quem deu,quem recebeu.
   SendClientMessageToAll(-1,string); // Envia a string para todos, ao invйs de somente admins.
   return 1;
}
CMD:dardinheiro(playerid,params[]) // Estб funзгo irб acrescentar a quantidade atual de dinheiro
{
   new id,dinheiro,nome[MAX_PLAYER_NAME],string[60],nomevitima[MAX_PLAYER_NAME];
   if(PlayerInfo[playerid][pAdmin] < 5 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Basicamente diz, Caso o level seja menor que 5 e tambйm nгo sejam um rcon admin, Retornar a mensagem.
   if(sscanf(params,"ui",id,dinheiro)) return SendClientMessage(playerid,-1,"/dardinheiro [id] [quantidade] ");// Caso o jogador digite parametros errados, irб aparecer estб messagem.
   GetPlayerMoney(id); // Pega a quantidade de dinheiro da vнtima
   GivePlayerMoney(id,dinheiro); // Dб o dinheiro para a vнtima
   GetPlayerName(playerid,nome,sizeof(nome)); // Formatando o nome do playerid
   GetPlayerName(playerid,nomevitima,sizeof(nomevitima)); // Formatando o nome da vнtima
   format(string,sizeof(string),"Administrador:%s deu para %s a quantidade de cash: %i",nome,nomevitima,dinheiro);// Formatando o Texto, e mostrando quem deu,quem recebeu.
   SendClientMessageToAll(-1,string); // Envia a string para todos, ao invйs de somente admins.
   return 1;
}
CMD:resetardinheiro(playerid,params[]) // Estб funзгo irб resetar e dar o dinheiro escolhido.
{
   new id,dinheiro,nome[MAX_PLAYER_NAME],string[60],nomevitima[MAX_PLAYER_NAME];
   if(PlayerInfo[playerid][pAdmin] < 5 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Basicamente diz, Caso o level seja menor que 5 e tambйm nгo sejam um rcon admin, Retornar a mensagem.
   if(sscanf(params,"ui",id,dinheiro)) return SendClientMessage(playerid,-1,"/resetardinheiro [id] [quantidade] ");// Caso o jogador digite parametros errados, irб aparecer estб messagem.
   ResetPlayerMoney(id); // Reseta o dinheiro ra vнtima
   GivePlayerMoney(id,dinheiro); // Dб o dinheiro para a vнtima
   GetPlayerName(playerid,nome,sizeof(nome)); // Formatando o nome do playerid
   GetPlayerName(playerid,nomevitima,sizeof(nomevitima)); // Formatando o nome da vнtima
   format(string,sizeof(string),"Administrador:%s deu para %s a quantidade de cash: %i",nome,nomevitima,dinheiro);// Formatando o Texto, e mostrando quem deu,quem recebeu.
   SendClientMessageToAll(-1,string); // Envia a string para todos, ao invйs de somente admins.
   return 1;
}
CMD:a(playerid,params[])
{
   new string[128],string2[128],nome[MAX_PLAYER_NAME];
   if(PlayerInfo[playerid][pAdmin] == 0 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Basicamente diz, Caso o level seja igual 0 e tambйm nгo sejam um rcon admin Retornar a mensagem.
   if(sscanf(params,"s[128]",string)) return SendClientMessage(playerid,-1,"/a [texto]  "); // Caso o jogador digite parametros errados, irб aparecer estб messagem.
   GetPlayerName(playerid,nome,sizeof(nome));//formata o nome do playerid
   for(new i=0;i<MAX_PLAYERS;i++)
   {
	 if(PlayerInfo[i][pAdmin] >= 1 ) // Vai mandar a mensagem para todos que tiverem o level maior ou igual a 1.
	 {
	 format(string2,sizeof(string2),"{F81414}%s: {FFFFFF}%s",nome,string);//formatando a sting.
	 SendClientMessage(i,-1,string2);//enviando-a para todos que sгo iguais ou maiores que o level 1.
	 }
   }
   return 1;
}
CMD:admins(playerid,params[])
{
   new string[128],nome[MAX_PLAYER_NAME],countando;
   if(PlayerInfo[playerid][pAdmin] >= 0 && !IsPlayerAdmin( playerid ) )
   if(sscanf(params,"")) return SendClientMessage(playerid,-1,"/admins"); // Caso o jogador digite parametros errados, irб aparecer estб messagem.
   GetPlayerName(playerid,nome,sizeof(nome));//formata o nome do playerid
   for(new i=0;i<MAX_PLAYERS;i++)
   {
	 if(PlayerInfo[i][pAdmin] >= 1 )// Vai pegar todos os que forem iguais ou superiores a o level 1..
	 {
	 countando++;
	 format(string,sizeof(string),"{F81414}%s - Level %i\n",nome,PlayerInfo[i][pAdmin]);//formatando a sting.
	 }
   }
   if(countando == 0)return ShowPlayerDialog( playerid, 1245, DIALOG_STYLE_MSGBOX, "Lista De Admins","Nenhum Admin online no momento!","Ok...", "");//Caso a array contando seja 0, ou seja, nгo tenha aumentado.significa que nгo tinha admin online, entгo retorna a dialog.
   ShowPlayerDialog( playerid, 1244, DIALOG_STYLE_MSGBOX, "Lista De Admins",string,"Ok...", "");//mostrando a dialog para o player caso tenha admins.
   return 1;
}
CMD:viplist(playerid,params[])
{
   new string[128],nome[MAX_PLAYER_NAME],countando;
   if(PlayerInfo[playerid][pAdmin] >= 0 && !IsPlayerAdmin( playerid ) )
   if(sscanf(params,"")) return SendClientMessage(playerid,-1,"/viplist"); // Caso o jogador digite parametros errados, irб aparecer estб messagem.
   GetPlayerName(playerid,nome,sizeof(nome));//formata o nome do playerid
   for(new i=0;i<MAX_PLAYERS;i++)
   {
	 if(PlayerInfo[i][pVip] >= 1 ) // Vai pegar todos os que forem iguais ou superiores a o level 1..
	 {
	 countando++;
	 format(string,sizeof(string),"{F81414}%s - Vip Level %i\n",nome,PlayerInfo[i][pVip]);//formatando a sting.
	 }
   }
   if(countando == 0)return ShowPlayerDialog( playerid, 1247, DIALOG_STYLE_MSGBOX, "Lista de Vips online","Nenhum Vip online no momento!","Ok...", "");//mostrando a dialog para o player
   ShowPlayerDialog( playerid, 1248, DIALOG_STYLE_MSGBOX, "Lista de Vips online",string,"Ok...", "");//mostrando a dialog para o player
   return 1;
}
CMD:banir(playerid, params[])
{
	new string[256], Dia, Mes, Ano, Hora, Minuto, Segundo,vitima, nomedavitima[MAX_PLAYER_NAME],Motivo[128],nome[MAX_PLAYERS],Ip[15],arquivo[128];
	if(PlayerInfo[playerid][pAdmin] < 3 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Basicamente diz, Caso o level seja menor que 5 e tambйm nгo sejam um rcon admin, Retornar a mensagem.
	if(sscanf(params, "us[128]", vitima,Motivo)) return SendClientMessage(playerid, -1, "/banir [id] [motivo]");// Caso o jogador digite parametros errados, irб aparecer estб messagem.
	getdate(Ano, Mes, Dia);//pega a data
	gettime(Hora, Minuto, Segundo);//pega o tempo
	GetPlayerName(playerid, nome, sizeof(nome));//formata o nome do playerid
	GetPlayerName(vitima, nomedavitima, sizeof(nomedavitima)); //formata o nome da vнtima
	GetPlayerIp(vitima, Ip, sizeof(Ip));//pega o ip - formata o ip.
	if(!IsPlayerConnected(vitima)) return SendClientMessage(playerid, -1, "Jogador nгo estб conectado");//caso a vitima nгo estб conectada
	format(string, sizeof(string), "Administrador %s baniu %s [Motivo: %s]", nome, nomedavitima, Motivo);//formata a string
	SendClientMessageToAll(-1, string);//envia pra todos
	format(string, sizeof(string), "%d/%d/%d", Dia, Mes, Ano);//formata a data
	format(arquivo, sizeof(arquivo), pastadebanimento, nomedavitima);//formata a pasta onde vai ser salva
	if(INI_Open(arquivo))//abre a pasta e o arquivo.
	{// vai inserir tudo isto.
		INI_WriteString("Admin", nome);
		INI_WriteInt("Dia", Dia);
		INI_WriteInt("Mes", Mes);
		INI_WriteInt("Ano", Ano);
		INI_WriteInt("Hora", Hora);
		INI_WriteInt("Minuto", Minuto);
		INI_WriteInt("Segundo", Segundo);
		INI_WriteString("MotivoBan", Motivo);
		INI_WriteString("IP", Ip);
		INI_Save();
		INI_Close();
	}
	Kick(vitima);//apуs inserir,kick а vнtima.
	return 1;
}
CMD:desbanirconta(playerid, params[])
{
  	new banido[MAX_PLAYER_NAME], string[45],arquivo[128];
  	if(PlayerInfo[playerid][pAdmin] < 5 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Basicamente diz, Caso o level seja menor que 5 e tambйm nгo sejam um rcon admin, Retornar a mensagem.
	if(sscanf(params, "s[128]", banido)) return SendClientMessage(playerid, -1, "/desbanirconta [nome do banido]");// Caso o jogador digite parametros errados, irб aparecer estб messagem.
    format(arquivo, sizeof(arquivo), pastadebanimento, banido);//formata a pasta onde foi salva
	if(fexist(arquivo))//abre a pasta e o arquivo.
	{// Vai ler e procurar por IP.
	  INI_Open(arquivo);
	  format(string, sizeof(string), "SERVER : Vocк desbaniu a conta: %s", banido);// formatando a string.
	  SendClientMessage(playerid, -1, string);//enviando-a.
      format(arquivo, sizeof(arquivo), pastadebanimento, banido);//Defindo a conta
      INI_Remove(arquivo);//removendo o nome dele.
	  INI_Close();
	}
	else SendClientMessage(playerid,-1, "Conta nгo estб banida");// Caso nгo esteja banido.
	return 1;
}
CMD:vidatodos(playerid,params[])
{
	new string[35],nome[MAX_PLAYER_NAME];
    if(PlayerInfo[playerid][pAdmin] < 5 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Basicamente diz, Caso o level seja menor que 5 e tambйm nгo sejam um rcon admin, Retornar a mensagem.
    if(sscanf(params, "")) return SendClientMessage(playerid, -1, "/vidatodos");// Caso o jogador digite parametros errados, irб aparecer estб messagem.
    GetPlayerName(playerid,nome,sizeof(nome));//formatando o nome do playerid.
    format(string,sizeof(string),"%s Deu vida para todos!",nome); // formatando o texto.
    SendClientMessageToAll(-1,string); // Enviando a menssagem para todos.
    for(new i=0;i<MAX_PLAYERS;i++) // Vai pegar todos os jogadores.
    {
	  if(IsPlayerConnected(i)) // Diminui o tempo do loop.
	  {
	    SetPlayerHealth(i,100); // Definir a vida de todos os jogadores 100.
	  }
    }
    return 1;

}
CMD:coletetodos(playerid,params[])
{
	new string[35],nome[MAX_PLAYER_NAME];
    if(PlayerInfo[playerid][pAdmin] < 5 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Basicamente diz, Caso o level seja menor que 5 e tambйm nгo sejam um rcon admin, Retornar a mensagem.
    if(sscanf(params, "")) return SendClientMessage(playerid, -1, "/coletetodos");// Caso o jogador digite parametros errados, irб aparecer estб messagem.
    GetPlayerName(playerid,nome,sizeof(nome));//formatando o nome do playerid.
    format(string,sizeof(string),"%s Deu colete para todos!",nome); // formatando o texto.
    SendClientMessageToAll(-1,string); // Enviando a menssagem para todos.
    for(new i=0;i<MAX_PLAYERS;i++) // Vai pegar todos os jogadores.
    {
	  if(IsPlayerConnected(i)) // Diminui o tempo do loop.
	  {
	    SetPlayerArmour(i,100); // Definir o colete de todos os jogadores 100.
	  }
    }
    return 1;

}
CMD:verip(playerid,params[])
{
   new ip[15],nome[MAX_PLAYER_NAME],string[50],ID;
   if(PlayerInfo[playerid][pAdmin] < 1 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Basicamente diz, Caso o level seja menor que 5 e tambйm nгo sejam um rcon admin, Retornar a mensagem.
   if(sscanf(params, "u",ID)) return SendClientMessage(playerid, -1, "/verip [ID");// Caso o jogador digite parametros errados, irб aparecer estб messagem.
   GetPlayerName(ID,nome,sizeof(nome)); // formata o nome
   GetPlayerIp(ID,ip,sizeof(ip)); // formata o ip.
   format(string,sizeof(string),"Nome: %s - IP: %d",nome,ip);//formata o texto.
   ShowPlayerDialog(playerid, 1222, DIALOG_STYLE_MSGBOX,"IP",string,"Fechar",""); // envia o texto em forma de dialog.

   return 1;
}
CMD:congelar(playerid,params[])
{
   new nome[MAX_PLAYER_NAME],nomevitima[MAX_PLAYER_NAME],string[128],ID;
   if(PlayerInfo[playerid][pAdmin] < 1 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Basicamente diz, Caso o level seja menor que 5 e tambйm nгo sejam um rcon admin, Retornar a mensagem.
   if(sscanf(params, "us[128]",ID,string)) return SendClientMessage(playerid, -1, "/desbanirconta [nome do banido]");// Caso o jogador digite parametros errados, irб aparecer estб messagem.
   GetPlayerName(playerid,nome,sizeof(nome));//geta o nome do playerid.
   GetPlayerName(ID,nomevitima,sizeof(nomevitima)); // geta o nome da vнtima
   format(string,sizeof(string),"Administrador:%s congelou %s Motivo: %s",nome,nomevitima,string);//formata a string
   SendClientMessageToAll(-1,string);//envia a string para todos.
   TogglePlayerControllable(ID,0); // congelando.
   return 1;
}
CMD:descongelar(playerid,params[])
{
   new nome[MAX_PLAYER_NAME],nomevitima[MAX_PLAYER_NAME],string[128],ID;
   if(PlayerInfo[playerid][pAdmin] < 1 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Basicamente diz, Caso o level seja menor que 5 e tambйm nгo sejam um rcon admin, Retornar a mensagem.
   if(sscanf(params, "u",ID)) return SendClientMessage(playerid, -1, "/desbanirconta [nome do banido]");// Caso o jogador digite parametros errados, irб aparecer estб messagem.
   GetPlayerName(playerid,nome,sizeof(nome));//geta o nome do playerid.
   GetPlayerName(ID,nomevitima,sizeof(nomevitima)); // geta o nome da vнtima
   format(string,sizeof(string),"Administrador:%s descongelou %s",nome,nomevitima,string);//formata a string
   SendClientMessageToAll(-1,string);//envia a string para todos.
   TogglePlayerControllable(ID,1); // congelando.
   return 1;
}
CMD:bc(playerid,params[])
{
   new string[128],tempo,letra;
   if(PlayerInfo[playerid][pAdmin] < 5 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Basicamente diz, Caso o level seja menor que 5 e tambйm nгo seja um rcon admin, Retornar a mensagem.
   if(sscanf(params, "s[128]i",string,tempo,letra)) return SendClientMessage(playerid, -1, "/bc [texto] [letra]");// Caso o jogador digite parametros errados, irб aparecer estб messagem.
   if(letra < 0 || letra > 3) return SendClientMessage(playerid,-1,"Letras de 0 - 3"); // Compara com o que o playerid digitou, menor que 0 ou maior que 3 retorna a mensagem
   GameTextForAll(string,5000, letra); // Envia a string para todos.o gametext й uma letra enorme.
   return 1;
}
CMD:kick(playerid,params[])
{
   new ID,string[128],lol[128],nome[MAX_PLAYER_NAME],nomevitima[MAX_PLAYER_NAME];
   if(PlayerInfo[playerid][pAdmin] < 3 && !IsPlayerAdmin( playerid ) ) return SendClientMessage(playerid,-1,"Sem Autorizaзгo!"); // Basicamente diz, Caso o level seja menor que 5 e tambйm nгo sejam um rcon admin, Retornar a mensagem.
   if(sscanf(params,"us[128]",ID,string)) return SendClientMessage(playerid,-1,"/kick [ID] [MOTIVO] ");// Caso o jogador digite parametros errados, irб aparecer estб messagem.
   GetPlayerName(playerid,nome,sizeof(nome));//formata o nome do playerid.
   GetPlayerName(ID,nomevitima,sizeof(nomevitima));//formata o nome da vнtima
   format(lol,sizeof(lol),"Administrador %s kickou jogador % Motivo: %s",nome,nomevitima,string);//formata o texto.
   SendClientMessageToAll(-1,lol); // Manda a mensagem para todos.
   Kick(ID); // Kicka a vнtima

   return 1;
}
CMD:acmds(playerid,params[])
{



}
// STOCKS / PUBLICS
public stats(playerid)
{
  #if defined statsatual
    if(INI_Open(contas(playerid))) // Funзгo que abre a stock contas, estб localizada ao fim do gm.
	{
	  INI_WriteInt("Admin",PlayerInfo[playerid][pAdmin]); // Estб inserindo as informaзхes do jogador.
	  INI_WriteInt("Vip",PlayerInfo[playerid][pVip]); // Estб inserindo as informaзхes do jogador.
      INI_WriteInt("Score",PlayerInfo[playerid][pScore]); // Estб inserindo as informaзхes do jogador.
      INI_WriteInt("Mata",PlayerInfo[playerid][pMata]); // Estб inserindo as informaзхes do jogador.
      INI_WriteInt("Mortes",PlayerInfo[playerid][pMortes]); // Estб inserindo as informaзхes do jogador.
      INI_WriteInt("Avisos",PlayerInfo[playerid][pAvisos]); // Estб inserindo as informaзхes do jogador.
      INI_WriteInt("Dinheiro",GetPlayerMoney(playerid)); // Estб inserindo as informaзхes do jogador.

      INI_Save(); // Salvando as informaзхes do jogador
      INI_Close(); // Fechando as informaзхes do jogador
  }
  #endif
}
public atualizartext(playerid)
{
 new matadd[15],morreudd[15],pingdd[10],pingdd2[MAX_PLAYERS];
 pingdd2[playerid] = GetPlayerPing(playerid); // Pegando o ping do jogador.
 format(matadd, sizeof matadd, "Matou:%d",PlayerInfo[playerid][pMata]); // Formatando a textdraw
 format(morreudd, sizeof morreudd, "Mortes:%d",PlayerInfo[playerid][pMortes]); // Formatando a textdraw
 format(pingdd, sizeof pingdd, "Ping:%d",pingdd2[playerid]); // Formatando a textdraw
 PlayerTextDrawSetString(playerid,matou[playerid], matadd); // Vai atualizar a string, Colocando assim o novo numero.
 PlayerTextDrawSetString(playerid,morreu[playerid], morreudd);// Vai atualizar a string, Colocando assim o novo numero.
 PlayerTextDrawSetString(playerid,ping[playerid], pingdd);// Vai atualizar a string, Colocando assim o novo numero.
}

stock contas(playerid) // Uma stock, й basicamente uma funзгo que pode ou nгo ser usada,evitando erros na copilaзгo sendo normalmente usada na criaзгo de librбrias.(******)(Fiquei em dъvida sobre minha definiзгo)
{
  new conta[64],nome[MAX_PLAYER_NAME]; // Conta й o nome da string, Que serб usada para elaborar a formataзгo do texto, Nome й a funзгo que irб armazenar o nome dos jogadores.
  GetPlayerName(playerid,nome,sizeof(nome)); // Formatando o nome do jogadores.
  format(conta,30,pastadesalvamento,nome); // Formatando a string, e dizendo onde armazenala e qual nome ela terб, que no caso serб o nome do jogador.
  return conta; // Retornando a string.
  // Lembrete importante, publics nгo podem retornar strings, Apenas stock's.
}

Tenho certeza que este tуpico poderб evitar alguns pedidos/informaзхes de comandos.

eu estava a pensar a adicionar um tutorial de sistema de gangs, porйm achei que seria um pouco mais avanзado, jб que este tutorial й dedicado a iniciantes entгo achei meio que desnecessбrio.


Bom para finalizar, Deixe suas opiniхes sobre o que deixou a desejar, erros que cometi, lembrando que, uma crнtica bem construнda й sempre bem vinda.


Links para includes && Crйditos ao devidos criadores .
- Sscanf2
- SII
- Zcmd

e Tambйm Crйditos а:
- Sa-mp Wiki (como sempre vivendo e aprendendo.)
- Leonardo1434 (Criador do tutorial)
Reply


Messages In This Thread
Como Criar um GameMode do 0 - by leonardo1434 - 27.06.2012, 14:53
Re: Como Criar um GameMode do 0 - by ViniBorn - 27.06.2012, 14:57
Re: Como Criar um GameMode do 0 - by leonardo1434 - 27.06.2012, 14:59
Re: Como Criar um GameMode do 0 - by cJMaster_ - 27.06.2012, 15:29
Re: Como Criar um GameMode do 0 - by Edu33 - 27.06.2012, 15:34
Re: Como Criar um GameMode do 0 - by Jason` - 27.06.2012, 15:37
Re: Como Criar um GameMode do 0 - by Edu33 - 27.06.2012, 15:56
Re: Como Criar um GameMode do 0 - by Jason` - 27.06.2012, 16:04
Re: Como Criar um GameMode do 0 - by Edu33 - 27.06.2012, 16:11
Re: Como Criar um GameMode do 0 - by Schocc - 27.06.2012, 16:18
Re: Como Criar um GameMode do 0 - by zbt - 27.06.2012, 21:10
Re: Como Criar um GameMode do 0 - by WaGnerLiima - 28.06.2012, 14:31
Re: Como Criar um GameMode do 0 - by maikonk - 02.07.2012, 05:29
Re: Como Criar um GameMode do 0 - by leonardo1434 - 02.07.2012, 05:39
Re: Como Criar um GameMode do 0 - by maikonk - 02.07.2012, 05:53
Re: Como Criar um GameMode do 0 - by leonardo1434 - 02.07.2012, 06:01
Re: Como Criar um GameMode do 0 - by MegaStyle157 - 16.12.2012, 12:50
Re: Como Criar um GameMode do 0 - by Gleisson_. - 16.12.2012, 14:14
Re: Como Criar um GameMode do 0 - by Sky™ - 16.12.2012, 16:28

Forum Jump:


Users browsing this thread: 10 Guest(s)