#include #include #include #include #define PLUGIN "SRN" #define VERSION "1.1 Beta" #define AUTHOR "Pavulon" #define maxplayers 20 #define ADMIN_ACCESS ADMIN_IMMUNITY #define SECRET "**********" //0 - automatycznie, 1 - steamid, 2 - ip #define AUTH 0 new gMsgidSayText new const gName[] = "name" new Handle:sql_handle new wishw8ings new datas[maxplayers+1][3][65] new actname[maxplayers+1][65] new UserMenu[maxplayers+1] new bool: sql_online new Array:RegNick new Array:RegPass new pHost, pUser, pPass, pDb, pRes, pSpam, pMax public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_cvar("srn_version", VERSION, FCVAR_SERVER|FCVAR_SPONLY) set_cvar_string("srn_version", VERSION) pHost = register_cvar("srn_sql_host", "localhost") pUser = register_cvar("srn_sql_user", "user") pPass = register_cvar("srn_sql_pass", "password") pDb = register_cvar("srn_sql_db", "database") pRes = register_cvar("srn_res_time", "2592000") pSpam = register_cvar("srn_spam_delay", "15") pMax = register_cvar("srn_maxres", "1") register_clcmd("say /rezerwacja", "menu_rezerwacji") register_clcmd("menu_administracji", "menu_administracji") register_clcmd("ustaw_nick", "dodawanie_rezerwacji") register_clcmd("ustaw_pass", "dodawanie_rezerwacji") register_clcmd("edytuj_nick", "edytowanie_rezerwacji") register_clcmd("edytuj_pass", "edytowanie_rezerwacji") register_clcmd("prosbe_odrzuc", "zarzadzanie_prosbami") register_clcmd("prosbe_akceptuj", "zarzadzanie_prosbami") register_concmd("amx_resreload", "resreload", ADMIN_ACCESS) register_forward(FM_ClientUserInfoChanged, "forward_client_userinfochanged") register_dictionary("srn.txt") RegNick = ArrayCreate(35, 1) RegPass = ArrayCreate(35, 1) gMsgidSayText = get_user_msgid("SayText") new configsDir[64] get_configsdir(configsDir, 63) server_cmd("exec %s/srn.cfg", configsDir) set_task(1.0, "sql_init") set_task(60.0, "sql_state", _, _, _, "b") } public menu_rezerwacji(id) { if (!sql_online) { col_mess(id, id, "%L", LANG_PLAYER, "SRN_NOT_CONNECTED") return PLUGIN_HANDLED } new tmptxt[64] formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_TITLE") new MenuStart = menu_create(tmptxt, "cbMenuStart") new MenuStartCb = menu_makecallback("mcbMenuStart") formatex(tmptxt, 63, "%L %L",LANG_PLAYER,"SRN_MENU_ADD", LANG_PLAYER,"SRN_MENU_RES") menu_additem(MenuStart, tmptxt, "", ADMIN_ALL, MenuStartCb) formatex(tmptxt, 63, "%L %L",LANG_PLAYER,"SRN_MENU_EDIT", LANG_PLAYER,"SRN_MENU_RES") menu_additem(MenuStart, tmptxt, "", ADMIN_ALL, MenuStartCb) formatex(tmptxt, 63, "%L %L",LANG_PLAYER,"SRN_MENU_DEL", LANG_PLAYER,"SRN_MENU_RES") menu_additem(MenuStart, tmptxt, "", ADMIN_ALL, MenuStartCb) formatex(tmptxt, 63, "%L %L",LANG_PLAYER,"SRN_MENU_SHOW", LANG_PLAYER,"SRN_MENU_RES") menu_additem(MenuStart, tmptxt, "", ADMIN_ALL, MenuStartCb) menu_addblank(MenuStart, 0) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_INFO") menu_additem(MenuStart, tmptxt, "", ADMIN_ALL, MenuStartCb) if (get_user_flags(id)&ADMIN_ACCESS) { menu_addblank(MenuStart, 0) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_ADMIN") menu_additem(MenuStart, tmptxt, "", ADMIN_ALL, MenuStartCb) } formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_EXIT") menu_setprop(MenuStart, MPROP_EXITNAME, tmptxt) menu_display(id, MenuStart, 0) return PLUGIN_HANDLED } public mcbMenuStart(id, menu, item) { if(item==5 && (!(get_user_flags(id)&ADMIN_ACCESS))) return ITEM_DISABLED return ITEM_ENABLED } public cbMenuStart(id, menu, item) { new query[256], auth_id[36], data[1] if (0 <= item <= 3) { #if AUTH == 0 || AUTH == 1 get_user_authid(id, auth_id, 35) #endif #if AUTH == 0 if (!valid_steam(auth_id)) #endif #if AUTH == 0 || AUTH == 2 get_user_ip(id, auth_id, 35, 1) #endif format(query, 255,"SELECT `id`, `nick`, `password` FROM srn_reservations WHERE `auth_id`='%s'", auth_id) data[0] = id } switch(item) { case 0: { SQL_ThreadQuery(sql_handle, "dodaj_rezerwacje0", query, data, 1) } case 1: { SQL_ThreadQuery(sql_handle, "edytuj_rezerwacje0", query, data, 1) } case 2: { SQL_ThreadQuery(sql_handle, "usun_rezerwacje0", query, data, 1) } case 3: { SQL_ThreadQuery(sql_handle, "pokaz_rezerwacje0", query, data, 1) } case 4: { new tmptxt[64] formatex(tmptxt, 63, "%L^n%L:",LANG_PLAYER, "SRN_MENU_TITLE", LANG_PLAYER,"SRN_MENU_INFO") new Menu = menu_create(tmptxt,"cbInfo"); menu_additem(Menu, "****************************") formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_USAGE1", (get_pcvar_float(pRes)/(60*60*24))) menu_additem(Menu, tmptxt) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_USAGE2") menu_additem(Menu, tmptxt) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_USAGE3") menu_additem(Menu, tmptxt) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_USAGE4") menu_additem(Menu, tmptxt) menu_additem(Menu, "****************************") menu_setprop(Menu, MPROP_EXITNAME, "Wyjscie") menu_display(id, Menu, 0) menu_destroy(Menu) } case 5: { client_cmd(id, "menu_administracji") } case MENU_EXIT: { menu_destroy(menu) return PLUGIN_HANDLED } } menu_destroy(menu) return PLUGIN_HANDLED } public cbInfo() {} public menu_administracji(id) { if (!sql_online) { col_mess(id, id, "%L", LANG_PLAYER, "SRN_NOT_CONNECTED") return PLUGIN_HANDLED } if (!(get_user_flags(id)&ADMIN_ACCESS)) { console_print(id, "%L", LANG_PLAYER, "SRN_NO_ACCESS") return PLUGIN_HANDLED } new tmptxt[64] formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_TITLE") new MenuAdmin = menu_create(tmptxt, "cbMenuAdmin") new MenuAdminCb = menu_makecallback("mcbMenuStart") formatex(tmptxt, 63, "%L %L",LANG_PLAYER,"SRN_MENU_RELOAD", LANG_PLAYER,"SRN_MENU_RES") menu_additem(MenuAdmin, tmptxt, "", ADMIN_ACCESS, MenuAdminCb) formatex(tmptxt, 63, "%L %L",LANG_PLAYER,"SRN_MENU_DEL", LANG_PLAYER,"SRN_MENU_RES") menu_additem(MenuAdmin, tmptxt, "", ADMIN_ACCESS, MenuAdminCb) formatex(tmptxt, 63, "%L", LANG_PLAYER,"SRN_MENU_WISH_MANAGE") menu_additem(MenuAdmin, tmptxt, "", ADMIN_ACCESS, MenuAdminCb) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_EXIT") menu_setprop(MenuAdmin, MPROP_EXITNAME, tmptxt) menu_display(id, MenuAdmin, 0) return PLUGIN_HANDLED } public mcbMenuAdmin(id, menu, item) { return ITEM_ENABLED } public cbMenuAdmin(id, menu, item) { new data[2] data[0] = id switch(item) { case 0: { client_cmd(id, "amx_resreload") } case 1: { new query[256] format(query, 255,"SELECT `id`, `nick`, `auth_id` FROM srn_reservations ORDER BY `date` DESC") SQL_ThreadQuery(sql_handle, "zarzadzaj_rezerwacjami0", query, data, 2) } case 2: { new query[256] format(query, 255,"SELECT `id`, `nick`, `auth_id`, `password` FROM srn_res_wish ORDER BY `date` DESC") SQL_ThreadQuery(sql_handle, "zarzadzaj_prosbami0", query, data, 2) } case MENU_EXIT: { menu_destroy(menu) return PLUGIN_HANDLED } } menu_destroy(menu) return PLUGIN_HANDLED } public zarzadzaj_rezerwacjami0(failstate, Handle:query, error[], errnum, data[], size) { new id = data[0] new tmptxt[70] formatex(tmptxt, 63, "%L^n%L %L:",LANG_PLAYER, "SRN_MENU_TITLE",LANG_PLAYER,"SRN_MENU_DEL", LANG_PLAYER,"SRN_MENU_RES") new Menu = menu_create(tmptxt,"cbAdminUsunRezerwacje") new sql_id[8] new sql_name[33] new sql_steam[36] if (failstate) { new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, 1) } else { sql_online = true new row = 1 new count_names = SQL_NumResults(query) if (!count_names) { col_mess(id, id, "%L", LANG_PLAYER, "SRN_NO_RES") menu_destroy(Menu) UserMenu[id] = 0 } else while (row++ <= count_names) { SQL_ReadResult(query, 0, sql_id, 5) SQL_ReadResult(query, 1, sql_name, 32) SQL_ReadResult(query, 2, sql_steam, 35) strtolower(sql_name) formatex(tmptxt, 69, "%s: %s", sql_steam, sql_name) format(sql_id, 69, "%s", sql_id) menu_additem(Menu, tmptxt, sql_id) SQL_NextRow(query) } } formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_CANCEL") menu_setprop(Menu, MPROP_EXITNAME, tmptxt) menu_display(id, Menu, 0) UserMenu[id] = Menu return PLUGIN_HANDLED } public zarzadzaj_prosbami0(failstate, Handle:query, error[], errnum, data[], size) { new id = data[0] if (failstate) { new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, 2) } else { sql_online = true new row = 1 new count_names = SQL_NumResults(query) if (!count_names) { col_mess(id, id, "%L", LANG_PLAYER, "SRN_NO_RES") UserMenu[id] = 0 } else { new sql_id[50] new sql_name[33] new sql_steam[36] new sql_pass[35] new tmptxt[70] formatex(tmptxt, 63, "%L^n%L:",LANG_PLAYER, "SRN_MENU_TITLE", LANG_PLAYER,"SRN_MENU_WISH_MANAGE") new Menu = menu_create(tmptxt,"cbAdminListaProsb") while (row++ <= count_names) { SQL_ReadResult(query, 0, sql_id, 5) SQL_ReadResult(query, 1, sql_name, 32) SQL_ReadResult(query, 2, sql_steam, 35) SQL_ReadResult(query, 3, sql_pass, 34) strtolower(sql_name) formatex(tmptxt, 69, "%s: %s", sql_steam, sql_name) format(sql_id, 49, "%s:%s", sql_id, sql_pass) menu_additem(Menu, tmptxt, sql_id) SQL_NextRow(query) } formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_CANCEL") menu_setprop(Menu, MPROP_EXITNAME, tmptxt) menu_display(id, Menu, 0) UserMenu[id] = Menu } } return PLUGIN_HANDLED } public cbAdminListaProsb(id, menu, item) { new sql_nick[70], sql_pass[70] new acc, callback if (item != MENU_EXIT) { menu_item_getinfo(menu, item, acc, sql_pass, 69, sql_nick, 69, callback) if (!strlen(sql_nick)) { menu_destroy(menu) menu_cancel(id) UserMenu[id] = 0 return PLUGIN_HANDLED } new tmptxt[64] formatex(tmptxt, 63, "%L^n%L:",LANG_PLAYER, "SRN_MENU_TITLE", LANG_PLAYER,"SRN_MENU_WISH_MANAGE") new Menu = menu_create(tmptxt, "cbAdminDodajusunProsby") new MenuCb = menu_makecallback("mcbAdminDodajusunProsby") menu_additem(Menu, sql_nick, sql_pass, ADMIN_ALL, MenuCb) menu_addblank(Menu, 0) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_ACCEPT") menu_additem(Menu, tmptxt, "", ADMIN_ALL, MenuCb) menu_addblank(Menu, 0) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_DEL") menu_additem(Menu, tmptxt, "", ADMIN_ALL, MenuCb) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_CANCEL") menu_setprop(Menu, MPROP_EXITNAME, tmptxt) menu_destroy(menu) menu_cancel(id) menu_display(id, Menu, 0) UserMenu[id] = Menu return PLUGIN_HANDLED } return PLUGIN_HANDLED } public cbAdminDodajusunProsby(id, menu, item) { switch(item) { case 1: { client_cmd(id, "prosbe_akceptuj") } case 2: { client_cmd(id, "prosbe_odrzuc") } case MENU_EXIT: { menu_destroy(menu) UserMenu[id] = 0 } } } public mcbAdminDodajusunProsby(id, menu, item) { if(item==0) return ITEM_DISABLED return ITEM_ENABLED } public zarzadzanie_prosbami(id) { new command[32] read_argv(0, command, 33) new info[50], name[70] new acc, callback menu_item_getinfo(UserMenu[id], 0, acc, info, 49, name, 69, callback) new sql_name[35], sql_steam[36], sql_id[6], sql_pass[35] strtok(info, sql_id, 5, sql_pass, 34, ':') split(name, sql_steam, 35, sql_name, 32, ": ") new query[256] if (contain(command, "_odrzuc")!=-1) { format(query, 255, "DELETE FROM srn_res_wish WHERE `id` = '%s'", sql_id) new data[1] data[0] = id SQL_ThreadQuery(sql_handle, "OdrzucProsbe", query, data, 1) } else if (contain(command, "_akceptuj")!=-1) { new authid[36] #if AUTH == 0 || AUTH == 1 get_user_authid(id, authid, 35) #endif #if AUTH == 0 if (!valid_steam(authid)) #endif #if AUTH == 0 || AUTH == 2 get_user_ip(id, authid, 35, 1) #endif format(query, 255, "INSERT INTO srn_reservations VALUES (NULL, '%d', '%s', '%s', '%s', '%s')", get_systime(), sql_steam, sql_name, sql_pass, authid) sql_name[32] = 0 sql_name[33] = str_to_num(sql_id) sql_name[34] = id SQL_ThreadQuery(sql_handle, "AkceptujProsbe", query, sql_name, 35) } menu_destroy(UserMenu[id]) menu_cancel(id) UserMenu[id] = 0 return PLUGIN_HANDLED } public OdrzucProsbe(failstate, Handle:query, error[], errnum, data[], size) { if (failstate) { new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, 3) } else { if (data[0]) col_mess(data[0], data[0], "%L", LANG_PLAYER, "SRN_MENU_WISH_CANC") } return PLUGIN_HANDLED } public AkceptujProsbe(failstate, Handle:query, error[], errnum, data[], size) { if (failstate) { new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, 4) } else { if (data[34]) col_mess(data[34], data[34], "%L", LANG_PLAYER, "SRN_MENU_WISH_ACC") new query2[256] format(query2, 255, "DELETE FROM srn_res_wish WHERE `id` = '%d'", data[33]) new data[1] data[0] = 0 SQL_ThreadQuery(sql_handle, "OdrzucProsbe", query2, data, 1) } return PLUGIN_HANDLED } public cbAdminUsunRezerwacje(id, menu, item) { new sql_nick[35], sql_id[6], tmptxt[70] new acc, callback if (item != MENU_EXIT) { new sql_steam[36] menu_item_getinfo(menu, item, acc, sql_id, 5, tmptxt, 69, callback) replace(tmptxt, 65, "| ", "|") strtok(tmptxt, sql_steam, 35, sql_nick, 32, ':') new query2[256], auth_id[36] #if AUTH == 0 || AUTH == 1 get_user_authid(id, auth_id, 35) #endif #if AUTH == 0 if (!valid_steam(auth_id)) #endif #if AUTH == 0 || AUTH == 2 get_user_ip(id, auth_id, 35, 1) #endif format(query2,255,"INSERT INTO srn_history VALUES (NULL, '%d', '%s', '%s', '%s')", get_systime(0), sql_steam, sql_nick, auth_id) if (strlen(sql_nick)) { sql_nick[32] = 0 sql_nick[33] = str_to_num(sql_id) sql_nick[34] = id SQL_ThreadQuery(sql_handle, "UsunZHistorii", query2, sql_nick, 35) } } menu_destroy(menu) UserMenu[id] = 0 } public dodaj_rezerwacje0(failstate, Handle:query, error[], errnum, data[], size) { new id = data[0] if (failstate) { new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, 5) } else { sql_online = true if (SQL_NumResults(query) >= get_pcvar_num(pMax)) { col_mess(id, id, "%L", LANG_PLAYER, "SRN_RES_LIMIT", get_pcvar_num(pMax)) UserMenu[id] = 0 return PLUGIN_HANDLED } new tmptxt[64] formatex(tmptxt, 63, "%L^n%L:",LANG_PLAYER, "SRN_MENU_TITLE", LANG_PLAYER,"SRN_MENU_ADD") new Menu = menu_create(tmptxt,"cbDodajRezerwacje"); new MenuCb = menu_makecallback("mcbDodajRezerwacje") formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_SETNICK") menu_additem(Menu, tmptxt, "", ADMIN_ALL, MenuCb) menu_additem(Menu, "","",ADMIN_ALL, MenuCb) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_SETPASS") menu_additem(Menu, tmptxt, "", ADMIN_ALL, MenuCb) menu_additem(Menu, "","",ADMIN_ALL, MenuCb) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_ACCEPT") menu_additem(Menu, tmptxt,"",ADMIN_ALL, MenuCb) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_CANCEL") menu_setprop(Menu, MPROP_EXITNAME, tmptxt) menu_display(id, Menu, 0) UserMenu[id] = Menu } return PLUGIN_HANDLED } public cbDodajRezerwacje(id, menu, item) { new data[2] new acc, callback switch(item) { case 0: { client_cmd(id, "messagemode ^"ustaw_nick^"") menu_display(id, menu, 0) return } case 2: { client_cmd(id, "messagemode ^"ustaw_pass^"") menu_display(id, menu, 0) return } case 4: { menu_item_getinfo(menu, 1, acc, data, 1, datas[id][0], 32, callback) menu_item_getinfo(menu, 3, acc, data, 1, datas[id][1], 32, callback) if (strlen(datas[id][0])>3 && strlen(datas[id][1])>3) { col_mess(id, id, "%L", LANG_PLAYER, "SRN_PLZ_WRITE") col_mess(id, id, "!tsetinfo ^"_res^" ^"%s^"", datas[id][1]) client_cmd(id, "setinfo ^"_res^" ^"%s^"", datas[id][1]) new query[256], data[1] data[0] = id #if AUTH == 0 || AUTH == 1 get_user_authid(id, datas[id][2], 35) #endif #if AUTH == 0 if (!valid_steam(datas[id][2])) #endif #if AUTH == 0 || AUTH == 2 get_user_ip(id, datas[id][2], 35, 1) #endif new md5_pass[34] md5(datas[id][1], md5_pass) copy(datas[id][1], 34, md5_pass) format(query, 255,"SELECT `id` FROM srn_res_wish WHERE `auth_id`='%s'", datas[id][2]) SQL_ThreadQuery(sql_handle, "WstawRezerwacje", query, data, 1) } else { col_mess(id, id, "%L", LANG_PLAYER, "SRN_TOO_SHORT") menu_display(id, menu, 0) return } } } menu_destroy(menu) UserMenu[id] = 0 } public mcbDodajRezerwacje(id, menu, item) { if(1 == item || item == 3) return ITEM_DISABLED return ITEM_ENABLED } public dodawanie_rezerwacji(id) { new command[32] read_argv(0, command, 33) new nick[33], pass[35] new data[2], acc, callback if (contain(command, "_nick")!=-1) { read_argv(1, nick, 32) replace_all(nick, 32, "\", "") replace_all(nick, 32, "'", "`") } else { menu_item_getinfo(UserMenu[id], 1, acc, data, 1, nick, 32, callback) } if (contain(command, "_pass")!=-1) { read_argv(1, pass, 34) replace_all(pass, 34, "\", "") replace_all(pass, 34, "'", "`") } else { menu_item_getinfo(UserMenu[id], 3, acc, data, 1, pass, 34, callback) } new tmptxt[64] formatex(tmptxt, 63, "%L^n%L:",LANG_PLAYER, "SRN_MENU_TITLE", LANG_PLAYER,"SRN_MENU_ADD") new Menu = menu_create(tmptxt,"cbDodajRezerwacje"); new MenuCb = menu_makecallback("mcbDodajRezerwacje") formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_SETNICK") menu_additem(Menu, tmptxt, "", ADMIN_ALL, MenuCb) menu_additem(Menu, nick,"",ADMIN_ALL, MenuCb) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_SETPASS") menu_additem(Menu, tmptxt, "", ADMIN_ALL, MenuCb) menu_additem(Menu, pass,"",ADMIN_ALL, MenuCb) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_ACCEPT") menu_additem(Menu, tmptxt,"",ADMIN_ALL, MenuCb) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_CANCEL") menu_setprop(Menu, MPROP_EXITNAME, tmptxt) menu_destroy(UserMenu[id]) menu_cancel(id) UserMenu[id] = Menu menu_display(id, UserMenu[id], 0) return PLUGIN_HANDLED } public edytuj_rezerwacje0(failstate, Handle:query, error[], errnum, data[], size) { new id = data[0] new tmptxt[64] formatex(tmptxt, 63, "%L^n%L:",LANG_PLAYER, "SRN_MENU_TITLE", LANG_PLAYER,"SRN_MENU_EDIT") new Menu = menu_create(tmptxt,"cbEdytujRezerwacje") new sql_name[33], sql_pass[35], sql_id[6] if (failstate) { new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, 6) } else { sql_online = true new row = 1 new count_names = SQL_NumResults(query) if (!count_names) { col_mess(id, id, "%L", LANG_PLAYER, "SRN_NO_RES") menu_destroy(Menu) UserMenu[id] = 0 } else while (row++ <= count_names) { SQL_ReadResult(query, 0, sql_id, 5) SQL_ReadResult(query, 1, sql_name, 32) SQL_ReadResult(query, 2, sql_pass, 34) strtolower(sql_name) formatex(tmptxt, 63, "%s:%s",sql_id, sql_pass) menu_additem(Menu, sql_name, tmptxt) SQL_NextRow(query) } } formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_CANCEL") menu_setprop(Menu, MPROP_EXITNAME, tmptxt) menu_display(id, Menu, 0) UserMenu[id] = Menu return PLUGIN_HANDLED } public cbEdytujRezerwacje(id, menu, item) { new sql_nick[33], sql_pass[35] new acc, callback if (item != MENU_EXIT) { menu_item_getinfo(menu, item, acc, sql_pass, 34, sql_nick, 32, callback) if (!strlen(sql_nick)) { menu_destroy(menu) UserMenu[id] = 0 return PLUGIN_HANDLED } new tmptxt[64] formatex(tmptxt, 63, "%L^n%L:",LANG_PLAYER, "SRN_MENU_TITLE", LANG_PLAYER,"SRN_MENU_EDIT") new Menu = menu_create(tmptxt,"cbEdytujRezerwacje2") new MenuCb = menu_makecallback("mcbEdytujRezerwacje2") formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_EDITNICK") menu_additem(Menu, tmptxt, "", ADMIN_ALL, MenuCb) menu_additem(Menu, sql_nick, sql_nick,ADMIN_ALL, MenuCb) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_EDITPASS") menu_additem(Menu, tmptxt, "", ADMIN_ALL, MenuCb) menu_additem(Menu, SECRET, sql_pass ,ADMIN_ALL, MenuCb) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_ACCEPT") menu_additem(Menu, tmptxt,"",ADMIN_ALL, MenuCb) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_CANCEL") menu_setprop(Menu, MPROP_EXITNAME, tmptxt) menu_destroy(menu) menu_cancel(id) menu_display(id, Menu, 0) UserMenu[id] = Menu return PLUGIN_HANDLED } menu_destroy(menu) UserMenu[id] = 0 return PLUGIN_HANDLED } public cbEdytujRezerwacje2(id, menu, item) { new data[2] new acc, callback switch(item) { case 0: { client_cmd(id, "messagemode ^"edytuj_nick^"") menu_display(id, menu, 0) return } case 2: { client_cmd(id, "messagemode ^"edytuj_pass^"") menu_display(id, menu, 0) return } case 4: { new tmptxt[64], sql_id[6] menu_item_getinfo(menu, 1, acc, data, 1, datas[id][0], 32, callback) menu_item_getinfo(menu, 3, acc, tmptxt, 63, datas[id][1], 32, callback) if (equal(datas[id][1], SECRET)) { menu_item_getinfo(menu, 3, acc, tmptxt, 63, data, 1, callback) strtok(tmptxt, sql_id, 5, datas[id][1], 32, ':') } else { strtok(tmptxt, sql_id, 5, data, 1, ':') new md5_pass[34] md5(datas[id][1], md5_pass) copy(datas[id][1], 34, md5_pass) } if (strlen(datas[id][0])>3 && strlen(datas[id][1])>3) { col_mess(id, id, "%L", LANG_PLAYER, "SRN_PLZ_WRITE") col_mess(id, id, "!tsetinfo ^"_res^" ^"%s^"", datas[id][1]) client_cmd(id, "setinfo ^"_res^" ^"%s^"", datas[id][1]) new query[256], sql_nick[35] #if AUTH == 0 || AUTH == 1 get_user_authid(id, datas[id][2], 35) #endif #if AUTH == 0 if (!valid_steam(datas[id][2])) #endif #if AUTH == 0 || AUTH == 2 get_user_ip(id, datas[id][2], 35, 1) #endif menu_item_getinfo(menu, 1, acc, sql_nick, 32, data, 1, callback) data[0] = id if (equal(sql_nick, datas[id][0])) { format(query,255,"UPDATE srn_reservations SET `date`='%d', `password`='%s' WHERE `id`='%s'", get_systime(0), datas[id][1], sql_id) SQL_ThreadQuery(sql_handle, "ZakonczEdycje", query, data, 1) } else { format(query, 255,"SELECT `id` FROM srn_res_wish WHERE `auth_id`='%s'", datas[id][2]) SQL_ThreadQuery(sql_handle, "WstawRezerwacje", query, data, 1) format(query,255,"INSERT INTO srn_history VALUES (NULL, '%d', '%s', '%s', '%s')", get_systime(0), datas[id][2], datas[id][0], datas[id][2]) sql_nick[32] = 0 sql_nick[33] = str_to_num(sql_id) sql_nick[34] = id SQL_ThreadQuery(sql_handle, "UsunZHistorii", query, sql_nick, 35) } } else { col_mess(id, id, "%L", LANG_PLAYER, "SRN_TOO_SHORT") menu_display(id, menu, 0) return } } } menu_destroy(menu) UserMenu[id] = 0 } public mcbEdytujRezerwacje2(id, menu, item) { if(1 == item || item == 3) return ITEM_DISABLED return ITEM_ENABLED } public edytowanie_rezerwacji(id) { new command[32], data[2] read_argv(0, command, 33) new nick[33], pass[35], nick2[33], pass2[35] new acc, callback new tmptxt[64] if (contain(command, "_nick")!=-1) { read_argv(1, nick, 32) replace_all(nick, 32, "\", "") replace_all(nick, 32, "'", "`") menu_item_getinfo(UserMenu[id], 1, acc, nick2, 32, data, 1, callback) } else { menu_item_getinfo(UserMenu[id], 1, acc, nick2, 32, nick, 32, callback) } if (contain(command, "_pass")!=-1) { read_argv(1, pass, 34) replace_all(pass, 34, "\", "") replace_all(pass, 34, "'", "`") menu_item_getinfo(UserMenu[id], 3, acc, pass2, 34, data, 1, callback) } else { menu_item_getinfo(UserMenu[id], 3, acc, pass2, 34, pass, 34, callback) } formatex(tmptxt, 63, "%L^n%L:",LANG_PLAYER, "SRN_MENU_TITLE", LANG_PLAYER,"SRN_MENU_EDIT") new Menu = menu_create(tmptxt,"cbEdytujRezerwacje2") new MenuCb = menu_makecallback("mcbEdytujRezerwacje2") formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_EDITNICK") menu_additem(Menu, tmptxt, "", ADMIN_ALL, MenuCb) menu_additem(Menu, nick, nick2, ADMIN_ALL, MenuCb) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_EDITPASS") menu_additem(Menu, tmptxt, "", ADMIN_ALL, MenuCb) menu_additem(Menu, pass, pass2, ADMIN_ALL, MenuCb) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_ACCEPT") menu_additem(Menu, tmptxt,"",ADMIN_ALL, MenuCb) formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_CANCEL") menu_setprop(Menu, MPROP_EXITNAME, tmptxt) menu_destroy(UserMenu[id]) menu_cancel(id) UserMenu[id] = Menu menu_display(id, UserMenu[id], 0) return PLUGIN_HANDLED } public ZakonczEdycje(failstate, Handle:query, error[], errnum, data[], size) { new id = data[0] if (failstate) { new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, 7) col_mess(id, id, "%L",LANG_PLAYER,"SRN_ERROR") } else { sql_online = true col_mess(id, id, "%L", LANG_PLAYER, "SRN_PASS_CHANGED") } } public usun_rezerwacje0(failstate, Handle:query, error[], errnum, data[], size) { new id = data[0] new tmptxt[64] formatex(tmptxt, 63, "%L^n%L:",LANG_PLAYER, "SRN_MENU_TITLE", LANG_PLAYER,"SRN_MENU_DEL") new Menu = menu_create(tmptxt,"cbUsunRezerwacje"); new sql_name[33], sql_id[6] if (failstate) { new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, 8) } else { sql_online = true new row = 1 new count_names = SQL_NumResults(query) if (!count_names) { col_mess(id, id, "%L", LANG_PLAYER, "SRN_NO_RES") menu_destroy(Menu) UserMenu[id] = 0 } else while (row++ <= count_names) { SQL_ReadResult(query, 0, sql_id, 5) SQL_ReadResult(query, 1, sql_name, 32) strtolower(sql_name) formatex(tmptxt, 63, "%s:", sql_id) menu_additem(Menu, sql_name, tmptxt) SQL_NextRow(query) } } formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_CANCEL") menu_setprop(Menu, MPROP_EXITNAME, tmptxt) menu_display(id, Menu, 0) UserMenu[id] = Menu return PLUGIN_HANDLED } public cbUsunRezerwacje(id, menu, item) { new sql_nick[35], sql_id[6] new acc, callback if (item != MENU_EXIT) { menu_item_getinfo(menu, item, acc, sql_id, 5, sql_nick, 32, callback) new query2[256], auth_id[36] #if AUTH == 0 || AUTH == 1 get_user_authid(id, auth_id, 35) #endif #if AUTH == 0 if (!valid_steam(auth_id)) #endif #if AUTH == 0 || AUTH == 2 get_user_ip(id, auth_id, 35, 1) #endif format(query2,255,"INSERT INTO srn_history VALUES (NULL, '%d', '%s', '%s', '%s')", get_systime(0), auth_id, sql_nick, auth_id) if (strlen(sql_nick)) { sql_nick[32] = 0 sql_nick[33] = str_to_num(sql_id) sql_nick[34] = id SQL_ThreadQuery(sql_handle, "UsunZHistorii", query2, sql_nick, 35) } } menu_destroy(menu) UserMenu[id] = 0 } public pokaz_rezerwacje0(failstate, Handle:query, error[], errnum, data[], size) { new id = data[0] new tmptxt[64] formatex(tmptxt, 63, "%L",LANG_PLAYER, "SRN_MENU_TITLE") new Menu = menu_create(tmptxt,"cbPokazRezerwacje") new sql_name[33] if (failstate) { new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, 9) } else { sql_online = true new row = 1 new count_names = SQL_NumResults(query) if (!count_names) { col_mess(id, id, "%L", LANG_PLAYER, "SRN_NO_RES") menu_destroy(Menu) UserMenu[id] = 0 } else { while (row++ <= count_names) { SQL_ReadResult(query, 1, sql_name, 32) strtolower(sql_name) menu_additem(Menu, sql_name) SQL_NextRow(query) } formatex(tmptxt, 63, "%L",LANG_PLAYER,"SRN_MENU_EXIT") menu_setprop(Menu, MPROP_EXITNAME, tmptxt) menu_display(id, Menu, 0) UserMenu[id] = Menu } } return PLUGIN_HANDLED } public cbPokazRezerwacje(id, menu, item) { menu_destroy(menu) UserMenu[id] = 0 } public WstawRezerwacje(failstate, Handle:query, error[], errnum, data[], size) { new id = data[0] new query2[256] if (failstate) { new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, 10) col_mess(id, id, "%L",LANG_PLAYER,"SRN_ERROR") } else { sql_online = true if (SQL_NumResults(query) < get_pcvar_num(pMax)) { format(query2,255,"INSERT INTO srn_res_wish VALUES (NULL, '%d', '%s', '%s', '%s')", get_systime(0), datas[id][2], datas[id][0], datas[id][1]) SQL_ThreadQuery(sql_handle, "ZakonczRezerwacje", query2, data, 1) } else { format(query2,255,"UPDATE srn_res_wish SET date='%d', nick='%s', password='%s' WHERE id = '%d' ORDER BY `date` ASC LIMIT 1", get_systime(0), datas[id][0], datas[id][1], SQL_ReadResult(query, 0)) SQL_ThreadQuery(sql_handle, "ZakonczRezerwacje", query2, data, 1) } } } public ZakonczRezerwacje(failstate, Handle:query, error[], errnum, data[], size) { new id = data[0] if (failstate) { new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, 11) col_mess(id, id, "%L",LANG_PLAYER,"SRN_ERROR") } else { sql_online = true col_mess(id, id, "%L",LANG_PLAYER,"SRN_ADD_CHANGE") } } public look4pass(id) { new password[35], pass = 0, count_names strtolower(actname[id]) get_user_info(id,"_res",password,34) new md5_pass[34] md5(password, md5_pass) //copy(password, 34, md5_pass) count_names = ArraySize(RegNick) new sql_nick[33], sql_pass[35] for (new i = 0; i < count_names; i++) { ArrayGetString(RegNick, i, sql_nick, 32) if (contain(actname[id], sql_nick)!=-1) { ArrayGetString(RegPass, i, sql_pass, 34) if (!equali(md5_pass, sql_pass)) { new userid = get_user_userid(id) server_cmd("%L",LANG_PLAYER,"SRN_PUNISH", userid) return PLUGIN_HANDLED } else pass = 1 } } if (pass) col_mess(id, id, "%L",LANG_PLAYER,"SRN_PASS_OK") return PLUGIN_CONTINUE } public load_names() { new query[256] formatex(query, 255,"SELECT `id`, `date`, `auth_id`, `nick`, password FROM srn_reservations") SQL_ThreadQuery(sql_handle, "load_names1", query) formatex(query, 255,"SELECT COUNT(`id`) FROM srn_res_wish") SQL_ThreadQuery(sql_handle, "load_rescount1", query) } public load_rescount1(failstate, Handle:query, error[], errnum) { if (failstate) { new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, 12) } else { wishw8ings = SQL_ReadResult(query, 0) } return PLUGIN_HANDLED } public load_names1(failstate, Handle:query, error[], errnum) { new time = get_systime(0) new row = 1, count = 0 new sql_nick[35], sql_pass[35], sql_id[6] new sql_time, cvar_time ArrayClear(RegNick) ArrayClear(RegPass) if (failstate) { new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, 13) } else { sql_online = true new count_names = SQL_NumResults(query) while (row++ <= count_names) { count++ SQL_ReadResult(query, 0, sql_id, 5) SQL_ReadResult(query, 3, sql_nick, 32) SQL_ReadResult(query, 4, sql_pass, 34) strtolower(sql_nick) if (strlen(sql_nick) && strlen(sql_pass)) { sql_time = SQL_ReadResult(query, 1) cvar_time = get_pcvar_num(pRes) if ((sql_time != 0) && (cvar_time != 0) && (time > (sql_time + cvar_time))) { new query2[256], sql_steam[36] SQL_ReadResult(query, 1, sql_steam, 35) format(query2,255,"INSERT INTO srn_history VALUES (NULL, '%d', '%s', '%s', 'SERVER')", time, sql_steam, sql_nick) sql_nick[32] = 0 sql_nick[33] = str_to_num(sql_id) sql_nick[34] = 0 SQL_ThreadQuery(sql_handle, "UsunZHistorii", query2, sql_nick, 35) } else { ArrayPushString(RegNick, sql_nick) ArrayPushString(RegPass, sql_pass) } } SQL_NextRow(query) } } return PLUGIN_HANDLED } public UsunZHistorii(failstate, Handle:query, error[], errnum, data[], size) { if (failstate) { new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, 14) } else { sql_online = true new query2[256] format(query2,255,"DELETE FROM srn_reservations WHERE `id` = '%d'", data[33]) SQL_ThreadQuery(sql_handle, "ZakonczUsuwanie", query2, data, 35) } } public ZakonczUsuwanie(failstate, Handle:query, error[], errnum, data[], size) { if (failstate) { new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, 15) } else { sql_online = true new id = data[34] if (!id) log_amx("%L",LANG_SERVER,"SRN_RES_DELETED", data) else if(is_user_connected(id)) col_mess(id, id, "%L",LANG_PLAYER,"SRN_RES_DELETED_PLAYER", data) } } public forward_client_userinfochanged(id, buffer) { new oldname[35], newname[35] get_user_name(id, oldname, sizeof oldname - 1) engfunc(EngFunc_InfoKeyValue, buffer, gName, newname, sizeof newname - 1) if (!equal(newname, oldname)) { copy(actname[id], 64, newname) look4pass(id) } } public taskSpam(id) { if (sql_online) { if(id && is_user_connected(id)) { col_mess(id, id, "%L",LANG_PLAYER,"SRN_SPAM") if (get_user_flags(id) & ADMIN_ACCESS && wishw8ings > 0) { col_mess(id, id, "%L",LANG_PLAYER,"SRN_WISH_W8ING", wishw8ings) } } } else { new Float:spam_time = get_pcvar_float(pSpam)*2.0 if (spam_time > 0.0) set_task(spam_time, "taskSpam", id) } } public client_connect(id) { copy(datas[id][0], 64, "") copy(datas[id][1], 35, "") copy(datas[id][2], 35, "") UserMenu[id] = 0 } public client_putinserver(id) { new Float:spam_time = get_pcvar_float(pSpam) if (spam_time > 0.0) set_task(spam_time, "taskSpam", id) } public client_authorized(id) { get_user_name(id, actname[id], 64) look4pass(id) } public client_disconnect(id) { copy(datas[id][0], 35, "") copy(datas[id][1], 35, "") copy(datas[id][2], 35, "") UserMenu[id] = 0 } public resreload(id) { if (id!=0 && !(get_user_flags(id)&ADMIN_ACCESS)) { console_print(id, "%L", LANG_PLAYER, "SRN_NO_ACCESS") return PLUGIN_HANDLED } set_task(0.1, "load_names", 1337) return PLUGIN_HANDLED } public sql_state() { if (!sql_online) sql_init() } public sql_init() { new host[64], user[64], pass[64], db[64] get_pcvar_string(pHost, host, 63) get_pcvar_string(pUser, user, 63) get_pcvar_string(pPass, pass, 63) get_pcvar_string(pDb, db, 63) sql_handle = SQL_MakeDbTuple(host, user, pass, db) set_task(0.1, "srn_online") } public srn_online() { new query[64] format(query, 63, "SELECT id FROM srn_connect") SQL_ThreadQuery(sql_handle, "srn_online1", query) } public srn_online1(failstate, Handle:query, error[], errnum) { new query2[256] if (failstate) { new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, 16) log_amx("%L", LANG_SERVER, "SRN_CONN_ERROR") } else { sql_online = true if (!SQL_NumResults(query)) { format(query2,255,"INSERT INTO srn_connect VALUES ('1', '%d')", get_pcvar_num(pRes)) SQL_ThreadQuery(sql_handle, "srn_online2", query2) } else { format(query2,255,"UPDATE srn_connect SET res_time='%d' WHERE id = 1 LIMIT 1", get_pcvar_num(pRes)) SQL_ThreadQuery(sql_handle, "srn_online2", query2) } } return PLUGIN_CONTINUE } public srn_online2(failstate, Handle:query, error[], errnum) { if (failstate) { sql_online = false new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, 17) log_amx("%L", LANG_SERVER, "SRN_CONN_ERROR") } else { sql_online = true log_amx("%L", LANG_SERVER, "SRN_ONLINE") set_task(0.1, "load_names", 666) } return PLUGIN_CONTINUE } public srn_install(failstate, Handle:query, error[], errnum) { if (failstate) { new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, 18) log_amx("%L", LANG_SERVER, "SRN_INSTALL_FAIL") } else { sql_online = true log_amx("%L", LANG_SERVER, "SRN_INSTALL_OK") sql_init() } return PLUGIN_CONTINUE } public plugin_end() { if (sql_handle) SQL_FreeHandle(sql_handle) } MySqlX_ThreadError(szQuery[], error[], errnum, failstate, id) { if (failstate == TQUERY_CONNECT_FAILED) { sql_online = false log_amx("%L", LANG_SERVER, "TCONN_FAILED") } else if (failstate == TQUERY_QUERY_FAILED) { log_amx("%L", LANG_SERVER, "TQUERY_FAILED") } log_amx("%L", LANG_SERVER, "TQUERY_ERROR", id) log_amx("%L", LANG_SERVER, "TQUERY_MSG", error, errnum) log_amx("%L", LANG_SERVER, "TQUERY_STATEMENT", szQuery) if (contain(error, "doesn't exist")!=-1) { new query2[2048], len len += formatex(query2[len], 2048-len, "CREATE TABLE IF NOT EXISTS `srn_connect` ( `id` int(6) unsigned NOT NULL AUTO_INCREMENT, `res_time` int(11) unsigned NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;") len += formatex(query2[len], 2048-len, "CREATE TABLE IF NOT EXISTS `srn_history` ( `id` int(6) unsigned NOT NULL AUTO_INCREMENT, `date` int(11) unsigned NOT NULL, `auth_id` varchar(36) NOT NULL, `nick` varchar(35) NOT NULL, `remove` varchar(36) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;") len += formatex(query2[len], 2048-len, "CREATE TABLE IF NOT EXISTS `srn_reservations` ( `id` int(6) unsigned NOT NULL AUTO_INCREMENT, `date` int(11) unsigned NOT NULL, `auth_id` varchar(36) NOT NULL, `nick` varchar(35) NOT NULL, `password` varchar(35) NOT NULL, `approver` varchar(36) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;") len += formatex(query2[len], 2048-len, "CREATE TABLE IF NOT EXISTS `srn_res_wish` ( `id` int(6) unsigned NOT NULL AUTO_INCREMENT, `date` int(11) unsigned NOT NULL, `auth_id` varchar(36) NOT NULL, `nick` varchar(35) NOT NULL, `password` varchar(35) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;") len += formatex(query2[len], 2048-len, "CREATE TABLE IF NOT EXISTS `srn_users` ( `id` int(6) unsigned NOT NULL AUTO_INCREMENT, `nick` varchar(36) NOT NULL, `pass` varchar(35) NOT NULL, `mail` varchar(50) NOT NULL, `access` int(2) unsigned NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `nick` (`nick`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;") SQL_ThreadQuery(sql_handle, "srn_install", query2) } if (id == 18) pause("a") } stock col_mess(id, sender, string[], any:...) { if (!is_user_connected(id)) return PLUGIN_HANDLED static szMessage[128] szMessage[0] = 0x01 vformat(szMessage[1], 127, string, 4) replace_all(szMessage, 127, "!n", "^x01") replace_all(szMessage, 127, "!t", "^x03") replace_all(szMessage, 127, "!g", "^x04") message_begin(MSG_ONE_UNRELIABLE, gMsgidSayText, _, id) write_byte(sender) write_string(szMessage) message_end() return PLUGIN_CONTINUE } stock valid_steam(steamid[]) { if (equal("4294967295", steamid) || equal("STEAM_666:88:666", steamid) || equal("STEAM_154:88:666", steamid) || equal("unknown", steamid) || equal("HLTV", steamid) || equal("STEAM_ID_LAN", steamid) || equal("VALVE_ID_LAN", steamid) || equal("VALVE_ID_PENDING", steamid) || equal("STEAM_ID_PENDING", steamid) || equal("", steamid) ) return 0 return 1 }