[Tutorial] Simples comando de setar a posiзгo de qualquer jogador [ZCMD/sscanf2]
#1

Rodney Francalim

Tutoriais
Bom, jб sгo 1:00 (2:00) da manhг e eu tф sem sono e entediado, entгo resolvi fazer esse tutorial de 'como setar a posiзгo de qualquer jogador usando ZCMD e sscanf2'.

••••••••••••••••••••••••••••••••••••••••••••••••••

1: Do que precisaremos?
- ZCMD
- sscanf2

2: O cуdigo
NOTA: Vocк tem que saber que um comando em ZCMD NГO fica dentro de nenhuma callback, ou seja, coloque-o onde quiser, mas de preferкncia organize-os para nгo se perder.

pawn Код:
//Topo do GM
#include <a_samp>
#include <zcmd>
#include <sscanf2>

#define COR_INFO 0xA9C4E4FF
pawn Код:
CMD:setarpos(playerid, params[])
{
    new Nome[MAX_PLAYER_NAME], string[128], jogador, Float:pos[3];
    if(sscanf(params, "ufff", jogador, pos[0], pos[1], pos[2])) SendClientMessage(playerid, COR_INFO, "{FFFF00}(!){A9C4E4}: /pos [ID/Nome] [X] [Y] [Z]");
    else SetPlayerPos(jogador, pos[0], pos[1], pos[2]);
    GetPlayerName(jogador, Nome, MAX_PLAYER_NAME);
    format(string, sizeof string, "{FFFF00}(!){A9C4E4}: Vocк setou a posiзгo do jogador %s[ID:%d].", Nome, jogador);
    SendClientMessage(jogador, COR_INFO, "{FFFF00}(!){A9C4E4}: Sua posiзгo foi setada.");
    SendClientMessage(playerid, COR_INFO, string);
    return 1;
}
3: Explicaзгo
pawn Код:
CMD:setarpos(playerid, params[])
Код:
CMD:setarpos -> Refere-se ao comando que o jogador deverб digitar
playerid     -> Obviamente, o jogador que o digitarб
params[]     -> Como usaremos parвmetros(o que й digitado apуs o comando, ex.: /kick 13), й necessбrio colocб-lo
'-> NOTA: No ZCMD, vocк tambйm poderia usar: "command:comando(playerid, params[])", "command(comando, playerid, params[])", "cmd(comando, playerid, params[])"

pawn Код:
new Nome[MAX_PLAYER_NAME], string[128], jogador, Float:pos[3];
Код:
Nome[MAX_PLAYER_NAME] -> Й uma string em que o nъmero de cйlulas й definido pelo MAX_PLAYER_NAME
string[128]           -> Tambйm й uma string
jogador               -> Й a variбvel que serб usada como o primeiro parвmetro /setarpos [ID]
Float:pos[3]          -> Serve para armazenar nъmeros de ponto flutuante, ou seja, com casas decimais. E no caso do comando, serб os ъltimos 3 parвmetros /setarpos [ID] [X] [Y] [Z]
'-> NOTA: Se vocк quiser saber mais sobre strings clique aqui

