#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <regex>
#include <engine>
#include <sqlx>
#define KESZITO "Shedi"
#define SEGITO "Kova"
#define PLUGINNAME "SK Regisztrációs rendszer"
#define VERZIOSZAM "1.1"
#define HASHSIZE 256
#define onactive 1
#define offactive 0
new const Prefix[] = "\w[.:SKA:.]";
new const Stars[] = "*******************************";
new const ChatPrefix[] = "^4[.:SKA:.] ^3»";
new const DemoName[] = "ska_demo"
new const tablanev[] = "ska_register";
static szQuery[10048];
new const SQL_INFO[][] = { "IP", "username", "Pw", "DB name" };
new String[121], AutoLogin[33];
new g_screenfade, g_Maxplayers;
new fwd_updatecmd, fwd_loadcmd, fwd_loadcmd1;
new Handle:g_SqlTuple;
enum _:player_prop
{
steamid[32],
ip[32],
name[32],
adminname[32],
registerip[32],
StarsOff,
AccountId,
Language,
LoggedIn,
InProgress,Active,
RegOrLogin,
IsBanned,
BannedReason[32],
Password[32],
PasswordAgain[32],
PasswordHash[HASHSIZE],
StaredPassword[32],
StaredPassAgain[32],
Username[32],
PINCode[4],
SQLPINCode[4]
}
new Player[33][player_prop];
enum _:sqlupdates
{
S_Ban,
S_BanReason[32],
S_BanName,
S_ArgInt
}
new BanSystem[33][sqlupdates];
new REGEX[][][] =
{
{"A PINKód csak számokból állhat, és minimum^4 4^1 karakterből!", "PINCode only consist of numbers, minimum^4 4 characters.", "\y[\w%s\y]\d "},
{"Csak kis és nagybetü + számok (Minimum 4, maximum 16 karakter)", "Small, Large chars and numbers, also in^4 6-16^1 char range!", "\y[\w%s\y]\d "},}
new PIN[][][] =
{
{"\y[\w%s\y]\d Adj meg egy PIN Kódót!", "\y[\w%s\y]\d Type PIN Code!", "\y[\w%s\y]\d "},
{"Adj meg egy PINKódót, mert neked nincs!^nA PINkód a fiókod biztonsága érdekében!", "\d Type PINCode, the PINCode protect your account.", "\d "},
{"Kész", "\d Done", "\d "},
{"A mostani IP-d nem egyezik a Regisztráltal,ezért írd be a PIN kódót!", "\d This account registered IP does not match yours! Please enter your PIN Code!", ""},
{"Adj meg egy PINKódót, a fiókod biztonsága érdekében!", "\dType PINCode, the PINCode protect your account.", "\d "},
{"%s^1 A mostani IP-d nem egyezik a Regisztráltal, vagy nincs PIN kódód. Írd be a pinkódod!", "%s^1 This account registered IP does not match yours! Please enter your PIN Code!", "\d "},
{"%s^1 Adj meg egy PINKódót, a fiókod biztonsága érdekében!", "%s^1 Type PINCode, the PINCode protect your account.", "\d "},
}
new REGCHAT[][][] =
{
{"%s^1 Regisztráció folyamatban kérlek várj!", "%s^1 Register in progress, please wait!", ""},
{"%s^1 Bejelentkezés folyamatban kérlek várj!", "%s^1 Logining in progress, please wait!", ""},
{"%s^1 Valamit elfelejtettél kitölteni!", "%s^1 You forget to fill something!", ""},
{"%s^1 Hibás felhasználónév vagy jelszó!", "%s^1 Incorrect username, or password.", ""},
{"%s^1 Ezzel a felhasználónévvel már regisztráltak!", "%s^1 This username is already registered!", ""},
{"%s^1 Sikeresen ^4regisztráltál,^1 felhasználónév: ^4%s", "%s^1 Succesfully register, username: ^4%s", ""},
{"%s^1 Sikeresen ^4bejelentkeztél!^1 Üdv ^3%s^1(^3#^4%i^1), jó játékot!", "%s^1 Succesfully ^4logged in^1! Hi ^3%s(^3#^4%i^1), good game!", ""},
{"%s^3 Hiba^1 a ^3bejelelentkezés^1 közben, ^3felhasználó^1 már ^3használatban van!", "%s^1 Someting went wrong, someone already in the profil!", ""},
{"Regisztrálj vagy Jelentkezz be!", "Register or Login!", ""},
{"%s^1 A két jelszó nem egyezik!", "%s^1 The tpyed two password not equal!", ""},
{"^"Hibás PINkód!^"", "^"Wrong PINCode^"", ""},
}
new DEMO[][][] =
{
{"^4%s^1 Demó felvétel elkezdődőtt! ^3Demónév: ^4%s.dem^1.", "%s^1 Demo recording started, ^3Demo name: ^4%s.dem^1.", ""},
{"^4%s^3 Dátum: ^4 %s^1 |^3 Játékosnév: ^4%s", "%s^1 Date: ^4 %s^1 |^3 PlayerName: ^4%s", ""},
}
new NYELV[][][] =
{
{"Nyelv: \yMagyar\d | English | Românesc", "Language: \dMagyar | \yEnglish\d | Românesc", "Limba: \dMagyar | English | \yRomânesc"}
}
new REGMENURESZ[][][] =
{
{"Felhasználónév: \r%s", "Username: \r%s", "Username: \r%s"},
{"Jelszó: \r%s", "Password: \r%s", "Password: \r%s"},
{"Jelszó újra: \r%s", "Password again: \r%s", "Password again: \r%s"},
{"\yRegisztráció", "\yRegister", "\yRegister"},
{"\yBejelentkezés", "\yLogin", "\yLogin"},
{"Jelszó Csillagozás \r[BE]", "Register Stairs \r[ON]", ""},
{"Jelszó Csillagozás \d[KI]", "Register Stairs \d[OFF]", ""}
}
new REGMENU[][][] =
{
{"\y[\w%s\y]\d Regisztrálj vagy Jelentkezz be!", "\y[\w%s\y]\d Register or Login!", "\y[\w%s\y]\d Înscrieți-vă sau conectați-vă!"},
{"Regisztráció", "Register", "Inregistrare"},
{"Bejelentkezés^n", "Login^n", "Autentificare^n"},
{"\y[\w%s\y]\d Regisztrációs menü", "\y[\w%s\y]\d Register menu", "\y[\w%s\y]\d Meniu de înregistrare"},
{"\y[\w%s\y]\d Bejelentkezés menü", "\y[\w%s\y]\d Login menu", "\y[\w%s\y]\d Meniu de autentificare"}
}
public plugin_init()
{
register_plugin(PLUGINNAME, VERZIOSZAM, KESZITO);
register_impulse(201, "control");
register_clcmd("PIN", "get_PIN");
register_clcmd("Username", "get_Username");
register_clcmd("Pass", "get_Password");
register_concmd("bn_ban_account", "CmdBanAccount", _, "<#id> <tiltas/oldas>")
register_clcmd("PassAgain", "get_PasswordAgain");
fwd_loadcmd=CreateMultiForward("Load_User_Data", ET_IGNORE, FP_CELL)
fwd_loadcmd1=CreateMultiForward("Load_User_Weapons", ET_IGNORE, FP_CELL)
fwd_updatecmd=CreateMultiForward("Update_User_Data", ET_IGNORE, FP_CELL)
g_Maxplayers = get_maxplayers();
g_screenfade = get_user_msgid("ScreenFade")
}
public plugin_natives()
{
register_native("ska_get_user_id","native_sh_get_user_id",1)
register_native("ska_is_user_logged","native_sh_get_user_logged",1)
}
public native_sh_get_user_id(index)
{
return Player[index][AccountId];
}
public native_sh_get_user_logged(index)
{
return Player[index][LoggedIn];
}
public control(id)
{
if(!Player[id][LoggedIn])
ChooseMenu(id);
}
public CmdBanAccount(id, level, cid){
new Arg1[32], Arg2[32], Arg3[32], Arg_Int[2];
read_argv(1, Arg1, charsmax(Arg1));
read_argv(2, Arg2, charsmax(Arg2));
read_argv(3, Arg3, charsmax(Arg3));
Arg_Int[0] = str_to_num(Arg1);
Arg_Int[1] = str_to_num(Arg2);
if(Arg_Int[0] < 1)
return PLUGIN_HANDLED;
new Banned;
if(Arg_Int[1] == 0)
Banned = 0;
else
Banned = 1;
new Query[512], Data[2], Is_Online = Check_Id_Online(Arg_Int[0]);
Data[0] = id;
Data[1] = get_user_userid(id);
formatex(Query, charsmax(Query), "UPDATE `ska_register` SET `Banned` = %d WHERE `Id` = %d;", Banned, Arg_Int[0]);
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", Query, Data, 2);
if(Is_Online){
server_cmd("kick #%d ^"A fiókod véglegesen ki lett tíltva a szerverről.^"", get_user_userid(Is_Online));
if(Arg_Int[1] > 0)
{
client_print_color(0, print_team_default, "^3[^4PerFecT^3]^1 Játékos: ^3%s^1(^3#^1%i^1) fiókja ki lett tíltva a szerverről, ^3örökre.", Player[Is_Online][name], Arg_Int[0]);
client_print_color(0, print_team_default, "^3[^4PerFecT^3]^1 ^3Adminisztrátor: ^4%s^1(^3#^1%i^1) által.", Player[id][name], Player[id][AccountId]);
}
else
{
client_print_color(0, print_team_default, "^3[^4PerFecT^3]^1 Játékos: ^3-^1(^3#^1%i^1) fiókja feloldásra került.", Arg_Int[0]);
client_print_color(0, print_team_default, "^3[^4PerFecT^3] ^3Adminisztrátor: ^4%s^1(^3#^1%i^1) által.", Player[id][name], Player[id][AccountId]);
}
}
else{
if(Arg_Int[1] > 0)
{
client_print_color(0, print_team_default, "^3[^4PerFecT^3]^1 Játékos: ^3-^1(^3#^1%i^1) fiókja ki lett tíltva a szerverről, ^3örökre.", Arg_Int[0]);
client_print_color(0, print_team_default, "^3[^4PerFecT^3] ^3Adminisztrátor: ^4%s^1(^3#^1%i^1) által.", Player[id][name], Player[id][AccountId]);
}
else
{
client_print_color(0, print_team_default, "^3[^4PerFecT^3]^1 Játékos: ^3-^1(^3#^1%i^1) fiókja feloldásra került.", Arg_Int[0]);
client_print_color(0, print_team_default, "^3[^4PerFecT^3] ^3Adminisztrátor: ^4%s^1(^3#^1%i^1) által.", Player[id][name], Player[id][AccountId]);
}
}
return PLUGIN_HANDLED;
}
stock Check_Id_Online(id)
{
for(new idx = 1; idx < g_Maxplayers; idx++)
{
if(!is_user_connected(idx) || !Player[idx][LoggedIn])
continue;
if(Player[idx][AccountId] == id)
return idx;
}
return 0;
}
static FrameCall;
public server_frame()
{
if(FrameCall < 500)
{
FrameCall++;
return;
}
else
FrameCall = 0;
new p[32],n, id;
get_players(p,n,"ch");
for(new i=0;i<n;i++)
{
id = p[i];
if(Player[id][LoggedIn] == 0)
{
formatex(String, charsmax(String), REGCHAT[8][Player[id][Language]]);
client_print(id, print_center, String);
message_begin(MSG_ONE_UNRELIABLE, g_screenfade, {0,0,0}, id)
write_short(1<<12)
write_short(1<<12)
write_short(0x0000)
write_byte(0)
write_byte(0)
write_byte(0)
write_byte(255)
message_end()
}
}
}
public ChooseMenu(id)
{
formatex(String, charsmax(String), REGMENU[0][Player[id][Language]], Prefix);
new menu = menu_create(String, "ChooseMenu_h");
menu_additem(menu, REGMENU[1][Player[id][Language]], "1", 0);
menu_additem(menu, REGMENU[2][Player[id][Language]], "3", 0);
format(String, charsmax(String), NYELV[0][Player[id][Language]]);
menu_additem(menu, String, "6", 0);
menu_display(id, menu, 0);
return PLUGIN_HANDLED;
}
public ChooseMenu_h(id, menu, item)
{
new data[9], szName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
new key = str_to_num(data);
switch(key)
{
case 1:
{
RegisterMenu(id)
Player[id][RegOrLogin] = 1;
}
case 3:
{
LoginMenu(id);
Player[id][RegOrLogin] = 2;
}
case 6:
{
if(Player[id][Language] == 0)
{
Player[id][Language] = 1;
}
else
{
Player[id][Language] = 0;
}
ChooseMenu(id);
}
}
}
public RegisterMenu(id)
{
formatex(String, charsmax(String), REGMENU[3][Player[id][Language]], Prefix);
new menu = menu_create(String, "RegisterMenu_h");
format(String, charsmax(String), REGMENURESZ[0][Player[id][Language]], Player[id][Username])
menu_additem(menu, String, "1", 0);
if(Player[id][StarsOff] == 0)
{
format(String, charsmax(String), REGMENURESZ[1][Player[id][Language]], Player[id][StaredPassword]);
menu_additem(menu, String, "2", 0);
}
else
{
format(String, charsmax(String), REGMENURESZ[1][Player[id][Language]], Player[id][Password])
menu_additem(menu, String, "2", 0);
}
if(Player[id][StarsOff] == 0)
{
format(String, charsmax(String), REGMENURESZ[2][Player[id][Language]], Player[id][StaredPassAgain])
menu_additem(menu, String, "3", 0);
}
else
{
format(String, charsmax(String), REGMENURESZ[2][Player[id][Language]], Player[id][PasswordAgain])
menu_additem(menu, String, "3", 0);
}
menu_additem(menu, REGMENURESZ[3][Player[id][Language]], "4", 0);
menu_addblank2(menu);
if(Player[id][StarsOff] == 0)
{
format(String, charsmax(String), REGMENURESZ[5][Player[id][Language]])
menu_additem(menu, String, "5", 0);
}
else
{
format(String, charsmax(String), REGMENURESZ[6][Player[id][Language]])
menu_additem(menu, String, "5", 0)
}
format(String, charsmax(String), NYELV[0][Player[id][Language]]);
menu_additem(menu, String, "6", 0);
menu_display(id, menu, 0);
return PLUGIN_HANDLED;
}
public RegisterMenu_h(id, menu, item)
{
new data[9], szName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
new key = str_to_num(data);
switch(key)
{
case 1:
{
client_cmd(id, "messagemode Username");
}
case 2:
{
client_cmd(id, "messagemode Pass");
}
case 3:
{
client_cmd(id, "messagemode PassAgain");
}
case 4:
{
Player[id][RegOrLogin] = 1;
RegLog(id);
}
case 5:
{
if(Player[id][StarsOff])
{
Player[id][StarsOff] = 0;
RegisterMenu(id);
}
else
{
Player[id][StarsOff] = 1;
RegisterMenu(id);
}
}
case 6:
{
if(Player[id][Language] == 0)
{
Player[id][Language] = 1;
}
else
{
Player[id][Language] = 0;
}
RegisterMenu(id);
}
}
}
public LoginMenu(id)
{
formatex(String, charsmax(String), REGMENU[4][Player[id][Language]], Prefix);
new menu = menu_create(String, "LoginMenu_h");
format(String, charsmax(String), REGMENURESZ[0][Player[id][Language]], Player[id][Username])
menu_additem(menu, String, "1", 0);
if(Player[id][StarsOff] == 0)
{
format(String, charsmax(String), REGMENURESZ[1][Player[id][Language]], Player[id][StaredPassword]);
menu_additem(menu, String, "2", 0);
}
else
{
format(String, charsmax(String), REGMENURESZ[1][Player[id][Language]], Player[id][Password])
menu_additem(menu, String, "2", 0);
}
menu_addblank2(menu);
menu_additem(menu, REGMENURESZ[4][Player[id][Language]], "3", 0);
menu_display(id, menu, 0);
return PLUGIN_HANDLED;
}
public LoginMenu_h(id, menu, item)
{
new data[9], szName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
new key = str_to_num(data);
switch(key)
{
case 1:
{
client_cmd(id, "messagemode Username");
}
case 2:
{
client_cmd(id, "messagemode Pass");
}
case 3:
{
Player[id][RegOrLogin] = 2;
RegLog(id);
}
case 5:
{
if(Player[id][StarsOff])
{
Player[id][StarsOff] = 0;
LoginMenu(id);
}
else
{
Player[id][StarsOff] = 1;
LoginMenu(id);
}
}
case 6:
{
if(Player[id][Language] == 0)
{
Player[id][Language] = 1;
}
else
{
Player[id][Language] = 0;
}
LoginMenu(id);
}
}
}
public get_Username(id)
{
new Arg[32];
read_argv(1, Arg, charsmax(Arg));
if(RegexTester(id, Arg, "^^[a-zA-Z0-9]{4,16}+$", REGEX[1][Player[id][Language]]))
{
copy(Player[id][Username], 32, Arg);
}
if(Player[id][RegOrLogin] == 1)
RegisterMenu(id);
else
LoginMenu(id);
}
public get_Password(id)
{
new Arg[32];
read_argv(1, Arg, charsmax(Arg));
if(RegexTester(id, Arg, "^^[a-zA-Z0-9]{4,16}+$", REGEX[1][Player[id][Language]]))
{
copy(Player[id][Password], 32, Arg);
}
formatex(Player[id][StaredPassword], strlen(Arg), "%s", Stars);
if(Player[id][RegOrLogin] == 1)
RegisterMenu(id);
else
LoginMenu(id);
new hash[256];
hash_string(Arg, Hash_Keccak_512, hash, charsmax(hash));
copy(Player[id][PasswordHash], HASHSIZE, hash);
}
public get_PasswordAgain(id)
{
new Arg[32];
read_argv(1, Arg, charsmax(Arg));
if(RegexTester(id, Arg, "^^[a-zA-Z0-9]{4,16}+$", REGEX[1][Player[id][Language]]))
copy(Player[id][PasswordAgain], 32, Arg);
formatex(Player[id][StaredPassAgain], strlen(Arg), "%s", Stars);
if(Player[id][RegOrLogin] == 1)
RegisterMenu(id);
else
LoginMenu(id);
}
public RegLog(id)
{
if(Player[id][RegOrLogin] == 1)
{
if(equali(Player[id][Username], "") || equali(Player[id][Password],""))
{
client_print_color(id, print_team_default, REGCHAT[2][Player[id][Language]], ChatPrefix);
Player[id][RegOrLogin] = 0;
return;
}
if(!equal(Player[id][Password], Player[id][PasswordAgain]))
{
client_print_color(id, print_team_default, REGCHAT[9][Player[id][Language]], ChatPrefix);
Player[id][RegOrLogin] = 0;
return;
}
else
{
client_print_color(id, print_team_default, REGCHAT[0][Player[id][Language]], ChatPrefix);
Player[id][InProgress] = 1;
sql_account_check(id);
}
}
if(Player[id][RegOrLogin] == 2)
{
if(equali(Player[id][Username], "") || equali(Player[id][Password],""))
{
client_print_color(id, print_team_default, REGCHAT[2][Player[id][Language]], ChatPrefix);
Player[id][RegOrLogin] = 0;
return;
}
else
{
client_print_color(id, print_team_default, REGCHAT[1][Player[id][Language]], ChatPrefix);
Player[id][InProgress] = 1;
sql_account_check(id);
}
}
}
public sql_account_check(id)
{
new len = 0
new a[191]
format(a, 190, "%s", Player[id][Username])
replace_all(a, 190, "\", "\\")
replace_all(a, 190, "'", "\'")
len += format(szQuery[len], 2048, "SELECT * FROM %s ", tablanev)
len += format(szQuery[len], 2048-len,"WHERE Username = '%s'", a)
new szData[2];
szData[0] = id;
szData[1] = get_user_userid(id);
SQL_ThreadQuery(g_SqlTuple,"sql_account_check_thread", szQuery, szData, 2)
}
public sql_account_check_thread(FailState,Handle:Query,Error[],Errcode,szData[],DataSize)
{
if(Errcode)
{
log_amx("[ *HIBA* ] PROBLEMA A LEKERDEZESNEL! ( %s )",Error)
return
}
if(FailState == TQUERY_CONNECT_FAILED)
{
set_fail_state("[ *HIBA* ] NEM LEHET KAPCSOLODNI AZ ADATBAZISHOZ!")
return
}
else if(FailState == TQUERY_QUERY_FAILED)
{
set_fail_state("[ *HIBA* ] A LEKERDEZES MEGSZAKADT!")
return
}
new id = szData[0];
if (szData[1] != get_user_userid(id))
return;
new iFound = SQL_NumRows(Query)
new Float:randomtime = random_float(1.00, 6.00)
if(Player[id][RegOrLogin] == 1)
{
if(iFound > 0)
{
client_print_color(id, print_team_default, REGCHAT[4][Player[id][Language]], ChatPrefix);
Player[id][InProgress] = 0;
RegisterMenu(id);
}
else
sql_accountcreate(id);
}
if(Player[id][RegOrLogin] == 2)
{
if(iFound == 0)
{
client_print_color(id, print_team_default, REGCHAT[3][Player[id][Language]], ChatPrefix);
Player[id][InProgress] = 0;
LoginMenu(id);
}
else
sql_account_load(id)
}
}
public sql_accountcreate(id)
{
new len = 0
new sTime[9], sDate[11], sDateAndTime[32];
get_time("%H:%M:%S", sTime, 8 ); get_time("%Y/%m/%d", sDate, 11);
formatex(sDateAndTime, 31, "%s %s", sDate, sTime);
len += format(szQuery[len], 2048, "INSERT INTO %s ", tablanev)
len += format(szQuery[len], 2048-len,"(Username,Password,RegistrationIP,RegistrationID,RegistrationName, RegistrationDate) VALUES(^"%s^", ^"%s^", ^"%s^",^"%s^",^"%s^",^"%s^")", Player[id][Username],Player[id][PasswordHash], Player[id][ip], Player[id][steamid], Player[id][name], sDateAndTime)
new szData[2];
szData[0] = id;
szData[1] = get_user_userid(id);
SQL_ThreadQuery(g_SqlTuple,"sql_account_thread", szQuery, szData, 2)
}
public sql_account_thread(FailState,Handle:Query,Error[],Errcode,szData[],DataSize)
{
if(Errcode)
{
log_amx("[ *HIBA* ] PROBLEMA A LEKERDEZESNEL! ( %s )",Error)
return
}
if(FailState == TQUERY_CONNECT_FAILED)
{
set_fail_state("[ *HIBA* ] NEM LEHET KAPCSOLODNI AZ ADATBAZISHOZ!")
return
}
else if(FailState == TQUERY_QUERY_FAILED)
{
set_fail_state("[ *HIBA* ] A LEKERDEZES MEGSZAKADT!")
return
}
new id = szData[0];
if (szData[1] != get_user_userid(id))
return;
client_print_color(id, print_team_default, REGCHAT[5][Player[id][Language]], ChatPrefix, Player[id][Username]);
Player[id][InProgress] = 0;
Player[id][RegOrLogin] = 0;
LoginMenu(id);
return;
}
public sql_account_load(id)
{
new len = 0
len += format(szQuery[len], 2048, "SELECT * FROM %s ", tablanev)
len += format(szQuery[len], 2048-len,"WHERE Username = ^"%s^"", Player[id][Username])
new szData[2];
szData[0] = id;
szData[1] = get_user_userid(id);
SQL_ThreadQuery(g_SqlTuple,"sql_account_load_thread", szQuery, szData, 2)
}
public sql_account_load_thread(FailState,Handle:Query,Error[],Errcode,szData[],DataSize)
{
if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
{
log_amx("%s", Error);
return;
}
else
{
new id = szData[0];
if (szData[1] != get_user_userid(id))
return;
new szSqlPassword[HASHSIZE]
SQL_ReadResult(Query, 2, szSqlPassword, HASHSIZE)
if(equal(Player[id][PasswordHash], szSqlPassword))
{
new szSqlIP[32]
SQL_ReadResult(Query, 4, szSqlIP, 32)
Player[id][IsBanned] = SQL_ReadResult(Query, 13)
if(Player[id][IsBanned] > 0)
{
client_print_color(id, print_team_default, "^4%s^1 Ez a fiók ki van ^3tíltva^1 a szerverről, ^4véglegesen.", ChatPrefix);
client_print_color(id, print_team_default, "^4%s^1 Ha fellebbezni szeretnél, keress fel egy ^3FőAdmin^1-t vagy egy ^3Tulajdonos^1-t.", ChatPrefix);
Player[id][InProgress] = 0;
return;
}
Player[id][Active] = SQL_ReadResult(Query, 7)
if (Player[id][Active] > 0)
{
client_print_color(id, print_team_default, REGCHAT[7][Player[id][Language]], ChatPrefix);
LoginMenu(id);
Player[id][InProgress] = 0;
return;
}
Player[id][Active] = 1;
Player[id][AccountId] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "Id"));
Player[id][SQLPINCode] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "PIN"));
/*
if(Player[id][SQLPINCode] == 0)
{
PinCodeCreatorMenu(id);
client_print_color(id, print_team_default, PIN[6][Player[id][Language]], ChatPrefix);
return;
}
if(!equal(szSqlIP, Player[id][ip]))
{
PinCodeCreatorMenu(id);
client_print_color(id, print_team_default, PIN[5][Player[id][Language]], ChatPrefix);
return;
}
*/
client_print_color(id, print_team_default, REGCHAT[6][Player[id][Language]], ChatPrefix, Player[id][name], Player[id][AccountId]);
Player[id][RegOrLogin] = 0;
Player[id][InProgress] = 0;
Player[id][LoggedIn] = 1;
new fwdloadtestret
ExecuteForward(fwd_loadcmd,fwdloadtestret,id);
new fwdloadtestret1
ExecuteForward(fwd_loadcmd1,fwdloadtestret1,id);
Start_Logged_Demo(id);
//set_user_info(id, "perfectusername", Player[id][Username]);
//set_user_info(id, "perfecthash", Player[id][PasswordHash]);
//client_cmd(id, "setinfo ^"perfectusername^" ^"%s^"", Player[id][Username]);
//client_cmd(id, "setinfo ^"perfecthash^" ^"%s^"", Player[id][PasswordHash]);
//client_cmd(id, "setinfo ^"perfectautologin^" ^"0^"");
engclient_cmd(id, "setinfo autologin 0")
engclient_cmd(id, "setinfo perfectusername %s", Player[id][Username])
Update(id, 1);
Update(id, 4);
}
else
{
client_print_color(id, print_team_default, REGCHAT[3][Player[id][Language]], ChatPrefix);
Player[id][RegOrLogin] = 0;
LoginMenu(id);
}
}
}
public Start_Logged_Demo(id) {
new sTime[9], sDate[11], sDateAndTime[32];
get_time("%H:%M:%S", sTime, 8 );
get_time("%Y/%m/%d", sDate, 11);
formatex(sDateAndTime, 31, "%s %s", sDate, sTime);
client_cmd(id, "stop; record ^"%s.dem^"", DemoName);
client_print_color(id, print_team_default,DEMO[0][Player[id][Language]], ChatPrefix, DemoName);
client_print_color(id, print_team_default,DEMO[1][Player[id][Language]], ChatPrefix, sDateAndTime, Player[id][name]);
}
public PinCodeCreatorMenu(id)
{
formatex(String, charsmax(String), PIN[0][Player[id][Language]], Prefix);
new menu = menu_create(String, "Pin_h");
if(Player[id][SQLPINCode] == 0)
formatex(String, charsmax(String), PIN[1][Player[id][Language]]);
else
formatex(String, charsmax(String), PIN[3][Player[id][Language]]);
menu_addtext2(menu, String);
formatex(String, charsmax(String), "\yPIN: \r%d^n^n", Player[id][PINCode]);
menu_additem(menu, String, "1",0);
formatex(String, charsmax(String), PIN[2][Player[id][Language]]);
menu_additem(menu, String, "2",0);
menu_display(id, menu, 0);
return PLUGIN_HANDLED;
}
public Pin_h(id, menu, item)
{
new data[9], szName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
new key = str_to_num(data);
switch(key)
{
case 1:
{
client_cmd(id, "messagemode PIN");
}
case 2:
{
if(Player[id][SQLPINCode] == 0)
{
Update(id, 2);
sql_account_load(id);
}
else if(equal(Player[id][SQLPINCode], Player[id][PINCode]))
{
client_print_color(id, print_team_default, REGCHAT[6][Player[id][Language]], ChatPrefix, Player[id][name], Player[id][AccountId]);
Player[id][RegOrLogin] = 0;
Player[id][InProgress] = 0;
Player[id][LoggedIn] = 1;
new fwdloadtestret
ExecuteForward(fwd_loadcmd,fwdloadtestret,id);
Start_Logged_Demo(id);
Update(id, 3);
Update(id, 1);
Update(id, 4);
}
else
server_cmd("amx_kick #%d ^"Hibás PINKÓD^"", get_user_userid(id));
}
}
}
public get_PIN(id)
{
new Arg[32];
read_argv(1, Arg, charsmax(Arg));
if(RegexTester(id, Arg, "^^[1-9]{0,1}[0-9]{4,4}$", REGEX[0][Player[id][Language]]))
{
Player[id][PINCode] = str_to_num(Arg);
}
PinCodeCreatorMenu(id);
}
public UpdateBan(id)
{
new Len;
Len += formatex(szQuery[Len], charsmax(szQuery), "UPDATE `%s` SET ", tablanev);
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "Banned = ^"%i^", ", BanSystem[id][S_Ban]);
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "BannedReason = ^"%s^", ", BanSystem[id][S_BanReason]);
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "AdminName = ^"%s^", ", BanSystem[id][S_BanName]);
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "Parameter = '0' WHERE `Id` = %d;", BanSystem[id][S_ArgInt]);
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", szQuery);
}
public Update(id, UpdateType)
{
new Len;
new sTime[9], sDate[11], sDateAndTime[32];
get_time("%H:%M:%S", sTime, 8 ); get_time("%Y/%m/%d", sDate, 11);
formatex(sDateAndTime, 31, "%s %s", sDate, sTime);
Len += formatex(szQuery[Len], charsmax(szQuery), "UPDATE `%s` SET ", tablanev);
switch(UpdateType)
{
case 1:
{
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "LastLoggedSteamID = ^"%s^", ", Player[id][steamid]);
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "LastLoggedName = ^"%s^", ", Player[id][name]);
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "LastLoggedDate = ^"%s^", ", sDateAndTime);
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "LastLoggedIP = ^"%s^", ", Player[id][ip]);
}
case 2:
{
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "PIN = ^"%i^", ", Player[id][PINCode]);
}
case 3:
{
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "RegistrationIP = ^"%s^", ", Player[id][ip]);
}
case 4:
{
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "Active = ^"%i^", ", onactive);
}
case 5:
{
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "Active = ^"%i^", ", offactive);
}
}
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "Parameter = '0' WHERE `Id` = %d;", Player[id][AccountId]);
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", szQuery);
}
public QuerySetData(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime){
if( FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED )
{
log_amx("%s", Error);
return;
}
}
public client_putinserver(id)
{
GiveDatas(id);
ResetAccountData(id);
ResetAccountInfos(id);
}
public client_disconnected(id)
{
if(Player[id][LoggedIn])
{
Update(id, 5);
Player[id][Active] = 0;
Player[id][RegOrLogin] = 0;
Player[id][LoggedIn] = 0;
new fwdupdatetestret
ExecuteForward(fwd_updatecmd,fwdupdatetestret,id);
}
}
public ResetAccountData(id)
{
get_user_info(id, "perfectautologin", AutoLogin[id], 32);
if(AutoLogin[id] == 1)
{
get_user_info(id, "perfectusername", Player[id][Username], charsmax(Player[][Username]));
get_user_info(id, "perfecthash", Player[id][PasswordHash], charsmax(Player[][PasswordHash]));
}
Player[id][AccountId] = 0;
Player[id][Password] = "";
Player[id][Username] = "";
Player[id][StaredPassword] = "";
Player[id][StaredPassAgain] = "";
Player[id][PasswordAgain] = "";
Player[id][PasswordHash] = "";
Player[id][BannedReason] = "";
Player[id][IsBanned] = 0;
Player[id][PINCode] = 0;
}
public ResetAccountInfos(id)
{
Player[id][InProgress] = 0;
Player[id][Language] = 0;
Player[id][StarsOff] = 0;
Player[id][LoggedIn] = 0;
}
public GiveDatas(id)
{
Player[id][name] = "";
Player[id][steamid] = "";
Player[id][ip] = "";
get_user_name(id, Player[id][name], 32);
get_user_authid(id, Player[id][steamid], 32);
get_user_ip(id, Player[id][ip], 32);
}
/**
* Input:
* id = the user id
* m_string[] = The string what need to test
* RegexText[] = The regex pattern
* NoMatchText[] = If the regex doesn't match this text will be chatprinted to the id
* */
bool:RegexTester(id, m_string[], RegexText[], NoMatchText[])
{
new ret, error[128];
new Regex:regex_handle = regex_match(m_string, RegexText, ret, error, charsmax(error));
switch(regex_handle)
{
case REGEX_MATCH_FAIL:
{
log_amx("---REGEX MATCH FAIL---");
log_amx("ERROR:");
log_amx(error);
// There was an error matching against the pattern
// Check the {error} variable for message, and {ret} for error code
}
case REGEX_PATTERN_FAIL:
{
log_amx("---REGEX TATTERN ERROR---");
log_amx("ERROR:");
log_amx(error);
// There is an error in your pattern
// Check the {error} variable for message, and {ret} for error code
}
case REGEX_NO_MATCH:
{
client_print_color(id, print_team_default, "^4%s ^1%s",Prefix, NoMatchText);
}
default:
{
// Matched m_string {ret} times
regex_free(regex_handle);
return true;
// Free the Regex handle
}
}
regex_free(regex_handle);
return false;
}
public plugin_cfg()
{
g_SqlTuple = SQL_MakeDbTuple(SQL_INFO[0], SQL_INFO[1], SQL_INFO[2], SQL_INFO[3]);
createRegTable()
//createForceLoginTable()
sql_active_check()
}
public sql_active_check()
{
new szQuery[2048]
new len = 0
len += format(szQuery[len], 2048, "UPDATE ska_register SET ")
len += format(szQuery[len], 2048-len,"Active = '0' ")
len += format(szQuery[len], 2048-len,"WHERE Active = '%d'", onactive)
SQL_ThreadQuery(g_SqlTuple,"sql_active_check_thread", szQuery)
}
public sql_active_check_thread(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
if(FailState == TQUERY_CONNECT_FAILED)
return set_fail_state("[ *HIBA* ] NEM LEHET KAPCSOLODNI AZ ADATBAZISHOZ!")
else if(FailState == TQUERY_QUERY_FAILED)
return set_fail_state("[ *HIBA* ] A LEKERDEZES MEGSZAKADT!")
if(Errcode)
return log_amx("[ *HIBA* ] PROBLEMA A LEKERDEZESNEL! ( %s )",Error)
return PLUGIN_CONTINUE
}
public createRegTable()
{
new Len;
Len += formatex(szQuery[Len], charsmax(szQuery), "CREATE TABLE IF NOT EXISTS `%s` ", tablanev);
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "( ");
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "`AccountId` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,");
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "`Username` varchar(32) NOT NULL,")
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "`Password` varchar(256) NOT NULL,")
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "`PIN` INT(4) NOT NULL,")
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "`RegisterName` varchar(32) NOT NULL,")
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "`RegisterIP` varchar(32) NOT NULL,")
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "`RegisterID` varchar(32) NOT NULL,")
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "`RegisterDate` varchar(32) NOT NULL,")
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "`Banned` varchar(1) NOT NULL,")
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "`BannedReason` varchar(32) NOT NULL,")
Len += formatex(szQuery[Len], charsmax(szQuery)-Len, "`Active` INT(1) NOT NULL)")
SQL_ThreadQuery(g_SqlTuple, "createTableThread", szQuery);
}
public createTableThread(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime) {
if(Errcode)
log_amx("[HIBA*] HIBAT DOBTAM: %s",Error);
if(FailState == TQUERY_CONNECT_FAILED)
set_fail_state("[HIBA*] NEM TUDTAM CSATLAKOZNI AZ ADATBAZISHOZ!");
else if(FailState == TQUERY_QUERY_FAILED)
set_fail_state("Query Error");
}
public plugin_end()
{
SQL_FreeHandle(g_SqlTuple);
}
/*
if(Player[id][PINCode] == 0)
{
client_print_color(id, print_team_default, "^4%s^1 A bejelentkezeshez megkell adnod egy pinkodot!", ChatPrefix);
PinCodeCreatorMenu(id);
Player[id][PINCode] = 0;
Player[id][InProgress] = 0;
return;
}
*/