[Tutorial] Criando um Sistema de Dominio ( Via Comando )
#1

Como nгo venho postando muitos projetos ultimamente .. venho postar este tutorial sobre como criar um sistema dominavel via comandos.

PS: Nгo sei explicar nada.. essa foi uma tentativa meio fail.. AEHUAEHEHUHEHUAE

Vamos ao tutorial!

0- Irei usar a Pista de Skate como Ponto de Dominio.

1- Iremos adicionar as includes :

pawn Код:
#include <a_samp>
#include <zcmd>

2-Depois de adicionar as includes, Iremos definir As Cores .

pawn Код:
#define Vermelho            0xFF0000AA
#define Amarelo             0xFFFF00FF

3-Iremos Criar as news necessбrias , incluindo a da criaзгo da gangzone e a das variaveis da dominaзгo

pawn Код:
new Dominando[MAX_PLAYERS], ProvocouSkate[MAX_PLAYERS], TempoGuerraSkate,
    AlguemDominando, GzParque;

4- Adicione essa stock no final do gamemode / filterscript pois ela irб checar se o player estб na posiзгo da pista de skate ( local escolhido pro tutorial )

pawn Код:
stock IsPlayerInPSkate(playerid)
{
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid, x, y, z);
    if(x >= 1861.328 && y >= -1455.078 && x <= 1972.656 && y <= -1349.609) return 1;
    else return 0;
}

/*Exemplo de Uso:
Positivo:

if(IsPlayerInPSkate(playerid) return SendClientMessage(playerid, -1, "Vocк estб na pista de skate. legal!");

Negativo:

if(!IsPlayerInPSkate(playerid) return SendClientMessage(playerid, -1, "Vocк nгo estб na pista de skate. que pena!");

*/

5- Adicionando a GangZone
pawn Код:
// Colocar no OnFilterScriptInit / GameModeInit \/
    GzParque = GangZoneCreate(1861.328125, -1455.078125, 1972.65625, -1349.609375);
// X = 1861.328125,  Y= -1455.078125, Z = 1972.65625, xX = -1349.609375);

6-Agora deixe o "OnPlayerSpawn" O Seguitne cуdigo:

pawn Код:
public OnPlayerSpawn(playerid)
{
    GangZoneShowForAll(GzParque , 0xFF000096); // GangZoneShowForAll = Essa funзгo irб fazer com que todos que spanwarem no servidor irгo ver a gangzone que estб no parque.
    return 1;
}

7-Deixe o Seu onPlayerdeath da seguinte forma:

pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
    if(IsPlayerInPSkate(playerid)) // Isto irб checar se ele estб na pista de skate.
    {
        Dominando[playerid] = 0; // Aqui setarб que ele nгo estб mais dominando.
        AlguemDominando = 0; // Aqui vai setar que nгo tem niguem dominando a pista.
        ProvocouSkate[playerid] = 0; // Aqui jб vai setar que niguem provocou uma dominaзгo
    }
    return 1;
}

8-CallBack da Dominaзгo

pawn Код:
forward GuerraSkate(playerid); // Forward
public GuerraSkate(playerid) // Callback
{
    if(IsPlayerInPSkate(playerid)) // Irб checar se ele estб na pista
    {
        new string[100];
        GangZoneStopFlashForAll(GzParque); // Aqui irб parar de "Piscar" a gangzone em branco.
        GangZoneShowForAll(GzParque, GetPlayerColor(playerid)); // Aqui vai alterar a cor da gangzone para a cor do player que dominou ela.
        Dominando[playerid] = 0; // Vai setar que nгo O player nгo estб dominando a pista.
        ProvocouSkate[playerid] = 0; // Vai setar que o player nгo provocou nenhuma guerra na pista.
        AlguemDominando = 0; // Vai setar que nгo tem niguem dominando a pista de skate.
        KillTimer(TempoGuerraSkate);// Aqui zera o tempo de dominaзгo
        format(string, sizeof(string), "( GangZones ) %s conseguiu dominar a pista de skate!", GetName(playerid)); // Mensagem
        SendClientMessageToAll(Amarelo, string); // Mensagem
        SendClientMessage(playerid, Amarelo, "( Info - GZ ) Vocк dominou um territуrio e ganhou 200R$."); // Mensagem
        GivePlayerMoney(playerid, 200);// Aqui vai dar 200R$ Ao player por ter dominado a pista de skate..
    }
    else // Caso ele nгo esteja no local da dominaзгo ou seja na pista de skate.. a cor da gangzone vai voltar ao normal , padrгo = vermelho
    {
        GangZoneStopFlashForAll(GzParque);
        GangZoneShowForAll(GzParque, 0xFF000096); // Setando a cor da gangzone = Vermelho
    }
    return 1;
}

