[TUTO/COD] Criando Organização + ZCMD/SSCANF

quarta-feira, 16 de maio de 2012
Créditos: Murillo_Henrique
Postador: Murillo_Henrique

pawn Code:
#include <a_samp> #include <zcmd> //Adicionando o ZCMD #include <sscanf> //Adicionando o sscanf #include <DOF2> //Adicionando o sscanf #define CIVIL                   0 //Definimos "CIVIL" a 0 #define POLICIAM                1 //Mesma coisa #define GROVE                   2 //Mesma coisa #define BALLAS                  3 //Mesma coisa #define COR_ERRO                0xAD0000AA //CORES #define COR_SUCESSO             0x00AB00AA //CORES #define COR_AV_ADM              0x007CF6AA //CORES #define COR_AZUL_CLARO          0x00F6F6AA //CORES #define COR_RAD                 0x4876FFAA //CORES enum PlayerDados //O enum serve, na maioria das veses, para ser usado em outras variaveis como pode ver abaixo {     Organizacao,     Cargo } //O enum tem função de criar váriaves que podem ser usadas em outras váriavies, exemplo: /* if(pDados[playerid][Cargo] != 6) {     SendClientMessage(playerid, -1, "Você não é LÍDER!"); } */ new pDados[MAX_PLAYERS][PlayerDados]; //Criamos a varíavel que amarzenará os Dados do player /* MAX_PLAYERS = Para qual player será setado ou getado tal informação, exemplo: pDados[playerid][Ornizacao] = CIVIL; PlayerDados = Como eu disse lá no começo, o enum cria varias váriaveis, que pode ser usadas aqui, ao invés de ter que usar aquele monte de "new" */ new GroveCars[3]; //O Número de veículos da organização +1 public OnGameModeInit() {     //Como adicionar veículos privados para tal Organização:     GroveCars[0] = AddStaticVehicle(509, -101.50000000, 1222.40002441, 19.29999924, 0.00000000, 1, 1); //Troque os parametros de acordo com sua necessidade     GroveCars[1] = AddStaticVehicle(509, -103.69999695, 1222.50000000, 19.29999924, 0.00000000, 1, 1);     GroveCars[2] = AddStaticVehicle(509, -103.69999695, 1222.50000000, 19.29999924, 0.00000000, 1, 1);     return 1; } public OnGameModeExit() {     DOF2_Exit(); //Sempre coloque isto aqui quando estiver a usar DOF2, ou irá dar um WARN, e mau funcionamento da include     return 1; } public OnPlayerRequestClass(playerid, classid) {     SpawnPlayer(playerid); //Ao aparecer aqueles setinhas (<<< >>> SPAWN), o jgador irá levar Spawn     return 1; } public OnPlayerConnect(playerid) {     SendClientMessage(playerid, -1, "Bem vindo ao Servidor!");     SendClientMessage(playerid, -1, "GameMode/Tutorial by CidadeNovaRP!");     new arquivo[34], playername[MAX_PLAYER_NAME]; //Criamos as váriaveos que irão armazenar o arquivo e o nome do jogador     GetPlayerName(playerid, playername, sizeof(playername)); //Getamos o nome do player     format(arquivo, sizeof(arquivo), "Contas/%s", playername); //Formatamos o arquivo de acordo com o nome do player (Contas/NOME)     pDados[playerid][Organizacao] = DOF2_GetInt(arquivo, "Organização"); //Setamos "pDados[playerid][Organizacao]" de acordo com a TAG getada do "arquivo"     pDados[playerid][Cargo] = DOF2_GetInt(arquivo, "Cargo"); //Setamos "pDados[playerid][Cargo]" de acordo com a TAG getada do "arquivo"     SpawnPlayer(playerid); //Dá SPAWN no player     return 1; } public OnPlayerDisconnect(playerid, reason) {     new arquivo[34], playername[MAX_PLAYER_NAME]; //Criamos as váriaveos que irão armazenar o arquivo e o nome do jogador     GetPlayerName(playerid, playername, sizeof(playername)); //Getamos o nome do player     format(arquivo, sizeof(arquivo), "Contas/%s", playername); //Formatamos o arquivo de acordo com o nome do player (Contas/NOME)     if(DOF2_FileExists(arquivo)) //Se a Conta existir     {         DOF2_SetInt(arquivo, "Organização", pDados[playerid][Organizacao]); //Setamos o valor de "pDados[playerid][Organizacao]" no "arquivo", com a TAG "Organização"         DOF2_SetInt(arquivo, "Cargo", pDados[playerid][Cargo]); //Setamos o valor de "pDados[playerid][Cargo]" no "arquivo", com a TAG "Cargo"     }     else //Se a conta não esxitir     {         DOF2_CreateFile(arquivo) //Cria o arquivo com os Dados do player         DOF2_SetInt(arquivo, "Organização", pDados[playerid][Organizacao]); //Setamos o valor de "pDados[playerid][Organizacao]" no "arquivo", com a TAG "Organização"         DOF2_SetInt(arquivo, "Cargo", pDados[playerid][Cargo]); //Setamos o valor de "pDados[playerid][Cargo]" no "arquivo", com a TAG "Cargo"     }     return 1; } public OnPlayerSpawn(playerid) {     if(pDados[playerid][Organizacao] == CIVIL) //Verifica a organização do player     {         //SetPlayerHealth(playerid, vida); Seta o HP do player         //SetPlayerArmour(playerid, colete); Seta o COLETE do player         //SetPlayerInterior(playerid, interior); Seta o INTERIOR do player         SetPlayerPos(playerid, x, y, z); //Seta a POS do player de acordo com as coordenadas     }     else if(pDados[playerid][Organizacao] == POLICIAM) //Verifica a organização do player     {         SetPlayerPos(playerid, x, y, z); //Seta a POS do player de acordo com as coordenadas     }     else if(pDados[playerid][Organizacao] == GROVE) //Verifica a organização do player     {         SetPlayerPos(playerid, x, y, z); //Seta a POS do player de acordo com as coordenadas     }     else if(pDados[playerid][Organizacao] == BALLAS) //Verifica a organização do player     {         SetPlayerPos(playerid, x, y, z); //Seta a POS do player de acordo com as coordenadas     }     return 1; } public OnPlayerDeath(playerid, killerid, reason) {     SpawnPlayer(playerid); //Spawn no nego!     return 1; } public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) {     //Como expulsar do véiculo se não for da organização:     if(vehicleid == GroveCars[0] || vehicleid == GroveCars[1] || vehicleid == GroveCars[2] && pDados[playerid][Organizacao] != GROVE) return SendClientMessage(playerid, -1, "Você não tem as chaves deste veículo e foi expulso."), RemovePlayerFromVehicle(playerid);     //Este comando é mais complexo, através do "if", verifica se o player está em algum dos veículos da grove, e depois se ele faz parte da grove, caso ele não seja, returna a função que expulsa ele do veículo     return 1; } public OnPlayerUpdate(playerid) {     new arquivo[34], playername[MAX_PLAYER_NAME]; //Criamos as váriaveos que irão armazenar o arquivo e o nome do jogador     GetPlayerName(playerid, playername, sizeof(playername)); //Getamos o nome do player     format(arquivo, sizeof(arquivo), "Contas/%s", playername); //Formatamos o arquivo de acordo com o nome do player (Contas/NOME)     if(DOF2_FileExists(arquivo)) //Se a Conta existir     {         DOF2_SetInt(arquivo, "Organização", pDados[playerid][Organizacao]); //Setamos o valor de "pDados[playerid][Organizacao]" no "arquivo", com a TAG "Organização"         DOF2_SetInt(arquivo, "Cargo", pDados[playerid][Cargo]); //Setamos o valor de "pDados[playerid][Cargo]" no "arquivo", com a TAG "Cargo"     }     else //Se a conta não esxitir     {         DOF2_CreateFile(arquivo) //Cria o arquivo com os Dados do player         DOF2_SetInt(arquivo, "Organização", pDados[playerid][Organizacao]); //Setamos o valor de "pDados[playerid][Organizacao]" no "arquivo", com a TAG "Organização"         DOF2_SetInt(arquivo, "Cargo", pDados[playerid][Cargo]); //Setamos o valor de "pDados[playerid][Cargo]" no "arquivo", com a TAG "Cargo"     }     return 1; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {     if(dialogid == 666) //Verifica se o id do dialog == 666 (do convite)     {         new playername[MAX_PLAYER_NAME], string[128]; //Variaveis que irá armazenar o nome e "string"         GetPlayerName(playerid, playername, sizeof(playername)); //Geta o nome do player que aparaceu o dialog         if(response) //Se ele clicar em SIM...         {             pDados[playerid][Organizacao] = GetPVarInt(playerid, "OrgConvidado"); //Seta a organização de acordo com a PVarInt do comando /convida             pDados[playerid][Cargo] = 1; //Seta o cargo a 1             format(string, sizeof(string), "%s aceitou seu Convite.", playername); //Formata uma mensagem com o nome do player que aceitou             SendClientMessage(GetPVarInt(playerid, "QuemConvidou"), COR_SUCESSO, string); //Envia a mensgaem a quem convidou             format(string, sizeof(string), "%s é o mais novo membro da Organização.", playername); //Formata uma mensgaem com o nome do player que aceitou             SendFamilyMessage(pDados[playerid][Organizacao], GetPlayerColor(playerid), string); //Manda a mensagem para a organização do player             SendClientMessage(playerid, COR_SUCESSO, "Você aceitou o Convite."); //Manda uma mensagem amigavel ao player que aceitou :P             DeletePVar(playerid, "OrgConvidado"); //Deleta o PVar             DeletePVar(playerid, "QuemConvidou"); //Deleta o PVar             SpawnPlayer(playerid); //Spawn nele!         }         else //Se ele ciclar em NÃO...         {             format(string, sizeof(string), "%s rejeitou seu Convite.", playername); //Formata a mensgaem com o nome do player que rejeitou o convite             SendClientMessage(GetPVarInt(playerid, "QuemConvidou"), COR_SUCESSO, string); //Envia a mensagem a quem convidou o player             SendClientMessage(playerid, COR_SUCESSO, "Você rejeitou o Convite."); //Manda uma mensagem amigavel ao player que rejeitou :P             DeletePVar(playerid, "OrgConvidado"); //Deleta o PVar             DeletePVar(playerid, "QuemConvidou"); //Deleta o PVar         }     }     return 1; } //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=( COMANDOS )=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= CMD:membros(playerid) {     new playername[MAX_PLAYER_NAME], string[128]; //Criamos variaveis que irão armazenar o nome e mensganes formatadas     if(pDados[playerid][Organizacao] >= 1)     {         SendClientMessage(playerid, 0xBFC0C2FF, "(=-=-=-=-=-=-=({FFD700}Membros Online{BFC0C2})=-=-=-=-=-=-=)");         for(new i = 0; i < MAX_PLAYERS; i++) //Criamos um loop de acordo com o MAX_PLAYERS         {             if(IsPlayerConnected(i)) //Verifica se o "i" (player) do loop está online             {                 if(pDados[i][Organizacao] == pDados[playerid][Organizacao]) //Verifica se a organização do player (do loop) é igual a do player que digitou o comando                 {                     GetPlayerName(i, playername, sizeof(playername)); //Geta o nome do player(loop)...                     if(pDados[i][Cargo] <= 4) //Verifica se o player do loop e cargo 4 ou menos                     {                         format(string, sizeof(string), "Membro: %s, Cargo: %d", playername, pDados[i][Cargo]); //Formata uma mensgaem com o nome e cargo do player (loop)                         SendClientMessage(playerid, GetPlayerColor(playerid), string); //Envia a mensagem do player que digitou o comando                     }                     else                     {                         if(pDados[i][Cargo] == 6) //Verifica se o player é Líder e formata/envia uma mensagem diferente/destacada                         {                             format(string, sizeof(string), "Membro: %s, Cargo: Líder", playername);                             SendClientMessage(playerid, GetPlayerColor(playerid), string);                         }                         else if(pDados[i][Cargo] == 5) //Verifica se o player é Líder e formata/envia uma mensagem diferente/destacada                         {                             format(string, sizeof(string), "Membro: %s, Cargo: Sub-Líder", playername);                             SendClientMessage(playerid, GetPlayerColor(playerid), string);                         }                     }                 }             }         }     }     else     {         SendClientMessage(playerid, COR_ERRO, "Você não pertence a nenhuma Organização.");     }     return 1; //Returnando a 1, nunca se esqueça! } CMD:r(playerid, params[]) {     new text[128], string[128], playername[MAX_PLAYER_NAME]; //Criando variavés...     if(sscanf(params, "s", text)) return SendClientMessage(playerid, COR_ERRO, "USE: /r [MENSAGEM]"); //Aqui está o triunfo do sscanf! Para saber mais informações leia o Tópico     if(pDados[playerid][Organizacao] == CIVIL) return SendClientMessage(playerid, COR_ERRO, "Civis não tem Rádio."); //Verifica se o player é CIVIL, se for, returna a mensagem     GetPlayerName(playerid, playername, sizeof(playername)); //Geta o nome de quem usou o comando     format(string, sizeof(string), "(Rádio) %s [Cargo: %d] diz: %s", playername, pDados[playerid][Cargo], text); //Formata uma mensagem com o nome do player, cargo e a mensgem     SendFamilyMessage(pDados[playerid][Organizacao], COR_RAD, string); //Envia a mensagem a organização do player     return 1; //Returnando a 1, nunca se esqueça! } CMD:convidar(playerid, params[]) {     new id, playername[MAX_PLAYER_NAME], idname[MAX_PLAYER_NAME], string[128]; //Cria variaveis que irão armazenar id, nome e string     if(pDados[playerid][Cargo] != 6) return SendClientMessage(playerid, COR_ERRO, "Você não é líder."); //Vê se quem digitou o comando é líder, se não, returna a mensagem     if(sscanf(params, "d", id)) return SendClientMessage(playerid, COR_ERRO, "USE: /convidar [ID]"); //Aqui está o triunfo do sscanf! Para saber mais informações leia o Tópico     if(!IsPlayerConnected(id)) return SendClientMessage(playerid, COR_ERRO, "Este jogador não está online."); //Verifica se o "id" está online...     if(pDados[id][Organizacao] != 0) return SendClientMessage(playerid, COR_ERRO, "Este jogador já está em uma Organização."); //Verifica se o player já está em alguma organização, se estiver, returna a mensagem     if(playerid == id) return SendClientMessage(playerid, COR_ERRO, "Você não pode convidar a você mesmo."); //Verifica se o "id" = id de quem digitou (playerid)     GetPlayerName(id, idname, sizeof(idname)); //Geta o nome do "id"     format(string, sizeof(string), "Você convidou %s para sua Organização.", idname); //Formata a mensagem com que foi convidado     SendClientMessage(playerid, GetPlayerColor(playerid), string); //Envia a mensagem ao líder     GetPlayerName(playerid, playername, sizeof(playername)); //Geta o nome de quem digitou o comando     format(string, sizeof(string), "%s está lhe Convidando para fazer parte da Organização: %s \nDeseja aceitar?", playername, GetOrgName(pDados[playerid][Organizacao])); //Formata um dialog com o nome de que convidou e o nome da organização     ShowPlayerDialog(id, 666, DIALOG_STYLE_MSGBOX, "Convite para organização", string, "Sim", "Não"); //Cria o dialog de acordo com a "string" e a mostra para o "id"     SetPVarInt(id, "OrgConvidado", pDados[playerid][Organizacao]); //Setando PVarInt que será usar no OnDialogResponse     SetPVarInt(id, "QuemConvidou", playerid); //Setando PVarInt que será usar no OnDialogResponse     return 1; //Returnando a 1, nunca se esqueça! } CMD:promover(playerid, params[]) {     new id, cargo, string[128], playername[MAX_PLAYER_NAME], idname[MAX_PLAYER_NAME]; //Cria as váriveis...     if(pDados[playerid][Cargo] != 6) return SendClientMessage(playerid, COR_ERRO, "Você não é líder."); //Verifica se o player que digitou o comando é líder     if(sscanf(params, "dd", id, cargo)) return SendClientMessage(playerid, COR_ERRO, "USE: /promover [ID] [CARGO]"); //Aqui está o triunfo do sscanf! Para saber mais informações leia o Tópico     if(!IsPlayerConnected(id)) return SendClientMessage(playerid, COR_ERRO, "Este jogador não está online."); //Verifica se o player que será promovido está online     if(pDados[id][Organizacao] != pDados[playerid][Organizacao]) return SendClientMessage(playerid, COR_ERRO, "Este jogador não é da mesma Organização que você."); //Verifica se o "id" é da mesma organização do líder     if(playerid == id) return SendClientMessage(playerid, COR_ERRO, "Você não pode promover a você mesmo."); //Verifica se o "id" é ele mesmo (playerid)     if(cargo >= 1 || cargo <= 5) //Verifica se o cargo está entre 1 a 5     {         pDados[id][Cargo] = cargo; //Seta o cargo do player de acordo com o "cargo" que o líder digitou         GetPlayerName(playerid, playername, sizeof(playername)); //Geta o nome do player que digitou o comando         GetPlayerName(id, idname, sizeof(idname)); //Geta o nome de quem recebeu a promoção         format(string, sizeof(string), "%s promoveu o membro %s para o Cargo %d.", playername, idname, cargo); //Formata a mesgaem com quem prommoveu, quem foi promovido e o cargo         SendFamilyMessage(pDados[playerid][Organizacao], GetPlayerColor(playerid), string); //Envia a mensagem para a organização         format(string, sizeof(string), "%s te promoveu para o Cargo %d.", playername, cargo); //Formata a mensgame...         SendClientMessage(id, GetPlayerColor(playerid), string); //Envia a mesngaem para quem foi promovido     }     else //Caso o cargo não esta de 1 a 5, envia a mensagem abaixo:     {         SendClientMessage(playerid, COR_ERRO, "Cargos de 1 a 5");         return 1;     }     return 1; //Returnando a 1, nunca se esqueça! } CMD:demitir(playerid, params[]) {     new id, motivo[128], string[128], playername[MAX_PLAYER_NAME], idname[MAX_PLAYER_NAME]; //Criando variaveis :P     if(pDados[playerid][Cargo] != 6) return SendClientMessage(playerid, COR_ERRO, "Você não é líder."); //Verifica se o player que digitou o comando é lider     if(sscanf(params, "ds", id, motivo)) return SendClientMessage(playerid, COR_ERRO, "USE: /demitir [ID] [MOTIVO]"); //Aqui está o triunfo do sscanf! Para saber mais informações leia o Tópico     if(!IsPlayerConnected(id)) return SendClientMessage(playerid, COR_ERRO, "Este jogador não está online."); //Verifica se quem será demitido está online     if(pDados[id][Organizacao] != pDados[playerid][Organizacao]) return SendClientMessage(playerid, COR_ERRO, "Este jogador não é da mesma Organização que você."); //Verifica se o "id" é da mesma organização do líder     if(playerid == id) return SendClientMessage(playerid, COR_ERRO, "Você não pode demitir a você mesmo."); //Verifica se o "id" é ele mesmo (playerid)     pDados[id][Organizacao] = CIVIL; //Seta a organização do player a CIVIL     pDados[id][Cargo] = 0; //Seta o cargo od player a 0     GetPlayerName(playerid, playername, sizeof(playername)); //Geta o nome de quem demitiu     GetPlayerName(id, idname, sizeof(idname)); //Geta o nome de quem foi demitido     format(string, sizeof(string), "%s demitiu o membro %s da Organização.", playername, idname); //Formata uma mensagem com o nome de quem demitiu e quem foi demitido     SendFamilyMessage(pDados[playerid][Organizacao], GetPlayerColor(playerid), string); //Envia a mensagem para a organização     format(string, sizeof(string), "%s te demitiu da Organização. Motivo: %s.", playername, motivo); //Formata uma mensagem com o nome de quem demitiu e o motivo     SendClientMessage(id, GetPlayerColor(playerid), string); //Envia a mensagem para quem foi demitido     SpawnPlayer(id); //Spawn no nego!     return 1; //Returnando a 1, nunca se esqueça! } CMD:darlider(playerid, params[]) {     new id, org, string[256], quemdeu[MAX_PLAYER_NAME], quemganhou[MAX_PLAYER_NAME]; //Cria váriaveis que irá armazenar o id do líder, a organização, o nome etc...     if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COR_ERRO, "{00E5FF}Você não está autorizado a usar este Comando."); //Verifica se o player está logado na RCON, se não, returna a mensagem     if(sscanf(params, "ii", id, org)) return SendClientMessage(playerid, COR_ERRO, "USE: /darlider [ID] [ORGANIZAÇÃO]"); //Aqui está o triunfo do sscanf! Para saber mais informações leia o Tópico     if(!IsPlayerConnected(id)) return SendClientMessage(playerid, COR_ERRO, "Este jogador não está online."); //Verifica se o player que iria ser setado líder está online     if(playerid == id) return SendClientMessage(playerid, COR_ERRO, "Você não pode dar lider a você mesmo."); //Verifica se o "id" é igual ao seu (playerid)     GetPlayerName(id, quemganhou, sizeof(quemganhou)); //Geta o nome de quem ganhou a lideança     GetPlayerName(playerid, quemdeu, sizeof(quemdeu)); //Geta o nome do admin que deu o líder     format(string, sizeof(string), "Você  deu líder da Organização %s para %s(ID: %d)", GetOrgName(org), quemganhou, id); //Formata uma mensagem com o nome de quem ganhou a liderança, o nome da orgnização que foi setada e o "id"     SendClientMessage(playerid, COR_AZUL_CLARO, string); //Manda a mensgem formatada para quem digitou o comando (quem deu o líder)     format(string, sizeof(string), "%s(ID: %d) te deu líder da Organização %s.", quemdeu, playerid, GetOrgName(org)); //Formata uma mensgame com quem deu a liderança, o "playerid" e o nome organização setada     SendClientMessage(id, COR_AZUL_CLARO, string); //Envia a mensgaem formatada para que recebeu a liderança     format(string, sizeof(string), "%s(ID: %d) é o novo líder da Organização %s.", quemganhou, id, GetOrgName(org)); //Formata a mensagem...     SendClientMessageToAll(COR_AZUL_CLARO, string); //Envia a mensagem para todos Online     pDados[id][Organizacao] = org; //Seta a organização do "id"     pDados[id][Cargo] = 6; //Seta o cargo (liderança) do "id"     SpawnPlayer(id); //Spawna o player que rebeu a liderança     return 1; //Returnando a 1, nunca se esqueça! } CMD:equipar(playerid) {     if(pDados[playerid][Organizacao] == CIVIL) return SendClientMessage(playerid, COR_ERRO, "Você é Civil e não pode equipar."); //Verifica se o player é CIVIL, se for returna a mensagem     if(!IsPlayerInRangeOfPoint(playerid, 3.0, x, y, z)) return SendClientMessage(playerid, COR_ERRO, "Você não está no local para se equipar"); //Verifica se o player está nas coordenadas, se for returna a mensagem     new ammo = 50*pDados[playerid][Cargo]; //Isto fára que multiplique 50 pelo cargo do player, sendo assim, a munição que o player terá     GivePlayerWeapon(playerid, 3, 1); //Dá um cassetete ao player     GivePlayerWeapon(playerid, 31, ammo); //Dá uma M4 ao player     GivePlayerWeapon(playerid, 23, ammo); //Dá uma pistola silenciosa ao player     return 1; //Returnando a 1, nunca se esqueça! } stock GetOrgName(orgid) //stock que geta o nome da Organização de acordo com a "orgid" {     new str[30];     if(orgid == 0)     {         str = "Civil";     }     else if(orgid == 1)     {         str = "Policia Militar";     }     else if(orgid == 2)     {         str = "Grove";     }     else if(orgid == 3)     {         str = "Ballas";     }     return str; } stock SendFamilyMessage(orgid, cor, mensagem[]) //stock que envia a mensagem para tal organização de acordo com "ogrid" {     for(new i = 0; i < MAX_PLAYERS; i++)     {         if(IsPlayerConnected(i))         {             if(pDados[i][Organizacao] == orgid)             {                 SendClientMessage(i, cor, mensagem);             }         }     }     return 0; }

