Modificare plugin sa dispara bazooka urmatoarea runda

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

11 Dec 2020, 16:49

Plugin Cerut: gg_item_bazooka sa dispara urmatoarea runda
Descriere (adica ce face el mai exact): Vreau sa mi-l modifice cineva ca atunci cand se termina runda sa dispara sau in orice alt fel, ca urmatoarea runda sa dispara jetu.
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
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

11 Dec 2020, 17:13

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
#define DeleteInRoundEND 1

//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 DeleteInRoundEND == 1
		register_logevent("logevent_round_end", 2, "1=Round_End")
	#endif
}

	#if DeleteInRoundEND == 1
		public logevent_round_end(){
			static players[32],num,id
			get_players(players,num,"ch")
			for(new i=0;i<num;i++){
				id=players[i]
				if(!bHasJetpack[id])	continue
				ResetPlayerData(id)
				RemovePlayerJetPack(id)
				remove_entity_name(ClassJetpack)
			}
		}
	#endif

#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(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 }
*/
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
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, 17:41

Nu prea a facut niciun efect...treaba era sa dispara din "echipare" sa zic asa, cum ar fi o arma, sa dispara urmatoarea runda, din mana, nu de pe jos :D
Trebuia sa fiu si eu mai explicit..
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

11 Dec 2020, 18:19

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

	#if defined ALLOW_DROP_JETPACK
		#define DeleteInRoundEND 1
	#endif

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 DeleteInRoundEND == 1 && defined ALLOW_DROP_JETPACK
		register_logevent("logevent_round_end", 2, "1=Round_End")
	#endif
}

	#if DeleteInRoundEND == 1 && defined ALLOW_DROP_JETPACK
		public logevent_round_end(){
			static players[32],num,id
			get_players(players,num,"ach")
			for(new i=0;i<num;i++){
				id=players[i]
				CmdDropJetPack(id)
			}
		}
	#endif

#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(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 }
*/
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
Post Reply

Return to “Cereri”

  • Information