Cerere plugin bazooka only for Counter Team

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 .
Post Reply
User avatar
Hathlze2002
Membru, skill 0
Membru, skill 0
Posts: 22
Joined: 09 Dec 2020, 17:54
Detinator Steam: Da
CS Status: Citesc forumul eXtreamCS.com...!
Detinator server CS: CS.CSUNDERWORLD.RO
Fond eXtream: 0
Has thanked: 8 times

10 Dec 2020, 12:13

Plugin Cerut: gg_item_bazooka only for COUNTER team
Descriere (adica ce face el mai exact): Vreau sa mi-l modifice cineva ca atunci cand scrii /jetpack sa poata lua doar cei de la Counter Team si cei de la T nu.
Serverul impune conditii strict HLDS/REHLDS?: HLDS
Ai cautat pluginul?(daca da, precizeaza cum): https://forums.alliedmods.net/showthread.php?t=250760
Necesita mod special?: NU
RoyalServer 2
lexz
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 917
Joined: 02 Nov 2020, 01:57
Detinator Steam: Da
Fond eXtream: 0
Discord: lexzor#0630
Has thanked: 71 times
Been thanked: 136 times

10 Dec 2020, 13:07

Code: Select all

#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <cstrike>
#include <engine>
#include <xs>

#define SoundFire "weapons/rocketfire1.wav"
#define SoundTravel "weapons/rocket1.wav"
#define SoundFly "zs/fly2.wav"
#define SoundBlow "zs/blow.wav"
#define SoundPickup "events/task_complete.wav"
#define ModelRocket "models/rpgrocket.mdl"
#define ModelJetpack_P "models/p_egon.mdl"
#define ModelJetpack_W "models/w_egon.mdl"
#define ModelJetpack_V "models/v_egon.mdl"
#define ClassJetpack "gg_jetpack"
#define ClassJetpack_P "gg_jetpack_p"
#define ClassRocket "gg_bazooka"
#define ItemName "Jetpack+Bazooka"
#define ItemCost 10000
#define RocketSpeed 1500
#define RocketRadius 250.0
#define RocketDamage 100.0
#define JpFwdSpeed 400
#define JpUpVelocity 200.0
#define MaxGas 300
#define IconGreenGas 299
#define IconYellowGas 200
#define IconRedGas 100
#define FlameAndSoundRate 6

//Uncomment this to fully disable knockback
//#define DISABLE_ALL_KNOCKBACK

//Uncomment this to make dropped jetpack bouncing
//#define MAKE_JETPACK_BOUNCING

//Uncomment this to allow player to drop their jetpack
//#define ALLOW_DROP_JETPACK

//Uncomment this to enable death effect (gibs and blood) killed by rocket
//#define MAKE_DEATH_EFFECT

//Uncomment this to enable status icon
//#define MAKE_STATUS_ICON

new iGas[33], Float:fLastShot[33], bool:bHasJetpack[33], SprTrail, SprExplode, SprRing, SprFlame, iMsgScreenShake

#if defined MAKE_DEATH_EFFECT
new bool:bKilledByRocket[33]
#endif

#if defined MAKE_STATUS_ICON
new iMsgStatusIcon
#endif

const PDATA_SAFE = 2
const OFFSET_WEAPONOWNER = 41
const OFFSET_LINUX_WEAPONS = 4

public plugin_precache()
{
	SprTrail = precache_model("sprites/smoke.spr")
	SprExplode = precache_model("sprites/zerogxplode.spr")
	SprRing = precache_model("sprites/shockwave.spr")
	SprFlame = precache_model("sprites/xfireball3.spr")
	
	precache_model(ModelRocket)
	precache_model(ModelJetpack_P)
	precache_model(ModelJetpack_W)
	precache_model(ModelJetpack_V)
	
	precache_sound(SoundFire)
	precache_sound(SoundTravel)
	precache_sound(SoundFly)
	precache_sound(SoundBlow)
	precache_sound(SoundPickup)
}

