Cerere plugin random gift

Categoria cu cereri de pluginuri si nu numai.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Forum rules
Accesează link-ul pentru a putea vedea regulile forumului

Daca doriti sa vi se modifice un plugin, va rugam postati aici .
User avatar
LNd #
Membru, skill +1
Membru, skill +1
Posts: 126
Joined: 07 Sep 2017, 23:33
Detinator Steam: Da
SteamID: eXeDLL [1337]
Fond eXtream: 0
Has thanked: 3 times
Been thanked: 9 times

30 Mar 2020, 23:00

Code: Select all

#include < amxmodx >
#include < cstrike >
#include < hamsandwich >
#include < fakemeta >
#include < fakemeta_util >
#include < engine >
#include < fun >
#include < cellarray >
#include < xs >

#define AUTHOR "Askhanar"
#define PLUGIN "Gifts"
#define VERSION "1.0"

#define TAG "!n[!gTAG AICI!n]"

#define SS_VERSION	"1.0"
#define SS_MIN_DISTANCE	250.0
#define SS_MAX_LOOPS	100000

new Array:g_vecSsOrigins;
new Array:g_vecSsSpawns;
new Array:g_vecSsUsed;
new Float:g_flSsMinDist;
new g_iSsTime;

new const g_szStarts[][] =
{
	"info_player_start",
	"info_player_deathmatch"
}

new const Float:g_flOffsets[] =
{
	3500.0,
	3500.0,
	1500.0
};

new const g_szFmuGiftsModels[]=	"models/model_cutie.mdl"

new const g_iFmuGiftsColors[][] =
{
	{ 0, 255, 255 },
	{ 0, 255, 125 },
	{ 255, 125, 65 },
	{ 255, 0, 125 },
	{ 255, 25, 25 },
	{ 255, 255, 0 },
	{ 255, 255, 255 }
};


new const g_szFmuGiftClassName[]  =  "fmu_gift";

new Float:fMaxs[ 3 ]  =  {  13.0, 13.0, 35.0  };
new Float:fMins[ 3 ]  =  {  -13.0, -13.0, 0.0  };

new gCvarRespawnTime;
new gCvarNum;

public plugin_precache()
{		
	precache_model(g_szFmuGiftsModels);	
}
		
public plugin_init( )
{
	register_plugin(PLUGIN, VERSION, AUTHOR);
	
	gCvarRespawnTime = register_cvar("fmu_gifts_respawntime", "45");
	gCvarNum = register_cvar("fmu_gifts_number", "35");
	register_touch(g_szFmuGiftClassName, "player", "FwdPlayerTouchGift");
	
	SsInit(800.0);
	SsScan();
	
	LoadAllGifts();
}

public FwdPlayerTouchGift(  const iEnt, const id  )
{
	if(is_valid_ent(iEnt)  && ( 1 <= id <= 32 ) &&  is_user_alive(  id  )  )
	{
		new iParm[ 3 ];
		new Float:flOrigin[ 3 ], iOrigin[ 3 ];
			
		entity_get_vector( iEnt, EV_VEC_origin, flOrigin );
			
		FVecIVec( flOrigin, iOrigin );
		iParm[ 0 ] = iOrigin[ 0 ];
		iParm[ 1 ] = iOrigin[ 1 ];
		iParm[ 2 ] = iOrigin[ 2 ];
			
		set_task(float(get_pcvar_num( gCvarRespawnTime)), "Respawn_Entity", _, iParm, 3 );
			
		GivePlayerGift(id);
		remove_entity(iEnt);
		
	}
	return 0;
}

public GivePlayerGift(id)
{
    	switch(random_num(1, 7))
	{
		case 1:
		{
			new Health = 10
			fm_set_user_health(id, get_user_health(id) + Health)
			chat_color(id, "!g%s !nAi gasit in cufar !g%d !nHP.", TAG, Health)
		}
		case 2:
		{
			new Armor = 20
			fm_set_user_armor(id, get_user_armor(id) + Armor)
			chat_color(id, "!g%s !nAi gasit in cufar !g%d !nAP.", TAG, Armor)
		}
		case 3:
		{
			if(!user_has_weapon(id, CSW_HEGRENADE))
				fm_give_item(id, "weapon_hegrenade")
			else
				cs_set_user_bpammo(id, CSW_HEGRENADE, cs_get_user_bpammo(id, CSW_HEGRENADE) + 1);
			chat_color(id, "!g%s !nAi gasit in cufar !gHE GRENADE", TAG)
		}
		case 4:
		{
			cs_set_user_bpammo(id, CSW_HEGRENADE, cs_get_user_bpammo(id, CSW_HEGRENADE) + 1);
			cs_set_user_bpammo(id, CSW_FLASHBANG, cs_get_user_bpammo(id, CSW_FLASHBANG) + 1);

			chat_color(id, "!g%s !nAi gasit in cufar !gHE GRENADE !n+ !gFLASH GRENADE", TAG)
		}
		case 5:
		{
			new Armor = 20
			new Health = 5
			fm_set_user_armor(id, get_user_armor(id) + Armor)
			fm_set_user_health(id, get_user_health(id) + Health)
			chat_color(id, "!g%s !nAi gasit in cufar !g%d !nAP + !g%d !nHP", TAG, Armor, Health)
		}
		case 6:
		{	
			new Money = 2000
			cs_set_user_money(id, cs_get_user_money(id) + Money)
			chat_color(id, "!g%s !nAi gasit in cufar !g%d !n$", TAG, Money)
		}
		case 7:
		{
			chat_color(id, "!g%s !nNu ai gasit nimic in cufar!", TAG)
			return PLUGIN_HANDLED;
		}
	}
	return PLUGIN_CONTINUE;
}

