Este tutorial sobre como criar um sistema dominável via comandos.
Vamos ao tutorial!
Irei usar a Pista de Skate como Ponto de Dominio.
1- Iremos adicionar as includes :
2- Depois de adicionar as includes, Iremos definir as cores.
3- Iremos Criar as news necessárias , incluindo a da criação da gangzone e a das variaveis da dominação
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 )
5- Adicionando a GangZone
6- Agora deixe o "OnPlayerSpawn" o seguinte código:
7- Deixe na Callback onPlayerdeath da seguinte forma:
8- CallBack da Dominação
9- Comando:
10- GetName
Código completo:
Irei usar a Pista de Skate como Ponto de Dominio.
pawn Code:
#include <a_samp> #include <zcmd>
pawn Code:
#define Vermelho 0xFF0000AA #define Amarelo 0xFFFF00FF
pawn Code:
new Dominando[MAX_PLAYERS], ProvocouSkate[MAX_PLAYERS], TempoGuerraSkate, AlguemDominando, GzParque;
pawn Code:
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!"); */
pawn Code:
// 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);
pawn Code:
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; }
pawn Code:
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; }
pawn Code:
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 Code:
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 Code:
//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; }
pawn Code:
#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)
0 comentários:
Postar um comentário