Page 1 of 2

NO RUSH (MANUAL)

Posted: 24 Jul 2017, 00:45
by YONTU
Descriere: Cu ajutorul acestui plugin iti poti creea entitati, numite campuri de forta de o anumita dimensiune, ce nu-ti permit trecerea prin ele, adica te imping inapoi in spate fara a te omori/kick/ban si alte prostii. Ele pot fi plasata in asa fel incat sa nu se faca rush. Le poti plasa oriunde tu, doar sa-si atinga scopul. Daca eram mai inteligent, dar cunostintele avansate in amxx imi lipsesc cu desavarsire, creeam pur si simplu un zid doar pe mid pe orice harta ce nu permite trecerea lui, fara a mai fi nevoie sa creezi entitati manual si apoi sa te joci cu ele in limbajul pawn.

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
5. Alti pasi necesari....

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
Comenzi administrative (se tasteaza in consola si trebuie sa fiti administrator):
  • -
Comenzi publice (se tasteaza in joc prin apasarea tastei Y):
  • /camp - deschide meniul de campuri (vezi poza mai jos): creeaza camp, sterge camp, sterge toate campurile, salveaza toate campurile
Module necesare (se sterge ; din fata modulului de mai jos; acestea le gasiti in fisierul amxmodx\configs\modules.ini):
- Engine
- Hamsandwich
IMAGINI | Afiseaza codul
Image

Image

Image

Image
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)

Re: NO RUSH (MANUAL)

Posted: 24 Jul 2017, 07:41
by GENERALU'
Plugin util serverelor populate.
Pe zombie escape ar funcţiona ?!

Re: NO RUSH (MANUAL)

Posted: 24 Jul 2017, 15:23
by YONTU
VioreL @EXTREAMCS wrote:Plugin util serverelor populate.
Pe zombie escape ar funcţiona ?!
Normal. Da mi pm cu nativele pentru modul asta

Re: NO RUSH (MANUAL)

Posted: 25 Jul 2017, 19:46
by JaiLBreaK
ai uitat creditele lu lucas_7_94 scriptere, crezi ca daca schimbi din engine in fakemeta nu se cunoaste?

Re: NO RUSH (MANUAL)

Posted: 25 Jul 2017, 20:45
by Lux0R^
am o intrebare faina, daca "campul de forta" te impinge inauntrul hartii ? :)

Re: NO RUSH (MANUAL)

Posted: 25 Jul 2017, 20:58
by YONTU
@JaiLBreaK: am lasat creditele in sursa :) acum poti muri linistit
@Lux0R^: ma intrebam cand apari :)) O fi posibila si asta? Probabil te referi la harti pentru dr sau de pe care poti sa pici pur si simplu. Sa-ti raspund, mi se cam rupe, il foloseste care vrea, si nu cred ca poti fi atat de idiot sa plasezi o astfel de entitate pe o zona deschisa sa te impinga in afara hărții. Am zis si mai sus ca daca aveam cunostinte mai avansate, ii rezolvam toate presupusele buguri, dar ramane un simplu plugin pe care m-a rugat cineva sa-l fac. :)

Re: NO RUSH (MANUAL)

Posted: 25 Jul 2017, 21:02
by JaiLBreaK
nu il vad pe lucas_7_94 in sma la credite :) nici din spoiler si nici in link

Re: NO RUSH (MANUAL)

Posted: 25 Jul 2017, 22:20
by A k c 3 n 7
YONTU wrote:@JaiLBreaK: am lasat creditele in sursa :) acum poti muri linistit
@Lux0R^: ma intrebam cand apari :)) O fi posibila si asta? Probabil te referi la harti pentru dr sau de pe care poti sa pici pur si simplu. Sa-ti raspund, mi se cam rupe, il foloseste care vrea, si nu cred ca poti fi atat de idiot sa plasezi o astfel de entitate pe o zona deschisa sa te impinga in afara hărții. Am zis si mai sus ca daca aveam cunostinte mai avansate, ii rezolvam toate presupusele buguri, dar ramane un simplu plugin pe care m-a rugat cineva sa-l fac. :)
pai de ce ar fi neeaparat sa te impinga se poate face in asa fel doar sa nu te lase sa treci

Re: NO RUSH (MANUAL)

Posted: 29 Jul 2017, 23:14
by Lux0R^
A k c 3 n 7 wrote:
YONTU wrote:@JaiLBreaK: am lasat creditele in sursa :) acum poti muri linistit
@Lux0R^: ma intrebam cand apari :)) O fi posibila si asta? Probabil te referi la harti pentru dr sau de pe care poti sa pici pur si simplu. Sa-ti raspund, mi se cam rupe, il foloseste care vrea, si nu cred ca poti fi atat de idiot sa plasezi o astfel de entitate pe o zona deschisa sa te impinga in afara hărții. Am zis si mai sus ca daca aveam cunostinte mai avansate, ii rezolvam toate presupusele buguri, dar ramane un simplu plugin pe care m-a rugat cineva sa-l fac. :)
pai de ce ar fi neeaparat sa te impinga se poate face in asa fel doar sa nu te lase sa treci
la asta ma gandeam si eu

apropo yontu : nu inteleg ce e cu abordarea ta, nu m-am referit la nimic, doar pur si simplu am luat un caz random, tu alegi ce vrei sa faci.

Re: NO RUSH (MANUAL)

Posted: 30 Jul 2017, 17:17
by EzLife90
JaiLBreaK wrote:nu il vad pe lucas_7_94 in sma la credite :) nici din spoiler si nici in link

mai taci ***.tuti fam *****

Re: NO RUSH (MANUAL)

Posted: 30 Jul 2017, 18:21
by JaiLBreaK
lumea nu are nevoie de ******
***** ai fost si asa vei ramane :*

Re: NO RUSH (MANUAL)

Posted: 31 Jul 2017, 00:46
by FireW@ll
Toata lumea in ziua de azi se cred mari scripteri .