[Tutorial] Como utilizar ZCMD + sscanf - Com exemplo.
#1

Tutorial
Oi pessoal! Aqui й o SrAlface007, bom. Hoje, vou ensinar a utilizar o ZCMD + sscanf. Entгo, prossigamos.

Primeiro, colocaremos no topo do seu FS ou GM os includes.


Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include <string>
(a include string, nгo baixem. Pois ela jб vem no server SA-MP!)

Agora se lembre: Todos os comandos ZCMD, nгo podem estar em qualquer callback!! apenas fora da callback, bom. Eu sempre coloco no final do FS ou GM.

Para criar um comando colocamos:

Код:
CMD:NomeDoComandoSemBarra(playerid, params[] {
// CMD: = comando, PlayerId = Player que executarб o comando, params = paramкtro //
Primeiro, vocк precisa entender sobre variбveis.
Sу o mнnimo! Poderб encontrar tutoriais no fуrum. Pela equipe do Fуrum!

Criaremos as variбveis que precisaremos:

Код:
new id; // Id do jogador que receberб o comando, caso nгo seja para um jogador. E sim para vocк, nгo crie pelo //  //ZCMD.

new skin; // Coloque o nome do comando que serб executado, eu colocarei skin. Pois trocarei a skin, mas pode ser //qualquer outro nome, por exemplo. Criarei vida, para dar vida ao jogador. Entгo posso colocar qualquer nome de  //variбvel.

new str[128]; // Й ai que usaremos a include String. Ela servirб para dizer ao jogador, o que foi executado nele.

new aName [MAX_PLAYER_NAME]; // Serб o administrador que executarб o comando no jogador.
Agora colocaremos

Код:
GetPlayerName(playerid, aName, MAX_PLAYER_NAME); // Ele servirб para getar o id do jogador  que o comando serб executado e o nome do Administrador que usarб o comando.
Para sу os administradores usarem, usaremos o IsPlayerAdmin.

Код:
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO] Vocк nгo й um administrador(a)!"); // If = Se, !IsPlayerAdmin = Usamos quando se o jogador for admin ele nгo usarб o comando, isso serб feito. Apуs o Return. PlayerID = Identificar qual jogador estб usando esse comando, return = para voltar o comando, ou seja. Se nгo for admin, o comando nгo serб executado. E apуs isso algo serб executado. // SendClientMessage = Para enviarmos uma mensagem ao jogador que estarб usando o comando. 0xFF0000FF (cor vermelha) = Cor da mensagem que serб transmitida ao jogador. E apуs as aspas, use o texto que serб dito ao jogador. Que tentarб usar um comando que sу й restrito aos administradores.
Agora usaremos o SSCANF.
Код:
if(sscanf(params, "ddd", id, skin)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO] Digite: /setarskin [id] [id da skin]"); // IF = se, sscanf = serб o include usado para dizer ao administrador que o seu comando estб sendo digitado errado, caso ele digite sу /setarskin ou /setarskin id. Apуs isso usaremos Params = Parвmetro, para dizer como o comando serб usado. Entгo colocaremos "ddd", id, nomedavariavel)) Caso ele coloque errado, o return serб ocorrido e avisarб como o comando deve ser usado. Ou seja, ai entra o SendClientMessage, que jб expliquei.
Usaremos agora IsPlayerConnected.
Код:
if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO] O player nгo estб conectado."); // If = se, !IsPlayrerConnected(id)) = vai verificar se o id digitado estб conectado, caso nгo. Serб executado o return, que o SendClientMessage falarб o que aconteceu.
Agora colocaremos, o comando. Que poderб ser encontrado na WIKI do SA-MP, como eu usei a skin. Usarei o comando da skin.

Код:
SetPlayerSkin(id, skin); // SetPlayerSkin = Serб o comando que vocк colocarб que deseja executar, pode colocar-se qualquer outro que seja vбlido. EU coloquei SetPlayerSkin pois й o comando que usarei, nos parкnteses, coloque as variбveis. Ou seja. id = Id do jogador se serб executado o comando, Skin = Coloque a variбvel que vocк criou para utilizar o comando. No meu caso, coloquei SKIN.
Agora, usaremos a string!

