Pawno-Script

Todos Nos Ayudamos

Conectarse

Recuperar mi contraseña

Últimos temas

» [GM] Stunts Universe 100% Español (Stunts/Races/Drift)
Vie Ene 31, 2014 5:43 pm por Hunter_white

» [FS] Animaciones
Miér Dic 18, 2013 7:06 pm por Raby

» Policias vs Terroristas
Jue Ago 01, 2013 1:46 am por Dani Duende

» [FS] Sistema de reportes por dialog
Vie Mayo 24, 2013 5:29 pm por Eric_espinosa

» Abrir portones con las teclas
Vie Mayo 24, 2013 4:48 pm por Eric_espinosa

» [FilterScript] Armas en la espalda o cinturon.
Dom Nov 11, 2012 10:44 am por Axel_x360

» [Servdor] "Los Simuladores RP", gran apertura!! V1.2
Miér Oct 24, 2012 6:09 pm por Shampier17

» [FS] Sistema Neon (0.3c)
Dom Oct 07, 2012 8:01 pm por felipepalacios

» [Tutorial] Cargar Objetos
Vie Oct 05, 2012 4:28 pm por Venedetto

Diciembre 2016

LunMarMiérJueVieSábDom
   1234
567891011
12131415161718
19202122232425
262728293031 

Calendario Calendario

Navegación

Estadísticas

Nuestros miembros han publicado un total de 91 mensajes en 79 argumentos.

Tenemos 128 miembros registrados.

El último usuario registrado es migueleex.

¿Quién está en línea?

En total hay 1 usuario en línea: 0 Registrados, 0 Ocultos y 1 Invitado

Ninguno


