A little doubt :D
#1

Qe hacemo gentee.

Bueno, estoi haciendo un sistema de administracion, bien bбsico por ahora, y tengo 2 "problemas".

pawn Код:
CMD:login(playerid, params[])
{
    GetPlayerName(playerid, pname, sizeof(pname));
    format(archivo, sizeof(archivo), Users, pname);
   
    if(aInfo[playerid][Registrado] == 0) return SendClientMessage(playerid, COLOR_YELLOW, "Esta cuenta no esta registrada! Utiliza /registrar para registrarla!");
    if(aInfo[playerid][Logueado] == 1) return SendClientMessage(playerid, COLOR_YELLOW, "Ya estas logueado!");
   
    if(isnull(params)) return SendClientMessage(playerid, COLOR_RED, "Uso: /login <password>");
   
    new tmp;
    tmp = dini_Int(archivo, "pass");
    if(udb_hash(params) != tmp)
    {
        format(str, sizeof(str), "La contraseсa que ingresaste es incorrecta!");
        SendClientMessage(playerid, COLOR_RED, str);
    }
    else
    {
        aInfo[playerid][Admin] = dini_Int(archivo, "Admin");
        aInfo[playerid][Logueado] = 1;
       
        aInfo[playerid][Baneado] = dini_Int(archivo, "Baneado");
       
        if(aInfo[playerid][Baneado] == 1)
        {
            SendClientMessage(playerid, COLOR_RED, "Estas baneado en el servidor!");
            return Kick(playerid);
        }
       
        if(aInfo[playerid][Admin] != 0)
        {
            format(str, sizeof(str), "Bienvenido %s! Admin Level: %s.! Utiliza /acmds para ver tus comandos de administracion!", pname, aInfo[playerid][Admin]);
            SendClientMessage(playerid, COLOR_LIGHTGREEN, str);
            SendClientMessage(playerid, COLOR_RED, "[rAdmin] Logueado satisfactoriamente!");
        }
        else
        {
            format(str, sizeof(str), "Bienvenido %s! Utiliza /comandos para ver los comandos disponibles!", pname);
            SendClientMessage(playerid, COLOR_YELLOW, str);
            SendClientMessage(playerid, COLOR_RED, "[rAdmin] Logueado satisfactoriamente!");
        }
       
        TogglePlayerControllable(playerid, 1);
    }
    return 1;
}
Si alguien es admin y loguea, le envia el texto de un player normal.

pawn Код:
CMD:setlevel(playerid, params[])
{
    new playerid2, pname2[MAX_PLAYER_NAME], level;
    if(aInfo[playerid][Admin] >= MaxLevel || IsPlayerAdmin(playerid))
    {
        if(sscanf(params, "ud", playerid2, level))
        {
            if(!IsPlayerConnected(playerid2)) return SendClientMessage(playerid, COLOR_RED, "Este jugador no esta conectado.");
            if(aInfo[playerid][Admin] < aInfo[playerid2][Admin]) return SendClientMessage(playerid, COLOR_RED, "No puedes cambiar el nivel de un administrador de mayor nivel.");
            GetPlayerName(playerid, pname, sizeof(pname));
            GetPlayerName(playerid2, pname2, sizeof(pname2));
            aInfo[playerid2][Admin] = level;
            format(str, sizeof(str), "El Administrador %s[%d] te dio nivel %s.", pname,  playerid, aInfo[playerid][Admin]);
            SendClientMessage(playerid2, COLOR_YELLOW, str);
        }
        else return SendClientMessage(playerid, COLOR_RED, "Uso: /setlevel <playerid> <nivel>");
    }
    else return SendClientMessage(playerid, COLOR_RED, "Este comando es solo para Admins nivel 5.");
    return 1;
}
Si uso "/setlevel 0 1", me envia el mensaje "Uso: /setlevel <playerid> <nivel>", si uso "/setlevel 0 asd", funciona.

Alguna idea? Gracias
Reply
#2

