Code: Select all
#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 }
*/
Code: Select all
AMX Mod X Compiler 1.8.3-manual
Copyright (c) 1997-2006 ITB CompuPhase
Copyright (c) 2004-2013 AMX Mod X Team
plugin.sma(378) : error 023: array assignment must be simple assignment
plugin.sma(378) : warning 215: expression has no effect
plugin.sma(379) : error 023: array assignment must be simple assignment
plugin.sma(379) : warning 215: expression has no effect
2 Errors.
Could not locate output file plugin.amx (compile failed).