TUT] Sistema de Gangs (/gang criar)


Antes vou dizer que o Tutorial esta muito bem explicado, só precisa prestar atenção nos comentários dentro do Código, se tiver algum erro comunique-me por PM, caso contrario esta me incentivando cada vez mais de parar de fazer tutos!
Bom vou postar aqui um tutorial inédito de como criar um sistema de Gang Criáveis..
Primeiramente Vamos definir algumas coisinhas para posteriormente fazermos as Gangs, Lembrando que usarei SetPlayerTeam portando teremos o AntiTeamKill Feito já
Topo GM:

pawn Code:
#define MAX_GANGS 32 #define MAX_GANG_PLAYERS 16 #define SEM_GANG 0
Nesta duas Diretivas acima iremos definir o número máximo que o Loop para criar Gang pode chegar (32) e o numero máximo de players em uma gang (16), enquanto a SEM_GANG é a diretiva dos players que serão sem gang (0)

Vamos agora fazer as Arrays para a Gang:
Ainda no Topo:

pawn Code:
new gangInvite[MAX_PLAYERS]; new PlayerInGang[MAX_PLAYERS]; new gangMembers[MAX_GANGS][MAX_GANG_PLAYERS];//Array para Enviar Mensagem posteriormente
Essa Array será usada para definir se o player esta pronto ou não para entrar para Gang, e a Array 'PlayerInGang' é para ver o ID da gang do player...
Claro que isso pode ser substituido por PVARS para ficar mais otimizado,enfim.


Em OnGameModeInit

pawn Code:
if(!dini_Exists(Archivo)) { dini_Create(Archivo); dini_IntSet(Archivo, "GangsCreates", 0); }
[i] Isso daqui cria o Arquivo para fazer o ID da Gang Posteriormente

Agora vamos ao comando em
OnPlayerCommandTex:
GangEntrar:

pawn Code:
new cmd[128], idx; cmd = comandos(cmdtext, idx); if(strcmp(cmd, "/gangentrar", true) == 0) { if(PlayerInGang[playerid]==0 && gangInvite[playerid] != 0) //Se o Convite for Diferente de '0' que seria a gang padrao e ele estiver fora da gang { SetPlayerTeam(playerid,gangInvite[playerid]); // coloca na gang como definido anteriormente SendClientMessage(playerid, 0xFFFFFFFF, "você foi entrou na gang"); PlayerInGang[playerid] = GetPlayerTeam(playerid); gangInvite[playerid] = 0;//Reseta o Convite } return 1; }


Enfim
Vamos ao Convite:

pawn Code:
if(strcmp(cmd, "/gangconvite", true) == 0) { new tmp[128]; tmp = comandos(cmdtext, idx); if(strlen(tmp) == 0) return SendClientMessage(playerid, 0xFFFFFFFF, "Uso do Comando: /gangconvite[ID]"); SendClientMessage(playerid, 0xFFFFFFFF, "você foi convidado a entrar em uma gang"); gangInvite[strval(tmp)] == PlayerInGang[playerid];//Habilita Convite para o ID da Gang return 1; }

Primeiramente vamo
criar um Loop para definir o ID da Gang
Esse será o
comando de criar a gang, claro que ele nunca salvará o nome da Gang apenas o ID dela porém você pode fazer um jogo de 'salvamento' e salvar o ID da Gang em um arquivo com Nome dela, Veja Abaixo..

pawn Code:
if(strcmp(cmd, "/gangcriar", true) == 0) { new tmp[128]; tmp = comandos(cmdtext, idx); if(PlayerInGang[playerid]>0)//Se o player estive em uma gang { return SendClientMessage(playerid, 0xFF8040FF, " Já estás em uma gang");; } new i;//define id da gang i= dini_Int("Gang.ini", "GangsCreates")+1;//define id da gang new string[128]; format(string, sizeof(string),"Você criou a gang: '%s' (%d)", tmp, i);//Irá Enviar MSG que a gang foi criada com ID SendClientMessage(playerid, 0xFF8040FF, string);//Envia MSG PlayerInGang[playerid]=i;//Irá Colocar o Player na Gang SetPlayerTeam(playerid,PlayerInGang[playerid]);//Seta o Player a Uma Gang a Ativa Anti TK return 1; }


pawn Code:
new file[64]; format(file, sizeof(file), "%d.ini", GetPlayerTeam(playerid));// Salva Arquivo com ID_DA_GANG.ini dini_Create(file); dini_Set(file,"Nome",tmp);//Salvara Nome da Gang
Então para Carregar:

pawn Code:
stock ler_nome(gangid) { new arquivo[128]; format(arquivo,sizeof(arquivo),"%i.ini",gangid); format(arquivo,sizeof(arquivo),dini_Get(arquivo,"Nome")); return arquivo; }
então basta fazer

pawn Code:
ler_nome(GetPlayerTeam(playerid));//Lê o nome da gang em arquivo

Agora Vamos Criar o
Chat da Gang:


pawn Code:
public OnPlayerText(playerid, text[]) { if(text[0] == '!') {//Se Tiver '!' new string[128]; GetPlayerName(playerid,string,sizeof(string));//Geta Nome format(string,sizeof(string),"Gang Chat: %s: %s",string,text[1]);//Formato da Mensagem SendMessageToGang(playerid,0xFFFFFFFF,string);//Envia Mensagem } return 0; }

Agora a
Stock que Envia Mensagem para a Gang Internamente:

pawn Code:
stock SendMessageToGang(playerid,color,const msg[]) { for (new i=0; i<MAX_GANG_PLAYERS; i++)//Pega os Membros da Gang { if (IsPlayerConnected(i) && PlayerInGang[playerid] > 0)//se tiver conectado e for de um gang { SendClientMessage(gangMembers[GetPlayerTeam(playerid)][i],color,msg);//Envia MSG para os mesmos da gang } } return 1; }

Agora Final GM:


pawn Code:
comandos(const string[], &index)//essa é a strtok modificada para não dar complicados com outras { new length = strlen(string); while ((index < length) && (string[index] <= ' ')) { index++; } new offset = index; new result[20]; while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1))) { result[index - offset] = string[index]; index++; } result[index - offset] = EOS; return result; }


Pois bem este é o Fim, espero que tenham gostado,
Créditos a DraKoN

Se quiserem saber como faz as
Gang Zones Dominaives basta acessar aqui:

http://forum.sa-mp.com/showthread.php?t=143646

Eu Fiz o TUTO Usando gTeams para ser compactível com outros assim como do andmeida10

StumbleDiggTechnoratiRedditDelicious