¤Usando sscanf em zcmd¤
ZCMD é muito diferente de STRCMP, além de tudo é mais fácil de se aprender.
Neste tutorial vamos ensinar como usar sscanf em zcmd.
Para usar sscanf em zcmd terá que criar o comando zcmd logico, então vamos lá.
No topo do GM/Fs adicione
#include zcmd #include sscanf2
Então agora vamos criar um comando de mp
Não se esqueça de adicionar as arrays como logico, claro que pode mudar o nome, não é preciso chamar-se new Texto, pode ser new frase, o que quiser, só tem que saber colocar...
//=====[ARRAYS]====== new texto; new nome[MAX_PLAYER_NAME]; new Str[128]; new id;
CMD:mp(playerid, params[]) { if(sscanf(params, "us",id,texto)) { SendClientMessage(playerid,-1,"Use: /mp [id] [texto]"); } else { if(IsPlayerConnected(id)) return SendClientMessage(playerid, -1, "Este jogador não está conectado"); GetPlayerName(playerid,nome,sizeof(nome)); format(Str, sizeof(Str), "Mesangem Privada de %s: %s",nome,texto); SendClientMessage(id,-1,Str); } return true; }
Bem vamos falar agora um pouco sobre o comando
if(sscanf(params, "us",id,texto))
if - Primeiramente. Para quê if? Simples. sscanf, quando consegue cumprir sua função, retorna 0 (O que é um costume desconhecido em pawn). Ou seja, quando ele separa a string corretamente e todas as variávels são preenchidas, retorna 0, caso contrário 1, o que mostraria a ajuda do comando. (Créditos Luís Miki)
params - Como você já sabe, no zcmd, params é o que vem depois do /comando. Ou seja, seu objetivo é quebrar a string 'params' para poder pegar a hora para setar o servidor. (Créditos Luís Miki)
us - Bem essa parte é o que torna sscanf facil de usar em zcmd, vc sabe quando usa mensagem que tenha que pegar o nome do player? ou o id, que usa %s, %d aqui é mesma coisa só que sem %, então vamos ver alguns dos que eu sei..
d ou i - usado quando você usa números, exemplo numero do seu celular... s - é o string usado quando você usa letras, exemplo "Meu nome é BlueX" u - usado para aquele famoso [Id do Player]... f - usado para coordenadas... Existem mais, mas nós ainda não estamos usando-os....
SendClientMessage(playerid,-1,"Use: /mp [id] [texto]");
↓sscanf 2.0 - Clique Aquielse
Por fim usamos:
format(Str, sizeof(Str), "Mesangem Privada de%s: %s",nome,texto);
~> Não precisa adicionar o ID?
R= Não pois você irá mandar para o player não será necessário, mas caso você queira que mostre o id basta colocar assim:
format(Str, sizeof(Str), "Mesangem Privada de %s [ID%d]: %s",nome,playerid,texto);
Explicamos este comando todo, acho que agora aprenderam, então, vou exemplificar mais outros comandos
/av para admin:
CMD:av(playerid, params[]) { if(IsPlayerAdmin(playerid)) { if(sscanf(params, "s",texto)) { SendClientMessage(playerid,-1,"Use: /av [texto]"); } else { GetPlayerName(playerid,nome,sizeof(nome)); format(Str, sizeof(Str),"Admin %s [ID:%d]: %s",nome,playerid,texto); SendClientMessageToAll(-1,Str); } } else SendClientMessage(playerid,-1,"Você não esta logado na rcon"); return true; }
/a (chat de admins)
CMD:a(playerid, params[]) { for( new i; i < MAX_PLAYERS; i++ ) { if(IsPlayerAdmin(playerid)) { if(sscanf(params, "s",texto)) { SendClientMessage(playerid,-1,"Use: /a [texto]"); } else { GetPlayerName(playerid,nome,sizeof(nome)); format(Str, sizeof(Str),"%s: %s",nome,texto); SendClientMessage(i,-1,Str); } } else SendClientMessage(playerid,-1,"Você não é adminRcon"); } return true; }
Bem agora basta usar imaginação, você consegue fazer coisas mais rapidas com zcmd e sscanf.
Usando imaginação você chega lá. Espero que goste.
®Creditos®
®Luis Miki - Por explicação de duas coisas que eu não sabia
®Y_Less - Pela criação do sscanf
®Zeex - Pela criação do zcmd
↓Download↓
[INC]zcmd .:> Clique aqui
[INC]sscanf2.0 .:> Clique aqui
Introdução:
Bom, este é um simples sistema de humor, selecionado pelo player.
Funções:
- Humores definidos facilmente;
- 5 Humores pré-definidos;
- Texto em cima da cabeça do player, atualizado a cada 1 segundo;
Créditos:
Roger Ramos: Idealização & Criação
[FeK]Drakins: Criador desta ferramenta
Download:
Pastebin
Filterscript(.pwn)
Filterscript(.amx)
Bom, este é um simples sistema de humor, selecionado pelo player.
Funções:
- Humores definidos facilmente;
- 5 Humores pré-definidos;
- Texto em cima da cabeça do player, atualizado a cada 1 segundo;
Créditos:
Roger Ramos: Idealização & Criação
[FeK]Drakins: Criador desta ferramenta
Download:
Pastebin
Filterscript(.pwn)
Filterscript(.amx)
Iremos ensinar para vocês agora como criar GZ's dominaveis por Checkpoints.
As includes necessarias são as:
Aconselho botar isso também no começo do seu Gamemode:
Depois crie defines para definir as gangs:
Depois crie a forward para riar a public com as funções para dominar o territorio no CheckPoint:
Depois crie uma New com as cores das GZ's:
Crie uma variavel para definir as GZ's:
Depois crie novamente outra variavel:
Agora criando as GZ's:
Definindo os Checkpoints para dominar nelas:
Agora em OnGameModeInit
coloque as skins:
Também em OnGameModeIni
coloque as GZ's:
E também os ChecksPoints em OnGameModeInit.
Checkpoints (crie os checkpoints na mesma ordem das GZs, senão da erro na hora de conquistar)
Novamente em OnGameModeInit
Coloque isso para definir as checks
Agora o RequestClass
Vamos criar esse basico aqui depois você modificade acordo com sua preferêcia:
OnPlayerRequestSpawn a cor das gangs:
Em public OnPlayerSpawn
As cores das GZs:
Se for adicionr mais GZs.. ja sabe que tem que acompanhar os numeros "gzcolor[numero]"...
Na public OnPlayerLeaveCheckpoint
coloque isso:
Agora a public que criandos a Forward no inicio:
~> Fim
Créditos: Link_
As includes necessarias são as:
#include <a_samp> #include <cpstream>
#pragma tabsize 0
#define SOLDADO 1 #define CHINES 2
Depois crie a forward para riar a public com as funções para dominar o territorio no CheckPoint:
forward ZoneCheckpointCheckerbyRangel();
new gzcolor[3] = //2+1 = (3) pois tem 2 GZs... { 0x33AA33AA, 0xFF9900AA };
new cpzone[MAX_PLAYERS][3]; //2+1 (3) pois tem 2 GZs...
new lastcp[MAX_PLAYERS];
Agora criando as GZ's:
new Soldado; new Chines;
new cpsoldado; new cpchines;
Agora em OnGameModeInit
coloque as skins:
AddPlayerClass(287,-1324.0948,497.2354,11.1953,137.1467,0,0,0,0,0,0);//Soldado AddPlayerClass(123,-2185.7253,706.9626,53.8906,225.8146,0,0,0,0,0,0);//Chines
Também em OnGameModeIni
coloque as GZ's:
Soldado = GangZoneCreate(-1753.477, 246.9049, -1007.979, 613.7866); Chines = GangZoneCreate(-2379.232, 577.1168, -1988.689, 1489.569);
E também os ChecksPoints em OnGameModeInit.
Checkpoints (crie os checkpoints na mesma ordem das GZs, senão da erro na hora de conquistar)
cpsoldado = CPS_AddCheckpoint(-1371.5627,492.2494,11.1953,2.0,80); cpchines = CPS_AddCheckpoint(-2206.7749,701.3187,49.4375,2.0,80);
Novamente em OnGameModeInit
Coloque isso para definir as checks
#pragma unused cpchines, cpsoldado
Agora o RequestClass
Vamos criar esse basico aqui depois você modificade acordo com sua preferêcia:
if(classid == 0)//Isso define a posisao das skins no OnGameModeInit { Gang[playerid] = SOLDADO; GameTextForPlayer(playerid,"~y~Soldado",6000,6); SetPlayerInterior(playerid,3); SetPlayerPos(playerid, -2669.8770,1410.3972,912.7240); SetPlayerFacingAngle(playerid, 267.7684); SetPlayerCameraPos(playerid, -2663.8770,1410.3972,912.7240); SetPlayerCameraLookAt(playerid, -2669.8770,1410.3972,912.7240); ApplyAnimation(playerid,"PED","WALK_DRUNK",4.0,1,1,1,1,0); } else if(classid == 1)//Isso define a posisao das skins no OnGameModeInit { Gang[playerid] = CHINES; GameTextForPlayer(playerid,"~y~Chines",6000,6); SetPlayerInterior(playerid,3); SetPlayerPos(playerid, -2669.8770,1410.3972,912.7240); SetPlayerFacingAngle(playerid, 267.7684); SetPlayerCameraPos(playerid, -2663.8770,1410.3972,912.7240); SetPlayerCameraLookAt(playerid, -2669.8770,1410.3972,912.7240); ApplyAnimation(playerid,"PED","WALK_DRUNK",4.0,1,1,1,1,0); }
OnPlayerRequestSpawn a cor das gangs:
if(Gang[playerid] == SOLDADO) { SetPlayerInterior(playerid,0); SetPlayerColor(playerid, 0x33AA33AA); //Verde Claro } else if(Gang[playerid] == CHINES) { SetPlayerInterior(playerid,0); SetPlayerColor(playerid, 0xFF00FFAA); //Rosa }
As cores das GZs:
GangZoneShowForPlayer(playerid, Soldado, gzcolor[0]); GangZoneShowForPlayer(playerid, Chines, gzcolor[1]);
Na public OnPlayerLeaveCheckpoint
coloque isso:
new checkpointid = lastcp[playerid]; if(checkpointid > 0 && checkpointid <= 2) //são 2 checkpoints, então mude se for colocar mais... { cpzone[playerid][checkpointid] = 0; //saiu do CP... GangZoneStopFlashForAll(checkpointid-1); }
Agora a public que criandos a Forward no inicio:
public ZoneCheckpointCheckerbyRangel() { for(new i; i < MAX_PLAYERS; i++) { if(!IsPlayerConnected(i))continue; if(CPS_GetPlayerCheckpoint(i) > 0 && CPS_GetPlayerCheckpoint(i) <= 2 && //são 2 checkpoints, então mude se for colocar mais... gzcolor[CPS_GetPlayerCheckpoint(i)-1] != GetPlayerColor(i)) { if(cpzone[i][CPS_GetPlayerCheckpoint(i)] < 30) { cpzone[i][CPS_GetPlayerCheckpoint(i)]++; new tmp[10]; format(tmp, sizeof tmp, "~w~%2d/30", cpzone[i][CPS_GetPlayerCheckpoint(i)]); GameTextForPlayer(i, tmp, 1001, 4); GangZoneFlashForAll(CPS_GetPlayerCheckpoint(i)-1, GetPlayerColor(i)); } else if(cpzone[i][CPS_GetPlayerCheckpoint(i)] == 30) //passou 30 segundos dentro do checkpoint { GameTextForPlayer(i, "~w~Conquistado", 4000, 1); gzcolor[CPS_GetPlayerCheckpoint(i)-1] = GetPlayerColor(i); GangZoneStopFlashForAll(CPS_GetPlayerCheckpoint(i)-1); GangZoneHideForAll(CPS_GetPlayerCheckpoint(i)-1); GangZoneShowForAll(CPS_GetPlayerCheckpoint(i)-1, GetPlayerColor(i));//Ficar piscando a cor do player na GZ } } } }
Créditos: Link_
Í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).
Este não é um código útil e sim um tutorial, não (apenas) decore, leia, entenda e crie seu sistema.
Parte 1, criando suas organizações: Bom, iremos 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, iremos criar aqui 3 organizações como exemplo neste enum.
Não é obrigatório e também não faz diferença a utilização de vírgula na ultima variável da enum, não colocamos, 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.
Como podem perceber acima criamos a variável PlayerInfo, o nome é de sua preferencia, esta variável tem o valor MAX_PLAYERS, ou seja, podemos 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 utilizamos 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.
Existem diversas formas de fazer um comando /convidar, essa não é a mais otimizada porém estamos mostrando a mais simples para explicar sobre o 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...
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.
O comando demitir é Muito básico, entendendo os dois primeiros você entenderá ele também, creio que todo mundo saibam.
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.
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.
Está criada a variável de veiculos da Policia Militar, vamos agora criar os veiculos:
No OnGameModeInit(); coloque:
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. Iremos usar a OnPlayerStateChange...
Notem que tem uma sintaxe que não é padrão nesta public, a sintaxe VerificarVeiculo, bom, teremos que criar ela então vamos lá.
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.
Explicação: Criamos 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.
● 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).
Este não é um código útil e sim um tutorial, não (apenas) decore, leia, entenda e crie seu sistema.
Parte 1, criando suas organizações: Bom, iremos 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, iremos criar aqui 3 organizações como exemplo neste enum.
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, não colocamos, 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.
new PlayerInfo[MAX_PLAYERS][Info];
Como podem perceber acima criamos a variável PlayerInfo, o nome é de sua preferencia, esta variável tem o valor MAX_PLAYERS, ou seja, podemos 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 utilizamos 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.
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 estamos mostrando a mais simples para explicar sobre o 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...
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.
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.
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.
#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.
new VPMilitar[5];
Está criada a variável de veiculos da Policia Militar, vamos agora criar os veiculos:
No OnGameModeInit(); coloque:
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. Iremos usar a OnPlayerStateChange...
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á.
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.
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: Criamos 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.
SISTEMA DE TUNNING E MOTOR
.::Introdução::.
FilterScript criado por RedBulL_x. É um sistema de tunning e motor, com uma garagem de modificações por dialogs, ligando e desligando o motor e farol do veiculo com botão. Com comandos de abrir e fechar capô e Porta malas etc.
.::Comandos::.
Apertando "CTRL" Liga o veiculo.
Apertando "CapsLoock" Liga o Farol.
/pmalaon - Abre o porta malas.
/pmalaoff - Fecha o porta malas.
/capoon - Abre capô.
/capooff - Fecha capô.
/tunar - Tunar veiculo.
/neon - Colocar neon.
.::Creditos::.
Sistema de ligar e desligar motor e farol criado por: gabrielbnv
FilterScript criado por: Matteus_x e RedBulL_x
Mapper: Joao_Lemos
.:Download::.
~> Pastebin
~> 4shared
.::Introdução::.
FilterScript criado por RedBulL_x. É um sistema de tunning e motor, com uma garagem de modificações por dialogs, ligando e desligando o motor e farol do veiculo com botão. Com comandos de abrir e fechar capô e Porta malas etc.
.::Comandos::.
Apertando "CTRL" Liga o veiculo.
Apertando "CapsLoock" Liga o Farol.
/pmalaon - Abre o porta malas.
/pmalaoff - Fecha o porta malas.
/capoon - Abre capô.
/capooff - Fecha capô.
/tunar - Tunar veiculo.
/neon - Colocar neon.
.::Creditos::.
Sistema de ligar e desligar motor e farol criado por: gabrielbnv
FilterScript criado por: Matteus_x e RedBulL_x
Mapper: Joao_Lemos
.:Download::.
~> Pastebin
~> 4shared
Descrição: Um Sistema de Viagem um pouco
diferente dos que tem por ai, nele tem interior, da para mudar os preços
dos passaportes(somente admin's na rcon), tem passaporte para LS,SF e
LV e ainda um kit que o player ganhar os 3 passaportes, FS todo em DCMD.
~> Para o funcionamento é necessario a criação de uma pasta com o nome Viagem na Scriptfiles.
Comandos: São : /viagem ~ /viajar (so funcionam nos aeros) ~ /aeros é um GPS
Créditos: [KoS]Gabriel_Duarte : Pela criação do sistema todo.
Bruno_Tadeu: Pela Idealização do sistema, Cores em Dialogs, Coordenadas dos aeros e Objetos para que funfasse o interior.
Download: Pastebin
~> Para o funcionamento é necessario a criação de uma pasta com o nome Viagem na Scriptfiles.
Comandos: São : /viagem ~ /viajar (so funcionam nos aeros) ~ /aeros é um GPS
Créditos: [KoS]Gabriel_Duarte : Pela criação do sistema todo.
Bruno_Tadeu: Pela Idealização do sistema, Cores em Dialogs, Coordenadas dos aeros e Objetos para que funfasse o interior.
Assinar:
Postagens (Atom)