pawn Код:
CMD:login(playerid, params[])
{
    GetPlayerName(playerid, pname, sizeof(pname));
    format(archivo, sizeof(archivo), Users, pname);
   
    if(aInfo[playerid][Registrado] == 0) return SendClientMessage(playerid, COLOR_YELLOW, "Esta cuenta no esta registrada! Utiliza /registrar para registrarla!");
    if(aInfo[playerid][Logueado] == 1) return SendClientMessage(playerid, COLOR_YELLOW, "Ya estas logueado!");
   
    if(isnull(params)) return SendClientMessage(playerid, COLOR_RED, "Uso: /login <password>");
   
    new tmp;
    tmp = dini_Int(archivo, "pass");
    if(udb_hash(params) != tmp)
    {
        format(str, sizeof(str), "La contraseсa que ingresaste es incorrecta!");
        SendClientMessage(playerid, COLOR_RED, str);
    }
    else
    {
        aInfo[playerid][Admin] = dini_Int(archivo, "Admin");
        aInfo[playerid][Logueado] = 1;
       
        aInfo[playerid][Baneado] = dini_Int(archivo, "Baneado");
       
        if(aInfo[playerid][Baneado] == 1)
        {
            SendClientMessage(playerid, COLOR_RED, "Estas baneado en el servidor!");
            return Kick(playerid);
        }
       
        if(aInfo[playerid][Admin] > 0) //Cambie el != por >
        {
            format(str, sizeof(str), "Bienvenido %s! Admin Level: %s.! Utiliza /acmds para ver tus comandos de administracion!", pname, aInfo[playerid][Admin]);
            SendClientMessage(playerid, COLOR_LIGHTGREEN, str);
            SendClientMessage(playerid, COLOR_RED, "[rAdmin] Logueado satisfactoriamente!");
        }
        else
        {
            format(str, sizeof(str), "Bienvenido %s! Utiliza /comandos para ver los comandos disponibles!", pname);
            SendClientMessage(playerid, COLOR_YELLOW, str);
            SendClientMessage(playerid, COLOR_RED, "[rAdmin] Logueado satisfactoriamente!");
        }
       
        TogglePlayerControllable(playerid, 1);
    }
    return 1;
}
Y pues bueno no se porque pasara eso con el segundo comando pero puede ser por que tenias "d" en vez de "i" en sscanf. Ademas te lo ordene un poquito. :L

pawn Код:
CMD:setlevel(playerid, params[])
{
    new playerid2, pname2[MAX_PLAYER_NAME], level;
    if(aInfo[playerid][Admin] >= MaxLevel || IsPlayerAdmin(playerid))
    {
        if(sscanf(params, "ui", playerid2, level)) return SendClientMessage(playerid, COLOR_RED, "Uso: /setlevel <playerid> <nivel>");
        else if(!IsPlayerConnected(playerid2)) return SendClientMessage(playerid, COLOR_RED, "Este jugador no esta conectado.");
        else if(aInfo[playerid][Admin] < aInfo[playerid2][Admin]) return SendClientMessage(playerid, COLOR_RED, "No puedes cambiar el nivel de un administrador de mayor nivel.");
        else
        {
            GetPlayerName(playerid, pname, sizeof(pname));
            GetPlayerName(playerid2, pname2, sizeof(pname2));
            aInfo[playerid2][Admin] = level;
            format(str, sizeof(str), "El Administrador %s[%d] te dio nivel %s.", pname,  playerid, aInfo[playerid][Admin]);
            SendClientMessage(playerid2, COLOR_YELLOW, str);
        }
    }
    else return SendClientMessage(playerid, COLOR_RED, "Este comando es solo para Admins nivel 5.");
    return 1;
}
Reply
#3

De echo arthur, antes tenia "i" y era lo mismo, pero no es el caso, ya que "d" e "i" son usados ambos para integrers ^^.

Ahi pruebo el primero y te digo vieja, gracias.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)