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?