Код:
format(str, sizeof(str), "[x] O Administrador(a) %s setou sua skin para a ID: %d", aName, skin); // Format = Vai dizer ao player, o modo que foi executado. O comando que vai ser executado. Str ou String ( vocк pode colocar um desses dois, ou str ou String) = Serб o que dizerб os nomes. Ou seja %s. Apуs isso, usaremos entre as aspas. O Administrador(a) %s. %s = String, usamos para idenficar Nomes, palavras, letras ou frases. setou sua skin para a ID: %d, %d = Usamos para nъmeros inteiros, exemplo: 2, 3, 109, 180000. Apуs as aspas, colocaremos de acordo com a ordem usada. Usamos o nome do administrador primeiro, usando a %s. Entгo colocaremos primeiro o. Aname, apуs o aName. Colocamos o nome da variбvel usada. Assim a variбvel dizerб o valor do que foi mudado no jogador.
Apуs isso, colocaremos o SendClientMessage. Para identificar a cor do erro.

Код:
SendClientMessage(id, 0xFF0000FF, str); // Essa nem preciso explicar, acabei de explicar na mensagem acima.
Quando o comando for terminado usaremos, return.

Код:
return 1;
}
AVISO!!!!!!!!!: OS COMANDOS SУ PODERГO SER USADOS CASO VOCК ESTEJA LOGADO NA RCON!! SE NГO USAR O aNAME PODERБ USAR OS COMANDOS COMO PLAYER!!
COMANDO INTEIRO (skin)

Код:
CMD:setarskin(playerid, params[]) {

new id;
new skin;
new str[128];
new aName [MAX_PLAYER_NAME];
GetPlayerName(playerid, aName, MAX_PLAYER_NAME);
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO] Vocк nгo й um administrador(a)!");
if(sscanf(params, "ddd", id, skin)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO] Digite: /setarskin [id] [skin]");
if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO] O player nгo estб conectado.");
SetPlayerSkin(id, skin);
format(str, sizeof(str), "[x] O Administrador(a) %s setou sua skin para a ID: %d", aName, skin);
SendClientMessage(id, 0xFF0000FF, str);
return 1;
}
Exemplo

Aqui usarei um sistema administrativo, que ainda estб em processo. Bom, ainda nгo terminei. (Nгo use o comando /kick ou /ban!)

Код:
#include <a_samp>
#include <ZCMD>
#include <string>
#include <sscanf2>
#if defined FILTERSCRIPT
#define red 0xFF0000AA
#define str String

public OnFilterScriptInit()
{
	print("\n--------------------------------------");
	print(" Sistema Administrativo (ZCMD) By: SrAlface007"); // Para usar os comandos, й necessбrio estar logado na rcon!
	print("--------------------------------------\n");
	return 1;
}

public OnFilterScriptExit()
{
	return 1;
}

#endif


// Comandos ZCMD // Nгo mecha em nada desse script, pois qualquer coisa que vocк fizer errado, o sistema pode parar de funcionar!
CMD:setarvida(playerid, params[]) {
new id;
new str[128];
new vida;
new aName [MAX_PLAYER_NAME];
GetPlayerName(playerid, aName, MAX_PLAYER_NAME);
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "[Erro] Vocк nгo й um administrador(a)!"); // O que darб se o player nгo for administrador.
if(sscanf(params, "ddd", id, vida)) return SendClientMessage(playerid, 0xFF0000FF, "[Erro] Digite: /setarvida [id] [quantidade]");
if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xFF0000FF, "[Erro] O player nгo estб conectado.");
SetPlayerHealth(id, vida);
format(str, sizeof(str), "[x] O Administrador(a) %s lhe deu vida, quantidade: %d .", aName, vida);
SendClientMessage(id, 0xFF0000FF, str);
return 1;

}


