[Ayuda] En un sistema de login.
#1

Observando unos cuantos post's de ayuda de Y_INI he llegado a reconocer bastanets funciones que tiene este, pero ahora tengo una duda en el tema de GUARDADO en Y_INI ya que ahora no guarda las contraseсas ni ningъn dato de los que aparece en el cуdigo que puse:
Код:
{
    switch( dialogid )
    {
        case DIALOG_REGISTER:
        {
            if (!response) return Kick(playerid);
            if(response)
            {
                if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, ""COL_WHITE"Registrando...",""COL_RED"Has colocado una contraseсa incorrecta.\n"COL_WHITE"Indica tu contraseсa para registrarte.","Registrar","Salir");
                new INI:File = INI_Open(UserPath(playerid));
                INI_SetTag(File,"data");
                INI_WriteInt(File,"Password",udb_hash(inputtext));
                INI_WriteInt(File,"Cash",0);
                INI_WriteInt(File,"Admin",0);
                INI_WriteInt(File,"Kills",0);
                INI_WriteInt(File,"Deaths",0);
                INI_Close(File);

                SetSpawnInfo(playerid, 0, 0, 1958.33, 1343.12, 15.36, 269.15, 0, 0, 0, 0, 0, 0);
                SpawnPlayer(playerid);
                ShowPlayerDialog(playerid, DIALOG_SUCCESS_1, DIALOG_STYLE_MSGBOX,""COL_WHITE"PERFECTO!",""COL_GREEN"ЎTe has registrado correctamente, Bienvenid@","Aceptar","");
                        }
        }
Lo que no entiendo de todo esto es que despuйs de regustrarme y aъn poniendo que me guarde la Password , kills..etc. Cuando se genera el .ini del usuario quede en blanco, їsabeis si me queda aсgo por aсadir?
Reply
#2

Necesito alguna mano
Reply
#3

Muestra el OnplayerDisconnect seguro es que estas guardando los datos del ser que sale, aunque no se registre
debes crear una variable conprobante

Ejemplo

PHP код:
public OnPlayerDisconnect(playeridreason)
{
if(
PlayerInfo[playerid][Registrado] == 1)  SalvarDatos(playerid);//Si la variable esta en 1 guardara sus datos
return 1;
}
SalvarDatos(playerid)
{
new 
INI:File INI_Open(UserPath(playerid));
INI_SetTag(File,"data");
INI_WriteInt(File,"Dinero",GetPlayerMoney(playerid));
//Etc

Puedes poner que al loguearse o registrarse esa variable que cambie a 1 asн podras guardar sus datos si esta logeado
Reply
#4

A que te refieres con:
Quote:

ya que ahora no guarda las contraseсas ni ningъn dato de los que aparece en el cуdigo que puse:

No te crea el archivo, los datos que asignaste, te aseguraste de guardar de nuevo al desconectarse el jugador "OnPlayerDisconnect"?, al conectar de nuevo al servidor te aseguraste de cargar(leer), en variables lo que guardaste en el user.ini?...
Reply
#5

Quote:
Originally Posted by TheMatius
Посмотреть сообщение
A que te refieres con:

No te crea el archivo, los datos que asignaste, te aseguraste de guardar de nuevo al desconectarse el jugador "OnPlayerDisconnect"?, al conectar de nuevo al servidor te aseguraste de cargar(leer), en variables lo que guardaste en el user.ini?...
Sн, me explique mal.
Cuando alguien se registra, el archivo .ini se me crea perfectamente, ahora el problema viene cuando me registro. Ya que no guarda nada en este archivo, practicamente se queda en blanco. Y eso ocasiona que cuando me logueo psoteriormente , me diga que he introducido una contraseсa incorrecta (cuando en realida el archivo .ini que se ha creado en la carpeta de usuarios esta en blanco).
Reply
#6

Utilizalo como referencia:
pawn Код:
// [ DEVELOPMENT GAMEMODE ]

// INCLUDES:

#include <a_samp>
#include <YSI\y_ini>

// NATIVES:

// WHIRLPOOL:

native WP_Hash(buffer[], len, const str[]);

// UNDEFINES:

#undef isnull

// DEFINES:

// FUNCTIONS:

#define function%0(%1) forward%0(%1); public%0(%1)
#define isnull(%1) ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))

// DIALOGS:

#define DIALOG_REGISTER 0
#define DIALOG_LOGIN 1

// DATABASE:

#define USER_TAG "player_data"
#define USER_PASSWORD "password"
#define USER_SCORE "score"
#define USER_CASH "cash"
#define USER_KILLS "kills"
#define USER_DEATHS "deaths"
#define USER_VIP_LEVEL "vip_level"
#define USER_ADMIN_LEVEL "admin_level"

// ARRAYS AND ENUMERATORS:

enum eUserInfo
{
    user_password[129],
    user_score,
    user_cash,
    user_kills,
    user_deaths,
    user_vip_level,
    user_admin_level
}

new aUserInfo[MAX_PLAYERS][eUserInfo];

// VARIABLES:

// STATES:

new bool:sSignedIn[MAX_PLAYERS] = false;

// MAIN:

main()
{
    print("Development Mode: ini_login_system.amx");
}

// CALLBACKS:

public OnGameModeInit()
{
    return 1;
}

public OnGameModeExit()
{
    return 1;
}

public OnPlayerConnect(playerid)
{
    if(fexist(UserPath(playerid)))
    {
        INI_ParseFile(UserPath(playerid), "LoadUserData", .bExtra = true, .extra = playerid);
        ShowLoginDialog(playerid, "");
    }
    else ShowRegisterDialog(playerid, "");
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    if(IsPlayerSignedIn(playerid))
    {
        new INI:file = INI_Open(UserPath(playerid));
        INI_SetTag(file, USER_TAG);
        INI_WriteInt(file, USER_SCORE, GetPlayerScore(playerid));
        INI_WriteInt(file, USER_CASH, GetPlayerMoney(playerid));
        INI_WriteInt(file, USER_KILLS, aUserInfo[playerid][user_kills]);
        INI_WriteInt(file, USER_DEATHS, aUserInfo[playerid][user_deaths]);
        INI_WriteInt(file, USER_VIP_LEVEL, aUserInfo[playerid][user_vip_level]);
        INI_WriteInt(file, USER_ADMIN_LEVEL, aUserInfo[playerid][user_admin_level]);
        INI_Close(file);
    }

    ResetPlayerVariables(playerid);
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case DIALOG_REGISTER:
        {
            if(!response) return KickPlayer(playerid);
            if(response)
            {
                if(isnull(inputtext)) return ShowRegisterDialog(playerid, "Enter a password.");

                new hash[129];
                WP_Hash(hash, sizeof(hash), inputtext);

                new INI:file = INI_Open(UserPath(playerid));
                INI_SetTag(file, USER_TAG);
                INI_WriteString(file, USER_PASSWORD, hash);
                INI_WriteInt(file, USER_SCORE, 0);
                INI_WriteInt(file, USER_CASH, 0);
                INI_WriteInt(file, USER_KILLS, 0);
                INI_WriteInt(file, USER_DEATHS, 0);
                INI_WriteInt(file, USER_VIP_LEVEL, 0);
                INI_WriteInt(file, USER_ADMIN_LEVEL, 0);
                INI_Close(file);

                sSignedIn[playerid] = true;

                return SendClientMessage(playerid, -1, "You have successfully registered an account.");
            }
        }
        case DIALOG_LOGIN:
        {
            if(!response) return KickPlayer(playerid);
            if(response)
            {
                if(isnull(inputtext)) return ShowLoginDialog(playerid, "Enter a password.");

                new hash[129];
                WP_Hash(hash, sizeof(hash), inputtext);

                if(strcmp(aUserInfo[playerid][user_password], hash, false) == 0)
                {
                    INI_ParseFile(UserPath(playerid), "LoadUserData", .bExtra = true, .extra = playerid);
                    SetPlayerScore(playerid, aUserInfo[playerid][user_score]);
                    GivePlayerMoney(playerid, aUserInfo[playerid][user_cash]);

                    sSignedIn[playerid] = true;

                    return SendClientMessage(playerid, -1, "You have successfully logged into your account.");
                }
                else return ShowLoginDialog(playerid, "Incorrect password.");
            }
        }
    }
    return 1;
}

// FUNCTIONS:

stock ResetPlayerVariables(playerid)
{
    // ARRAYS AND ENUMERATORS:

    aUserInfo[playerid][user_password] = EOS;
    aUserInfo[playerid][user_score] = 0;
    aUserInfo[playerid][user_cash] = 0;
    aUserInfo[playerid][user_kills] = 0;
    aUserInfo[playerid][user_deaths] = 0;
    aUserInfo[playerid][user_vip_level] = 0;
    aUserInfo[playerid][user_admin_level] = 0;

    // PER-PLAYER VARIABLES:

    // STATES:

    sSignedIn[playerid] = false;
    return 1;
}

function LoadUserData(playerid, name[], value[])
{
    INI_String(USER_PASSWORD, aUserInfo[playerid][user_password], 129);
    INI_Int(USER_SCORE, aUserInfo[playerid][user_score]);
    INI_Int(USER_CASH, aUserInfo[playerid][user_cash]);
    INI_Int(USER_KILLS, aUserInfo[playerid][user_kills]);
    INI_Int(USER_DEATHS, aUserInfo[playerid][user_deaths]);
    INI_Int(USER_VIP_LEVEL, aUserInfo[playerid][user_vip_level]);
    INI_Int(USER_ADMIN_LEVEL, aUserInfo[playerid][user_admin_level]);
    return 1;
}

stock ShowRegisterDialog(playerid, error[])
{
    new string[256];
    strcat(string, "Welcome. This account is not registered.\n");
    strcat(string, "Enter a password below to register an account.");
   
    if(!isnull(error)) format(string, sizeof(string), "%s\n\n{FF0000}%s", string, error);
    return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Register", string, "Register", "Quit");
}

stock ShowLoginDialog(playerid, error[])
{
    new string[256];
    strcat(string, "Welcome back. This account is already registered.\n");
    strcat(string, "Insert your password to log into your account.");

    if(!isnull(error)) format(string, sizeof(string), "%s\n\n{FF0000}%s", string, error);
    return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", string, "Login", "Quit");
}

stock KickPlayer(playerid) return SetTimerEx("KickPlayerEx", 100, false, "i", playerid);

function KickPlayerEx(playerid) return Kick(playerid);

stock UserPath(playerid)
{
    new string[128], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string), "/Users/%s.ini", name);
    return string;
}

