17.06.2015, 19:52
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.
(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:
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:
Agora colocaremos
Para sу os administradores usarem, usaremos o IsPlayerAdmin.
Agora usaremos o SSCANF.
Usaremos agora IsPlayerConnected.
Agora colocaremos, o comando. Que poderб ser encontrado na WIKI do SA-MP, como eu usei a skin. Usarei o comando da skin.
Agora, usaremos a string!
Apуs isso, colocaremos o SendClientMessage. Para identificar a cor do erro.
Quando o comando for terminado usaremos, return.
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)
Exemplo
Aqui usarei um sistema administrativo, que ainda estб em processo. Bom, ainda nгo terminei. (Nгo use o comando /kick ou /ban!)
Se eu ajudei, falem. Caso nгo, avisem. Se deu algum erro inesperado no compiler. Me avisem, e direi como resolver. Obrigado, e adeus.
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>
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 //
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.
Код:
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.
Код:
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.
Код:
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.
Код:
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.
Код:
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.
Код:
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.
Код:
SendClientMessage(id, 0xFF0000FF, str); // Essa nem preciso explicar, acabei de explicar na mensagem acima.
Код:
return 1; }
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; }
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; }