CMD:dararma(playerid, params[]) {
new id;
new str[128];
new arma;
new municao;
new aName [MAX_PLAYER_NAME];
GetPlayerName(playerid, aName, MAX_PLAYER_NAME);
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF00000FF, "[ERRO] Vocк nгo й um administrador(a)!");
if(sscanf(params, "ddd", id, arma, municao)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO] Digite: /dararma [id] [arma] [muniзгo]");
if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO] O player nгo estб conectado.");
GivePlayerWeapon(id, arma, municao);
format(str, sizeof(str), "[x] O Administrador(a) %s lhe deu a arma ID: %d com %d de muniзгo(хes)", aName, arma, municao);
SendClientMessage(id, 0xFF0000FF, str);
return 1;

}






CMD:setarcolete(playerid, params[]) {
new id;
new str[128];
new colete;
new aName [MAX_PLAYER_NAME];
GetPlayerName(playerid, aName, MAX_PLAYER_NAME);
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "[Erro] Vocк nгo й um administrador(a)!");
if(sscanf(params, "ddd", id, colete)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO] Digite: /setarcolete [id] [colete]");
if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO] O player nгo estб conectado.");
SetPlayerArmour(id, colete);
format(str, sizeof(str), "[x] O Administrador(a) %s lhe deu colete, quantidade: %d .", aName, colete);
SendClientMessage(id, 0xFF0000FF, str);
return 1;

}



CMD:comandosadmin(playerid, params[]) {



if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO] Vocк nгo й um administrador(a)!");
SendClientMessage(playerid, 0xFF0000FF, " /setarcolete /setarvida /dararma /comandosadmin");
SendClientMessage(playerid, 0xFF0000FF, " /setarscore /trazer /ir /kick /ban /lchat /setarskin");
return 1;
}

CMD:setarscore(playerid, params[]) {

new id;
new score;
new str[128];
new aName [MAX_PLAYER_NAME];
GetPlayerName(playerid, aName, MAX_PLAYER_NAME);
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO] Vocк nгo й um administrador(a)!");
if(sscanf(params, "ddd", id, score)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO] Digite: /setarscore [id] [score]");
if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO] O player nгo estб conectado.");
SetPlayerScore(id, score);
format(str, sizeof(str), "[x] O Administrador(a) %s lhe setou %d de score(s)", aName, score);
SendClientMessage(id, 0xFF0000FF, str);
return 1;

}

CMD:setarskin(playerid, params[]) {

new id;
new skin;
new str[128];
new aName [MAX_PLAYER_NAME];
GetPlayerName(playerid, aName, MAX_PLAYER_NAME);
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO] Vocк nгo й um administrador(a)!");
if(sscanf(params, "ddd", id, skin)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO] Digite: /setarskin [id] [skin]");
if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO] O player nгo estб conectado.");
SetPlayerSkin(id, skin);
format(str, sizeof(str), "[x] O Administrador(a) %s setou sua skin para a ID: %d", aName, skin);
SendClientMessage(id, 0xFF0000FF, str);
return 1;
}

CMD:kick(playerid, params[]) {

new id;
new kick;
new aName [MAX_PLAYER_NAME];
new str[128];
GetPlayerName(playerid, aName, MAX_PLAYER_NAME);
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO] Vocк nгo й um administrador(a)!");
if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xFF0000FF, "[ERRO] O player nгo estб conectado.");
Kick(id);
SendClientMessage(id, 0xFF0000FF, str);
return 1;
}
Se eu ajudei, falem. Caso nгo, avisem. Se deu algum erro inesperado no compiler. Me avisem, e direi como resolver. Obrigado, e adeus.
Reply
#2

Muito bom o tutorial, mas jб existe tutoriais assim mas mais um nunca й demais nй
Reply
#3

Nгo precisa incluir a include String a a_samp ja o faz.

