SA-MP Forums Archive
Register & Login System Help - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: Register & Login System Help (/showthread.php?tid=576391)



Register & Login System Help - Scropion - 03.06.2015

Hello EveryBody Ive Not Been In SA-MP Since 2 Years I Think And Now Im Back And I Need To Continue Scripting

Ok Problem Is : I Don't Know What Is The Code Of ( Creating , Saving , Loading ) The Stats Of The Player In Some

Of The Informations (Put In Mind Im Using Ysi/Yini) , Yes I've Read Tutoriols And Installed Them And Used Them But

It's Hard To Edit And Put My Informations To Save The Stats Because I Have These Things Need Them To Use

Oh And Explain Every Thing Please

One More Question Most Of Register Login With (Ysi/Yini) After Buying Somthing In /Shop It Shows Me Again The

Register Or The Login Dialog Why ? How To Fix It ?

Код HTML:
enum Informations
{
	Ip,                          // Whats The Code Of Saving This And How And Where To Put It
 	PlayerName,             // Same Above
	PassWord,               // Same Above But I Need To Show Password Not The Hashed One Can Be Used In (ysi)
	Age,                       // Yep By Writing In Dialog But How
	Gender,                   // Same Above
	Moneys,                  // No Help Needed Until End
	Scores,
	Kills,
	Deaths,
	AdminLevel,
 	VipLevel,
	Warnings,
	Kicks,
	Bans,
	Explodes,
	Mutes,
	Freezes,
	Slaps,
}



Re: Register & Login System Help - Emp3r0r - 03.06.2015

Follow this awesome tutorial by Kush and i'm sure you'll get it. You can download a package he provided to inspect the code yourself, if you still don't know how to add it.

https://sampforum.blast.hk/showthread.php?tid=273088


Re: Register & Login System Help - Scropion - 03.06.2015

The Problem Is In That One I've Used It Many Times But It The Problem About Shows Me The Dialog When Shopping XD Thanks For Help


Re: Register & Login System Help - SickAttack - 03.06.2015

Use the following script as a reference, a base or whatever you want:
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)
{
    ResetPlayerVariables(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;

                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;

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

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

stock IsPlayerSignedIn(playerid)
{
    if(sSignedIn[playerid]) return true;
    return false;
}
And the problem with the shopping dialog is probably because you have assigned the same ID to the shopping dialog as well for the login dialog, or you are showing them the shopping dialog with the login dialog's response.


Re: Register & Login System Help - Scropion - 03.06.2015

Thank You Very Much Well Thats Must Help