PACOTÃO INICIANTE

Venho a Postar Denovo....


Vejo Muitas Dúvidas de Iniciantes. Quero Aprender a Codar Mais Como Crio um GM ?

Aqui Vai Uma Ótima Nóticia !

Venho Postar um GM Criado Por Mim, Mais Ele Será Para Você !

Esse GM Vai Ser Totalmente Liberado Para Você Iniciante Podendo Editar ou Mudar os Créditos a Vontade !



Logo No Começo Do GM Ele Já Tem Logo de Cara Uns Tutoriais :



 Sobre Chaves

 Aprendendo a Mexer com \n

 Como Criar um Carro

 Como Pegar Coodernadas é Angulo

 Como Fazer Mensagens

 Como Criar um Comando

 Como Criar um Comando Para Administrador Logado Na Rcon

 Como Fazer DIALOG LIST !

 Como Fazer DIALOG MSGBOX Do Geito Mais Fácil !

 Como Deixar Dialogs/Mensagens Coloridos !



Tudo Isso em 1 GM Só



Comandos :

Exclusivo Para Admin 



/grana - Para Administradores Logado na RCON
 
Comandos Normais 


 /admins
 /kill
 /teleportes - Em Dialog Apenas Com 2 Teleporte !
 /creditos
 /ajuda



Cada Linha tem Uma Explicação !



Nunca Ficou Tão Fácil Aprender a Codar !

Baixe Esse GM ! Não Se Preucupe, Ele Não é Roubado é Para Você Iniciante ! Baixe a Vontade e Seja Feliz Com Seu GM !



Tenha Seu Próprio GM ! Lembrando : Comece Sempre Por DM/Corrida/Drift !!



Dúvidas ? Erros ? Colocou Algo Deu Erro ? Ajuda ? Poste Aqui Ajudarei Você



Esse GM Tem Apenas 587 de Linhas ( Com Os Tutoriais )





Créditos :

Jonathan_Feitosa Para Você Iniciante !



Postado Com Autorizaçao | By:Kizano  
1. Criando as Gangs:

new TeamGang[MAX_PLAYERS];//Esta será a definição da Gang do Jogador.

1.1 Colocando as Skins:

Para ver as Skins vá a http://wiki.sa-mp.com/wiki/Skins.
Para pegar os ID's das Armas vá em http://wiki.sa-mp.com/wiki/Weapons.

