De/Counter-Strike: Global Offensive/Bot Behavior Trees

In , s können einen Verhaltensbaum erhalten, dem sie folgen können. Ein Verhaltensbaum bestimmt, wie der Bot Dinge wahrnimmt (Sehen, Hören, Schadenswahrnehmung), sich bewegt, angreift und andere Aktionen ausführt.
Verhaltensbäume sind Textdateien, die verwenden 's proprietäre Format (.kv3), dabei handelt es sich um ein textbasiertes Format mit etwas strenger Syntax. Sie verwenden normalerweise das Präfix bt_, um anzuzeigen, dass die Datei ein Behavior Tree ist. Sie werden in csgo/scripts/ai gespeichert. Man kann seine eigenen Verhaltensbäume erstellen und verwenden, siehe unten.
Offiziell werden Verhaltensbäume für die Spielmodi verwendet , and .
Verhaltensbäume waren die ersten zum Spiel hinzugefügt am 16. September 2019. Seit dem 01.09.2020 Verhaltensbäume können in BSP-Dateien gepackt werden.
== Verhaltensbäume verwenden ==
Es gibt einige Möglichkeiten, Verhaltensbaumdateien im Spiel zu verwenden.
* Die mp_bot_ai_bt bestimmt einen Verhaltensbaum, den alle Respawn-Bots auf dem Server (sowohl T als auch CT!) verwenden werden. Sein Wert ist eine Zeichenfolge, die den Pfad zu einer .kv3-Datei darstellt, beginnend mit csgo/. Wenn es Spieler-Respawns gibt, reicht das Töten eines Bots aus, um ihn dazu zu bringen, eine neu eingestellte Datei zu verwenden, andernfalls sollte das Neustarten des Spiels oder der Runde mit mp_restartgame 1 oder endround auch ausreichen. Wenn eine Verhaltensbaumdatei geändert wurde und sie bereits von einem Bot geladen wurde, ist es auch erforderlich, die geladenen Dateien mit mp_bot_ai_bt_clear_cache zu leeren, damit die Änderungen wirksam werden. Sobald ein Bot (re)spawnt, werden Fehlermeldungen mit [AI BT] angezeigt, wenn eine verwendete Datei Fehler enthält und der Bot keinen Verhaltensbaum verwendet. 
* For , -Entitäten haben den Schlüsselwert behavior_tree_file, der verwendet werden kann, um eine Verhaltensbaumdatei nur für Bots anzugeben, die bei dieser Entität spawnen.
=== Verwandte Konsolenbefehle ===
ConVar 	Default Wert	Beschreibung
cv_bot_ai_bt_debug_target 	-1 	Zeichnen Sie den Verhaltensbaum des gegebenen Bots.
cv_bot_ai_bt_hiding_spot_show 	0 	Zeichne Verstecke.
cv_bot_ai_bt_moveto_show_next_hiding_spot	0 	Zeichne das Versteck, das der Bot als nächstes überprüfen wird.
mp_bot_ai_bt 	"" 	Verwenden Sie die angegebene Verhaltensbaumdatei, um das Bot-Verhalten zu steuern (siehe oben).
mp_bot_ai_bt_clear_cache 	ConCommand 	Löscht den Cache für Verhaltensbaumdateien.
== Dateiformat ==
Um die Dateisyntax kurz zusammenzufassen:
*Das Spiel ignoriert aufeinanderfolgende Leerzeichen und unterscheidet nicht zwischen ihnen, daher kann eine Datei in einer Zeile geschrieben werden, aber bitte nicht. Zeilenumbrüche werden verwendet, um die Lesbarkeit zu verbessern, siehe die Beispiele unten.
*Schlüsselwerte werden durch geschweifte Klammern { } begrenzt und enthalten Schlüssel-Wert-Paare im Format Schlüssel = Wert Schlüssel = Wert ..., wobei die Werte unterschiedlich sein können Datentypen wie (1), (1.0), ("1"< /code>) und insbesondere KeyValues ​​selbst.
*Arrays werden durch eckige Klammern [ ] begrenzt und ihre Elemente (unabhängig vom Datentyp) werden durch Kommas getrennt ,, zum Beispiel: [ {...}, {...}, {...} ]
*Inline-Kommentare beginnen mit //, mehrzeilige Kommentare beginnen mit /* und enden mit */.
Die erste Zeile einer .kv3-Datei ist immer ein Header, der die KV3-Version angibt. Verwenden Sie für diesen Header:
<!-- kv3 encoding:text:version{e21c7f3c-8a33-41c5-9977-a76d3a32aa0d} format:generic:version{7412167c-06e9-4698-aff2-e63eb59037e7} -->
Der Rest der Datei besteht aus einem Schlüsselwert, eingeschlossen in geschweiften Klammern { }. Für Verhaltensbaumdateien enthält dieser Schlüsselwert die Schlüssel config und root.
Der Schlüssel config bestimmt eine allgemeine Bot-Konfiguration mit dem "Skill" des Bots. Sein Wert sollte den vollständigen Pfad zu einer solchen Datei enthalten, einschließlich der Dateierweiterung.
Valve hat bereits drei solcher Konfigurationsdateien bereitgestellt, nämlich
*"scripts/ai/deathmatch/bt_config.kv3",
*"scripts/ai/guardian/bt_config.kv3" und
*"scripts/ai/coop/bt_config.kv3".
Generell müssen wir folgendes hinzufügen:
<!-- kv3 encoding:text:version{e21c7f3c-8a33-41c5-9977-a76d3a32aa0d} format:generic:version{7412167c-06e9-4698-aff2-e63eb59037e7} -->
{
	config = "scripts/ai/<path to bt_config>/<bt_config_name>.kv3"
}
Fügen Sie als Nächstes den Schlüssel root mit einem Verhaltensknoten als Wert hinzu. Das Spiel "führt" den Root-Knoten regelmäßig aus.
<!-- kv3 encoding:text:version{e21c7f3c-8a33-41c5-9977-a76d3a32aa0d} format:generic:version{7412167c-06e9-4698-aff2-e63eb59037e7} -->
{
 config = "scripts/ai/<path to bt_config>/<bt_config_name>.kv3"
	root = 
	{
		<Behavior Node>
	}
}
Verhaltensknoten sind wieder KeyValues, aber mit einem type-Schlüssel, dessen Wert seinen Knotentyp bestimmt. Es gibt verschiedene Arten von Knoten, nämlich
*direkte #Aktionen, die der Bot ausführen wird, wie z. B. type = "action_pull_trigger", "action_use", "action_jump" oder "action_wait",
*vier #Combinators, die bestimmen, wie mehrere Knoten ausgeführt werden, zum Beispiel in einer sequence oder parallel,
*#Decorators hauptsächlich zum Generieren/Erhalten/Speichern von Daten, wie decorator_sensor, decorator_random_int oder decorator_memory.
*#Bedingungen zum Vergleichen von Daten und Verzweigen.
<!-- kv3 encoding:text:version{e21c7f3c-8a33-41c5-9977-a76d3a32aa0d} format:generic:version{7412167c-06e9-4698-aff2-e63eb59037e7} -->
{
	config = "scripts/ai/<path to bt_config>/<bt_config_name>.kv3"
	root = 
	{
		type = <Node Type>
		<parameter> = <value>
		...
		child = 
		{
			<Behavior Node>
		}
	}
}
Das Format jedes Verhaltensknotens hängt von seinem Typ ab, da die meisten Verhaltensknoten ihre spezifischen Parameternamen, Werttypen und Verwendungen verwenden.
Einige Knoten ermöglichen es, neue globale Variablen zu definieren. Ihre Eingabenamen sollten sowohl doppelte als auch einfache Anführungszeichen enthalten:
type = "action_set_global_counter"
input_name = "'Test'" // Beachten Sie diese Anführungszeichen.
input_value = 1
Einige Knoten unterstützen Convars als Eingabe. Ihre Namen sollten mit dem Symbol @ beginnen:
type = "action_choose_bomb_site_area"
input = "@mp_guardian_target_site"
output = "BombSiteArea"
== Bot-Konfiguration ==
Diese Parameter definieren die allgemeine Bot-Reaktion und das Kampfverhalten für jeden Bot-Skill (low, fair, normal, tough, hard, very_hard, expert, elite, default ), wie eine botprofile.db.
Standardformat ist:
<!-- kv3 encoding:text:version{e21c7f3c-8a33-41c5-9977-a76d3a32aa0d} format:generic:version{7412167c-06e9-4698-aff2-e63eb59037e7} -->
{
	<skill level>
	{
		<Variables from table below>
		attack = <Attack table>
	}
}
=== Parameterliste ===
Variable 	Beschreibung
aim_target_acquisition_lerp_time 	
aim_target_acquisition_lerp_time_deviation 	
aim_target_acquisition_angle_penalty 	
aim_target_acquisition_angle_penalty_deviation 	
aim_target_acquisition_angle_penalty_reduction_ratio	
aim_target_acquisition_angle_tolerance 	
aim_target_acquisition_angle_lerp_bias 	
aim_target_tracking_lerp_time 	
aim_target_tracking_lerp_time_deviation 	
aim_target_tracking_focus_interval 	
aim_target_tracking_focus_interval_deviation 	
aim_target_tracking_angle_lerp_bias 	
aim_new_target_angle_tolerance 	
aim_max_duration 	
aim_max_duration_deviation 	
aim_punch_angle_reaction_chance 	
look_around_awareness_yaw_range 	Maximaler Winkel zum horizontalen Drehen der Sichtkamera von diesem Blickwinkel aus.
look_around_awareness_pitch_range 	Maximaler Winkel zum vertikalen Drehen der Sichtkamera von diesem Standpunkt aus.
look_around_focus_interval 	Verzögerung zwischen der nächsten Drehung der Sichtkamera.
look_around_focus_interval_deviation 	
look_around_lerp_time 	Zeit, die Sichtkamera auf die nächste Position zu drehen.
look_around_lerp_time_deviation 	
look_around_lerp_bias 	Glättet die Bewegung der Sichtkamera.
reaction_time 	Verzögerung vor Reaktion auf Ereignis.
combat_crouch_chance 	
combat_dodge_command_duration 	
combat_dodge_command_duration_deviation 	
=== Angriffstabelle ===
Die Angriffstabelle definiert den Umgang mit verschiedenen Waffentypen.
Beispiel:
attack =
[
	// Dauer, Dauerabweichung, Kadenz, Cooldown, Cooldown-Abweichung
	// MESSER						PISTOL							MASCHINENPISTOLE
	[ -1.0, -1.0, -1.0, -1.0, -1.0 ],[ 0.95, 0.25, 0.5, 0.15, 0.05 ],[ 0.42, 0.07, 0.0, 0.15, 0.05 ],
	// GEWEHR						SCHROTFLINTE							SCHARFSCHÜTZENGEWEHR
	[ 0.22, 0.07, 0.0, 0.45, 0.15 ],[ 0.3, 0.0, 0.0, 0.95, 0.25 ],[ 0.22, 0.07, 0.0, 2.0, 0.0 ],
	// MASCHINENGEWEHR					C4								TASER
	[ 0.75, 0.15, 0.0, 0.3, 0.1 ],[ -1.0, -1.0, -1.0, -1.0, -1.0 ],	[ -1.0, -1.0, -1.0, -1.0, -1.0 ],
	// GRANATE						AUSRÜSTUNG						STAPELBARER ARTIKEL
	[ -1.0, -1.0, -1.0, -1.0, -1.0 ],[ -1.0, -1.0, -1.0, -1.0, -1.0 ],[ -1.0, -1.0, -1.0, -1.0, -1.0 ],
	// FÄUSTE						BREACHCHARGE					BUMPMINE
	[ -1.0, -1.0, -1.0, -1.0, -1.0 ],[ -1.0, -1.0, -1.0, -1.0, -1.0 ],[ -1.0, -1.0, -1.0, -1.0, -1.0 ],
	// TABLET						NAHKAMPF							SCHILD
	[ -1.0, -1.0, -1.0, -1.0, -1.0 ],[ -1.0, -1.0, -1.0, -1.0, -1.0 ],[ -1.0, -1.0, -1.0, -1.0, -1.0 ],
	// WEAPONTYPE_ZONE_REPULSOR		UNBEKANNT
	[ -1.0, -1.0, -1.0, -1.0, -1.0 ],[ -1.0, -1.0, -1.0, -1.0, -1.0 ]
]
== Knoten ==
Dies ist eine Liste aller Knoten am 9. November 2021.
Jeder Knoten hat einen Parameter type, der seine Funktionalität bestimmt und welche anderen Parameter er berücksichtigt. Parameter können einen Standardwert haben, in diesem Fall ist es optional, sie anzugeben; wenn ein Parameter keinen Standardwert hat und auch nicht angegeben ist, gibt es eine Fehlermeldung in der Konsole.
Die meisten Knoten können die folgenden Parameter haben, die in den folgenden Listen weggelassen werden:
* child - Sein Wert sollte ein anderer Knoten sein, der je nach Knotentyp und Kontext ausgeführt oder nicht ausgeführt wird.
* children - Sein Wert sollte ein Array von Knoten sein, ähnlich wie child.
* negated - Auf 1 setzen, um seinen Rückgabewert zu invertieren (Erfolg oder nicht), zum Beispiel wird ein Knoten vom Typ condition_is_empty erfolgreich sein, wenn etwas nicht existiert; Wenn dieser Knoten den Parameter negated = 1 hat, wird er stattdessen erfolgreich sein, wenn etwas existiert.
=== Kombinatoren ===
Typ 	Parameter 	Beschreibung
parallel 	 	Führt alle untergeordneten Funktionen in einem Skript-Tick aus.
selector 	 	Führt untergeordnete Funktionen als Sequenz aus, bis das untergeordnete Element auf die wahre Bedingung trifft.
sequencer	 	Führt untergeordnete Funktionen als Sequenz aus, bis das untergeordnete Element auf eine falsche Bedingung trifft.
subtree 	string file, string name	Führt den Verhaltensbaum aus der Datei aus.
=== Dekorateure ===
Typ 	Parameter 	Beschreibung
decorator_bot_service 	array memory_to_expire(variable? domain (GroupID or AllBots), flag key (ShortTermAttackMemory, ShortTermDamageMemory, ShortTermAreaDamageMemory, ShortTermInvestigateMemory, LongTermMemory, DamageThroughSmokeMemory, Threats), int time, int distance), array tagged_entities_to_expire, int_flag? basic_chatter_enable, vector? input_chatter_enemies, int chatter_outnumbered_threshold	Eine Art Hauptverhaltensfunktion des Bots? Enthält normalerweise alle Teilbaumroutinen.
decorator_buy_service 	array output 	Gibt ein Array von Artikeln zurück, die der Bot kaufen wird, und führt dann die Funktion aus.
decorator_dec_global_counter 	variable input_name 	Verringert die Eingangsvariable um 1 und führt dann die Funktion aus?
decorator_find_utility_strat 	vector input_location, int distance_threshold, vector output_location, vector output_angles, string output_weapon 	Unused.
decorator_game_event 	 	
decorator_hiding_spot_service 	variable? domain (GroupID or AllBots), vector output_hiding_spot, int distance_threshold, int expiration_time 	Gibt Versteck zurück und führt dann die Funktion aus? Befindet sich normalerweise direkt nach dem Skriptstamm.
decorator_invert 	 	Ungebraucht. Valve-Skripte verwenden normalerweise das Flag negated = 1 in Knotenparametern.
decorator_maybe 	float chance 	Führt untergeordnete Funktionen mit angegebener Wahrscheinlichkeit aus (1 - 100 %, 0,7 - 70 % usw.).
decorator_memory 	vector? input, memory? output, string output_domain 	Speichert die Eingabe im angegebenen Speicherpuffer?
decorator_need_healing 	int health_threshold 	Führt untergeordnete Funktionen aus, wenn der Zustand des Bots unter diesem Eingabeschwellenwert liegt.
decorator_picker_blocked_by_smoke 	vector? input, int distance_threshold 	Führt untergeordnete Funktionen aus, wenn die Eingabeposition hinter dem Rauchvolumen liegt?
decorator_picker_dedup 	vector? input, memory? against, int distance_threshold 	??? Wird nur in der Geräuschauswahl in Valve-Skripten verwendet.
decorator_picker_grenade_type 	array input, array types (EXPLOSIVE, FLASH, FIRE, DECOY, SMOKE, SENSOR, SNOWBALL) 	Führt untergeordnete Funktionen für bestimmte Granatentypen aus.
decorator_picker_max_score 	array input 	???
decorator_picker_nearby 	array input, int cutoff_distance 	Führt untergeordnete Funktionen aus, wenn Eingabeobjekte in Reichweite sind.
decorator_picker_random_by_distance	array input, int distance_min, int distance_max 	Führt untergeordnete Funktionen aus, wenn eine zufällige Entität aus der Eingabe innerhalb der Entfernungsgrenzen liegt?
decorator_picker_reaction_time 	variable? input_domain (GroupID or AllBots), memory? input, vector? output 	Führt untergeordnete Funktionen nach einer Verzögerung aus, die von der Reaktionszeit des Bot-Skills abhängt?
decorator_picker_visible 	array input, int_flag? check_fov 	Führt Funktion aus, wenn Eingabeentität in LOS?
decorator_picker_weight_as_distance	array input 	??? Wird nur in der Geräuschauswahl in Valve-Skripten verwendet.
decorator_random_approach_point 	vector output 	Gibt einen zufälligen Punkt im Navmesh zurück.
decorator_random_int 	int min, int max, int output 	Gibt eine zufällige Zahl im Bereich von min bis max zurück.
decorator_ranker_dist 	Array-Eingabe 	Sortiert Entitäten nach Entfernung?
decorator_remove 	variable? input_domain (GroupID or AllBots), memory? input, array? remove 	Entfernt ausgewählte Elemente aus dem Eingabespeicher.
decorator_remove_key 	variable? input 	Entfernt die Eingabevariable aus dem Skriptbereich.
decorator_repeat 	 	Führt untergeordnete Funktionen in einer Schleife aus.
decorator_route_service 	array config (array routes, array strategies), vector? output_waypoint, string output_waypoint_name, string output_domain 	Ungebraucht.
decorator_run_once 	int max_attempts = 1 	Führt untergeordnete Funktionen nur begrenzt oft aus?
decorator_sensor 	flag entity_type_filter (ALL, PLAYERS, HUMAN_PLAYERS, NOISE, DAMAGE, AREA_DAMAGE, CLASSNAME, GRENADE), function? shape(flag type (sensor_shape_fov, sensor_shape_sphere), int radius), flag team_filter (ANY, CT, TERRORIST, SAME, OPPOSITE, ENEMY), int_flag orphan_only, int_flag priority, string class_name, vector? output 	Gibt eine vom Sensor erkannte Entität zurück und führt untergeordnete Funktionen aus.
decorator_set_barrier 	domain input_domain, variable input_name, navzone? input_location 	Ungebraucht.
decorator_set_reaction_time 	array? input 	Führt untergeordnete Funktionen bei der Eingabe nach einer Verzögerung aus, die von der Reaktionszeit des Bot-Skills abhängt?
decorator_succeed 	 	Führt untergeordnete Funktionen aus, wenn der vorherige Dekorateur erfolgreich ist?
decorator_tag_entity 	vector? input, array? output, flag operation_type (BT_DECORATOR_TAG_ENTITY_CLEAR, BT_DECORATOR_TAG_ENTITY_SET), int expiration_time 	??? Wird beim Auswählen des Zielbaums in Valve-Skripten verwendet.
decorator_tag_threshold 	vector? entity_input, vector? tagged_entities_input, int amount, flag check_type (BT_DECORATOR_TAG_THRESHOLD_AT_MOST, BT_DECORATOR_TAG_THRESHOLD_AT_LEAST) 	??? Wird verwendet, um festzustellen, ob es sicher ist, Ziele in Valve-Skripten zu erreichen?
decorator_token_service 	variable? domain, string output_token_name, string output_token_domain, function config(array tokens, array assignments) 	Im -Modus: definiert die Bot-Gruppen-ID und führt dann untergeordnete Funktionen aus.
decorator_try_lock 	variable? domain 	Überprüft, ob ein anderer Bot bereits dieselbe Funktion ausführt???
decorator_wait_success 	int timeout 	Wartet darauf, dass das untergeordnete Element true zurückgibt oder die Ausführung beendet. Wenn das Kind niemals true zurückgibt, hört das Warten nach x Timeout-Sekunden auf.
=== Bedingungen ===
Typ 	Parameter 	Beschreibung
condition_barrier 	domain input_domain, variable input_name, navzone? input_location 	Ungebraucht.
condition_distance_less 	vector input, int distance_threshold_min, int distance_threshold_max 	Gibt true zurück, wenn der Abstand zur Eingabeposition kleiner als irgendwo zwischen dem Maximum und dem Minimum ist? Könnte es sein, dass das Minimum und das Maximum zu Randomisierungszwecken dienen?
condition_has_parachute 	 	Gibt wahr zurück, wenn der Bot einen Fallschirm im Inventar hat.
condition_inactive 	array input(memory? key), int round_start_threshold_seconds, int sensor_inactivity_threshold_seconds	Gibt wahr zurück, wenn der Bot innerhalb des Timings keinen Speicher und keine Sensoreingabe hat.
condition_is_airborne 	 	Gibt wahr zurück, wenn der Bot in der Luft ist.
condition_is_at_bomb_site 	 	Gibt wahr zurück, wenn sich der Bot in der Bombsite-Zone befindet.
condition_is_empty 	int_flag? global, any input 	Gibt true zurück, wenn die Eingabevariable leer ist oder nicht existiert.
condition_is_equal 	beliebige Quelle, beliebiges Ziel 	Gibt „true“ zurück, wenn die Quellvariable gleich der „Ziel“-Eingabe ist.
condition_is_greater 	any source, any destination 	Ungebraucht. Gibt wahr zurück, wenn die Quellvariable größer als die „Ziel“-Eingabe ist.
condition_is_greater_equal 	any source, any destination 	Ungebraucht. Gibt wahr zurück, wenn die Quellvariable gleich oder größer als die „Ziel“-Eingabe ist.
condition_is_inv_slot_empty 	flag slot (KNIFE, PISTOL, RIFLE, GRENADES) 	Gibt true zurück, wenn der Input-Equipment-Slot leer ist.
condition_is_less 	any source, any destination 	Ungebraucht. Gibt wahr zurück, wenn die Quellvariable kleiner als die „Ziel“-Eingabe ist.
condition_is_less_equal 	beliebige Quelle, beliebiges Ziel 	Ungebraucht. Gibt wahr zurück, wenn die Quellvariable gleich oder kleiner als die „Ziel“-Eingabe ist.
condition_is_reloading 	 	Ungebraucht. Gibt true zurück, wenn sich die aktive Waffe im Nachladezustand befindet.
condition_is_weapon_equipped	string weapon 	Gibt wahr zurück, wenn der Bot eine aktive Waffe mit dem eingegebenen Klassennamen hat.
condition_is_weapon_suitable	string weapon 	Ungebraucht.
condition_out_of_ammo 	 	Gibt true zurück, wenn die aktive Waffe keine Munition mehr hat.
condition_owns_item 	string item 	Gibt „true“ zurück, wenn der Bot ein Element mit dem eingegebenen Klassennamen hat.
=== Aktionen ===
Typ 	Parameter 	Beschreibung
action_acquire_items 	array items, int_flag? remove_all_items 	Rüstet den Bot mit Items aus dem Array aus, z.B. { type = "action_acquire_items" items = [ "weapon_awp" ] }.
action_aim 	vector input, int_flag? acquire_only, flag? ready 	Dreht den Bot zum Eingabepunkt?
action_aim_projectile 	Vektoreingabe, Vektorausgabe 	Berechnet Wurfwinkel an der Eingabeposition?
action_assign_guardian_loadout 	string input_token_name, array assignments(string token, array loadout(array items, array wave_numbers, int wave_numbers_min, int wave_numbers_max, int weight)) 	Im -Modus: Wählt das Bot-Spawn-Loadout.
action_attack 	vector input, flag? output (z.B. output = "Attacking"), flag? ready (z.B. ready = "AimReady") 	Eingabeeinheit für Bot-Angriff?
action_buy 	 	Bot kauft Waffen.
action_choose_bomb_site_area 	int input, navzone? output 	Ruft die Navigationsposition der Bombenzone aus dem Index ab. Unterstützt Convars.
action_choose_guardian_bomb_plant_location 	vector? output 	Wählt die Platzierung-Position in Navigationsnetz? Nur Wächtermodus?
action_choose_random_waypoint 	navzone? input, vector output 	Wählt einen zufälligen Wegpunkt innerhalb der Eingabe-Navigationszone.
action_choose_random_waypoint_within_radius	vector origin, vector output, float radius 	Wählen Sie einen zufälligen Wegpunkt innerhalb des angegebenen Ursprungs und Radius.
action_choose_team_spawn_area 	navzone? output 	Bekommt alle Navzones mit Spawnpunkten?
action_combat_positioning 	vector input, flag? is_attacking 	Der Bot versucht, die beste Kampfposition gegen die Eingabeeinheit zu erreichen?
action_commit_suicide 	 	Bot töten.
action_compare_global_counter 	variable? input_name (e.g. input_name = "'Test'"), int input_value 	Vergleicht den Wert aus der Variablen "input_name" mit dem Eingabewert.
action_coordinated_buy 	flag team_filter (ANY, CT, TERRORIST, SAME, OPPOSITE, ENEMY),int save_threshold,flag? id_no_purchase (e.g. id_no_purchase = "DidNotPurchase"),array purchases(array items, string id) 	Im -Modus: Beschränkt den Kauf von Artikeln auf bestimmte Gruppen-IDs?
action_crouch 	 	Zwingt den Bot in die Hocke.
action_custom_buy 	array item_aliases 	Ungebraucht.
action_drop_active_weapon 	 	Ungebraucht. Zwingt den Bot, die aktive Waffe fallen zu lassen.
action_equip_item 	string item, array items_one_of 	Zwingt den Bot, ein Element mit dem Klassennamen aus der Eingabe auszuwählen.
action_equip_weapon 	string weapon (classname or BEST) 	Zwingen Sie den Bot, einen Gegenstand mit dem Klassennamen aus der Eingabe oder der "besten" Waffe im Inventar auszuwählen.
action_flee_area_damage 	vector? input, vector output, int max_search_range, int threat_min_keep_distance 	Gibt einen sicheren Ort von dieser Position innerhalb des Suchradius zurück.
action_hide 	 	Ungebraucht.
action_inspect_current_weapon 	 	Ungebraucht. Zwingt den Bot, die Inspektionsanimation abzuspielen.
action_jump 	 	Zwingt den Bot zum Springen.
action_look_at 	vector input_angles, vector input_location 	Dreht den Bot zum angegebenen input_, wie . Wenn weggelassen, dreht sich der Bot so, dass er auf die Koordinaten input_location blickt. Andernfalls tritt ein Fehler auf.
action_move_to 	vector destination,flag movement_type (BT_ACTION_MOVETO_RUN, BT_ACTION_MOVETO_WALK),flag route_type (BT_ACTION_MOVETO_FASTEST_ROUTE,BT_ACTION_MOVETO_SAFEST_ROUTE),vector? hiding_spot,vector? threat,int damaging_areas_penalty_cost,int nearest_area_distance_threshold,int hiding_spot_check_distance_threshold,int arrival_epsilon,float additional_arrival_epsilon_2d,int_flag? auto_look_adjust	Zwingt den Bot, sich am Zielpunkt zu bewegen.
action_parachute_positioning 	 	???
action_pull_trigger 	int ratio 	Erzwingt den Primärangriff des Bots.
action_reload 	 	Zwingt den Bot, die Waffe nachzuladen.
action_say 	string phrase, flag? high_priority 	Zwingt den Bot, Funkbefehlsphrase zu sagen. Die Liste der Phrasen befindet sich in botchatter.db
action_secondary_attack 	 	Ungebraucht. Erzwingt einen Bot-Sekundärangriff.
action_select_areas_within_radius 	vector input, float radius, navzone? output 	Gibt Navzones innerhalb des angegebenen Ursprungs und Radius zurück?
action_set_global_counter 	variable? input_name, int input_value 	Legt den Eingabewert auf die Variable "input_name" fest.
action_set_global_flag 	variable? name, int expiration_time_min, int expiration_time_max 	Setzt die globale Variable "name" für eine bestimmte Zeit auf 1?
action_set_value_float 	variable? key, float value 	Setzt den Gleitkommawert auf die Variable "key".
action_set_value_vector 	variable? key, vector value 	Setzt den Vektorwert auf die Variable "key".
action_standup 	 	Ungebraucht. Zwingt den Bot, sich aufzurichten.
action_teleport 	vector destination 	Teleportiert den Bot zur Zielposition.
action_use 	 	Erzwingt Bot "+use"
action_wait 	float wait_time_min, float wait_time_max 	Friert die Bot-KI und die Skriptausführung für einen definierten Zeitraum ein.
=== Reservierte Variablen ===
Diese Variablen sind im Spielcode definiert. Sie können verwendet werden, um einige Informationen über Spielmodus und Bot sowie als Bedingungen zu erhalten.
Variable 	Beschreibung
int NumberOfTerrorists 	Anzahl der Spieler im T-Team.
int NumberOfAliveTerrorists 	Anzahl der lebenden Spieler im T-Team.
int NumberOfCounterTerrorists 	Anzahl der Spieler im CT-Team.
int NumberOfAliveCounterTerrorists	Anzahl der lebenden Spieler im CT-Team.
int GuardianWaveNumber 	Wellennummer im -Modus.
int AccountBalance 	Höhe des Spielergeldes.
float? BlindnessPercentage 	Menge an Blindheit, die von Blendgranaten angewendet wird.
??? BombIsBeingDefused 	Wiedergabewert ??? wenn eine Bombe entschärft wird.
variable? LastCoopSpawnPointName 	Zielname des letzten Spawnpunktes, der diesen Bot im gespawnt hat.
Vector LastCoopSpawnPointLocation 	Der Ursprungspunkt des letzten Spawnpunkts hat diesen Bot im gespawnt.
int AmmoCount/weapon_name 	Verbleibende Munitionsmenge in Waffe mit Klassenname "weapon_name" (Magazin + Reserve).
int AmmoCount/current 	Verbleibende Munitionsmenge in aktiver Waffe (Magazin + Reserve).
== Beispiele ==
Um diese Verhaltensbäume zum Laufen zu bringen, siehe #Verwenden von Verhaltensbäumen.
=== Einfache Aktionen ===
Einer der einfachsten Verhaltensbäume, die Sie einem Bot geben können, ist der folgende. Wenn der Bot spawnt, springt er immer wieder an derselben Stelle und reagiert auf nichts. Wie in alten Zeiten.
<!-- kv3 encoding:text:version{e21c7f3c-8a33-41c5-9977-a76d3a32aa0d} format:generic:version{7412167c-06e9-4698-aff2-e63eb59037e7}-->
{
	config = "scripts/ai/deathmatch/bt_config.kv3"
	root =
	{
		type = "action_jump"
	}
}
Um es ein bisschen nützlicher zu machen, sollte der Bot gleichzeitig schießen. Dies kann mit einem parallelen-Knoten erfolgen:
<!-- kv3 encoding:text:version{e21c7f3c-8a33-41c5-9977-a76d3a32aa0d} format:generic:version{7412167c-06e9-4698-aff2-e63eb59037e7}-->
{
	config = "scripts/ai/deathmatch/bt_config.kv3"
	root =
	{
		type = "parallel"
		children =
		[
			{
				type = "action_pull_trigger"
			},
			{
				type = "action_jump"
			}
		]
	}
}
Aber dieser Bot wird immer noch nicht aufhören, den Abzug zu drücken, obwohl er keine Munition mehr hat. Um dies zu beheben, können wir einen condition_out_of_ammo-Knoten hinzufügen. Der folgende Bot springt und schießt ununterbrochen, hört aber auf, sobald er keine Munition mehr hat:
<!-- kv3 encoding:text:version{e21c7f3c-8a33-41c5-9977-a76d3a32aa0d} format:generic:version{7412167c-06e9-4698-aff2-e63eb59037e7}-->
{
	config = "scripts/ai/deathmatch/bt_config.kv3"
	root =
	{
		type = "condition_out_of_ammo"
		negated = 1
		child =
		{
			type = "parallel"
			children =
			[
				{
					type = "action_pull_trigger"
				},
				{
					type = "action_jump"
				}
			]
		}
	}
}
=== Standard-Deathmatch-Verhaltensbaum ===
Gefunden in csgo/scripts/ai/bt_default.kv3. Diese Datei ist eine gute Basis, um einen eigenen Bot zu schreiben.