28.10.2012, 04:35
(
Последний раз редактировалось Rodney Francalim; 30.10.2012 в 13:05.
)
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'.Tutoriais
••••••••••••••••••••••••••••••••••••••••••••••••••
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;
}
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
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]
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.
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);
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);
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.
••••••••••••••••••••••••••••••••••••••••••••••••••