Descarcare: CLICK
- SMA | Afiseaza codul
#include <amxmodx> #include <amxmisc> #include <engine> #include <fakemeta_util> #include <hamsandwich> #define PLUGIN_NAME "Anti Rush" #define PLUGIN_VERSION "1.0" #define PLUGIN_AUTHOR "YONTU" // credite Psycrow (sursa pluginului lui: http://gamebanana.com/gamefiles/3038 ) // -------------------------------------------- // ------------- DE EDITAT --------------- // -------------------------------------------- #define ADMIN_ACCESS ADMIN_IMMUNITY new const force_field_model[] = "models/aura8.mdl"; new const tag[] = "[ANTI RUSH]"; // -------------------------------------------- // ------------- DE EDITAT --------------- // -------------------------------------------- new const force_field_class[] = "forcefield"; new Array:ff_count, Array:ff_origin_x, Array:ff_origin_y, Array:ff_origin_z; new bool:g_save_cpl, bool:can_pass; new cvar_ff_color, cvar_ff_restricted_team, cvar_remove_ff; public plugin_init() { register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR); register_cvar("no_rush_", PLUGIN_VERSION, FCVAR_SPONLY|FCVAR_SERVER); set_cvar_string("no_rush_", PLUGIN_VERSION); register_touch(force_field_class, "player", "fw_touch_player"); register_event("HLTV", "event_NewRound", "a", "1=0", "2=0"); register_clcmd("say /camp", "cmd_open_menu"); register_clcmd("say_team /camp", "cmd_open_menu"); cvar_ff_color = register_cvar("ff_color", "0"); // 0 = random colors | 1 = t colors | 2 = ct colors cvar_ff_restricted_team = register_cvar("ff_restricted_access", "0"); // 0 = both | 1 = only t | 2 = only ct cvar_remove_ff = register_cvar("ff_remove_after", "25"); // int number new map[32]; get_mapname(map, charsmax(map)); formatex(map, charsmax(map),"%s.ini",map); new cfg_dir[64], dir, file[128]; get_configsdir(cfg_dir, charsmax(cfg_dir)); formatex(cfg_dir, charsmax(cfg_dir), "%s/force_field", cfg_dir); dir = open_dir(cfg_dir, file, charsmax(file)); if(!dir) mkdir(cfg_dir); while(next_file(dir, file, charsmax(file))) { if(file[0] == '.') continue; if(equal(map, file)) { format(file, charsmax(file), "%s/%s", cfg_dir, file); get_origins(file); break; } } } public plugin_precache() { precache_model(force_field_model); } public plugin_end() { ArrayDestroy(ff_count); ArrayDestroy(ff_origin_x); ArrayDestroy(ff_origin_y); ArrayDestroy(ff_origin_z); } public plugin_natives() { ff_count = ArrayCreate(1, 1); ff_origin_x = ArrayCreate(1, 1); ff_origin_y = ArrayCreate(1, 1); ff_origin_z = ArrayCreate(1, 1); } public set_maps_cfg() { new map1[32]; get_mapname(map1, charsmax(map1)); formatex(map1, charsmax(map1), "%s.ini", map1); new cfg_dir[64], file[128]; get_configsdir(cfg_dir, charsmax(cfg_dir)); formatex(cfg_dir, charsmax(cfg_dir), "%s/force_field", cfg_dir); formatex(file, charsmax(file),"%s/%s",cfg_dir, map1); if(!dir_exists(cfg_dir)) mkdir(cfg_dir); delete_file(file); new origins_count = ArraySize(ff_count); if(!origins_count) return; new text[128], i, Float:fOrigin[3], ent; for(i = 0; i < origins_count; i++) { ent = ArrayGetCell(ff_count, i); //drop_to_floor(ent); pev(ent, pev_origin, fOrigin); format(text, charsmax(text),"^"%f^" ^"%f^" ^"%f^"", fOrigin[0], fOrigin[1], fOrigin[2]); write_file(file, text, -1); } } public get_origins(dir[128]) { new map[32]; get_mapname(map, charsmax(map)); new file = fopen(dir, "rt"); if(!file) { server_print("%s Originile hartii %s sunt invalide. Creeaza altele.", tag, map); return; } while(file && !feof(file)) { new line[101]; fgets(file, line, charsmax(line)); if(line[0] == ';' || equal(line, "")) continue; new iOrigins[3][32], Float:fOrigins[3]; parse(line, iOrigins[0], charsmax(iOrigins[]), iOrigins[1], charsmax(iOrigins[]), iOrigins[2], charsmax(iOrigins[])); fOrigins[0] = str_to_float(iOrigins[0]); fOrigins[1] = str_to_float(iOrigins[1]); fOrigins[2] = str_to_float(iOrigins[2]); //origin[count][0] = str_to_float(iOrigins[0]); //origin[count][1] = str_to_float(iOrigins[1]); //origin[count++][2] = str_to_float(iOrigins[2]); create_spawn(fOrigins); } fclose(file); can_pass = false; if(!ArraySize(ff_count)) server_print("%s Nu am gasit nicio origine pentru harta %s", tag, map); else if(ArraySize(ff_count) == 1) server_print("%s Am gasit o singura origine unde pot creea un camp de forta pentru harta %s", tag, map); else server_print("%s Am gasit %d origini pentru harta %s", tag, ArraySize(ff_count), map); } public event_NewRound() { set_task(random_float(1.0, 2.0), "task_create_ff", 231); set_task(float(get_pcvar_num(cvar_remove_ff)), "task_remove_ff", 232); } public task_create_ff() { can_pass = false; new origins_count = ArraySize(ff_count); if(!origins_count) return; new i, classname[32], ent; for(i = 0; i < origins_count; i++) { ent = ArrayGetCell(ff_count, i); pev(ent, pev_classname, classname, charsmax(classname)); if(!equal(classname, force_field_class)) continue; entity_set_int(ent, EV_INT_effects, entity_get_int(ent, EV_INT_effects) & ~EF_NODRAW); } ColorChat(0, "!g%s!t Timp de!g %d!t secunde nu poti face!n rush!t.", tag, get_pcvar_num(cvar_remove_ff)); } public task_remove_ff() { can_pass = true; new origins_count = ArraySize(ff_count); if(!origins_count) return; new i, classname[32], ent; for(i = 0; i < origins_count; i++) { ent = ArrayGetCell(ff_count, i); pev(ent, pev_classname, classname, charsmax(classname)); if(!equal(classname, force_field_class)) continue; entity_set_int(ent, EV_INT_effects, entity_get_int(ent, EV_INT_effects) | EF_NODRAW); } ColorChat(0, "!g%s!t Cele!g %d!t secunde au expirat. Acum poti face!n rush!t.", tag, get_pcvar_num(cvar_remove_ff)); } public cmd_open_menu(id) { if(!(get_user_flags(id) & ADMIN_ACCESS)) { ColorChat(id, "!4%s!1 Doar!3 ADMINII!1 au acces!", tag); return PLUGIN_HANDLED; } new menu_name[128], origins_count = ArraySize(ff_count); formatex(menu_name, charsmax(menu_name), "\wCreeaza\r campuri de forta\w^nTotal:\y %d", origins_count); new menu = menu_create(menu_name, "menu_handler"); menu_additem(menu, "\wCreeaza un camp", "1", 0); if(!origins_count) { menu_additem(menu, "\dSterge ultimul camp creeat", "2", 0); menu_additem(menu, "\dSterge toate campurile", "3", 0); } else { menu_additem(menu, "\wSterge ultimul camp creeat", "2", 0); menu_additem(menu, "\wSterge toate campurile", "3", 0); } if(!g_save_cpl) menu_additem(menu, "\dSalveaza toate campurile de forta", "4", 0); else menu_additem(menu, "\wSalveaza toate campurile de forta", "4", 0); menu_setprop(menu, MPROP_EXIT, MEXIT_ALL); menu_display(id, menu, 0); return PLUGIN_HANDLED; } public menu_handler(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new origins_count = ArraySize(ff_count); switch(item) { case 0: { g_save_cpl = true; new Float:fOrigins[3]; fm_get_aim_origin(id, fOrigins); create_spawn(fOrigins); cmd_open_menu(id); } case 1: { if(!origins_count) { ColorChat(id, "!g%s !tNu am gasit niciun camp de forta. Creaza mai intai unul.", tag); menu_destroy(menu); cmd_open_menu(id); return PLUGIN_HANDLED; } origins_count--; remove_entity(ArrayGetCell(ff_count, origins_count)); ArrayDeleteItem(ff_count, origins_count); ArrayDeleteItem(ff_origin_x, origins_count); ArrayDeleteItem(ff_origin_y, origins_count); ArrayDeleteItem(ff_origin_z, origins_count); ColorChat(id, "!g%s !tCamp eliminat cu succes.", tag); g_save_cpl = true; cmd_open_menu(id); } case 2: { if(!origins_count) { ColorChat(id, "!g%s !tNu am gasit niciun camp de forta. Creaza mai intai unul.", tag); cmd_open_menu(id); return PLUGIN_HANDLED; } new i; for(i = 0; i < origins_count; i++) remove_entity(ArrayGetCell(ff_count, i)); ArrayClear(ff_count); ArrayClear(ff_origin_x); ArrayClear(ff_origin_y); ArrayClear(ff_origin_z); ColorChat(id, "!g%s !tAm sters toate cele !g%d !tcampuri de forta.", tag, origins_count); g_save_cpl = true; cmd_open_menu(id); } case 3: { if(!g_save_cpl) { cmd_open_menu(id); return PLUGIN_HANDLED; } g_save_cpl = false; set_maps_cfg(); ColorChat(id, "!g%s !tAm salvat cu succes toate campurile de forta.", tag); cmd_open_menu(id); } } menu_destroy(menu); return PLUGIN_HANDLED; } public create_spawn(Float:fOrigins[3]) { new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")); if(!pev_valid(ent)) return; ArrayPushCell(ff_count, ent); ArrayPushCell(ff_origin_x, fOrigins[0]); ArrayPushCell(ff_origin_y, fOrigins[1]); ArrayPushCell(ff_origin_z, fOrigins[2]); set_pev(ent, pev_origin, fOrigins); engfunc(EngFunc_SetModel, ent, force_field_model); set_pev(ent, pev_solid, SOLID_TRIGGER); // BBOX set_pev(ent, pev_movetype, MOVETYPE_NONE); set_pev(ent, pev_classname, force_field_class); set_pev(ent, pev_renderfx, kRenderFxGlowShell); set_pev(ent, pev_rendermode, kRenderTransAlpha); set_pev(ent, pev_renderamt, 50.0); new Float:color[3], cvar = get_pcvar_num(cvar_ff_color); color[0] = cvar == 0 ? random_float(0.0, 255.0) : cvar == 1 ? 255.0 : 0.0; color[1] = cvar == 0 ? random_float(0.0, 255.0) : cvar == 1 ? 0.0 : 0.0; color[2] = cvar == 0 ? random_float(0.0, 255.0) : cvar == 1 ? 0.0 : 255.0; set_pev(ent, pev_rendercolor, color); new Float:mins[3] = {-184.7, -63.5, -132.9}; new Float:maxs[3] = {184.7, 63.5, 132.9}; engfunc(EngFunc_SetSize, ent, mins, maxs); entity_set_int(ent, EV_INT_effects, entity_get_int(ent, EV_INT_effects) & ~EF_NODRAW); drop_to_floor(ent); } public fw_touch_player(touched, toucher) { new access = get_pcvar_num(cvar_ff_restricted_team); if(get_user_team(toucher) == 1 && access == 2 || get_user_team(toucher) == 2 && access == 1 || can_pass) return; new Float:fOriginsToucher[3], Float:fOriginsEnt[3], i; pev(touched, pev_origin, fOriginsToucher); pev(toucher, pev_origin, fOriginsEnt); for(i = 0; i < 3; i++) { fOriginsEnt -= fOriginsToucher; fOriginsEnt *= 10.0; } set_pev(toucher, pev_velocity, fOriginsEnt); set_pev(toucher, pev_impulse, fOriginsEnt); ColorChat(toucher, "!g%s !tTocmai te-ai izbit de un camp de forta.", tag); } stock ColorChat(id, String[], any:...) { static szMesage[192]; vformat(szMesage, charsmax(szMesage), String, 3); replace_all(szMesage, charsmax(szMesage), "!n", "^1"); replace_all(szMesage, charsmax(szMesage), "!t", "^3"); replace_all(szMesage, charsmax(szMesage), "!g", "^4"); static g_msg_SayText = 0; if(!g_msg_SayText) g_msg_SayText = get_user_msgid("SayText"); new Players[32], iNum = 1, i; if(id) Players[0] = id; else get_players(Players, iNum, "ch"); for(--iNum; iNum >= 0; iNum--) { i = Players[iNum]; message_begin(MSG_ONE_UNRELIABLE, g_msg_SayText, _, i); write_byte(i); write_string(szMesage); message_end(); } } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par } */
Nume: Anti Rush
Versiune: 1.0
Link oficial: http://www.extreamcs.com/forum
Instalare:
1. Fisierul do_not_rush.sma il puneti in addons/amxmodx/scripting
2. Fisierul do_not_rush.amxx il puneti in addons/amxmodx/plugins
3. Fisierul aura8.mdl il puneti in models
4. Intrati in fisierul addons/amxmodx/configs/plugins.ini si adaugati la urma:
Code: Select all
do_not_rush.amxx
Cvar-uri (se adauga in fisierul amxmodx\configs\amxx.cfg):
- ff_color "0/1/2" - ce culoare sa aiba un camp de forta: 0 = culori random | 1 = culoarea echipei T | 2 = culoarea echipei CT
ff_restricted_access "0/1/2" - ce echipa NU are voie sa treaca prin campurile de forta: 0 = ambele | 1 = TERO | 2 = CT
ff_remove_after "25" - dupa cate secunde poti face rush
- -
- /camp - deschide meniul de campuri (vezi poza mai jos): creeaza camp, sterge camp, sterge toate campurile, salveaza toate campurile
- Engine
- Hamsandwich
- IMAGINI | Afiseaza codul
- ALTE INFORMATII | Afiseaza codul
Acest plugin iti permite sa plasezi campuri de forta pe orice harta unde tii cursorul, acceseaza doar comanda /camp. Incearca sa plasezi campurile doar pe pamant/podea (SFAT!) Pluginul iti salveaza automat originile campurilor si le salveaza in folderul force_field intr-un fisier dupa numele hartii pe care joci. Am creeat eu deja 3 campuri, iar originile sunt deja salvate in configs/force_field/de_dust2.ini. Ele vor aparea pe harta de_dust2 la inceputul rundelor si vor disparea dupa un anumit timp setat prin cvar. Daca vrei sa editezi accesul comenzii /camp intri in sursa si cauti linia: [quote]#define ADMIN_ACCESS ADMIN_IMMUNITY[/quote] (se afla undeva la inceputul sursei) Daca vrei sa modifici tagul care apare in chat, intri in sursa si cauti linia: [quote]new const tag[] = "[ANTI RUSH]";[/quote] (se afla undeva la inceputul sursei) Daca vrei sa modifici directorul modelului, intri in sursa si cauti linia: [quote]new const force_field_model[] = "models/aura8.mdl";[/quote] (se afla undeva la inceputul sursei)