SA-MP Forums Archive
Miren :3 їquedo bien? - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: Miren :3 їquedo bien? (/showthread.php?tid=527715)



Miren :3 їquedo bien? - xTexTx - 24.07.2014

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


Respuesta: Miren :3 їquedo bien? - Glimma - 24.07.2014

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).


Respuesta: Miren :3 їquedo bien? - xTexTx - 24.07.2014

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?.


Respuesta: Miren :3 їquedo bien? - Glimma - 24.07.2014

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.


Respuesta: Miren :3 їquedo bien? - xTexTx - 24.07.2014

Ahhh vale, muchisimas gracias :3


Respuesta: Miren :3 їquedo bien? - Glimma - 24.07.2014

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;
}



Respuesta: Miren :3 їquedo bien? - xTexTx - 24.07.2014

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


Respuesta: Miren :3 їquedo bien? - Glimma - 24.07.2014

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.


Respuesta: Miren :3 їquedo bien? - aoEXE - 24.07.2014

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.


Respuesta: Miren :3 їquedo bien? - Glimma - 24.07.2014

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

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