[Pedido] Orgs ou Empregos
#1

Bom galera eu rodei, pra caraca tentei adaptar alguams coisas e nada, йo seguinte eu tavo querendo uma org ou entгo uma profissгo que eu tenho um server de bmx e queria por, uma org ou profissгo privada que sу os melhroes entrasse exemplo nome da org sera Profissionais que sу os profissionais vao entrar... alguem tem uma ideia ou link de algum topico como fazer isso ?
Reply
#2

mas como assim oque os membros dessa org profissao vao fazer?
Reply
#3

Tipow eles vгo ser profissionais vгo ter prioridade de pistas de bmx que outros player nгo vгo ter, se voce tiver alguma coisa de contato skype e pa, passe ficara mas facil...
Reply
#4

Quote:
Originally Posted by Josma_cmd
Посмотреть сообщение
================================================== ================================================

Bom, vim em resposta a este tуpico criar um tutorial completo de como fazer orgs/profissхes/gangs em seu GameMode RPG.

Нndice

● Criar orgs com cargos
● Criar veiculos para orgs
● Criar comando /membros
● Criar comandos para lнderes /convidar /promover /demitir
● Banco de dados para salvamento de orgs
● Criar cores paras orgs

Necessбrio

● Saber utilizar strtok
● Saber utilizar variбveis
● Saber utilizar operadores
● Saber utilizar database(No caso usaremos dini).

Bom, antes de tudo quero esclarecer que este nгo й um cуdigo ъtil e sim um tutorial, nгo copie e edite, leia, entenda e crie seu sistema.

Parte 1, criando suas organizaзхes: Bom, decidi sair do velho esquema rotineiro de orgs do GF, entгo nosso enum serб diferente, o enum cria arrays dentro de arrays, fazendo juz ao nome, enumйricos ou enumerados, o enum funciona quase como o new, vocк pode criar vбrias variбveis a partir dele utilizando vнrgula para separar umas das outras, irei criar aqui 3 organizaзхes como exemplo neste enum.

pawn Код:
enum Info
{
    PMilitar,
    Groove,
    Ballas
};
Nгo й obrigatуrio e tambйm nгo faz diferenзa a utilizaзгo de vнrgula na ultima variбvel da enum, eu nгo coloco mas isso й uma opзгo de cada um, enfim, o enum criado precisaremos de uma variбvel como tipo de dados para podermos usa-la em diferentes situaзхes e para diferentes players, para isso usaremos o MAX_PLAYERS que no caso cria uma variбvel para cada ID de player, o MAX_PLAYERS й equivalente a 500 entгo й aconselhбvel que vocк crie uma diretiva no inнcio do GM definindo o numero de slots que seu servidor usa, logo apуs, utilize essa diretivo no lugar do MAX_PLAYERS prй definido no a_samp.
pawn Код:
new PlayerInfo[MAX_PLAYERS][Info];
Como podem perceber acima criei a variбvel PlayerInfo, o nome й de sua preferencia, esta variбvel tem o valor MAX_PLAYERS, ou seja, poderei usar em diversas ocasiхes utilizando playerid, giveplayerid ou qualquer outro tipo de variбvel que acumule o id de um player, na outra array eu utilizo o enum Info, assim poderemos usar qualquer uma das variбveis disponнveis no enum.

Parte 2, entrando nas organizaзхes: Bom, criada as organizaзхes, agora deveremos entrar nelas, pra isso iremos fazer 3 comandos, /Convidar, /Demitir, /Promover.
Nгo esqueзa de criar o new tmp[128]; no inicio da OnPlayerCommandText junto com as outras variбveis, cmd e idx, tambйm coloque o strtok no fim do gamemode.
pawn Код:
if(strcmp(cmd, "/convidar", true) == 0)
    {
        tmp = strtok(cmdtext, idx);
        new PlayerB;
        if(!strlen(tmp)) return SendClientMessage(playerid, Branco, "Uso correto: /convidar [id]");
        PlayerB = strval(tmp);
        if(!IsPlayerConnected(PlayerB)) return SendClientMessage(playerid, Branco, "Este jogador nгo estб conectado");
        if(PlayerInfo[playerid][PMilitar] >= 6)
        {
            PlayerInfo[PlayerB][PMilitar] = 1;
            SendClientMessage(PlayerB, Branco, "Vocк entrou а Polнcia Militar");
            SetPlayerColor(PlayerB, Cor_PMilitar);
            return 1;
        }
        else if(PlayerInfo[playerid][Groove] >= 6)
        {
            PlayerInfo[PlayerB][Groove] = 1;
            SendClientMessage(PlayerB, Branco, "Vocк entrou а Groove");
            SetPlayerColor(PlayerB, Cor_Groove);
            return 1;
        }
        else if(PlayerInfo[playerid][Ballas] >= 6)
        {
            PlayerInfo[PlayerB][Ballas] = 1;
            SendClientMessage(PlayerB, Branco, "Vocк entrou aos Ballas");
            SetPlayerColor(PlayerB, Cor_Ballas);
            return 1;
        }
        return 1;
    }
