Tf bot: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
m (Added Technical TFBot page.)
(Disambiguation with TFBot Technicalities; Removed 'Entity Description' section for consistency; TFBot console.commands are out of scope for this page, so are moved to "TFBot Technicalities".)
Line 1: Line 1:
{{lang|tf_bot|title=tf_bot}}
{{lang|tf_bot|title=tf_bot}}
{{tf2 point|tf_bot}}
{{distinguish|TFBot Technicalities}}
 
<br>
{{tf2 point|tf_bot}} A {{ent|NextBot}} entity that acts like a {{ent|player}} entity; They represent the bots in [[Team Fortress 2]], which are officially automatically used in the Training and [https://wiki.teamfortress.com/wiki/Mann_vs._Machine Mann Vs. Machine] modes. Outside of these modes, creation of this entity should be done with the {{ent|tf_bot_add}} command.
{{bug|Creating the entity through {{ent|ent_create}} ''will'' crash the game.}}
{{code class|CTFBot|tf_bot.cpp}}
{{code class|CTFBot|tf_bot.cpp}}
==Entity Description==
A {{ent|NextBot}} entity for TF2 that acts as a player. They are used for bots in [[Team Fortress 2]], which are mainly used in the Training and [https://wiki.teamfortress.com/wiki/Mann_vs._Machine Mann Vs. Machine] gamemodes, and are created automatically by the game when creating a listenserver through the training option. This entity can be created through {{ent|tf_bot_add}}, which when used will randomly select a bot name out of a hardcoded list of bot names.
{{bug|Creating the entity through {{ent|ent_create}} ''will'' crash the game.}}
{{bug|This entity will not move in Capture The Flag (and by proxy MvM) if there is no flag for that entity's team.}}
==ConVars/ConCommands==
{{varcom|start}}
{{varcom|tf_bot_add|[count{{!}}name] [class] [team] [skill] ["noquota"]|[[String|strings]] (processed without order)|Creates a bot with specified parameters. This entity will borrow from {{ent|tf_bot_difficulty}} if <code>skill</code> is omitted..}}
{{varcom|tf_bot_always_full_reload|0|01|Determines whether bots perform full reloads before firing.}}
{{varcom|tf_bot_ammo_search_range|5000|dist|How far bots will search to find ammo around them.}}
{{varcom|tf_bot_arrow_elevation_rate|0.0001|Arbitrary [[float]]|When firing arrows at far away targets, this is the degree/range slope to raise our aim.}}
{{varcom|tf_bot_auto_vacate|1|01|Whether bots will automatically leave to make room for human players.}}
{{varcom|tf_bot_ballistic_elevation_rate|0.01|arbitrary [[float]]|When lobbing grenades at far away targets, this is the degree/range slope to raise our aim.}}
{{varcom|tf_bot_capture_seek_and_destroy_max_duration|30|arbitrary [[float]]| If a capturing bot decides to go hunting, this is the max duration he will hunt for before reconsidering.}}
{{varcom|tf_bot_capture_seek_and_destroy_min_duration|15|arbitrary [[float]]| If a capturing bot decides to go hunting, this is the min duration he will hunt for before reconsidering.}}
{{varcom|tf_bot_cart_push_radius|60|dist|Maximum distance in which bots will stay within near the payload to push it.}}
{{varcom|tf_bot_choose_target_interval|0.3f|Seconds ([[float]])| How often a bot can reselect his target}}
{{varcom|tf_bot_debug_ammo_scavenging|0|01|Draws debug informaton for bot ammo-information.}}
{{varcom|tf_bot_debug_destroy_enemy_sentry|0|01|Draw debug info for bots trying to destroy sentries.}}
{{varcom|tf_bot_debug_payload_guard_vantage_points|0|01|Draw vantage points for guarding the payload.}}
{{varcom|tf_bot_debug_retreat_to_cover|0|01|Draw debug info for bots retreating to cover.}}
{{varcom|tf_bot_debug_seek_and_destroy|0|01|Draw bot seek-and-destroy debug info.}}
{{varcom|tf_bot_debug_sentry_placement|0|01|Draw bot engineer sentry placement debug info.}}
{{varcom|tf_bot_debug_sniper|0|01|Draw Sniper bot debug information.}}
{{varcom|tf_bot_debug_spy|0|01|Draw Spy bot debug information.}}
{{varcom|tf_bot_debug_stuck_log|||Given a server logfile visually display bot stuck locations.}}
{{varcom|tf_bot_debug_stuck_log_clear|||Clear currently loaded bot stuck data.}}
{{varcom|tf_bot_debug_tags|0|01|[[ent_text]] will only show tags on bots.}}
{{varcom|tf_bot_defend_owned_point_percent|0.5|arbitrary [[float]]|Stay on the contested point we own until enemy cap percent falls below this value.}}
{{varcom|tf_bot_defense_debug|0|01|Draw defense areas.}}
{{varcom|tf_bot_defense_must_defend_time|300|arbitrary [[float]]|If timer is less than this value, bots will stay near point and guard.}}
{{varcom|tf_bot_difficulty|1|[[integer]]|Sets default skill value.}}
{{varcom|tf_bot_engineer_building_health_multiplier|2|unknown type|Unused.}}
{{varcom|tf_bot_engineer_exit_near_sentry_range|2500|dist|Maximum travel distance between a bot's Sentry gun and its Teleporter Exit}}
{{varcom|tf_bot_engineer_max_sentry_travel_distance_to_point|2500|dist|Maximum travel distance between a bot's Sentry gun and the currently contested point}}
{{varcom|tf_bot_engineer_mvm_hint_min_distance_from_bomb|1300|dist|Bot engineers will move if the bomb is within this range.}}
{{varcom|tf_bot_engineer_mvm_sentry_hint_bomb_backward_range|3000|dist|How far the MvM bot engineer can build backward.}}
{{varcom|tf_bot_engineer_mvm_sentry_hint_bomb_forward_range|0|dist|How far the MvM bot engineer can build forwards.}}
{{varcom|tf_bot_engineer_retaliate_range|750|dist|Engineer bots will attack if the attacker who destroyed sentry closer than this, otherwise the engineer bot will retreat.}}
{{varcom|tf_bot_escort_range|300|dist|Bots will escort anyone within this range if there are no enemies.}}
{{varcom|tf_bot_fetch_lost_flag_time|10|arbitrary [[float]]| How long busy bots will ignore the dropped flag before they give up what they are doing and go after it}}
{{varcom|tf_bot_fire_weapon_allowed|1|01|If zero bots will not pull the trigger of their weapons (but will act like they did).}}
{{varcom|tf_bot_fire_weapon_min_time|1|arbitrary [[integer]]|Minimum time bots will fire their weapon.}}
{{varcom|tf_bot_flag_escort_give_up_range|1000|dist|Bots will give up escorts at this range.}}
{{varcom|tf_bot_flag_escort_max_count|4|arbitrary [[integer]]|Maximum amount of escorters allowed.}}
{{varcom|tf_bot_flag_escort_range|500|dist|Bots will escort the flag carrier within this range.}}
{{varcom|tf_bot_flag_kill_on_touch|0|01|If nonzero, any bot that picks up the flag dies. For testing.}}
{{varcom|tf_bot_force_class|null|[[string]]|If set to a class name, all bots will respawn as that class.}}
{{varcom|tf_bot_force_jump|0|01|Force bots to continuously jump.}}
{{varcom|tf_bot_formation_debug|0|01|Draw bot-formation debug info.}}
{{varcom|tf_bot_health_critical_ratio|0.3|arbitrary [[float]]|Health ratio in which bots are "critically injured".}}
{{varcom|tf_bot_health_ok_ratio|0.8|arbitrary [[float]]|Health ratio in which bots are considered "ok".}}
{{varcom|tf_bot_health_search_far_range|2000|dist|Critically-hurt bots will search for health within this range.}}
{{varcom|tf_bot_health_search_near_range|1000|dist|Uncritically-hurt bots will search for health within this range.}}
{{varcom|tf_bot_hitscan_range_limit|1800|dist|Maximum range in which bots will try to hit targets with hitscan.}}
{{varcom|tf_bot_join_after_player|1|01|If nonzero, bots wait until a player joins before entering the game.}}
{{varcom|tf_bot_keep_class_after_death|0|01|If zero bots will change class upon death, except in MvM.}}
{{varcom|tf_bot_kick|[name{{!}}"red"{{!}}"blue"{{!}}"all"{{!}}"moveToSpectatorTeam"]|[[string]]|Kicks bots based on name and team, or all of them. Will instead move bots to spectator mode if <code>moveToSpectatorTeam</code> is added.}}
{{varcom|tf_bot_kill|[name{{!}}"red"{{!}}"blue"{{!}}"all"]|[[string]]|Kills bots based on name and team, or all of them.}}
{{varcom|tf_bot_max_grenade_launch_at_sentry_range|1500|dist|Demoman bots will try to launch grenades at sentries in this range.}}
{{varcom|tf_bot_max_point_defend_range|1250|dist|How far (in travel distance) from the point defending bots will take up positions.}}
{{varcom|tf_bot_max_setup_gate_defend_range|2000|dist|An unused [[ConVar]] that would have determined how far from the setup gate(s) defending bots can take up positions.}}
{{varcom|tf_bot_max_sticky_launch_at_sentry_range|1500|dist|Demoman bots will try to launch stickies at sentries in this range.}}
{{varcom|tf_bot_max_teleport_entrance_travel|1500|dist|Don't plant teleport entrances farther than this travel distance from our spawn room}}
{{varcom|tf_bot_max_teleport_exit_travel_to_point|2500|dist|If an offensive engineer bot's tele exit is farther from the point than this, then destroy it.}}
{{varcom|tf_bot_medic_cover_test_resolution|8|arbitrary [[float]]|Determines the angular increment when scanning for players to heal.}}
{{varcom|tf_bot_medic_debug|0|01|Draw debug info for medic bots.}}
{{varcom|tf_bot_medic_max_call_response_range|1000|dist|Calls for medic within this range will be heard.}}
{{varcom|tf_bot_medic_max_heal_range|600|dist|Bot medics will heal anyone within this range.}}
{{varcom|tf_bot_medic_start_follow_range|250|dist|Medics will start following their patients when in this range.}}
{{varcom|tf_bot_medic_stop_follow_range|75|dist|Medics will stop following their patients when in this range.}}
{{varcom|tf_bot_melee_attack_abandon_range|500|dist|If threat is farther away than this, bot will switch back to its primary weapon and attack}}
{{varcom|tf_bot_melee_only|0|01|If nonzero, bots will only use melee weapons}}
{{varcom|tf_bot_min_setup_gate_defend_range|750|dist|An unused [[ConVar]] that is supposed to determine how close from the setup gate(s) defending bots can take up positions and what areas would have been determined to be "in cover".}}
{{varcom|tf_bot_min_setup_gate_sniper_defend_range|1500|dist|An unused [[ConVar]] that supposedly would determine the distance from the setup gate(s) a defending sniper would go to "take up position".}}
{{varcom|tf_bot_min_teleport_travel|3000|dist|Minimum travel distance between teleporter entrance and exit before engineer bot will build one.}}
{{varcom|tf_bot_mvm_show_engineer_hint_region|||Show the nav areas MvM engineer bots will consider when selecting sentry and teleporter hints.{{note|Is a cheat command.}}}}
{{varcom|tf_bot_near_point_travel_distance|750|dist|Range in which bots are considered to be "near" the point.}}
{{varcom|tf_bot_notice_backstab_chance|25|arbitrary [[integer]]|Chance for bots to notice backstabs.}}
{{varcom|tf_bot_notice_backstab_max_range|750|dist|Maximum range in which bots will notice backstabs.}}
{{varcom|tf_bot_notice_backstab_min_range|100|dist|Minimum range in which bots will notice backstabs.}}
{{varcom|tf_bot_notice_gunfire_range|3000|dist|The range in which gunshots are noticed by bots.}}
{{varcom|tf_bot_notice_quiet_gunfire_range|500|dist|The range in which quiet gunshots are noticed by bots.}}
{{varcom|tf_bot_npc_archer_arrow_damage|75|arbitrary [[float]]|Determines the arrow damage of NPC archer arrows.}}
{{varcom|tf_bot_npc_archer_health|100|arbitrary [[integer]]|Determines the health of NPC archer bots.}}
{{varcom|tf_bot_npc_archer_shoot_interval|2|arbitrary [[float]]|Determines the interval at which NPC archer bots fire.}}
{{varcom|tf_bot_npc_archer_speed|100|arbitrary [[integer]]|Unused.}}
{{varcom|tf_bot_offense_must_push_time|120|arbitrary [[float]]|If timer is less than this, bots will push hard to cap}}
{{varcom|tf_bot_offline_practice|0|arbitrary [[integer]]| Tells the server that it is in offline practice mode.}}
{{varcom|tf_bot_path_lookahead_range|300|dist|How far a bot should look ahead.}}
{{varcom|tf_bot_payload_guard_range|1000|dist|Guard the payload within this range.}}
{{varcom|tf_bot_prefix_name_with_difficulty|0|01|Append the skill level of the bot to the bot's name}}
{{varcom|tf_bot_pyro_always_reflect|0|01|Pyro bots will always reflect projectiles fired at them. For tesing/debugging purposes.}}
{{varcom|tf_bot_pyro_deflect_tolerance|0.5|Radian ([[float]])|Defines the visible range in which Pyro bots can airblast projectiles.<br><br> Technically speaking Pyro TFBots '''will not''' airblast if the dot product between their normalized vector and a projectile's normalized vector is higher than the negative of this value.}}
{{varcom|tf_bot_pyro_shove_away_range|250|dist|If a Pyro bot's target is closer than this, then compression blast them away}}
{{varcom|tf_bot_quota|0|arbitrary [[integer]]|Determines the total number of tf bots in the game.}}
{{varcom|tf_bot_quota_mode|normal|[[string]]|Determines the type of quota. Allowed values: 'normal', 'fill', and 'match'. If 'fill', the server will adjust bots to keep N players in the game, where N is bot_quota. If 'match', the server will maintain a 1:N ratio of humans to bots, where N is bot_quota.}}
<!--This cvar does not exist in the Jungle Inferno build leak, so this cvar is going to require some reverse engineering to verify its function. -->
{{varcom|tf_bot_reevaluate_class_in_spawnroom|1|01| If set bots will opportunistically switch class while in spawnrooms if their current class is no longer their first choice.}}
<!-- -->
{{varcom|tf_bot_retreat_to_cover_range|1000|dist|How far to search for cover.}}
{{varcom|tf_bot_sniper_aim_error|0|dist|Margin of error in sniper aim radius.}}
{{varcom|tf_bot_sniper_aim_steady_rate|10|aribtrary [[float]]|Determines the angle rate at which the bot aim becomes steady.}}
{{varcom|tf_bot_sniper_allow_opportunistic|1|01|If set, Sniper bots will stop on their way to their preferred lurking spot to snipe at opportunistic targets.}}
{{varcom|tf_bot_sniper_choose_target_interval|3|Seconds ([[float]])|How often a zoomed-in Sniper can reselect his target. {{note|Currently unused.}}}}
{{varcom|tf_bot_sniper_flee_range|400|dist|Sniper bots retreat if their threat is closer than this range.}}
{{varcom|tf_bot_sniper_goal_entity_move_tolerance|500|dist|How far a sniper spot can be from the point before being ignored.}}
{{varcom|tf_bot_sniper_linger_time|5|arbitrary [[float]]|How long Sniper will wait around after losing his target before giving up.}}
{{varcom|tf_bot_sniper_melee_range|200|dist|Sniper bots will attack with melee if their threat is closer than this range.}}
{{varcom|tf_bot_sniper_patience_duration|10|arbitrary [[float]]|How long a Sniper bot will wait without seeing an enemy before picking a new spot.}}
{{varcom|tf_bot_sniper_personal_space_range|1000|dist|Enemies beyond this range don't worry Sniper bots.}}
{{varcom|tf_bot_sniper_spot_epsilon|100|dist|Maximum distance between sniper spots to consider them one spot.}}
{{varcom|tf_bot_sniper_spot_max_count|10|arbitrary [[integer]]|Stop searching for sniper spots when each side has found this many.}}
{{varcom|tf_bot_sniper_spot_min_range|1000|dist|Minimum length for a sightline to be considered usable.}}
{{varcom|tf_bot_sniper_spot_point_tolerance|750|dist|The range in which a sniper can stand near a vantage point.}}
{{varcom|tf_bot_sniper_spot_search_count|10|arbitrary [[integer]]|Search this many times per behavior update frame.}}
{{varcom|tf_bot_sniper_target_linger_duration|2|arbitrary [[float]]|How long a Sniper bot will keep toward at a target it just lost sight of.}}
<!--This cvar does not exist in the Jungle Inferno build leak, so this cvar is going to require some reverse engineering to verify its function. -->
{{varcom|tf_bot_spawn_use_preset_roster|1|unknown|Bot will choose class from a preset class table.}}
<!-- -->
{{varcom|tf_bot_spy_change_target_range_threshold|300|dist|Spy bots will change to newer targets if their current target is further than this range.}}
{{varcom|tf_bot_spy_knife_range|300|dist|Spy Bots will prefer their knife if their threat is closer than this range.}}
{{varcom|tf_bot_squad_escort_range|500|dist|If a bot is using a melee weapon, close and attack with it while staying near the leader with in this range.}}
{{varcom|tf_bot_sticky_base_range|800|arbitrary [[integer]]|Demoman bots will charge their stickies if their target sentry is further than this range.}}
{{varcom|tf_bot_sticky_charge_rate|0.01|arbitrary [[float]]|Seconds of charge per unit range beyond base.}}
{{varcom|tf_bot_stickybomb_density|0|arbitrary [[integer]]|Number of stickies to place per square inch.}}
{{varcom|tf_bot_suicide_bomb_friendly_fire|1|01|Sentry Busters can kill ally bots on its team.}}
{{varcom|tf_bot_suicide_bomb_range|300|dist|Sentry Busters will kill players in this range and start detonation in a third of this value.}}
{{varcom|tf_bot_suspect_spy_forget_cooldown|5|arbitrary [[integer]]|How long to consider a suspicious spy as suspicious.}}
{{varcom|tf_bot_suspect_spy_touch_interval|5|ticks ([[integer]])|How many ticks back to look for touches against suspicious spies.}}
{{varcom|tf_bot_taunt_victim_chance|20|arbitrary [[float]]|<code>1/value</code> chance for a bot to taunt after killing a bot.}}
{{varcom|tf_bot_teleport_build_surface_normal_limit|0|dist|If the ground normal Z component is less that this value, Engineer bots won't place their entrance teleporter.}}
{{varcom|tf_bot_wait_in_cover_max_time|2|arbitrary [[float]]|Maximum time bots will hide in cover.}}
{{varcom|tf_bot_wait_in_cover_min_time|1|arbitrary [[float]]|Minimum time bots will hide in cover.}}
{{varcom|tf_bot_warp_team_to_me|||Teleports all ally bots to [[!activator]].}}
{{varcom|tf_mvm_bot_flag_carrier_interval_to_1st_upgrade|5|Seconds ([[float]])|The time before the bomb carrier performs the 1st upgrade.}}
{{varcom|tf_mvm_bot_flag_carrier_interval_to_2nd_upgrade|15|Seconds ([[float]])|The time before the bomb carrier performs the 2nd upgrade.}}
{{varcom|tf_mvm_bot_flag_carrier_interval_to_3rd_upgrade|15|Seconds ([[float]])|The time before the bomb carrier performs the 3rd upgrade.}}
{{varcom|end}}


==Keyvalues==
==Keyvalues==
Line 167: Line 29:
{{I TFTeam}}
{{I TFTeam}}
{{I BaseCombatCharacter}}
{{I BaseCombatCharacter}}
{{I BaseAnimating}}
{{I BaseAnimating|base=1}}
{{I BaseEntity}}
{{I BaseEntity|base=1}}


==Outputs==
==Outputs==

Revision as of 02:43, 11 September 2021

English (en)Translate (Translate)
Not to be confused with TFBot Technicalities.


Team Fortress 2 tf_bot is a point entity available in Team Fortress 2 Team Fortress 2. A NextBot entity that acts like a player entity; They represent the bots in Team Fortress 2, which are officially automatically used in the Training and Mann Vs. Machine modes. Outside of these modes, creation of this entity should be done with the tf_bot_add command.

Icon-Bug.pngBug:Creating the entity through ent_create will crash the game.  [todo tested in ?]
C++ In code, it is represented by theCTFBotclass, defined in thetf_bot.cppfile.

Keyvalues

TeamNum:
Initial Team (TeamNum) <choices>
Which Team the entity belongs / is assigned to on spawn
  • 0: None
  • 1: Spectator/Halloween Souls Team Fortress 2
  • 2: RED Team Fortress 2
  • 3: BLU/Robots Team Fortress 2
  • 5: Halloween Bosses (only in Team Fortress 2) !FGD
Note.pngNote:Content moved to Rendering and studio model related KIO/Keyvalues for continuation of page history


Inputs

IgnitePlayer <integerRedirectInput/integer>
Team Fortress 2 Ignites the entity with a specified lifetime and causes a reaction (sound and speech).
ExtinguishPlayer
Team Fortress 2 Extinguishes the entity.
BleedPlayer <integerRedirectInput/integer>
Team Fortress 2 Bleeds the entity with a specified length.
RollRareSpell
Team Fortress 2 Forces the entity to roll a rare spell. Only available if spells are enabled on the map.
SetCustomModel <stringRedirectInput/string>
Team Fortress 2 Set a custom entity model without animations.
SetCustomModelOffset <vectorRedirectInput/Vector>
Team Fortress 2 Set a custom model position on the entity.
SetCustomModelRotation <vectorRedirectInput/Vector>
Team Fortress 2 Set a custom model rotation on the entity.
ClearCustomModelRotation
Team Fortress 2 Clears the custom model rotation.
SetCustomModelRotates <booleanRedirectInput/boolean>
Team Fortress 2 Set if the custom model rotates or not to the entity's angles.
SetCustomModelVisibleToSelf <booleanRedirectInput/boolean>
Team Fortress 2 Set if the custom model is visible to the entity, in thirdperson.
SetForcedTauntCam <booleanRedirectInput/boolean>
Team Fortress 2 Forces the player into thirdperson mode.
SpeakResponseConcept <stringRedirectInput/string>
Team Fortress 2 Forces the player to speak the specified response concept, an example being halloweenlongfall.
TriggerLootIslandAchievement
Team Fortress 2 [Todo].
TriggerLootIslandAchievement2
Team Fortress 2 [Todo].
RoundSpawn
Team Fortress 2 [Todo].
SetTeam <integerRedirectInput/integer>
Changes the entity's team.

CBaseCombatCharacter:

KilledNPC  !FGD
Tells the entity it killed something. Despite the name, this can include a player. This input will be automatically sent by the victim when they die.
physdamagescale <floatRedirectInput/float>
Scales damage energy when this character is hit by a physics object. With a value of 0 the NPC will take no damage from physics.
Note.pngNote:Content moved to Rendering and studio model related KIO/Inputs for continuation of page history


Outputs

Note.pngNote:Content moved to Rendering and studio model related KIO/Outputs for continuation of page history


See Also