9- Comando

pawn Код:
CMD:dominar(playerid) // Comando
{
    if(IsPlayerInPSkate(playerid)) // vai checar se ele estб na pista de skate
    {
        if(Dominando[playerid] == 1) return SendClientMessage(playerid, Vermelho, "( Info ) Vocк jб estб dominando este territуrio"); // vai checar se o player jб estб dominando o territorio
        if(AlguemDominando == 1) return SendClientMessage(playerid, Vermelho, "( Info ) Alguem jб estб dominando este territуrio! Aguarde"); // vai checar se jб tem alguem dominando o territorio
        new string[100];
        Dominando[playerid] = 1;// setando que alguem comeзou a dominar a dominar a pista
        ProvocouSkate[playerid] = 1; // setando que alguem provocou uma guerra na psita..
        AlguemDominando = 1; // setando que alguem estб dominando a pista.
        format(string, sizeof(string), "( GangZones ) %s estб tentando dominar a pista de skate!", GetName(playerid)); // mensagem
        SendClientMessageToAll(Amarelo, string); // msg
        SendClientMessage(playerid, Amarelo, "( Info - GZ ) Vocк estб Dominando a Pista de Skate.. Aguarde 1 Minuto"); // mensagem
        TempoGuerraSkate = SetTimerEx("GuerraSkate", 60000, 0, "i", playerid); // tempo que irб aguardar atй a dominaзгo total da pista.. ( 1 minuto )
        GangZoneFlashForAll(GzParque, -1);// A GangZone Irб ficar piscando , vermelho & BRANCO
    }
    else
    {
        SendClientMessage(playerid, Vermelho, "Vocк nгo estб em nenhum territуrio!"); // Aqui vai mandar a mensagem caso ele nгo esteja em nenhum territуrio
    }
    return 1;
}

10 - GetName

pawn Код:
//Adicione esta stock no fim do seu gamemode / filterscript .. irб getar o nome do jogador com a funзгo = GetName(playerid);
stock GetName(playerid)
{
    new Name[24];
    GetPlayerName(playerid,Name,24);
    return Name;
}

Cуdigo completo pros preguiзosos que nгo vгo ler porra nenhuma.. '-'
pawn Код:
#include <a_samp>
#include <zcmd>

#define Vermelho            0xFF0000AA
#define Amarelo             0xFFFF00FF

new Dominando[MAX_PLAYERS], ProvocouSkate[MAX_PLAYERS], TempoGuerraSkate,
    AlguemDominando, GzParque;

stock IsPlayerInPSkate(playerid)
{
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid, x, y, z);
    if(x >= 1861.328 && y >= -1455.078 && x <= 1972.656 && y <= -1349.609) return 1;
    else return 0;
}

public OnFilterScriptInit()
{
    GzParque = GangZoneCreate(1861.328125, -1455.078125, 1972.65625, -1349.609375);
    return 1;
}

