Tf logic training mode: Difference between revisions
		
		
		
		
		
		Jump to navigation
		Jump to search
		
				
		
Tip:This entity, as well as most of its Inputs, can be used on any multiplayer map by spawning this entity after map load and setting the 
Workaround:Many of these issues have workarounds:
Warning:
Tip:official training maps use a special character to show yellow text, look for 
Tip:similar to env_hudhint, training messages can read keybinds, for example 
		
	
 (Overhauled the page)  | 
				No edit summary  | 
				||
| (7 intermediate revisions by 5 users not shown) | |||
| Line 1: | Line 1: | ||
{{  | {{LanguageBar}}  | ||
{{  | {{CD|CTrainingModeLogic|file1=tf_gamerules.cpp}}  | ||
{{This is a|logical entity|name=tf_logic_training_mode|game=Team Fortress 2}}  | |||
Handles outputs and and messages for training, mainly for the [[player]].  | Handles outputs and and messages for training, mainly for the [[player]].  | ||
{{tip|This entity, as well as most of its Inputs, can be used on any multiplayer map by spawning this entity after map load and setting the <code>m_bIsInTraining</code> NetProp on [[tf_gamerules]] to true with [[VScript]], however there are multiple caveats:  | |||
# Players loadout will be replaced with stock items on resupply/respawn while training mode is enabled  | |||
# The server will be hidden from the server browser, this will persist for the entire duration of the map  | |||
# Achievement tracking is disabled  | |||
# Doesn't print player join or team switch chat messages (they can still be seen when opening chat)  | |||
# Team and class switching menus will be disabled, however <code>join_class</code> and <code>autoteam</code> will still work  | |||
# Autobalance is disabled  | |||
# Domination/Revenge logic is disabled  | |||
==Keyvalues==  | {{workaround|Many of these issues have workarounds:  | ||
{{KV|Next Map   | {{ExpandBox|  | ||
# Iterate player items and store them in an array/table in player scope first, then re-equip them using [[Team_Fortress_2/Scripting/VScript_Examples#Giving_a_weapon|this method]] after they are stripped.  This will not restore items correctly if the player changes their loadout and resupplies while the annotation is active  | |||
==Inputs==  | # For custom servers, the <code>hide_server</code> cvar must be added to the vscript cvar allowlist, or <code>sv_allow_point_servercommand</code> must be set to <code>always</code> for <code>SendToServerConsole</code>  | ||
{{  | # Set <code>m_bAllowTrainingAchievements</code> to true on [[tf_gamerules]]  | ||
{{  | # Set <code>m_bIsInTraining</code> to false on player_connect or player_team and set back to true shortly after.  However this will disable any active training HUD elements  | ||
{{  | {{todo|No known workaround, need to enable/disable the NetProp or use the console commands for class/team switching}}  | ||
{{  | {{todo|No known workaround}}  | ||
{{  | {{todo|Potentially send the <code>player_death</code> event manually with domination/revenge death flags, or <code>player_domination</code>, untested.}}  | ||
{{  | }}  | ||
}}  | |||
{{  | }}  | ||
{{  | |||
{{  | |||
{{  | == Keyvalues ==  | ||
{{KV Targetname}}  | |||
==Outputs==  | {{KV|Next Map|intn=nextMap|string|Next map to load when the current one is finished. Default choices are <code>tr_dustbowl</code> and <code>tr_target</code>, although any map is accepted.}}  | ||
{{  | |||
{{  | == Inputs ==  | ||
{{  | {{warning|<code>EndTraining</code>, <code>PlaySoundOnPlayer</code>, and <code>ForcePlayerSwapToWeapon</code> will not work on dedicated servers.}}  | ||
{{  | {{tip|official training maps use a special character to show yellow text, look for <code>TR_Generic_WeaponFire</code> in ''tf/resource/tf_english.txt'' to find this special character}}  | ||
{{  | {{I|ShowTrainingMsg|Show a training message, for training mode. The parameter can be any raw string or a localized string entry from tf_english.txt|param=string}}  | ||
{{  | {{tip|similar to [[env_hudhint]], training messages can read keybinds, for example <code>Press %reload%</code>}}  | ||
{{  | {{I|ShowTrainingObjective|param=string|Sets a training objective to show to the player.}}  | ||
{{  | {{I|KickBots|Kicks all [[bot]]s from the server.}}  | ||
{{  | {{I|ShowTrainingHUD|Makes the training objective HUD visible.}}  | ||
{{  | {{I|HideTrainingHUD|Makes the training objective HUD hidden.}}  | ||
{{  | {{I|EndTraining|param=string|Ends training mode. The parameter is for displaying ending text from tf_english.txt}}  | ||
{{  | {{I|PlaySoundOnPlayer|param=string|Play a sound on the player.}}  | ||
{{  | {{I|WaitForTimerOrKeypress|Wait for the specified [[logic_timer]] entity to fire on its interval or for a keypress from the player.|param=string}}  | ||
{{  | {{I|SetNextMap|param=string|Set the next map for training.}}  | ||
{{  | {{I|ForcePlayerSpawnAsClassOutput|Force the appropriate output to fire for the player spawning as a class. You can use this to essentially ask what class the player is.}}  | ||
{{  | |||
{{  | == Outputs ==  | ||
{{  | {{todo|See which outputs work in multiplayer}}  | ||
{{O|OnPlayerSpawnAsScout|ac-is-this=1|param=void|Fired when the player spawns as a Scout.}}  | |||
{{O|OnPlayerSpawnAsSniper|ac-is-this=1|param=void|Fired when the player spawns as a Sniper.}}  | |||
{{O|OnPlayerSpawnAsSoldier|ac-is-this=1|param=void|Fired when the player spawns as a Soldier.}}  | |||
{{O|OnPlayerSpawnAsDemoman|ac-is-this=1|param=void|Fired when the player spawns as a Demoman.}}  | |||
{{O|OnPlayerSpawnAsMedic|ac-is-this=1|param=void|Fired when the player spawns as a Medic.}}  | |||
{{O|OnPlayerSpawnAsHeavy|ac-is-this=1|param=void|Fired when the player spawns as a Heavy.}}  | |||
{{O|OnPlayerSpawnAsPyro|ac-is-this=1|param=void|Fired when the player spawns as a Pyro.}}  | |||
{{O|OnPlayerSpawnAsSpy|ac-is-this=1|param=void|Fired when the player spawns as a Spy.}}  | |||
{{O|OnPlayerSpawnAsEngineer|ac-is-this=1|param=void|Fired when the player spawns as an Engineer.}}  | |||
{{O|OnPlayerDied|activator=the killer|param=void|Fired when the player dies.}}  | |||
{{O|OnBotDied|activator=the killer|param=void|Fired when a bot dies.}}  | |||
{{O|OnPlayerSwappedToPrimary|ac-is-this=1|param=void|Fired when the player swaps to the item in their primary weapon slot.}}  | |||
{{O|OnPlayerSwappedToSecondary|ac-is-this=1|param=void|Fired when the player swaps to the item in their secondary weapon slot.}}  | |||
{{O|OnPlayerSwappedToMelee|ac-is-this=1|param=void|Fired when the player swaps to the item in their melee weapon slot.}}  | |||
{{O|OnPlayerSwappedToBuilding|ac-is-this=1|param=void|Fired when the player swaps to the item in their building weapon slot.}}  | |||
{{O|OnPlayerSwappedToPDA|ac-is-this=1|param=void|Fired when the player swaps to the item in their PDA weapon slot.}}  | |||
{{O|OnBuildOutsideArea|activator=the building|param=void|Fired when the player builds an object outside a suggested area.}}  | |||
{{O|OnPlayerDetonateBuilding|activator=the player|caller=the building|param=void|Sent when the player manually detonates one of their buildings.}}  | |||
Latest revision as of 10:43, 8 May 2025
| CTrainingModeLogic | 
tf_logic_training_mode  is a   logical entity  available in 
 Team Fortress 2.
Handles outputs and and messages for training, mainly for the player.
m_bIsInTraining NetProp on tf_gamerules to true with VScript, however there are multiple caveats:
- Players loadout will be replaced with stock items on resupply/respawn while training mode is enabled
 - The server will be hidden from the server browser, this will persist for the entire duration of the map
 - Achievement tracking is disabled
 - Doesn't print player join or team switch chat messages (they can still be seen when opening chat)
 - Team and class switching menus will be disabled, however 
join_classandautoteamwill still work - Autobalance is disabled
 - Domination/Revenge logic is disabled
 
- Iterate player items and store them in an array/table in player scope first, then re-equip them using this method after they are stripped. This will not restore items correctly if the player changes their loadout and resupplies while the annotation is active
 - For custom servers, the 
hide_servercvar must be added to the vscript cvar allowlist, orsv_allow_point_servercommandmust be set toalwaysforSendToServerConsole - Set 
m_bAllowTrainingAchievementsto true on tf_gamerules - Set 
m_bIsInTrainingto false on player_connect or player_team and set back to true shortly after. However this will disable any active training HUD elements 
Todo: No known workaround, need to enable/disable the NetProp or use the console commands for class/team switching
Todo: No known workaround
Todo: Potentially send the 
player_death event manually with domination/revenge death flags, or player_domination, untested.
Keyvalues
- Name (targetname) <string>[ Edit ]
 - The name that other entities refer to this entity by, via Inputs/Outputs or other keyvalues (e.g. 
parentnameortarget).
Also displayed in Hammer's 2D views and Entity Report.See also: Generic Keyvalues, Inputs and Outputs available to all entities 
- Next Map (nextMap) <string>
 - Next map to load when the current one is finished. Default choices are 
tr_dustbowlandtr_target, although any map is accepted. 
Inputs
EndTraining, PlaySoundOnPlayer, and ForcePlayerSwapToWeapon will not work on dedicated servers.TR_Generic_WeaponFire in tf/resource/tf_english.txt to find this special character- ShowTrainingMsg <string>
 - Show a training message, for training mode. The parameter can be any raw string or a localized string entry from tf_english.txt
 
Press %reload%- ShowTrainingObjective <string>
 - Sets a training objective to show to the player.
 
- KickBots
 - Kicks all bots from the server.
 
- ShowTrainingHUD
 - Makes the training objective HUD visible.
 
- HideTrainingHUD
 - Makes the training objective HUD hidden.
 
- EndTraining <string>
 - Ends training mode. The parameter is for displaying ending text from tf_english.txt
 
- PlaySoundOnPlayer <string>
 - Play a sound on the player.
 
- WaitForTimerOrKeypress <string>
 - Wait for the specified logic_timer entity to fire on its interval or for a keypress from the player.
 
- SetNextMap <string>
 - Set the next map for training.
 
- ForcePlayerSpawnAsClassOutput
 - Force the appropriate output to fire for the player spawning as a class. You can use this to essentially ask what class the player is.
 
Outputs
Todo: See which outputs work in multiplayer
- OnPlayerSpawnAsScout <void>
 - !activator = !caller = this entity
Fired when the player spawns as a Scout. 
- OnPlayerSpawnAsSniper <void>
 - !activator = !caller = this entity
Fired when the player spawns as a Sniper. 
- OnPlayerSpawnAsSoldier <void>
 - !activator = !caller = this entity
Fired when the player spawns as a Soldier. 
- OnPlayerSpawnAsDemoman <void>
 - !activator = !caller = this entity
Fired when the player spawns as a Demoman. 
- OnPlayerSpawnAsMedic <void>
 - !activator = !caller = this entity
Fired when the player spawns as a Medic. 
- OnPlayerSpawnAsHeavy <void>
 - !activator = !caller = this entity
Fired when the player spawns as a Heavy. 
- OnPlayerSpawnAsPyro <void>
 - !activator = !caller = this entity
Fired when the player spawns as a Pyro. 
- OnPlayerSpawnAsSpy <void>
 - !activator = !caller = this entity
Fired when the player spawns as a Spy. 
- OnPlayerSpawnAsEngineer <void>
 - !activator = !caller = this entity
Fired when the player spawns as an Engineer. 
- OnPlayerDied <void>
 - !activator = the killer
!caller = this entity
Fired when the player dies. 
- OnBotDied <void>
 - !activator = the killer
!caller = this entity
Fired when a bot dies. 
- OnPlayerSwappedToPrimary <void>
 - !activator = !caller = this entity
Fired when the player swaps to the item in their primary weapon slot. 
- OnPlayerSwappedToSecondary <void>
 - !activator = !caller = this entity
Fired when the player swaps to the item in their secondary weapon slot. 
- OnPlayerSwappedToMelee <void>
 - !activator = !caller = this entity
Fired when the player swaps to the item in their melee weapon slot. 
- OnPlayerSwappedToBuilding <void>
 - !activator = !caller = this entity
Fired when the player swaps to the item in their building weapon slot. 
- OnPlayerSwappedToPDA <void>
 - !activator = !caller = this entity
Fired when the player swaps to the item in their PDA weapon slot. 
- OnBuildOutsideArea <void>
 - !activator = the building
!caller = this entity
Fired when the player builds an object outside a suggested area. 
- OnPlayerDetonateBuilding <void>
 - !activator = the player
!caller = the building
Sent when the player manually detonates one of their buildings.