Existem diversas formas de fazer um comando /convidar, essa nгo й a mais otimizada porйm achei a mais simples para explicar sobre o cуdigo, nгo vou explicar sobre o que o strtok faz pois creio que muitos jб sabem e caso nгo saibam й sу dizer que explico ou crio outro tutorial, enfim, voltando ao cуdigo, ao digitar /convidar [id] o if se encarregarб de verificar se o jogador й da PMilitar, e se ele tem o cargo igual ou maior que 6, que no caso estamos utilizando como um padrгo para lнder, mude conforme sua escolha, caso ele seja da Policia Militar e tiver o cargo requerido serб setado ao PlayerB(convidado) a cor da policia militar e a org Policia militar, o mesmo processo acontece mas 3 orgs seguintes, foi apenas adicionado o else para a cadeia de decisхes, se, mas se...

pawn Код:
if(strcmp(cmd, "/promover", true) == 0)
    {
        tmp = strtok(cmdtext, idx);
        new PlayerB, level;
        if(!strlen(tmp)) return SendClientMessage(playerid, Branco, "Uso correto: /promover [id] [cargo]");
        PlayerB = strval(tmp);
        if(!IsPlayerConnected(PlayerB)) return SendClientMessage(playerid, Branco, "Este jogador nгo estб conectado");
        tmp = strtok(cmdtext, idx);
        if(!strlen(tmp)) return SendClientMessage(playerid, Branco, "Uso correto: /promover [id] [cargo]");
        level = strval(tmp);
        if(level < 1 || level > 6) return SendClientMessage(playerid, Branco, "O level deve ser maior que 0 e menor que 7");
        new string[128], promovedor[MAX_PLAYER_NAME];
        GetPlayerName(playerid, promovedor, sizeof(promovedor));
        if(PlayerInfo[playerid][PMilitar] >= 6)
        {
            if(PlayerInfo[PlayerB][PMilitar] < 1) return SendClientMessage(playerid, Branco, "Este jogador nгo й da sua org");
            PlayerInfo[PlayerB][PMilitar] = level;
            format(string, sizeof(string), "Vocк foi promovido a level %d por %s", level, promovedor););
            SendClientMessage(PlayerB, Branco, string);
            return 1;
        }
        else if(PlayerInfo[playerid][Groove] >= 6)
        {
            if(PlayerInfo[PlayerB][Groove] < 1) return SendClientMessage(playerid, Branco, "Este jogador nгo й da sua org");
            PlayerInfo[PlayerB][Groove] = level;
            format(string, sizeof(string), "Vocк foi promovido a level %d por %s", level, promovedor););
            SendClientMessage(PlayerB, Branco, string);
            return 1;
        }
        else if(PlayerInfo[playerid][Ballas] >= 6)
        {
            if(PlayerInfo[PlayerB][Ballas] < 1) return SendClientMessage(playerid, Branco, "Este jogador nгo й da sua org");
            PlayerInfo[PlayerB][Ballas] = level;
            format(string, sizeof(string), "Vocк foi promovido a level %d por %s", level, promovedor););
            SendClientMessage(PlayerB, Branco, string);
            return 1;
        }
        return 1;
    }
O comando /promover acima segue a mesma ordem do /convidar, verifica a organizaзгo do player primбrio na aзгo e executa a ordem no player secundбrio que no caso seria o PlayerB, como disse no outro comando, nгo vou explicar sobre strtok neste tutorial.