public Respawn_Entity( iParm[ ] )
{
	new Float:flOrigin[ 3 ], iOrigin[ 3 ];
	
	iOrigin[ 0 ] = iParm[ 0 ];
	iOrigin[ 1 ] = iParm[ 1 ];
	iOrigin[ 2 ] = iParm[ 2 ];
	
	IVecFVec( iOrigin, flOrigin );
	CreateGift(  flOrigin );
	
	return 0;
}
	
public CreateGift(const Float:fOrigin[3])
{
	
	new iEnt = create_entity( "info_target" );
	if ( !is_valid_ent(iEnt) ) return 0;

	new iRandom = random_num(0, 6);
	
	entity_set_string(  iEnt, EV_SZ_classname, g_szFmuGiftClassName );
	entity_set_origin(  iEnt, fOrigin  );
	entity_set_model(  iEnt, g_szFmuGiftsModels);
	entity_set_int(  iEnt, EV_INT_movetype, MOVETYPE_NONE  );
	entity_set_int(  iEnt, EV_INT_solid, SOLID_BBOX );
	entity_set_size(  iEnt, fMins, fMaxs  );
	
	set_rendering(iEnt, kRenderFxGlowShell, g_iFmuGiftsColors[ iRandom ][ 0 ], g_iFmuGiftsColors[ iRandom ][ 1 ], g_iFmuGiftsColors[ iRandom ][ 2 ], kRenderNormal, 255 );
	
	drop_to_floor(  iEnt  );
	
	return 1;
}

public LoadAllGifts( )
{
	new Float:fOrigin[3];
	
	for( new i = 1; i <= get_pcvar_num(gCvarNum); i++ )
		if( SsGetOrigin( fOrigin ) )
			CreateGift( fOrigin );	
}

public SsInit(Float:mindist)
{
	g_flSsMinDist = mindist;
	g_vecSsOrigins = ArrayCreate(3, 1);
	g_vecSsSpawns = ArrayCreate(3, 1);
	g_vecSsUsed = ArrayCreate(3, 1);
}

stock SsClean()
{
	g_flSsMinDist = 0.0;
	ArrayClear(g_vecSsOrigins);
	ArrayClear(g_vecSsSpawns);
	ArrayClear(g_vecSsUsed);
}

stock SsGetOrigin(Float:origin[3])
{
	new Float:data[3], size;
	new ok = 1;

	while((size = ArraySize(g_vecSsOrigins)))
	{
		new idx = random_num(0, size - 1);

		ArrayGetArray(g_vecSsOrigins, idx, origin);

		new used = ArraySize(g_vecSsUsed);
		for(new i = 0; i < used; i++)
		{
			ok = 0;
			ArrayGetArray(g_vecSsUsed, i, data);
			if(get_distance_f(data, origin) >= g_flSsMinDist)
			{
				ok = 1;
				break;
			}
		}

		ArrayDeleteItem(g_vecSsOrigins, idx);
		if(ok)
		{
			ArrayPushArray(g_vecSsUsed, origin);
			return true;
		}
	}
	return false;
}

