Code: Select all
#include <amxmodx>#include <amxmisc>#include <fvault> #define BUFFER_LENGTH 8 #define DATE_LENGTH 18#define NAME_LENGTH 32#define IP_LENGTH 16#define REASON_LENGTH 16#define DATA_LENGTH (REASON_LENGTH + NAME_LENGTH + DATE_LENGTH + IP_LENGTH ) //reiketu didint data buffer, jeigu reikia ilgesniu reason.#define maxItems 6 #define ADMINAS ADMIN_CVAR new g_Chars[maxItems] = { '1', '2', '3', '4', '5', '6' }new g_Ids[33][BUFFER_LENGTH] new g_PlayerInfos[33][DATA_LENGTH] /// galetu buti naudojama id uzkrovimui, kad nereiktu daug kartu to var kurti///new g_ID[BUFFER_LENGTH] // Slowhackstatic const g_DB[] = "duomenubaze"static const g_DB_BLACKLIST[] = "blacklist"static const g_CFG[] = "resource/UI/gunmenu" static const MAX_TRIES = 4 /// gal reiktu daugiau/maziau kartu ?new g_tries[33] /// bandymu patikrinti ar uzsikrove id skaicius static const clearTaskID = 20100;static const Float:clearTaskTime = 0.5; static const loadCFGTaskID = 20300;static const Float:loadCFGTaskTime = 0.5; static const punishTaskID = 20400;static const Float:punishTaskTime = 1.0; public plugin_init() { register_plugin("Blacklist - Antiproxy Sistema", "0.2 alpha", " Ernis - Shake'it") register_concmd("bl", "blacklistID", ADMINAS, "Blacklistinam zaidejo id") register_concmd("infoid", "infoID" , ADMINAS, "Informacija apie zaideju id")} public client_connect(id) { g_Ids[id][0]=0; g_tries[id]=0; /// ivykdome vartotojo cfg, kuris turetu nustatyti musu paslepta id. ivykdyti_vartotojo_cfg(id) set_task(loadCFGTaskTime, "uzkrautiID", id+loadCFGTaskID);} public uzkrautiID(id){ id-=loadCFGTaskID; new str[BUFFER_LENGTH]; get_user_info(id,"id",str, BUFFER_LENGTH-1); str[BUFFER_LENGTH-1]=0; /// ar jau turi priskirta id? if(strlen(str)>1) { copy( g_Ids[id], BUFFER_LENGTH, str ); if(tikrinamID(id)) /// jeigu ne blacklisted, irasom prisijungima { fvault_save(id); } isvalyti_set_info(id+clearTaskID); /// naudojimas task nebutinas, todel kvieciame tiesiogiai. } else if(g_tries[id]<MAX_TRIES) { g_tries[id]++; set_task(loadCFGTaskTime, "uzkrautiID", id+loadCFGTaskID); } else { /// neturi id, sugeneruojam genID(g_Ids[id]) new nickas[32]; get_user_name(id, nickas, charsmax(nickas)); new con[25]; formatex(con, 24,"sugeneruotas id: ^" %s ^", zaidejui:^" %s^"",g_Ids[id],nickas); server_print(con); con[24] = 0 issaugoti_vartotojo_cfg(id); /// issaugome vartotojo cfg tik tada kai naujas id yra generuojamas set_task(clearTaskTime, "isvalyti_set_info", id+clearTaskID);///isvalome, kad nepatektu i config.cfg fvault_save(id); ///sugeneruotas naujas id, issaugom. }} public bool:tikrinamID(id) { new nickas[32]; get_user_name(id, nickas, charsmax(nickas)) if(g_Ids[id][0]=='1') { ///zmogus yra blackliste, kick/ban? server_print("Prisijunge zaidejas su blacklisted id: %s, nick: %s",g_Ids[id], nickas); set_task(punishTaskTime, "nubaustiZaideja", id+punishTaskID); if(fvault_get_data(g_DB_BLACKLIST, g_Ids[id], g_PlayerInfos[id], DATA_LENGTH-1)) { ///nuskaitome is blacklist failo ///sekmingai nuskaite, galima kazka daryti su duomenimis server_print("BLACKLIST: %s",g_PlayerInfos[id]); } else { ///nerasta faile? } return false; } else { server_print("Prisijunge zaidejas su id: %s, nick: %s",g_Ids[id], nickas); if(fvault_get_data(g_DB, g_Ids[id], g_PlayerInfos[id], DATA_LENGTH-1)) { ///sekmingai nuskaite, galima kazka daryti su duomenimis server_print("DATABASE: %s", g_PlayerInfos[id]); fvault_save(id); } else { ///nerasta faile? } return true; } return false;} public fvault_save(id) { static ip[IP_LENGTH], g_Date[DATE_LENGTH]; get_user_ip(id, ip, charsmax(ip), 1) get_time("%c",g_Date, DATE_LENGTH); formatex(g_PlayerInfos[id], DATA_LENGTH-1 , "^"%s^" ^"%s^"",ip, g_Date[id]) fvault_set_data(g_DB,g_Ids[id], g_PlayerInfos[id]) } public fvault_save_blacklist(id, reason[]) { static ip[IP_LENGTH], g_Date[DATE_LENGTH]; get_user_ip(id, ip, charsmax(ip), 1) get_time("%c",g_Date, DATE_LENGTH); formatex(g_PlayerInfos[id], DATA_LENGTH-1 , "^"%s^" ^"%s^" ^"%s^"", ip, g_Date[id], reason) fvault_set_data(g_DB_BLACKLIST,g_Ids[id], g_PlayerInfos[id])} public issaugoti_vartotojo_cfg(id) { client_cmd(id, "setinfo ^"id^" ^"%s^"", g_Ids[id]); ///irasom i set info, kad galetume issaugoti client_cmd(id, "writecfg %s", g_CFG); // sukuriame cfg su jame esanciu id kintamajame nurodytoje direktorijoje client_cmd(id, "clear"); // isvalom konsole saugumo sumetimais} public ivykdyti_vartotojo_cfg(id) { client_cmd(id, "exec %s.cfg", g_CFG); // uzkrauname cfg su jame esanciu id kintamajame nurodytoje direktorijoje client_cmd(id, "exec config.cfg"); // uzkrauname numatyta zaidejo.cfg client_cmd(id, "clear"); // isvalom konsole saugumo sumetimais} public isvalyti_set_info(id){ id-=clearTaskID; client_cmd(id, "setinfo ^"id^" ^"^"") /// paliekame tuscia string po issaugojimo, kad neisirasytu i config.cfg faila} public infoID(id, level, cid) { if (!cmd_access(id, level, cid, 1)) return 1 else { static zaidejai[32], kiekis get_players(zaidejai, kiekis) console_print(id, "%32s%20s%20s%20s", "Nick'as", "ID", "IP", "steamID") static nickas[32], ip[16], steamid[64] for (new visi = 0; visi < kiekis; visi++) { get_user_name(zaidejai[visi], nickas, charsmax(nickas)) get_user_ip(zaidejai[visi], ip, charsmax(ip), 1) get_user_authid(zaidejai[visi], steamid, charsmax(steamid)) console_print(id, "%32s%16s%16s%16s", nickas, g_Ids[visi], ip, steamid) } } return 1} public nubaustiZaideja(id) { id-=punishTaskID; // veiksmas client_cmd(id, "quit"); // testavimui} public blacklistID(id, level, cid) { if (!access(id, level)) return 1; else { new arg[32]; new arg2[REASON_LENGTH]; read_argv(1, arg, charsmax(arg)); read_argv(2, arg2, charsmax(arg2)); new uid = cmd_target(id, arg, CMDTARGET_ALLOW_SELF) if (!uid) { console_print(id,"Zaidejas su jusu nurodytu id nerastas") return 1 } new nickas[32]; get_user_name(uid, nickas, charsmax(nickas)) g_Ids[uid][0]='1'; ///irasom blacklist flag'a i vartotojo id issaugoti_vartotojo_cfg(uid); ///saugom :) set_task(clearTaskTime, "isvalyti_set_info", id+clearTaskID); set_task(clearTaskTime + punishTaskTime, "nubaustiZaideja", uid+punishTaskID); fvault_save_blacklist(uid,arg2); console_print(id,"Zaidejas idetas i blacklist id: %s nick: %s",g_Ids[uid], nickas) } return 1} public genID(id_string[]) { id_string[BUFFER_LENGTH-2] = '0' ///zmogus nera blackliste for(new i=0; i < BUFFER_LENGTH-2; i++) { id_string[i] = g_Chars[random_num(0, maxItems-1)] } id_string[BUFFER_LENGTH-1] = 0;}