function bool:IsPlayerSignedIn(playerid) return sSignedIn[playerid];
Reply
#7

SickAttack Aъn intentandolo con tu cуdigo no me guarda la contraseсa cuando me registro en el archivo, pero sн curiosamente me deja loguearme aъn poniendo una contraseсa incorrecta.
[16:40:32] Error: Function not registered: 'WP_Hash'

Ese error me salta en consola, no se si tendrб que ver, es lo ъnico asн...
Reply
#8

Para usar native WP_Hash(buffer[], len, const str[]);, es necesario el plugin Whirlpool. Intenta revisar que errores tienes en tu cуdigo, en que no te guarda la contraseсa te recomiendo que mires el codigo, desde el principio y en lo mejor posible agregar whirlpool como hashpass. WHIRLPOOL
Reply
#9

Quote:
Originally Posted by LuKkY
Посмотреть сообщение
SickAttack Aъn intentandolo con tu cуdigo no me guarda la contraseсa cuando me registro en el archivo, pero sн curiosamente me deja loguearme aъn poniendo una contraseсa incorrecta.
[16:40:32] Error: Function not registered: 'WP_Hash'

Ese error me salta en consola, no se si tendrб que ver, es lo ъnico asн...
No te lo crea porque ocupas el plugin llamada "whirlpool".
Reply
#10

Perdуn no te entiendo:P їA que te refieres con "ocupar" el plgun wirlpool?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)