﻿//
//	Jetpack Menu 0.2 By stabby@zmmapperz.net
//	
//	Requirements: Eventscripts 1.5+ , ESTOOLS 0.420C (Required only for push on liftoff and speed multiplier)
//
//

block load
{
	es_xload popup
	es_xload corelib

	es_xset jetpack_command "!jetpackmenu"				// Ввод команды в чат
	es_xset jetpack_mode 1						// If 1 gives player a jetpack on spawn, if 2 gives players a jetpack only on roundstart.
	es_xset jetpack_fuel 999999					// Fuel units a player gets with jetpack. 0 = Unlimited Fuel.
	es_xset jetpack_burn_per_second 9999				// How many units of fuel to burn per second if jetpack is active
	es_xset jetpack_command "!jetpackmenu"				// Команда вводимая в чат чтобы открылось джетпак меню!
	es_xset jetpack_sound_on "jetpack/jetpack_on.mp3"		// Sound to be played when jetpack is turned on.
	es_xset jetpack_sound_off "jetpack/jetpack_off.mp3"		// Sound to be played when jetpack is turned off.
	es_xset jetpack_sound_loop "jetpack/jetpack_loop.mp3"		// Sound to be played while jetpack is activated.
	es_xset jetpack_push 600					// Amount of units a player is pushed into the air when jetpack is turned on
	es_xset jetpack_gravity	0.5					// Gravity multiplier to give to player when jetpack is activated.
	es_xset jetpack_teams "2;3"					// Teams which are allowed to use jetpack.
	es_xset jetpack_knockback 0					// If 1 enable special knockback system for players in jetpack. !! NOT WORKING YET
	es_xset jetpack_strip_roundend 0				// If 1 all players lose jetpack on roundstart
	es_xset jetpack_strip_1stzombie 1				// If 1 first zombies lose their jetpack.
	es_xset jetpack_fall_chance 6					// If nonzero specifies the chance a player might fall down of being shot while jetpack is active, 2 means 1 in 2 or 50% chance . 0 = never fall
	es_xset jetpack_speed 3.3					// Speed multiplier for players while jetpack is activate.
	es_xset jetpack_smoketrail 1					// If 1 activates a smoketrail to follow player when jetpack is active.
	es_xset jetpack_smoketrail_fadetime 3				// Amount of seconds after jetpack is deactivated smoketrail disappears.	
	es_xset jetpack_smoketrail_basespread 5 			// How many game units the smoke spread around its base.
	es_xset jetpack_smoketrail_spreadspeed 10			// The speed at which the smoke particles move after they're spawned. 
	es_xset jetpack_smoketrail_speed 40				// Speed of emission of smoke particle.
	es_xset jetpack_smoketrail_endsize 10				// End size of smoke particles.
	es_xset jetpack_smoketrail_startsize 5				// Start size of smoke particles.
	es_xset jetpack_smoketrail_rate 40				// Rate at which to emit smoke particles (i.e. particles to emit per second).  
	es_xset jetpack_smoketrail_jetlength 180			// Length of the smoke. Lifetime of the smoke particles is derived from this & particle speed. 
	es_xset jetpack_smoketrail_visibility 75			// Visibility of smoke, 0 = invisible, 255 = totally visible
	es_xset jetpacK_smoketrail_rendercolor "200 200 200"		// RGB Color value of jetpack smoke.

	es_xregcmd jetpack_activate jetpackmenu/activatorblock
	es_xregcmd jetpack_deactivate jetpackmenu/deactivatorblock
	es_xregcmd jetpack_give jetpackmenu/giveplayerjetpack
	es_xregcmd jetpack_smoke jetpackmenu/givesmoke
	es_xregcmd jetpack_desmoke jetpackmenu/takesmoke
	es_xregcmd jetpack_checkhurt jetpackmenu/check_hurt
	es_xregcmd jetpack_strip jetpackmenu/stripjetpack
	es_regclientcmd +jetpack jetpackmenu/buttonon
	es_regclientcmd -jetpack jetpackmenu/buttonoff
	es_xregcmd jetpack_createloop jetpackmenu/createfuelloop
	es_xregcmd burnitup jetpackmenu/burnitupblock
	es_regsaycmd server_var(jetpack_command) jetpackmenu/jetpack_command
	es_regsaycmd jetpack jetpackmenu/jetpack_command	
	es_regsaycmd !jetpackmenu jetpackmenu/jetpack_command

	popup create jetpackmenu1 
	popup addline jetpackmenu1 ":Джетпак меню"
	popup addline jetpackmenu1 "________________________"
	popup addline jetpackmenu1 " "
	popup addline jetpackmenu1 "->1. Включить джетпак"
	popup addline jetpackmenu1 "0. Выход"
	popup menuselect jetpackmenu1 jetpackmenu/jpm1c

	popup create jetpackmenu2 
	popup addline jetpackmenu2 ":Джетпак меню"
	popup addline jetpackmenu2 "________________________"
	popup addline jetpackmenu2 " "
	popup addline jetpackmenu2 "->1. Выключить джетпак"
	popup addline jetpackmenu2 "0. Выход"
	popup menuselect jetpackmenu2 jetpackmenu/jpm2c

	es_xset jvar1 0
	es_xset jvar2 0
	es_xset jvar3 0
	es_xformatv jvar1 "sound/%1" jetpack_sound_on
	es_xformatv jvar2 "sound/%1" jetpack_sound_off
	es_xformatv jvar3 "sound/%1" jetpack_sound_loop
	es downloadable server_var(jvar1)
	es downloadable server_var(jvar2)
	es downloadable server_var(jvar3)
	es_xset jetpack_menu_version "Джетпак меню"
	es_xmakepublic jetpack_menu_version
}

