¤Usando sscanf em zcmd¤
Bem comecei a usar zcmd a pouco tempo, mas tenho visto que é muito diferente de strcmp, alem de tudo é mais fácil de se aprender, neste tutorial vou ensinar como usar sscanf em zcmd, irei ensinar o que aprendi claro, não estarei dizendo coisas que não sei, por tanto vamos começar...
Bem para usar sscanf em zcmd terá que criar o comando zcmd logico, então vamos lá.
No topo do GM/Fs adicione
Code:
#include zcmd
#include sscanf2
Então agora vamos criar um comando de mp
Não se esqueça de adicionar as arrays como logico, claro que pode mudar o nome, não é preciso chamar-se new Texto, pode ser new frase, o que quiser, só tem que saber colocar...
Code:
//=====[ARRAYS]======
new texto;
new nome[MAX_PLAYER_NAME];
new Str[128];
new id;
Code:
CMD:mp(playerid, params[])
{
if(sscanf(params, "us",id,texto))
{
SendClientMessage(playerid,-1,"Use: /mp [id] [texto]");
}
else
{
if(IsPlayerConnected(id)) return SendClientMessage(playerid, -1, "Este jogador não está conectado");
GetPlayerName(playerid,nome,sizeof(nome));
format(Str, sizeof(Str), "Mesangem Privada de %s: %s",nome,texto);
SendClientMessage(id,-1,Str);
}
return true;
}
Bem vamos falar agora um pouco sobre o comando.
Code:
if(sscanf(params, "us",id,texto))
if - Primeiramente. Pra quê if? Simples. sscanf, quando consegue cumprir sua função, retorna 0 (O que é um costume desconhecido em pawn). Ou seja, quando ele separa a string corretamente e todas as variávels são preenchidas, retorna 0, caso contrário 1, o que mostraria a ajuda do comando. (Créditos Luís Miki)
params - Como você já sabe, no zcmd, params é o que vem depois do /comando. Ou seja, seu objetivo é quebrar a string 'params' para poder pegar a hora para setar o servidor. (Créditos Luís Miki)
us - Bem essa parte é o que torna sscanf facil de usar em zcmd, vc sabe sabe quando usa mensagem que tenha que pegar o nome do player? ou o id, que usa %s, %d aqui é mesma coisa só que sem %, então vamos ver alguns dos que eu sei...
Code:
d ou i - usado quando você usa números, exemplo numero do seu celular...
s - é o string usado quando você usa letras, exemplo "Meu nome é BlueX"
u - usado para aquele famoso [Id do Player]...
f - usado para coordenadas...
Existem mais, mas eu ainda não todos....
depois para acabar basta adicionar as arrays, tipo, para o u você pode criar uma array chamada id, para o s você pode criar uma chamada Texto, por ai a diante...
Code:
SendClientMessage(playerid,-1,"Use: /mp [id] [texto]");
↑ isso é aquela mensagem quando você só digita o comando, /mp dai aparece essa mensagem...
Code:
else
↑ irá retornar caso você adicione o id e o texto exemplo /mp 1 eae.
Por fim usamos ↓
Code:
format(Str, sizeof(Str), "Mesangem Privada de%s: %s",nome,texto);
Ah mlk mais vc não tem que adicionar o id?
Não pois você irá mandar para o player não será necessário, mas caso você queira que mostre o id basta colocar assim:
Code:
format(Str, sizeof(Str), "Mesangem Privada de %s [ID%d]: %s",nome,playerid,texto);
Bom eu expliquei este comando todo, acho que por agora aprenderam, então, vou exemplificar mais outros comandos
/av para admin:
Code:
CMD:av(playerid, params[])
{
if(IsPlayerAdmin(playerid))
{
if(sscanf(params, "s",texto))
{
SendClientMessage(playerid,-1,"Use: /av [texto]");
}
else
{
GetPlayerName(playerid,nome,sizeof(nome));
format(Str, sizeof(Str),"Admin %s [ID:%d]: %s",nome,playerid,texto);
SendClientMessageToAll(-1,Str);
}
}
else SendClientMessage(playerid,-1,"Você não esta logado na rcon");
return true;
}
/a (chat de admins)
Code:
CMD:a(playerid, params[])
{
for( new i; i < MAX_PLAYERS; i++ )
{
if(IsPlayerAdmin(playerid))
{
if(sscanf(params, "s",texto))
{
SendClientMessage(playerid,-1,"Use: /a [texto]");
}
else
{
GetPlayerName(playerid,nome,sizeof(nome));
format(Str, sizeof(Str),"%s: %s",nome,texto);
SendClientMessage(i,-1,Str);
}
}
else SendClientMessage(playerid,-1,"Você não é adminRcon");
}
return true;
}
Bem agora basta usar imaginação e pronts, você consegue fazer coisas mais rapidas com zcmd e sscanf.
Usando imaginação você chega lá. Espero que goste