[TUT] - Usando SSCANF em ZCMD


¤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....
depois para acabar basta adicionar as arrays, você pode criar uma array chamada id, para o s você pode criar uma chamada Texto, por ai a diante...

SendClientMessage(playerid,-1,"Use: /mp [id] [texto]");
~> isso é aquela mensagem quando você só digita o comando, /mp dai aparece essa mensagem..
else
↓sscanf 2.0 - Clique Aqui
~> irá retornar caso você adicione o id e o texto exemplo ( /mp 1 eae. )




Por fim usamos:

format(Str, sizeof(Str), "Mesangem Privada de%s: %s",nome,texto);
Perguntas frequentes:
~> 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®
®BlueX - Por criação do Tutorial
®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


[TUT] - Criando GangZones domináveis por CheckPoints

Iremos ensinar para vocês agora como criar GZ's dominaveis por Checkpoints.
As includes necessarias são as:
#include <a_samp> #include <cpstream>
Aconselho botar isso também no começo do seu Gamemode:
#pragma tabsize 0
Depois crie defines para definir as gangs:
#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();
Depois crie uma New com as cores das GZ's:
new gzcolor[3] = //2+1 = (3) pois tem 2 GZs... {     0x33AA33AA, 0xFF9900AA };
Crie uma variavel para definir as GZ's:
new cpzone[MAX_PLAYERS][3]; //2+1 (3) pois tem 2 GZs...
Depois crie novamente outra variavel:
new lastcp[MAX_PLAYERS];

Agora criando as GZ's:
new Soldado; new Chines;
Definindo os Checkpoints para dominar nelas:
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     }
Em public OnPlayerSpawn
As cores das GZs:
GangZoneShowForPlayer(playerid, Soldado, gzcolor[0]);     GangZoneShowForPlayer(playerid, Chines, gzcolor[1]);
Se for adicionr mais GZs.. ja sabe que tem que acompanhar os numeros "gzcolor[numero]"...



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             }         }     } }
~> Fim
Créditos:  Link_

[TUT] - Criando organização

Í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.
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.

[FS] - Sistema de Tunning e Motor

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

[FS] - Sistema de viagem v1.0

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