block buttonon
{
	es_xset butuid 0
	es_getcmduserid butuid 
	es_xset r_hasjetpack 0
	es playervar get r_hasjetpack server_var(butuid) HASJETPACK
	if (server_var(r_hasjetpack) == 1) do
	{
		es_xset r_active 0
		es playervar get r_active server_var(butuid) JETPACK_ON
		if (server_var(r_active) == 0) then es jetpack_activate server_var(butuid)
	}
	else es_tell server_var(butuid) #green У вас нет джетпака !
}

event round_end
{
	if (server_var(jetpack_strip_roundend) == 1) then es foreach player tempid #alive "es jetpack_strip server_var(tempid)"
}
block buttonoff
{
	es_xset butuid2 0
	es_getcmduserid butuid2 
	es_xset r_hasjetpack 0
	es playervar get r_hasjetpack server_var(butuid2) HASJETPACK
	if (server_var(r_hasjetpack) == 1) do
	{

		es_xset r_active 0
		es playervar get r_active server_var(butuid2) JETPACK_ON
		if (server_var(r_active) == 1) then es jetpack_deactivate server_var(butuid2)
	}
	else es_tell server_var(butuid2) #green У вас нет джетпака!
}


block unload
{
	es_xdoblock jetpackmenu/deload
}

block deload
{
	popup delete jetpackmenu1
	popup delete jetpackmenu2
	es_unregsaycmd server_var(jetpack_command)
}
event es_map_start
{
	es_xdoblock jetpackmenu/deload
	es_xdoblock jetpackmenu/load
	
	es downloadable server_var(jvar1)
	es downloadable server_var(jvar2)
	es downloadable server_var(jvar3)
}

block jpm1c
{
	if (server_var(_popup_choice) == 1) do
	{
		es jetpack_activate server_var(_popup_userid)
	}
}

block jpm2c
{
	if (server_var(_popup_choice) == 1) do
	{
		es jetpack_deactivate server_var(_popup_userid)
		es popup send jetpackmenu1 server_var(deactivate_uid) 
	}
}

event player_spawn
{
	if (server_var(jetpack_mode) == 1) do
	{
		if (event_var(es_userteam) in server_var(jetpack_teams)) then es jetpack_give event_var(userid)
	}
}

event round_start
{
	es_xset rswitch 0

	if (server_var(jetpack_mode) == 2) do
	{
		if ("2" in server_var(jetpack_teams)) then es foreach player tempterrorist #t#alive "es jetpack_give server_var(tempterrorist)"
		if ("3" in server_var(jetpack_teams)) then es foreach player tempcounterterrorist #ct#alive "es jetpack_give server_var(tempcounterterrorist)"
	}

	if (server_var(jetpack_strip_1st_zombie) == 1) do
	{
		es_delayed server_var(zombie_timer_max) es_xset rswitch 1
		es_delayed server_var(zombie_timer_max) es_xdoblock jetpackmenu/find1st
	}



}

