traka Postat Februarie 24 Postat Februarie 24 (editat) Descriere: Acest plugin este un instrument avansat de administrare creat pentru serverele publice de CS 1.6. Combină trei module esențiale: un sistem de detectare a proxy/VPN-urilor, un sistem de monitorizare a jucătorilor suspecți și modulul unic "Shadow Mode" pentru controlul trișorilor fără a-i bana imediat. Funcții Principale: 1. Anti-VPN & Proxy (Socket System) Verifică automat fiecare jucător care intră pe server folosind API-ul ip-api.com. nVault Cache: Rezultatele sunt salvate local. Dacă un jucător a fost verificat o dată, a doua oară verificarea este instantanee (nu încarcă serverul). Pedepse configurabile: Poți alege între KICK sau BAN (pe minute) prin CVAR-uri. 2. Shadow Mode (Ultimate Troll/Admin Control) Când un admin activează Shadow pe un jucător (din meniu), acesta devine complet inofensiv: Only Knife: Jucătorul este forțat să folosească doar cuțitul. Orice armă ridicată este aruncată/blocată. No Damage: Jucătorul nu poate face damage nimănui (nici cu cuțitul, nici cu grenada). Attack Blocker: Butoanele de atac sunt blocate prin PreThink. Visual Alert: Jucătorul sub Shadow primește un Glow (contur) roșu discret. Restrictions: Are Chat-ul blocat, Voice-ul blocat și meniul de Buy dezactivat. Anti-Name Change: Nu își poate schimba numele cât timp este sub Shadow. 3. Priority Suspect System Identifică jucătorii care se reconectează prea rapid (metodă folosită de codati ). Adminii sunt alertați automat în chat când un "suspect" intră pe server. Comenzi & CVAR-uri: Comenzi Admin: say /vpnmenu - Deschide meniul principal de gestionare a jucătorilor (Shadow ON/OFF, Info IP, Status Suspect). CVAR-uri (se adaugă în amxx.cfg): vpn_punishment 1 (0 = Kick / 1 = Ban) vpn_bantime 10 (Timpul de ban în minute pentru VPN) Instalare: Copiați vpnleaguecs.sma în addons/amxmodx/scripting. Compilați scriptul (necesită modulele: Fakemeta, HamSandwich, Sockets, nVault). Copiați fișierul .amxx rezultat în addons/amxmodx/plugins. Adăugați linia vpnleaguecs.amxx în plugins.ini. Asigurați-vă că modulul sockets este activat în modules.ini Link Download: https://limewire.com/d/KJz3M#TUKsGvoXxX Sursă Cod (.sma) #include <amxmodx> #include <amxmisc> #include <fun> #include <hamsandwich> #include <fakemeta> #include <nvault> #include <sockets> #define PLUGIN "Shadow PRO + AntiVPN" #define VERSION "3.4" #define AUTHOR "trk/Yvezzaint" #define TAG "^4[LEAGUECS-ALERTA]^1" #define ADMIN_ACCESS ADMIN_BAN new vpn_punishment, BanTime, VaultHandle; new Float:g_LastDisconnect[33], bool:g_IsSuspect[33], g_SuspectScore[33], bool:g_ShadowMode[33]; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_clcmd("say /vpnmenu", "cmdMainMenu", ADMIN_ACCESS); register_forward(FM_ClientUserInfoChanged, "fw_ClientUserInfoChanged"); register_event("CurWeapon", "fw_CurWeapon", "be", "1=1"); register_clcmd("say", "block_chat"); register_clcmd("say_team", "block_chat"); register_clcmd("buy", "block_action"); register_clcmd("client_buy_open", "block_action"); register_forward(FM_Voice_SetClientListening, "fw_VoiceListen"); RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn", 1); RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage"); register_forward(FM_PlayerPreThink, "fw_PlayerPreThink"); bind_pcvar_num(register_cvar("vpn_punishment", "1"), vpn_punishment); bind_pcvar_num(register_cvar("vpn_bantime", "10"), BanTime); VaultHandle = nvault_open("vpn_storage"); } public plugin_end() { if(VaultHandle != INVALID_HANDLE) nvault_close(VaultHandle); } public fw_ClientUserInfoChanged(id) { if(!is_user_connected(id)) return FMRES_IGNORED; static oldname[32], newname[32]; get_user_name(id, oldname, charsmax(oldname)); get_user_info(id, "name", newname, charsmax(newname)); if(!equal(oldname, newname)) { if(g_ShadowMode[id]) { set_user_info(id, "name", oldname); client_print(id, print_chat, "[SHADOW] Nu iti poti schimba numele!"); return FMRES_SUPERCEDE; } } return FMRES_IGNORED; } public fw_CurWeapon(id) { if(!is_user_alive(id) || !g_ShadowMode[id]) return PLUGIN_CONTINUE; if(read_data(2) != CSW_KNIFE) { engclient_cmd(id, "weapon_knife"); client_print(id, print_center, "SHADOW: Doar CUTITUL este permis!"); } return PLUGIN_CONTINUE; } public fw_PlayerPreThink(id) { if(!is_user_alive(id) || !g_ShadowMode[id]) return; new buttons = pev(id, pev_button); if(buttons & IN_ATTACK) set_pev(id, pev_button, buttons & ~IN_ATTACK); if(random_num(1, 500) == 7) set_pev(id, pev_button, buttons | IN_JUMP); } public fw_PlayerSpawn(id) { if(is_user_alive(id) && g_ShadowMode[id]) { set_task(0.2, "force_knife", id); } } public force_knife(id) { if(is_user_alive(id)) { strip_user_weapons(id); give_item(id, "weapon_knife"); } } public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damagebits) { if(!is_user_connected(attacker)) return HAM_IGNORED; if(g_ShadowMode[attacker]) return HAM_SUPERCEDE; return HAM_IGNORED; } public block_chat(id) { if(g_ShadowMode[id]) { client_print(id, print_chat, "[SHADOW] Chat dezactivat!"); return PLUGIN_HANDLED; } return PLUGIN_CONTINUE; } public fw_VoiceListen(receiver, sender, bool:listen) { if(is_user_connected(sender) && g_ShadowMode[sender]) { engfunc(EngFunc_SetClientListening, receiver, sender, false); return FMRES_SUPERCEDE; } return FMRES_IGNORED; } public block_action(id) { if(g_ShadowMode[id]) return PLUGIN_HANDLED; return PLUGIN_CONTINUE; } public cmdMainMenu(id) { if(!(get_user_flags(id) & ADMIN_ACCESS)) return PLUGIN_HANDLED; new menu = menu_create("\r[Monitor] \yLista Jucatori:", "menu_handler"); new players[32], pnum, name[32], info[3], display[128]; get_players(players, pnum); for(new i = 0; i < pnum; i++) { new tempid = players[i]; get_user_name(tempid, name, charsmax(name)); num_to_str(tempid, info, charsmax(info)); if(g_ShadowMode[tempid]) formatex(display, 127, "\y%s \r[SHADOW-ON]", name); else if(g_IsSuspect[tempid]) formatex(display, 127, "\r%s \y[SUSPECT]", name); else formatex(display, 127, "%s", name); menu_additem(menu, display, info); } menu_display(id, menu); return PLUGIN_HANDLED; } public menu_handler(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new data[6], access, callback; menu_item_getinfo(menu, item, access, data, charsmax(data), _, _, callback); new target = str_to_num(data); if(!is_user_connected(target)) return PLUGIN_HANDLED; new submenu = menu_create("\r[Control Shadow]", "shadow_handler"); menu_additem(submenu, g_ShadowMode[target] ? "Dezactiveaza Shadow" : "Activeaza Shadow (Total Troll)", data); menu_additem(submenu, "Informatii IP", data); menu_display(id, submenu); menu_destroy(menu); return PLUGIN_HANDLED; } public shadow_handler(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new data[6], access, callback; menu_item_getinfo(menu, item, access, data, charsmax(data), _, _, callback); new target = str_to_num(data); if(!is_user_connected(target)) return PLUGIN_HANDLED; new t_name[32], a_name[32]; get_user_name(target, t_name, 31); get_user_name(id, a_name, 31); if(item == 0) { g_ShadowMode[target] = !g_ShadowMode[target]; if(g_ShadowMode[target]) { force_knife(target); set_user_rendering(target, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 60); client_print_color(0, print_team_default, "%s Admin ^3%s ^1activat ^4SHADOW ^1pe ^3%s", TAG, a_name, t_name); } else { set_user_rendering(target); client_print_color(0, print_team_default, "%s Admin ^3%s ^1dezactivat ^4SHADOW ^1pe ^3%s", TAG, a_name, t_name); } } else { new szIp[16]; get_user_ip(target, szIp, charsmax(szIp), 1); client_print(id, print_chat, "[INFO] %s | IP: %s | Scor: %d", t_name, szIp, g_SuspectScore[target]); } menu_destroy(menu); return PLUGIN_HANDLED; } public client_putinserver(id) { if(is_user_bot(id)) return; g_ShadowMode[id] = false; g_IsSuspect[id] = false; g_SuspectScore[id] = 0; new szIp[16]; get_user_ip(id, szIp, charsmax(szIp), 1); new CacheResult[2], Timestamp; if(nvault_lookup(VaultHandle, szIp, CacheResult, charsmax(CacheResult), Timestamp) == 0) check_vpn_socket(id, szIp); else if(equal(CacheResult, "Y")) Punish(id, szIp); } public check_vpn_socket(id, const ip[]) { new err, socket = socket_open("ip-api.com", 80, SOCKET_TCP, err); if (socket <= 0) return; new request[256]; formatex(request, charsmax(request), "GET /json/%s?fields=proxy HTTP/1.1\r\nHost: ip-api.com\r\nConnection: close\r\n\r\n", ip); socket_send(socket, request, charsmax(request)); new data[32]; formatex(data, charsmax(data), "%d %s", id, ip); set_task(1.5, "read_socket_data", socket, data, charsmax(data)); } public read_socket_data(data[32], socket) { new response[512]; socket_recv(socket, response, charsmax(response)); socket_close(socket); new szId[3], szIp[16]; parse(data, szId, charsmax(szId), szIp, charsmax(szIp)); new id = str_to_num(szId); if(containi(response, "^"proxy^":true") != -1) { nvault_set(VaultHandle, szIp, "Y"); if(is_user_connected(id)) Punish(id, szIp); } else { nvault_set(VaultHandle, szIp, "N"); } } public Punish(id, const ip[]) { if(vpn_punishment == 1) { server_cmd("amx_banip %d #%d ^"VPN Detectat^"", BanTime, get_user_userid(id)); } else { server_cmd("kick #%d ^"Dezactiveaza VPN-ul!^"", get_user_userid(id)); } } public client_disconnected(id) { g_LastDisconnect[id] = get_gametime(); g_ShadowMode[id] = false; } Editat Februarie 24 de traka 1 1
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum