<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.citizensnpcs.co/index.php?action=history&amp;feed=atom&amp;title=Behaviors</id>
	<title>Behaviors - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.citizensnpcs.co/index.php?action=history&amp;feed=atom&amp;title=Behaviors"/>
	<link rel="alternate" type="text/html" href="https://wiki.citizensnpcs.co/index.php?title=Behaviors&amp;action=history"/>
	<updated>2026-04-29T18:19:28Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.citizensnpcs.co/index.php?title=Behaviors&amp;diff=5665&amp;oldid=prev</id>
		<title>Fullwall: /* Behaviors */</title>
		<link rel="alternate" type="text/html" href="https://wiki.citizensnpcs.co/index.php?title=Behaviors&amp;diff=5665&amp;oldid=prev"/>
		<updated>2025-12-01T18:55:48Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Behaviors&lt;/span&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.citizensnpcs.co/index.php?title=Behaviors&amp;amp;diff=5665&amp;amp;oldid=5664&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Fullwall</name></author>
	</entry>
	<entry>
		<id>https://wiki.citizensnpcs.co/index.php?title=Behaviors&amp;diff=5664&amp;oldid=prev</id>
		<title>Fullwall: /* Tree Structure */</title>
		<link rel="alternate" type="text/html" href="https://wiki.citizensnpcs.co/index.php?title=Behaviors&amp;diff=5664&amp;oldid=prev"/>
		<updated>2025-12-01T18:53:18Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Tree Structure&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 18:53, 1 December 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l7&quot;&gt;Line 7:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 7:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;All behavior trees start with a &amp;lt;code&amp;gt;tree:&amp;lt;/code&amp;gt; root node:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;All behavior trees start with a &amp;lt;code&amp;gt;tree:&amp;lt;/code&amp;gt; root node:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;```&lt;/del&gt;yaml&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{codebox|height=200px|width=100%||&amp;lt;pre lang=&quot;&lt;/ins&gt;yaml&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;tree:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;tree:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   sequence:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   sequence:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     - behavior_name arg1 arg2&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     - behavior_name arg1 arg2&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     - another_behavior&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     - another_behavior&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;```&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/pre&amp;gt;}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Built-in Types ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Built-in Types ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Fullwall</name></author>
	</entry>
	<entry>
		<id>https://wiki.citizensnpcs.co/index.php?title=Behaviors&amp;diff=5663&amp;oldid=prev</id>
		<title>Fullwall: /* Tree Structure */</title>
		<link rel="alternate" type="text/html" href="https://wiki.citizensnpcs.co/index.php?title=Behaviors&amp;diff=5663&amp;oldid=prev"/>
		<updated>2025-12-01T18:51:37Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Tree Structure&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 18:51, 1 December 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l7&quot;&gt;Line 7:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 7:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;All behavior trees start with a &amp;lt;code&amp;gt;tree:&amp;lt;/code&amp;gt; root node:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;All behavior trees start with a &amp;lt;code&amp;gt;tree:&amp;lt;/code&amp;gt; root node:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;`yaml&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;``&lt;/ins&gt;`yaml&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;tree:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;tree:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   sequence:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   sequence:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     - behavior_name arg1 arg2&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     - behavior_name arg1 arg2&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     - another_behavior&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     - another_behavior&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;`&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;``&lt;/ins&gt;`&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Built-in Types ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Built-in Types ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Fullwall</name></author>
	</entry>
	<entry>
		<id>https://wiki.citizensnpcs.co/index.php?title=Behaviors&amp;diff=5662&amp;oldid=prev</id>
		<title>Fullwall: /* Tree Structure */</title>
		<link rel="alternate" type="text/html" href="https://wiki.citizensnpcs.co/index.php?title=Behaviors&amp;diff=5662&amp;oldid=prev"/>
		<updated>2025-12-01T18:51:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Tree Structure&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 18:51, 1 December 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l7&quot;&gt;Line 7:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 7:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;All behavior trees start with a &amp;lt;code&amp;gt;tree:&amp;lt;/code&amp;gt; root node:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;All behavior trees start with a &amp;lt;code&amp;gt;tree:&amp;lt;/code&amp;gt; root node:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;/del&gt;yaml&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;`&lt;/ins&gt;yaml&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;tree:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;tree:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   sequence:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   sequence:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     - behavior_name arg1 arg2&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     - behavior_name arg1 arg2&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     - another_behavior&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     - another_behavior&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;`&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Built-in Types ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Built-in Types ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Fullwall</name></author>
	</entry>
	<entry>
		<id>https://wiki.citizensnpcs.co/index.php?title=Behaviors&amp;diff=5661&amp;oldid=prev</id>
		<title>Fullwall: Created page with &quot;= Behaviors =  The Behaviors system allows NPCs to run AI behaviors defined in YAML format. Behaviors can be simple actions like walking or waiting, or complex sequences with conditions, loops, and parallel execution.  == Tree Structure ==  All behavior trees start with a &lt;code&gt;tree:&lt;/code&gt; root node:  &lt;syntaxhighlight lang=&quot;yaml&quot;&gt; tree:   sequence:     - behavior_name arg1 arg2     - another_behavior &lt;/syntaxhighlight&gt;  == Built-in Types ==  === sequence ===  Runs child...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.citizensnpcs.co/index.php?title=Behaviors&amp;diff=5661&amp;oldid=prev"/>
		<updated>2025-12-01T18:51:13Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;= Behaviors =  The Behaviors system allows NPCs to run AI behaviors defined in YAML format. Behaviors can be simple actions like walking or waiting, or complex sequences with conditions, loops, and parallel execution.  == Tree Structure ==  All behavior trees start with a &amp;lt;code&amp;gt;tree:&amp;lt;/code&amp;gt; root node:  &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt; tree:   sequence:     - behavior_name arg1 arg2     - another_behavior &amp;lt;/syntaxhighlight&amp;gt;  == Built-in Types ==  === sequence ===  Runs child...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Behaviors =&lt;br /&gt;