public OnPlayerSpawn(playerid)
{
    GangZoneShowForAll(GzParque , 0xFF000096);
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    if(IsPlayerInPSkate(playerid))
    {
        Dominando[playerid] = 0;
        AlguemDominando = 0;
        ProvocouSkate[playerid] = 0;
    }
    return 1;
}


forward GuerraSkate(playerid);
public GuerraSkate(playerid)
{
    if(IsPlayerInPSkate(playerid))
    {
        new string[100];
        GangZoneStopFlashForAll(GzParque);
        GangZoneShowForAll(GzParque, GetPlayerColor(playerid));
        Dominando[playerid] = 0;
        ProvocouSkate[playerid] = 0;
        AlguemDominando = 0;
        KillTimer(TempoGuerraSkate);
        format(string, sizeof(string), "( GangZones ) %s conseguiu dominar a pista de skate!", GetName(playerid));
        SendClientMessageToAll(Amarelo, string);
        SendClientMessage(playerid, Amarelo, "( Info - GZ ) Vocк dominou um territуrio e ganhou 200R$.");
        GivePlayerMoney(playerid, 200);
    }
    else
    {
        GangZoneStopFlashForAll(GzParque);
        GangZoneShowForAll(GzParque, 0xFF000096);
    }
    return 1;
}

CMD:dominar(playerid)
{
    if(IsPlayerInPSkate(playerid))
    {
        if(Dominando[playerid] == 1) return SendClientMessage(playerid, Vermelho, "( Info ) Vocк jб estб dominando este territуrio");
        if(AlguemDominando == 1) return SendClientMessage(playerid, Vermelho, "( Info ) Alguem jб estб dominando este territуrio! Aguarde");
        new string[100];
        Dominando[playerid] = 1;
        ProvocouSkate[playerid] = 1;
        AlguemDominando = 1;
        format(string, sizeof(string), "( GangZones ) %s estб tentando dominar a pista de skate!", GetName(playerid));
        SendClientMessageToAll(Amarelo, string);
        SendClientMessage(playerid, Amarelo, "( Info - GZ ) Vocк estб Dominando a Pista de Skate.. Aguarde 1 Minuto");
        TempoGuerraSkate = SetTimerEx("GuerraSkate", 60000, 0, "i", playerid);
        GangZoneFlashForAll(GzParque, -1);
    }
    else
    {
        SendClientMessage(playerid, Vermelho, "Vocк nгo estб em nenhum territуrio!");
    }
    return 1;
}

stock GetName(playerid)
{
    new Name[24];
    GetPlayerName(playerid,Name,24);
    return Name;
}
Crйditos: dPlaYer_ ( Yo Miesmo )

- Obrigado por ler saporra.
Reply
#2

Nice Nega Bandida
Reply
#3

Boa iniciativa!
Reply
#4

A intenзгo foi boa, mais para cada zone terei que criar um comando e
bilhares de callback's ?
Reply
#5

Quote:
Originally Posted by [Full]Garfield[XDB]
Посмотреть сообщение
A intenзгo foi boa, mais para cada zone terei que criar um comando e
bilhares de callback's ?
Ai somente mostra 1 ponto de dominaзгo...
Futuramente vou editar um com mais pontos de dominaзхes sem criar varias callbacks ^^'
Reply
#6

Gostei
Reply
#7

Quote:
Originally Posted by dPlaYer_
Посмотреть сообщение
pawn Код:
GzParque = GangZoneCreate(1861.328125, -1455.078125, 1972.65625, -1349.609375);
// X = 1861.328125,  Y= -1455.078125, Z = 1972.65625, xX = -1349.609375);
O certo й
pawn Код:
GzParque = GangZoneCreate(1861.328125, -1455.078125, 1972.65625, -1349.609375);
// minx = 1861.328125,  miny = -1455.078125, maxx = 1972.65625, maxy = -1349.609375);
GangZoneCreate(Float:minx, Float:miny, Float:maxx, Float:maxy);
Reply
#8

Valeu! Bom trabalho.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)