public SsScan()
{
	new start, Float:origin[3], starttime;
	starttime = get_systime();
	for(start = 0; start < sizeof(g_szStarts); start++)
	{
		server_print("Searching for %s", g_szStarts[start]);
		new ent;
		if((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", g_szStarts[start])))
		{
			new counter;
			pev(ent, pev_origin, origin);
			ArrayPushArray(g_vecSsSpawns, origin);
			while(counter < SS_MAX_LOOPS)
			{
				counter = GetLocation(origin, counter);
			}
		}
	}
	g_iSsTime = get_systime();
	g_iSsTime -= starttime;
}

GetLocation(Float:start[3], &counter)
{
	new Float:end[3];
	for(new i = 0 ; i < 3 ; i++) 
	end[ i ] += random_float( 0.0 - g_flOffsets[ i ], g_flOffsets[ i ] ); 

	if(IsValid(start, end))
	{
		start[0] = end[0];
		start[1] = end[1];
		start[2] = end[2];
		ArrayPushArray(g_vecSsOrigins, end);
	}
	counter++;
	return counter;
}

IsValid(Float:start[3], Float:end[3])
{
	SetFloor(end);
	end[2] += 36.0;
	new point = engfunc(EngFunc_PointContents, end);
	if(point == CONTENTS_EMPTY)
	{
		if(CheckPoints(end) && CheckDistance(end) && CheckVisibility(start, end))
		{
			if(!trace_hull(end, HULL_LARGE, -1))
			{
				return true;
			}
		}
	}
	return false;
}

CheckVisibility(Float:start[3], Float:end[3])
{
	new tr;
	engfunc(EngFunc_TraceLine, start, end, IGNORE_GLASS, -1, tr);
	return (get_tr2(tr, TR_pHit) < 0);
}

SetFloor(Float:start[3])
{
	new tr, Float:end[3];
	end[0] = start[0];
	end[1] = start[1];
	end[2] = -99999.9;
	engfunc(EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, -1, tr);
	get_tr2(tr, TR_vecEndPos, start);
}

CheckPoints(Float:origin[3])
{
	new Float:data[3], tr, point;
	data[0] = origin[0];
	data[1] = origin[1];
	data[2] = 99999.9;
	engfunc(EngFunc_TraceLine, origin, data, DONT_IGNORE_MONSTERS, -1, tr);
	get_tr2(tr, TR_vecEndPos, data);
	point = engfunc(EngFunc_PointContents, data);
	if(point == CONTENTS_SKY && get_distance_f(origin, data) < 250.0)
	{
		return false;
	}
	data[2] = -99999.9;
	engfunc(EngFunc_TraceLine, origin, data, DONT_IGNORE_MONSTERS, -1, tr);
	get_tr2(tr, TR_vecEndPos, data);
	point = engfunc(EngFunc_PointContents, data);
	if(point < CONTENTS_SOLID)
		return false;
	
	return true;
}

CheckDistance(Float:origin[3])
{
	new Float:dist, Float:data[3];
	new count = ArraySize(g_vecSsSpawns);
	for(new i = 0; i < count; i++)
	{
		ArrayGetArray(g_vecSsSpawns, i, data);
		dist = get_distance_f(origin, data);
		if(dist < SS_MIN_DISTANCE)
			return false;
	}

	count = ArraySize(g_vecSsOrigins);
	for(new i = 0; i < count; i++)
	{
		ArrayGetArray(g_vecSsOrigins, i, data);
		dist = get_distance_f(origin, data);
		if(dist < SS_MIN_DISTANCE)
			return false;
	}

	return true;
}


stock chat_color(const id, const input[], any:...)
{
	new count = 1, players[32]
	
	static msg[191]
	
	vformat(msg, 190, input, 3)
	
	replace_all(msg, 190, "!g", "^4")
	replace_all(msg, 190, "!n", "^1")
	replace_all(msg, 190, "!t", "^3")
		
	if (id) players[0] = id; else get_players(players, count, "ch")
	{
		for (new i = 0; i < count; i++)
		{
			if (is_user_connected(players[i]))
			{
				message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
				write_byte(players[i])
				write_string(msg)
				message_end()
			}
		}
	}
}
Last edited by levin on 31 Mar 2020, 15:12, edited 1 time in total.
Reason: dacă te mai văd autor la plugine publice mă supăr
Legends never die
RoyalServer
User avatar
EleCtr0zZz
Membru, skill +1
Membru, skill +1
Posts: 428
Joined: 25 May 2015, 07:27
Detinator Steam: Da
SteamID: =
Fond eXtream: 0
Has thanked: 3 times
Contact:

31 Mar 2020, 15:12

LNd # wrote:
30 Mar 2020, 23:00

Code: Select all

#include < amxmodx >
#include < cstrike >
#include < hamsandwich >
#include < fakemeta >
#include < fakemeta_util >
#include < engine >
#include < fun >
#include < cellarray >
#include < xs >

#define AUTHOR "Legends"
#define PLUGIN "Gifts"
#define VERSION "1.0"

#define TAG "!n[!gTAG AICI!n]"

#define SS_VERSION	"1.0"
#define SS_MIN_DISTANCE	250.0
#define SS_MAX_LOOPS	100000

new Array:g_vecSsOrigins;
new Array:g_vecSsSpawns;
new Array:g_vecSsUsed;
new Float:g_flSsMinDist;
new g_iSsTime;

new const g_szStarts[][] =
{
	"info_player_start",
	"info_player_deathmatch"
}

new const Float:g_flOffsets[] =
{
	3500.0,
	3500.0,
	1500.0
};

new const g_szFmuGiftsModels[]=	"models/model_cutie.mdl"

new const g_iFmuGiftsColors[][] =
{
	{ 0, 255, 255 },
	{ 0, 255, 125 },
	{ 255, 125, 65 },
	{ 255, 0, 125 },
	{ 255, 25, 25 },
	{ 255, 255, 0 },
	{ 255, 255, 255 }
};


new const g_szFmuGiftClassName[]  =  "fmu_gift";

new Float:fMaxs[ 3 ]  =  {  13.0, 13.0, 35.0  };
new Float:fMins[ 3 ]  =  {  -13.0, -13.0, 0.0  };

new gCvarRespawnTime;
new gCvarNum;

public plugin_precache()
{		
	precache_model(g_szFmuGiftsModels);	
}
		
public plugin_init( )
{
	register_plugin(PLUGIN, VERSION, AUTHOR);
	
	gCvarRespawnTime = register_cvar("fmu_gifts_respawntime", "45");
	gCvarNum = register_cvar("fmu_gifts_number", "35");
	register_touch(g_szFmuGiftClassName, "player", "FwdPlayerTouchGift");
	
	SsInit(800.0);
	SsScan();
	
	LoadAllGifts();
}

public FwdPlayerTouchGift(  const iEnt, const id  )
{
	if(is_valid_ent(iEnt)  && ( 1 <= id <= 32 ) &&  is_user_alive(  id  )  )
	{
		new iParm[ 3 ];
		new Float:flOrigin[ 3 ], iOrigin[ 3 ];
			
		entity_get_vector( iEnt, EV_VEC_origin, flOrigin );
			
		FVecIVec( flOrigin, iOrigin );
		iParm[ 0 ] = iOrigin[ 0 ];
		iParm[ 1 ] = iOrigin[ 1 ];
		iParm[ 2 ] = iOrigin[ 2 ];
			
		set_task(float(get_pcvar_num( gCvarRespawnTime)), "Respawn_Entity", _, iParm, 3 );
			
		GivePlayerGift(id);
		remove_entity(iEnt);
		
	}
	return 0;
}

public GivePlayerGift(id)
{
    	switch(random_num(1, 7))
	{
		case 1:
		{
			new Health = 10
			fm_set_user_health(id, get_user_health(id) + Health)
			chat_color(id, "!g%s !nAi gasit in cufar !g%d !nHP.", TAG, Health)
		}
		case 2:
		{
			new Armor = 20
			fm_set_user_armor(id, get_user_armor(id) + Armor)
			chat_color(id, "!g%s !nAi gasit in cufar !g%d !nAP.", TAG, Armor)
		}
		case 3:
		{
			if(!user_has_weapon(id, CSW_HEGRENADE))
				fm_give_item(id, "weapon_hegrenade")
			else
				cs_set_user_bpammo(id, CSW_HEGRENADE, cs_get_user_bpammo(id, CSW_HEGRENADE) + 1);
			chat_color(id, "!g%s !nAi gasit in cufar !gHE GRENADE", TAG)
		}
		case 4:
		{
			cs_set_user_bpammo(id, CSW_HEGRENADE, cs_get_user_bpammo(id, CSW_HEGRENADE) + 1);
			cs_set_user_bpammo(id, CSW_FLASHBANG, cs_get_user_bpammo(id, CSW_FLASHBANG) + 1);

			chat_color(id, "!g%s !nAi gasit in cufar !gHE GRENADE !n+ !gFLASH GRENADE", TAG)
		}
		case 5:
		{
			new Armor = 20
			new Health = 5
			fm_set_user_armor(id, get_user_armor(id) + Armor)
			fm_set_user_health(id, get_user_health(id) + Health)
			chat_color(id, "!g%s !nAi gasit in cufar !g%d !nAP + !g%d !nHP", TAG, Armor, Health)
		}
		case 6:
		{	
			new Money = 2000
			cs_set_user_money(id, cs_get_user_money(id) + Money)
			chat_color(id, "!g%s !nAi gasit in cufar !g%d !n$", TAG, Money)
		}
		case 7:
		{
			chat_color(id, "!g%s !nNu ai gasit nimic in cufar!", TAG)
			return PLUGIN_HANDLED;
		}
	}
	return PLUGIN_CONTINUE;
}

public Respawn_Entity( iParm[ ] )
{
	new Float:flOrigin[ 3 ], iOrigin[ 3 ];
	
	iOrigin[ 0 ] = iParm[ 0 ];
	iOrigin[ 1 ] = iParm[ 1 ];
	iOrigin[ 2 ] = iParm[ 2 ];
	
	IVecFVec( iOrigin, flOrigin );
	CreateGift(  flOrigin );
	
	return 0;
}
	
public CreateGift(const Float:fOrigin[3])
{
	
	new iEnt = create_entity( "info_target" );
	if ( !is_valid_ent(iEnt) ) return 0;

	new iRandom = random_num(0, 6);
	
	entity_set_string(  iEnt, EV_SZ_classname, g_szFmuGiftClassName );
	entity_set_origin(  iEnt, fOrigin  );
	entity_set_model(  iEnt, g_szFmuGiftsModels);
	entity_set_int(  iEnt, EV_INT_movetype, MOVETYPE_NONE  );
	entity_set_int(  iEnt, EV_INT_solid, SOLID_BBOX );
	entity_set_size(  iEnt, fMins, fMaxs  );
	
	set_rendering(iEnt, kRenderFxGlowShell, g_iFmuGiftsColors[ iRandom ][ 0 ], g_iFmuGiftsColors[ iRandom ][ 1 ], g_iFmuGiftsColors[ iRandom ][ 2 ], kRenderNormal, 255 );
	
	drop_to_floor(  iEnt  );
	
	return 1;
}

public LoadAllGifts( )
{
	new Float:fOrigin[3];
	
	for( new i = 1; i <= get_pcvar_num(gCvarNum); i++ )
		if( SsGetOrigin( fOrigin ) )
			CreateGift( fOrigin );	
}

public SsInit(Float:mindist)
{
	g_flSsMinDist = mindist;
	g_vecSsOrigins = ArrayCreate(3, 1);
	g_vecSsSpawns = ArrayCreate(3, 1);
	g_vecSsUsed = ArrayCreate(3, 1);
}

stock SsClean()
{
	g_flSsMinDist = 0.0;
	ArrayClear(g_vecSsOrigins);
	ArrayClear(g_vecSsSpawns);
	ArrayClear(g_vecSsUsed);
}

stock SsGetOrigin(Float:origin[3])
{
	new Float:data[3], size;
	new ok = 1;

	while((size = ArraySize(g_vecSsOrigins)))
	{
		new idx = random_num(0, size - 1);

		ArrayGetArray(g_vecSsOrigins, idx, origin);

		new used = ArraySize(g_vecSsUsed);
		for(new i = 0; i < used; i++)
		{
			ok = 0;
			ArrayGetArray(g_vecSsUsed, i, data);
			if(get_distance_f(data, origin) >= g_flSsMinDist)
			{
				ok = 1;
				break;
			}
		}

		ArrayDeleteItem(g_vecSsOrigins, idx);
		if(ok)
		{
			ArrayPushArray(g_vecSsUsed, origin);
			return true;
		}
	}
	return false;
}

public SsScan()
{
	new start, Float:origin[3], starttime;
	starttime = get_systime();
	for(start = 0; start < sizeof(g_szStarts); start++)
	{
		server_print("Searching for %s", g_szStarts[start]);
		new ent;
		if((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", g_szStarts[start])))
		{
			new counter;
			pev(ent, pev_origin, origin);
			ArrayPushArray(g_vecSsSpawns, origin);
			while(counter < SS_MAX_LOOPS)
			{
				counter = GetLocation(origin, counter);
			}
		}
	}
	g_iSsTime = get_systime();
	g_iSsTime -= starttime;
}

GetLocation(Float:start[3], &counter)
{
	new Float:end[3];
	for(new i = 0 ; i < 3 ; i++) 
	end[ i ] += random_float( 0.0 - g_flOffsets[ i ], g_flOffsets[ i ] ); 

	if(IsValid(start, end))
	{
		start[0] = end[0];
		start[1] = end[1];
		start[2] = end[2];
		ArrayPushArray(g_vecSsOrigins, end);
	}
	counter++;
	return counter;
}

IsValid(Float:start[3], Float:end[3])
{
	SetFloor(end);
	end[2] += 36.0;
	new point = engfunc(EngFunc_PointContents, end);
	if(point == CONTENTS_EMPTY)
	{
		if(CheckPoints(end) && CheckDistance(end) && CheckVisibility(start, end))
		{
			if(!trace_hull(end, HULL_LARGE, -1))
			{
				return true;
			}
		}
	}
	return false;
}

CheckVisibility(Float:start[3], Float:end[3])
{
	new tr;
	engfunc(EngFunc_TraceLine, start, end, IGNORE_GLASS, -1, tr);
	return (get_tr2(tr, TR_pHit) < 0);
}

SetFloor(Float:start[3])
{
	new tr, Float:end[3];
	end[0] = start[0];
	end[1] = start[1];
	end[2] = -99999.9;
	engfunc(EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, -1, tr);
	get_tr2(tr, TR_vecEndPos, start);
}

CheckPoints(Float:origin[3])
{
	new Float:data[3], tr, point;
	data[0] = origin[0];
	data[1] = origin[1];
	data[2] = 99999.9;
	engfunc(EngFunc_TraceLine, origin, data, DONT_IGNORE_MONSTERS, -1, tr);
	get_tr2(tr, TR_vecEndPos, data);
	point = engfunc(EngFunc_PointContents, data);
	if(point == CONTENTS_SKY && get_distance_f(origin, data) < 250.0)
	{
		return false;
	}
	data[2] = -99999.9;
	engfunc(EngFunc_TraceLine, origin, data, DONT_IGNORE_MONSTERS, -1, tr);
	get_tr2(tr, TR_vecEndPos, data);
	point = engfunc(EngFunc_PointContents, data);
	if(point < CONTENTS_SOLID)
		return false;
	
	return true;
}

CheckDistance(Float:origin[3])
{
	new Float:dist, Float:data[3];
	new count = ArraySize(g_vecSsSpawns);
	for(new i = 0; i < count; i++)
	{
		ArrayGetArray(g_vecSsSpawns, i, data);
		dist = get_distance_f(origin, data);
		if(dist < SS_MIN_DISTANCE)
			return false;
	}

	count = ArraySize(g_vecSsOrigins);
	for(new i = 0; i < count; i++)
	{
		ArrayGetArray(g_vecSsOrigins, i, data);
		dist = get_distance_f(origin, data);
		if(dist < SS_MIN_DISTANCE)
			return false;
	}

	return true;
}


stock chat_color(const id, const input[], any:...)
{
	new count = 1, players[32]
	
	static msg[191]
	
	vformat(msg, 190, input, 3)
	
	replace_all(msg, 190, "!g", "^4")
	replace_all(msg, 190, "!n", "^1")
	replace_all(msg, 190, "!t", "^3")
		
	if (id) players[0] = id; else get_players(players, count, "ch")
	{
		for (new i = 0; i < count; i++)
		{
			if (is_user_connected(players[i]))
			{
				message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
				write_byte(players[i])
				write_string(msg)
				message_end()
			}
		}
	}
}
Cum pot face ca "ouale" :hand_over_mouth: sa fie spawnate intr-un numar mai mic si pe unele mape sa nu se spawneze. ( fy_snow / fy_buzzkill / awp_india / aim_map )
Si as vrea sa se spawneze doar o data pe runda ! Iar cand runda se termina , sa se spawneze in cealalta runda , multumesc frumos !
neverfree33
Membru, skill 0
Membru, skill 0
Posts: 37
Joined: 27 Jan 2020, 12:19
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Has thanked: 1 time

31 Mar 2020, 16:09

Code: Select all

#include < amxmodx >
#include < cstrike >
#include < hamsandwich >
#include < fakemeta >
#include < fakemeta_util >
#include < engine >
#include < fun >
#include < cellarray >
#include < xs >

#define AUTHOR "Legends"
#define PLUGIN "Gifts"
#define VERSION "1.0"

#define TAG "!n[!gTAG AICI!n]"

#define SS_VERSION	"1.0"
#define SS_MIN_DISTANCE	250.0
#define SS_MAX_LOOPS	100000

new Array:g_vecSsOrigins;
new Array:g_vecSsSpawns;
new Array:g_vecSsUsed;
new Float:g_flSsMinDist;
new g_iSsTime;

new const g_szStarts[][] =
{
	"info_player_start",
	"info_player_deathmatch"
}

new const Float:g_flOffsets[] =
{
	3500.0,
	3500.0,
	1500.0
};

new const g_szFmuGiftsModels[]=	"models/model_cutie.mdl"

new const g_iFmuGiftsColors[][] =
{
	{ 0, 255, 255 },
	{ 0, 255, 125 },
	{ 255, 125, 65 },
	{ 255, 0, 125 },
	{ 255, 25, 25 },
	{ 255, 255, 0 },
	{ 255, 255, 255 }
};


new const g_szFmuGiftClassName[]  =  "fmu_gift";

new Float:fMaxs[ 3 ]  =  {  13.0, 13.0, 35.0  };
new Float:fMins[ 3 ]  =  {  -13.0, -13.0, 0.0  };

new gCvarRespawnTime;
new gCvarNum;

public plugin_precache()
{		
	precache_model(g_szFmuGiftsModels);	
}
		
public plugin_init( )
{
	register_plugin(PLUGIN, VERSION, AUTHOR);
	
	gCvarRespawnTime = register_cvar("fmu_gifts_respawntime", "45");
	gCvarNum = register_cvar("fmu_gifts_number", "35");
	register_touch(g_szFmuGiftClassName, "player", "FwdPlayerTouchGift");
	
	SsInit(800.0);
	SsScan();
	
	LoadAllGifts();
}

public FwdPlayerTouchGift(  const iEnt, const id  )
{
	if(is_valid_ent(iEnt)  && ( 1 <= id <= 32 ) &&  is_user_alive(  id  )  )
	{
		new iParm[ 3 ];
		new Float:flOrigin[ 3 ], iOrigin[ 3 ];
			
		entity_get_vector( iEnt, EV_VEC_origin, flOrigin );
			
		FVecIVec( flOrigin, iOrigin );
		iParm[ 0 ] = iOrigin[ 0 ];
		iParm[ 1 ] = iOrigin[ 1 ];
		iParm[ 2 ] = iOrigin[ 2 ];
			
		set_task(float(get_pcvar_num( gCvarRespawnTime)), "Respawn_Entity", _, iParm, 3 );
			
		GivePlayerGift(id);
		remove_entity(iEnt);
		
	}
	return 0;
}

public GivePlayerGift(id)
{
    	switch(random_num(1, 7))
	{
		case 1:
		{
			new Health = 10
			fm_set_user_health(id, get_user_health(id) + Health)
			chat_color(id, "!g%s !nAi gasit in cufar !g%d !nHP.", TAG, Health)
		}
		case 2:
		{
			new Armor = 20
			fm_set_user_armor(id, get_user_armor(id) + Armor)
			chat_color(id, "!g%s !nAi gasit in cufar !g%d !nAP.", TAG, Armor)
		}
		case 3:
		{
			if(!user_has_weapon(id, CSW_HEGRENADE))
				fm_give_item(id, "weapon_hegrenade")
			else
				cs_set_user_bpammo(id, CSW_HEGRENADE, cs_get_user_bpammo(id, CSW_HEGRENADE) + 1);
			chat_color(id, "!g%s !nAi gasit in cufar !gHE GRENADE", TAG)
		}
		case 4:
		{
			cs_set_user_bpammo(id, CSW_HEGRENADE, cs_get_user_bpammo(id, CSW_HEGRENADE) + 1);
			cs_set_user_bpammo(id, CSW_FLASHBANG, cs_get_user_bpammo(id, CSW_FLASHBANG) + 1);

			chat_color(id, "!g%s !nAi gasit in cufar !gHE GRENADE !n+ !gFLASH GRENADE", TAG)
		}
		case 5:
		{
			new Armor = 20
			new Health = 5
			fm_set_user_armor(id, get_user_armor(id) + Armor)
			fm_set_user_health(id, get_user_health(id) + Health)
			chat_color(id, "!g%s !nAi gasit in cufar !g%d !nAP + !g%d !nHP", TAG, Armor, Health)
		}
		case 6:
		{	
			new Money = 2000
			cs_set_user_money(id, cs_get_user_money(id) + Money)
			chat_color(id, "!g%s !nAi gasit in cufar !g%d !n$", TAG, Money)
		}
		case 7:
		{
			chat_color(id, "!g%s !nNu ai gasit nimic in cufar!", TAG)
			return PLUGIN_HANDLED;
		}
	}
	return PLUGIN_CONTINUE;
}

public Respawn_Entity( iParm[ ] )
{
	new Float:flOrigin[ 3 ], iOrigin[ 3 ];
	
	iOrigin[ 0 ] = iParm[ 0 ];
	iOrigin[ 1 ] = iParm[ 1 ];
	iOrigin[ 2 ] = iParm[ 2 ];
	
	IVecFVec( iOrigin, flOrigin );
	CreateGift(  flOrigin );
	
	return 0;
}
	
public CreateGift(const Float:fOrigin[3])
{
	
	new iEnt = create_entity( "info_target" );
	if ( !is_valid_ent(iEnt) ) return 0;

	new iRandom = random_num(0, 6);
	
	entity_set_string(  iEnt, EV_SZ_classname, g_szFmuGiftClassName );
	entity_set_origin(  iEnt, fOrigin  );
	entity_set_model(  iEnt, g_szFmuGiftsModels);
	entity_set_int(  iEnt, EV_INT_movetype, MOVETYPE_NONE  );
	entity_set_int(  iEnt, EV_INT_solid, SOLID_BBOX );
	entity_set_size(  iEnt, fMins, fMaxs  );
	
	set_rendering(iEnt, kRenderFxGlowShell, g_iFmuGiftsColors[ iRandom ][ 0 ], g_iFmuGiftsColors[ iRandom ][ 1 ], g_iFmuGiftsColors[ iRandom ][ 2 ], kRenderNormal, 255 );
	
	drop_to_floor(  iEnt  );
	
	return 1;
}

public LoadAllGifts( )
{
	new Float:fOrigin[3];
	
	for( new i = 1; i <= get_pcvar_num(gCvarNum); i++ )
		if( SsGetOrigin( fOrigin ) )
			CreateGift( fOrigin );	
}

public SsInit(Float:mindist)
{
	g_flSsMinDist = mindist;
	g_vecSsOrigins = ArrayCreate(3, 1);
	g_vecSsSpawns = ArrayCreate(3, 1);
	g_vecSsUsed = ArrayCreate(3, 1);
}

stock SsClean()
{
	g_flSsMinDist = 0.0;
	ArrayClear(g_vecSsOrigins);
	ArrayClear(g_vecSsSpawns);
	ArrayClear(g_vecSsUsed);
}

stock SsGetOrigin(Float:origin[3])
{
	new Float:data[3], size;
	new ok = 1;

	while((size = ArraySize(g_vecSsOrigins)))
	{
		new idx = random_num(0, size - 1);

		ArrayGetArray(g_vecSsOrigins, idx, origin);

		new used = ArraySize(g_vecSsUsed);
		for(new i = 0; i < used; i++)
		{
			ok = 0;
			ArrayGetArray(g_vecSsUsed, i, data);
			if(get_distance_f(data, origin) >= g_flSsMinDist)
			{
				ok = 1;
				break;
			}
		}

		ArrayDeleteItem(g_vecSsOrigins, idx);
		if(ok)
		{
			ArrayPushArray(g_vecSsUsed, origin);
			return true;
		}
	}
	return false;
}

public SsScan()
{
	new start, Float:origin[3], starttime;
	starttime = get_systime();
	for(start = 0; start < sizeof(g_szStarts); start++)
	{
		server_print("Searching for %s", g_szStarts[start]);
		new ent;
		if((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", g_szStarts[start])))
		{
			new counter;
			pev(ent, pev_origin, origin);
			ArrayPushArray(g_vecSsSpawns, origin);
			while(counter < SS_MAX_LOOPS)
			{
				counter = GetLocation(origin, counter);
			}
		}
	}
	g_iSsTime = get_systime();
	g_iSsTime -= starttime;
}

GetLocation(Float:start[3], &counter)
{
	new Float:end[3];
	for(new i = 0 ; i < 3 ; i++) 
	end[ i ] += random_float( 0.0 - g_flOffsets[ i ], g_flOffsets[ i ] ); 

	if(IsValid(start, end))
	{
		start[0] = end[0];
		start[1] = end[1];
		start[2] = end[2];
		ArrayPushArray(g_vecSsOrigins, end);
	}
	counter++;
	return counter;
}

IsValid(Float:start[3], Float:end[3])
{
	SetFloor(end);
	end[2] += 36.0;
	new point = engfunc(EngFunc_PointContents, end);
	if(point == CONTENTS_EMPTY)
	{
		if(CheckPoints(end) && CheckDistance(end) && CheckVisibility(start, end))
		{
			if(!trace_hull(end, HULL_LARGE, -1))
			{
				return true;
			}
		}
	}
	return false;
}

CheckVisibility(Float:start[3], Float:end[3])
{
	new tr;
	engfunc(EngFunc_TraceLine, start, end, IGNORE_GLASS, -1, tr);
	return (get_tr2(tr, TR_pHit) < 0);
}

SetFloor(Float:start[3])
{
	new tr, Float:end[3];
	end[0] = start[0];
	end[1] = start[1];
	end[2] = -99999.9;
	engfunc(EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, -1, tr);
	get_tr2(tr, TR_vecEndPos, start);
}

CheckPoints(Float:origin[3])
{
	new Float:data[3], tr, point;
	data[0] = origin[0];
	data[1] = origin[1];
	data[2] = 99999.9;
	engfunc(EngFunc_TraceLine, origin, data, DONT_IGNORE_MONSTERS, -1, tr);
	get_tr2(tr, TR_vecEndPos, data);
	point = engfunc(EngFunc_PointContents, data);
	if(point == CONTENTS_SKY && get_distance_f(origin, data) < 250.0)
	{
		return false;
	}
	data[2] = -99999.9;
	engfunc(EngFunc_TraceLine, origin, data, DONT_IGNORE_MONSTERS, -1, tr);
	get_tr2(tr, TR_vecEndPos, data);
	point = engfunc(EngFunc_PointContents, data);
	if(point < CONTENTS_SOLID)
		return false;
	
	return true;
}

CheckDistance(Float:origin[3])
{
	new Float:dist, Float:data[3];
	new count = ArraySize(g_vecSsSpawns);
	for(new i = 0; i < count; i++)
	{
		ArrayGetArray(g_vecSsSpawns, i, data);
		dist = get_distance_f(origin, data);
		if(dist < SS_MIN_DISTANCE)
			return false;
	}

	count = ArraySize(g_vecSsOrigins);
	for(new i = 0; i < count; i++)
	{
		ArrayGetArray(g_vecSsOrigins, i, data);
		dist = get_distance_f(origin, data);
		if(dist < SS_MIN_DISTANCE)
			return false;
	}

	return true;
}


stock chat_color(const id, const input[], any:...)
{
	new count = 1, players[32]
	
	static msg[191]
	
	vformat(msg, 190, input, 3)
	
	replace_all(msg, 190, "!g", "^4")
	replace_all(msg, 190, "!n", "^1")
	replace_all(msg, 190, "!t", "^3")
		
	if (id) players[0] = id; else get_players(players, count, "ch")
	{
		for (new i = 0; i < count; i++)
		{
			if (is_user_connected(players[i]))
			{
				message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
				write_byte(players[i])
				write_string(msg)
				message_end()
			}
		}
	}
}
-> gCvarNum = register_cvar("fmu_gifts_number", "35");
in -> gCvarNum = register_cvar("fmu_gifts_number", "10"); /// Modifici
User avatar
EleCtr0zZz
Membru, skill +1
Membru, skill +1
Posts: 428
Joined: 25 May 2015, 07:27
Detinator Steam: Da
SteamID: =
Fond eXtream: 0
Has thanked: 3 times
Contact:

01 Apr 2020, 10:53

Se poate dezactiva pe mapele awp_india fy_snow si fy_buzzkill ?
Post Reply

Return to “Cereri”

  • Information