17.06.2017, 12:58 
	(
 Last edited by AfiqIqbal; 18/06/2017 at 07:27 PM.
)
	
	
		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 :
I put this on each command (simplified) : 
Give map license command : 
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?
	
	
	
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 i : Player)
    {
        new INI:ini = INI_Open(UserMappingLicensePath(i));
        INI_WriteInt(ini,"MapLicense", MappingLicense[i][maplicense]);
        INI_Close(ini);
    }
    return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
    new INI:ini = INI_Open(UserMappingLicensePath(playerid));
    INI_WriteInt(ini,"MapLicense", MappingLicense[playerid][maplicense]);
    INI_Close(ini);
    return 1;
} 
PHP Code:
if(MappingLicense[playerid][maplicense] == 1)
{
    //object thing
}
else
{
     //sendclientmessage thingy
} 
PHP Code:
CMD:givemaplicense(playerid, params[])
{
    if(IsPlayerAdmin(playerid))
    {
        new targetid, license, name[MAX_PLAYER_NAME], string[128 + MAX_PLAYER_NAME];
        if(sscanf(params, "ud", targetid, license))
        {
            return SendClientMessage(playerid, 0xFF0000FF, "[Error:] /givemaplicense <id> <0 - 1>");
        }
        if(license > 1 || license < 0)
        {
            return SendClientMessage(playerid, 0xFF0000FF, "[Error:] The valid number is only 0 and 1!");
        }
        if(license == MappingLicense[targetid][maplicense])
        {
            return SendClientMessage(playerid, 0xFF0000FF, "[Error:] That player already have a mapping license!");
        }
        if(license > MappingLicense[targetid][maplicense])
        {
            GetPlayerName(targetid, name, sizeof(name));
            format(string, sizeof(string), "[MAP] You have given %s a mapping license!", name);
            SendClientMessage(playerid, 0xFFFF00FF, string);
            if(targetid != playerid)
            {
                GetPlayerName(playerid, name, sizeof(name));
                format(string, sizeof(string), "[MAP] %s have given you a mapping license!", name);
                SendClientMessage(targetid, 0xFFFF00FF, string);
            }
            MappingLicense[targetid][maplicense] = license;
        }
        else
        {
            GetPlayerName(targetid, name, sizeof(name));
            format(string, sizeof(string), "[MAP] You have removed %s mapping license!", name);
            SendClientMessage(playerid, 0xFFFF00FF, string);
            if(targetid != playerid)
            {
                GetPlayerName(playerid, name, sizeof(name));
                format(string, sizeof(string), "[MAP] %s have removed your mapping license!", name);
                SendClientMessage(targetid, 0xFFFF00FF, string);
            }
            MappingLicense[targetid][maplicense] = license;
        }
        new INI:ini = INI_Open(UserMappingLicensePath(playerid));
         INI_WriteInt(ini,"MapLicense", license);
          INI_Close(ini);
    }
    else
    {
         return SendClientMessage(playerid, 0xFF0000FF, "[Error:] You are not logged in to RCON!");
    }
    return 1;
} 
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?



	