pawn Код:
if(sscanf(params, "ufff", jogador, pos[0], pos[1], pos[2])) SendClientMessage(playerid, COR_INFO, "{FFFF00}(!){A9C4E4}: /pos [ID/Nome] [X] [Y] [Z]");
Код:
if      -> Й uma condicional
sscanf  -> A funзгo do sscanf2
params  -> Como usaremos parвmetros (o que vem apуs o comando), serб necessбrio colocб-lo
"ufff"  -> Sгo especificadores, que, nessa ordem representam: u = nome do jogador/ID;; fff = Floats, o nъmero cin casas decimais, ou seja, onde ficarб as coordenadas
jogador -> Justamente o primeiro parвmetro que serб definido em u, ou seja, onde vocк digitarб o nome do jogador/ID 
pos[0]  -> Segundo parвmetro que serб definido no primeiro f, ou seja, onde vocк digitarб, apуs o nome do jogador/ID, o primeiro valor da coordenada (X)
pos[1]  -> Terceiro parвmetro, o mesmo para o caso de cima, mas ao invйs de suceder o nome do jogador/ID, sucederб o primeiro valor da coordenada, e serб o segundo valor da coordenada (Y)
pos[2]  -> Ъltimo parвmetro, o mesmo para o caso de cima, mas sucederб o segundo valor da coordenadas, e serб o terceiro e ъltimo valor da coordenada (Z)
SCM     -> Eu nгo preciso nem mencionar, nй? Mas vamos lб, se o jogador nгo digitar o comando de forma correta, aparecerб o SCM na tela do jogador.
'-> Resumo: O sscanf vai detectar os parвmetros dele rapidamente. Se o jogador nгo digitar todos os parвmetros do comando, retornarб uma SCM. NOTA: Perceba que a sequкncia de especificadores que tкm dentro da string, coincide, respectivamente, com as variбveis que criamos. Ou seja, "u" representa o nome de usuбrio/ID(tambйm vale para NPCs), "f" representa o nъmero com casas decimais(1.2, 1.1, 5.32, 64.21), jб que os inteiros("u") nгo suportam. No mais o comando ficarб exatamente como й mostrado no primeiro SCM.

pawn Код:
else SetPlayerPos(jogador, pos[0], pos[1], pos[2]);
Код:
else         -> Antagoniza а condicional
SetPlayerPos -> Funзгo que define a nova posiзгo de algum jogador
jogador      -> Lembra-se do sscanf? Pois bem, a variбvel jogador й definida em u, primeiro parвmetro. Vamos supor que vocк digitou: "/setarpos 14 ..." Entгo na funзгo sairб assim: SetPlayerPos(14, ...);
pos[0]       -> O mesmo caso de cima, e representa o valor X da coordenada, mas ao invйs de u, serб definida em f, primeiro float, segundo parвmetro do comando. Vocк digitou: "/setarpos 14 15.1846 ..." Na funзгo: SetPlayerPos(14, 15.1846, ...);
pos[1]       -> O mesmo, mas representa o valor Y, e serб a segunda coordenada, e terceiro parвmetro do comando. Vocк digitou: "/setarpos 14 15.1846 200.9406 ..." Na funзгo: SetPlayerPos(14, 15.1846, 200.9406, ...);
pos[2]       -> A mesma coisa, й consecutivo. Entгo: "/setarpos 14 15.1846 200.9406 -1.225" Funзгo: SetPlayerPos(14, 15.1846, 200.9406, -1.225);
'-> Resumo: Se o jogador digitar todos os parвmetros do comando, e de forma correta, ele executarб o esta funзгo, seguindo as prуximas, com total normalidade. Note que todos as variбveis que criamos, detectadas como parвmetro pelo sscanf, jб sгo setadas rapidamente.

pawn Код:
GetPlayerName(jogador, Nome, MAX_PLAYER_NAME);
format(string, sizeof string, "{FFFF00}(!){A9C4E4}: Posiзгo do jogador %s[ID:%d] setada.", Nome, jogador);
SendClientMessage(jogador, COR_INFO, "{FFFF00}(!){A9C4E4}: Sua posiзгo foi setada.");
SendClientMessage(playerid, COR_INFO, string);
'-> Bom, isso qualquer um, que nгo seja tгo leigo , consegue identificar do que se trata essa parte do comando.

4: Consideraзхes finais
- Й, esse foi meu primeiro tutorial aqui no fуrum, espero que tenha sido ъtil, e espero que tudo corra bem.
- Sу fiz porque nгo tinha nada pra fazer mesmo
- Qualquer erro que tiver no cуdigo, ou atй mesmo nas explicaзхes, me informem pois tratarei de corrigir imediatamente

5: Agradecimentos e crйditos
- Quero agradecer ao ****** pela criaзгo do sscanf2 ter criado o tutorial de como usб-lo.
- Tambйm ao Zeex pela criaзгo do ZCMD
- E ao [Full]Garfield[XDB] por ter me ajudado а melhorar o tutorial.