public OnGameModeInit(){    //Skins dos Balas:    AddPlayerClass(102, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
    AddPlayerClass(103, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
    AddPlayerClass(104, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
    //Skins da Grove:    AddPlayerClass(105, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
    AddPlayerClass(106, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
    AddPlayerClass(107, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
    //Skins dos Los Aztecas:    AddPlayerClass(114, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
    AddPlayerClass(115, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
    AddPlayerClass(116, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
    //Skins dos Los Vagos:    AddPlayerClass(108, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
    AddPlayerClass(109, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
    AddPlayerClass(110, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
    //Skins da San Fierro Rifa:    AddPlayerClass(173, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
    AddPlayerClass(174, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
    AddPlayerClass(175, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
    return 1;//Fim}

Explicando o AddPlayerClass:

AddPlayerClass(Skin, Pos:X, Pos:Y, Pos:Z, Rot:Z, Arma1, Balas1, Arma2, Balas2, Arma3, Balas3);

1.2 Colocando o jogador na Gang:

public OnPlayerRequestClass(playerid, classid){    if(classid >= 0 && classid <= 2)//De 0 á 2 são so Numeros das Skins, ou seja, os três primeiros AddPlayerClass.    {        TeamGang[playerid] = 0;//Colocará o jogador na Gang 0, ou seja: Ballas.    }//Fim das Funções das skins dos ballas.    if(classid >= 3 && classid <= 5)//Grove    {        TeamGang[playerid] = 1;
    }    if(classid >= 6 && classid <= 8)//Los Aztecas    {        TeamGang[playerid] = 2;
    }    if(classid >= 9 && classid <= 12)//Los Vagos    {        TeamGang[playerid] = 3;
    }    if(classid >= 13 && classid <= 15)//San Fierro Rifa    {        TeamGang[playerid] = 4;
    }    SetPlayerTeam(playerid, TeamGang[playerid]+1);//Não permitirá que um parceiro mate o outro.    return 1;//Fim}

1.3 Colocando o Spawn da Gang:

public OnPlayerSpawn(playerid)//Quando o Jogador Spawna...{    if(TeamGang[playerid] == 0)//Se: Gang do Jogador for 0(Ballas)    {        SetPlayerPos(playerid, 1939.1229, -1114.7427, 27.4522);//Colocará o jogador na posição.        SetPlayerFacingAngle(playerid, 179.6596);//Colocará o jogador em uma rotação.    }    if(TeamGang[playerid] == 1)//Grove    {        SetPlayerPos(playerid, 2495.3671, -1688.4191, 13.7943);
        SetPlayerFacingAngle(playerid, 4.5339);
    }    if(TeamGang[playerid] == 2)//Los Aztecas    {        SetPlayerPos(playerid, 2512.6210, -1027.8750, 70.0859);
        SetPlayerFacingAngle(playerid, 180.7592);
    }    if(TeamGang[playerid] == 3)//Los Vagos    {        SetPlayerPos(playerid, 1832.0184, -1995.9156, 13.5468);
        SetPlayerFacingAngle(playerid, 82.2389);
    }    if(TeamGang[playerid] == 4)//San Fierro Rifa    {        SetPlayerPos(playerid, -2624.3217, 1411.1578, 7.0937);
        SetPlayerFacingAngle(playerid, 194.6358);
    }    return 1;//Fim}

Dicas:
Você pode colocar para as Gangs spawnarem com mais armas usando:

GivePlayerWeapon(playerid, ID, Balas);

Coloque este comando em seu GameMode para pegar posições:

if(strcmp(cmdtext, "/pos", true) == 0)
{
    new Float:POS[4], string[256];
    new vehicleid = GetPlayerVehicleID(playerid);
    if(!IsPlayerInAnyVehicle(playerid))
    {
        GetPlayerPos(playerid, POS[0], POS[1], POS[2]);
        GetPlayerFacingAngle(playerid, POS[3]);
    }
    else
    {
        GetVehiclePos(vehicleid, POS[0], POS[1], POS[2]);
        GetVehicleZAngle(vehicleid, POS[3]);
    }
    format(string, sizeof(string), "X = %f, {FFFFFF}Y = %f, {FF0000}Z = %f, {0066FF}R = %f, {FFFF00}INT: %d", POS[0], POS[1], POS[2], POS[3], GetPlayerInterior(playerid));
    SendClientMessage(playerid, 0x00FF00AA, string);
    return 1;
}

2. Criando as GangZones:

#define BALLAS_COLOR 0xFF00FFAA
#define GROVE_COLOR 0x00FF00AA
#define AZTECAS_COLOR 0x00FFFFAA
#define VAGOS_COLOR 0xFFFF00AA
#define RIFA_COLOR 0x0000FFAA
new GangName[5][] = {//Aqui irei colocar os nomes de 5 Gangs:
{"Ballas"},//Nome da Gang 1
{"Grove Street"},//Nome da Gang 2
{"Varios Los Aztecas"},//Nome da Gang 3
{"Los Santos Vagos"},//Nome da Gang 4
{"San Fierro Rifa"}//Nome da Gang 5
};//Fim dos Nomes
new GZParque,//Para definir a GangZone.
    GZPista;//Para definir a GangZone.
new Dominando[MAX_PLAYERS];//Para impedir o jogador de dominar 2 GangZones ao mesmo tempo.
new ParqueSendoDominado,//Para verificar se o parque glen já esta sendo dominado.
    PistaSendoDominada;//Para verificar se a pista de skate já esta sendo dominada.
new DonoParque = 99,//Para colocar a cor no parque.
    DonoPista = 99;//Para colocar a cor na pista.
forward DominarParque(playerid);
forward DominarPista(playerid);

2.1 Como pegar:

Use o comando de pegar posições e pegue:

1°: Baixo e do lado esquerdo.

2°: Cima e do lado Direito.

Como na Imagem:



2.2 Colocando-a no GameMode:


public OnGameModeInit()
{
    GZParque = GangZoneCreate(1876.7298, -1145.8150, 2056.8627, -1250.8861);//Parque Glen
    GZPista = GangZoneCreate(1862.1929, -1351.2478, 1976.6811, -1450.5447);//Pista de Skate
    return 1;//Fim
}

Explicando o GangZoneCreate:
GangZoneCreate(MIN_Pos:X, MIN_Pos:Y, MAX_Pos:X, MAX_Pos:Y);

Ou seja: Não inclui uma Pos:Z.

[pawn]

2.3 Criando um Verificador de Cor e de Posições:

stock GetGangColor(gang)
{
    if(gang == 0)
    {
        return BALLAS_COLOR;
    }
    if(gang == 1)
    {
        return GROVE_COLOR;
    }
    if(gang == 2)
    {
        return AZTECAS_COLOR;
    }
    if(gang == 3)
    {
        return VAGOS_COLOR;
    }
    if(gang == 4)
    {
        return RIFA_COLOR;
    }
    return 1;
}
stock IsPlayerInParqueGlen(playerid)
{
    new Float:X,
        Float:Y,
        Float:Z;
    GetPlayerPos(playerid, X, Y, Z);//Pega a Posição.
    if(X >= 1876.7298 && Y >= -1145.8150 && X <= 2056.8627 && Y <= -1250.8861)//Verifica se ele esta na GangZone.
    {
        return 1;//Isto significa que ele ESTA na GangZone.
    }
    return 0;//Isto significa que ele NÃO ESTA na GangZone.
}
stock IsPlayerInPistaDeSkate(playerid)
{
    new Float:X,
        Float:Y,
        Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    if(X >= 1862.1929 && Y >= -1351.2478 && X <= 1976.6811 && Y <= -1450.5447)
    {
        return 1;
    }
    return 0;
}

Como Fazer:


Pegue a Sua GangZone, Ex:
GangZoneCreate(1876.7298, -1145.8150, 2056.8627, -1250.8861);//Parque Glen

e copie esse codigo:

stock IsPlayerInGangZone(playerid)
{
    new Float:X,
        Float:Y,
        Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    if(X >= 1 && Y >= 2 && X <= 3 && Y <= 4)
    {
        return 1;
    }
    return 0;
}

Onde esta o 1, você ira pegar a 1° parte do GangZoneCreate, no caso, 1876.7298, onde esta o 2, você ira pegar a 2° parte do GangZoneCreate, no caso, -1145.8150. E assim por diante.

2.4 Mostrando a GangZone:

public OnPlayerSpawn(playerid)
{
    if(DonoParque == 99)
    {
        GangZoneShowForPlayer(playerid, GZParque, 0x666666AA);
    }
    if(DonoParque != 99)
    {
        GangZoneShowForPlayer(playerid, GZParque, GetGangColor(DonoParque));
    }
    if(DonoPista == 99)
    {
        GangZoneShowForPlayer(playerid, GZPista, 0x666666AA);
    }
    if(DonoPista != 99)
    {
        GangZoneShowForPlayer(playerid, GZPista, GetGangColor(DonoPista));
    }
    return 1;
}

2.5 Criando o Comando:

public OnPlayerCommandText(playerid, cmdtext[])
{
    new string[256], sendername[MAX_PLAYERS];
    GetPlayerName(playerid, sendername, sizeof(sendername));
    if(!strcmp("/do", cmdtext, true) || !strcmp("/dominar", cmdtext, true))//Se: O comando digitado for /do ou /dominar...
    {
        if(IsPlayerInParqueGlen(playerid))//Se: Jogador no Parque Glen...
        {
            if(Dominando[playerid] != 0)//Se: Dominando não for igual a 0.
            {
                SendClientMessage(playerid, 0x666666FF, "Você já esta dominando uma GangZone.");//Mensagem de Erro.
                return 1;//Termina o Comando.
            }
            if(ParqueSendoDominado != 0)//Se: O parque esta sendo dominado...
            {
                SendClientMessage(playerid, 0x666666FF, "O Parque Glen já esta sendo dominado.");//Mensagem de Erro.
                return 1;//Termina o Comando.
            }
            if(DonoParque == TeamGang[playerid])//Se: O Parque for da Gang do Jogador...
            {
                SendClientMessage(playerid, 0x666666FF, "O Parque Glen já é da sua Gang.");//Mensagem de Erro.
                return 1;//Termina o Comando.
            }
            format(string, sizeof(string), "O Jogador %s da Gang %s esta dominando o Parque Glen.", sendername, GangName[TeamGang[playerid]]);//Cria um Texto com o Nome e Gang do jogador
            SendClientMessageToAll(0x007700FF, string);//Envia o Texto para todos
            GangZoneFlashForAll(GZParque, GetGangColor(TeamGang[playerid]);//Faz a GangZone ficar piscando com a cor da gang do jogador que irá dominar
            SetTimerEx("DominarParque", 30000, false, "i", playerid);//Executar uma função depois de 30 segundos
            ParqueSendoDominada = 1;//Não permite o parque ser dominado
            Dominando[playerid] = 1;//Não permite o jogador dorminar outra gang zone
            return 1;//Termina o Comando.
        }
        else if(IsPlayerInPistaDeSkate(playerid))
        {
            if(Dominando[playerid] != 0)
            {
                SendClientMessage(playerid, 0x666666FF, "Você já esta dominando uma GangZone.");
                return 1;
            }
            if(PistaSendoDominada != 0)
            {
                SendClientMessage(playerid, 0x666666FF, "A Pista de Skate já esta sendo dominado.");
                return 1;
            }
            if(DonopPista == TeamGang[playerid])
            {
                SendClientMessage(playerid, 0x666666FF, "A Pista de Skate já é da sua Gang.");
                return 1;
            }
            format(string, sizeof(string), "O Jogador %s da Gang %s esta dominando a Pista de Skate.", sendername, GangName[TeamGang[playerid]]);
            SendClientMessageToAll(0x007700FF, string);
            GangZoneFlashForAll(GZPista, GetGangColor(TeamGang[playerid]);
            SetTimerEx("DominarPista", 30000, false, "i", playerid);
            PistaSendoDominada = 1;
            Dominando[playerid] = 1;
            return 1;  
        }
        else//Se o Jogador não estivem em nem uma gang zone...
        {
            SendClientMessage(playerid, 0x666666FF, "Você não esta em uma GangZone.");
            return 1;
        }
    }              
    return SendClientMessage(playerid, 0xFFFFFFFF, "Comando Invalido.");//Fim.
}

2.6 30 Segundos Depois do Comando:

public DominarParque(playerid)
{
    if(IsPlayerConnected(playerid))
    {
        new string[256], sendername[MAX_PLAYER_NAME];
        GetPlayerName(playerid, sendername, sizeof(sendername));
        if(IsPlayerInParqueGlen(playerid))
        {
            GangZoneShowForAll(GZParque, GetGangColor(TeamGang[playerid]));//Coloca a GangZona com a cor da Gang
            DonoParque = TeamGang[playerid];//Muda o Dono do Parque para a Gang do Jogador
            format(string, sizeof(string), "O Jogador %s da Gang %s dominou o Parque Glen.", sendername, GangName[TeamGang[playerid]]);//Cria um texto com o nome do jogador e a gang
            SendClientMessageToAll(0x007700FF, string);//Manda o texto para todos
        }
        else
        {
            format(string, sizeof(string), "O Jogador %s da Gang %s não dominou o Parque Glen.", sendername, GangName[TeamGang[playerid]]);
            SendClientMessageToAll(0x007700FF, string);
        }
    }
    ParqueSendoDominado = 0;//Permite o Parque ser dominado novamente
    Dominando[playerid] = 0;//Permite o Jogador dominar novamente
    GangZoneStopFlashForAll(GZParque);//Para de Piscar
    return 1;
}
public DominarPista(playerid)
{
    if(IsPlayerConnected(playerid))
    {
        new string[256], sendername[MAX_PLAYER_NAME];
        GetPlayerName(playerid, sendername, sizeof(sendername));
        if(IsPlayerInPistaDeSkate(playerid))
        {
            GangZoneShowForAll(GZPista, GetGangColor(TeamGang[playerid]));
            DonoPista = TeamGang[playerid];
            format(string, sizeof(string), "O Jogador %s da Gang %s dominou a Pista de Skate.", sendername, GangName[TeamGang[playerid]]);
            SendClientMessageToAll(0x007700FF, string);
        }
        else
        {
            format(string, sizeof(string), "O Jogador %s da Gang %s não dominou a Pista de Skate.", sendername, GangName[TeamGang[playerid]]);
            SendClientMessageToAll(0x007700FF, string);
        }
    }
    PistaSendoDominada = 0;
    Dominando[playerid] = 0;
    GangZoneStopFlashForAll(GZPista);
    return 1;
}

Caso esteja com preguiça de fazer todo esses sistema para testar baixe! (Link Abaixo)

https://rapidshare.com/files/3610642977/GangZone.RAR



Tutorial totalmente feito por Dr_Pawno.

Qualquer semelhança com outro tutorial será uma pura coincidência.
Google Pluss Youtube Google Pluss