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 sscanf

    Comparte

    Reex
    Administrador
    Administrador

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

    [Tutorial] Uso de sscanf

    Mensaje  Reex el Vie Ene 21, 2011 8:37 pm

    Bueno, ahora les voy a enseñar a usar este gran plugin. Primero asegurense de tenerlo instalado correctamente.
    Deben tener el include puesto abajo del include samp:
    Código:

    #include <a_samp>
    #include <sscanf2>

    Luego tienen que tenerlo puesto en el server.cfg, la configuración del server. En Windows seria:
    Código:

    plugins sscanf
    Y en Linux, así:
    Código:

    plugins sscanf.so

    Bueno continuemos, aca les dejo un ejemplo de un comando que siempre cito con strtok:
    Código:

    CMD:heal(playerid, params[]){
      new
              tmp[128],
              id,
              idx,
              str[128],
              name1[MAX_PLAYER_NAME]
              name2[MAX_PLAYER_NAME]; // creamos variables y strings
      tmp = strtok(params, idx); // obtenemos la id en la string tmp
      if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "No eres admin"); // si no es admin el que usa el comando le manda este mensaje
      if(!strlen(tmp)) return SendClientMessage(playerid, 0xFF0000FF, "USO: /heal id");//si no puso nada despues del comando
      id = strval(tmp); // se guarda en id a tmp pero como intreger
      if(!IsPlayerConnected(id) || id == INVALID_PLAYER_ID) return SendClientMessage(playerid, 0xFF0000FF, "Jugador no conectado o no existente"); // si no esta conectado o el id es invalido
      SetPlayerHealth(id, 100); //le seteamos la vida en 100
      GetPlayerName(playerid, name1, sizeof name1); // guardamos el nombre del que usa el comando en name1
      GetPlayerName(id, name2, sizeof name2); // guardamos el nombre del destinatario en name2
      format(str, sizeof str, "%s te lleno la vida.", name1); // le damos formato a la string str
      SendClientMessage(playerid, 0x00FF00FF,str); // mandamos la string con sendclientmessage
      format(str, sizeof str, "Le llenaste la vida a %s", name2); // formateamos la string str nuevamente
      SendClientMessage(playerid, 0x00FF00FF, str); // mandamos el mensaje con la tring
      return 1;
    }

    Con sscanf sería:
    Código:
    CMD:heal(playerid, params[]){
      new
              id,
              str[128],
              name1[MAX_PLAYER_NAME]
              name2[MAX_PLAYER_NAME]; // creamos variables y strings
      if(sscanf(params, "i", id)){ // implementamos la funcion sscanf a la variable id, para que chequee los parametros luego del comando
          return SendClientMessage(playerid, 0xFF0000FF, "USO: /heal id"); // si esta mal escrito le envia este mensaje
      } else if(!IsPlayerConnected(id) || id == INVALID_PLAYER_ID) return SendClientMessage(playerid, 0xFF0000FF, "Jugador no conectado o no existente"); // si es una id invalida o no esta conectado, se corta el comando enviando este mensaje
      if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "No eres admin"); // si no es admin el que usa el comando, le manda este mensaje
      SetPlayerHealth(id, 100); //le seteamos la vida en 100
      GetPlayerName(playerid, name1, sizeof name1); // guardamos el nombre del que usa el comando en name1
      GetPlayerName(id, name2, sizeof name2); // guardamos el nombre del destinatario en name2
      format(str, sizeof str, "%s te lleno la vida.", name1); // le damos formato a la string str
      SendClientMessage(playerid, 0x00FF00FF,str); // mandamos la string con sendclientmessage
      format(str, sizeof str, "Le llenaste la vida a %s", name2); // formateamos la string str nuevamente
      SendClientMessage(playerid, 0x00FF00FF, str); // mandamos el mensaje con la tring
      return 1;
    }

    Tambien se puede utilizar sscanf como se usa en el lenguaje C, por ejemplo:
    Código:

    CMD:heal(playerid, params[]){
      new id;
      if(unformat(params, "i", id)){
      ....
    }

    Lo que esta entre "" es el specifier, depende del tipo de variable que usen, aca estan algunos los que usa sscanf:
    Código:
    Specifier      Nombre            Ejemplo
       i, d         Integer                    1, 42, -10
       c         Cáracter                         a, o, *
       l         Lógico                    true, false
       b         Binario                    01001, 0b1100
       h, x         Hexadecial            1A, 0x23
       o         Octal                            045 12
       n         Numero                        42, 0b010, 0xAC, 045
       f         Float                              0.7, -99.5
       g         IEEE Float                         0.7, -99.5, INFINITY, -INFINITY, NAN, NAN_E
       u         Nombre o ID (bots y jugadores)   Y_Less, 0
       q         Nombre y ID del Bot         ShopBot, 27
       r         Nombre y ID               Y_Less, 42
    Extraido de forum.sa-mp.com

    Yo en el caso anterior use el "i", que seria la variable id que representa a un numero entero, en este caso la id del player destinatario.
    Pero se puede usar muchos tipos de variables, aca hago algunos ejemplos simples:
    Código:
    CMD:cambiardenombre(playerid, params[]){
      new
              id,
              name[128]; //creamos variables y strings
      if(sscanf(params, "is[128]", id, name)) return SendClientMessage(playerid, 0xFF00000FF, "USO: /cambiardenombre id nombre"); //implementamos sscanf a id y a name, y si no son bien escritos returnea en este mensaje
      else if(!IsPlayerConnected(id) || id == INVALID_PLAYER_ID) return SendClientMessage(playerid, 0xFF0000FF, "Jugador no conectado o no existente"); // si el id es invalido o no esta conectado returnea a este mensaje
      if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "No eres admin"); // si no es admin manda este mensaje
      SetPlayerName(id, name); // le pone el nombre de name, al id representado por la variable id
      SendClientMessage(id, 0x00FF00FF, "Un Administrador te cambio de nombre"); // le envia un mensaje al otro player
      return 1;
    }
    Código:
    CMD:vida(playerid, params[]){
      new
              id,
              Float:vida; // creamos variables y float
      if(sscanf(params, "if", id, vida))  return SendClientMessage(playerid, 0xFF00000FF, "USO: /vida id vida"); // chequeamos mediante sscanf que el comando este bien escrito, con el intreger id y el float vida
      else if(!IsPlayerConnected(id) || id == INVALID_PLAYER_ID) return SendClientMessage(playerid, 0xFF0000FF, "Jugador no conectado o no existente"); // si no esta conectado o el id es invalido manda este mensaje
      if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "No eres admin"); // si el que manda el comando no es admin manda este mensaje
      SetPlayerHealth(id, vida); // le setea la vida, en lo que el player definio en el comando
      new
              str[128]; // creamos una string
      format(str, sizeof str, "Un Administrador te seteo la vida en %f", vida); // le damos formato a la string con el siguiente mensaje
      SendClientMessage(id, 0x00FF00FF, str); // le mandamos la string en forma de mensaje al otro player
      return 1;
    }

    Bueno sscanf se puede utilizar no solo para comandos, tambien como por ejemplo para procesadores de archivos INI, como DINI. Todo depende de su imaginacion y creatividad. Cualquier duda o si me equivoque en algo avisen, es que hice el post medio cansado xD.

    Creditos: Sharingan

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