pasar de strtok y strtokex a sscanf
#1

Hola a todos tengo una pequeсa duda amigos.Hay algun tutorial bien explicado de como pasar de strtokex o strtok a sscanf? porque la verdad me cuesta mucho vi uno en ingles pero no lo comprendi :S
Reply
#2

Pasate por aquн.. https://sampforum.blast.hk/showthread.php?tid=406616

Aunque te dejo un ejemplo:

Aqui tenemos un comando usando strtok.

pawn Код:
if(strcmp(cmd, "/descongelar", true) == 0)
    {
        new Celdas[128], Jugador;
        Celdas = strtok(cmdtext,idx);
        if(!strlen(Celdas)) return SendClientMessage(playerid, Rojo, "Usa: /descongelar [playerid]");
        Jugador = strval(Celdas);
        if (IsPlayerConnected(Jugador)) // chequea si el jugador esta conectado, si no lo esta, no va a proceder el comando, no va a hacer la accion.
        {
            TogglePlayerControllable(Jugador,1); // la funcion que harнa el comando, que lo descongelara (es un ejemplo)
        }
        return 1; // retornamos el comando..
    }
Ahora, la pregunta del aсo ї Como pasarlo a sscanf ? facil. reemplazando.

primero que todo. reemplazamos el comando por zcmd o y_cmd, porque strcmp no usa parametros (params) y quitamos Celdas = strtok(cmdtext,idx); - Celdas[128] y Jugador = strval(Celdas);

nos quedarнa asi.

pawn Код:
CMD:descongelar(playerid, params[]) // aqui puedes reemplazarlo, como tu quieras, ahi muchas formas. ej: COMMAND:blabla(playerid.......
    {
        new Jugador;
        if(!strlen(Celdas)) return SendClientMessage(playerid, Rojo, "Usa: /descongelar [playerid]");
        if (IsPlayerConnected(Jugador))
        {
            TogglePlayerControllable(Jugador,1);
        }
        return 1;
}
Ahora reemplazamos if(!strlen(Celdas)) por sscanf. (poniendole la variable Jugador) Quedaria asi entonces.

pawn Код:
CMD:descongelar(playerid, params[]) // aqui puedes reemplazarlo, como tu quieras, ahi muchas formas. ej: COMMAND:blabla(playerid.......
    {
        new Jugador;
        if(sscanf(params, "u", Jugador)) return SendClientMessage(playerid, Rojo, "Usa: /descongelar [playerid]");
        if (IsPlayerConnected(Jugador)) // cheque si el jugador esta conectado o no, si no lo esta no procede el comando, no hara la accion.
        {
            TogglePlayerControllable(Jugador,1); // la funcion que hara el comando, que lo descongelara. (es un ejemplo)
        }
        return 1;
}
Esto serнa el comando en zcmd/y_cmd con sscanf. pero tienes dudas de que significa o como utilize el sscanf?

Tu diras, que significa esto? if(sscanf(params, "u", Jugador)) Bien, te explicarй.

sscanf significa que estamos utilizando sscanf (obvio)

params significa parametros, que estas utilizando parametros en el comando

"u" significa que estamos utilizando un especificador para usar el comando,es decir, "u" sirve para buscar ids de jugadores o nombres de jugadores.

No entendistes lo ultimo? pues ve al post original de sscanf y busca los especificador que se utilizan: https://sampforum.blast.hk/showthread.php?tid=120356 en la parte de especificadores

Si no quieres utilizar variables, te tenemos otra salida, puedes usar parametros en vez de variables, es decir:

pawn Код:
CMD:descongelar(playerid, params[]) // aqui puedes reemplazarlo, como tu quieras, ahi muchas formas. ej: COMMAND:blabla(playerid.......
    {
        if(sscanf(params, "u", params[0])) return SendClientMessage(playerid, Rojo, "Usa: /descongelar [playerid]");
        if (IsPlayerConnected(params[0])) // cheque si el jugador esta conectado o no, si no lo esta no procede el comando, no hara la accion.
        {
            TogglePlayerControllable(params[0],1); // la funcion que hara el comando, que lo descongelara. (es un ejemplo)
        }
        return 1;
}
Si vistes el post que te deje empezando la respuesta, sabras como funciona esto que hize...

Recuerda si quieres utilizar string, es decir, caracteres, letras, numeros. lo que sea, tienes que poner su longitud (la longitud del comando), es decir, la cantidad de celdas que se utilizarб. ejemplo:

pawn Код:
CMD:anuncio(playerid,params[])
{
        new stringg[128];
        if(sscanf(params,"s[128]",stringg)) return SendClientMessage(playerid,Rojo,"Uso: /anuncio [texto]");
        GameTextForAll(stringg,4000,3);
        return 1;
}
s[128], que quiere decir esto? s significa string y 128 la cantidad de celdas que se van a utilizar en el comando.

Espero que te haya servido..
Reply
#3

Buena explicaciуn Adoniiz
Reply
#4

Quote:
Originally Posted by Adoniiz
Посмотреть сообщение
Pasate por aquн.. https://sampforum.blast.hk/showthread.php?tid=406616

