[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


Messages In This Thread

Forum Jump:


Users browsing this thread: 5 Guest(s)