••••••••••••••••••••••••••••••••••••••••••••••••••
Reply
#2

Уtimo tutorial amigo!
mais vocк poderia separar algumas coisas ai..

Por exemplo:
As explicaзхes dos especificadores estгo tudo "juntamente",
aconselho, em seus futuros tutoriais fazer uma explicaзгo separada por partes:


EXEMPLO:
Seu mйtodo:
pawn Код:
SendClientMessage(playerid, -1, "hello world");
Playerid й o id do player do qual serб exibido a mensagem, agora o -1 significa cor da mensagem e
oque estб entre aspas й a mensagem.


Fбcil leitura:
pawn Код:
SendClientMessage(playerid, -1, "hello world");
Esta funзгo tem trкs parвmetros, que irei explicar:


Код:
playerid        =>  Indica hб qual jogador serб mandado a mensagem;
-1              =>  Significa qual cor serб mandado a mensagem
"hello world"   =>  Mostra qual serб a mensagem.
Acho que esta forma й a mais explнcita e fбcil entendimento.
Reply
#3

Quote:
Originally Posted by [Full]Garfield[XDB]
Посмотреть сообщение
Уtimo tutorial amigo!
mais vocк poderia separar algumas coisas ai..
Ok. Eu vou mudar o mйtodo jб neste tуpico, vou comeзar a editб-lo. Obrigado.
Reply
#4

уtimo tutorial, continue assim. =D
Reply
#5

Apesar de ser fбcil criar esses comando, o tutorial estб уtimo.
Parabйns, muito bacana seu trabalho, Abraзos. !
Reply
#6

Quote:
Originally Posted by AmericanStyle'™
Посмотреть сообщение
Apesar de ser fбcil criar esses comando, o tutorial estб уtimo.
Parabйns, muito bacana seu trabalho, Abraзos. !
й facil! Para nуs que ja conhecemos isso mais isso creio eu que ajudaria muitos novatos!!

@Topico
Belo tutorialІ
Reply
#7

Quote:
Originally Posted by Sky_.
Посмотреть сообщение
й facil! Para nуs que ja conhecemos isso mais isso creio eu que ajudaria muitos novatos!!

@Topico
Belo tutorialІ
Exato !.
Abraзos.
Reply
#8

Serio mesmo? Isto й basicamente um cуdigo ъtil em forma de tutorial. Na prуxima vez faзa um tutorial que valha o seu esforзo.
Reply
#9

Ta bom, mas ja vi melhores!
Reply
#10

Quote:
Originally Posted by jpeg
Посмотреть сообщение
уtimo tutorial, continue assim. =D
Obrigado.
Quote:
Originally Posted by AmericanStyle'™
Посмотреть сообщение
Apesar de ser fбcil criar esses comando, o tutorial estб уtimo.
Parabйns, muito bacana seu trabalho, Abraзos. !
Valeu.

Quote:
Originally Posted by Sky_.
Посмотреть сообщение
й facil! Para nуs que ja conhecemos isso mais isso creio eu que ajudaria muitos novatos!!

@Topico
Belo tutorialІ
Justamente.

Quote:
Originally Posted by HDTV
Посмотреть сообщение
Serio mesmo? Isto й basicamente um cуdigo ъtil em forma de tutorial. Na prуxima vez faзa um tutorial que valha o seu esforзo.
Bem, mas esse "cуdigo ъtil em forma de tutorial" me ajudou bastante a entender como fazer um comando em ZCMD e sscanf. Mas eu acho que foi bem fбcil para mim, jб que eu sei bastante coisa.
Mas eu vou procurar melhorar.

Quote:
Originally Posted by mau.tito
Посмотреть сообщение
Ta bom, mas ja vi melhores!
Sempre terб um trabalho melhor que o outro, isso й lei.

@TOPIC
Upado, melhorei um pouco, jб.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)