Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Entrar

descriptionSimples comando de setar a posição de qualquer jogador [ZCMD/sscanf2] EmptySimples comando de setar a posição de qualquer jogador [ZCMD/sscanf2]

more_horiz
Rodney Francalim

Tutoriais

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.

Código:

//Topo do GM
#include <a_samp>
#include <zcmd>
#include <sscanf2>

#define COR_INFO 0xA9C4E4FF


Código:

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

Código:

CMD:setarpos(playerid, params[])

Código:

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[])"

Código:

new Nome[MAX_PLAYER_NAME], string[128], jogador, Float:pos[3];

Código:

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

Código:

if(sscanf(params, "ufff", jogador, pos[0], pos[1], pos[2])) SendClientMessage(playerid, COR_INFO, "{FFFF00}(!){A9C4E4}: /pos [ID/Nome] [X] [Y] [Z]");

Código:


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 decimal, 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 decimal(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.

Código:

else SetPlayerPos(jogador, pos[0], pos[1], pos[2]);

Código:

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.

Código:

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
- Qualquer erro que tiver no código, ou até mesmo nas explicações, me informem pois tratarei de corrigir imediatamente
- Este tutorial foi retirado do fórum SA-MP, mas, também, feito por mim. Quem quiser acessá-lo clique aqui

5: Agradecimentos e créditos
- Quero agradecer ao Y_Less pela criação do sscanf2 ter criado o tutorial de como usá-lo.
- Também ao Zeex pela criação do ZCMD

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

descriptionSimples comando de setar a posição de qualquer jogador [ZCMD/sscanf2] EmptyRe: Simples comando de setar a posição de qualquer jogador [ZCMD/sscanf2]

more_horiz
ótimo tutorial cara,parabéns ae Very Happy

descriptionSimples comando de setar a posição de qualquer jogador [ZCMD/sscanf2] EmptyRe: Simples comando de setar a posição de qualquer jogador [ZCMD/sscanf2]

more_horiz
Bacana cara,mais achei que poderia ser mais bem explicado.De qaulquer forma
parabens!

descriptionSimples comando de setar a posição de qualquer jogador [ZCMD/sscanf2] EmptyRe: Simples comando de setar a posição de qualquer jogador [ZCMD/sscanf2]

more_horiz
privacy_tip Permissões neste sub-fórum
Não podes responder a tópicos
power_settings_newInicie sessão para responder