block find1st
{
	if (server_var(rswitch) == 1) do
	{
		es foreach player tempid #t#alive "es jetpack_strip server_var(tempid)"
	}
}


block jetpack_command
{
	es_xset cmd_jetpack_uid 0
	es_xset cmd_jetpack_team 0
	es_xgetcmduserid cmd_jetpack_uid
	es_getplayerteam cmd_jetpack_team server_var(cmd_jetpack_uid)
	if (server_var(cmd_jetpack_team) in server_var(jetpack_teams)) do
	{
		es_xset r_hasjetpack 0
		es playervar get r_hasjetpack server_var(cmd_jetpack_uid) HASJETPACK
		if (server_var(r_hasjetpack) == 1) do
		{	
			es_xset r_active 0
			es playervar get r_active server_var(cmd_jetpack_uid) JETPACK_ON
			if (server_var(r_active) == 0) then es popup send jetpackmenu1 server_var(cmd_jetpack_uid)	
			if (server_var(r_active) == 1) then es popup send jetpackmenu2 server_var(cmd_jetpack_uid)
		}
		else do
		{
			usermsg hudhint server_var(cmd_jetpack_uid) "У вас нет джетпака!"
			es popup send equipmenu1 server_var(cmd_jetpack_uid) 
		}
	}
}

block activatorblock
{	
	es_xset activate_uid 0
	es_xgetargv activate_uid 1

	es_xset r_fuel 0
	es playervar get r_fuel server_var(activate_uid) CURRENT_FUEL
	if (server_var(r_fuel) > 0) do
	{
		es jetpack_createloop server_var(activate_uid)
		es_xset gravstring 0
		es_xformatv gravstring "gravity %1" jetpack_gravity
		es_fire server_var(activate_uid) !self addoutput server_var(gravstring)	
		// es playerset push server_var(activate_uid) 0 server_var(jetpack_push)
		es est_physpush server_var(activate_uid) 0 0 server_var(jetpack_push)
		es_emitsound player server_var(activate_uid) server_var(jetpack_sound_on) 0.8 0.8
		es playerset jetpack server_var(activate_uid) 1
		es est_speed server_var(activate_uid) server_var(jetpack_speed)
		es_xset r_fuel 0
		es playervar get r_fuel server_var(activate_uid) CURRENT_FUEL 
		es playervar set server_var(activate_uid) JETPACK_ON 1
		es popup send jetpackmenu2 server_var(activate_uid) 
		es usermsg hudhint server_var(activate_uid) " Джетпак активирован"
		if (server_var(jetpack_smoketrail) == 1) then es jetpack_smoke server_var(activate_uid)
	}
	else es usermsg hudhint server_var(activate_uid) "У вас не осталось топлива!"
}

event player_death
{
	es_xset r_has 0
	es playervar get r_has event_var(userid) HASJETPACK
	if (server_var(r_has) == 1) do
	{
		es_xset r_on 0
		es playervar get r_on event_var(userid) JETPACK_ON
		if (server_var(r_on) == 1) then es jetpack_deactivate event_var(userid)
		es popup unsendname jetpackmenu1 event_var(userid)
		es popup unsendname jetpackmenu2 event_var(userid)
		es jetpack_strip event_var(userid)
	}
}


block stripjetpack
{
	es_xset argument 0
	es_xgetargv argument 1
	es_xset r_has 0 
	es playervar get r_has server_var(argument) HASJETPACK
	if (server_var(r_has) == 1) do
	{
		es_xset r_on 0
		es playervar get r_on server_var(argument) JETPACK_ON
		if (server_var(r_on) == 1) then es jetpack_deactivate server_var(argument)

		es playervar set server_var(argument) CURRENT_FUEL 0
		es playervar set server_var(argument) HASJETPACK 0
		es playervar set server_var(argument) USED 0
		es playerset jetpack server_var(argument) 0
		es_fire server_var(argument) !self addoutput "Gravity 1	"
		es est_speed server_var(argument) 1
	}
	 
}