pawn Код:
if(strcmp(cmd, "/demitir", true) == 0)
    {
        tmp = strtok(cmdtext, idx);
        new PlayerB, string[128], demitidor[MAX_PLAYER_NAME];
        if(!strlen(tmp)) return SendClientMessage(playerid, Branco, "Uso correto: /demitir [id]");
        PlayerB = strval(tmp);
        GetPlayerName(playerid, demitidor, sizeof(demitidor));
        if(!IsPlayerConnected(PlayerB)) return SendClientMessage(playerid, Branco, "Este jogador nгo estб conectado");
        if(PlayerInfo[playerid][PMilitar] >= 6)
        {
            if(PlayerInfo[PlayerB][PMilitar] < 1) return SendClientMessage(playerid, Branco, "Este jogador nгo й da sua organizaзгo");
            PlayerInfo[PlayerB][PMilitar] = 0;
            format(string, sizeof(string), "Vocк foi demitido por %s", demitidor);
            SendClientMessage(PlayerB, Branco, string);
            return 1;
        }
        else if(PlayerInfo[playerid][Groove] >= 6)
        {
            if(PlayerInfo[PlayerB][Groove] < 1) return SendClientMessage(playerid, Branco, "Este jogador nгo й da sua organizaзгo");
            PlayerInfo[PlayerB][Groove] = 0;
            format(string, sizeof(string), "Vocк foi demitido por %s", demitidor);
            SendClientMessage(PlayerB, Branco, string);
            return 1;
        }
        else if(PlayerInfo[playerid][Ballas] >= 6)
        {
            if(PlayerInfo[PlayerB][Ballas] < 1) return SendClientMessage(playerid, Branco, "Este jogador nгo й da sua organizaзгo");
            PlayerInfo[PlayerB][Ballas] = 0;
            format(string, sizeof(string), "Vocк foi demitido por %s", demitidor);
            SendClientMessage(PlayerB, Branco, string);
            return 1;
        }
        return 1;
    }
O comando demitir й Muito bбsico, entendendo os dois primeiros vocк entenderб ele tambйm, creio que todo mundo saibam se quiserem explicaзхes mais detalhadas sobre o comando sу perguntar.

Bom, como vocкs viram estes comandos utilizam algumas cores, provavelmente vocкs nгo terгo essas cores em seus GMґs entгo й sу criar algumas diretivas relativas as cores.

pawn Код:
#define Cor_PMilitar 0x4169E199
#define Cor_Groove 0x00FF0099
#define Cor_Ballas 0xA020F099
#define Branco 0xFFFFFFFF
O cуdigo de cor na diretiva й muito simples, 0x = definiзгo de que "Й" uma cor, os 6 primeiros caracters apуs o 0x sгo do cуdigo da cor e os 2 ultimos da transparкncia da cor.

Parte 3, Criando veiculos paras organizaзхes: Antes de tudo vocк precisa aprender a mexer com variбveis entгo se ainda nгo souber leia outro tutorial, Vamos criar os veiculos paras orgs, para isso, tenha em mгos as coordenadas e os modelos dos veiculos que deseja criar, vamos lб.

Vamos supor que a Policia Militar tenha 4 carros, entгo criaremos a variбvel com o valor 4 pois comeзaremos do 0 e nгo podemos esquecer do Null, deixaremos isso quase como se fosse uma margem de erro.

pawn Код:
new VPMilitar[5];
Estб criada a variбvel de veiculos da Policia Militar, vamos agora criar os veiculos:
No OnGameModeInit(); coloque:
pawn Код:
VPMilitar[0] = CreateVehicle(modelo, X, Y, Z, Rotaзгo, Cor1, Cor2, RespawnDelay); //Veiculo numero 0
VPMilitar[1] = CreateVehicle(modelo, X, Y, Z, Rotaзгo, Cor1, Cor2, RespawnDelay); //Veiculo numero 1
VPMilitar[2] = CreateVehicle(modelo, X, Y, Z, Rotaзгo, Cor1, Cor2, RespawnDelay); //Veiculo numero 2
VPMilitar[3] = CreateVehicle(modelo, X, Y, Z, Rotaзгo, Cor1, Cor2, RespawnDelay); //Veiculo numero 3
Estб criado os veiculos da Policia Militar, siga o mesmo exemplo para criar os veнculos de outras organizaзхes, apenas troque o numero das variбveis e os nomes das mesmas conforme o numero de veнculos e o nome da prуxima org.

Parte 4, Impedindo que outros peguem seus veiculos: Bom, vamos bloquear os veнculos para que membros de outras organizaзхes nгo o peguem, existem inicialmente duas maneiras de fazer isso, com a public OnPlayerEnterVehicle ou com a public OnPlayerStateChange, vou usar a OnPlayerStateChange...

pawn Код:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(newstate == PLAYER_STATE_DRIVER) VerificarVeiculo(playerid);
    return 1;
}
Notem que tem uma sintaxe que nгo й padrгo nesta public, a sintaxe VerificarVeiculo, bom, teremos que criar ela entгo vamos lб.

