#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <sqlx>
#pragma semicolon 1
new const TableName[] = "Regsys_table";
enum _:Text_properties{
Chat[128],
Menu[128]
};
new Handle:SQLtuple;
new const constText[][Text_properties] ={
{"^1Nem írtál semmit a névhez!", "Regisztálj/Jelentkezz be!"},
{"^1A beírt név túl rövid! (Minimum: %i)", "Regisztráció"},
{"^1Nem írtál semmit a jelszóhoz!", "Felhasználónév:\d %s"},
{"^1A beírt jelszó túl rövid, vagy túl hosszú! (Minimum:^3 %i^1 - Maximum:^3 %i^1)", "Bejelentkezés"},
{"^1A két jelszó nem egyezik meg!", "Jelszó:\d %s"},
{"^1Regisztráció folyamatban... kérlek várj!", "Jelszó újra:\d %s"},
{"^1Ez a felhasználónév már foglalt!", "Regisztrálok"},
{"^1Sikeres regisztráció, jelentkezz be!", "Bejelentkezek"},
{"^1Ez a felhasználónév már foglalt!", ""},
{"^1Nem sikerült bejelentkezni, rossz felhasználó vagy jelszó!", ""},
{"^1Sikeresen bejelentkeztél!", ""},
{"^1Sikeresen bannoltad a fiókot!", ""},
};
enum _:Reg_properties{
Username[64],
Password[64],
RePassword[64],
};
new g_sReg[33][Reg_properties];
enum _:Account_properties{
AccountId,
Ip[64],
SteamId[64],
LastlogDate[64],
Regdate[64],
Banned,
BannedReason[64],
LoggedIn,
};
new g_Account[33][Account_properties];
new bool:g_bMenu[33];
new Forward_Load;
new g_cChatPrefix, g_cMenuPrefix, g_cUsernameLength, g_cPasswordMinLength, g_cPasswordMaxLength;
public plugin_init()
{
register_plugin("Regrendszer", "0.1.0", "Unknown");
SQLtuple = SQL_MakeDbTuple("", "", "", "");
p_SQLCreateTable();
register_impulse(201, "p_checkloggedin");
register_clcmd("type_username", "p_typeusername");
register_clcmd("type_password", "p_typepassword");
register_clcmd("type_repassword", "p_typerepassword");
Forward_Load = CreateMultiForward("LoadData", ET_IGNORE, FP_CELL);
register_concmd("ban_account", "p_BanAcc", _, "<AccId> <tiltas/oldas(1, 0)> <tiltas oka>");
g_cChatPrefix = register_cvar("chat_prefix", "^4[Szerver]^3 »");
g_cMenuPrefix = register_cvar("menu_prefix", "\r[Szerver]\w »\d");
g_cUsernameLength = register_cvar("username_length", "4");
g_cPasswordMinLength = register_cvar("password_minlength", "4");
g_cPasswordMaxLength = register_cvar("password_maxlength", "12");
}
public plugin_natives()
{
register_native("reg_get_user_loggedin","p_reg_get_user_loggedin", 1);
register_native("reg_get_user_id","p_reg_get_user_id", 1);
}
public p_BanAcc(id)
{
if(g_Account[id][LoggedIn] && get_user_flags(id) & ADMIN_IMMUNITY)
{
new sAccId[16], sType[16], sReason[64];
new iAccId, iType;
read_argv(1, sAccId, charsmax(sAccId));
read_argv(2, sType, charsmax(sType));
read_argv(3, sReason, charsmax(sReason));
iAccId = str_to_num(sAccId);
iType = str_to_num(sType);
if(iAccId < 1 || iType < 0 || iType > 1)
{
console_print(id, "Rossz fiok ID formatum, vagy rossz tiltas formatum!");
console_print(id, "Fiok ID amit beirtal: %d | Amik lehetnek: Barmelyik szam amelyik nagyobb, mint 0", iAccId);
console_print(id, "Tiltas formatum amit beirtal: %d | Amik lehetnek: 1(tiltas), 0(feloldas).", iType);
return;
}
static sQuery[512];
new sData[2], iLen;
sData[0] = id;
sData[1] = get_user_userid(id);
iLen += formatex(sQuery[iLen], charsmax(sQuery), "UPDATE `%s` SET Banned = ^"%d^", ", TableName, iType);
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "BannedReason = ^"%s^" WHERE AccId = ^"%d^";", sReason, iAccId);
SQL_ThreadQuery(SQLtuple, "p_SQLUpdatethr", sQuery, sData, 2);
client_print_color(id, print_team_default, "%s %s", show_chatprefix(), constText[11][Chat]);
}
else console_print(id, "Nem leptel be, vagy nincs jogod ehhez!");
}
public p_reg_get_user_loggedin(id)
return g_Account[id][LoggedIn];
public p_reg_get_user_id(id)
return g_Account[id][AccountId];
public p_regmainmenu(id)
{
new sText[128], iMenu;
formatex(sText, charsmax(sText), "%s %s", show_menuprefix(), constText[0][Menu]);
iMenu = menu_create(sText, "p_regmainmenu_handler");
menu_additem(iMenu, constText[1][Menu], "0", 0);
menu_additem(iMenu, constText[3][Menu], "1", 0);
menu_display(id, iMenu, 0);
}
public p_regmainmenu_handler(id, iMenu, iItem)
{
if(iItem == MENU_EXIT){ menu_destroy(iMenu); return PLUGIN_HANDLED;}
new sData[9], sName[MAX_NAME_LENGTH], iAccess, iCallback, iKey;
menu_item_getinfo(iMenu, iItem, iAccess, sData, charsmax(sData), sName, charsmax(sName), iCallback);
iKey = str_to_num(sData);
switch(iKey)
{
case 0: {p_regmenu(id); g_bMenu[id] = true;}
case 1: {p_logmenu(id); g_bMenu[id] = false;}
}
return PLUGIN_HANDLED;
}
public p_checkloggedin(id)
{
if(g_Account[id][LoggedIn] == 0)
p_regmainmenu(id);
}
public p_regmenu(id)
{
new sText[128], iMenu;
formatex(sText, charsmax(sText), "%s %s", show_menuprefix(), constText[1][Menu]);
iMenu = menu_create(sText, "p_regmenu_handler");
formatex(sText, charsmax(sText), constText[2][Menu], g_sReg[id][Username]);
menu_additem(iMenu, sText, "0", 0);
formatex(sText, charsmax(sText), constText[4][Menu], g_sReg[id][Password]);
menu_additem(iMenu, sText, "1", 0);
formatex(sText, charsmax(sText), constText[5][Menu], g_sReg[id][RePassword]);
menu_additem(iMenu, sText, "2", 0);
formatex(sText, charsmax(sText), "%s", constText[6][Menu]);
menu_additem(iMenu, sText, "3", 0);
menu_display(id, iMenu, 0);
}
public p_regmenu_handler(id, iMenu, iItem)
{
if(iItem == MENU_EXIT){ menu_destroy(iMenu); return PLUGIN_HANDLED; }
new sData[9], sName[MAX_NAME_LENGTH], iAccess, iCallback, iKey;
menu_item_getinfo(iMenu, iItem, iAccess, sData, charsmax(sData), sName, charsmax(sName), iCallback);
iKey = str_to_num(sData);
switch(iKey)
{
case 0: client_cmd(id, "messagemode type_username");
case 1: client_cmd(id, "messagemode type_password");
case 2: client_cmd(id, "messagemode type_repassword");
case 3: p_checkpassword(id);
}
return PLUGIN_HANDLED;
}
public p_checkpassword(id)
{
if(!equal(g_sReg[id][Password], g_sReg[id][RePassword]))
{
client_print_color(id, print_team_default, "%s %s", show_chatprefix(), constText[4][Chat]);
g_sReg[id][Password] = "";
g_sReg[id][RePassword] = "";
p_regmenu(id);
return PLUGIN_HANDLED;
}
else
{
set_task(5.0, "p_SQLUsernameCheck", id);
client_print_color(id, print_team_default, "%s %s", show_chatprefix(), constText[5][Chat]);
}
return PLUGIN_HANDLED;
}
public p_logmenu(id)
{
new sText[128], iMenu;
formatex(sText, charsmax(sText), "%s %s", show_menuprefix(), constText[3][Menu]);
iMenu = menu_create(sText, "p_logmenu_handler");
formatex(sText, charsmax(sText), constText[2][Menu], g_sReg[id][Username]);
menu_additem(iMenu, sText, "0", 0);
formatex(sText, charsmax(sText), constText[4][Menu], g_sReg[id][Password]);
menu_additem(iMenu, sText, "1", 0);
formatex(sText, charsmax(sText), "%s", constText[7][Menu]);
menu_additem(iMenu, sText, "2", 0);
menu_display(id, iMenu, 0);
}
public p_logmenu_handler(id, iMenu, iItem)
{
if(iItem == MENU_EXIT){ menu_destroy(iMenu); return PLUGIN_HANDLED; }
new sData[9], sName[MAX_NAME_LENGTH], iAccess, iCallback, iKey;
menu_item_getinfo(iMenu, iItem, iAccess, sData, charsmax(sData), sName, charsmax(sName), iCallback);
iKey = str_to_num(sData);
switch(iKey)
{
case 0: client_cmd(id, "messagemode type_username");
case 1: client_cmd(id, "messagemode type_password");
case 2: p_checkSQL(id);
}
return PLUGIN_HANDLED;
}
public p_checkSQL(id)
{
p_SQLload(id);
}
public p_typeusername(id)
{
new sText[64], iLen;
read_args(sText, charsmax(sText));
remove_quotes(sText);
iLen = get_pcvar_num(g_cUsernameLength);
if(strlen(sText) == 0)
{
client_print_color(id, print_team_default, "%s %s", show_chatprefix(), constText[0][Chat]);
show_menubool(id);
return PLUGIN_HANDLED;
}
if(strlen(sText) < iLen)
{
client_print_color(id, print_team_default, "%s %s", show_chatprefix(), constText[1][Chat], iLen);
show_menubool(id);
}
else
{
copy(g_sReg[id][Username], charsmax(g_sReg[]), sText);
show_menubool(id);
}
return PLUGIN_HANDLED;
}
public p_typepassword(id)
{
new sText[64], iLen[2];
read_args(sText, charsmax(sText));
remove_quotes(sText);
iLen[0] = get_pcvar_num(g_cPasswordMinLength);
iLen[1] = get_pcvar_num(g_cPasswordMaxLength);
if(strlen(sText) == 0)
{
client_print_color(id, print_team_default, "%s %s", show_chatprefix(), constText[2][Chat]);
show_menubool(id);
return PLUGIN_HANDLED;
}
if(strlen(sText) < iLen[0] || strlen(sText) > iLen[1])
{
client_print_color(id, print_team_default, "%s %s", show_chatprefix(), constText[3][Chat], iLen[0], iLen[1]);
show_menubool(id);
return PLUGIN_HANDLED;
}
copy(g_sReg[id][Password], charsmax(g_sReg[]), sText);
show_menubool(id);
return PLUGIN_HANDLED;
}
public p_typerepassword(id)
{
new sText[64], iLen[2];
read_args(sText, charsmax(sText));
remove_quotes(sText);
iLen[0] = get_pcvar_num(g_cPasswordMinLength);
iLen[1] = get_pcvar_num(g_cPasswordMaxLength);
if(strlen(sText) == 0)
{
client_print_color(id, print_team_default, "%s %s", show_chatprefix(), constText[2][Chat]);
show_menubool(id);
return PLUGIN_HANDLED;
}
if(strlen(sText) < iLen[0] || strlen(sText) > iLen[1])
{
client_print_color(id, print_team_default, "%s %s", show_chatprefix(), constText[3][Chat], iLen[0], iLen[1]);
show_menubool(id);
return PLUGIN_HANDLED;
}
g_sReg[id][RePassword] = sText;
show_menubool(id);
return PLUGIN_HANDLED;
}
p_SQLCreateTable()
{
static sQuery[512];
new iLen;
iLen += formatex(sQuery[iLen], charsmax(sQuery), "CREATE TABLE IF NOT EXISTS `%s` ", TableName);
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "( ");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`AccId` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, ");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`Username` varchar(64) NOT NULL,");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`Password` varchar(64) NOT NULL,");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`Regdate` varchar(64) NOT NULL,");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`LastLogDate` varchar(64) NOT NULL,");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`UserIp` varchar(64) NOT NULL,");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`UserSteamid` varchar(64) NOT NULL,");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`Banned` INT(1) NOT NULL,");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`BannedReason` varchar(64) NOT NULL)");
SQL_ThreadQuery(SQLtuple, "p_SQLCreateTableThr", sQuery);
}
public p_SQLUsernameCheck(id)
{
static sQuery[512];
new sData[2];
sData[0] = id;
sData[1] = get_user_userid(id);
formatex(sQuery, charsmax(sQuery), "SELECT * FROM `%s` WHERE `Username`='%s';", TableName, g_sReg[id][Username]);
SQL_ThreadQuery(SQLtuple, "p_SQLUsernameCheckthr", sQuery, sData, 2);
}
public p_SQLUsernameCheckthr(iFailState, Handle:sQuery, sError[], iErrcode, sData[], iDataSize)
{
if(iFailState == TQUERY_CONNECT_FAILED)
set_fail_state("*DEBUG* [UsernameCheck] Nem sikerult csatlakozni az adatbazishoz.");
else if(iFailState == TQUERY_QUERY_FAILED)
set_fail_state("*DEBUG* [UsernameCheck] Lekerdezesi hiba");
if(iErrcode)
log_amx("*DEBUG* [UsernameCheck] - %s", sError);
new id = sData[0];
if(sData[1] != get_user_userid(id)) return;
new iRowsFound = SQL_NumRows(sQuery);
if(iRowsFound > 0)
{
client_print_color(id, print_team_default, "%s %s", show_chatprefix(), constText[6][Chat]);
show_menubool(id);
}
else p_SQLinsertTable(id);
}
public p_SQLinsertTable(id)
{
static sQuery[512];
new sHashedPassword[64], sData[2], iTime;
hash_string(g_sReg[id][Password], Hash_Sha256, sHashedPassword, charsmax(sHashedPassword));
iTime = get_systime();
format_time(g_Account[id][Regdate], charsmax(g_Account[]), "%Y.%m.%d - %H:%M:%S", iTime);
format_time(g_Account[id][LastlogDate], charsmax(g_Account[]), "%Y.%m.%d - %H:%M:%S", iTime);
get_user_ip(id, g_Account[id][Ip], charsmax(g_Account[]));
get_user_authid(id, g_Account[id][SteamId], charsmax(g_Account[]));
sData[0] = id;
sData[1] = get_user_userid(id);
formatex(sQuery, charsmax(sQuery), "INSERT INTO `%s` (Username,Password,Regdate,LastLogDate,UserIp,UserSteamid,Banned,BannedReason) VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%d', '%s') ", TableName, g_sReg[id][Username], sHashedPassword, g_Account[id][Regdate], g_Account[id][LastlogDate], g_Account[id][Ip], g_Account[id][SteamId], g_Account[id][Banned], g_Account[id][BannedReason]);
SQL_ThreadQuery(SQLtuple, "p_SQLinsertTablethr", sQuery, sData, 2);
}
public p_SQLinsertTablethr(iFailState, Handle:sQuery, sError[], iErrcode, sData[], iDataSize)
{
if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED)
{
log_amx("*DEBUG* [Insert] - %s", sError);
return;
}
new id = sData[0];
if(sData[1] != get_user_userid(id)) return;
client_print_color(id, print_team_default, "%s %s", show_chatprefix(), constText[7][Chat]);
}
public p_SQLload(id)
{
static sQuery[512];
new sHashedPassword[64], sData[2];
hash_string(g_sReg[id][Password], Hash_Sha256, sHashedPassword, charsmax(sHashedPassword));
sData[0] = id;
sData[1] = get_user_userid(id);
formatex(sQuery, charsmax(sQuery), "SELECT * FROM `%s` WHERE Username = ^"%s^" AND Password = ^"%s^";", TableName, g_sReg[id][Username], sHashedPassword);
SQL_ThreadQuery(SQLtuple, "p_SQLloadthr", sQuery, sData, 2);
}
public p_SQLloadthr(iFailState, Handle:sQuery, sError[], iErrcode, sData[], iDataSize)
{
if(iFailState == TQUERY_CONNECT_FAILED)
set_fail_state("*DEBUG* [UsernameCheck] Nem sikerult csatlakozni az adatbazishoz.");
else if(iFailState == TQUERY_QUERY_FAILED)
set_fail_state("*DEBUG* [UsernameCheck] Lekerdezesi hiba");
if(iErrcode)
log_amx("*DEBUG* [UsernameCheck] - %s", sError);
new id = sData[0];
if(get_user_userid(id) != sData[1]) return;
new iRowsFound = SQL_NumRows(sQuery);
if(iRowsFound > 0)
{
new iTaken = 0;
if(g_Account[id][AccountId] == SQL_ReadResult(sQuery, SQL_FieldNameToNum(sQuery, "AccId")))
{
for(new i = 1; i < 32; i++)
{
iTaken = 1;
g_Account[id][AccountId] = 0;
client_print_color(id, print_team_default, "%s %s", show_chatprefix(), constText[8][Chat]);
break;
}
}
if(iTaken == 1) return;
g_Account[id][AccountId] = SQL_ReadResult(sQuery, SQL_FieldNameToNum(sQuery, "AccId"));
g_Account[id][Banned] = SQL_ReadResult(sQuery, SQL_FieldNameToNum(sQuery, "Banned"));
SQL_ReadResult(sQuery, SQL_FieldNameToNum(sQuery, "BannedReason"), g_Account[id][BannedReason], charsmax(g_Account[]));
if(g_Account[id][Banned] == 1)
{
server_cmd("kick #%d ^"Ez a fiók ki lett tiltva!.^"", get_user_userid(id));
console_print(id, "******************************************************");
console_print(id, "Ez a fiok(ID:#%d) veglegesen ki lett tiltva, oka: %s", g_Account[id][AccountId], g_Account[id][BannedReason]);
console_print(id, "Ha ugy gondolod nem volt jogos, keressd fel az fb csoportot!");
console_print(id, "Facebook csoport: IDE A LINK");
console_print(id, "FB-re az id-d és a bannolás okát kérjük!");
console_print(id, "******************************************************");
iTaken = 0;
g_Account[id][AccountId] = 0;
g_Account[id][Ip] = "";
g_Account[id][SteamId] = "";
g_Account[id][LastlogDate] = "";
g_Account[id][Regdate] = 0;
g_Account[id][Banned] = 0;
g_Account[id][BannedReason] = "";
g_Account[id][LoggedIn] = 0;
g_sReg[id][Username] = "";
g_sReg[id][Password] = "";
g_sReg[id][RePassword] = "";
return;
}
new Forward_Testret;
ExecuteForward(Forward_Load, Forward_Testret, id);
g_Account[id][LoggedIn] = 1;
p_SQLUpdate(id);
client_print_color(id, print_team_default, "%s %s", show_chatprefix(), constText[10][Chat]);
}
else{client_print_color(id, print_team_default, "%s %s", show_chatprefix(), constText[9][Chat]); return;}
}
public p_SQLCreateTableThr(iFailState, Handle:sQuery, sError[], iErrcode, sData[])
{
if(iFailState == TQUERY_CONNECT_FAILED)
set_fail_state("*DEBUG* [CreateTable] Nem sikerult csatlakozni az adatbazishoz.");
else if(iFailState == TQUERY_QUERY_FAILED)
set_fail_state("*DEBUG* [CreateTable] Lekerdezesi hiba");
if(iErrcode)
log_amx("*DEBUG* [CreateTable] - %s", sError);
}
public p_SQLUpdate(id)
{
static sQuery[512];
new sData[2], iTime;
sData[0] = id;
sData[1] = get_user_userid(id);
iTime = get_systime();
format_time(g_Account[id][LastlogDate], charsmax(g_Account[]), "%Y.%m.%d - %H:%M:%S", iTime);
formatex(sQuery, charsmax(sQuery), "UPDATE `%s` SET LastLogDate = ^"%s^" WHERE AccId = ^"%d^";", TableName, g_Account[id][LastlogDate], g_Account[id][AccountId]);
SQL_ThreadQuery(SQLtuple, "p_SQLUpdatethr", sQuery, sData, 2);
}
public p_SQLUpdatethr(iFailState, Handle:sQuery, sError[], iErrcode, sData[], iDataSize)
{
if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED)
{
log_amx("*DEBUG* [Update] - %s", sError);return;
}
new id = sData[0];
if(sData[1] != get_user_userid(id)) return;
}
public client_authorized(id)
{
if(is_user_bot(id))
return PLUGIN_HANDLED;
g_sReg[id][Username] = "";
g_sReg[id][Password] = "";
g_sReg[id][RePassword] = "";
g_Account[id][AccountId] = 0;
g_Account[id][Ip] = "";
g_Account[id][SteamId] = "";
g_Account[id][LastlogDate] = "";
g_Account[id][Regdate] = 0;
g_Account[id][Banned] = 0;
g_Account[id][BannedReason] = "";
g_Account[id][LoggedIn] = 0;
return PLUGIN_HANDLED;
}
public client_disconnected(id)
{
if(is_user_bot(id))
return PLUGIN_HANDLED;
g_sReg[id][Username] = "";
g_sReg[id][Password] = "";
g_sReg[id][RePassword] = "";
g_Account[id][AccountId] = 0;
g_Account[id][Ip] = "";
g_Account[id][SteamId] = "";
g_Account[id][LastlogDate] = "";
g_Account[id][Regdate] = 0;
g_Account[id][Banned] = 0;
g_Account[id][BannedReason] = "";
g_Account[id][LoggedIn] = 0;
return PLUGIN_HANDLED;
}
show_menubool(id)
{
if(g_bMenu[id]) p_regmenu(id); else p_logmenu(id);
}
show_chatprefix()
{
new sChatPrefix[64];
get_pcvar_string(g_cChatPrefix, sChatPrefix, charsmax(sChatPrefix));
return sChatPrefix;
}
show_menuprefix()
{
new sMenuPrefix[64];
get_pcvar_string(g_cMenuPrefix, sMenuPrefix, charsmax(sMenuPrefix));
return sMenuPrefix;
}