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
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 };
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 };
[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]); }
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]); }
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; }
CREDITOS PARA: [FeK]DraKiNs], [FeK]Squad.