Triunfo do SSCANF:
pawn Code:
//Triunfo do SSCAF: /*Bem, veja o EXEMPLO abaixo:*/ CMD:pm(playerid, params[]) {     new id, text[128], playername[24], str[128];     sscanf(params, "ds", id, text) return 1;     GetPlayerName(playerid, playername, sizeof(playername));     format(str, sizeof(str), "PM de %s: %s", playername, text);     SendClientMessage(id, -1, str);     return 1; } Como puderam ver, o sscanf funciona praticamente igual ao format, as diferençãs são que no format usamos por exemplo, %s para letras, %d para ids e %i para numeros, já no sscanf usamos o s, d e i A outra diferença é que o sscanf não precisa de sizeof e ele, vamos dizer assim, organiza o "params" do ZCMD Usando SSCANF: Primeiro é claro precisamos da função: sscanf Depois a variavel que será verificada, sendo: params Agora, o formato das variaveis que serão definidas pelas variaveis: "ds" (d[ids] como se fosse o %d do format e o s[letras], como se fosse o %s) Por fim, a variavel que irá armazenar o parametro, de acordo com o formato de cada variavel, se for "s", deveremos usar strings pro causa das letras, caso seja "d" ou "i", podemos usar uma variavel comum que armazena apenas algoritimos númericos, ficando: id, text CODE Final: sscanf(params, "ds", id, text);

