![]() |
#1 |
High-roller
![]() ![]() ![]() ![]() ![]() Join Date: Feb 2010
Location: Dukes - Liberty City
Posts: 1,405
Reputation: 122
|
![]() ![]() ================================================== ================================================ 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. Code:
enum Info { PMilitar, Groove, Ballas }; Code:
new PlayerInfo[MAX_PLAYERS][Info]; 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. Code:
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; } Code:
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; } Code:
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. Code:
#define Cor_PMilitar 0x4169E199 #define Cor_Groove 0x00FF0099 #define Cor_Ballas 0xA020F099 #define Branco 0xFFFFFFFF 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. Code:
new VPMilitar[5]; No OnGameModeInit(); coloque: Code:
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 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... Code:
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á. Code:
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; } 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. Code:
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; } 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. Last edited by Josma_cmd; 22/07/2011 at 04:24 PM. |
![]() |
![]() |
![]() |
#2 |
Banned
![]() Join Date: Oct 2010
Location: IN PAWNO PROGRAM :)
Posts: 72
Reputation: 2
|
![]()
Muito bom!!!! Obrigado, realmente sempre quis aprender isto *.*
Agora podia criar um tutorial de BUS DRIVER JOB, para explicar como fazer e como salvar ![]() |
![]() |
![]() |
![]() |
#3 |
Big Clucker
![]() ![]() Join Date: May 2011
Location: Los Santos
Posts: 126
Reputation: 0
|
![]()
Parabens Manolo!!
Excelente! ![]() |
![]() |
![]() |
![]() |
#4 |
High-roller
![]() ![]() ![]() ![]() ![]() Join Date: Nov 2010
Location: São Paulo, Brasil
Posts: 2,572
Reputation: 315
|
![]()
Ah se tivesse isso na minha época... Parabéns.
|
![]() |
![]() |
![]() |
#5 |
High-roller
![]() ![]() ![]() ![]() ![]() Join Date: Aug 2010
Location: Somewhere Far *User Type: Administrator
Posts: 3,630
Reputation: 115
|
![]()
Gûdi Jóbi mai frendi.
Gostei josminha xP. Velo da Progressão ahsuaHSAUshSUAsa. |
![]() |
![]() |
![]() |
#6 | |||
High-roller
![]() ![]() ![]() ![]() ![]() Join Date: Feb 2010
Location: Dukes - Liberty City
Posts: 1,405
Reputation: 122
|
![]() Quote:
Valeu. Obrigado ![]() kkkkkkk, em tempos antigos os programadores de C Sharp faziam um enorme trabalho pra fazer algo que hoje se faz apenas com uma sintaxe, como o RepairVehicle na 0.2x não tinha. Valeu. Quote:
Quote:
Valeu. |
|||
![]() |
![]() |
![]() |
#7 |
High-roller
![]() ![]() ![]() ![]() ![]() Join Date: Feb 2010
Location: Dukes - Liberty City
Posts: 1,405
Reputation: 122
|
![]() |
![]() |
![]() |
![]() |
#8 | |
High-roller
![]() ![]() ![]() ![]() ![]() Join Date: Jul 2010
Location: Brasília - DF
Posts: 1,748
Reputation: 173
|
![]() Quote:
![]() más neste caso ele se refere a profissão de motorista de ônibus mesmo ![]() Bom tutorial Josma. Atenciosamente, Falcon. |
|
![]() |
![]() |
![]() |
#9 |
Big Clucker
![]() ![]() Join Date: Jun 2011
Posts: 144
Reputation: 6
|
![]()
Josma , me passa essa tua viatura da LSPD ?
|
![]() |
![]() |
![]() |
#10 | |
High-roller
![]() ![]() ![]() ![]() ![]() Join Date: Feb 2010
Location: Dukes - Liberty City
Posts: 1,405
Reputation: 122
|
![]() Quote:
![]() Você joga Bus Driver? kk lol, nunca tive paciência pra andar à 30km. kkk. Valeu Falcon. Vou ver se acho o link denovo e te passo por MP. |
|
![]() |
![]() |
![]() |
Thread Tools | |
Display Modes | |
|
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
[FilterScript] Organizações | [FeK]Knife | Lançamentos/Releases | 12 | 29/01/2011 01:01 PM |
Criando Familias, Organizações no Geral RP | mafelis | Português/Portuguese | 3 | 27/12/2010 03:25 PM |
[PEDIDO]Ai Galera To Criando Um GM De Gang War Tals Tals... | pietrotm | Português/Portuguese | 1 | 07/11/2010 01:28 PM |
[AJUDA] Criação de Organizações Pesso ajuda por favor de vocês | Gabriel6 | Português/Portuguese | 17 | 23/08/2010 08:41 PM |