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

21 de dez. de 2012.
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 :
pawn Code:
#include <a_samp> #include <zcmd>
2- Depois de adicionar as includes, Iremos definir as cores.
pawn Code:
#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 Code:
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 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!"); */
5- Adicionando a GangZone
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);
6- Agora deixe o "OnPlayerSpawn" o seguinte código:
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; }
7- Deixe na Callback onPlayerdeath da seguinte forma: 
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; }
8- CallBack da Dominação
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; }
Código completo:
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