&lt;br /&gt;
The Behaviors system allows NPCs to run AI behaviors defined in YAML format. Behaviors can be simple actions like walking or waiting, or complex sequences with conditions, loops, and parallel execution.&lt;br /&gt;
&lt;br /&gt;
== Tree Structure ==&lt;br /&gt;
&lt;br /&gt;
All behavior trees start with a &amp;lt;code&amp;gt;tree:&amp;lt;/code&amp;gt; root node:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
tree:&lt;br /&gt;
  sequence:&lt;br /&gt;
    - behavior_name arg1 arg2&lt;br /&gt;
    - another_behavior&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Built-in Types ==&lt;br /&gt;
&lt;br /&gt;
=== sequence ===&lt;br /&gt;
&lt;br /&gt;
Runs children in order until one fails.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
tree:&lt;br /&gt;
  sequence:&lt;br /&gt;
    - say &amp;quot;First&amp;quot;&lt;br /&gt;
    - wait 1s&lt;br /&gt;
    - say &amp;quot;Second&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== selector / random ===&lt;br /&gt;
&lt;br /&gt;
Runs one sub-behavior at random. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
tree:&lt;br /&gt;
  selector:&lt;br /&gt;
    - sequence:&lt;br /&gt;
        - if `player_nearby`:&lt;br /&gt;
            - say &amp;quot;I see you!&amp;quot;&lt;br /&gt;
    - wander radius=15&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== parallel ===&lt;br /&gt;
Runs multiple behaviors at the same time.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
tree:&lt;br /&gt;
  parallel:&lt;br /&gt;
    - wander radius=10 pathfind=true&lt;br /&gt;
    - sequence:&lt;br /&gt;
        - wait 5s&lt;br /&gt;
        - say &amp;quot;Still wandering...&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== loop [condition] ===&lt;br /&gt;
