[Tutorial] Crear Comando SayOn - SayOff
#1

Como crear los comandos SAYON y SAYOFF para su sistema de Admin


Les mostrare como se crean estos dos simples comandos para Admin aki un ejemplo

cuando el admin habla sin este comando sale asi:


ConecCionMex:
aaaaaaaaaaaaaaaa --> esto sale blanco

y Al activar el comando a sayOn saldria asi:

ConecCionMex : aaaaaaaaaaa Podran hablar cuantas veses kieran sin poner acada rato sayon --> Saldra todo en color azul ustedes pueden cambiarselo luego

1.- Primero definiremos lo que servira para poder hacerlo en DCMD

Para esto aсadiremos esto al FS - Si ya lo tienen no agregen nada

pawn Код:
#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
/*Como ya habia dicho esto hara posible que creemos el comando en DCMD*/

#define Azul 0x375FFFFF /*Y esto es el Color*/
2.-Despues iran a donde definen los datos/o no se como se llamanxD/ en este caso asi:

pawn Код:
new Tsay[playerid];

new PlayerInfo[MAX_PLAYERS][InfoJugador];
Ahi tendras qe agregar la definicion Tsay


3.-Luego iremos a public OnPlayerText(playerid, text[])
Y definiremos lo que sera cuando el jugador envie el mensaje al Chat y salga todo el nick el texto en azul

ConecCionMex : aaaaaaaaaaa


Para ello definiremos esto:

pawn Код:
new Nombre[MAX_PLAYER_NAME];//Definira el Nombre del Admin quien envia el texto [Admin] "COnecCionMex" : asdasdasdasd
  GetPlayerName(playerid, Nombre, MAX_PLAYER_NAME); //Ayudara a definir el Nombre del Admin
  if(PlayerInfo[playerid][Tsay] == 1) //Esto vera si tenemos definido Tsay lo que ya hemos echo antes
  {
    new string[128];
    format(string,sizeof(string),"[Admin]%s: %s",Nombre,text); //Asi es como enviara el mensaje al chat [Admin] ConecCionMex: asdsadsadasd
    if(IsPlayerConnected(playerid))//Esto lo sera si el jugador esta conectado :D
    {
     SendClientMessageToAll(Azul,string); //esto definira qe lo envie a todos los jugadores y Azul el color (si quiren cambielo ustedes)
    }
    return 0; //Es importante qe termine en return 0 por que si no enviara dos mensajes uno sin color y el otro con color y se comera una letra xD
  }
4.- El comando y las definiciones

Para definir los comandos como algunos saves tenemos qe dirijirnos a public OnPlayerCommandText(playerid, cmdtext[])