public plugin_init()
{
	register_plugin(ItemName, "0.0.1", "wbyokomo") //30.October.2014 04:21PM
	
	register_event("HLTV", "OnNewRound", "a", "1=0", "2=0")
	
	RegisterHam(Ham_Killed, "player", "OnKilled")
	//RegisterHam(Ham_Killed, "player", "OnKilled", 0, true) //this is for new amx183devbuild only
	RegisterHam(Ham_Item_Deploy, "weapon_knife", "OnDeployKnifePost", 1)
	
	register_touch(ClassJetpack, "player", "OnTouchJetPack")
	register_touch(ClassRocket, "*", "OnTouchRocket")
	
	register_forward(FM_ClientDisconnect, "OnClientDisconnect")
	register_forward(FM_CmdStart, "OnCmdStart")
	
	iMsgScreenShake = get_user_msgid("ScreenShake")
	
	#if defined MAKE_STATUS_ICON
	iMsgStatusIcon = get_user_msgid("StatusIcon")
	#endif
	
	#if defined ALLOW_DROP_JETPACK
	register_clcmd("drop_jp", "CmdDropJetPack")
	#endif
	
	register_clcmd("say /jp", "CmdBuyJetPack")
	register_clcmd("say_team /jp", "CmdBuyJetPack")
}

#if defined ALLOW_DROP_JETPACK
public CmdDropJetPack(id)
{
	if(!is_user_alive(id) || !bHasJetpack[id]) return PLUGIN_HANDLED;
	
	CreateWorldJetPack(id)
	RemovePlayerJetPack(id)
	bHasJetpack[id] = false
	#if defined MAKE_STATUS_ICON
	DrawColoredIcon(id)
	#endif
	
	return PLUGIN_HANDLED;
}
#endif

