Mostrando postagens com marcador [zNx] Includes. Mostrar todas as postagens
Mostrando postagens com marcador [zNx] Includes. Mostrar todas as postagens

beta icmd 7.0 (rápido)

22 de fev. de 2014.
Introdução

Este é um novo processador de comandos, não há CallFunction como todos os outros. Neste novo sistema, consegui projetar os comandos de forma que cada um represente ids, e que assim não seja necessário o uso de strcmp.

Como ainda está em fase de testes, alguns comandos com caracteres especiais são recusados, e o uso dele é um pouco mais complicado que os outros tradicionais comandos. Por isto, não recomendo que novatos utilizem este sistema, é um pouco mais complexo que usar zcmd ou icmd 6 

Include

icmd7.inc

pawn Code:
/*  * --- iCmd 7 ---  * Por Bruno da Silva  * [iPs]TeaM  * mixmusicas.com.br ipsbr.net  * email@ brunodasilva.com  * */ #define retn("%0") init(%0,@,@) #define init(%0,%1) def%0(%1) #define defA(%1) init(%1)+(0x40BF) #define defB(%1) init(%1)+(0x41BE) #define defC(%1) init(%1)+(0x42BD) #define defD(%1) init(%1)+(0x43BC) #define defE(%1) init(%1)+(0x44BB) #define defF(%1) init(%1)+(0x45BA) #define defG(%1) init(%1)+(0x46B9) #define defH(%1) init(%1)+(0x47B8) #define defI(%1) init(%1)+(0x48B7) #define defJ(%1) init(%1)+(0x49B6) #define defK(%1) init(%1)+(0x4AB5) #define defe(%1) init(%1)+(25755) #define deff(%1) init(%1)+(26010) #define defg(%1) init(%1)+(26265) #define defq(%1) init(%1)+(28815) #define defn(%1) init(%1)+(28050) #define defo(%1) init(%1)+(28305) #define defp(%1) init(%1)+(28560) #define defb(%1) init(%1)+(24990) #define defc(%1) init(%1)+(25245) #define defd(%1) init(%1)+(25500) #define defx(%1) init(%1)+(30600) #define defy(%1) init(%1)+(30855) #define defz(%1) init(%1)+(31110) #define defr(%1) init(%1)+(29070) #define defs(%1) init(%1)+(29325) #define defh(%1) init(%1)+(26520) #define defi(%1) init(%1)+(26775) #define defj(%1) init(%1)+(27030) #define defk(%1) init(%1)+(27285) #define defq(%1) init(%1)+(28815) #define defr(%1) init(%1)+(29070) #define defs(%1) init(%1)+(29325) #define defa(%1) init(%1)+(24735) #define defb(%1) init(%1)+(24990) #define defc(%1) init(%1)+(25245) #define defd(%1) init(%1)+(25500) #define deft(%1) init(%1)+(29580) #define defu(%1) init(%1)+(29835) #define defv(%1) init(%1)+(30090) #define defw(%1) init(%1)+(30345) #define defx(%1) init(%1)+(30600) #define defy(%1) init(%1)+(30855) #define defz(%1) init(%1)+(31110) #define def0(%1) init(%1)+(12240) #define defL(%1) init(%1)+(0x4BB4) #define defM(%1) init(%1)+(0x4CB3) #define defN(%1) init(%1)+(0x4DB2) #define defO(%1) init(%1)+(0x4EB1) #define defP(%1) init(%1)+(0x4FB0) #define defQ(%1) init(%1)+(0x50AF) #define defR(%1) init(%1)+(0x51AE) #define defS(%1) init(%1)+(0x52AD) #define defT(%1) init(%1)+(0x53AC) #define defU(%1) init(%1)+(0x54AB) #define defV(%1) init(%1)+(0x55AA) #define defW(%1) init(%1)+(0x56A9) #define defX(%1) init(%1)+(0x57A8) #define defY(%1) init(%1)+(0x58A7) #define defZ(%1) init(%1)+(0x59A6) #define def1(%1) init(%1)+(12495) #define def2(%1) init(%1)+(12750) #define def3(%1) init(%1)+(13005) #define def4(%1) init(%1)+(13260) #define def5(%1) init(%1)+(13515) #define def7(%1) init(%1)+(14025) #define def8(%1) init(%1)+(14280) #define def9(%1) init(%1)+(14535) #define defa(%1) init(%1)+(24735) #define defl(%1) init(%1)+(27540) #define defm(%1) init(%1)+(27795) #define defe(%1) init(%1)+(25755) #define deff(%1) init(%1)+(26010) #define defg(%1) init(%1)+(26265) #define defh(%1) init(%1)+(26520) #define defi(%1) init(%1)+(26775) #define defj(%1) init(%1)+(27030) #define def6(%1) init(%1)+(13770) #define defk(%1) init(%1)+(27285) #define defl(%1) init(%1)+(27540) #define defm(%1) init(%1)+(27795) #define defn(%1) init(%1)+(28050) #define defo(%1) init(%1)+(28305) #define defp(%1) init(%1)+(28560) #define deft(%1) init(%1)+(29580) #define defu(%1) init(%1)+(29835) #define defv(%1) init(%1)+(30090) #define defw(%1) init(%1)+(30345) #define def@(%1) 0 #define iscmd retn stock __@cmdvalue, __@loopv; stock __@param[126]; public OnPlayerCommandText( playerid, cmdtext[] ) {     __@cmdvalue = 0;     __@loopv = 0;     __@param[0] = EOS;     while (cmdtext[++__@loopv] > ' ')  {         __@cmdvalue += (0xff * tolower(cmdtext[__@loopv]));     }     while (strlen(cmdtext) > __@loopv && cmdtext[++__@loopv] == ' ') {}     if( __@loopv < strlen(cmdtext)) {         format(__@param, 125, "%s", cmdtext[__@loopv]);     }     #if defined icmd@___OnPlayerCommandText     return icmd@___OnPlayerCommandText(playerid, __@cmdvalue, __@param);     #else     return 0;     #endif } #if defined _ALS_OnPlayerCommandText     #undef OnPlayerCommandText #else     #define _ALS_OnPlayerCommandText #endif #define OnPlayerCommandText icmd@___OnPlayerCommandText #if defined icmd@___OnPlayerCommandText     forward icmd@___OnPlayerCommandText(playerid, commandid, params[]); #endif