[TUTO] Criando Sistema de Cigarros

terça-feira, 15 de maio de 2012
Tutorial

Como aprender e/ou usar um Sistema de Cigarros no teu Gamemode. Óptimo para Roleplay.


Primeiro que nada terá que usar apenas tres includes no topo do GM:

pawn Code:
#include <zcmd> #include <sscanf2> #include <a_samp>
Nota: O sscanf2 nao é necessário neste caso, porém eu pus no tutorial para voces agora criarem os vossos próprios sistemas mais complexos. 


Segundo terá que criar a variável que permitirá a contagem dos seus cigarros:
pawn Code:
new Cig[MAX_PLAYERS];

Juntamente crie ou adicione as cores necessárias. 

pawn Code:
#define COLOR_GREEN             0x33AA33AA #define COLOR_RED               0xA10000AA



Terceiro agora vamos dificultar um bocado.
Vamos criar um comando para que o Player ganhe os cigarros, neste caso os compre.

pawn Code:
CMD:comprarcigarros(playerid, params[]) {     Cig[playerid] = 10;     SendClientMessage(playerid, COLOR_GREEN, "Tiraste um cigarro do maço.");     GivePlayerMoney(playerid, -200);     return 1; }

Explicaçao:
Code:
Cig[playerid] = 10; - Significa os Cigarros que o player irá receber.
SendClientMessage(playerid, COLOR_GREEN, "Tiraste um cigarro do maço."); - Manda mensagem ao Player.
GivePlayerMoney(playerid, -200); - Significa o dinheiro que o player irá pagar.