public CmdBuyJetPack(id)
{
	if(!is_user_alive(id)) return PLUGIN_HANDLED;
	
	if(cs_get_user_team(id) == CS_TEAM_T) return 0
	
	if(bHasJetpack[id])
	{
		client_print(id, print_chat, "[JETPACK] You already have this item.")
		return PLUGIN_HANDLED;
	}
	
	new money = cs_get_user_money(id)
	if(money < ItemCost)
	{
		client_print(id, print_chat, "[JETPACK] Not enough CASH to purchase this item.")
		return PLUGIN_HANDLED;
	}
	
	CreateJetPack(id, 1)
	client_print(id, print_chat, "[JETPACK] You got a Jetpack, fly like a BOSS. Hold 'JUMP+DUCK' to fly.")
	client_print(id, print_chat, "[JETPACK] Press mouse 'RIGHT-CLICK' to shoot rocket.")
	emit_sound(id, CHAN_STATIC, SoundPickup, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
	cs_set_user_money(id, money-ItemCost)
	
	return PLUGIN_CONTINUE; //let others see /jp in chat, so they know you purchase a Jetpack
}

public OnNewRound()
{
	remove_entity_name(ClassJetpack)
}

public client_putinserver(id)
{
	ResetPlayerData(id)
}

public OnClientDisconnect(id)
{
	if(bHasJetpack[id])
	{
		ResetPlayerData(id)
		RemovePlayerJetPack(id)
	}
}

public OnKilled(id, atk, gibs)
{
	if(bHasJetpack[id])
	{
		ResetPlayerData(id)
		CreateWorldJetPack(id)
		RemovePlayerJetPack(id)
		#if defined MAKE_STATUS_ICON
		DrawColoredIcon(id)
		#endif
	}
	
	#if defined MAKE_DEATH_EFFECT
	if(bKilledByRocket[id])
	{
		SetHamParamInteger(3, 2)
		new Float:fOrigin[3]; pev(id, pev_origin, fOrigin);
		engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
		write_byte(TE_LAVASPLASH)
		engfunc(EngFunc_WriteCoord, fOrigin[0])
		engfunc(EngFunc_WriteCoord, fOrigin[1])
		engfunc(EngFunc_WriteCoord, fOrigin[2])
		message_end()
		bKilledByRocket[id] = false
	}
	#endif
}

public OnCmdStart(id, uc_handle, random_seed)
{
	if(!bHasJetpack[id]) return;
	
	static button; button = get_uc(uc_handle, UC_Buttons);
	if((iGas[id] > 0) && (button & IN_DUCK) && (button & IN_JUMP))
	{
		static Float:Velocity[3]
		velocity_by_aim(id, JpFwdSpeed, Velocity)
		Velocity[2] = JpUpVelocity
		entity_set_vector(id, EV_VEC_velocity, Velocity)
		iGas[id] --
		
		if(random(FlameAndSoundRate) == 2) //make random chance to draw flame & play sound to reduce lag, send MSG_PVS instead of MSG_BROADCAST
		{
			if(iGas[id] > 160) emit_sound(id, CHAN_WEAPON, SoundFly, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			else emit_sound(id, CHAN_WEAPON, SoundBlow, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			
			static Float:Origin[3]
			entity_get_vector(id, EV_VEC_origin, Origin)
			engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
			write_byte(TE_SPRITE)
			engfunc(EngFunc_WriteCoord, Origin[0])
			engfunc(EngFunc_WriteCoord, Origin[1])
			engfunc(EngFunc_WriteCoord, Origin[2])
			write_short(SprFlame)
			write_byte(8)
			write_byte(200)
			message_end()
		}
	}
	else if(button & IN_ATTACK2)
	{
		static Float:ctime; ctime = get_gametime();
		if(fLastShot[id] < ctime)
		{
			fLastShot[id] = ctime+10.0
			CmdRocket(id)
		}
	}
	else if(button & IN_USE)
	{
		static Float:fVelocity[3]; entity_get_vector(id, EV_VEC_velocity, fVelocity);
		if(fVelocity[2] < 0.0)
		{
			fVelocity[2] = -60.0
			entity_set_vector(id, EV_VEC_velocity, fVelocity)
		}
	}
	else if((iGas[id] < MaxGas) && !(button & IN_DUCK) && !(button & IN_JUMP))
	{
		iGas[id] ++
	}
	
	//draw colored icon based on gas amount
	#if defined MAKE_STATUS_ICON
	if(iGas[id] == IconGreenGas) DrawColoredIcon(id, 1, 0, 255, 0);
	else if(iGas[id] == IconYellowGas) DrawColoredIcon(id, 1, 255, 255, 0);
	else if(iGas[id] == IconRedGas) DrawColoredIcon(id, 1, 255, 0, 0);
	#endif
}

#if defined MAKE_STATUS_ICON
DrawColoredIcon(id, mode=0, r=0, g=0, b=0)
{
	if(!mode)
	{
		message_begin(MSG_ONE, iMsgStatusIcon, _, id)
		write_byte(0)
		write_string("item_longjump")
		message_end()
	}
	else
	{
		message_begin(MSG_ONE, iMsgStatusIcon, _, id)
		write_byte(1) //mode
		write_string("item_longjump")
		write_byte(r) //r
		write_byte(g) //g
		write_byte(b) //b
		message_end()
	}
}
#endif

public OnDeployKnifePost(ent)
{
	if(pev_valid(ent) == PDATA_SAFE)
	{
		new id = get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS)
		if(pev_valid(id) && bHasJetpack[id]) set_pev(id, pev_viewmodel2, ModelJetpack_V);
	}
}

public OnTouchJetPack(ent, id)
{
	if(is_valid_ent(ent) && is_user_connected(id))
	{
		if(!is_user_alive(id) || bHasJetpack[id]) return PLUGIN_HANDLED;
		
		entity_set_int(ent, EV_INT_solid, SOLID_NOT)
		remove_entity(ent)
		CreateJetPack(id, 0)
		client_print(id, print_chat, "[JETPACK] You got a Jetpack, fly like a BOSS. Hold 'JUMP+DUCK' to fly.")
		client_print(id, print_chat, "[JETPACK] Press mouse 'RIGHT-CLICK' to shoot rocket.")
		emit_sound(id, CHAN_STATIC, SoundPickup, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
	}
	
	return PLUGIN_CONTINUE;
}

public OnTouchRocket(ent, id)
{
	if(!is_valid_ent(ent)) return;
	
	entity_set_int(ent, EV_INT_solid, SOLID_NOT)
	emit_sound(ent, CHAN_VOICE, SoundTravel, VOL_NORM, ATTN_NORM, SND_STOP, PITCH_NORM) //stop rocket loop sound
	new Float:atkOrigin[3]
	entity_get_vector(ent, EV_VEC_origin, atkOrigin)
	
	//explosion
	engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, atkOrigin, 0)
	write_byte(TE_EXPLOSION)
	engfunc(EngFunc_WriteCoord, atkOrigin[0])
	engfunc(EngFunc_WriteCoord, atkOrigin[1])
	engfunc(EngFunc_WriteCoord, atkOrigin[2])
	write_short(SprExplode)
	write_byte(30)
	write_byte(30)
	write_byte(10)
	message_end()
	
	//ring
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, atkOrigin, 0)
	write_byte(TE_BEAMCYLINDER)
	engfunc(EngFunc_WriteCoord, atkOrigin[0])
	engfunc(EngFunc_WriteCoord, atkOrigin[1])
	engfunc(EngFunc_WriteCoord, atkOrigin[2])
	engfunc(EngFunc_WriteCoord, atkOrigin[0])
	engfunc(EngFunc_WriteCoord, atkOrigin[1])
	engfunc(EngFunc_WriteCoord, atkOrigin[2]+500.0)
	write_short(SprRing)
	write_byte(0)
	write_byte(0)
	write_byte(5)
	write_byte(30)
	write_byte(0)
	write_byte(224)
	write_byte(224)
	write_byte(224)
	write_byte(255)
	write_byte(0)
	message_end()
	
	//get attacker
	new attacker = entity_get_edict(ent, EV_ENT_owner)
	if(!is_user_connected(attacker))
	{
		remove_entity(ent)
		return;
	}
	
	//get victim
	new victim = -1
	while((victim = engfunc(EngFunc_FindEntityInSphere, victim, atkOrigin, RocketRadius)) != 0)
	{
		if(!is_user_alive(victim)) continue; //not alive
		if(cs_get_user_team(attacker) == cs_get_user_team(victim)) continue; //friendly fire
		
		//damage calculation
		new Float:fOrigin[3], Float:fDistance, Float:fDamage
		pev(victim, pev_origin, fOrigin)
		fDistance = get_distance_f(fOrigin, atkOrigin)
		fDamage = RocketDamage - floatmul(RocketDamage, floatdiv(fDistance, RocketRadius))
		fDamage *= 1.0
		if(fDamage < 1.0) continue;
		
		//screen shake
		message_begin(MSG_ONE_UNRELIABLE, iMsgScreenShake, _, victim)
		write_short((1<<12)*8)
		write_short((1<<12)*3)
		write_short((1<<12)*18)
		message_end()
		
		//do damage & knockback
		#if !defined DISABLE_ALL_KNOCKBACK
		xs_vec_sub(fOrigin, atkOrigin, fOrigin)
		xs_vec_mul_scalar(fOrigin, fDamage * 0.7, fOrigin)
		xs_vec_mul_scalar(fOrigin, RocketDamage / xs_vec_len(fOrigin), fOrigin)
		set_pev(victim, pev_velocity, fOrigin)
		#endif
		
		#if defined MAKE_DEATH_EFFECT
		new Float:fHealth; pev(victim, pev_health, fHealth);
		fHealth = fHealth - fDamage
		if(fHealth <= 0.0)
		{
			//this is much simple but gibs velocity is not awesome, so we move to Ham_Killed to set gibs death
			/*ExecuteHamB(Ham_Killed, victim, attacker, 2)
			pev(victim, pev_origin, fOrigin)
			engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
			write_byte(TE_LAVASPLASH)
			engfunc(EngFunc_WriteCoord, fOrigin[0])
			engfunc(EngFunc_WriteCoord, fOrigin[1])
			engfunc(EngFunc_WriteCoord, fOrigin[2])
			message_end()*/
			bKilledByRocket[victim] = true
		}
		#endif
		
		ExecuteHamB(Ham_TakeDamage, victim, ent, attacker, fDamage, DMG_BULLET)
		//debug chat to see damage done
		//client_print(attacker, print_chat, "Rocket damage: %f -- Victim: %d", fDamage, victim)
	}
	
	remove_entity(ent)
}

CreateJetPack(id, fullgas)
{
	new ent = create_entity("info_target")
	if(!is_valid_ent(ent)) return;
	
	bHasJetpack[id] = true
	if(fullgas) iGas[id] = MaxGas;
	new Float:Origin[3]
	entity_get_vector(id, EV_VEC_origin, Origin)
	entity_set_string(ent, EV_SZ_classname, ClassJetpack_P)
	entity_set_model(ent, ModelJetpack_P)
	entity_set_origin(ent, Origin)
	entity_set_int(ent, EV_INT_movetype, MOVETYPE_FOLLOW)
	entity_set_edict(ent, EV_ENT_aiment, id)
	entity_set_int(ent, EV_INT_solid, SOLID_NOT)
	entity_set_size(ent, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0})
	entity_set_edict(ent, EV_ENT_owner, id)
}