Aunque te dejo un ejemplo:

Aqui tenemos un comando usando strtok.

pawn Код:
if(strcmp(cmd, "/descongelar", true) == 0)
    {
        new Celdas[128], Jugador;
        Celdas = strtok(cmdtext,idx);
        if(!strlen(Celdas)) return SendClientMessage(playerid, Rojo, "Usa: /descongelar [playerid]");
        Jugador = strval(Celdas);
        if (IsPlayerConnected(Jugador)) // chequea si el jugador esta conectado, si no lo esta, no va a proceder el comando, no va a hacer la accion.
        {
            TogglePlayerControllable(Jugador,1); // la funcion que harнa el comando, que lo descongelara (es un ejemplo)
        }
        return 1; // retornamos el comando..
    }
Ahora, la pregunta del aсo ї Como pasarlo a sscanf ? facil. reemplazando.

primero que todo. reemplazamos el comando por zcmd o y_cmd, porque strcmp no usa parametros (params) y quitamos Celdas = strtok(cmdtext,idx); - Celdas[128] y Jugador = strval(Celdas);

nos quedarнa asi.

pawn Код:
CMD:descongelar(playerid, params[]) // aqui puedes reemplazarlo, como tu quieras, ahi muchas formas. ej: COMMAND:blabla(playerid.......
    {
        new Jugador;
        if(!strlen(Celdas)) return SendClientMessage(playerid, Rojo, "Usa: /descongelar [playerid]");
        if (IsPlayerConnected(Jugador))
        {
            TogglePlayerControllable(Jugador,1);
        }
        return 1;
}
Ahora reemplazamos if(!strlen(Celdas)) por sscanf. (poniendole la variable Jugador) Quedaria asi entonces.

pawn Код:
CMD:descongelar(playerid, params[]) // aqui puedes reemplazarlo, como tu quieras, ahi muchas formas. ej: COMMAND:blabla(playerid.......
    {
        new Jugador;
        if(sscanf(params, "u", Jugador)) return SendClientMessage(playerid, Rojo, "Usa: /descongelar [playerid]");
        if (IsPlayerConnected(Jugador)) // cheque si el jugador esta conectado o no, si no lo esta no procede el comando, no hara la accion.
        {
            TogglePlayerControllable(Jugador,1); // la funcion que hara el comando, que lo descongelara. (es un ejemplo)
        }
        return 1;
}
Esto serнa el comando en zcmd/y_cmd con sscanf. pero tienes dudas de que significa o como utilize el sscanf?

Tu diras, que significa esto? if(sscanf(params, "u", Jugador)) Bien, te explicarй.

sscanf significa que estamos utilizando sscanf (obvio)

params significa parametros, que estas utilizando parametros en el comando

"u" significa que estamos utilizando un especificador para usar el comando,es decir, "u" sirve para buscar ids de jugadores o nombres de jugadores.

No entendistes lo ultimo? pues ve al post original de sscanf y busca los especificador que se utilizan: https://sampforum.blast.hk/showthread.php?tid=120356 en la parte de especificadores

Si no quieres utilizar variables, te tenemos otra salida, puedes usar parametros en vez de variables, es decir:

pawn Код:
CMD:descongelar(playerid, params[]) // aqui puedes reemplazarlo, como tu quieras, ahi muchas formas. ej: COMMAND:blabla(playerid.......
    {
        if(sscanf(params, "u", params[0])) return SendClientMessage(playerid, Rojo, "Usa: /descongelar [playerid]");
        if (IsPlayerConnected(params[0])) // cheque si el jugador esta conectado o no, si no lo esta no procede el comando, no hara la accion.
        {
            TogglePlayerControllable(params[0],1); // la funcion que hara el comando, que lo descongelara. (es un ejemplo)
        }
        return 1;
}
Si vistes el post que te deje empezando la respuesta, sabras como funciona esto que hize...

Recuerda si quieres utilizar string, es decir, caracteres, letras, numeros. lo que sea, tienes que poner su longitud (la longitud del comando), es decir, la cantidad de celdas que se utilizarб. ejemplo:

pawn Код:
CMD:anuncio(playerid,params[])
{
        new stringg[128];
        if(sscanf(params,"s[128]",stringg)) return SendClientMessage(playerid,Rojo,"Uso: /anuncio [texto]");
        GameTextForAll(stringg,4000,3);
        return 1;
}
s[128], que quiere decir esto? s significa string y 128 la cantidad de celdas que se van a utilizar en el comando.

Espero que te haya servido..
Te lo super agradezco! ya lo voy entendiendo ahora voy a practicar en un lvdm y probar como me va asi me lo aprendo del todo de verdad muchas gracias!
Reply
#5

Quote:
Originally Posted by elvago
Посмотреть сообщение
Buena explicaciуn Adoniiz
Eh, gracias!


Quote:
Originally Posted by Dardo
Посмотреть сообщение
Te lo super agradezco! ya lo voy entendiendo ahora voy a practicar en un lvdm y probar como me va asi me lo aprendo del todo de verdad muchas gracias!
De nada amigo para eso estamos para ayudar!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)