Quarto, vamos criar um comando para que o Player fume:
pawn Code:
CMD:fumar(playerid, params[]) {     if(Cig[playerid] == 0) return SendClientMessage(playerid,COLOR_RED,"Ja nao tens mais cigarros!");     SetPlayerSpecialAction(playerid, SPECIAL_ACTION_SMOKE_CIGGY);     SendClientMessage(playerid,COLOR_GREEN,"Acendeste um cigarro!");     Cig[playerid] --;     return 1; }

Explicação:
Code:
if(Cig[playerid] == 0) return SendClientMessage(playerid,COLOR_RED,"Ja nao tens mais cigarros!"); - Significa se estiver 0 cigarros, já não pode fumar mais.
    SetPlayerSpecialAction(playerid, SPECIAL_ACTION_SMOKE_CIGGY); - oferece ao playerid, um cigarro.
    SendClientMessage(playerid,COLOR_GREEN,"Acendeste um cigarro!"); - Manda mensagem ao player.
    Cig[playerid] --;

Quinto vamos criar um comando para que o player saiba quantos cigarros tem no seu "maço".
pawn Code:
CMD:maço(playerid, params[]) {     SendClientMessage(playerid, COLOR_GREEN,"======== Maço ========");     new string[MAX_PLAYERS];     format(string,sizeof(string),"Cigarros: %d",Cig[playerid]);     SendClientMessage(playerid,COLOR_GREEN,string);     return 1; }

