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