Quantcast
Channel: SA-MP Forums
Viewing all articles
Browse latest Browse all 18226

Y_Ini Save Bug?

$
0
0
I made a map license for my script, if player want to create an object, they must have a map license from the admin.
But the problem is, the map license sometimes gone when player /q, crash/timeout or server restart (not often, it happen randomly).

Main script :
PHP Code:

#include <YSI\y_ini>

#define PATH "MapLicense/%s.ini"

enum PlayerInfo
{
    
maplicense
}
new 
MappingLicense[MAX_PLAYERS][PlayerInfo];

forward LoadMappingLicenseData(playerid,name[],value[]);
public 
LoadMappingLicenseData(playerid,name[],value[])
{
    
INI_Int("Mapping"MappingLicense[playerid][maplicense]);
     return 
1;
}

stock UserMappingLicensePath(playerid)
{
    new 
string[128],playername[MAX_PLAYER_NAME];
    
GetPlayerName(playerid,playername,sizeof(playername));
    
format(string,sizeof(string),PATH,playername);
    return 
string;
}

public 
OnPlayerConnect(playerid)
{
    if(
fexist(UserMappingLicensePath(playerid)))
    {
        
INI_ParseFile(UserMappingLicensePath(playerid), "LoadMappingLicenseData", .bExtra true, .extra playerid);
    }
    else
    {
        new 
INI:ini INI_Open(UserMappingLicensePath(playerid));
         
INI_WriteInt(ini,"MapLicense"0);
          
MappingLicense[playerid][maplicense] = 0;
           
INI_Close(ini);
    }
    return 
1;
}

public 
OnFilterScriptExit()
{
    foreach(new 
Player)
    {
        new 
INI:ini INI_Open(UserMappingLicensePath(i));
        
INI_WriteInt(ini,"MapLicense"MappingLicense[i][maplicense]);
        
INI_Close(ini);
    }
    return 
1;
}

public 
OnPlayerDisconnect(playeridreason)
{
    new 
INI:ini INI_Open(UserMappingLicensePath(playerid));
    
INI_WriteInt(ini,"MapLicense"MappingLicense[playerid][maplicense]);
    
INI_Close(ini);
    return 
1;


I put this on each command (simplified) :

PHP Code:

if(MappingLicense[playerid][maplicense] == 1)
{
    
//object thing
}
else
{
     
//sendclientmessage thingy


Give map license command :

PHP Code:

CMD:givemaplicense(playeridparams[])
{
    if(
IsPlayerAdmin(playerid))
    {
        new 
targetidlicensename[MAX_PLAYER_NAME], string[128 MAX_PLAYER_NAME];
        if(
sscanf(params"ud"targetidlicense))
        {
            return 
SendClientMessage(playerid0xFF0000FF"[Error:] /givemaplicense <id> <0 - 1>");
        }
        if(
license || license 0)
        {
            return 
SendClientMessage(playerid0xFF0000FF"[Error:] The valid number is only 0 and 1!");
        }
        if(
license == MappingLicense[targetid][maplicense])
        {
            return 
SendClientMessage(playerid0xFF0000FF"[Error:] That player already have a mapping license!");
        }
        if(
license MappingLicense[targetid][maplicense])
        {
            
GetPlayerName(targetidnamesizeof(name));
            
format(stringsizeof(string), "[MAP] You have given %s a mapping license!"name);
            
SendClientMessage(playerid0xFFFF00FFstring);
            if(
targetid != playerid)
            {
                
GetPlayerName(playeridnamesizeof(name));
                
format(stringsizeof(string), "[MAP] %s have given you a mapping license!"name);
                
SendClientMessage(targetid0xFFFF00FFstring);
            }
            
MappingLicense[targetid][maplicense] = license;
        }
        else
        {
            
GetPlayerName(targetidnamesizeof(name));
            
format(stringsizeof(string), "[MAP] You have removed %s mapping license!"name);
            
SendClientMessage(playerid0xFFFF00FFstring);
            if(
targetid != playerid)
            {
                
GetPlayerName(playeridnamesizeof(name));
                
format(stringsizeof(string), "[MAP] %s have removed your mapping license!"name);
                
SendClientMessage(targetid0xFFFF00FFstring);
            }
            
MappingLicense[targetid][maplicense] = license;
        }
        new 
INI:ini INI_Open(UserMappingLicensePath(playerid));
         
INI_WriteInt(ini,"MapLicense"license);
          
INI_Close(ini);
    }
    else
    {
         return 
SendClientMessage(playerid0xFF0000FF"[Error:] You are not logged in to RCON!");
    }
    return 
1;


What should I do? Is there anything wrong in the code?

EDIT : I think I found where is the problem, when a player (with a mapping license) connected to the server, and he didn't do any mapping cmd like /createobject, his mapping license will gone after next relog. Any clue how to fix this?

Viewing all articles
Browse latest Browse all 18226

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>