Explicação:
Code:
SendClientMessage(playerid, COLOR_GREEN,"======== Maço ========"); - Mandar mensagem.
    new string[MAX_PLAYERS]; - Contagem de string neste caso cigarros no format abaixo.
    format(string,sizeof(string),"Cigarros: %d",Cig[playerid]); - Mensagem que diz quantos cigarros tens.
    SendClientMessage(playerid,COLOR_GREEN,string); - Afirma que é uma ClientMessage, e dá a cor á mensagem.

Créditos: Murillo_Henrique  e eu :b


Nota: Peço desculpa por alguma coisa, eu sei que o código do rapaz que criou o sistema de cigarros está parecido com o meu. Eu apenas usei o que ele fez e adaptei-o á minha maneira. Espero que tenho deixado tudo bem esclarecido. Alguma dúvida é só dizer (:

[TUTO] Criando Nosso Primeiro FilterScript

segunda-feira, 14 de maio de 2012
                                              Introdução:

Bom Galera do Detonado Samp
Hoje eu irei postar a Tutorial do AmericanStyle'™
.
Bom ele estava Sem Internet, Dai decidiu Criar uma video Aula.
Nesta Video Aula ele ensina a Vocês Novatos A Criar Seu Primeiro Projeto Em FilterScript.
A Tutorial é Apenas Uma Base de Como criar.
Agora vai da imaginação do Criador a Fazer o Seu 
Vamos Ao que interessa:

Funções:

O Projeto Tem a Finalidade De Ajudar Qualquer Interessado A Criar FilterScripts.


Video Aula:


Erro:

Ele Cometeu Um pequeno erro No minuto de 6:10
Onde O #CODE esta assim:
pawn Code:
GivePlayerWeapon(playerid,Arma);
o Correto Seria:
pawn Code:
GivePlayerWeapon(Id,Arma);

Espero que Gostem 


Qualquer Duvida Erro, Conselho, Critica e Elogios só comentar
-------------------------------------------------------------------
Créditos: Murillo_Henrique
Correção: Murillo_Henrique
Postador: Murillo_Henrique



Criando Portão - 0.3d Samp

sábado, 12 de maio de 2012
Cita:
new Portao;
forward ClosePortao(playerid);


Explicação:
São Funções do PAWNO para Definir Coisas ( new é uma array que irá criar algo novo, como Floats, strings, numeros, ETC (Dica do BlueX)... forward para Definir novas Publics )
Este será o Nome do seu Portão, lembre-se que ele será usado no Futuro
Está é a public que Irá ser Fechar seu Portão, coloque com o Nome que mais lhe Agradá...

CODE:

pawn Código:
new Portao;
forward ClosePortao(playerid);


Agora no public OnGameModeInit:

Cita:
Portao = CreateObject(970, 1, 2, 3, 0, 0, 0);


Explicação:
Deve ser usado o mesmo Nome que foi definido no "new" do Topo do GM
Essa Função fará com que Crie o Portão
MODELID, X, Y, Z, ROTX, ROTZ, ROTY do seu Portão Fechado

CODE:

pawn Código:
Portao = CreateObject(970, 1, 2, 3, 0, 0, 0);


public OnPlayerCommandText:

Cita:
if (strcmp("/portao", cmdtext, true, 10) == 0)
{
if(IsPlayerInRangeOfPoint(playerid,7.0, 1, 2, 3))
{
SendClientMessage(playerid, -1, "Portão Aberto, irá Fechar em 5 Segundos");
MoveObject(Portao, 1, 2, 2, 1.0, 0.0, 0.0, 0.0);
SetTimer("ClosePortao", 5000, false);
}
return 1;
}
return 0;
}


