SA-MP Forums Archive
[Tutorial] Sistema de Gang e GangZone - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+----- Forum: Lançamentos/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=56)
+----- Thread: [Tutorial] Sistema de Gang e GangZone (/showthread.php?tid=255243)



Sistema de Gang e GangZone + GameMode - Dr_Pawno - 14.05.2011

[Tutorial/GameMode] Sistema de Gang e GangZone + GameMode
1. Criando as Gangs:
pawn Код:
new TeamGang[MAX_PLAYERS];//Esta serб a definiзгo da Gang do Jogador.
1.1 Colocando as Skins:
Para ver as Skins vб a https://sampwiki.blast.hk/wiki/Skins.
Para pegar os ID's das Armas vб em https://sampwiki.blast.hk/wiki/Weapons.
pawn Код:
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:
pawn Код:
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:
pawn Код:
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:
pawn Код:
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:
pawn Код:
#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:
pawn Код:
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.
2.3 Criando um Verificador de Cor e de Posiзхes:
pawn Код:
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 este codigo:
pawn Код:
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:
pawn Код:
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:
pawn Код:
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:
pawn Код:
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 mim.
Qualquer semelhanзa com outro tutorial serб uma pura coincidкncia.



Re: Sistema de Gang e GangZone - Transferencia - 15.05.2011

Bom tutorial Mano,Explicado e talz..agora so falta Explica pros Novatos para que server as funзoes
tipo
GangZoneShowForAll(GZPista, GetGangColor(TeamGang[playerid])); ...Faz a GzPista Piscar para todos... e talz..


Re: Sistema de Gang e GangZone - Dr_Pawno - 15.05.2011

Mais esta quase tudo (90%) assim, e o GangZoneShowForAll esta com descriзгo, so que apenas no 1°(Parque) codigo.
pawn Код:
GangZoneShowForAll(GZParque, GetGangColor(TeamGang[playerid]));//Coloca a GangZona com a cor da Gang



Re: Sistema de Gang e GangZone - [AF]Junior - 15.05.2011

Cara aleluia um tutorial assim. Quando eu estiver com tйdio e paciкncia (domingo) eu faзo. Belo tutorial.


Re: Sistema de Gang e GangZone - Dr_Pawno - 15.05.2011

Й difнcil encontrar alguem com paciкncia o suficiente para criar um tutorial tгo grande e bem explicado como esse '-'№.
E ainda coloquei GameMode '-'І.


Re: Sistema de Gang e GangZone - Delete_ - 15.05.2011

tutorial ficou show vlw.




www.comabtesanfierro.blogspot.com


Re: Sistema de Gang e GangZone - [NWD]Jim._.Carrey - 15.05.2011

Ficou bom o tutorial, parabйns ;]


Re: Sistema de Gang e GangZone - Dr_Pawno - 15.05.2011

Vlw delete e [NWD]Jim._.Carrey!


Re: Sistema de Gang e GangZone - TheGarfield - 15.05.2011

nice joab ms.pawno.


Re: Sistema de Gang e GangZone - [S]trong - 15.05.2011

IsPlayerInParqueGlen godfather bom, poderia melhorar como colocar qual a gang dona da zone, e usar boolean em algumas das vars mas fora isso ficou bem explicado parabйns.