[TUT] Criando Um Gang War Simples

E ai pessoal Do HomeHots beleza? Nesse tutorial vou explicar como fazer um gang war bem simples, ou seja, não vai ter gang zones, nem sistema de salvar score e dinheiro, nem minigames, nem nada de muit avançado, só para todos terem uma base.

1.:: Criando gangs ::.

No topo do seu gamemode você precisa definir a gang e o id dela:

#define GROVE 1 // o id da gang GROVE vai ser 1
#define BALLAS 2

Ainda no topo do gamemode você precisa criar uma array para setar a gang no seu gamemode:

new Gang[MAX_PLAYERS];

No OnGameModeInit você precisa colocar todos os AddPlayerClass, vamos por como exemplo a skin da grove em primeiro:

AddPlayerClass(107,2478.2656,-1633.4364,13.4048,183.2906,24,120,25,150,28,999); //grove

Agora no OnPlayerRequestClass você precisa fazer com que a skin da grove seja da grove:

if(classid == 0) // como a primeira skin é da grove vamos colocar o numero zero aqui que significa que se você escolher a primeira skin você irá ser da gang da grove
{
Gang[playerid] = GROVE; //seta a gang, por isso criamos aquela array você pode usar o numero dela também que é 1
GameTextForPlayer(playerid,"grove",6000,6); // aparece o nome da gang quando você estiver na skin da grove
}
else if(classid == 1) //segunda skin dos AddPlayerClass
{
Gang[playerid] = BALLAS; //seta a gang ballas
GameTextForPlayer(playerid,"ballas",6000,6); nome da gang na tela
}
return 1;
}

Agora no OnPlayerRequestSpawn você precisa fazer com que cada gang tenha uma cor própria:

if(Gang[playerid] == GROVE)// se o time for grove a cor será verde
{
SetPlayerColor(playerid, 0x33AA33AA);//seta a cor verde em hexadecimal
}
else if(Gang[playerid] == BALLAS)//se o time for ballas a cor será roxo
{
SetPlayerColor(playerid, 0x9900FFAA);//seta a cor roxo em hexadecimal
}

Pronto já está criada suas gangs!

2.:: Criando comando de mostrar status(kills,mortes,teamkills) do player::.

No topo do seu gamemode crie uma array para armazenar os assassinatos que o player fez:

new Kills[MAX_PLAYERS];

Agora para mortes:

new Mortes[MAX_PLAYERS];

Agora para Team Kills:

new TK[MAX_PLAYERS];

Agora vamos fazer o comando. No OnPlayerCommandText crie o comando que vai mostrar os status do player:

if (strcmp("/status", cmdtext, true, 10) == 0) // quando alguem digitar /status vai aparecer todos os status no chat
{
new stringkills[256]; //string para mostrar o numero de kills na mensagem
new stringmortes[256]; //string para mostrar o numero de mortes na mensagem
new stringtk[256]; //string para mostrar o numero de Tema Kills na mensagem
SendClientMessage(playerid,COR_VERDE,"Seus status:");
format(stringkills,sizeof(stringkills),"Kills: %d", Kills[playerid]); //no %d vai aparecer o numero de kills que você fez
SendClientMessage(playerid,0xFF9933AA, stringkills); // faz com que mostre no chat a mensagem que foi feita a cima por meio da string de kills
format(stringmortes,sizeof(stringmortes),"Mortes: %d", Mortes[playerid]); // o mesmo que a mensagem anterior
SendClientMessage(playerid, 0xFF9933AA, stringmortes);// o mesmo que a mensagem anterior
format(stringtk,sizeof(stringtk),"Team Kills: %d", TK[playerid]);// o mesmo que a mensagem anterior
SendClientMessage(playerid, 0xFF9933AA, stringtk);// o mesmo que a mensagem anterior
return 1;
}

*OBS: Para aumentar o numero de kills, mortes e Team Kills, leia o 3º passo que estará explicando.

3.:: Criando sistema de Anti Team Kill::.

Como em todo gang war sempre tem o palhaço que mata alguem da própria gang. Agora veremos como fazer um sistema de Anti Team Kill que quando o jogador matar alguem da própria gang ele vai ser teleportado para prisão e ficará lá até ser morto por causa de tanta porrada que vai levar dos outros presos.

Agora no OnPlayerDeath precisamos criar o sistema:

Mortes[playerid]++; //se o player morrer os status de mortes dele aumenta +1
if(killerid == INVALID_PLAYER_ID) {
SendDeathMessage(INVALID_PLAYER_ID,playerid,reason); // aparece quem matou, com o que e quem morreu
}
else if(Gang[playerid] == Gang[playerid]) // verifica se quem morreu é da mesma gang, se for ele será preso
{
SendClientMessage(killerid, 0xFF0000AA, "Não mate pessoas da mesma time que você! Você vai ficar preso até morrer"); // mesagem que vai ser enviada para o assassino
SetPlayerPos(killerid, 263.7945,77.4532,1001.0391); //isso teleportará o assassino até uma cela fexada na prisão
SetPlayerScore(killerid,GetPlayerScore(killerid) -1); // o score dele diminue -1
GivePlayerMoney(killerid, -500); // ele perde -500 de dinheiro
TK[killerid]++; //os status de team kill do assassino aumenta +1
Mortes[playerid]++;//aumenta os status de mortes do player que morreu em +1
}
else if(Gang[playerid] != Gang[playerid]) // caso o player tenha matado outro player que NÃO seja da mesma gang que ele, ele ganhará +1 de score e $500
{
SetPlayerScore(killerid,GetPlayerScore(killerid) +1); // aumenta o score do assassino em +1
GivePlayerMoney(killerid, 500);//aumenta o dinheiro do assassimo em $500
Kills[killerid]++;// aumenta os status de assassinatos do assassino em +1
Mortes[playerid]++;//aumenta os status de mortes do player que morreu em +1
}

E está pronto nosso gang war simples! Espero que tenha ajudado muita gente.

LEMBRANDO: Esse tutorial explica como fazer um gang war simples, é apenas para dar uma base de como fazer um melhor ainda que esse!

Bizu Empremento Algumas Coisas
Feito por: Cronos