pawn Код:
forward VerificarVeiculo(playerid);
public VerificarVeiculo(playerid)
{
    for(new c = 0; c <= 4; c++)
    {
        if(IsPlayerInVehicle(playerid, VPMilitar[c]) && PlayerInfo[playerid][PMilitar] < 1)
        {
            SendClientMessage(playerid, Branco, "Vocк nгo й da Policia Militar");
            RemovePlayerFromVehicle(playerid);
            return 1;
        }
    }
    return 1;
}
O laзo for irб fazer uma conta rбpida verificando possнveis valores do 0 ao 4, na if seguinte ele verificarб se o Player estб no veiculo C que pode ser equivalente de 0 a 4 e se ele nгo й da policia militar, caso a resposta para esta aзгo seja SIM ele removerб o player do veiculo e dirб a ele que aquele veiculo nгo pertence a sua organizaзгo.

Para reproduzir este cуdigo com outras organizaзхes vocк pode usar o mesmo laзo for e adicionar mais if's, else if's e aumentar o numero do laзo conforme o numero de veiculos da org maxнma ou pode criar outros laзos de conta, vocк pode tambйm verificar resultado por resultado usando o GetPlayerVehicleID.

Parte 5, Salvando sua org: Bom, salvaremos a org do player em dini, entгo ai vai o cуdigo.
pawn Код:
forward SalvarOrg(playeri);
public SalvarOrg(playerid)
{
    new arquivo[60], nome[MAX_PLAYER_NAME];
    GetPlayerName(playerid, nome, sizeof(nome));
    format(arquivo, sizeof(arquivo), "Contas\%s.ini", nome);
    if(!dini_Exists(arquivo))
    {
        dini_Create(arquivo);
    }
    if(PlayerInfo[playerid][PMilitar] > 0) dini_IntSet(arquivo, "PMilitar", PlayerInfo[playerid][PMilitar]);
    if(PlayerInfo[playerid][Groove] > 0) dini_IntSet(arquivo, "Groove", PlayerInfo[playerid][Groove]);
    if(PlayerInfo[playerid][Ballas] > 0) dini_IntSet(arquivo, "Ballas", PlayerInfo[playerid][Ballas]);
    return 1;
}
Explicaзгo: criei as variбveis arquivo e nome para acumularem dado do tipo char, elas vгo acumular strings, nome vai acumular o nome do player na aзгo e arquivo o caminho onde serб salva suas informaзхes, GetPlayerName pega o nome do playerid e salva na variбvel nome, o format seta o caminho onde serб salvo as informaзхes na variбvel arquivo, e pra isso ele precisa da variбvel nome, para criar um arquivo pra cada player.
if(!dini_Exists(arquivo)) << Verifica se NГO existe, caso nгo exista ele executa o que estб entre as chaves, no caso, dini_Create(arquivo) ou seja, se nгo existir ele criarб, logo apуs vem uma sequencia de if, esses vгo verificar se o cara й da PMilitar, caso seja ele salvarб o cargo dele no dini com o nome de PMilitar, a mesma coisa pras organizaзхes seguintes, se quiser aprender mais sobre dini procure outro tutorial no fуrum e bendito seja o search.

Vou atualizar o tutorial depois, implementar, melhorar os cуdigos, explicar melhor etc, no momento to com sono e o vinho acabou entгo vou dormir.

Bom, й isso, tutorial meio corrido mas estб ai, nгo pude explicar detalhadamente sobre alguns detalhes pois fugiriam do tema do tutorial como dini, strtok, variбveis enfim, QUALQUER duvida й sу perguntar, se nгo tiver conseguindo montar seu cуdigo poste aqui.
Crйditos: Josma_CMD
Reply
#5

Cara voce nгo viu o que eu escrevir nй ? eu nгo quero uma org completa sу quero a base da base mesmo, sу o comando de setar a org a cor da org o basicгo mesmo, que ai eu ponho os comandos...
Reply
#6

Quote:
Originally Posted by lekinho911
Посмотреть сообщение
Cara voce nгo viu o que eu escrevir nй ? eu nгo quero uma org completa sу quero a base da base mesmo, sу o comando de setar a org a cor da org o basicгo mesmo, que ai eu ponho os comandos...
Ai mano, o cara te deu o pгo e a faca sу falta tu cortar e ainda reclama?
Faz favor nй cara!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)