(TUT) Criando GangZones Domináveis | Versão 3.0

Introdução::

lá neste tutorial ensinarei a criar Gang Zones,não será como os tutoriais anteriores,neste tutorial usaremos 1 public para todas gang,assim não necessitando criar centenas de publics para um simples domínio, e sim um array onde armazenará tudo,eficiente,rápido,simples e fácil.

Para iniciarmos necessita que criem 2 Arrays,uma contendo as coordenadas das Gang Zones e outra contendo os nomes.

Colocando elas::


Topo GM:


pawn Código:
#define GZS_CRIADAS 4
Número de Gang Zones que serão criadas

Logo Abaixo:
Nome das GangZones (Nicks de players da FeK)


pawn Código:
new GZCriadas[GZS_CRIADAS]; new NomesGZs[GZS_CRIADAS][] = { "[FeK]DraKiNs",//1 "[FeK]Higor",//2 "[FeK]Vitor",//3 "[FeK]RockManN"//4  OBS: Último sem vírgula };
[GZS_CRIADAS] = Número de Gang Zones
new GZCriadas = Array que irá armazenar no loop para criar as Gang Zones,posteriormente.
Obs: O último não deve conter Virgula ,

Agora vamos criar a Array onde armazenará coordenadas das Gang Zones

Logo Abaixo da Array acima

pawn Código:
new CordGZs[GZS_CRIADAS][4] = {   {2217,1901,2333,2013}, // [FeK]DraKiNs {1875,641,1978,764}, // [FeK]Higor {-2201,-281,-2011,-80}, // [FeK]Vitor {-2015,1375,-1799,1601} // [FeK]RockManN };
[GZS_CRIADAS] = Números de Gang Zones
[4] = Número de Coordendas (x,y,x,y) [DEIXE 4 SEMPRE]



Criando elas::

Agora em OnGameModeInit vamos executar a criação da Gang Zones:


pawn Código:
for (new i = 0; i <GZS_CRIADAS; i++) // Loop {      GZCriadas[i] = GangZoneCreate(CordGZs[i][0], CordGZs[i][1], CordGZs[i][2], CordGZs[i][3]);      printf("Gang Zone %s Criada com sucesso",NomesGZs[i]);     }
printf = Irá imprimir no console os nomes das Gang Zones que serão criadas,esta função é importante para checar se a gang zone foi criada ou não.
GangZoneCreate = Irá criar as gang zones,com base nas coordenadas definidas anteriormente.

Mostrando elas :
Para mostrar usamos o mesmo que criar,com loop e tudo.

EM OnPlayerSpawn

pawn Código:
for (new i = 0; i <GZS_CRIADAS; i++) // Loop {      GangZoneShowForPlayer(GZCriadas[i],COR_INICIAL_AQUI);      printf("Gang Zone %s Criada com sucesso",NomesGZs[i]);     }
Checando Área do Player::

Para checar a Área do player nessessitaremos de uma simples Stock chamada IsPlayerInArea

Ou até mesmo use esta minha,ela checa se o player esta em alguma Gang Zone


pawn Código:
stock IsAreaInGangCheck(playerid) {              new Float:x, Float:y, Float:z;      GetPlayerPos(playerid, x, y, z);      for (new i=0; i < GZS_CRIADAS; i++)       if (x > CordGZs[i][0] && y > CordGZs[i][1] && x < CordGZs[i][2] && y < CordGZs[i][3]&& z < 500) return true;      return false; }

Esta stock checa se X,Y estão igual as coordenadas da Gang Zone através da Amplitude e checa se a Altura for menor que 500 para poder iniciar domínio.

Agora usando o comando em OnPlayerCommandText:

Dominando elas::

pawn Código:
if(!strcmp(cmdtext, "/dominar", true)) {     if(!IsAreaInGangCheck(playerid)) SendClientMessage(playerid, 0xFFFFFFFF, "SERVER: Você não está em nenhuma Gang Zone,FAIL");     new Float:x, Float:y, Float:z;     GetPlayerPos(playerid, x, y, z);     new name[MAX_PLAYER_NAME], string[44];     GetPlayerName(playerid, name, sizeof(name));     for (new i=0; i < GZS_CRIADAS; i++)     if (x > CordGZs[i][0] && y > CordGZs[i][1] && x < CordGZs[i][2] && y < CordGZs[i][3]&& z < 500) {         format(string, sizeof(string), "%s começou a dominar a gang zone %s.",name,NomesGZs[i]);     }     SendClientMessageToAll(0xFFFF00AA, string);     GangZoneFlashForAll(GZCriadas[i], GetPlayerColor(playerid))         SetTimer("Terminar",60000,false);     return 1; }

Este comando detecta se o player estiver na área,caso estiver irá pegar o nome da gang zone que ele esta e comecará a fazer ela piscar com sua cor,com isso iniciará um timer que chamará essa função:


pawn Código:
forward Terminar(playerid); public Terminar(playerid) {     if(!IsAreaInGangCheck(playerid)) {         SendClientMessageToAll(0xFFFF00AA, "Não consiguiram dominar o território");     }     new Float:x, Float:y, Float:z;     GetPlayerPos(playerid, x, y, z);     new name[MAX_PLAYER_NAME], string[44];     GetPlayerName(playerid, name, sizeof(name));     for (new i=0; i < GZS_CRIADAS; i++)     if (x > CordGZs[i][0] && y > CordGZs[i][1] && x < CordGZs[i][2] && y < CordGZs[i][3]&& z < 500) {         format(string, sizeof(string), "%s conseguiu dominar %s.",name,NomesGZs[i]);         GangZoneStopFlashForAll(GZCriadas[i]);     }     SendClientMessageToAll(0xFFFF00AA, string);     return true; }
está public checa se o player está na área,caso não estiver = Perdeu se Estiver = Ganhou



CREDITOS PARA: [FeK]DraKiNs], [FeK]Squad.

COMPARTILHE

VEJA TAMBÉM

Próxima
« Anterior
Anterior
Próximo »