Sistema de Gang e GangZone + GameMode -
Dr_Pawno - 14.05.2011
[Tutorial/GameMode] Sistema de Gang e GangZone + GameMode
1. Criando as Gangs:
pawn Код:
new TeamGang[MAX_PLAYERS];//Esta serб a definiзгo da Gang do Jogador.
1.1 Colocando as Skins:
Para ver as Skins vб a
https://sampwiki.blast.hk/wiki/Skins.
Para pegar os ID's das Armas vб em
https://sampwiki.blast.hk/wiki/Weapons.
pawn Код:
public OnGameModeInit()
{
//Skins dos Balas:
AddPlayerClass(102, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
AddPlayerClass(103, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
AddPlayerClass(104, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
//Skins da Grove:
AddPlayerClass(105, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
AddPlayerClass(106, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
AddPlayerClass(107, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
//Skins dos Los Aztecas:
AddPlayerClass(114, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
AddPlayerClass(115, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
AddPlayerClass(116, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
//Skins dos Los Vagos:
AddPlayerClass(108, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
AddPlayerClass(109, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
AddPlayerClass(110, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
//Skins da San Fierro Rifa:
AddPlayerClass(173, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
AddPlayerClass(174, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
AddPlayerClass(175, 0, 0, 5, 0, 24, 300, 29, 300, 4, 1);
return 1;//Fim
}
Explicando o AddPlayerClass:
Код:
AddPlayerClass(Skin, Pos:X, Pos:Y, Pos:Z, Rot:Z, Arma1, Balas1, Arma2, Balas2, Arma3, Balas3);
1.2 Colocando o jogador na Gang:
pawn Код:
public OnPlayerRequestClass(playerid, classid)
{
if(classid >= 0 && classid <= 2)//De 0 б 2 sгo so Numeros das Skins, ou seja, os trкs primeiros AddPlayerClass.
{
TeamGang[playerid] = 0;//Colocarб o jogador na Gang 0, ou seja: Ballas.
}//Fim das Funзхes das skins dos ballas.
if(classid >= 3 && classid <= 5)//Grove
{
TeamGang[playerid] = 1;
}
if(classid >= 6 && classid <= 8)//Los Aztecas
{
TeamGang[playerid] = 2;
}
if(classid >= 9 && classid <= 12)//Los Vagos
{
TeamGang[playerid] = 3;
}
if(classid >= 13 && classid <= 15)//San Fierro Rifa
{
TeamGang[playerid] = 4;
}
SetPlayerTeam(playerid, TeamGang[playerid]+1);//Nгo permitirб que um parceiro mate o outro.
return 1;//Fim
}
1.3 Colocando o Spawn da Gang:
pawn Код:
public OnPlayerSpawn(playerid)//Quando o Jogador Spawna...
{
if(TeamGang[playerid] == 0)//Se: Gang do Jogador for 0(Ballas)
{
SetPlayerPos(playerid, 1939.1229, -1114.7427, 27.4522);//Colocarб o jogador na posiзгo.
SetPlayerFacingAngle(playerid, 179.6596);//Colocarб o jogador em uma rotaзгo.
}
if(TeamGang[playerid] == 1)//Grove
{
SetPlayerPos(playerid, 2495.3671, -1688.4191, 13.7943);
SetPlayerFacingAngle(playerid, 4.5339);
}
if(TeamGang[playerid] == 2)//Los Aztecas
{
SetPlayerPos(playerid, 2512.6210, -1027.8750, 70.0859);
SetPlayerFacingAngle(playerid, 180.7592);
}
if(TeamGang[playerid] == 3)//Los Vagos
{
SetPlayerPos(playerid, 1832.0184, -1995.9156, 13.5468);
SetPlayerFacingAngle(playerid, 82.2389);
}
if(TeamGang[playerid] == 4)//San Fierro Rifa
{
SetPlayerPos(playerid, -2624.3217, 1411.1578, 7.0937);
SetPlayerFacingAngle(playerid, 194.6358);
}
return 1;//Fim
}
Dicas:
Vocк pode colocar para as Gangs spawnarem com mais armas usando:
Код:
GivePlayerWeapon(playerid, ID, Balas);
Coloque este comando em seu GameMode para pegar posiзхes:
pawn Код:
if(strcmp(cmdtext, "/pos", true) == 0)
{
new Float:POS[4], string[256];
new vehicleid = GetPlayerVehicleID(playerid);
if(!IsPlayerInAnyVehicle(playerid))
{
GetPlayerPos(playerid, POS[0], POS[1], POS[2]);
GetPlayerFacingAngle(playerid, POS[3]);
}
else
{
GetVehiclePos(vehicleid, POS[0], POS[1], POS[2]);
GetVehicleZAngle(vehicleid, POS[3]);
}
format(string, sizeof(string), "X = %f, {FFFFFF}Y = %f, {FF0000}Z = %f, {0066FF}R = %f, {FFFF00}INT: %d", POS[0], POS[1], POS[2], POS[3], GetPlayerInterior(playerid));
SendClientMessage(playerid, 0x00FF00AA, string);
return 1;
}
2. Criando as GangZones:
pawn Код:
#define BALLAS_COLOR 0xFF00FFAA
#define GROVE_COLOR 0x00FF00AA
#define AZTECAS_COLOR 0x00FFFFAA
#define VAGOS_COLOR 0xFFFF00AA
#define RIFA_COLOR 0x0000FFAA
new GangName[5][] = {//Aqui irei colocar os nomes de 5 Gangs:
{"Ballas"},//Nome da Gang 1
{"Grove Street"},//Nome da Gang 2
{"Varios Los Aztecas"},//Nome da Gang 3
{"Los Santos Vagos"},//Nome da Gang 4
{"San Fierro Rifa"}//Nome da Gang 5
};//Fim dos Nomes
new GZParque,//Para definir a GangZone.
GZPista;//Para definir a GangZone.
new Dominando[MAX_PLAYERS];//Para impedir o jogador de dominar 2 GangZones ao mesmo tempo.
new ParqueSendoDominado,//Para verificar se o parque glen jб esta sendo dominado.
PistaSendoDominada;//Para verificar se a pista de skate jб esta sendo dominada.
new DonoParque = 99,//Para colocar a cor no parque.
DonoPista = 99;//Para colocar a cor na pista.
forward DominarParque(playerid);
forward DominarPista(playerid);
2.1 Como pegar:
Use o comando de pegar posiзхes e pegue:
1°: Baixo e do lado esquerdo.
2°: Cima e do lado Direito.
Como na Imagem:
2.2 Colocando-a no GameMode:
pawn Код:
public OnGameModeInit()
{
GZParque = GangZoneCreate(1876.7298, -1145.8150, 2056.8627, -1250.8861);//Parque Glen
GZPista = GangZoneCreate(1862.1929, -1351.2478, 1976.6811, -1450.5447);//Pista de Skate
return 1;//Fim
}
Explicando o GangZoneCreate:
Код:
GangZoneCreate(MIN_Pos:X, MIN_Pos:Y, MAX_Pos:X, MAX_Pos:Y);
Ou seja: Nгo inclui uma Pos:Z.
2.3 Criando um Verificador de Cor e de Posiзхes:
pawn Код:
stock GetGangColor(gang)
{
if(gang == 0)
{
return BALLAS_COLOR;
}
if(gang == 1)
{
return GROVE_COLOR;
}
if(gang == 2)
{
return AZTECAS_COLOR;
}
if(gang == 3)
{
return VAGOS_COLOR;
}
if(gang == 4)
{
return RIFA_COLOR;
}
return 1;
}
stock IsPlayerInParqueGlen(playerid)
{
new Float:X,
Float:Y,
Float:Z;
GetPlayerPos(playerid, X, Y, Z);//Pega a Posiзгo.
if(X >= 1876.7298 && Y >= -1145.8150 && X <= 2056.8627 && Y <= -1250.8861)//Verifica se ele esta na GangZone.
{
return 1;//Isto significa que ele ESTA na GangZone.
}
return 0;//Isto significa que ele NГO ESTA na GangZone.
}
stock IsPlayerInPistaDeSkate(playerid)
{
new Float:X,
Float:Y,
Float:Z;
GetPlayerPos(playerid, X, Y, Z);
if(X >= 1862.1929 && Y >= -1351.2478 && X <= 1976.6811 && Y <= -1450.5447)
{
return 1;
}
return 0;
}
Como Fazer:
Pegue a Sua GangZone, Ex:
Код:
GangZoneCreate(1876.7298, -1145.8150, 2056.8627, -1250.8861);//Parque Glen
E copie este codigo:
pawn Код:
stock IsPlayerInGangZone(playerid)
{
new Float:X,
Float:Y,
Float:Z;
GetPlayerPos(playerid, X, Y, Z);
if(X >= 1 && Y >= 2 && X <= 3 && Y <= 4)
{
return 1;
}
return 0;
}
Onde esta o 1, vocк ira pegar a 1° parte do GangZoneCreate, no caso,
1876.7298, onde esta o 2, vocк ira pegar a 2° parte do GangZoneCreate, no caso,
-1145.8150. E assim por diante.
2.4 Mostrando a GangZone:
pawn Код:
public OnPlayerSpawn(playerid)
{
if(DonoParque == 99)
{
GangZoneShowForPlayer(playerid, GZParque, 0x666666AA);
}
if(DonoParque != 99)
{
GangZoneShowForPlayer(playerid, GZParque, GetGangColor(DonoParque));
}
if(DonoPista == 99)
{
GangZoneShowForPlayer(playerid, GZPista, 0x666666AA);
}
if(DonoPista != 99)
{
GangZoneShowForPlayer(playerid, GZPista, GetGangColor(DonoPista));
}
return 1;
}
2.5 Criando o Comando:
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
new string[256], sendername[MAX_PLAYERS];
GetPlayerName(playerid, sendername, sizeof(sendername));
if(!strcmp("/do", cmdtext, true) || !strcmp("/dominar", cmdtext, true))//Se: O comando digitado for /do ou /dominar...
{
if(IsPlayerInParqueGlen(playerid))//Se: Jogador no Parque Glen...
{
if(Dominando[playerid] != 0)//Se: Dominando nгo for igual a 0.
{
SendClientMessage(playerid, 0x666666FF, "Vocк jб esta dominando uma GangZone.");//Mensagem de Erro.
return 1;//Termina o Comando.
}
if(ParqueSendoDominado != 0)//Se: O parque esta sendo dominado...
{
SendClientMessage(playerid, 0x666666FF, "O Parque Glen jб esta sendo dominado.");//Mensagem de Erro.
return 1;//Termina o Comando.
}
if(DonoParque == TeamGang[playerid])//Se: O Parque for da Gang do Jogador...
{
SendClientMessage(playerid, 0x666666FF, "O Parque Glen jб й da sua Gang.");//Mensagem de Erro.
return 1;//Termina o Comando.
}
format(string, sizeof(string), "O Jogador %s da Gang %s esta dominando o Parque Glen.", sendername, GangName[TeamGang[playerid]]);//Cria um Texto com o Nome e Gang do jogador
SendClientMessageToAll(0x007700FF, string);//Envia o Texto para todos
GangZoneFlashForAll(GZParque, GetGangColor(TeamGang[playerid]);//Faz a GangZone ficar piscando com a cor da gang do jogador que irб dominar
SetTimerEx("DominarParque", 30000, false, "i", playerid);//Executar uma funзгo depois de 30 segundos
ParqueSendoDominada = 1;//Nгo permite o parque ser dominado
Dominando[playerid] = 1;//Nгo permite o jogador dorminar outra gang zone
return 1;//Termina o Comando.
}
else if(IsPlayerInPistaDeSkate(playerid))
{
if(Dominando[playerid] != 0)
{
SendClientMessage(playerid, 0x666666FF, "Vocк jб esta dominando uma GangZone.");
return 1;
}
if(PistaSendoDominada != 0)
{
SendClientMessage(playerid, 0x666666FF, "A Pista de Skate jб esta sendo dominado.");
return 1;
}
if(DonopPista == TeamGang[playerid])
{
SendClientMessage(playerid, 0x666666FF, "A Pista de Skate jб й da sua Gang.");
return 1;
}
format(string, sizeof(string), "O Jogador %s da Gang %s esta dominando a Pista de Skate.", sendername, GangName[TeamGang[playerid]]);
SendClientMessageToAll(0x007700FF, string);
GangZoneFlashForAll(GZPista, GetGangColor(TeamGang[playerid]);
SetTimerEx("DominarPista", 30000, false, "i", playerid);
PistaSendoDominada = 1;
Dominando[playerid] = 1;
return 1;
}
else//Se o Jogador nгo estivem em nem uma gang zone...
{
SendClientMessage(playerid, 0x666666FF, "Vocк nгo esta em uma GangZone.");
return 1;
}
}
return SendClientMessage(playerid, 0xFFFFFFFF, "Comando Invalido.");//Fim.
}
2.6 30 Segundos Depois do Comando:
pawn Код:
public DominarParque(playerid)
{
if(IsPlayerConnected(playerid))
{
new string[256], sendername[MAX_PLAYER_NAME];
GetPlayerName(playerid, sendername, sizeof(sendername));
if(IsPlayerInParqueGlen(playerid))
{
GangZoneShowForAll(GZParque, GetGangColor(TeamGang[playerid]));//Coloca a GangZona com a cor da Gang
DonoParque = TeamGang[playerid];//Muda o Dono do Parque para a Gang do Jogador
format(string, sizeof(string), "O Jogador %s da Gang %s dominou o Parque Glen.", sendername, GangName[TeamGang[playerid]]);//Cria um texto com o nome do jogador e a gang
SendClientMessageToAll(0x007700FF, string);//Manda o texto para todos
}
else
{
format(string, sizeof(string), "O Jogador %s da Gang %s nгo dominou o Parque Glen.", sendername, GangName[TeamGang[playerid]]);
SendClientMessageToAll(0x007700FF, string);
}
}
ParqueSendoDominado = 0;//Permite o Parque ser dominado novamente
Dominando[playerid] = 0;//Permite o Jogador dominar novamente
GangZoneStopFlashForAll(GZParque);//Para de Piscar
return 1;
}
public DominarPista(playerid)
{
if(IsPlayerConnected(playerid))
{
new string[256], sendername[MAX_PLAYER_NAME];
GetPlayerName(playerid, sendername, sizeof(sendername));
if(IsPlayerInPistaDeSkate(playerid))
{
GangZoneShowForAll(GZPista, GetGangColor(TeamGang[playerid]));
DonoPista = TeamGang[playerid];
format(string, sizeof(string), "O Jogador %s da Gang %s dominou a Pista de Skate.", sendername, GangName[TeamGang[playerid]]);
SendClientMessageToAll(0x007700FF, string);
}
else
{
format(string, sizeof(string), "O Jogador %s da Gang %s nгo dominou a Pista de Skate.", sendername, GangName[TeamGang[playerid]]);
SendClientMessageToAll(0x007700FF, string);
}
}
PistaSendoDominada = 0;
Dominando[playerid] = 0;
GangZoneStopFlashForAll(GZPista);
return 1;
}
Caso esteja com preguiзa de fazer todo esses sistema para testar baixe! (Link Abaixo)
https://rapidshare.com/files/3610642977/GangZone.RAR
Tutorial totalmente feito por mim.
Qualquer semelhanзa com outro tutorial serб uma pura coincidкncia.
Re: Sistema de Gang e GangZone -
Transferencia - 15.05.2011
Bom tutorial Mano,Explicado e talz..agora so falta Explica pros Novatos para que server as funзoes
tipo
GangZoneShowForAll(GZPista, GetGangColor(TeamGang[playerid])); ...Faz a GzPista Piscar para todos... e talz..
Re: Sistema de Gang e GangZone -
Dr_Pawno - 15.05.2011
Mais esta quase tudo (90%) assim, e o GangZoneShowForAll esta com descriзгo, so que apenas no 1°(Parque) codigo.
pawn Код:
GangZoneShowForAll(GZParque, GetGangColor(TeamGang[playerid]));//Coloca a GangZona com a cor da Gang
Re: Sistema de Gang e GangZone -
[AF]Junior - 15.05.2011
Cara aleluia um tutorial assim. Quando eu estiver com tйdio e paciкncia (domingo) eu faзo. Belo tutorial.
Re: Sistema de Gang e GangZone -
Dr_Pawno - 15.05.2011
Й difнcil encontrar alguem com paciкncia o suficiente para criar um tutorial tгo grande e bem explicado como esse '-'№.
E ainda coloquei GameMode '-'І.
Re: Sistema de Gang e GangZone -
Delete_ - 15.05.2011
tutorial ficou show vlw.
www.comabtesanfierro.blogspot.com
Re: Sistema de Gang e GangZone -
[NWD]Jim._.Carrey - 15.05.2011
Ficou bom o tutorial, parabйns ;]
Re: Sistema de Gang e GangZone -
Dr_Pawno - 15.05.2011
Vlw delete e [NWD]Jim._.Carrey!
Re: Sistema de Gang e GangZone -
TheGarfield - 15.05.2011
nice joab ms.pawno.
Re: Sistema de Gang e GangZone - [S]trong - 15.05.2011
IsPlayerInParqueGlen godfather bom, poderia melhorar como colocar qual a gang dona da zone, e usar boolean em algumas das vars mas fora isso ficou bem explicado parabйns.