Alem do mais da para melhorar bastante o tutorial achei menos rico em conhecimento que alguns aqui da Board sobre o mesmo assunto.
Reply
#4

Quote:
Originally Posted by PT
Посмотреть сообщение
Nгo precisa incluir a include String a a_samp ja o faz.

Alem do mais da para melhorar bastante o tutorial achei menos rico em conhecimento que alguns aqui da Board sobre o mesmo assunto.
Precisa sim incluir o String, eu jб tentei sem incluir. E deu erro, ou foi warning. Faz tempo, entгo nгo sei se foi um dos dois.

Desculpa se meu tutorial foi menos rico em conhecimento. No meu prуximo tutorial tentarei colocar muito mais conhecimento.
Reply
#5

Quote:
Originally Posted by LockedLucas
Посмотреть сообщение
Muito bom o tutorial, mas jб existe tutoriais assim mas mais um nunca й demais nй
Muitos tutoriais estгo para trбs, nunca faz mal criar outro nй? *Risos*

Obrigado por ter gostado, agradeзo muito pelo feedback
Reply
#6

Quote:
Originally Posted by SrAlface007
Посмотреть сообщение
Precisa sim incluir o String, eu jб tentei sem incluir. E deu erro, ou foi warning. Faz tempo, entгo nгo sei se foi um dos dois.

Desculpa se meu tutorial foi menos rico em conhecimento. No meu prуximo tutorial tentarei colocar muito mais conhecimento.
Na verdade, a prуpria include a_samp jб inclui a string.

Quanto a seu tutorial, vocк foi muito tйcnico, a ponto de apenas colocar o cуdigo, falar pra que serve, sem explicar como funciona.

Seja um pouco mais teуrico. Vocк estб tentando ensinar a utilizar ZCMD e sscanf, entгo foque nisto.

Aliбs, procure dar uma melhor organizaзгo no seu tуpico, facilita muito na leitura.

Abraзos.
Reply
#7

Quote:
Originally Posted by Dolby
Посмотреть сообщение
Na verdade, a prуpria include a_samp jб inclui a string.

Quanto a seu tutorial, vocк foi muito tйcnico, a ponto de apenas colocar o cуdigo, falar pra que serve, sem explicar como funciona.

Seja um pouco mais teуrico. Vocк estб tentando ensinar a utilizar ZCMD e sscanf, entгo foque nisto.

Aliбs, procure dar uma melhor organizaзгo no seu tуpico, facilita muito na leitura.

Abraзos.
Ok, obrigado pelo feedback.
Reply
#8

Alguйm me ajuda olha oq ta aparecendo http://imgur.com/aJCmnnE
Reply
#9

Quote:
Originally Posted by Abne
Посмотреть сообщение
Alguйm me ajuda olha oq ta aparecendo http://imgur.com/aJCmnnE
tem que ligar o plugin Sscanf ( nгo esqueзa )
Reply
#10

Pra que usar isto:
PHP код:
new id;
new 
skin;
new 
str[128];
new 
aName [MAX_PLAYER_NAME]; 
para todos os comandos sendo que й sу por global ?

E pra obter o nome, й sу usar assim:
PHP код:
stock PlayerName(playerid)
{
     static 
Name[MAX_PLAYER_NAME];
     
GetPlayerName(playeridNameMAX_PLAYER_NAME);
     return 
Name;

Ou dessa maneira que й meu caso:
PHP код:
new PlayerName[MAX_PLAYERS];
public 
OnPlayerConnect(playerid)
{
    static
        
Name[MAX_PLAYER_NAME];
    
GetPlayerName(playeridPlayerName[playerid], 24);
    
//PlayerName[playerid]  para obter o nome nas funзхes
    
return 1;

Em vez de ficar criando variбvel em tudo para obter nome.

Nгo gostei da organizaзгo e da indentaзгo do seu comando '-'
Reply
#11

17/06/2015, 04:52 PM
Reply
#12

Muito bom, parabйns!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)