CreateWorldJetPack(id)
{
	new ent = create_entity("info_target")
	if(!is_valid_ent(ent)) return;
	
	new Float:Aim[3], Float:Origin[3], iColor[3]
	velocity_by_aim(id, 32, Aim)
	entity_get_vector(id, EV_VEC_origin, Origin)
	Origin[0] += 2*Aim[0]
	Origin[1] += 2*Aim[1]
	entity_set_string(ent, EV_SZ_classname, ClassJetpack)
	entity_set_model(ent, ModelJetpack_W)
	#if defined MAKE_JETPACK_BOUNCING
	entity_set_int(ent, EV_INT_movetype, MOVETYPE_BOUNCE)
	#else
	entity_set_int(ent, EV_INT_movetype, MOVETYPE_TOSS)
	#endif
	entity_set_int(ent, EV_INT_solid, SOLID_TRIGGER)
	entity_set_size(ent, Float:{-8.0, -8.0, -8.0}, Float:{8.0, 8.0, 8.0})
	entity_set_float(ent, EV_FL_gravity, 1.25)
	entity_set_vector(ent, EV_VEC_origin, Origin)
	velocity_by_aim(id, 400, Aim)
	entity_set_vector(ent, EV_VEC_velocity, Aim)
	iColor[0] = random_num(16,255)
	iColor[1] = random(255)
	iColor[2] = random(255)
	set_rendering(ent, kRenderFxGlowShell, iColor[0], iColor[1], iColor[2], kRenderNormal, 0)
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_BEAMFOLLOW)
	write_short(ent)
	write_short(SprTrail)
	write_byte(10)
	write_byte(5)
	write_byte(iColor[0])
	write_byte(iColor[1])
	write_byte(iColor[2])
	write_byte(192)
	message_end()
}

