dini - money resets on disconnect
#1

Hello.
After having some problems with y_ini, i decided to try dini.
All fine for now , but when i disconnect , my "Money" in user files resets to 0. So when i reconnect i get 0 cash.
PHP код:
#include <a_samp>
#include <dini>
#include <dudb>
#pragma unused ret_memcpy
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_BRIGHTRED 0xFF0000AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_PINK 0xFF66FFAA
#define COLOR_BLUE 0x3A47DEFF
#define COLOR_TAN 0xBDB76BAA
#define COLOR_PURPLE 0x800080AA
#define COLOR_WHITE 0xFFFFFF00
#define COLOR_LIGHTBLUE 0x33CCFFAA
#define COLOR_ORANGE 0xFF9900AA
#define COLOR_INDIGO 0x4B00B0AA
#define COLOR_BLACK 0x00000000
#define COLOR_DARKGREY 0x696969FF
#define COLOR_RED 0xAA3333AA
#define COLOR_DARK_GREEN 0x33AA33FF
enum pInfo
{
    
pAdmin,
    
pCash,
    
pScore
}
new 
PlayerInfo[MAX_PLAYERS][pInfo];
new 
gPlayerLogged[MAX_PLAYERS];
new 
LoginAttempts[MAX_PLAYERS];
#define SERVER_USER_FILE "Administration/Accounts/%s.ini"
public OnFilterScriptInit()
{
    print(
"\n--------------------------------------");
    print(
" Admin system Loaded by Moudix.");
    print(
"--------------------------------------\n");
    return 
1;
}
public 
OnFilterScriptExit()
{
    return 
1;
}
public 
OnPlayerConnect(playerid)
{
    
LoginAttempts[playerid] = 0;
    
gPlayerLogged[playerid] = 0;
    new 
name[MAX_PLAYER_NAME], file[256];
    
GetPlayerName(playeridnamesizeof(name));
    
format(filesizeof(file), SERVER_USER_FILEname);
    if (!
dini_Exists(file))
    {
        new 
string[128];
        
format(string,sizeof(string), "{FFFFFF}Welcome, this name {F3FF02}%s{FFFFFF} is {FF0000}not registered{FFFFFF}.\nPlease enter a password below to register."name[playerid]);
        
ShowPlayerDialog(playerid1DIALOG_STYLE_INPUT"Register"string"Register""Quit");
    }
    if(
fexist(file))
    {
        new 
string2[128];
        
format(string2,sizeof(string2), "{FFFFFF}Welcome, this name {F3FF02}%s{FFFFFF} is {6EF83C}registered{FFFFFF}.\nEnter your password below to access your account."name[playerid]);
        
ShowPlayerDialog(playerid2DIALOG_STYLE_INPUT"Login"string2"Login""Quit");
    }
    return 
1;
}
public 
OnPlayerDisconnect(playeridreason)
{
    new 
name[MAX_PLAYER_NAME], file[256];
    
GetPlayerName(playeridnamesizeof(name));
    
format(filesizeof(file), SERVER_USER_FILEname);
    if(
gPlayerLogged[playerid] == 1)
    {
        
dini_IntSet(file"Score"PlayerInfo[playerid][pScore]);
        
dini_IntSet(file"Money"PlayerInfo[playerid][pCash]);
        
dini_IntSet(file"AdminLevel",PlayerInfo[playerid][pAdmin]);
    }
    
gPlayerLogged[playerid] = 0;
    return 
1;
}
public 
OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    if (
dialogid == 1)
    {
        new 
name[MAX_PLAYER_NAME], file[256], string[128];
        
GetPlayerName(playeridnamesizeof(name));
        
format(filesizeof(file), SERVER_USER_FILEname);
        if(!
response) return Kick(playerid);
        if(
strlen(inputtext) < 4) return
        
ShowPlayerDialog(playerid1DIALOG_STYLE_INPUT"Register""The minimum lenght of password must be 4 letters.\nPlease enter a password below to register." "Register""Quit");
        
dini_Create(file);
        
dini_IntSet(file"Password"udb_hash(inputtext));
        
dini_IntSet(file"AdminLevel",PlayerInfo[playerid][pAdmin] = 0);
        
dini_IntSet(file"Money",PlayerInfo[playerid][pCash] = 500);
        
dini_IntSet(file"Score",PlayerInfo[playerid][pScore] = 0);
        
format(string128"You have successfully registered | Nickname : %s | Password '%s' You have been automatically logged in."nameinputtext);
        
SendClientMessage(playeridCOLOR_YELLOWstring);
        
gPlayerLogged[playerid] = 1;
    }
    if (
dialogid == 2)
    {
        new 
name[MAX_PLAYER_NAME], file[256], str[128];
        
GetPlayerName(playeridnamesizeof(name));
        
format(filesizeof(file), SERVER_USER_FILEname);
        if(!
response) return Kick(playerid);
        if (!
strlen(inputtext)) return ShowPlayerDialog(playerid2DIALOG_STYLE_INPUT"Login""You must enter your password in order to play.\nPlease enter your password below to access your account.""Login""Quit");
        new 
tmp;
        
tmp dini_Int(file"Password");
        if(
udb_hash(inputtext) != tmp) {
            
LoginAttempts[playerid] ++;
            
format(str,sizeof(str), "{FF0000}Wrong Password{FFFFFF}!\nPlease enter your password below to access account.\nLogin attempts : %i/3."LoginAttempts[playerid]);
            
ShowPlayerDialog(playerid2DIALOG_STYLE_INPUT"Login"str"Login""Leave");
            if(
LoginAttempts[playerid] == 3// ignore
            
{
               
SendClientMessage(playeridCOLOR_BRIGHTRED"You have been automatically kicked from the server. Reason : Too many failed login attempts.");
               
SetTimerEx("Attemptskick"200false"i"playerid);
            }
        }
        else
        {
            
gPlayerLogged[playerid] = 1;
            
PlayerInfo[playerid][pAdmin] = dini_Int(file"AdminLevel");
            
SetPlayerScore(playeridPlayerInfo[playerid][pScore]);
            
GivePlayerMoney(playeriddini_Int(file"Money")-GetPlayerMoney(playerid));
            
SendClientMessage(playerid,COLOR_YELLOW"Welcome back! You have successfully logged in.");
        }
    }
    return 
1;
}
forward Attemptskick(playerid); //ignore these line, i've added them myself and no problem here.
public Attemptskick(playerid)
{
   
Kick(playerid);
   return 
1;

+rep for who helps me out. Thanks in advance !
NOTE: I guess score has same problem aswell.
Reply
#2

Omg lol,dude you are saving PlayerInfo[playerid][pCash]? How server will know that PlayerInfo[playerid][pCash] is the player's money?
This:
Код:
dini_IntSet(file,"Money",GetPlayerMoney(playerid));
dini_IntSet(file,"Score",GetPlayerScore(playerid));
Lol
Reply
#3

I tried this before , it's fully bugged.
(edit) Also read carefully this code :
PHP код:
SetPlayerScore(playerid,*PlayerInfo[playerid][pScore]); 
GivePlayerMoney(playerid,*dini_Int(file,*"Money")-GetPlayerMoney(playerid)); 
Reply
#4

Hey, try this:

PHP код:
public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    if (
dialogid == 1)
    {
        new 
name[MAX_PLAYER_NAME], file[256], string[128];
        
GetPlayerName(playeridnamesizeof(name));
        
format(filesizeof(file), SERVER_USER_FILEname);
        if(!
response) return Kick(playerid);
        if(
strlen(inputtext) < 4) return
        
ShowPlayerDialog(playerid1DIALOG_STYLE_INPUT"Register""The minimum lenght of password must be 4 letters.\nPlease enter a password below to register." "Register""Quit");
        
dini_Create(file);
        
dini_IntSet(file"Password"udb_hash(inputtext));
        
dini_IntSet(file"AdminLevel",0);
        
dini_IntSet(file"Money",0);
        
dini_IntSet(file"Score",0);
        
PlayerInfo[playerid][pAdmin] = 0;
        
PlayerInfo[playerid][pCash] = 500;
        
PlayerInfo[playerid][pScore] = 0;
        
format(string128"You have successfully registered | Nickname : %s | Password '%s' You have been automatically logged in."nameinputtext);
        
SendClientMessage(playeridCOLOR_YELLOWstring);
        
gPlayerLogged[playerid] = 1;
    }
    if (
dialogid == 2)
    {
        new 
name[MAX_PLAYER_NAME], file[256], str[128];
        
GetPlayerName(playeridnamesizeof(name));
        
format(filesizeof(file), SERVER_USER_FILEname);
        if(!
response) return Kick(playerid);
        if (!
strlen(inputtext)) return ShowPlayerDialog(playerid2DIALOG_STYLE_INPUT"Login""You must enter your password in order to play.\nPlease enter your password below to access your account.""Login""Quit");
        new 
tmp;
        
tmp dini_Int(file"Password");
        if(
udb_hash(inputtext) != tmp) {
            
LoginAttempts[playerid] ++;
            
format(str,sizeof(str), "{FF0000}Wrong Password{FFFFFF}!\nPlease enter your password below to access account.\nLogin attempts : %i/3."LoginAttempts[playerid]);
            
ShowPlayerDialog(playerid2DIALOG_STYLE_INPUT"Login"str"Login""Leave");
            if(
LoginAttempts[playerid] == 3// ignore
            
{
               
SendClientMessage(playeridCOLOR_BRIGHTRED"You have been automatically kicked from the server. Reason : Too many failed login attempts.");
               
SetTimerEx("Attemptskick"200false"i"playerid);
            }
        }
        else
        {
            
gPlayerLogged[playerid] = 1;
            
PlayerInfo[playerid][pAdmin] = dini_Int(file"AdminLevel");
            
PlayerInfo[playerid][pCash] = dini_Int(file"Money");
            
PlayerInfo[playerid][pScore] = dini_Int(file"Score");
            
SetPlayerScore(playeridPlayerInfo[playerid][pScore]);
            
ResetPlayerMoney(playerid);
            
GivePlayerMoney(playeridPlayerInfo[playerid][pCash]);
            
SendClientMessage(playerid,COLOR_YELLOW"Welcome back! You have successfully logged in.");
        }
    }
    return 
1;

Reply
#5

Quote:
Originally Posted by Macronix
Посмотреть сообщение
Hey, try this:

PHP код:
public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    if (
dialogid == 1)
    {
        new 
name[MAX_PLAYER_NAME], file[256], string[128];
        
GetPlayerName(playeridnamesizeof(name));
        
format(filesizeof(file), SERVER_USER_FILEname);
        if(!
response) return Kick(playerid);
        if(
strlen(inputtext) < 4) return
        
ShowPlayerDialog(playerid1DIALOG_STYLE_INPUT"Register""The minimum lenght of password must be 4 letters.\nPlease enter a password below to register." "Register""Quit");
        
dini_Create(file);
        
dini_IntSet(file"Password"udb_hash(inputtext));
        
dini_IntSet(file"AdminLevel",0);
        
dini_IntSet(file"Money",0);
        
dini_IntSet(file"Score",0);
        
PlayerInfo[playerid][pAdmin] = 0;
        
PlayerInfo[playerid][pCash] = 500;
        
PlayerInfo[playerid][pScore] = 0;
        
format(string128"You have successfully registered | Nickname : %s | Password '%s' You have been automatically logged in."nameinputtext);
        
SendClientMessage(playeridCOLOR_YELLOWstring);
        
gPlayerLogged[playerid] = 1;
    }
    if (
dialogid == 2)
    {
        new 
name[MAX_PLAYER_NAME], file[256], str[128];
        
GetPlayerName(playeridnamesizeof(name));
        
format(filesizeof(file), SERVER_USER_FILEname);
        if(!
response) return Kick(playerid);
        if (!
strlen(inputtext)) return ShowPlayerDialog(playerid2DIALOG_STYLE_INPUT"Login""You must enter your password in order to play.\nPlease enter your password below to access your account.""Login""Quit");
        new 
tmp;
        
tmp dini_Int(file"Password");
        if(
udb_hash(inputtext) != tmp) {
            
LoginAttempts[playerid] ++;
            
format(str,sizeof(str), "{FF0000}Wrong Password{FFFFFF}!\nPlease enter your password below to access account.\nLogin attempts : %i/3."LoginAttempts[playerid]);
            
ShowPlayerDialog(playerid2DIALOG_STYLE_INPUT"Login"str"Login""Leave");
            if(
LoginAttempts[playerid] == 3// ignore
            
{
               
SendClientMessage(playeridCOLOR_BRIGHTRED"You have been automatically kicked from the server. Reason : Too many failed login attempts.");
               
SetTimerEx("Attemptskick"200false"i"playerid);
            }
        }
        else
        {
            
gPlayerLogged[playerid] = 1;
            
PlayerInfo[playerid][pAdmin] = dini_Int(file"AdminLevel");
            
PlayerInfo[playerid][pCash] = dini_Int(file"Money");
            
PlayerInfo[playerid][pScore] = dini_Int(file"Score");
            
SetPlayerScore(playeridPlayerInfo[playerid][pScore]);
            
ResetPlayerMoney(playerid);
            
GivePlayerMoney(playeridPlayerInfo[playerid][pCash]);
            
SendClientMessage(playerid,COLOR_YELLOW"Welcome back! You have successfully logged in.");
        }
    }
    return 
1;

Thank you alot ! +Rep'ed.
But i'm not getting the $500 bonus , i need to relog to get it. Is there any other way than GivePlayerMoney(playerid, 500); ?
Reply
#6

No problem
Mmh, you could make your own functions like for example:

PHP код:
stock GivePlayerCash(playeridmoney)
{
    
GivePlayerMoney(playeridmoney);
    
PlayerInfo[playerid][pCash] += money;
    return 
1;
}

stock SetPlayerCash(playeridmoney)
{
    
ResetPlayerMoney(playerid);
    
GivePlayerCash(playeridmoney);
    
PlayerInfo[playerid][pCash] = money;
    return 
1;

Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)