block deactivatorblock
{
	es_xset deactivate_uid 0
	es_xgetargv deactivate_uid 1

	es_emitsound player server_var(deactivate_uid) server_var(jetpack_sound_off) 0.8 0.8
	es playerset jetpack server_var(deactivate_uid) 0
	es est_speed server_var(deactivate_uid) 1
	es_fire server_var(deactivate_uid) !self addoutput "Gravity 1"
	es playervar set server_var(deactivate_uid) JETPACK_ON 0
	es usermsg hudhint server_var(deactivate_uid) " Джетпак выключен"
	if (server_var(jetpack_smoketrail) == 1) then es_delayed server_var(jetpack_smoketrail_fadetime) jetpack_desmoke server_var(deactivate_uid)
	// es est_physpush server_var(deactivate_uid) 0 0 -200
	es_xset loopname3 0
	es_xformatv loopname3 "LOOPER_%1" deactivate_uid
	es repeat stop server_var(loopname3)
	es repeat delete server_var(loopname3)

		
}

block check_hurt
{
	es_xset r_on 0
	es_xset hurt_user 0
	es_xset hurt_attacker 0
	es_xgetargv hurt_user 1
	es_xgetargv hurt_attacker 2

	es playervar get r_on server_var(hurt_user) JETPACK_ON
	if (server_var(r_on) == 1) do
	{
		if (server_var(jetpack_knockback) == 0) do
		{
			es_xset rando 0
			es_rand rando 1 server_var(jetpack_fall_chance)
			if (server_var(rando) == 1) do
			{
				es est_physpush server_var(hurt_user) 0 0 -200
				es jetpack_deactivate server_var(hurt_user) 
				es popup unsendname jetpackmenu1 server_var(hurt_user) 
				es popup unsendname jetpackmenu2 server_var(hurt_user) 
				es_delayed 1 popup send jetpackmenu1 server_var(hurt_user) 
			}
		}
		if (server_var(jetpack_knockback) == 1) do
		{
			es_xset tempvector 0
			es_xset tempvector2 0
			es_xset tempx 0
			es_xset tempy 0
			es_xset tempz 0
			es playerget viewvector tempvector server_var(hurt_attacker)
			es_splitvectorstring tempx tempy tempz server_var(tempvector)
			es_math tempx multiply 10
			es_math tempy multiply 10
			es_math tempz multiply 10
			es_createvectorfrompoints tempvector server_var(tempx) server_var(tempy) server_var(tempz)
			es_setplayerprop server_var(hurt_user) "CBasePlayer.localdata.m_vecBaseVelocity" server_var(tempvector)
		}
	}
	
}

event player_hurt
{
	if (server_var(jetpack_fall_chance) > 0) then es jetpack_checkhurt event_var(userid) event_var(attacker)
		
}

block giveplayerjetpack
{
	es_xset argument 0
	es_xgetargv argument 1

	es_xset r_fuel 0
	es playervar get r_fuel server_var(argument) CURRENT_FUEL
	es_math r_fuel + server_var(jetpack_fuel)
	es playervar set server_var(argument) CURRENT_FUEL server_var(r_fuel)

	es_emitsound player server_var(argument) "items/itempickup.wav" 0.8 0.8
	es playervar set server_var(argument) HASJETPACK 1
	es_xset givestring 0
	es_xformatv givestring " Вы получили джетпак!\n введите в чат %1 чтобы использовать его!" jetpack_command
	es usermsg hudhint server_var(argument) server_var(givestring)	
	es_xset gettername 0
	es_getplayername gettername server_var(argument)
	es_msg #multi #lightgreen [Джетпак] #default Игрок server_var(gettername) получил джетпак!
	es playervar set server_var(argument) USED 0
}