&lt;br /&gt;
Runs the children in sequence if the condition is true.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
tree:&lt;br /&gt;
  loop `memory.get(&amp;#039;counter&amp;#039;, 0) &amp;lt; 5`:&lt;br /&gt;
    - say &amp;quot;Count is {memory.get(&amp;#039;counter&amp;#039;, 0)}&amp;quot;&lt;br /&gt;
    - set counter `memory.get(&amp;#039;counter&amp;#039;, 0) + 1`&lt;br /&gt;
    - wait 1s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== if [condition] / else ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
tree:&lt;br /&gt;
  sequence:&lt;br /&gt;
    - if `memory.has(&amp;#039;greeted&amp;#039;)`:&lt;br /&gt;
        - say &amp;quot;Welcome back!&amp;quot;&lt;br /&gt;
      else:&lt;br /&gt;
        - say &amp;quot;Nice to meet you!&amp;quot;&lt;br /&gt;
        - set greeted true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== invert ===&lt;br /&gt;
&lt;br /&gt;
Inverts the success or failure of its child.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
tree:&lt;br /&gt;
  invert:&lt;br /&gt;
    - fail&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== timeout [duration] ===&lt;br /&gt;
&lt;br /&gt;
If the child doesn&amp;#039;t complete within the specified duration, it fails.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
tree:&lt;br /&gt;
  timeout 5s:&lt;br /&gt;
    - walkto 500 64 500&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== eval [language] ===&lt;br /&gt;
&lt;br /&gt;
Evaluates multiple expressions. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
tree:&lt;br /&gt;
  eval:&lt;br /&gt;
    - memory.set(&amp;#039;x&amp;#039;, 100)&lt;br /&gt;
    - memory.set(&amp;#039;y&amp;#039;, 64)&lt;br /&gt;
    - memory.set(&amp;#039;z&amp;#039;, 200)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or with a specific language (javascript, molang):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
tree:&lt;br /&gt;
  eval molang:&lt;br /&gt;
    - v.test = 5&lt;br /&gt;
    - v.result = v.test * 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Movement ===&lt;br /&gt;
&lt;br /&gt;
==== walkto ====&lt;br /&gt;
&lt;br /&gt;
Walks to specified coordinates.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Inline usage:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- walkto 100 64 200 speed=1.5 range=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Named parameters:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- walkto:&lt;br /&gt;
    x: 100&lt;br /&gt;
    y: 64&lt;br /&gt;
    z: 200&lt;br /&gt;
    speed: 1.5&lt;br /&gt;
    range: 50&lt;br /&gt;
    distance_margin: 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Parameters:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;z&amp;lt;/code&amp;gt; - Target coordinates (required)&lt;br /&gt;
* &amp;lt;code&amp;gt;speed&amp;lt;/code&amp;gt; - Movement speed multiplier (optional)&lt;br /&gt;
* &amp;lt;code&amp;gt;range&amp;lt;/code&amp;gt; - Maximum pathfinding range (optional)&lt;br /&gt;
* &amp;lt;code&amp;gt;distance_margin&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;margin&amp;lt;/code&amp;gt; - How close in blocks to get to target (optional)&lt;br /&gt;
&lt;br /&gt;
==== wander ====&lt;br /&gt;
&lt;br /&gt;
Random wandering within a radius.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- wander radius=10 pathfind=true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Parameters:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;radius&amp;lt;/code&amp;gt; - Wander radius in blocks (default: 10)&lt;br /&gt;
* &amp;lt;code&amp;gt;pathfind&amp;lt;/code&amp;gt; - Whether to use pathfinding (default: true)&lt;br /&gt;
&lt;br /&gt;
==== look ====&lt;br /&gt;
&lt;br /&gt;
Makes the NPC look at specific coordinates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- look 100 64 200&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Parameters:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;z&amp;lt;/code&amp;gt; - Target coordinates (required)&lt;br /&gt;
&lt;br /&gt;
==== teleport ====&lt;br /&gt;
&lt;br /&gt;
Teleports the NPC to coordinates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- teleport 100 64 200&lt;br /&gt;
- teleport 100 64 200 world_name&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Parameters:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;z&amp;lt;/code&amp;gt; - Target coordinates (required)&lt;br /&gt;
* &amp;lt;code&amp;gt;world&amp;lt;/code&amp;gt; - World name (optional, defaults to current world)&lt;br /&gt;
&lt;br /&gt;
=== Timing ===&lt;br /&gt;
&lt;br /&gt;
==== wait ====&lt;br /&gt;
&lt;br /&gt;
Waits for a specified duration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- wait 3s      # 3 seconds&lt;br /&gt;
- wait 100t    # 100 ticks&lt;br /&gt;
- wait 2m      # 2 minutes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Duration formats:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; - seconds&lt;br /&gt;
* &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; - ticks&lt;br /&gt;
* &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; - minutes&lt;br /&gt;
* Can also use expressions: &amp;lt;code&amp;gt;wait `some_expression`&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== wait_until ====&lt;br /&gt;
&lt;br /&gt;
Waits until a condition becomes true.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- wait_until `player.distance &amp;lt; 10`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cooldown ====&lt;br /&gt;
&lt;br /&gt;
Rate limits behaviors. Only succeeds if enough time has passed since the last time it was run.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- cooldown greeting 30s&lt;br /&gt;
- say &amp;quot;Hello there!&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Parameters:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; - Cooldown identifier (required)&lt;br /&gt;
* &amp;lt;code&amp;gt;duration&amp;lt;/code&amp;gt; - Cooldown duration (default: 1s)&lt;br /&gt;
&lt;br /&gt;
=== Memory Management ===&lt;br /&gt;
&lt;br /&gt;
==== set ====&lt;br /&gt;
&lt;br /&gt;
Sets a memory variable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- set counter 5&lt;br /&gt;
- set name &amp;quot;Bob&amp;quot;&lt;br /&gt;
- set calculated `10 * 5`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Parameters:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; - Variable name (required)&lt;br /&gt;
* &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; - Value to set (required, can be expression)&lt;br /&gt;
&lt;br /&gt;
==== forget ====&lt;br /&gt;
&lt;br /&gt;
Removes a memory variable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- forget counter&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== clear_memory ====&lt;br /&gt;
&lt;br /&gt;
Clears all memory variables.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- clear_memory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Communication ===&lt;br /&gt;
&lt;br /&gt;
==== say ====&lt;br /&gt;
&lt;br /&gt;
Makes the NPC say a message to nearby players.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- say &amp;quot;Hello, world!&amp;quot;&lt;br /&gt;
- say `&amp;quot;Player count: &amp;quot; + player.count`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== emit_signal ====&lt;br /&gt;
&lt;br /&gt;
Emits a signal.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- emit_signal &amp;quot;start_patrol&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== emit_signal_to ====&lt;br /&gt;
&lt;br /&gt;
Emits a signal to a specific NPC by ID or UUID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- emit_signal_to 123 &amp;quot;alert&amp;quot;&lt;br /&gt;
- emit_signal_to &amp;quot;uuid-string&amp;quot; &amp;quot;alert&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Parameters:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;npc&amp;lt;/code&amp;gt; - NPC ID or UUID (required)&lt;br /&gt;
* &amp;lt;code&amp;gt;signal&amp;lt;/code&amp;gt; - Signal name (required)&lt;br /&gt;
&lt;br /&gt;
==== emit_global_signal ====&lt;br /&gt;
&lt;br /&gt;
Emits a signal that all NPCs receive.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- emit_global_signal &amp;quot;server_restart_warning&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== wait_for_signal ====&lt;br /&gt;
&lt;br /&gt;
Waits until a signal is received.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- wait_for_signal &amp;quot;start_patrol&amp;quot;&lt;br /&gt;
- say &amp;quot;Signal received!&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== World Interaction ===&lt;br /&gt;
&lt;br /&gt;
==== break_block ====&lt;br /&gt;
&lt;br /&gt;
Breaks a block realistically using the NPC&amp;#039;s held item at the specified coordinates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- break_block 100 64 200 radius=3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Parameters:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;z&amp;lt;/code&amp;gt; - Block coordinates (required)&lt;br /&gt;
* &amp;lt;code&amp;gt;radius&amp;lt;/code&amp;gt; - Maximum distance in blocks to break from (default: 3)&lt;br /&gt;
&lt;br /&gt;
=== Control Flow ===&lt;br /&gt;
&lt;br /&gt;
==== succeed ====&lt;br /&gt;
&lt;br /&gt;
Always returns SUCCESS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- succeed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fail ====&lt;br /&gt;
&lt;br /&gt;
Always returns FAILURE.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- fail&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== repeat ====&lt;br /&gt;
&lt;br /&gt;
Repeats a specified number of times.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- repeat 5:&lt;br /&gt;
    - say &amp;quot;Counting...&amp;quot;&lt;br /&gt;
    - wait 1s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Parameters:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt; - Number of repetitions (default: 1)&lt;br /&gt;
&lt;br /&gt;
== Special Syntax ==&lt;br /&gt;
&lt;br /&gt;
=== Command Execution ===&lt;br /&gt;
&lt;br /&gt;
Lines starting with &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; are executed as commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
tree:&lt;br /&gt;
  sequence:&lt;br /&gt;
    - /npc speak &amp;quot;Hello from command!&amp;quot;&lt;br /&gt;
    - /say This is a server command&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Expression Evaluation ===&lt;br /&gt;
&lt;br /&gt;
Lines starting with backtick (&amp;lt;code&amp;gt;`&amp;lt;/code&amp;gt;) are evaluated as expressions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
tree:&lt;br /&gt;
  sequence:&lt;br /&gt;
    - `inv.add(item.json(&amp;#039;{&amp;quot;material&amp;quot;:&amp;quot;DIAMOND&amp;quot;,&amp;quot;amount&amp;quot;:64}&amp;#039;))`&lt;br /&gt;
    - `memory.set(&amp;#039;flag&amp;#039;, true)`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expression System ==&lt;br /&gt;
&lt;br /&gt;
The behavior tree system integrates with the Expression Registry for dynamic values.&lt;br /&gt;
&lt;br /&gt;
=== Expression Syntax ===&lt;br /&gt;
&lt;br /&gt;
Expressions can be used in several ways:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Inline in conditions:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- if `memory.get(&amp;#039;counter&amp;#039;) &amp;lt; 10`:&lt;br /&gt;
    - say &amp;quot;Counter is low&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In parameter values:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- walkto `npc.location.x + 10` `npc.location.y` `npc.location.z`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In text:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- say &amp;quot;Counter value: {memory.get(&amp;#039;counter&amp;#039;)}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Standalone evaluation:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
- `memory.set(&amp;#039;result&amp;#039;, 10 * 5)`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Memory System ==&lt;br /&gt;
&lt;br /&gt;
The memory system provides persistent storage across behavior executions.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
tree:&lt;br /&gt;
  sequence:&lt;br /&gt;
    - set visited_waypoint_1 true&lt;br /&gt;
    - set visit_count `memory.get(&amp;#039;visit_count&amp;#039;, 0) + 1`&lt;br /&gt;
    - if `memory.has(&amp;#039;greeted&amp;#039;)`:&lt;br /&gt;
        - say &amp;quot;Welcome back! Visit #{memory.get(&amp;#039;visit_count&amp;#039;)}&amp;quot;&lt;br /&gt;
      else:&lt;br /&gt;
        - say &amp;quot;First visit!&amp;quot;&lt;br /&gt;
        - set greeted true&lt;br /&gt;
    - forget temporary_flag&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory Methods ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;memory.set(key, value)&amp;lt;/code&amp;gt; - Set a value&lt;br /&gt;
* &amp;lt;code&amp;gt;memory.get(key, default)&amp;lt;/code&amp;gt; - Get a value with optional default&lt;br /&gt;
* &amp;lt;code&amp;gt;memory.has(key)&amp;lt;/code&amp;gt; - Check if key exists&lt;br /&gt;
* &amp;lt;code&amp;gt;memory.remove(key)&amp;lt;/code&amp;gt; - Remove a key&lt;br /&gt;
* &amp;lt;code&amp;gt;memory.clear()&amp;lt;/code&amp;gt; - Clear all memory&lt;br /&gt;
&lt;br /&gt;
Memory is automatically saved and loaded with the NPC.&lt;br /&gt;
&lt;br /&gt;
== Complete Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Patrol ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
tree:&lt;br /&gt;
  sequence:&lt;br /&gt;
    - set patrol_started true&lt;br /&gt;
    - loop `memory.get(&amp;#039;patrol_count&amp;#039;, 0) &amp;lt; 3`:&lt;br /&gt;
        - walkto `npc.location.x + 10` `npc.location.y` `npc.location.z`&lt;br /&gt;
        - wait 2s&lt;br /&gt;
        - cooldown speak 10s&lt;br /&gt;
        - say &amp;quot;Patrolling area {memory.get(&amp;#039;patrol_count&amp;#039;, 0)}&amp;quot;&lt;br /&gt;
        - walkto `npc.location.x - 10` `npc.location.y` `npc.location.z`&lt;br /&gt;
        - set patrol_count `memory.get(&amp;#039;patrol_count&amp;#039;, 0) + 1`&lt;br /&gt;
    - say &amp;quot;Patrol complete!&amp;quot;&lt;br /&gt;
    - forget patrol_count&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Signal Coordination ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Guard NPC:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
tree:&lt;br /&gt;
  sequence:&lt;br /&gt;
    - wait_for_signal &amp;quot;intruder_alert&amp;quot;&lt;br /&gt;
    - say &amp;quot;Intruder detected! Responding!&amp;quot;&lt;br /&gt;
    - walkto `signal.data.x` `signal.data.y` `signal.data.z`&lt;br /&gt;
    - emit_global_signal &amp;quot;area_secured&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lookout NPC:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
tree:&lt;br /&gt;
  sequence:&lt;br /&gt;
    - if `player.distance &amp;lt; 10`:&lt;br /&gt;
        - cooldown alert 60s&lt;br /&gt;
        - emit_global_signal &amp;quot;intruder_alert&amp;quot;&lt;br /&gt;
        - say &amp;quot;Alert! Intruder spotted!&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conditional Greeter ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
tree:&lt;br /&gt;
  sequence:&lt;br /&gt;
    - if `memory.has(&amp;#039;greeted&amp;#039;)`:&lt;br /&gt;
        - say &amp;quot;Welcome back!&amp;quot;&lt;br /&gt;
      else:&lt;br /&gt;
        - sequence:&lt;br /&gt;
            - say &amp;quot;Nice to meet you!&amp;quot;&lt;br /&gt;
            - set greeted true&lt;br /&gt;
    - cooldown greet 10s&lt;br /&gt;
    - wait 2s&lt;br /&gt;
    - say &amp;quot;Have a nice day!&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Resource Gathering ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
tree:&lt;br /&gt;
  sequence:&lt;br /&gt;
    - set gathered 0&lt;br /&gt;
    - loop `memory.get(&amp;#039;gathered&amp;#039;, 0) &amp;lt; 5`:&lt;br /&gt;
        - wander radius=20 pathfind=true&lt;br /&gt;
        - wait 5s&lt;br /&gt;
        - break_block `npc.location.x` `npc.location.y - 1` `npc.location.z`&lt;br /&gt;
        - set gathered `memory.get(&amp;#039;gathered&amp;#039;, 0) + 1`&lt;br /&gt;
        - say &amp;quot;Gathered {memory.get(&amp;#039;gathered&amp;#039;)} resources&amp;quot;&lt;br /&gt;
    - say &amp;quot;Resource gathering complete!&amp;quot;&lt;br /&gt;
    - teleport 0 64 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Loading Behavior Trees ==&lt;br /&gt;
&lt;br /&gt;
=== External File ===&lt;br /&gt;
&lt;br /&gt;
You can load trees from external files in the &amp;lt;code&amp;gt;behaviors/&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
traits:&lt;br /&gt;
  - name: behavior&lt;br /&gt;
    tree: patrol_behavior.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The behaviors will be loaded from &amp;lt;code&amp;gt;plugins/Citizens/behaviors/patrol_behavior.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Template System ===&lt;br /&gt;
Behavior trees can be included in templates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
greeter:&lt;br /&gt;
  traits:&lt;br /&gt;
    - name: behavior&lt;br /&gt;
      tree:&lt;br /&gt;
        sequence:&lt;br /&gt;
          - cooldown greet 10s&lt;br /&gt;
          - say &amp;quot;Hello there, traveler!&amp;quot;&lt;br /&gt;
          - wait 2s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
=== Registering Custom Behaviors ===&lt;br /&gt;
&lt;br /&gt;
Register custom behaviors with the BehaviorRegistry:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
registry.registerBehavior(&amp;quot;my_behavior&amp;quot;, (params, context) -&amp;gt; {&lt;br /&gt;
    String arg = context.getArgOrParam(0, &amp;quot;param_name&amp;quot;, params, &amp;quot;default&amp;quot;);&lt;br /&gt;
    ExpressionValue argHolder = registry.getExpressionRegistry().parseValue(arg);&lt;br /&gt;
&lt;br /&gt;
    return new InstantBehavior() {&lt;br /&gt;
        @Override&lt;br /&gt;
        public void reset() {&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        @Override&lt;br /&gt;
        public BehaviorStatus run() {&lt;br /&gt;
            NPC npc = context.getNPC();&lt;br /&gt;
            // Your behavior logic here&lt;br /&gt;
            return BehaviorStatus.SUCCESS;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        @Override&lt;br /&gt;
        public boolean shouldExecute() {&lt;br /&gt;
            return true;&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Custom Expression Languages ===&lt;br /&gt;
&lt;br /&gt;
Register custom expression engines with the ExpressionRegistry for domain-specific languages.&lt;/div&gt;</summary>
		<author><name>Fullwall</name></author>
	</entry>
</feed>