Novo Uso

Agora a callback OnPlayerCommandText foi modificada, e o uso dela será o seguinte:

pawn Code:
public OnPlayerCommandText(playerid, commandid, params[])



Commandid? Params?

Simples, commandid representa o ID do comando. E params[] representa os parâmetros do comando — caso o jogador tenha digitado algum, é claro



Alguns exemplos de uso:


/vida [valor]

pawn Code:
public OnPlayerCommandText(playerid, commandid, params[]) {     switch(commandid) {         case iscmd("v,i,d,a"): {             if(!params[0]) {                 return SendClientMessage(playerid, -1, "[Erro]: Use /vida [valor]");             }             SetPlayerHealth(playerid, floatstr(params));             return true;         }         default: return SendClientMessage(playerid, -1, "[Erro]: Comando desconhecido, desculpe.");     }     return false; }



/dinheiro [valor]

pawn Code:
public OnPlayerCommandText(playerid, commandid, params[]) {     switch(commandid) {         case iscmd("d,i,n,h,e,i,r,o"): {             if(!params[0]) {                 return SendClientMessage(playerid, -1, "[Erro]: Use /dinheiro [valor]");             }             GivePlayerMoney(playerid, strval(params));             return true;         }         default: return SendClientMessage(playerid, -1, "[Erro]: Comando desconhecido, desculpe.");     }     return false; }


/eu [mensagem]

pawn Code:
public OnPlayerCommandText(playerid, commandid, params[]) {     switch(commandid) {         case iscmd("e,u"): {             if(!params[0]) {                 return SendClientMessage(playerid, -1, "[Erro]: Use /eu [mensagem]");             }             static szName[128];             GetPlayerName(playerid, szName, sizeof szName);             format(szName, 128, "O jogador %s ANUNCIOU: %s", szName, params);             SendClientMessageToAll(-1, szName);             return true;         }         default: return SendClientMessage(playerid, -1, "[Erro]: Comando desconhecido, desculpe.");     }     return false; }



