Miren :3 їquedo bien?
#1

Holaa, estuve haciendo mi primer comando con sscanf (Que emociуn xDD) y me ha pasado antes de que no me da ningun error pero algunas veces no funciona, mi pregunta es si lo hice bien al comando:

pawn Код:
CMD:descongelar(playerid, params[])
{
    if(PlayerInfo[playerid][pAdmin] == 1) return SendClientMessage(playerid, COLOR_RED, "No eres admin");
    if(sscanf(params, "u", params[0])) return SendClientMessage(playerid, COLOR_GREY, "Use /descongelar [ID]");
    {
        new Mensaje[128];
        new Jugador[MAX_PLAYER_NAME];
        GetPlayerName(playerid, Jugador, MAX_PLAYER_NAME);
        format(Mensaje, sizeof(Mensaje), "Descongelaste a %s", Jugador);
        SendClientMessage(playerid, COLOR_FLASH, Mensaje);
        TogglePlayerControllable(params[0], 1);
    }
    return 1;
}
Cualquier mensajito se agradece :3
Reply
#2

Probб asн (agreguй un condicional que verifique si el jugador seleccionado estб conectado):

pawn Код:
CMD(descongelar, playerid, params[])
{
    if(PlayerInfo[playerid][pAdmin] < 1) return SendClientMessage(playerid, COLOR_RED, "No eres admin");
    if(!sscanf(params, "u", params[0]))
    {
        if(params[0] == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_RED, "El jugador no esta conectado.");
        new Mensaje[64], Jugador[MAX_PLAYER_NAME];
        GetPlayerName(playerid, Jugador, MAX_PLAYER_NAME);
        format(string, sizeof(string), "Descongelaste a %s", Jugador);
        SendClientMessage(params[0], COLOR_FLASH, Mensaje);
        TogglePlayerControllable(params[0], 1);
    }
    else SendClientMessage(playerid, COLOR_GREY, "Use /descongelar [ID]");
    return 1;
}
A tu cуdigo en sн, le encontrй un error de funcionamiento notable (no un error de script, ya que compila bien, porque es una condiciуn lуgica), en el condicional pusiste que detecte que si el jugador que ejecuta el comando tiene la variable pAdmin igual a 1, le envнe el mensaje de error y no lo deje continuar con el cуdigo. Ahн lo que tenнas que haber puesto es usar un "<" en lugar de "==", de esta forma el mensaje de error se le enviarнa si tiene como valor de la variable pAdmin un nъmero menor a 1 (0, -infinito).
Reply
#3

Muchas gracias
una preguntita mбs si no es mucha molestia.
Si yo pongo esto:
pawn Код:
new Mensaje[64], Jugador[MAX_PLAYER_NAME];
en otro comando, no me lo tomaria como ya definido?.
Reply
#4

No, porque eso lo estбs definiendo solo en ese comando, por lo tanto, podйs definirlo nuevamente en la funciуn o comando que quieras.

Te lo tomarнa como ya definido si declararas las variables fuera de algъn cуdigo, quedando estas sueltas, las estarнas declarando de forma global.
Reply
#5

Ahhh vale, muchisimas gracias :3
Reply
#6

Igual, te conviene mбs crear una funciуn para devolver el nombre deseado de una forma mбs prбctica donde quieras, para no tener que estar colocando lo de Jugador por cada funciуn o comando que hagas.

Suponiendo que tenйs un servidor de rol, hice dos funciones, la de NombreIC y la de NombreOOC, que la ъnica diferencia que tienen es que en la primera, en el nombre del jugador, desaparece textualmente el "_".

pawn Код:
stock NombreOOC(playerid)
{
    new nombre[32];
    GetPlayerName(playerid, nombre, 32);
    return nombre;
}
pawn Код:
stock NombreIC(playerid)
{
    new nombre[32];
    GetPlayerName(playerid, nombre, 32);
    new N[32];
    strmid(N, nombre, 0, strlen(nombre), 32); for(new i = 0; i < MAX_PLAYER_NAME; i++)
    {
        if (N[i] == '_') N[i] = ' ';
    }
    return N;
}
Ejemplo de uso;
pawn Код:
CMD(descongelar, playerid, params[])
{
    if(PlayerInfo[playerid][pAdmin] < 1) return SendClientMessage(playerid, COLOR_RED, "No eres admin");
    if(!sscanf(params, "u", params[0]))
    {
        if(params[0] == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_RED, "El jugador no esta conectado.");
        new Mensaje[64];
        format(string, sizeof(string), "Descongelaste a %s", NombreIC(params[0])); // O NombreOOC, segъn como lo uses.
        SendClientMessage(params[0], COLOR_FLASH, Mensaje);
        TogglePlayerControllable(params[0], 1);
    }
    else SendClientMessage(playerid, COLOR_GREY, "Use /descongelar [ID]");
    return 1;
}
Reply
#7

NombreIC lo que haria es tomar el nombre pero quitarle el _ verdad?
y el nombre OOC simplemente lo toma asн nomas.
Reply
#8

Claro. Es simplemente por estйtica, por ejemplo, en comandos OOC como /b, canales de dudas, chats OOC, notificaciones del servidor, usбs el NombreOOC, y para el chat IC, el /me, autoroles de comandos, anuncios gubernamentales, entre otros, usбs NombreIC.
Reply
#9

Hola, perdуn que me meta pero me podrнan explicar lo de la "u", "r" ... y los que faltan?

Sй que algunos son para cuando el params es el id o nombre del jugador y otros para numйricos, pero no me lo sй todos y los necesito para asн usarlos correctamente.


їMe los podrнan decir todos y cuando se usa dependiendo el params?

PD: No consigo todos por eso pregunto acб ya que hablan de sscanf.
Reply
#10

https://github.com/Y-Less/sscanf/wiki

Tenйs "simple specifiers" y "more specifiers".
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)