Explicação:
O Comando que fará o Portão Abrir
7.0 = Ratio de Alcance do Comando
1 = Coordenada X do Portão Fechado
2 = Coordenada Y do Portão Fechado
3 = Coordenada Z do Portão Fechado
SendClientMessage = Comando que Manda Mensagem para um Player especifico
playerid = Player que irá Receber a Mensagem, no caso que Executou o Comando
-1 = Cor da Mensagem
"Portão Aberto, irá Fechar em 5 Segundos" = Adivinha?
MoveObject = Comando que fará o Portão se Mover, neste caso, Abrir
Portao, 1, 2, 2, 1.0, 0.0, 0.0, 0.0 = Nome do Portão Definido, X, Y, Z, VELOCIDADE, ROTX, ROTZ, ROTY
ClosePortao = Public que irá ser Executada, no caso, a que irá Fechar o Portão
5000 = Tempo para a Public ser executada, nesse caso, 5000 = 5 Segundos
false = Não Mude =)
return 1; = Retornando a 1
return 0; = Retornando a 0

CODE:

pawn Código:
if (strcmp("/portao", cmdtext, true, 10) == 0)
{
if(IsPlayerInRangeOfPoint(playerid,7.0, 1, 2, 3))
{
SendClientMessage(playerid, -1, "Portão Aberto, irá Fechar em 5 Segundos");
MoveObject(Portao, 1, 2, 2, 1.0, 0.0, 0.0, 0.0);
SetTimer("ClosePortao", 5000, false);
}
return 1;
}
return 0;
}