Abajo de public OnPlayerCommandText(playerid, cmdtext[]) {

Ponemos la definicion:

pawn Код:
//Esto es el comando qe abrira
dcmd(sayon, 5, cmdtext);/*"Sayon" definira el comando qe se tipeara /sayon - el numero 5 las letras qe contiene el comando en este caso
 5 S-1 A-2 Y-3 O-4 N-5  Y cmdtext lo qe define qe es comando (CREO) :s*/

//Esto es el comando qe Cerrara
dcmd(sayoff, 6, cmdtext); /*Para esto seria la misma definicion qe Arriva ;)*/
5.- Luego nos iremos Fuera de OnPlayerCommandText

Y pondremos los comandos y sus funciones
Primero SAYON

pawn Код:
dcmd_sayon(playerid, params[]) //El comando Definido
{
    #pragma unused params//Definira qe si usamos params si no lo ponemos saldra un mensaje qe diga params never used o algo aasi
    if(PlayerInfo[playerid][Nivel] >= 2)//Esto definira el nivel de admin qe lo podra usar en este caso del nivel 2 asia arriva
    {
    PlayerInfo[playerid][Tsay] = 1; //esto define si esta DEFINIDO Tsay y ya lo definimos tambien tiene qe ver en onplayertext el " 1 " QUIERE DECIR qe esta activado
    SendClientMessage(playerid, Verde, "Comando /Say activado."); //Esto es el mensaje qe se enviara cuando active /sayon
  } else {//esto es para qe vea qe tenemos mas mensajes qe poner :D
  SendClientMessage(playerid, Rojo,"[[InfO:]] Lo Sentimos no eres Admin de Nivel suficiente"); //El mensaje qe saldra al jugador qe no es admin
  }
  return 1;
}/*Cerramos*/
Ahora SAYOFF

pawn Код:
dcmd_sayoff(playerid, params[]) //El comando
{
  #pragma unused params //definir params
    if(PlayerInfo[playerid][Nivel] >= 2) //Lo mismo el nivel que puede usar el comando
    {
    PlayerInfo[playerid][Tsay] = 0; //esto define si esta DEFINIDO Tsay - " 0 " QUIERE DECIR qe esta desactivado
    SendClientMessage(playerid, Rojo, "Comando /Say desactivado.");// Mensaje qe saldra cuando el admin aya desactivado /sayoff
  } else {//esto es para qe vea qe tenemos mas mensajes qe poner :D
  SendClientMessage(playerid, Rojo,"[[InfO:]] Lo Sentimos no eres Admin de Nivel suficiente."); //Lo mismo qe arriva esto le saldra al jugador qe no es Admin
  }
  return 1;
}/*Cerramos*/

Imagenes:


Bueno eso es todo espero qe les haya servido si no ps nop xD

Alguna Duda / Bug / o /Queja aganmelo saber D:

Creditos:


ConecCionMex - El tuto y ponerlo xD a FS

CristianDJ por las funciones como el new PlayerInfo[MAX_PLAYERS][InfoJugador]; y Info Jugador
Reply
#2

Esto ya existia el comando, pero vos le distes la forma de tuto y eso se agradece! xD

Muy buen tuto!.
Reply
#3

Quote:
Originally Posted by xenowort
Esto ya existia el comando, pero vos le distes la forma de tuto y eso se agradece! xD

Muy buen tuto!.
jaja si ya existia xD
pero pa qe aprendan
Gracias Xen
Reply
#4

buen tuto, esta bien explicado y en teoria (ya q no puedo testear el codigo) deberia funcionar.

pero tengo unas sugerencias para el codigo para que quede mas optimizado

Sugerencia 1:
Resulta innecesario defirir 1 enum x 1 solo array, es mas sensillo.
pawn Код:
new Tsay[playerid];
Sugerencia 2:
luego, dentro del callback OnPlayerText, cuando este callback es llamado se sobre entiende que el jugador esta conectado, entonces esta restriccion (if) resulta innecesaria:
pawn Код:
if(IsPlayerConnected(playerid))
Sugerencia 3:
porque usaste dcmd este tipo de comandos se suele utilizar para comandos que llevan parametros :P y tu no usas ninguno, y x eso usaste
pawn Код:
#pragma unused params
lo cual indica que no los usas. seria mejor hacer los comandos en strcmp, ya que no es necesario definir los comandos dentro de OnPlayerCommandText, ni DCMD.
Reply
#5

Buen tutorial y bien explicado
Reply
#6

Quote:
Originally Posted by the_chaoz
buen tuto, esta bien explicado y en teoria (ya q no puedo testear el codigo) deberia funcionar.

Sugerencia 1:
Resulta innecesario defirir 1 enum x 1 solo array, es mas sensillo.
pawn Код:
new Tsay[playerid];
Tienes razon gracias pero com yo tengo ya sistema de admin lo puse asi con los enuminfo
Quote:

Sugerencia 2:
luego, dentro del callback OnPlayerText, cuando este callback es llamado se sobre entiende que el jugador esta conectado, entonces esta restriccion (if) resulta innecesaria:
PAWN Code:

if(IsPlayerConnected(playerid))

Ya lo arregle gracias Otra vez XD

Quote:

Sugerencia 3:
porque usaste dcmd este tipo de comandos se suele utilizar para comandos que llevan parametros Tongue y tu no usas ninguno, y x eso usaste
PAWN Code:

#pragma unused params

ahhi pongo eso por que si se lo quito me sale esto:

Код:
C:\Documents and Settings\BlackCrystal™\Mis documentos\Server3.0\filterscripts\Sadmin.pwn(982) : warning 203: symbol is never used: "params"
C:\Documents and Settings\BlackCrystal™\Mis documentos\Server3.0\filterscripts\Sadmin.pwn(995) : warning 203: symbol is never used: "params"
Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


2 Warnings.
xD

Quote:

lo cual indica que no los usas. seria mejor hacer los comandos en strcmp, ya que no es necesario definir los comandos dentro de OnPlayerCommandText, ni DCMD.

es que me acostumbre a hacerlos asi DCMD

Quote:

Buen tutorial y bien explicado

Gracias MrDeath
Reply
#7

Quote:
Originally Posted by ConecCionMex
Tienes razon gracias pero com yo tengo ya sistema de admin lo puse asi con los enuminfo
Quote:

Sugerencia 3:
porque usaste dcmd este tipo de comandos se suele utilizar para comandos que llevan parametros Tongue y tu no usas ninguno, y x eso usaste
PAWN Code:

#pragma unused params

ahhi pongo eso por que si se lo quito me sale esto:

Код:
C:\Documents and Settings\BlackCrystal™\Mis documentos\Server3.0\filterscripts\Sadmin.pwn(982) : warning 203: symbol is never used: "params"
C:\Documents and Settings\BlackCrystal™\Mis documentos\Server3.0\filterscripts\Sadmin.pwn(995) : warning 203: symbol is never used: "params"
Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


2 Warnings.
xD
si si ya se para q se usa :P, lo que decia es que es inecesario usar dcmd nomas.
Reply
#8

aa gracias ^^
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)