block givesmoke
{
	es_xset smokeuser 0
	es_xgetargv smokeuser 1
	es_xset smvar 0
	es_xset smvar2 0
	es_format smvar "SM_%1" server_var(smokeuser)

	es_fire server_var(smokeuser) !self addoutput targetname server_var(smvar)
	es_give server_var(smokeuser) env_smokestack
	es_xset smvar3 0
	es_format smvar3 "TRAIL%1" server_var(smokeuser)

        es est_setentname server_var(eventscripts_lastgive) server_var(smvar3)

	es_xset bsvar 0
	es_xformatv bsvar "Basespread %1" jetpack_smoketrail_basespread

	es_xset ssvar 0
	es_xformatv ssvar "SpreadSpeed %1" jetpack_smoketrail_spreadspeed

	es_xset ssvar2 0
	es_xformatv ssvar2 "Startsize %1" jetpack_smoketrail_startsize 

	es_xset esvar 0
	es_xformatv esvar "EndSize %1" jetpack_smoketrail_endsize

	es_xset spvar 0
	es_xformatv spvar "speed %1" jetpack_smoketrail_speed

	es_xset rvar 0
	es_xformatv rvar "Rate %1" jetpack_smoketrail_rate

	es_xset jlvar 0
	es_xformatv jlvar "Jetlength %1" jetpack_smoketrail_jetlength

	es_xset rcvar 0
	es_xformatv rcvar "Rendercolor %1" jetpack_smoketrail_rendercolor

	es_xset ravar 0
	es_xformatv ravar "Renderamt %1" jetpack_smoketrail_alpha

	es_fire server_var(smokeuser) server_var(smvar3) addoutput server_var(bsvar)
	es_fire server_var(smokeuser) server_var(smvar3) addoutput "Angles 0 0 -100"
	es_fire server_var(smokeuser) server_var(smvar3) addoutput server_var(ssvar)
	es_fire server_var(smokeuser) server_var(smvar3) addoutput server_var(spvar)
	es_fire server_var(smokeuser) server_var(smvar3) addoutput server_var(esvar)
	es_fire server_var(smokeuser) server_var(smvar3) addoutput server_var(ssvar2)
	es_fire server_var(smokeuser) server_var(smvar3) addoutput server_var(spvar)
	es_fire server_var(smokeuser) server_var(smvar3) addoutput server_var(rvar)
	es_fire server_var(smokeuser) server_var(smvar3) addoutput server_var(jlvar)
	es_fire server_var(smokeuser) server_var(smvar3) addoutput server_var(rcvar)
	es_fire server_var(smokeuser) server_var(smvar3) addoutput server_var(ravar)
	es_fire server_var(smokeuser) server_var(smvar3) addoutput "Smokematerial particle/SmokeStack.vmt"
	es_fire server_var(smokeuser) server_var(smvar3) addoutput parentname server_var(smvar)
	es_fire server_var(smokeuser) server_var(smvar3) setparent !activator
	es_fire server_var(smokeuser) server_var(smvar3) TurnOn


	
}

block takesmoke
{
	es_xset smokeuser2 0
	es_xgetargv smokeuser2 1

	es_xset smvar5 0
	es_format smvar5 "TRAIL%1" server_var(smokeuser2)

	es_fire server_var(smokeuser2) server_var(smvar5) Turnoff

	es_fire server_var(smokeuser2) server_var(smvar5) addoutput "onuser1 !self,kill,-1,1"
	es_fire server_var(smokeuser2) server_var(smvar5) Onuser1
	es_fire server_var(smokeuser2) server_var(smvar5) Kill

}


block createfuelloop
{
	es_xset fuel_uid 0
	eS_xgetargv fuel_uid 1
	es_xset loopname 0
	es_xformatv loopname "LOOPER_%1" fuel_uid 
	es_xset loopstring2 0	
	es_xformatv loopstring2 "es burnitup %1" fuel_uid

	es repeat create server_var(loopname) server_var(loopstring2)
	es repeat start server_var(loopname) 1
}

block burnitupblock
{
	es_xset another_uid 0
	es_xgetargv another_uid 1
	
	es_xset r_fuel 0
	es playervar get r_fuel server_var(another_uid) CURRENT_FUEL
	if (server_var(r_fuel) > 0) do
	{
		es_math r_fuel - server_var(jetpack_burn_per_second)
		es playervar set server_var(another_uid) CURRENT_FUEL server_var(r_fuel)
		es_xset hudstring 0
		es_xformatv hudstring " Оставшееся топливо в джетпаке: %1" r_fuel
		es usermsg hudhint server_var(another_uid) server_var(hudstring)	
		es_emitsound player server_var(another_uid) server_var(jetpack_sound_loop) 0.5 0.5
	}
	else do
	{
		es jetpack_deactivate server_var(another_uid)
		es popup unsendname jetpackmenu1 server_var(another_uid)
		es popup unsendname jetpackmenu2 server_var(another_uid)
		es usermsg hudhint server_var(another_uid) "У вас не осталось топлива! \ntype !buy Купить больше!"
	}

}