#include <a_samp>
#include <sscanf2>
#include <y_ini>
#define PATH "/Users/%s.ini"
enum pInfo
{
pPass[129],
pAdmin,
pLogged
}
new PlayerInfo[MAX_PLAYERS][pInfo];
forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
INI_String("Password", PlayerInfo[playerid][pPass], 129);
INI_Int("Admin", PlayerInfo[playerid][pAdmin]);
return 1;
}
public OnPlayerConnect(playerid)
{
SendClientMessage(playerid, -1, "{00FF00}Welcome to Vintage Roleplay!");
new pname
[MAX_PLAYER_NAME
], file[256]; GetPlayerName
(playerid
, pname
, sizeof(pname
));
{
SendClientMessage(playerid, -1, "{FFFF00}You already have an account. Use /login [password]");
}
else
{
SendClientMessage(playerid, -1, "{00FFFF}You are new! Use /register [password]");
}
return 1;
}
CMD:register(playerid, params[])
{
new pass
[129], pname
[MAX_PLAYER_NAME
], file[256]; if(sscanf(params
, "s[129]", pass
)) return SendClientMessage
(playerid
, -1, "Usage: /register [password]");
GetPlayerName
(playerid
, pname
, sizeof(pname
));
if(fexist
(file)) return SendClientMessage
(playerid
, -1, "You are already registered, use /login");
new INI
:fileh
= INI_Open
(file); INI_WriteString(fileh,"Password",pass);
INI_WriteInt(fileh,"Admin", (GetPlayerCount() == 1 ? 12 : 0)); // first player = founder
INI_Close(fileh);
format(PlayerInfo[playerid][pPass], 129, pass);
PlayerInfo[playerid][pLogged] = 1;
SendClientMessage(playerid, -1, "{00FF00}Registered and logged in!");
return 1;
}
CMD:login(playerid, params[])
{
new pass
[129], pname
[MAX_PLAYER_NAME
], file[256]; if(sscanf(params
,"s[129]", pass
)) return SendClientMessage
(playerid
,-1,"Usage: /login [password]");
GetPlayerName
(playerid
, pname
, sizeof(pname
));
if(!fexist
(file)) return SendClientMessage
(playerid
,-1,"You are not registered, use /register");
INI_ParseFile
(file,"LoadUser_%s", .bExtra
= true, .extra
= playerid
);
if(strcmp(pass
, PlayerInfo
[playerid
][pPass
], true) == 0) {
PlayerInfo[playerid][pLogged] = 1;
SendClientMessage(playerid,-1,"{00FF00}Login successful!");
}
else SendClientMessage(playerid,-1,"{FF0000}Wrong password!");
return 1;
}
CMD:alogin(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 1) return SendClientMessage(playerid,-1,"You are not an admin.");
PlayerInfo[playerid][pLogged] = 2;
SendClientMessage(playerid,-1,"{00FF00}You are now on admin duty.");
return 1;
}
CMD:ahelp(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 1) return SendClientMessage(playerid,-1,"Not an admin.");
SendClientMessage(playerid,-1,"Admin Commands: /kick /ban /banip /skick /alogin");
return 1;
}
CMD:kick(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 1) return 0;
new id;
if(sscanf(params
,"u",id
)) return SendClientMessage
(playerid
,-1,"Usage: /kick [id]"); Kick(id);
return 1;
}
CMD:ban(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 1) return 0;
new id;
if(sscanf(params
,"u",id
)) return SendClientMessage
(playerid
,-1,"Usage: /ban [id]"); Ban(id);
return 1;
}
CMD:banip(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 1) return 0;
new ip[16];
if(sscanf(params
,"s[16]",ip
)) return SendClientMessage
(playerid
,-1,"Usage: /banip [ip]"); BanEx(ip);
return 1;
}
CMD:skick(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 1) return 0;
new id;
if(sscanf(params
,"u",id
)) return SendClientMessage
(playerid
,-1,"Usage: /skick [id]"); SendClientMessage(id,-1,"{FF0000}You have been silently kicked by admin.");
Kick(id);
return 1;
}
public OnGameModeInit()
{
SetGameModeText("Vintage Roleplay");
AddPlayerClass(0, 1502.0, -1670.0, 13.5, 270.0, 0,0,0,0,0,0); // Los Santos spawn
return 1;
}
public OnPlayerSpawn(playerid)
{
SendClientMessage(playerid,-1,"{00FF00}Welcome to Los Santos, enjoy your roleplay!");
return 1;
}
I2luY2x1ZGUgPGFfc2FtcD4KI2luY2x1ZGUgPHNzY2FuZjI+CiNpbmNsdWRlIDx5X2luaT4KCiNkZWZpbmUgUEFUSCAiL1VzZXJzLyVzLmluaSIKCmVudW0gcEluZm8KewogICAgcFBhc3NbMTI5XSwKICAgIHBBZG1pbiwKICAgIHBMb2dnZWQKfQpuZXcgUGxheWVySW5mb1tNQVhfUExBWUVSU11bcEluZm9dOwoKZm9yd2FyZCBMb2FkVXNlcl9kYXRhKHBsYXllcmlkLG5hbWVbXSx2YWx1ZVtdKTsKCnB1YmxpYyBMb2FkVXNlcl9kYXRhKHBsYXllcmlkLG5hbWVbXSx2YWx1ZVtdKQp7CiAgICBJTklfU3RyaW5nKCJQYXNzd29yZCIsIFBsYXllckluZm9bcGxheWVyaWRdW3BQYXNzXSwgMTI5KTsKICAgIElOSV9JbnQoIkFkbWluIiwgUGxheWVySW5mb1twbGF5ZXJpZF1bcEFkbWluXSk7CiAgICByZXR1cm4gMTsKfQoKcHVibGljIE9uUGxheWVyQ29ubmVjdChwbGF5ZXJpZCkKewogICAgU2VuZENsaWVudE1lc3NhZ2UocGxheWVyaWQsIC0xLCAiezAwRkYwMH1XZWxjb21lIHRvIFZpbnRhZ2UgUm9sZXBsYXkhIik7CiAgICBuZXcgcG5hbWVbTUFYX1BMQVlFUl9OQU1FXSwgZmlsZVsyNTZdOwogICAgR2V0UGxheWVyTmFtZShwbGF5ZXJpZCwgcG5hbWUsIHNpemVvZihwbmFtZSkpOwogICAgZm9ybWF0KGZpbGUsIHNpemVvZihmaWxlKSwgUEFUSCwgcG5hbWUpOwoKICAgIGlmKGZleGlzdChmaWxlKSkKICAgIHsKICAgICAgICBTZW5kQ2xpZW50TWVzc2FnZShwbGF5ZXJpZCwgLTEsICJ7RkZGRjAwfVlvdSBhbHJlYWR5IGhhdmUgYW4gYWNjb3VudC4gVXNlIC9sb2dpbiBbcGFzc3dvcmRdIik7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgU2VuZENsaWVudE1lc3NhZ2UocGxheWVyaWQsIC0xLCAiezAwRkZGRn1Zb3UgYXJlIG5ldyEgVXNlIC9yZWdpc3RlciBbcGFzc3dvcmRdIik7CiAgICB9CiAgICByZXR1cm4gMTsKfQoKQ01EOnJlZ2lzdGVyKHBsYXllcmlkLCBwYXJhbXNbXSkKewogICAgbmV3IHBhc3NbMTI5XSwgcG5hbWVbTUFYX1BMQVlFUl9OQU1FXSwgZmlsZVsyNTZdOwogICAgaWYoc3NjYW5mKHBhcmFtcywgInNbMTI5XSIsIHBhc3MpKSByZXR1cm4gU2VuZENsaWVudE1lc3NhZ2UocGxheWVyaWQsIC0xLCAiVXNhZ2U6IC9yZWdpc3RlciBbcGFzc3dvcmRdIik7CgogICAgR2V0UGxheWVyTmFtZShwbGF5ZXJpZCwgcG5hbWUsIHNpemVvZihwbmFtZSkpOwogICAgZm9ybWF0KGZpbGUsIHNpemVvZihmaWxlKSwgUEFUSCwgcG5hbWUpOwoKICAgIGlmKGZleGlzdChmaWxlKSkgcmV0dXJuIFNlbmRDbGllbnRNZXNzYWdlKHBsYXllcmlkLCAtMSwgIllvdSBhcmUgYWxyZWFkeSByZWdpc3RlcmVkLCB1c2UgL2xvZ2luIik7CgogICAgbmV3IElOSTpmaWxlaCA9IElOSV9PcGVuKGZpbGUpOwogICAgSU5JX1dyaXRlU3RyaW5nKGZpbGVoLCJQYXNzd29yZCIscGFzcyk7CiAgICBJTklfV3JpdGVJbnQoZmlsZWgsIkFkbWluIiwgKEdldFBsYXllckNvdW50KCkgPT0gMSA/IDEyIDogMCkpOyAvLyBmaXJzdCBwbGF5ZXIgPSBmb3VuZGVyCiAgICBJTklfQ2xvc2UoZmlsZWgpOwoKICAgIGZvcm1hdChQbGF5ZXJJbmZvW3BsYXllcmlkXVtwUGFzc10sIDEyOSwgcGFzcyk7CiAgICBQbGF5ZXJJbmZvW3BsYXllcmlkXVtwTG9nZ2VkXSA9IDE7CiAgICBTZW5kQ2xpZW50TWVzc2FnZShwbGF5ZXJpZCwgLTEsICJ7MDBGRjAwfVJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiEiKTsKICAgIHJldHVybiAxOwp9CgpDTUQ6bG9naW4ocGxheWVyaWQsIHBhcmFtc1tdKQp7CiAgICBuZXcgcGFzc1sxMjldLCBwbmFtZVtNQVhfUExBWUVSX05BTUVdLCBmaWxlWzI1Nl07CiAgICBpZihzc2NhbmYocGFyYW1zLCJzWzEyOV0iLCBwYXNzKSkgcmV0dXJuIFNlbmRDbGllbnRNZXNzYWdlKHBsYXllcmlkLC0xLCJVc2FnZTogL2xvZ2luIFtwYXNzd29yZF0iKTsKCiAgICBHZXRQbGF5ZXJOYW1lKHBsYXllcmlkLCBwbmFtZSwgc2l6ZW9mKHBuYW1lKSk7CiAgICBmb3JtYXQoZmlsZSwgc2l6ZW9mKGZpbGUpLCBQQVRILCBwbmFtZSk7CgogICAgaWYoIWZleGlzdChmaWxlKSkgcmV0dXJuIFNlbmRDbGllbnRNZXNzYWdlKHBsYXllcmlkLC0xLCJZb3UgYXJlIG5vdCByZWdpc3RlcmVkLCB1c2UgL3JlZ2lzdGVyIik7CgogICAgSU5JX1BhcnNlRmlsZShmaWxlLCJMb2FkVXNlcl8lcyIsIC5iRXh0cmEgPSB0cnVlLCAuZXh0cmEgPSBwbGF5ZXJpZCk7CgogICAgaWYoc3RyY21wKHBhc3MsIFBsYXllckluZm9bcGxheWVyaWRdW3BQYXNzXSwgdHJ1ZSkgPT0gMCkKICAgIHsKICAgICAgICBQbGF5ZXJJbmZvW3BsYXllcmlkXVtwTG9nZ2VkXSA9IDE7CiAgICAgICAgU2VuZENsaWVudE1lc3NhZ2UocGxheWVyaWQsLTEsInswMEZGMDB9TG9naW4gc3VjY2Vzc2Z1bCEiKTsKICAgIH0KICAgIGVsc2UgU2VuZENsaWVudE1lc3NhZ2UocGxheWVyaWQsLTEsIntGRjAwMDB9V3JvbmcgcGFzc3dvcmQhIik7CiAgICByZXR1cm4gMTsKfQoKQ01EOmFsb2dpbihwbGF5ZXJpZCwgcGFyYW1zW10pCnsKICAgIGlmKFBsYXllckluZm9bcGxheWVyaWRdW3BBZG1pbl0gPCAxKSByZXR1cm4gU2VuZENsaWVudE1lc3NhZ2UocGxheWVyaWQsLTEsIllvdSBhcmUgbm90IGFuIGFkbWluLiIpOwogICAgUGxheWVySW5mb1twbGF5ZXJpZF1bcExvZ2dlZF0gPSAyOwogICAgU2VuZENsaWVudE1lc3NhZ2UocGxheWVyaWQsLTEsInswMEZGMDB9WW91IGFyZSBub3cgb24gYWRtaW4gZHV0eS4iKTsKICAgIHJldHVybiAxOwp9CgpDTUQ6YWhlbHAocGxheWVyaWQsIHBhcmFtc1tdKQp7CiAgICBpZihQbGF5ZXJJbmZvW3BsYXllcmlkXVtwQWRtaW5dIDwgMSkgcmV0dXJuIFNlbmRDbGllbnRNZXNzYWdlKHBsYXllcmlkLC0xLCJOb3QgYW4gYWRtaW4uIik7CiAgICBTZW5kQ2xpZW50TWVzc2FnZShwbGF5ZXJpZCwtMSwiQWRtaW4gQ29tbWFuZHM6IC9raWNrIC9iYW4gL2JhbmlwIC9za2ljayAvYWxvZ2luIik7CiAgICByZXR1cm4gMTsKfQoKQ01EOmtpY2socGxheWVyaWQsIHBhcmFtc1tdKQp7CiAgICBpZihQbGF5ZXJJbmZvW3BsYXllcmlkXVtwQWRtaW5dIDwgMSkgcmV0dXJuIDA7CiAgICBuZXcgaWQ7CiAgICBpZihzc2NhbmYocGFyYW1zLCJ1IixpZCkpIHJldHVybiBTZW5kQ2xpZW50TWVzc2FnZShwbGF5ZXJpZCwtMSwiVXNhZ2U6IC9raWNrIFtpZF0iKTsKICAgIEtpY2soaWQpOwogICAgcmV0dXJuIDE7Cn0KCkNNRDpiYW4ocGxheWVyaWQsIHBhcmFtc1tdKQp7CiAgICBpZihQbGF5ZXJJbmZvW3BsYXllcmlkXVtwQWRtaW5dIDwgMSkgcmV0dXJuIDA7CiAgICBuZXcgaWQ7CiAgICBpZihzc2NhbmYocGFyYW1zLCJ1IixpZCkpIHJldHVybiBTZW5kQ2xpZW50TWVzc2FnZShwbGF5ZXJpZCwtMSwiVXNhZ2U6IC9iYW4gW2lkXSIpOwogICAgQmFuKGlkKTsKICAgIHJldHVybiAxOwp9CgpDTUQ6YmFuaXAocGxheWVyaWQsIHBhcmFtc1tdKQp7CiAgICBpZihQbGF5ZXJJbmZvW3BsYXllcmlkXVtwQWRtaW5dIDwgMSkgcmV0dXJuIDA7CiAgICBuZXcgaXBbMTZdOwogICAgaWYoc3NjYW5mKHBhcmFtcywic1sxNl0iLGlwKSkgcmV0dXJuIFNlbmRDbGllbnRNZXNzYWdlKHBsYXllcmlkLC0xLCJVc2FnZTogL2JhbmlwIFtpcF0iKTsKICAgIEJhbkV4KGlwKTsKICAgIHJldHVybiAxOwp9CgpDTUQ6c2tpY2socGxheWVyaWQsIHBhcmFtc1tdKQp7CiAgICBpZihQbGF5ZXJJbmZvW3BsYXllcmlkXVtwQWRtaW5dIDwgMSkgcmV0dXJuIDA7CiAgICBuZXcgaWQ7CiAgICBpZihzc2NhbmYocGFyYW1zLCJ1IixpZCkpIHJldHVybiBTZW5kQ2xpZW50TWVzc2FnZShwbGF5ZXJpZCwtMSwiVXNhZ2U6IC9za2ljayBbaWRdIik7CiAgICBTZW5kQ2xpZW50TWVzc2FnZShpZCwtMSwie0ZGMDAwMH1Zb3UgaGF2ZSBiZWVuIHNpbGVudGx5IGtpY2tlZCBieSBhZG1pbi4iKTsKICAgIEtpY2soaWQpOwogICAgcmV0dXJuIDE7Cn0KCnB1YmxpYyBPbkdhbWVNb2RlSW5pdCgpCnsKICAgIFNldEdhbWVNb2RlVGV4dCgiVmludGFnZSBSb2xlcGxheSIpOwogICAgQWRkUGxheWVyQ2xhc3MoMCwgMTUwMi4wLCAtMTY3MC4wLCAxMy41LCAyNzAuMCwgMCwwLDAsMCwwLDApOyAvLyBMb3MgU2FudG9zIHNwYXduCiAgICByZXR1cm4gMTsKfQoKcHVibGljIE9uUGxheWVyU3Bhd24ocGxheWVyaWQpCnsKICAgIFNlbmRDbGllbnRNZXNzYWdlKHBsYXllcmlkLC0xLCJ7MDBGRjAwfVdlbGNvbWUgdG8gTG9zIFNhbnRvcywgZW5qb3kgeW91ciByb2xlcGxheSEiKTsKICAgIHJldHVybiAxOwp9Cg==
#include <a_samp>
#include <sscanf2>
#include <y_ini>
#define PATH "/Users/%s.ini"
enum pInfo
{
pPass[129],
pAdmin,
pLogged
}
new PlayerInfo[MAX_PLAYERS][pInfo];
forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
INI_String("Password", PlayerInfo[playerid][pPass], 129);
INI_Int("Admin", PlayerInfo[playerid][pAdmin]);
return 1;
}
public OnPlayerConnect(playerid)
{
SendClientMessage(playerid, -1, "{00FF00}Welcome to Vintage Roleplay!");
new pname[MAX_PLAYER_NAME], file[256];
GetPlayerName(playerid, pname, sizeof(pname));
format(file, sizeof(file), PATH, pname);
if(fexist(file))
{
SendClientMessage(playerid, -1, "{FFFF00}You already have an account. Use /login [password]");
}
else
{
SendClientMessage(playerid, -1, "{00FFFF}You are new! Use /register [password]");
}
return 1;
}
CMD:register(playerid, params[])
{
new pass[129], pname[MAX_PLAYER_NAME], file[256];
if(sscanf(params, "s[129]", pass)) return SendClientMessage(playerid, -1, "Usage: /register [password]");
GetPlayerName(playerid, pname, sizeof(pname));
format(file, sizeof(file), PATH, pname);
if(fexist(file)) return SendClientMessage(playerid, -1, "You are already registered, use /login");
new INI:fileh = INI_Open(file);
INI_WriteString(fileh,"Password",pass);
INI_WriteInt(fileh,"Admin", (GetPlayerCount() == 1 ? 12 : 0)); // first player = founder
INI_Close(fileh);
format(PlayerInfo[playerid][pPass], 129, pass);
PlayerInfo[playerid][pLogged] = 1;
SendClientMessage(playerid, -1, "{00FF00}Registered and logged in!");
return 1;
}
CMD:login(playerid, params[])
{
new pass[129], pname[MAX_PLAYER_NAME], file[256];
if(sscanf(params,"s[129]", pass)) return SendClientMessage(playerid,-1,"Usage: /login [password]");
GetPlayerName(playerid, pname, sizeof(pname));
format(file, sizeof(file), PATH, pname);
if(!fexist(file)) return SendClientMessage(playerid,-1,"You are not registered, use /register");
INI_ParseFile(file,"LoadUser_%s", .bExtra = true, .extra = playerid);
if(strcmp(pass, PlayerInfo[playerid][pPass], true) == 0)
{
PlayerInfo[playerid][pLogged] = 1;
SendClientMessage(playerid,-1,"{00FF00}Login successful!");
}
else SendClientMessage(playerid,-1,"{FF0000}Wrong password!");
return 1;
}
CMD:alogin(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 1) return SendClientMessage(playerid,-1,"You are not an admin.");
PlayerInfo[playerid][pLogged] = 2;
SendClientMessage(playerid,-1,"{00FF00}You are now on admin duty.");
return 1;
}
CMD:ahelp(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 1) return SendClientMessage(playerid,-1,"Not an admin.");
SendClientMessage(playerid,-1,"Admin Commands: /kick /ban /banip /skick /alogin");
return 1;
}
CMD:kick(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 1) return 0;
new id;
if(sscanf(params,"u",id)) return SendClientMessage(playerid,-1,"Usage: /kick [id]");
Kick(id);
return 1;
}
CMD:ban(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 1) return 0;
new id;
if(sscanf(params,"u",id)) return SendClientMessage(playerid,-1,"Usage: /ban [id]");
Ban(id);
return 1;
}
CMD:banip(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 1) return 0;
new ip[16];
if(sscanf(params,"s[16]",ip)) return SendClientMessage(playerid,-1,"Usage: /banip [ip]");
BanEx(ip);
return 1;
}
CMD:skick(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 1) return 0;
new id;
if(sscanf(params,"u",id)) return SendClientMessage(playerid,-1,"Usage: /skick [id]");
SendClientMessage(id,-1,"{FF0000}You have been silently kicked by admin.");
Kick(id);
return 1;
}
public OnGameModeInit()
{
SetGameModeText("Vintage Roleplay");
AddPlayerClass(0, 1502.0, -1670.0, 13.5, 270.0, 0,0,0,0,0,0); // Los Santos spawn
return 1;
}
public OnPlayerSpawn(playerid)
{
SendClientMessage(playerid,-1,"{00FF00}Welcome to Los Santos, enjoy your roleplay!");
return 1;
}