/vida /dinheiro /eu

pawn Code:
public OnPlayerCommandText(playerid, commandid, params[]) {     switch(commandid) {         case iscmd("v,i,d,a"): {             if(!params[0]) {                 return SendClientMessage(playerid, -1, "[Erro]: Use /vida [valor]");             }             SetPlayerHealth(playerid, floatstr(params));             return true;         }         case iscmd("d,i,n,h,e,i,r,o"): {             if(!params[0]) {                 return SendClientMessage(playerid, -1, "[Erro]: Use /dinheiro [valor]");             }             GivePlayerMoney(playerid, strval(params));             return true;         }         case iscmd("e,u"): {             if(!params[0]) {                 return SendClientMessage(playerid, -1, "[Erro]: Use /eu [mensagem]");             }             static szName[128];             GetPlayerName(playerid, szName, sizeof szName);             format(szName, 128, "O jogador %s ANUNCIOU: %s", szName, params);             SendClientMessageToAll(-1, szName);             return true;         }         default: return SendClientMessage(playerid, -1, "[Erro]: Comando desconhecido, desculpe.");     }     return false; }


Importante: Como puderam ver, ele funciona desta forma. Com switch case. Apesar de também funcionar com if eu prefiro que usem com switch, por ser muito mais rápido


Sempre que usarem

PHP Code:
iscmd("string");  
deve separar as strings pro virgula, para o processador conseguir processar os caracteres

PHP Code:
iscmd("s,t,r,i,n,g")  
caso contrário dará erro.


