/////////////////////////////////////////// /// Yaki's Rocket Mini Sentry Template /// /// Sign Date: 9 Dec 21 /// /// Requested By: Skin King /// /////////////////////////////////////////// // How this Template works // Minisentries can fire rockets! Can be wrangled or not wrangled. Only fires rockets when it targets an enemy. // (however always fires while wrangled. Haven't figured that one out yet) // Rockets cost 10 ammo. Change the ammo used on these lines: // Threshhold amount == Line 288 // Ammo subtracted == Line 291 // The fire rates are on these lines // Non-Wrangled Sentry (1 sec) == Line 251 // Wrangled Sentry (0.5 sec) == Line 252 // Other useful adjustments // Origin of where rockets shoot from == Line 205 // How often logic checks sentry status == Line 232 WaveSchedule { /// standard mission stuff... StartingCurrency 30000 RespawnWaveTime 1 CanBotsAttackWhileInSpawnRoom No FixedRespawnWaveTime Yes Wave { WaveSpawn { WaitBeforeStarting 5 } } Wave { WaveSpawn { WaitBeforeStarting 5 } } Wave { WaveSpawn { WaitBeforeStarting 5 } } ItemAttributes { ItemName "The Jag" "engy sentry damage bonus" 0 //makes normal bulletfire not deal damage } /// ... onto the actual template... SpawnTemplate { Name "initialize_logic_rocketminisentry" } /// Point Templates for Rocket Mini Sentry PointTemplates { initialize_logic_rocketminisentry { NoFixUp 1 //IMPORTANT!! /// detect buildings template OnSpawnOutput { Target "rafmod_map_rot" Action "Open" } //filters filter_activator_class //detects all engineer devices { "targetname" "rafmod_filter_obj" "filterclass" "obj_*" } // func_door needed to detect buildings func_door { "targetname" "rafmod_map_rot" "mins" "-10 -10 -10" "maxs" "10 10 10" "movedir" "-90 0 0" "spawnflags" "4104" "speed" "0.1" "wait" "0.01" "OnFullyClosed" "!self,Open,,0,-1" } trigger_multiple { "targetname" "map_detect_building" "mins" "-10000 -10000 -10000" "maxs" "10000 10000 10000" "filtername" "rafmod_filter_obj" "spawnflags" "64" "parentname" "rafmod_map_rot" "OnStartTouch" "rafmod_filter_obj_sentrygun_is_rocket_mini,TestActivator,,0,-1" } filter_multi { "targetname" "rafmod_filter_obj_sentrygun_is_rocket_mini" "filter01" "rafmod_filter_obj_sentrygun_rocket_mini" "filter02" "rafmod_filter_var_rocket_mini" "filter03" "rafmod_filter_is_mini_sentry" "OnPass" "m_rocket_minisentry,ForceSpawnAtEntityOrigin,!activator,0,-1" } filter_activator_class { "targetname" "rafmod_filter_obj_sentrygun_rocket_mini" "filterclass" "obj_sentrygun" } $filter_variable { "targetname" "rafmod_filter_var_rocket_mini" "$name" "rocket_can_fire" "$value" "1" "Negated" "1" "$compare" "equal" } $filter_sendprop { "targetname" "rafmod_filter_is_mini_sentry" "$name" "m_bMiniBuilding" "$value" "1" } /// rocket minisentry maker env_entity_maker { "targetname" "m_rocket_minisentry" "EntityTemplate" "t_rocket_minisentry" } } /// Template for "m_rocket_minisentry" t_rocket_minisentry { /// This entire part parents the weapon mimic to the sentry. /// The "rafmod_obj_minirocket_trigger" is parented to the sentry ... that way we can adjust the weapon mimic's position on the sentry /// OnSpawnOutput { Target "rafmod_obj_minirocket_rot" Action "Open" } filter_activator_class { "targetname" "rafmod_filter_minirocketsentry_obj_sentrygun" "filterclass" "obj_sentrygun" } func_door { "targetname" "rafmod_obj_minirocket_rot" "mins" "-10 -10 -10" "maxs" "10 10 10" "movedir" "-90 0 0" "spawnflags" "4104" "speed" "0.1" "wait" "0.01" "OnFullyClosed" "!self,Open,,0,-1" } trigger_multiple { "targetname" "rafmod_obj_minirocket_trigger" "parentname" "rafmod_obj_minirocket_rot" "filtername" "rafmod_filter_minirocketsentry_obj_sentrygun" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "64" "OnStartTouchAll" "rafmod_obj_minirocket_trigger,$SetKey$parentname,,0,1" "OnStartTouchAll" "rafmod_obj_minirocket_rot,Kill,,0.1,1" "OnStartTouchAll" "rafmod_obj_minirocket_trigger,SetParent,!activator,0,1" "OnStartTouchAll" "rafmod_obj_minirocket_trigger,SetParentAttachment,muzzle,0.1,1" ///sets the parent attachment to the "muzzle" part of the gun "OnStartTouchAll" "!activator,AddOutput,OnUser2 rafmod_filter_rocket_mini_can_fire:TestActivator::0:1,0,1" //allows for firing of rockets "OnStartTouchAll" "!activator,FireUser2,,1,1" // begins the check loop "OnStartTouchAll" "!activator,$SetVar$rocket_can_fire,1,0,1" //custom var allows us to not have to name the sentrygun "OnStartTouchAll" "!activator,$SetKey$spawnflags,8,0,1" //sets the sentry to have infinite ammo when shooting normally } /// sets the weapon mimic owner to sentry OnSpawnOutput { Target "rafmod_rocket_mini_shooter" Action "$SetOwner" Param "!activator" } tf_point_weapon_mimic { "targetname" "rafmod_rocket_mini_shooter" "parentname" "rafmod_obj_minirocket_trigger" "origin" "50 0 0" //use origin to adjust where the rockets shoot from "speedmin" "1000" "speedmax" "1000" "WeaponType" "0" "SplashRadius" "160" "Damage" "75" "teamnum" "2" "OnUser1" "!self,FireOnce,,0,-1" } /// Goes through a series of filters to check if: /// It's firing + not disabled, /// If wrangled (if no, fire every 1 second) (if yes, fire every 0.5 seconds) /// ++ This part goes through a relay to ensure the sentry doesn't fire two rockets quickly /// "rocket_minisentry_has_ammo_can_fire_math" is used to track ammo /// ++ This constantly updates every time the rocket fires, and doesn't get muddled with an Engie repairing ammo /// Finally, sees if the sentry has greater than 10 ammo before firing. /// ++ comes with firing and empty clip sounds, too! filter_multi { "targetname" "rafmod_filter_rocket_mini_can_fire" "filter01" "rafmod_filter_rocket_mini_state" "filter02" "rafmod_filter_rocket_mini_disabled" "OnPass" "rafmod_filter_rocket_mini_is_player_controlled,TestActivator,,0,-1" "OnFail" "rafmod_filter_rocket_mini_can_fire,TestActivator,,0.5,-1" } $filter_sendprop { "targetname" "rafmod_filter_rocket_mini_is_player_controlled" "$name" "m_bPlayerControlled" "$value" "1" "OnPass" "rafmod_relay_rocket_mini_fire,CancelPending,,0,-1" "OnPass" "rafmod_relay_rocket_mini_fire,FireUser1,,0.01,-1" "OnFail" "rafmod_relay_rocket_mini_fire,CancelPending,,0,-1" "OnFail" "rafmod_relay_rocket_mini_fire,FireUser2,,0.01,-1" } logic_relay { "targetname" "rafmod_relay_rocket_mini_fire" "OnUser1" "rocket_minisentry_has_ammo_can_fire_math,GetValue,,0.5,-1" //wrangler fire rate "OnUser2" "rocket_minisentry_has_ammo_can_fire_math,GetValue,,1,-1" //standard, non-wrangled fire rate } math_counter { "targetname" "rocket_minisentry_has_ammo_can_fire_math" "min" "0" //minimum ammo value "max" "150" //max ammo value "startvalue" "150" //starting ammo value "OutValue" "!activator,$SetProp$m_iAmmoShells,,0,-1" "OutValue" "rafmod_filter_rocket_mini_can_fire,TestActivator,,0,-1" "OnGetValue" "!activator,$GetProp$m_iAmmoShells,rocket_minisentry_has_ammo_can_fire_math|SetValueNoFire|,0,-1" "OnGetValue" "rafmod_filter_rocket_mini_has_enough_ammo,TestActivator,,0,-1" } /// The filters $filter_sendprop { "targetname" "rafmod_filter_rocket_mini_state" "$name" "m_iState" "$value" "2" //means it's firing or wrangled } $filter_sendprop { "targetname" "rafmod_filter_rocket_mini_disabled" "$name" "m_bDisabled" "$value" "0" //if disabled } /// Final Touch /// This controls how much ammo is used, and subtracts the difference. If it doesn't have enough ammo, loops logic and plays an empty clip sound. $filter_sendprop //compares if ammo if >=10 { "targetname" "rafmod_filter_rocket_mini_has_enough_ammo" "$name" "m_iAmmoShells" "$value" "10" "$compare" "greater than or equal" "OnPass" "rocket_minisentry_has_ammo_can_fire_math,Subtract,10,0,-1" //Subtracts 10 ammo on mini "OnPass" "rafmod_rocket_mini_shooter,FireUser1,,0,-1" //fires the rocket, used in conjunction with "rafmod_filter_rocket_mini_has_enough_ammo" "OnPass" "!activator,$PlaySound,Building_Sentrygun.FireRocket,0,-1" //sound for rocket fire "OnFail" "rocket_minisentry_has_ammo_can_fire_math,Add,0,0,-1" //forces OutValue to refire "OnFail" "!activator,$PlaySound,Building_Sentrygun.Empty,0,-1" } RemoveIfKilled "rafmod_filter_minirocketsentry_obj_sentrygun" RemoveIfKilled "rafmod_obj_minirocket_trigger" RemoveIfKilled "rafmod_rocket_mini_shooter" RemoveIfKilled "rafmod_filter_rocket_mini_can_fire" RemoveIfKilled "rafmod_filter_rocket_mini_is_player_controlled" RemoveIfKilled "rafmod_relay_rocket_mini_fire" RemoveIfKilled "rocket_minisentry_has_ammo_can_fire_math" RemoveIfKilled "rafmod_filter_rocket_mini_state" RemoveIfKilled "rafmod_filter_rocket_mini_disabled" RemoveIfKilled "rafmod_filter_rocket_mini_has_enough_ammo" } } }