La mayor cantidad de usuarios en línea fue 43 el Lun Abr 11, 2016 1:48 am.


    [Tutorial] Uso de ZCMD

    Comparte

    Reex
    Administrador
    Administrador

    Mensajes : 64
    Fecha de inscripción : 21/01/2011
    Localización : Argentina

    [Tutorial] Uso de ZCMD

    Mensaje  Reex el Sáb Ene 22, 2011 4:31 am

    Bueno aca les dejo sobre el uso de este procesador de comandos.
    Como ustedes conocen, esta es la forma tradicional de hacer comandos:
    Código:
    public OnPlayerCommandText(playerid, cmdtext[])
    {
       new
          index,
          cmd[20];
       cmd = strtok(cmdtext, index);
       if (strcmp(cmd, "/heal", true) == 0)
       {
          new
             tmp[20],
             id;
          tmp = strtok(cmdtext, index);
          if (strlen(tmp))
          {
             id = strval(tmp);
             if (IsPlayerConnected(id))
             {
                new string[128], name1[MAX_PLAYER_NAME], name2[MAX_PLAYER_NAME];
                SetPlayerHealth(id, 100.0);
                GetPlayerName(playerid, name1, sizeof  name1);
                GetPlayerName(id, name2, sizeof name2);
                format(string, sizeof string, "Fuiste curado por %s", name1);
                SendClientMessage(id, 0x00FF00AA, string);
                format(string, sizeof string, "Curaste a %s", name2);
                SendClientMessage(playerid, 0x00FF00AA, string);
             }
             else
             {
                SendClientMessage(playerid, 0xFF0000AA, "Jugador no encontrado");
             }
          }
          else
          {
             SendClientMessage(playerid, 0xFF0000AA, "USO: "/heal ID"");
          }
          return 1;
       }
       return 0;
    }

    En la forma tradicional, los comandos son puestos en la callback OnPlayerCommandText. En ZCMD esta callback queda inservible por lo tanto hay que sacarla, los comandos se hacen fuera de cualquier callback, por ej:

    Código:

    CMD:heal(playerid, params[])
    {
       new
          tmp[20],
          id;
       tmp = strtok(cmdtext, index);
       if (strlen(tmp))
       {
          id = strval(tmp);
          if (IsPlayerConnected(id))
          {
             new
                string[128],
                name1[MAX_PLAYER_NAME],
                name2[MAX_PLAYER_NAME];
             SetPlayerHealth(id, 100.0);
             GetPlayerName(playerid, name1, sizeof  name1);
             GetPlayerName(id, name2, sizeof name2);
             format(string, sizeof string, "Fuiste curado por %s", name1);
             SendClientMessage(id, 0x00FF00AA, string);
             format(string, sizeof string, "Curaste a %s", name2);
             SendClientMessage(playerid, 0x00FF00AA, string);
          }
          else
          {
             SendClientMessage(playerid, 0xFF0000AA, "Jugador no encontrado");
          }
       }
       else
       {
          SendClientMessage(playerid, 0xFF0000AA, "USO: "/heal ID"");
       }
       return 1;
    }
    (hay que tener el include en el script (#include <zcmd>))

    En este ejemplo se mostro como hacer el comando /heal ID con strtok, tambien se puede implementar sscanf:

    Código:

    CMD:heal(playerid, params[])
    {
       new
          id;
       if(sscanf(params, "i", id)){
          return SendClientMessage(playerid, 0xFF0000AA, "USO: /heal ID");
       } else if(!IsPlayerConnected(id) || id == INVALID_PLAYER_ID){
          return SendClientMessage(playerid, 0xFF0000AA, "Jugador no conectado o inexistente");
       }
       new
          string[128],
          name1[MAX_PLAYER_NAME],
          name2[MAX_PLAYER_NAME];
       SetPlayerHealth(id, 100.0);
       GetPlayerName(playerid, name1, sizeof  name1);
       GetPlayerName(id, name2, sizeof name2);
       format(string, sizeof string, "Fuiste curado por %s", name1);
       SendClientMessage(id, 0x00FF00AA, string);
       format(string, sizeof string, "Curaste a %s", name2);
       SendClientMessage(playerid, 0xFF0000AA, string);
       return 1;
    }

    IMPORTANTE: Como habia mencionado que la callback OnPlayerCommandText queda inutilizable, hay dos callbacks para usarlas de alternativa:

    Código:
    OnPlayerCommandReceived(playerid, cmdtext[])
    Esta callback es llamada cuando un player envia un comando, hace return 0 si el comando no es realizado.
    Código:
    OnPlayerCommandPerformed(playerid, cmdtext[], success)
    Esta es llamada luego de la ejecucion de un comando, si hace return 0 vas a ver el famoso mensaje "SERVER:Unknown command". La variable success es igual al valor que returnea la callback, si hace return 0 succes seria igual a 0.

    Para redireccionar comandos se hace asi:

    Por ej. el comando limpiarchat.
    Código:

    CMD:limparchat(playerid, params[]){
       if(!IsPlayerAdmin) return SendClientMessage(playerid, "No tienes permitido usar el comando porque no eres Admin");
       for(new i;i<50;i++){// bucle para que envie 50 veces un mensaje vacio
          SendClientMessageToAll(0xFF00000AA, " ");
       }
       SendClientMessageToAll(0xFF0000AA, "Chat limpiado por un administrador");
       return 1;

    }

    CMD:lc(playerid, params[]) return cmd_limpiarchat(playerid, params);// abreviacion de limpiarchat
    //o sino
    CMD:cls(playerid, params[]) return cmd_limpiarchat(playerid, params); //cls como en batch

    Para chequear si los parametros que pone en el comando son vacios o no:
    Forma 1:
    Código:
    if(strlen(params)){
       //su codigo o cualquier cosa
    }
    Forma 2:
    Código:
    if(!params[0]{
       //codigo o cualquier cosa
    }
    Forma 3:
    Código:
    if(isnull(params)){
       //codigo o cualquier cosa
    }

    Bueno eso es todo. Comenten Very Happy.

    Creditos: Sharingan

      Fecha y hora actual: Jue Dic 08, 2016 7:02 pm