Final do GM:

Cita:
public ClosePortao(playerid)
{
MoveObject(Portao, 1, 2, 3, 1.0, 0.0, 0.0, 0.0);
return 1;
}


Explicação:
Coloque a Public Definida no Começo do GM, que nesse caso foi "ClosePortao"
Comando que irá fazer o Portão se Mover, neste caso, Fechando o Portão...
Portao, 1, 2, 3, 1.0, 0.0, 0.0, 0.0 = Nome do Portão Definido, X, Y, Z, VELOCIDADE, ROTX, ROTZ, ROTY
Retornando a 1

CODE:

pawn Código:
public ClosePortao(playerid)
{
MoveObject(Portao, 1, 2, 3, 1.0, 0.0, 0.0, 0.0);
return 1;
}




No public OnPlayerKeyStateChange:



Cita:
if ((newkeys==KEY_JUMP))
{
OnPlayerCommandText(playerid,"/portao");
}
return 1;
}


Explicação:
KEY_JUMP = Key que Irá executar o que Estiver Abaixo dele ( KEY_JUMP = Freio/Pulo ), lista de KEY's: http://wiki.sa-mp.com/wiki/GetPlayerKeys
/portao = Comando que será Executado ao Apertar a KEY que foi Selecionada
Retornado a 1

CODE:

pawn Código:
if ((newkeys==KEY_JUMP))
{
OnPlayerCommandText(playerid,"/portao");
}
return 1;
}




CODE Final:

pawn Código:
#include <a_samp>
new Portao;
forward ClosePortao(playerid);
public OnGameModeInit()
{
Portao = CreateObject(970, 1, 2, 3, 0, 0, 0);
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/portao", cmdtext, true, 10) == 0)
{
if(IsPlayerInRangeOfPoint(playerid,7.0, 1, 2, 3))
{
SendClientMessage(playerid, -1, "Portão Aberto, irá Fechar em 5 Segundos");
MoveObject(Portao, 1, 2, 2, 1.0, 0.0, 0.0, 0.0);
SetTimer("ClosePortao", 5000, false);
}
return 1;
}
return 0;
}
public ClosePortao(playerid)
{
MoveObject(Portao, 1, 2, 3, 1.0, 0.0, 0.0, 0.0);
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if ((newkeys==KEY_JUMP))
{
OnPlayerCommandText(playerid,"/portao");
}
return 1;
}