pawn Code:
public OnPlayerCommandText(playerid, commandid, params[]) {     switch(commandid) {         /*              /comando         */         case iscmd("C,O,M,A,N,D,O"): {             if(!params[0]) {                 // não digitou parametros             }             else                         {                 // digitou parametros             }                 return true;         }         default: {             // comando desconhecido         }     }     return false; }




Notas finais

Sei que muita gente já tem um sistema de comandos preferencial. Mas eu quero deixar uma coisa clara: Se você quer velocidade, esse é o processador que você deverá usar. Apesar do difícil uso dele, é tudo compensado na velocidade e na clareza de como ele funciona.

Não postarei aqui os testes de velocidade, vocês podem fazer por si próprios e verão que o processador é em torno de duas vezes mais veloz que os processadores atuais. Enquanto os atuais processam 250 comandos em um segundo, este processa 500 comandos em um segundo. 


Autoria

Este sistema foi criado por Bruno da Silva. Agradeço ao tutorial pre-processor de Y_less
Leia Mais

[Include] MSi - Groups

12 de jul. de 2013.

Groups

- Índice
  • O que é msi_groups?
  • Onde posso encontra-la?
  • Como utilizar?
  • Configurações
  • Funções
  • Informações


- O que é msi_groups?
  • msi_groups é uma include desenvolvida por Larceny e Lós e tem como o objetivo adicionar funções para organizar jogadores em grupos diferentes mais dinâmicamente.


- Onde posso encontra-la?
  • msi_groups é parte da livraria MSi(Master Server Includes) e pode ser encontrada neste tópico.


- Como utilizar?
  • Para utilizar msi_groups apenas inclua a include a seu script:
    pawn Código:
    #include <MSi\msi_groups>

- Configurações
  • Você pode, caso preferir, alterar certos valores desta include, sendo elas quantia máxima de grupos permitidos e o tamanho máximo do nome de um grupo, definindo ACIMA da include:
    pawn Código:
    #define MAX_GROUPS      (QUANTIA_MAXIMA_DE_GRUPOS) #define MAX_GROUP_NAME  (TAMANHO_MAXIMO_DO_NOME_DE_UM_GRUPO) #include <MSi\msi_groups>
    Exemplo:
    pawn Código:
    #define MAX_GROUPS      64 #define MAX_GROUP_NAME  32 #include <MSi\msi_groups>
    - O código acima define a quantidade máxima de gruops para 64 e tamanho máximo do nome de um grupo para 32 chars.


- Funções
  • CreateGroup(groupname[], type = INVALID_GROUP_TYPE);
    - groupname[]: Nome do grupo criado.
    - type: Tipo do grupo criado.

    - Obs. Apenas o nome do grupo é obrigatório! O tipo do grupo é OPCIONAL!

    - Esta função cria um grupo e retorna o ID do grupo criado, exemplo:
    pawn Código:
    new g_groupAdmins; public OnGameModeInit() {     g_groupAdmins = CreateGroup("Administradores");     // Criamos um grupo chamado admins e salvamos seu id na variável g_groupAdmins.     return 1; }
  • SetGroupName(groupid, groupname[])
    - groupid: ID do grupo.
    - groupname[]: Novo nome para o grupo.

    - Esta função altera o nome de um grupo.
    pawn Código:
    new g_groupAdmins; public OnGameModeInit() {     g_groupAdmins = CreateGroup("Administradores");     // Criamos um grupo chamado admins e salvamos seu id na variável g_groupAdmins.     SetGroupName(g_groupAdmins, "Helpers");     // Alteramos o nome do grupo "g_groupAdmins" para Helpers.     return 1; }
  • GetGroupName(groupid)
    - groupid: ID do grupo.

    - Esta função obtém o nome de um grupo.
    pawn Código:
    new g_groupAdmins; public OnGameModeInit() {     g_groupAdmins = CreateGroup("Administradores");     // Criamos um grupo chamado admins e salvamos seu id na variável g_groupAdmins.     SetGroupName(g_groupAdmins, "Helpers");     // Alteramos o nome do grupo "g_groupAdmins" para Helpers.     printf("O nome do grupo g_groupAdmins é: %s", GetGroupName(g_groupAdmins));     // Imprimimos o nome do grupo "g_groupAdmins".     return 1; }
  • GetGroupIDbyName(groupname[])
    - groupname[]: Nome do grupo

    - Esta função retorna o ID de um grupo através de seu nome.
    pawn Código:
    CMD:grupo(playerid, params[]) {     new groupname[MAX_GROUP_NAME];     if(sscanf(params, "s", groupname)) return 0;     else if(GetGroupIDbyName(groupname) == INVALID_GROUP_ID)// Verificando se o grupo existe através do nome         SendClientMessage(playerid, -1, "Este grupo não existe!");     else         SendClientMessage(playerid, -1, "O grupo digitado existe!");     return 1; }
  • SetGroupType(groupid, type)
    - groupid: ID do grupo.
    - grouptype: Novo tipo para o grupo.

    - Esta função altera o tipo de um grupo.
    pawn Código:
    #define GROUP_TYPE_GANG 1 new g_groupGroove; new g_groupBallas; public OnGameModeInit() {     g_groupGroove = CreateGroup("Groove Street");     // Criamos um grupo para a gang groove str. e salvamos seu id na variável g_groupGroove.     g_groupBallas = CreateGroup("The Ballas");     // Criamos um grupo para a gang ballas e salvamos seu id na variável g_groupBallas.     SetGroupType(g_groupGroove, GROUP_TYPE_GANG);     SetGroupType(g_groupBallas, GROUP_TYPE_GANG);     // Alteramos o tipo de ambos os grupos para GROUP_TYPE_GANG(definido anteriormente por nós).     return 1; }
  • GetGroupType(groupid)
    - groupid: ID do grupo.

    - Esta função obtém o tipo de um grupo.
    pawn Código:
    #define GROUP_TYPE_GANG 1 new g_groupGroove; new g_groupBallas; public OnGameModeInit() {     g_groupGroove = CreateGroup("Groove Street");     // Criamos um grupo para a gang groove str. e salvamos seu id na variável g_groupGroove.     g_groupBallas = CreateGroup("The Ballas");     // Criamos um grupo para a gang ballas e salvamos seu id na variável g_groupBallas.     SetGroupType(g_groupGroove, GROUP_TYPE_GANG);     SetGroupType(g_groupBallas, GROUP_TYPE_GANG);     // Alteramos o tipo de ambos os grupos para GROUP_TYPE_GANG(definido anteriormente por nós).     if(GetGroupType(g_groupBallas) == GROUP_TYPE_GANG) printf("O grupo g_groupBallas é do tipo Gang!");     return 1; }
  • IsPlayerInGroup(playerid, groupid)
    - playerid: ID do jogador.
    - groupid: ID do grupo.

    - Esta função verifica se um jogador está em um grupo.
    pawn Código:
    #define GROUP_TYPE_GANG 1 new g_groupGroove; public OnGameModeInit() {     g_groupGroove = CreateGroup("Groove Street");     SetGroupType(g_groupGroove, GROUP_TYPE_GANG);     return 1; } public OnPlayerDeath(playerid, killerid, reason) {     if(IsPlayerInGroup(playerid, g_groupGroove) && IsPlayerInGroup(killerid, g_groupGroove))     // Verificando se playerid está no grupo Grove,  Verificando se killerid está no grupo..     {         SendClientMessage(playerid, -1, "Você foi morto por um companheiro.");         SendClientMessage(killerid, -1, "Você matou um companheiro.");     }     return 1; }
  • AddPlayerToGroup(playerid, groupid)
    - playerid: ID do jogador.
    - groupid: ID do grupo.

    - Esta função adiciona um jogador a um grupo.
    pawn Código:
    #define GROUP_TYPE_GANG 1 new g_groupGroove; public OnGameModeInit() {     g_groupGroove = CreateGroup("Groove Street");     SetGroupType(g_groupGroove, GROUP_TYPE_GANG);     return 1; } public OnPlayerConnect(playerid) {     AddPlayerToGroup(playerid, g_groupGroove);     // Adiciona o jogador que conectar no servidor ao grupo da Groove.     return 1; }
  • RemovePlayerFromGroup(playerid, groupid)
    - playerid: ID do jogador.
    - groupid: ID do grupo.

    - Esta função remove um jogador de um grupo.
    pawn Código:
    #define GROUP_TYPE_GANG 1 new g_groupGroove; public OnGameModeInit() {     g_groupGroove = CreateGroup("Groove Street");     SetGroupType(g_groupGroove, GROUP_TYPE_GANG);     return 1; } public OnPlayerDeath(playerid, killerid, reason) {     if(IsPlayerInGroup(playerid, g_groupGroove))     // Verificando se playerid está no grupo Grove     {         SendClientMessage(playerid, -1, "Você morreu e por isso não tem direito de estar na Groove.");         RemovePlayerFromGroup(playerid, g_groupGroove);         // Remove o jogador do grupo     }     return 1; }
  • SendGroupMessage(groupid, color, message[])
    - groupid: ID do grupo.
    - color: Cor na qual será enviada a mensagem
    - message[]: Mensagem a ser enviada

    - Esta função envia uma mensagem aos membros de um determinado grupo.
    pawn Código:
    new grAdmins; public OnGameModeInit() {     grAdmins = CreateGroup("Administradores");     return 1; } public OnPlayerConnect(playerid) {     SendGroupMessage(grAdmins, -1, "Um jogador se conectou ao servidor.");     // Envia uma mensagem a todos do grupo grAdmins quando alguém se conectar ao servidor.     return 1; }
  • SendGroupTypeMessage(grouptype, color, message[])
    - grouptype: Tipo do grupo.
    - color: Cor na qual será enviada a mensagem
    - message[]: Mensagem a ser enviada

    - Esta função envia uma mensagem aos membros de um determinado tipo de grupo.
    pawn Código:
    #define GROUP_TYPE_GANG 1 new g_groupGroove; new g_groupBallas; public OnGameModeInit() {     g_groupGroove = CreateGroup("Groove Street");     SetGroupType(g_groupGroove, GROUP_TYPE_GANG);     g_groupBallas = CreateGroup("The Ballas");     SetGroupType(g_groupBallas, GROUP_TYPE_GANG);     return 1; } public OnPlayerConnect(playerid) {     SendGroupTypeMessage(GROUP_TYPE_GANG, -1, "Uma possível vitima acabou de se conectar.");     //Manda uma mensagem para todos os membros de grupos do tipo GROUP_TYPE_GANG     return 1; }

- Informações
  • A quantia máxima de grupos que podem ser criados, por padrão, é 32.
  • O tamanho máximo do nome de um grupo, por padrão, é 32.
Leia Mais

[Include] Stewie` Fader

Stewie` Fader

Esse é um fader como qualquer outro, mas é bem mais simples de usar.

Code:
fadeIn(playerid, 100, 0x000000FF);
Code:
fadeOut(playerid, 100, 0x000000FF);
fadeIn - Introduz o processo. Ele deixará a tela do jogador opaca, ou transparente, de acordo com a cor e o tempo selecionados.
playerid - O jogador.
100 - O tempo, em milissegundos, para o processo completar.
0x000000FF - A cor do processo: o FF. A transparência é desprezada.
Video:

Creditos: Stewie`

Script de Exemplo: http://pastebin.com/ECwv6DEG

Leia Mais

[Include] Fix KickEx

11 de jul. de 2013.
KickEx

Este é um pequeno script que fiz, para que ao expulsar um jogador possa mostrar o motivo.


Creditos: cesar_google

Source:
pawn Code:
/* Fix Kick/Ban By Cesar_Google adicionar ao seu script este é um pequeno FIX. Exemplo de Uso: KickEx( playerid , 0 , "unused reason" );    Kick KickEx( playerid , 1 , "unused reason" );    Ban KickEx( playerid , 2 , "use reason" );    BanEx */ #include <a_samp> forward KickEx( playerid , reason , const string[] ); public KickEx( playerid , reason , const string[] ) {     SetTimerEx( "PlayerReason" , 100 , false , "dds" , playerid , reason , string );     return 1; } forward PlayerReason( playerid , reason , const string[] ); public PlayerReason( playerid , reason , const string[] ) {     switch( reason )     {     case 0: Kick ( playerid );     case 1: Ban  ( playerid );     case 2: BanEx( playerid , string );     }     return 1; }

Leia Mais

[Include] SendBoxMessage

SendBoxMessage

Esta include cria e utiliza 11 textdraws para formar uma nova chat box.


Para começar a usa-la é simples, basta incluí-la em seu GameMode/FilterScript e então carrega-lo.
pawn Code:
#include <boxmsg> public OnGameModeInit() {     LoadBox();     return 1; }
Funções:
SendBoxMessage
Envia uma mensagem para a box. Parecido com SendClientMessage.
pawn Code:
public OnPlayerConnect(playerid) {     new name[24], text[50];     GetPlayerName(playerid,name,24);     format(text,40,"%s ~g~entrou no servidor.",name)     SendBoxMessage(text); }
ShowPlayerBox
Mostra a chat box pro player.
pawn Code:
public OnPlayerConnect(playerid) {     ShowPlayerBox(playerid); }
HidePlayerBox
Esconde a chat box pro player.
pawn Code:
public OnPlayerDeath(playerid,killerid,reason) {     HidePlayerBox(playerid); }
EditBoxMessage
Edita uma linha específica da box.
Por exemplo, temos uma box assim:
Code:
Arakuta entrou no servidor.
[KICK] Arakuta kickou Nubao. Noob demais.
Laranja assassinou Verde.
Laranja assassinou Azul.
Laranja assassinou Verde.
Laranja assassinou Amarelo.
Hippie usou o comando /erva
Lokao se matou.
Arakuta se matou.
Lokao injetou erva. /erva
Então temos o seguinte comando:
pawn Code:
CMD:editboxmessage(playerid,params[]) {     new line, text[128];     if(sscanf(params,"ds[128]",line,text)) return SendClientMessage(playerid,azul,"Uso: /editboxmessage [LINHA][TEXTO]");     EditBoxMessage(line,text);     return 1; }
Se editarmos a linha 3 com o texto "Forum Samp Owna", o resultado seria este, pois as linhas são contadas de baixo para cima.
Code:
Arakuta entrou no servidor.
[KICK] Arakuta kickou Nubao. Noob demais.
Laranja assassinou Verde.
Laranja assassinou Azul.
Laranja assassinou Verde.
Laranja assassinou Amarelo.
Hippie usou o comando /erva
Forum Samp Owna
Arakuta se matou.
Lokao injetou erva. /erva
Observações finais:

Por ser em Textdraws, deve se usar "GameText Tag Colours" ao invés de color Embedding. Link da Wiki
E também não se pode utilizar acentos, por exemplo: "Hoje é o dia" ou "Para de coçar".
É isso aí, críticas construtivas e sugestões são sempre bem vindas. Abraços!

Creditos: arakuta

Download 
(Clique com botão direito e selecione "Salvar Como")
Leia Mais

[Include] dw_veh (Funções para veículos)

22 de jan. de 2013.
Uma simples include de funções veiculares.

Versão 0.1:

Code:
IsVehicleOccupied(vehicleid) - retorna se o veículo está com um motorista, caso adicionado o parametro 'VEHID' retorna o id do motorista ( IsVehicleOccupied(vehicleid, VEHID) ).

WriteVehiclePlate(vehicleid, string[]) - Escreve determinada string na placa do carro atual.

EnableCarSpawn() - Habilita o respawn do carro no local em que o jogador saiu pela ultima vez.

DisableCarSpawn() - Desabilita o que foi ativado acima.
Pastebin: http://pastebin.com/5TbZJUN3

Script de teste:
pawn Code:
#include a_samp #include zcmd #include dw_veh main(){} public OnGameModeInit() {     SetGameModeText("Blank Script");     AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);     return 1; } public OnPlayerRequestClass(playerid, classid) {     SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);     SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);     SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);     return 1; } CMD:cv(playerid, params[]) {     new id;     if(sscanf_(params, "d", id)) return SendClientMessage(playerid, -1, "/cv [id]");     new Float:X, Float:Y, Float:Z, Float:Angle; GetPlayerPos(playerid, X, Y, Z); GetPlayerFacingAngle(playerid, Angle);     new carro = CreateVehicle(id, X, Y, Z, Angle, -1, -1, -1); PutPlayerInVehicle(playerid, carro, 0);     return 1; } new str[129]; CMD:placa(playerid, params[]) {     if(sscanf_(params, "s", str)) return SendClientMessage(playerid, -1, "/placa [texto]  * máximo 33 caracteres");     if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "Você não está em um veículo!");     new vehid = GetPlayerVehicleID(playerid); WriteVehiclePlate(vehid, str);     SetVehicleToRespawn(vehid);     return 1; } CMD:habilitar(playerid) {     EnableCarSpawn();     return 1; } CMD:desabilitar(playerid) {     DisableCarSpawn();     return 1; } stock sscanf_(string[], format[], {Float,_}:...) {     #if defined isnull         if (isnull(string))     #else         if (string[0] == 0 || (string[0] == 1 && string[1] == 0))     #endif         {             return format[0];         }     #pragma tabsize 4     new         formatPos = 0,         stringPos = 0,         paramPos = 2,         paramCount = numargs(),         delim = ' ';     while (string[stringPos] && string[stringPos] <= ' ')     {         stringPos++;     }     while (paramPos < paramCount && string[stringPos])     {         switch (format[formatPos++])         {             case '\0':             {                 return 0;             }             case 'i', 'd':             {                 new                     neg = 1,                     num = 0,                     ch = string[stringPos];                 if (ch == '-')                 {                     neg = -1;                     ch = string[++stringPos];                 }                 do                 {                     stringPos++;                     if ('0' <= ch <= '9')                     {                         num = (num * 10) + (ch - '0');                     }                     else                     {                         return -1;                     }                 }                 while ((ch = string[stringPos]) > ' ' && ch != delim);                 setarg(paramPos, 0, num * neg);             }             case 'h', 'x':             {                 new                     num = 0,                     ch = string[stringPos];                 do                 {                     stringPos++;                     switch (ch)                     {                         case 'x', 'X':                         {                             num = 0;                             continue;                         }                         case '0' .. '9':                         {                             num = (num << 4) | (ch - '0');                         }                         case 'a' .. 'f':                         {                             num = (num << 4) | (ch - ('a' - 10));                         }                         case 'A' .. 'F':                         {                             num = (num << 4) | (ch - ('A' - 10));                         }                         default:                         {                             return -1;                         }                     }                 }                 while ((ch = string[stringPos]) > ' ' && ch != delim);                 setarg(paramPos, 0, num);             }             case 'c':             {                 setarg(paramPos, 0, string[stringPos++]);             }             case 'f':             {                 new changestr[16], changepos = 0, strpos = stringPos;                 while(changepos < 16 && string[strpos] && string[strpos] != delim)                 {                     changestr[changepos++] = string[strpos++];                     }                 changestr[changepos] = '\0';                 setarg(paramPos,0,_:floatstr(changestr));             }             case 'p':             {                 delim = format[formatPos++];                 continue;             }             case '\'':             {                 new                     end = formatPos - 1,                     ch;                 while ((ch = format[++end]) && ch != '\'') {}                 if (!ch)                 {                     return -1;                 }                 format[end] = '\0';                 if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)                 {                     if (format[end + 1])                     {                         return -1;                     }                     return 0;                 }                 format[end] = '\'';                 stringPos = ch + (end - formatPos);                 formatPos = end + 1;             }             case 'u':             {                 new                     end = stringPos - 1,                     id = 0,                     bool:num = true,                     ch;                 while ((ch = string[++end]) && ch != delim)                 {                     if (num)                     {                         if ('0' <= ch <= '9')                         {                             id = (id * 10) + (ch - '0');                         }                         else                         {                             num = false;                         }                     }                 }                 if (num && IsPlayerConnected(id))                 {                     setarg(paramPos, 0, id);                 }                 else                 {                     #if !defined foreach                         #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))                         #define __SSCANF_FOREACH__                     #endif                     string[end] = '\0';                     num = false;                     new                         name[MAX_PLAYER_NAME];                     id = end - stringPos;                     foreach (Player, playerid)                     {                         GetPlayerName(playerid, name, sizeof (name));                         if (!strcmp(name, string[stringPos], true, id))                         {                             setarg(paramPos, 0, playerid);                             num = true;                             break;                         }                     }                     if (!num)                     {                         setarg(paramPos, 0, INVALID_PLAYER_ID);                     }                     string[end] = ch;                     #if defined __SSCANF_FOREACH__                         #undef foreach                         #undef __SSCANF_FOREACH__                     #endif                 }                 stringPos = end;             }             case 's', 'z':             {                 new                     i = 0,                     ch;                 if (format[formatPos])                 {                     while ((ch = string[stringPos++]) && ch != delim)                     {                         setarg(paramPos, i++, ch);                     }                     if (!i)                     {                         return -1;                     }                 }                 else                 {                     while ((ch = string[stringPos++]))                     {                         setarg(paramPos, i++, ch);                     }                 }                 stringPos--;                 setarg(paramPos, i, '\0');             }             default:             {                 continue;             }         }         while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')         {             stringPos++;         }         while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))         {             stringPos++;         }         paramPos++;     }     do     {         if ((delim = format[formatPos++]) > ' ')         {             if (delim == '\'')             {                 while ((delim = format[formatPos++]) && delim != '\'') {}             }             else if (delim != 'z')             {                 return delim;             }         }     }     while (delim > ' ');     return 0; }
Creditos: 
Dwayne pela include, IsPlayerUnderwater(playerid) retirado de BocianJD
Autores: Sacky, Jan "DracoBlue" Schütze, Alex "Y_Less" Cole - http://pastebin.com/t2chEUMZ

Em breve atualizarei com mais funções.
Leia Mais