CmdRocket(id)
{
	new ent = create_entity("info_target")
	if(!is_valid_ent(ent)) return;
	
	new Float:origin[3], Float:velocity[3]
	entity_get_vector(id, EV_VEC_origin, origin)
	origin[2] += 16.0
	entity_set_string(ent, EV_SZ_classname, ClassRocket)
	entity_set_model(ent, ModelRocket)
	entity_set_origin(ent, origin)
	entity_set_int(ent, EV_INT_movetype, MOVETYPE_FLY)
	entity_set_int(ent, EV_INT_solid, SOLID_BBOX)
	entity_set_size(ent, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0})
	entity_set_edict(ent, EV_ENT_owner, id)
	velocity_by_aim(id, 1500, velocity)
	entity_set_vector(ent, EV_VEC_velocity,	velocity)
	vector_to_angle(velocity, origin)
	entity_set_vector(ent, EV_VEC_angles, origin)
	entity_set_int(ent, EV_INT_effects, EF_LIGHT)
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_BEAMFOLLOW)
	write_short(ent)
	write_short(SprTrail)
	write_byte(30)
	write_byte(5)
	write_byte(224)
	write_byte(224)
	write_byte(224)
	write_byte(192)
	message_end()
	
	emit_sound(id, CHAN_STATIC, SoundFire, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
	emit_sound(ent, CHAN_VOICE, SoundTravel, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}

RemovePlayerJetPack(id)
{
	new ent = -1
	while((ent = find_ent_by_class(ent, ClassJetpack_P)))
	{
		if(!is_valid_ent(ent)) continue;
		if(entity_get_edict(ent, EV_ENT_owner) != id) continue;
		
		remove_entity(ent)
	}
}

ResetPlayerData(id)
{
	bHasJetpack[id] = false
	fLastShot[id] = 0.0
	iGas[id] = MaxGas
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/

User avatar
Hathlze2002
Membru, skill 0
Membru, skill 0
Posts: 22
Joined: 09 Dec 2020, 17:54
Detinator Steam: Da
CS Status: Citesc forumul eXtreamCS.com...!
Detinator server CS: CS.CSUNDERWORLD.RO
Fond eXtream: 0
Has thanked: 8 times

10 Dec 2020, 16:55

Mersi mult! Merge pluginul.
User avatar
Hathlze2002
Membru, skill 0
Membru, skill 0
Posts: 22
Joined: 09 Dec 2020, 17:54
Detinator Steam: Da
CS Status: Citesc forumul eXtreamCS.com...!
Detinator server CS: CS.CSUNDERWORLD.RO
Fond eXtream: 0
Has thanked: 8 times

11 Dec 2020, 16:44

Oare poti face sa dispara bazooka in urmatoarea runda? Ca e o mica problema la mutarea echipelor
Post Reply

Return to “Cereri”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 33 guests