<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.larian.game/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rimevan</id>
	<title>Divinity Engine Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.larian.game/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rimevan"/>
	<link rel="alternate" type="text/html" href="https://docs.larian.game/Special:Contributions/Rimevan"/>
	<updated>2026-04-15T03:25:49Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting&amp;diff=6491</id>
		<title>Scripting</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting&amp;diff=6491"/>
		<updated>2018-12-11T18:20:05Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: /* CHECK or IF */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
The scripting system is currently used for the behaviour of characters and items. For characters this is only part of the behaviour, as many more systems influence this in the following priority:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Story: executing Osiris Tasks&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Dialogs: dialog behaviour and animations&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Statuses: dying, frozen, petrified, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Scripts: executing the current reaction or scriptframe&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
Scripts are the lowest priority and will only execute if none of the other systems want to do something. For items it's a lot simpler, as the scripting system is the only thing &lt;br /&gt;
that influences the items behaviour.&lt;br /&gt;
&lt;br /&gt;
To create and modify scripts, use the [[Script_editor|script editor]]. Make sure to also [[Activating_Scripts|activate them]] so they can be checked for errors and actually apply to objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Object Naming=&lt;br /&gt;
When you with to refer to objects/local instances from script or elsewhere, make sure to follow the [[Templates_explanation#Local_instances.2Ftemplates|correct naming convention]].&lt;br /&gt;
=Sections=&lt;br /&gt;
Before any section in a script, we can INCLUDE files. When you INCLUDE a file, you're telling the system to parse that file first.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===INIT===&lt;br /&gt;
In the INIT section you can declare global variables and inherit from other scripts. Global variables always start with&amp;amp;nbsp;% and can be accessed and modified everywhere (including other scripts, osiris, and in code). There are also EXTERN variables, which are exposed when you assign a script to an object so you can change the value for local instances of the script. The INIT section also contains the special variable '__Me', which contains the owner of the script. This is a character or item depending on the script type. Code will automatically fill this variable.&amp;lt;br /&amp;gt;&lt;br /&gt;
Inheritance is done with the USING keyword and copies everything from the other script into the current script. This includes all global variables, reactions, scriptframes, and events. You can use USING SHARED if you intend to overwrite reactions, events, or scriptframes.&amp;lt;br /&amp;gt;&lt;br /&gt;
An example INIT section:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INIT&lt;br /&gt;
     USING SHARED Base&lt;br /&gt;
     CHARACTER:__Me&lt;br /&gt;
     CHARACTER:%AnotherCharacter=null&lt;br /&gt;
     FLOAT3:%CurrentPosition=null&lt;br /&gt;
     EXTERN INT:%CanRun=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to override a specific reaction, event, or scriptframe you have to specify this with the OVERRIDE keyword:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REACTION TestReaction, 5 OVERRIDE&lt;br /&gt;
EVENT TestEvent OVERRIDE&lt;br /&gt;
SCRIPTFRAME TestFrame OVERRIDE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If needed, you can also only inherit specific reactions, events, or scriptframes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
USING ScriptName REACTION ReactionName,NewPriority&lt;br /&gt;
USING ScriptName EVENT EventName&lt;br /&gt;
USING ScriptName SCRIPTFRAME ScriptFrameName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===BEHAVIOUR===&lt;br /&gt;
This section contains the actual behaviour of the object. It solely consists of a whole bunch of reactions, of which only 1 reaction can be active at the same time. The current reaction gets selected based on its priority and its CHECK. The priority defines how much it wants to be executed and the CHECK decided whether its possible to be executed. The reaction with the highest priority whose CHECK succeeds will be selected for execution:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;span style=&amp;quot;background-color:transparent;font-size:1em&amp;quot;&amp;gt;The whole list of reactions is always sorted from HIGH to LOW priorities.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;span style=&amp;quot;background-color:transparent;font-size:1em&amp;quot;&amp;gt;We then check in that order all the reactions with a higher priority of the current reaction and see if their CHECK succeeds.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;span style=&amp;quot;background-color:transparent;font-size:1em&amp;quot;&amp;gt;As soon as a higher priority reaction's CHECK succeeds, it interrupts the current reaction and will start executing.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Important note&amp;lt;/b&amp;gt;: only the CHECKs of higher priority reactions are evaluated every frame. This means that the current reaction's CHECK is &amp;lt;b&amp;gt;NOT&amp;lt;/b&amp;gt; reevaluated while it's executing! It could become invalid during the execution. This is also true when calling Reset(): execution simply restarts at the beginning of the current reaction without evaluating the CHECK conditions again.&lt;br /&gt;
On top of the priority and CHECKs there's also the USAGE keyword. A reaction needs to specify a USAGE context. You can pick the following USAGE contexts:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;USAGE COMBAT: can only be executed during combat when its the turn of the object&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;USAGE WAITING: can only be executed during combat when waiting for its turn&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;USAGE PEACE: can only be executed when not in combat&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;USAGE ALL: can always be executed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
A reaction can have its own local variables. These variables have to start with an underscore and can only be accessed within the reaction itself.&amp;lt;br /&amp;gt;&lt;br /&gt;
As soon as a reaction is interrupted, the INTERRUPT event will be called immediately and you can execute some code to for example Reset the reaction. You can catch all INTERRUPTS or only specific interrupts (like the movement failed interrupt) and execute actions on the interrupt. If you catch a specific interrupt event you have the possibility to fill in variables for the event:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An underscore ('_'): this variable is not relevant for the event, it will not prevent the event from firing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A constant (e.g. &amp;quot;TestString&amp;quot;) or a global variable: the variable has to be equal to this constant, otherwise the event will not be executed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A local variable: this variable will get filled with the variable from the event&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Some examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OnEnteredCombat(__Me, _) // Only catch the event when __Me entered combat, the second variable one is irrelevant&lt;br /&gt;
OnEnteredCombat(_, %GlobalItemVariable) // Only catch the event when %GlobalItemVariable entered combat, the first variable is irrelevant&lt;br /&gt;
OnEnteredCombat(_LocalCharacterVariable, _) // Always catches the event, and _LocalCharacterVariable contains the character that entered combat. BEWARE: _LocalCharacterVariable can be null if an item entered combat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The actions during an interrupt are limited to immediate/simple actions, which can be executed immediately (e.g. CharacterMoveTo() is not allowed). Keep in mind though that a reaction can be interrupted for many reasons:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Higher priority reaction takes over.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Other system takes over: statuses/dialog/story&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An exception was thrown in the script: e.g. pathfinding failed, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The object got culled (more details on culling can be found later on this page)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Important note&amp;lt;/b&amp;gt;: if a reaction gets interrupted and later gets resumed, it will continue executing where it got interrupted! (unless &amp;quot;Reset&amp;quot; was called in the INTERRUPT handler, in which case it will begin from the start again)&amp;lt;br /&amp;gt;&lt;br /&gt;
An example BEHAVIOUR section:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEHAVIOUR&lt;br /&gt;
REACTION TestReaction, 5 // Priority 5&lt;br /&gt;
USAGE PEACE&lt;br /&gt;
VARS&lt;br /&gt;
     CHARACTER:_TestCharacter&lt;br /&gt;
CHECK &amp;quot;(c1|c2)&amp;amp;!c3&amp;quot; // Reaction can be executed when one of the first 2 conditions passes, and the third condition doesn't pass&lt;br /&gt;
     IsInSurface(__Me, SurfaceOil)&lt;br /&gt;
     IsInDangerousSurface(__Me)&lt;br /&gt;
     CharacterIsFloating(__Me)&lt;br /&gt;
ACTIONS&lt;br /&gt;
     CharacterFleeFromSurface()&lt;br /&gt;
INTERRUPT&lt;br /&gt;
ON&lt;br /&gt;
     OnMovementFailed(_) // Only when interrupted by a failed movement&lt;br /&gt;
ACTIONS&lt;br /&gt;
     Reset()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===STORY===&lt;br /&gt;
There are specific story &amp;quot;reactions&amp;quot; called scriptframes. These are almost exactly the same as reactions, but they don't have a priority or CHECK block. They are managed by Story (Osiris) and can be SET or INJECTED. We keep a stack of all currently set scriptframes. If something is on the stack, the current REACTION always gets interrupted! The stack is the highest priority and comes before BEHAVIOUR reactions! Example of stack behaviour:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When you push something, it is put on the top of the stack.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When you pop, the top scriptframe is removed (happens when it finished executing)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
In our case:&amp;lt;br /&amp;gt;&lt;br /&gt;
If you SET a scriptframe the stack gets cleared (Abort!) and the new scriptframe gets pushed on the stack.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you INJECT a scriptframe, it will just push a copy of it on the stack. You can keep injecting the same scriptframe on the stack and it will be executed multiple times.&amp;lt;br /&amp;gt;&lt;br /&gt;
As soon as the TOP scriptframe is finished, it pops from the stack and the one below it starts/resumes executing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Just like with reactions, if you INJECT a new scriptframe and there was already a scriptframe on the stack active, it will get interrupted and later resume where it was before. The syntax for writing a SCRIPTFRAME is exactly the same as a REACTION (except for the lack of priority and CHECK, and the fact that they need to be in the STORY section).&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===EVENTS===&lt;br /&gt;
This section contains all the events that we want to catch. Events are always &amp;lt;b&amp;gt;immediately&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;completely&amp;lt;/b&amp;gt; executed! It cannot take multiple frames: it's a blocking call and will execute and return immediately when it's done. Even when the object is culled or offstage will it execute its events. Events are always thrown to all objects in the current level. An event can be thrown from code, osiris, or from script itself.&amp;lt;br /&amp;gt;&lt;br /&gt;
In a reaction or scriptframe, each frame only 1 action gets executed at most. Let's take a piece of script from a REACTION:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Set(%TargetPos,%Enemy)&lt;br /&gt;
CharacterEvent(%Enemy,&amp;quot;Attack!&amp;quot;) &lt;br /&gt;
CharacterMoveTo(%TargetPos)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In the example above, the first 2 lines will take 2 frames (1 frame per line). The third one will take as long as it takes for the character to move to the target position. However, in an event the actions get executed immediately. Even if it was 100 actions with IFs and WHILEs, it would be executed as it was 1 action. For that reason, you cannot use actions in events that need time (Sleep, CharacterMoveTo, ...). Additionally, the number of actions an event can execute is limited. If you exceed the limit, Osiris will log an error and exit the event. In fact, let me amaze you even more. If you throw a CharacterEvent in an event, that spawns a new event and is thrown on every character and item... even all those events are executed immediately before it gets to the next line.&amp;lt;br /&amp;gt;&lt;br /&gt;
Just like INTERRUPTs in REACTIONs, EVENTs have to react on something (INTERRUPTs can and EVENTs must). The syntax is equal as well (more information on the event variables can be found in the REACTION INTERRUPT section).&amp;lt;br /&amp;gt;&lt;br /&gt;
An example EVENTS section:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EVENT TestInitEvent&lt;br /&gt;
ON&lt;br /&gt;
     OnInit()&lt;br /&gt;
ACTIONS&lt;br /&gt;
     IF &amp;quot;!c1&amp;quot;&lt;br /&gt;
          IsEqual(%StartTrigger, null)&lt;br /&gt;
     THEN&lt;br /&gt;
          TeleportTo(__Me, %StartTrigger)&lt;br /&gt;
     ENDIF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Variables=&lt;br /&gt;
===Types===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;INTEGER and INTEGER64: 'whole' numbers. The difference between INTEGER and INTEGER64 is not relevant for the scripter (unless you care about really, really big numbers), as long as you make sure to pass the right type in actions. For example: -10, 0, 8, 102324, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FLOAT: all other numbers. For example: 0.1, -0.323, 8.3, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STRING and FIXEDSTRING: the difference between STRING and FIXEDSTRING is not important when scripting, just make sure to pass the correct type in actions. For example: &amp;quot;&amp;quot;, &amp;quot;testString&amp;quot;, &amp;quot;testing123&amp;quot;, ... . &amp;lt;b&amp;gt;Important note:&amp;lt;/b&amp;gt; do not start a string with the characters '%' or '_', as they will get recognized as a variable instead (it's not intended, it's a bug).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CHARACTER, ITEM, TRIGGER, and SPLINE: objects that are currently loaded in the game. This includes globals and locals of the curently loaded level. The script will assert if the script uses an object that isn't currently loaded. It will also warn you if the character's name does not start with the prefix 'S_'. This prefix helps to prevent objects being deleted because they aren't used (they could be used in script). For example: S_GLO_Dallis, S_MyFirstItem, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RELATION_TYPE: only used in a handful actions. A list of possible relation types can be found [[scripting_relation_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SKILL_ID: the name/id of a skill as it can be found in [[skill_creation|SkillData]]. For example: Target_Bless, Projectile_Fireball, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SURFACE_TYPE: surface types can be found [[scripting_surface_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STATUS_TYPE: status types can be found [[Scripting_status_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CHARACTERSTAT_TYPE: characterstat types can be found [[Scripting_characterstat_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ITEMSTAT_TYPE: itemstat types can be found [[Scripting_itemstat_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WEAPON_TYPE: weapon types can be found [[Scripting_weapon_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DAMAGE_TYPE: damage types can be found [[Scripting_damage_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TALENT_TYPE: talent types can be found [[Scripting_talent_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COMPARE_TYPE: compare types can be found [[Scripting_compare_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COMPARE_FUNCTION: compare functions can be found [[Scripting_compare_functions|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FLOAT3: floats are written as {number;number;number}, and can contain integers as well&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CHARACTERTEMPLATE, ITEMTEMPLATE, and PROJECTILETEMPLATE: the script will warn you if the template's name does not start with the prefix 'S_'. This prefix helps to prevent objects being deleted because they aren't used (they could be used in script). For example: S_Chair_A, S_Human_Male_B, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;POTION_ID: all loaded potions from stats&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ABILITY_TYPE: ability types can be found [[Scripting_ability_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DEATH_TYPE: death types can be found [[Scripting_death_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STATUS_ID: all loaded statuses from stats&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ARCHETYPE: all available archetypes that are loaded. More information on archetypes can be found [[CombatAi_Archetypes_And_Modifiers|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SURFACE_TRANSFORM_TYPE: surface transform types can be found [[Scripting_surface_transform_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Lists===&lt;br /&gt;
Lists are a special parameter type and contain multiple parameters of a single type.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Important note&amp;lt;/b&amp;gt;: Lists are more convenient, but they are slower than normal parameters. They also have a limited size, so don't try to fill them with thousands of entries.&amp;lt;br /&amp;gt;&lt;br /&gt;
Declaring a list:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LIST&amp;lt;INT&amp;gt;:%TestListInt // Fine&lt;br /&gt;
LIST&amp;lt;CHARACTER&amp;gt;:%TestListCharacter // Fine&lt;br /&gt;
LIST&amp;lt;LIST&amp;lt;INT&amp;gt;&amp;gt;:%TestListNested // Error, can't nest lists&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Adding entries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListAdd(%TestListInt, 0) // Fine&lt;br /&gt;
ListAdd(%TestListInt, {0;1;2}) // Error, trying to add a FLOAT3 to an INT LIST&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Removing entries: indices start at 1, and end at the list size. All entries after the removed entry will be shifted to the left:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListRemove(%TestListInt, 1) // Fine, assuming that the list has 1 or more entries&lt;br /&gt;
ListRemove(%TestListInt, 0) // Error, invalid index&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Setting or getting entries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListSet(%TestListInt, 1, %AnInt) // Fine&lt;br /&gt;
ListGet(%TestListInt, 1, %AnInt)&lt;br /&gt;
&lt;br /&gt;
ListSet(%TestListInt, 1, %ACharacter) // Error, trying to set a CHARACTER in an INT LIST&lt;br /&gt;
ListGet(%TestListInt, 1, %ACharacter)&lt;br /&gt;
&lt;br /&gt;
ListSet(%TestListInt, 0, %AnInt) // Error, invalid index&lt;br /&gt;
ListGet(%TestListInt, 0, %AnInt)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Getting the list size:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListGetSize(%TestList, %ListSize)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Clearing a list:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListClear(%TestList)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Important note&amp;lt;/b&amp;gt;: Lists currently do not support EXTERN, constants, and STRING , meaning that the following lines will not work in scripts and result in an error during script build:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LIST&amp;lt;INT&amp;gt;:%TestList = {1, 2, 3, 4, 5} // Using a constant to initialize&lt;br /&gt;
ListGetSize({1, 2, 3, 4}, %ListSize) // Using a constant in an action call&lt;br /&gt;
EXTERN LIST&amp;lt;INT&amp;gt;:%TestList = {1, 2} // Using EXTERN and using a constant to initialize&lt;br /&gt;
LIST&amp;lt;STRING&amp;gt;:%TestString // Using STRING as the type&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, how would you use these lists?&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Important Events=&lt;br /&gt;
===OnInit and OnShutDown===&lt;br /&gt;
OnInit is called each time on all objects in the level when the level is loaded, and OnShutdown is called when the level is unloaded. This would be the place where you can create/destroy your looping effects that should always be on the object.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===OnLoaded===&lt;br /&gt;
OnLoaded is called when the savegame is loaded or when the levelcache is loaded (levelswap). The version of the savegame is passed so you can do your patching &amp;quot;hacks&amp;quot; if necessary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Interrupts===&lt;br /&gt;
Interrupts are only called on reactions and can only be caught on that reaction:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnBetterReactionFound: a higher priority reaction succeeded its check&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnNoReactionFound: no reaction has succeeded its check&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnScriptDisabled: another system has taken control (dialogs, statuses, story)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnManualInterrupt: the Interrupt action itself has caused the interrupt&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnMovementFailed: pathfinding has failed to find a path to the target&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnException: a character task has failed&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===OnFunction===&lt;br /&gt;
You can create your own &amp;quot;functions' with &amp;lt;b&amp;gt;CallFunction(&amp;quot;functionName&amp;quot;)&amp;lt;/b&amp;gt; and catching the event &amp;lt;b&amp;gt;OnFunction(&amp;quot;functionName&amp;quot;)&amp;lt;/b&amp;gt;. This way you can share functionality between multiple events and reactions. You can not pass parameters directly, but you could set some function-specific global variables which the function uses and can even 'return' results in.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Culling=&lt;br /&gt;
For performance reasons we only update a small set of all the characters &amp;amp; items in the level.&amp;lt;br /&amp;gt;&lt;br /&gt;
The updating characters are:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Force updating (can be set in script/story, but should only be used in an emergency!)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In Combat&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Executing Osiris Tasks&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In range of the party (within 40m)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
The updating items are:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Force updating (can be set in script/story using ItemSetForceSynch(), but should only be used in an emergency!)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In Combat&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Moving&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In range of the party (within 40m)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
This means that in most cases objects far away from the party get culled and stop updating. When an object doesn't update anymore this means the behaviour is interrupted and won't be executed anymore. However, events always get executed, so culling has no impact on this. Another consequence of culling is that timers of that script are not ticking anymore and are basically paused.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Debugging=&lt;br /&gt;
There are 4 ways to help you debug:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The script debugger in the script editor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CTRL+SHIFT+ClICK on the object you wish to debug to show the Script Screen, and CTRL+SHIFT+SCROLL to the Script and/or Variables screen to see what the current state is.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Add a whole bunch of DebugText output in your code to see which code is called in what order.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Start the script log for an object, which logs as much stuff as possible about the script (reactions, interrupts, events, ...)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Script Debugger===&lt;br /&gt;
See the [[script_debugger|Script Debugger]] page for more information.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Script Screen===&lt;br /&gt;
On the left side of the Script Screen it shows the script variables, the script reactions (ordered from high priority to low), and the current Event it catches. It colors the reactions gray (not checked), green (check passed), and red (check failed). At the right you can see the current reaction's conditions and actions. You can see which action is currently executing and you can see the return results of the conditions from the check: gray (not evaluated), green (TRUE), and red (FALSE).&amp;lt;br /&amp;gt;&lt;br /&gt;
You can filter in the script variables through the [[console|console]] by using: &amp;quot;filtervar &amp;lt;filter&amp;gt;&amp;quot;.&lt;br /&gt;
&amp;lt;b&amp;gt;Tip:&amp;lt;/b&amp;gt; type &amp;quot;filtervar asdf&amp;quot; or something to remove all variables so you can see all the reactions!&amp;lt;br /&amp;gt;&lt;br /&gt;
You can also change which reaction you want to see at the right, by entering the number of that reaction in the console. This way you can easily check why certain reactions are never succeeding their CHECK by checking the return values of the conditions. To do this first you must activate this mode, by entering &amp;quot;show server&amp;quot; in the console. Then you can type the number of the wanted reaction or type &amp;quot;0&amp;quot; to show the current reaction again.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===DebugText===&lt;br /&gt;
You can put DebugText in events/scriptframes/reactions to print text in the world on any object you want. This way you can easily see if you get in the code you wrote and you can also print any variable's value at that time. To print the variables we use the same syntax as translated strings: [1] [2] [3] ...&amp;lt;br /&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DebugText(__Me,&amp;quot;Target: [1], Speed is [2]&amp;quot;,_Target,%Speed)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For characters, items, triggers, splines, and templates the name will be shown in the debug text. Numbers will be shown in full, and all other variables will be directly converted to strings.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===ScriptLog===&lt;br /&gt;
You can also start/stop the scriptlog in console with:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;ai log all&amp;quot;: Start the scriptlog for all character/items.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;ai log none&amp;quot;: Stop the scriptlog for all character/items.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;ai log selected&amp;quot;: Toggle the separate scriptlog for the selected (CTRL+SHIFT+CLICK) object&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
It will generate scriptlog file(s) right next to the executable.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Common Mistakes=&lt;br /&gt;
===Reset()===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REACTION CastSkill, 1000&lt;br /&gt;
USAGE COMBAT&lt;br /&gt;
VARS&lt;br /&gt;
     FLOAT:_minRange&lt;br /&gt;
     FLOAT:_maxRange&lt;br /&gt;
CHECK &amp;quot;!c1&amp;amp;c2&amp;amp;c3&amp;quot;&lt;br /&gt;
     IsEqual(%SkillTarget,null)&lt;br /&gt;
     CharacterCanCast(__Me,Projectile_Fireball,0)&lt;br /&gt;
     CharacterGetSkillRange(_minRange,_maxRange,__MeProjectile_Fireball)&lt;br /&gt;
ACTIONS&lt;br /&gt;
     CharacterMoveInRange(%SkillTarget,_minRange,_maxRange,1)&lt;br /&gt;
     PlayEffectAt(__Me, &amp;quot;FX_GP_HugeFireball_A&amp;quot;)&lt;br /&gt;
     CharacterUseSkill(Projectile_Fireball,%SkillTarget)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;In this case we have a reaction that will move in range of the target and as soon as we are in range we will play an effect and cast a fireball. However, if this reaction gets interrupted during the playeffect, next time this reaction becomes active again we will just cast a fireball on the target even when we would not be in range and didn't play the effect. This is why in these cases you should add an INTERRUPT to Reset() the reaction.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CHECK or IF===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REACTION CastSkill,1000&lt;br /&gt;
USAGE COMBAT&lt;br /&gt;
VARS&lt;br /&gt;
     FLOAT:_minRange&lt;br /&gt;
     FLOAT:_maxRange&lt;br /&gt;
CHECK &amp;quot;!c1&amp;amp;c2&amp;quot;&lt;br /&gt;
     IsEqual(%SkillTarget,null)&lt;br /&gt;
     CharacterGetSkillRange(_minRange,_maxRange,__MeProjectile_Fireball)&lt;br /&gt;
ACTIONS&lt;br /&gt;
     IF &amp;quot;c1&amp;quot;&lt;br /&gt;
          CharacterCanCast(__Me,Projectile_Fireball,0)	&lt;br /&gt;
     THEN&lt;br /&gt;
          CharacterMoveInRange(%SkillTarget,_minRange,_maxRange,1)&lt;br /&gt;
          PlayEffectAt(__Me, &amp;quot;FX_GP_HugeFireball_A&amp;quot;)&lt;br /&gt;
          CharacterUseSkill(Projectile_Fireball,%SkillTarget)&lt;br /&gt;
     ENDIF&lt;br /&gt;
INTERRUPT&lt;br /&gt;
ACTIONS&lt;br /&gt;
     Reset()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In this case we're checking something in the reaction when it's executing, but we don't do anything if the IF fails. There is no ELSE behaviour. This means that in combat this reaction could keep failing and not do anything, which will cause a ForceEndTurn for that character. Here we should have checked CharacterCanCast in the CHECK and not write a separate IF check. In general when the IF check in a REACTION is blocking the whole REACTION from executing it's probably better to place it in the CHECK instead.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Check order===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
IF &amp;quot;c1&amp;amp;c2&amp;amp;!c3&amp;amp;c4&amp;quot;&lt;br /&gt;
     CharacterGetStat(_Vitality, __Me, Vitality) // Fetch before checking&lt;br /&gt;
     IsGreaterThen(_Vitality, 0.5)&lt;br /&gt;
     IsEqual(_Character, null) // Null check before checking&lt;br /&gt;
     CharacterIsPlayer(_Character)&lt;br /&gt;
THEN&lt;br /&gt;
     // Do something&lt;br /&gt;
ENDIF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure to perform your checks in the right order. Before checking a stat make sure to fetch it. Before checking if the character is a player consider checking if it is a valid player. Could it be the player is off stage? Could it be dead? Is it even set?&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===AD interrupts===&lt;br /&gt;
&lt;br /&gt;
[[Category:Behaviour_Scripts]]&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Talk:Scripting&amp;diff=6490</id>
		<title>Talk:Scripting</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Talk:Scripting&amp;diff=6490"/>
		<updated>2018-12-11T18:19:49Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: /* Mistakes/Typos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Mistakes/Typos ===&lt;br /&gt;
&lt;br /&gt;
In the section &amp;quot;CHECK or IF&amp;quot;, ACTIONS needs to be declared after the INTERRUPT, above Reset().&lt;br /&gt;
&lt;br /&gt;
[[User:LaughingLeader|LaughingLeader]] ([[User talk:LaughingLeader|talk]]) 19:10, 11 December 2018 (CET)&lt;br /&gt;
&lt;br /&gt;
Well spotted, fixed :)&lt;br /&gt;
&lt;br /&gt;
--[[User:Rimevan|Rimevan]] ([[User talk:Rimevan|talk]]) 19:19, 11 December 2018 (CET)&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
&lt;br /&gt;
Some very useful information here. I'm slightly confused about the purpose of SCRIPTFRAMES. It would be nice to see an example of one, including the Osiris code. Also an example of a LIST in action would be nice. I also think the example EVENT is not super helpful, since most people aren't going to know what the archetypes are.&lt;br /&gt;
&lt;br /&gt;
I also find the Behavior example confusing. It looks like maybe there's a ! on the second condition (for dangerous surfaces), that shouldn't be there?&lt;br /&gt;
&lt;br /&gt;
Under common mistakes there's CHECK or IF. Are there situations where you would use IF over CHECK in behavior?&lt;br /&gt;
&lt;br /&gt;
Another common mistake I think could be checking things in the wrong order. Something like:&lt;br /&gt;
&lt;br /&gt;
IsGreaterThen(_Vitality,.5)&lt;br /&gt;
CharacterGetStat(_Vitality,__Me,Vitality)&lt;br /&gt;
&lt;br /&gt;
(I mean, that is a mistake, right?)&lt;br /&gt;
&lt;br /&gt;
Will DebugText print the text exactly as you put it in? Like printing out the float value 0.47 exactly as &amp;quot;0.47&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
Going over types of variables (INT, FLOAT, FIXEDSTRING, STATUS, CHARACTERTEMPLATE, etc.) here or somewhere else would be useful too.&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Talk:Scripting&amp;diff=6489</id>
		<title>Talk:Scripting</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Talk:Scripting&amp;diff=6489"/>
		<updated>2018-12-11T18:19:40Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: /* Mistakes/Typos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Mistakes/Typos ===&lt;br /&gt;
&lt;br /&gt;
In the section &amp;quot;CHECK or IF&amp;quot;, ACTIONS needs to be declared after the INTERRUPT, above Reset().&lt;br /&gt;
&lt;br /&gt;
[[User:LaughingLeader|LaughingLeader]] ([[User talk:LaughingLeader|talk]]) 19:10, 11 December 2018 (CET)&lt;br /&gt;
&lt;br /&gt;
Well spotted, fixed :)&lt;br /&gt;
--[[User:Rimevan|Rimevan]] ([[User talk:Rimevan|talk]]) 19:19, 11 December 2018 (CET)&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
&lt;br /&gt;
Some very useful information here. I'm slightly confused about the purpose of SCRIPTFRAMES. It would be nice to see an example of one, including the Osiris code. Also an example of a LIST in action would be nice. I also think the example EVENT is not super helpful, since most people aren't going to know what the archetypes are.&lt;br /&gt;
&lt;br /&gt;
I also find the Behavior example confusing. It looks like maybe there's a ! on the second condition (for dangerous surfaces), that shouldn't be there?&lt;br /&gt;
&lt;br /&gt;
Under common mistakes there's CHECK or IF. Are there situations where you would use IF over CHECK in behavior?&lt;br /&gt;
&lt;br /&gt;
Another common mistake I think could be checking things in the wrong order. Something like:&lt;br /&gt;
&lt;br /&gt;
IsGreaterThen(_Vitality,.5)&lt;br /&gt;
CharacterGetStat(_Vitality,__Me,Vitality)&lt;br /&gt;
&lt;br /&gt;
(I mean, that is a mistake, right?)&lt;br /&gt;
&lt;br /&gt;
Will DebugText print the text exactly as you put it in? Like printing out the float value 0.47 exactly as &amp;quot;0.47&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
Going over types of variables (INT, FLOAT, FIXEDSTRING, STATUS, CHARACTERTEMPLATE, etc.) here or somewhere else would be useful too.&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Talk:Scripting_surface_types&amp;diff=5881</id>
		<title>Talk:Scripting surface types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Talk:Scripting_surface_types&amp;diff=5881"/>
		<updated>2018-04-04T11:00:21Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: /* Changing to ordered list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Can't Edit=&lt;br /&gt;
Apparently I can't edit, so here's an ordered list so you don't have to count to the surface you are curious about.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;-1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceNone&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFire&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFirePurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWater&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozenBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozenCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozenPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBlood&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozenBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozenCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozenPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOil&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOilBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOilCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOilPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceLava&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSource&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWeb&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWebBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWebCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWebPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceDeepwater&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceExplosionCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFrostCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceDeathfogCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
[[User:Lofgren|Lofgren]] ([[User talk:Lofgren|talk]]) 06:52, 4 April 2018 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Changing to ordered list ==&lt;br /&gt;
&lt;br /&gt;
That's actually really useful, I added the actual values of the surface types to the list :) However, I do advise to use the actual enumeration instead of the integer representation. The values might change after all.&lt;br /&gt;
:The integers are returned by some functions and used as inputs in others, so it's helpful to know. Hopefully they wouldn't change something so fundamental at this point, but I guess you never know.[[User:Lofgren|Lofgren]] ([[User talk:Lofgren|talk]]) 12:40, 4 April 2018 (CEST)&lt;br /&gt;
::Ah, but it's better to use e.g. 'SurfaceFire' instead of '0'. The value of 'SurfaceFire' might change its value from '0' to '1' for some reason and in that case it wouldn't break anything if you used 'SurfaceFire' as the value. 'SurfaceFire' represents a value in code, but you don't have to worry about what exactly that value is. When you start using actual numbers you certainly have to worry about possible changes. [[User:Rimevan|Rimevan]] ([[User talk:Rimevan|talk]]) 13:00, 4 April 2018 (CEST)&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_surface_transform_types&amp;diff=5879</id>
		<title>Scripting surface transform types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_surface_transform_types&amp;diff=5879"/>
		<updated>2018-04-04T07:32:24Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
It is advised to use the enumeration value instead of the integer representation because this list is subject to change. The following surface transform types can be used in script:&lt;br /&gt;
&amp;lt;ol start=0&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;None&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ignite&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Bless&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Purify&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Curse&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Electrify&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Melt&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Freeze&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Condense&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Vaporize&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Bloodify&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Contaminate&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Oilify&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Shatter&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_death_types&amp;diff=5878</id>
		<title>Scripting death types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_death_types&amp;diff=5878"/>
		<updated>2018-04-04T07:30:37Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
It is advised to use the enumeration value instead of the integer representation because this list is subject to change. The following death types can be used in script:&lt;br /&gt;
&amp;lt;ol start=0&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;None&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Physical&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Piercing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Arrow&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DoT&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Incinerate&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Acid&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Electrocution&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FrozenShatter&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PetrifiedShatter&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Explode&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Surrender&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Hang&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;KnockedDown&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Lifetime&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_ability_types&amp;diff=5877</id>
		<title>Scripting ability types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_ability_types&amp;diff=5877"/>
		<updated>2018-04-04T07:29:50Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
It is advised to use the enumeration value instead of the integer representation because this list is subject to change. The following ability types can be used in script:&lt;br /&gt;
&amp;lt;ol start=0&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WarriorLore&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RangerLore&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RogueLore&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SingleHanded&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TwoHanded&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reflection&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ranged&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Shield&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reflexes&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PhysicalArmorMastery&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MagicArmorMastery&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;VitalityMastery&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sourcery&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FireSpecialist&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WaterSpecialist&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AirSpecialist&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EarthSpecialist&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Necromancy&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Summoning&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Polymorph&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Telekinesis&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Repair&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sneaking&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pickpocket&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Thievery&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Loremaster&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Crafting&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Barter&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Charm&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intimidate&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reason&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Charisma&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Leadership&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Luck&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DualWielding&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wand&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Perseverance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Runecrafting&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Brewmaster&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_compare_functions&amp;diff=5876</id>
		<title>Scripting compare functions</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_compare_functions&amp;diff=5876"/>
		<updated>2018-04-04T07:27:26Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
It is advised to use the enumeration value instead of the integer representation because this list is subject to change. The following compare functions can be used in script:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Distance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Level&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Vitality&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;VitalityPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Magic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MagicPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ActionPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;APMaximum&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;APStart&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;APRecovery&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Experience&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reputation&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Karma&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Strength&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Finesse&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intelligence&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Constitution&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wits&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TrapWits&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Movement&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FireResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EarthResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WaterResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AirResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PoisonResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PiercingResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PhysicalResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CorrosiveResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MagicResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ShadowResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sight&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Hearing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Initiative&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Armor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ArmorPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GoldValue&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_compare_types&amp;diff=5875</id>
		<title>Scripting compare types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_compare_types&amp;diff=5875"/>
		<updated>2018-04-04T07:26:24Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
It is advised to use the enumeration value instead of the integer representation because this list is subject to change. The following compare types can be used in script:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Lowest&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Highest&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Random&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_talent_types&amp;diff=5874</id>
		<title>Scripting talent types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_talent_types&amp;diff=5874"/>
		<updated>2018-04-04T07:25:35Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
It is advised to use the enumeration value instead of the integer representation because this list is subject to change. The following talent types can be used in script:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ItemMovement&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ItemCreation&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Flanking&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AttackOfOpportunity&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Backstab&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Trade&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Lockpick&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ChanceToHitRanged&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ChanceToHitMelee&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Damage&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ActionPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ActionPoints2&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Criticals&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IncreasedArmor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sight&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ResistFear&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ResistKnockdown&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ResistStun&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ResistPoison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ResistSilence&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ResistDead&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Carry&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Throwing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Repair&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ExpGain&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ExtraStatPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ExtraSkillPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Durability&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Awareness&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Vitality&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FireSpells&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WaterSpells&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AirSpells&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EarthSpells&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Charm&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intimidate&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reason&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Luck&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Initiative&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;InventoryAccess&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AvoidDetection&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AnimalEmpathy&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Escapist&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;StandYourGround&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurpriseAttack&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LightStep&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ResurrectToFullHealth&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Scientist&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Raistlin&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MrKnowItAll&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WhatARush&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FaroutDude&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Leech&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ElementalAffinity&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FiveStarRestaurant&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Bully&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ElementalRanger&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LightningRod&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Politician&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WeatherProof&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LoneWolf&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Zombie&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Demon&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IceKing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Courageous&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GoldenMage&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WalkItOff&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FolkDancer&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SpillNoBlood&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Stench&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Kickstarter&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WarriorLoreNaturalArmor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WarriorLoreNaturalHealth&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WarriorLoreNaturalResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RangerLoreArrowRecover&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RangerLoreEvasionBonus&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RangerLoreRangedAPBonus&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RogueLoreDaggerAPBonus&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RogueLoreDaggerBackStab&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RogueLoreMovementBonus&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RogueLoreHoldResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;NoAttackOfOpportunity&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WarriorLoreGrenadeRange&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RogueLoreGrenadePrecision&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WandCharge&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DualWieldingDodging&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Human_Inventive&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Human_Civil&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Elf_Lore&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Elf_CorpseEating&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Dwarf_Sturdy&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Dwarf_Sneaking&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Lizard_Resistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Lizard_Persuasion&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Perfectionist&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Executioner&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ViolentMagic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;QuickStep&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Quest_SpidersKiss_Str&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Quest_SpidersKiss_Int&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Quest_SpidersKiss_Per&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Quest_SpidersKiss_Null&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Quest_TradeSecrets&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Quest_GhostTree&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;BeastMaster&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LivingArmor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Torturer&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ambidextrous&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Unstable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ResurrectExtraHealth&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;NaturalConductor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Quest_Rooted&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_characterstat_types&amp;diff=5873</id>
		<title>Scripting characterstat types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_characterstat_types&amp;diff=5873"/>
		<updated>2018-04-04T07:19:22Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
It is advised to use the enumeration value instead of the integer representation because this list is subject to change. The following characterstat types can be used in script:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Level&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Vitality&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;VitalityPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;VitalityMax&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Magic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MagicPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ActionPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;APMaximum&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;APStart&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;APRecovery&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Experience&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reputation&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Karma&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Strength&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Finesse&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intelligence&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Constitution&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wits&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TrapWits&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Movement&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PhysicalArmor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PhysicalArmorPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FireResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EarthResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WaterResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AirResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PoisonResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PiercingResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PhysicalResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CorrosiveResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MagicResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ShadowResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sight&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Hearing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Initiative&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Weight&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TrapDetection&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Willpower&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Bodybuilding&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MagicArmor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MagicArmorPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_damage_types&amp;diff=5872</id>
		<title>Scripting damage types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_damage_types&amp;diff=5872"/>
		<updated>2018-04-04T07:16:58Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
It is advised to use the enumeration value instead of the integer representation because this list is subject to change. The following damage types can be used in script:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Physical&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Piercing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Corrosive&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Magic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Chaos&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fire&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Air&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Water&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Earth&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Poison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Shadow&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_damage_types&amp;diff=5871</id>
		<title>Scripting damage types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_damage_types&amp;diff=5871"/>
		<updated>2018-04-04T07:15:57Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
It is advised to use the enumeration value instead of the integer representation because this list is subject to change. The following damage types can be used in script:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Physical&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Piercing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Corrosive&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Magic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Chaos&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Shadow&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fire&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Air&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Water&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Earth&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Poison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_weapon_types&amp;diff=5870</id>
		<title>Scripting weapon types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_weapon_types&amp;diff=5870"/>
		<updated>2018-04-04T07:15:33Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
It is advised to use the enumeration value instead of the integer representation because this list is subject to change. The following weapon types can be used in script:&lt;br /&gt;
&amp;lt;ol start=0&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;None&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sword&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Club&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Axe&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Staff&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Bow&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Crossbow&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Spear&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Knife&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wand&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Arrow&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_itemstat_types&amp;diff=5869</id>
		<title>Scripting itemstat types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_itemstat_types&amp;diff=5869"/>
		<updated>2018-04-04T07:12:16Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
It is advised to use the enumeration value instead of the integer representation because this list is subject to change. The following itemstat types can be used in script:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Weight&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Value&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Vitality&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;VitalityPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;VitalityMax&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Level&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Movement&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PhysicalArmor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PhysicalArmorPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FireResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EarthResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WaterResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AirResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PoisonResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PiercingResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PhysicalReistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CorrosiveResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MagicResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ShadowResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Initiative&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Willpower&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Bodybuilding&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_characterstat_types&amp;diff=5868</id>
		<title>Scripting characterstat types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_characterstat_types&amp;diff=5868"/>
		<updated>2018-04-04T07:08:20Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
It is advised to use the enumeration value instead of the integer representation because this list is subject to change. The following characterstat types can be used in script:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Level&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Vitality&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;VitalityPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;VitalityMax&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Magic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MagicPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ActionPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;APMaximum&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;APStart&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;APRecovery&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Experience&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reputation&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Karma&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Strength&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Finesse&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intelligence&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Constitution&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wits&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TrapWits&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Movement&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FireResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EarthResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WaterResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AirResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PoisonResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PiercingResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PhysicalResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CorrosiveResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MagicResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ShadowResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sight&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Hearing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Initiative&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Weight&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TrapDetection&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Willpower&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Bodybuilding&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PhysicalArmor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MagicArmor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PhysicalArmorPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MagicArmorPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_status_types&amp;diff=5867</id>
		<title>Scripting status types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_status_types&amp;diff=5867"/>
		<updated>2018-04-04T07:07:40Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
It is advised to use the enumeration value instead of the integer representation because this list is subject to change. The following status types can be used in script:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HIT&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DYING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAL&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MUTED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CHARMED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;KNOCKED_DOWN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SUMMONING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEALING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;THROWN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHIELD&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TELEPORT_FALLING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CONSUME&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COMBAT&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AOO&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STORY_FROZEN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SNEAKING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNLOCK&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FEAR&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;BOOST&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNSHEATHED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STANCE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SITTING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LYING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;BLIND&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SMELLY&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;INFECTIOUS_DISEASED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;INVISIBLE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ROTATE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ENCUMBERED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IDENTIFY&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;REPAIR&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MATERIAL&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LEADERSHIP&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXPLODE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ADRENALINE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHACKLES_OF_PAIN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHACKLES_OF_PAIN_CASTER&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WIND_WALKER&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DARK_AVENGER&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;REMORSE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DECAYING_TOUCH&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNHEALABLE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FLANKED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CHANNELING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DRAIN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LINGERING_WOUNDS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;INFUSED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SPIRIT_VISION&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SPIRIT&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DAMAGE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FORCE_MOVE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLIMBING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;INCAPACITATED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;INSURFACE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SOURCE_MUTED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OVERPOWER&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COMBUSTION&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;POLYMORPHED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DAMAGE_ON_MOVE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DEMONIC_BARGAIN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GUARDIAN_ANGEL&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;THICK_OF_THE_FIGHT&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FLOATING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CHALLENGE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DISARMED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAL_SHARING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAL_SHARING_CASTER&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXTRA_TURN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ACTIVE_DEFENSE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SPARK&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PLAY_DEAD&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CONSTRAINED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EFFECT&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DEACTIVATED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Talk:Scripting_surface_types&amp;diff=5866</id>
		<title>Talk:Scripting surface types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Talk:Scripting_surface_types&amp;diff=5866"/>
		<updated>2018-04-04T07:06:15Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: /* Changing to ordered list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Can't Edit=&lt;br /&gt;
Apparently I can't edit, so here's an ordered list so you don't have to count to the surface you are curious about.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;-1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceNone&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFire&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFirePurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWater&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozenBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozenCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozenPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBlood&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozenBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozenCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozenPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOil&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOilBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOilCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOilPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceLava&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSource&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWeb&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWebBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWebCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWebPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceDeepwater&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceExplosionCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFrostCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceDeathfogCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
[[User:Lofgren|Lofgren]] ([[User talk:Lofgren|talk]]) 06:52, 4 April 2018 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Changing to ordered list ==&lt;br /&gt;
&lt;br /&gt;
That's actually really useful, I added the actual values of the surface types to the list :) However, I do advise to use the actual enumeration instead of the integer representation. The values might change after all.&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_relation_types&amp;diff=5865</id>
		<title>Scripting relation types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_relation_types&amp;diff=5865"/>
		<updated>2018-04-04T07:04:32Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
It is advised to use the enumeration value instead of the integer representation because this list is subject to change. The following relation types can be used in behavior scripts:&lt;br /&gt;
&amp;lt;ol start=0&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Unknown&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ally&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Enemy&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Neutral&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Player&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Multiplayer&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Party&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PlayersNoSummon&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_surface_types&amp;diff=5864</id>
		<title>Scripting surface types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_surface_types&amp;diff=5864"/>
		<updated>2018-04-04T07:04:05Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
It is advised to use the enumeration value instead of the integer representation because this list is subject to change. The following surface types can be used in behavior scripts:&lt;br /&gt;
&amp;lt;ol start=-1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceNone&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFire&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFirePurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWater&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozenBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozenCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozenPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBlood&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozenBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozenCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozenPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOil&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOilBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOilCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOilPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceLava&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSource&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWeb&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWebBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWebCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWebPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceDeepwater&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceExplosionCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFrostCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceDeathfogCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Talk:Scripting_surface_types&amp;diff=5863</id>
		<title>Talk:Scripting surface types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Talk:Scripting_surface_types&amp;diff=5863"/>
		<updated>2018-04-04T07:01:53Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: /* Changing to ordered list */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Can't Edit=&lt;br /&gt;
Apparently I can't edit, so here's an ordered list so you don't have to count to the surface you are curious about.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;-1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceNone&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFire&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFirePurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWater&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozenBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozenCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozenPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBlood&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozenBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozenCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozenPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOil&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOilBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOilCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOilPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceLava&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSource&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWeb&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWebBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWebCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWebPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceDeepwater&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceExplosionCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFrostCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceDeathfogCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
[[User:Lofgren|Lofgren]] ([[User talk:Lofgren|talk]]) 06:52, 4 April 2018 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Changing to ordered list ==&lt;br /&gt;
&lt;br /&gt;
That's actually really useful, I added the actual values of the surface types to the list :)&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_surface_types&amp;diff=5862</id>
		<title>Scripting surface types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_surface_types&amp;diff=5862"/>
		<updated>2018-04-04T06:59:43Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
The following surface types can be used in behavior scripts:&lt;br /&gt;
&amp;lt;ol start=-1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceNone&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFire&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFirePurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWater&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozenBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozenCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozenPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBlood&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozenBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozenCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozenPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOil&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOilBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOilCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOilPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceLava&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSource&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWeb&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWebBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWebCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWebPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceDeepwater&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceExplosionCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFrostCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceDeathfogCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Combat_AI&amp;diff=5845</id>
		<title>Combat AI</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Combat_AI&amp;diff=5845"/>
		<updated>2018-03-13T13:21:54Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: /* Skills */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
Ai 2.0 or, as we'd like to call it, &amp;lt;b&amp;gt;Jane&amp;lt;/b&amp;gt; (used to be an abbreviation, but we already forgot about it the next day) no longer uses a script for every single skill to reason about its usage. Almost all logic has been moved to code, and all that's left in script is starting the Ai calculation, stopping the Ai calculation, and executing the action that has been selected by Ai. This script logic can be found in DefaultBehaviour.charScript. The Ai now takes into account the properties of a skill, the statuses that are applied, the weapons that are used, the items nearby, etc. Besides being smarter in general it also fixes a lot of issues with Ai ending turns we had in D:OS. It (attempts) to simulate what's going to happen if it will use a certain skill at a certain target and assign a score to it. The action with the highest score will be executed. All this happens automatically, so a new skill or status can be used by Ai without any extra steps. Of course, there are exceptions, and you'd still like to guide or override the Ai from time to time. That's what this page tries to cover in detail. &lt;br /&gt;
&lt;br /&gt;
=How does it work=&lt;br /&gt;
When trying to guide or override the Ai it's useful to know why the Ai is doing what it's doing. I'll try to explain the general approach the Ai takes in one turn to decide what action it will take, and try to refrain from using too many implementation details. First of all, let me explain a couple of terms up front that might also also be useful when touching [[CombatAi_Archetypes_And_Modifiers|archetypes and modifiers]]:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Action: walking to a position (if needed) and using a skill on one or multiple targets, or a fallback (finding a preferable position if no other action is viable)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ActionScore: the score of the use of a skill&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PositionScore: the score of a position, based on surfaces that may be on that position, allies or enemies in the vicinity, etc.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MovementScore: the score of moving from A to B, based on PositionScores on the path from A to B&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ActionCostModifier: the modifier combined from multiple modifiers that determines the total 'action cost' of an action, including AP and SP&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CostModifier: the modifier combined from multiple modifiers that determines the total 'cost' of an action. Affected by e.g. items being used, cooldowns, etc.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Let's say the Ai has the Projectile_Fireball skill and go through the steps that the Ai takes to calculate the scores for possible actions:&lt;br /&gt;
# Check first: can we cast this skill? Skill conditions, cooldowns, difficulty mode, statuses preventing us from casting, etc. No need to calculate anything if we can't even cast.&lt;br /&gt;
# Find interesting targets to cast the skill on. Ai checks for characters, items (barrels could explode), and positions on the terrain. We run a simulation on each of these targets to see what effect it will have. This simulation on every target gives us damage scores, health scores, buff scores, etc. for every object we hit (the &amp;lt;i&amp;gt;ActionScore&amp;lt;/i&amp;gt;).&lt;br /&gt;
# Calculate the 'final' score of every &amp;lt;i&amp;gt;Action&amp;lt;/i&amp;gt; (at this point this is purely the skill being casted). The different scores are thrown together, affected by a whole bunch of target specific [[CombatAi_Archetypes_And_Modifiers|modifiers]], and balanced so that we end up with one single value for the score.&lt;br /&gt;
# Only the interesting &amp;lt;i&amp;gt;Actions&amp;lt;/i&amp;gt;, based on the 'final' score in the previous step, will be investigated further. We start to find a good position to cast from. The character might not be able to cast from it's current position (out of sight, out of range, etc.), or the character might not like its current position due to nearby enemies. &amp;lt;i&amp;gt;PositionScores&amp;lt;/i&amp;gt; will be calculated and we hope to find a good position for every action.&lt;br /&gt;
# After finding a good position we start calculating the &amp;lt;i&amp;gt;MovementScore&amp;lt;/i&amp;gt;. Does the character need to walk through a fire surface? Could we jump instead of walking? Do I have enough AP to even walk there this turn?&lt;br /&gt;
# In the end only one &amp;lt;i&amp;gt;Action&amp;lt;/i&amp;gt; will be on top. We have a skill (or default attack), a target, a position, and even the path has been checked. The action will be fetched from script and executed.&lt;br /&gt;
# What if we don't have any &amp;lt;i&amp;gt;Action&amp;lt;/i&amp;gt; that is deemed positive? That's when the fallback action kicks in. The fallback action tries to find a good position for the character and walks there.&lt;br /&gt;
&lt;br /&gt;
=Guiding Ai=&lt;br /&gt;
There are multiple ways to guide Ai into certain actions or behaviour. Skill conditions, archetypes and modifiers, and AiHints are all supported by Ai and are used by Ai during the score calculation. Any other way to guide Ai might result in incorrect behaviour (but you're welcome to try).&lt;br /&gt;
===Skill conditions===&lt;br /&gt;
[[File:CombatAi_SkillConditions.PNG|none]]&lt;br /&gt;
&amp;lt;sub&amp;gt;The skill conditions panel you get when adding a skill to a character&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The skill conditions panel can be used to set conditions for casting a skill (e.g. prohibit using a skill if the caster is still full health), set flags for the skill, or apply a simple score modifier.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AiFlags: AiFlags can be set on a [[#AiFlags|skill on a global level]], but they can also be set in the skill conditions. A list of the flags and what they do can be found [[CombatAi_AiFlags|here]]. It is possible to use multiple flags by concatenating them with a semicolon (';')&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MinimumImpact: The skill should impact at least this amount of characters in a &amp;lt;i&amp;gt;positive&amp;lt;/i&amp;gt; way, or else it can not be used. Positive in this case means it's benefitial for the caster: e.g. healing an ally, or damaging an enemy&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnlyCastOnSelf: The skill can only be cast on self. Can be used, for example, to force a character to only use the bless skill on itself&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;StartRound: The skill can only be used from this round. Everything below and including 1 means it can be used from the start&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;i&amp;gt;HasNoMagicalArmor&amp;lt;/i&amp;gt;: The skill can only be used if the source/target has no magical armor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;i&amp;gt;HasNoPhysicalArmor&amp;lt;/i&amp;gt;: The skill can only be used if the source/target has no physical armor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;i&amp;gt;MaximumHealthPercentage&amp;lt;/i&amp;gt;: The skill can only be used if the source/target has a health percentage lower or equal to this value&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;i&amp;gt;MinimumHealthPercentage&amp;lt;/i&amp;gt;: The skill can only be used if the source/target has a health percentage higher or equal to this value&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;i&amp;gt;Tags&amp;lt;/i&amp;gt;: The skill can only be used if the source/target has these tags&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
You may have noticed that the italic conditions in above list are listed twice in the skill conditions. It's possible to set these for both the source (the caster of the skill) and the target of the skill (if the skill has a direct target).&lt;br /&gt;
&amp;lt;b&amp;gt;Tip&amp;lt;/b&amp;gt;: Tags can be used for any skill condition that is not part of the standard skill conditions. You can create a custom tag and a script that assigns/removes a tag based on scripted conditions.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The last skill conditions are the difficulty modes. These are simple checkboxes to enable/disable a skill on a certain difficulty. The very last thing on the list, the score modifier, is exactly what it says it is: a score modifier. If you want the Ai to use a skill more often, even if it's not that good at all, you could increase the score modifier. You could also use to, for example, force Ai to cast a certain skill after an event: set a high score modifier and set a source tag condition for a tag that you apply via script. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Archetypes and modifiers===&lt;br /&gt;
[[File:CombatAi_Archetype.PNG|none]]&lt;br /&gt;
&amp;lt;sub&amp;gt;The EXTERN script variable that sets the archetype&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The EXTERN Archetype parameter in the DefaultBehaviour script allows you to set the archetype of a character. It can also be set using the &amp;lt;i&amp;gt;CharacterSetArchetype&amp;lt;/i&amp;gt; call in script. Archetypes are linked to a text file that contain modifiers for Ai. These modifiers are used when calculating the scores for all the skills and are delicately balanced. And you can change them.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
You can find the archetype files in: &amp;lt;i&amp;gt;Public/YourMod/AI/Archetypes/&amp;lt;/i&amp;gt; (if the directory doesn't exist you can just create it yourself). All .txt files in the Archetypes folder will be shown as options in script. The archetypes in this folder are used for Explorer and Classic mode. If you want to override modifiers from archetypes for Tactician and Hardcore mode you can place these in a folder called &amp;lt;i&amp;gt;TACTICIAN&amp;lt;/i&amp;gt; inside the &amp;lt;i&amp;gt;Archetypes&amp;lt;/i&amp;gt; folder. So, let's say we want to override a modifier in the base archetype (an already existing archetype in D:OS2). We'd have to create a new text file called base.txt and give it the following content:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// We want self-healing to be more common in our mod -&amp;gt; yes, comments work in these files!&lt;br /&gt;
MULTIPLIER_HEAL_SELF_POS          10.0 // This will override the modifier MULTIPLIER_HEAL_SELF_POS located in the D:OS2 base archetype with our own value of 10.0. Only int and float values are allowed in these files&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Or we'd like to create a completely new archetype called myFirstArchetype. We'd have to create a text file called myFirstArchetype.txt and give it the following content:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// We copy over all modifiers from the base archetype because we don't want to specify every single modifier&lt;br /&gt;
USING base&lt;br /&gt;
&lt;br /&gt;
MULTIPLIER_HEAL_SELF_POS          10.0 // Because I'm unoriginal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you place a .txt file containing the above snippet in your &amp;lt;i&amp;gt;Archetypes&amp;lt;/i&amp;gt; folder you'll have the archetype myFirstArchetype showing up in script.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The only information you're still missing now is a list of all the modifiers and archetypes and what they do. You can find that list right [[CombatAi_Archetypes_And_Modifiers|here]].&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===AiHints===&lt;br /&gt;
[[File:CombatAi_AiHints.PNG|none]]&lt;br /&gt;
&amp;lt;sub&amp;gt;The EXTERN script variables AiHints and StayInAiHints&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can assign a tag to the EXTERN AiHint parameter in the DefaultBehaviour script for the Ai to use. Ai will find AiHintAreaTriggers with this tag and use these during the calculation. The AiHintAreaTriggers with the specified tag (referred to ai AiHints from now on) are areas where the Ai would &amp;lt;i&amp;gt;prefer&amp;lt;/i&amp;gt; to stand when attacking. You could use this when you, for example, want a ranger to prefer standing on some platforms in the back instead of on the lower ground. Keep in mind that it does &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; force the Ai to stay in the AiHint. For that you also need to enable the &amp;lt;i&amp;gt;StayInAiHints&amp;lt;/i&amp;gt; parameter in the same DefaultBehaviour script. This forces the Ai to always stand in the AiHint, even if it blocks it from attacking. There's only 2 exceptions to this rule:&lt;br /&gt;
# All of the AiHints are filled with dangerous surfaces (all of them full of fire for example)&lt;br /&gt;
# The character has been moved outside of the AiHint (started outside of it or has been teleported for example) and is not able to attack anyone from any AiHints. In this case it will try to attack anyone without moving.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Tags===&lt;br /&gt;
Sometimes you'd like to make sure Ai prefers a target, or doesn't, or even totally ignores a target. There are some tags you can set on objects to make it work:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AI_PREFERRED_TARGET: boosts any score on this target. This will not only increase being attacked by enemies, but also being healed by allies&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AI_UNPREFERRED_TARGET: decreases any score on this target. This will not only decrease being attacked by enemies, but also being healed by allies&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AI_IGNORED_TARGET: completely ignored by Ai. Damage doesn't matter, healing doesn't matter, killing doesn't matter.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Overriding Ai=&lt;br /&gt;
It's strongly advised to not override the Ai, but we understand that it's needed from time to time. Below are some supported ways to override the Ai and some tips and tricks you might want to use.&lt;br /&gt;
===Skills===&lt;br /&gt;
The skills in [[skill_creation|SkillData]] have several properties that affect the Ai in a special way.&lt;br /&gt;
====Skill overrides====&lt;br /&gt;
Several skill types have the possibility to be overwritten with the score of a specified &amp;lt;b&amp;gt;Target&amp;lt;/b&amp;gt; skill (can not be of any other type) in the AiCalculationSkillOverride column. If a skill has an override it will calculate the score by simulating with the Target skill instead of the original skill. This can be used to make the Ai think a skill will do something that it won't actually do, but some skills actually need to have an override skill:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Summon skills: Ai does not know what kind of impact a summon will have. The AiCalculationSkillOverride skill will be used to calculate the impact of the summon.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Projectile skills with a filled in SpawnObject: Just like with Summon skills Ai does not know what kind of impact a summon will have. The AiCalculationSkillOverride skill will be used to calculate the impact of the summon.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Target skills: The AiCalculationSkillOverride skill will be used to calculate the score on the target.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rain and Shout skills: The AiCalculationSkillOverride skill will be used on all targets that would get hit by the original skill to calculate the score on the target.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Next to Summon and Projectile skills it is also supported by Shout and Target skills.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The override skill can be fairly simple, just like the Target_DummyTargetSkill that we use in a couple of cases. However, it's advised to make the override skill as accurate as possible. E.g.: for a Summon skill that spawns a summon that does only fire damage you shouldn't use an override skill that only does physical damage. Ai might then cast the summon in the middle of a group of enemies that are all immune to fire damage. Use a target skill that represents the actual summon as accurate as you possibly can.&lt;br /&gt;
&lt;br /&gt;
====AiFlags====&lt;br /&gt;
The AiFlags column is used to set flags specifically for Ai. A list of the flags and what they do can be found [[CombatAi_AiFlags|here]]. It is possible to use multiple flags by concatenating them with a semicolon (';').&lt;br /&gt;
===Scripting===&lt;br /&gt;
Overriding Ai with scripting is relatively easy: make sure the priority of your REACTION is higher than 60 (higher than all REACTIONs related to Ai) and the Ai won't execute anymore.&lt;br /&gt;
&lt;br /&gt;
=Unsupported properties=&lt;br /&gt;
Some skill and status properties are not supported for Ai. If it's not supported Ai will ignore the property altogether and it might do unexpected things. Try to avoid these properties for Ai and use the &amp;lt;i&amp;gt;CanNotUse&amp;lt;/i&amp;gt; [[#AiFlags|AiFlag]] to prevent the Ai from casting any skills with these properties.&lt;br /&gt;
===Skills===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Chaos damage type (random damage type)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Spawning multiple summons&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Zone skills with a push distance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Shout skills with a push distance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Skills with the Sabotage property&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Skills with the Equalize property&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Teleportation skills with the SwapSurfaces property&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Skills with the CreateConeSurface property&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Projectile skills with an angle and multiple targets&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Statuses===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Surface absorption boostst&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Adding skills&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The statuses STANCE, SMELLY, CLEAN, DARK_AVENGER, REMORSE, UNHEALABLE, CHANNELING, INFUSED, LINGERING_WOUNDS, SPIRIT_VISION, FORCE_MOVE, DEMONIC_BARGAIN, FLOATING, CHALLENGE, and EXTRA_TURN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Consume statuses that set weapon overrides&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Consume statuses that reset cooldowns&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Character_and_Item_Script_Triggers,_Calls,_and_Queries&amp;diff=5825</id>
		<title>Character and Item Script Triggers, Calls, and Queries</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Character_and_Item_Script_Triggers,_Calls,_and_Queries&amp;diff=5825"/>
		<updated>2018-03-02T12:02:07Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: /* EVENTS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of almost every character and item script event trigger, call, and query. An event is what triggers the script, and always begin with ''On''. Queries provide information and are always inside an ''IF'' or ''CHECK.'' Calls are actions that are always after THEN.&lt;br /&gt;
&lt;br /&gt;
CharScript/ItemScript Functions&lt;br /&gt;
&lt;br /&gt;
== CALLS ==&lt;br /&gt;
&lt;br /&gt;
'''Set(OUT OBJECT:variable, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Set the value of a variable&lt;br /&gt;
&lt;br /&gt;
'''SetVar(CHARACTER|ITEM:object, FIXEDSTRING:variableName, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Set the value of a global variable&lt;br /&gt;
&lt;br /&gt;
'''Cast(OUT OBJECT variable, OBJECT value)'''&lt;br /&gt;
&lt;br /&gt;
Casts the value to the variable&lt;br /&gt;
&lt;br /&gt;
'''Print(OUT STRING:output, STRING:text)'''&lt;br /&gt;
&lt;br /&gt;
Prints the text to the output with possible parameters: [1], [2], ...&lt;br /&gt;
&lt;br /&gt;
'''Add(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT|FLOAT3:value)'''&lt;br /&gt;
&lt;br /&gt;
Adds both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Subtract(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT|FLOAT3:value)'''&lt;br /&gt;
&lt;br /&gt;
Subtracts both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Multiply(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT:value)'''&lt;br /&gt;
&lt;br /&gt;
Multiplies both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Divide(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT:value)'''&lt;br /&gt;
&lt;br /&gt;
Divides both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Abs(INOUT INT|FLOAT:variable)'''&lt;br /&gt;
&lt;br /&gt;
Takes the absolute value of a variable&lt;br /&gt;
&lt;br /&gt;
'''Clamp(INOUT INT|FLOAT:variable, INT|FLOAT:min, INT|FLOAT:max)'''&lt;br /&gt;
&lt;br /&gt;
Clamps a variable between min and max&lt;br /&gt;
&lt;br /&gt;
'''GetRandom(OUT OBJECT:variable, OBJECT:value, OBJECT:value, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Fills in the variable with random one of the values.&lt;br /&gt;
&lt;br /&gt;
'''GetWeightedRandom(OUT OBJECT:variable, OBJECT:value, INT|FLOAT:weight, ...)'''&lt;br /&gt;
&lt;br /&gt;
Gets a weighted random of the given values!&lt;br /&gt;
&lt;br /&gt;
'''GetRandomBetween(OUT INT|FLOAT:variable, INT|FLOAT:min, INT|FLOAT:max)'''&lt;br /&gt;
&lt;br /&gt;
Gets a random value between min and max (both included)&lt;br /&gt;
&lt;br /&gt;
'''GetRandomPositionInTrigger(OUT FLOAT3:variable, TRIGGER:areaTrigger)'''&lt;br /&gt;
&lt;br /&gt;
Get a random position in a trigger area&lt;br /&gt;
&lt;br /&gt;
'''GetElement(OUT OBJECT:variable, INT:index, OBJECT:value, OBJECT:value, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Fills in the variable with the index one of the values (starting from 0)&lt;br /&gt;
&lt;br /&gt;
'''SetPriority(FIXEDSTRING:reactionName, INT:priority)'''&lt;br /&gt;
&lt;br /&gt;
Changes the priority of a reaction. Priority 0 and below are not executed!&lt;br /&gt;
&lt;br /&gt;
'''DelayReaction(FIXEDSTRING:reactionName, FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
The reaction will not be chosen for the specified time&lt;br /&gt;
&lt;br /&gt;
'''SetScriptFrame(CHARACTER:character, FIXEDSTRING:frame)'''&lt;br /&gt;
&lt;br /&gt;
Sets the scriptframe on the character.&lt;br /&gt;
&lt;br /&gt;
'''ClearScriptFrame(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Clears the scriptframe on the character.&lt;br /&gt;
&lt;br /&gt;
'''Goto(FIXEDSTRING:labelName)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to the label. Two label names are built-in: &amp;quot;Start&amp;quot; for the first instruction of the reaction, and &amp;quot;End&amp;quot; for the last one.&lt;br /&gt;
&lt;br /&gt;
'''GotoIfEqual(OBJECT:variable, OBJECT:value, FIXEDSTRING:labelName)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to the label if the 2 objects are equal&lt;br /&gt;
&lt;br /&gt;
'''GotoRand(FIXEDSTRING:labelName, FIXEDSTRING:labelName, FIXEDSTRING:labelName, FIXEDSTRING:labelName, FIXEDSTRING:labelName)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to a random label in the list&lt;br /&gt;
&lt;br /&gt;
'''CreatePuddleAt(GAMEOBJECT|FLOAT3:target, SURFACE:type, INT:cellAmountMin, INT:cellAmountMax, INT:growAmountMin, INT:growAmountMax, )'''&lt;br /&gt;
&lt;br /&gt;
Spawn a puddle at the target's position for a certain lifetime (in turns)&lt;br /&gt;
&lt;br /&gt;
'''CreateSurfaceAt(GAMEOBJECT|FLOAT3:target, SURFACE:type, FLOAT:radius, INT:lifeTime[, GAMEOBJECT:owner])'''&lt;br /&gt;
&lt;br /&gt;
Spawn a surface at the target's position for a certain lifetime (in turns)&lt;br /&gt;
&lt;br /&gt;
'''CreateSurfaceInPolygon(GAMEOBJECT:owner, SURFACE:type, FLOAT:duration, FLOAT:growTimer, INT:growStep, GAMEOBJECT|FLOAT3:point1, GAMEOBJECT|FLOAT3:point2, GAMEOBJECT|FLOAT3:point3, ...)'''&lt;br /&gt;
&lt;br /&gt;
Spawn a polygon surface at the target's position. Grows &amp;lt;growStep&amp;gt; every &amp;lt;growTimer&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CreateSurfaceInAreaTrigger(GAMEOBJECT:owner, SURFACE:type, FLOAT:duration, FLOAT:growTimer, INT:growStep, TRIGGER:areaTrigger)'''&lt;br /&gt;
&lt;br /&gt;
Spawn a surface within &amp;lt;areaTrigger&amp;gt;. Grows &amp;lt;growStep&amp;gt; every &amp;lt;growTimer&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CreateConeSurfaceAt(GAMEOBJECT|FLOAT3:start, GAMEOBJECT|FLOAT3:target, SURFACE:type, FLOAT:radius, FLOAT:angle, FLOAT:duration)'''&lt;br /&gt;
&lt;br /&gt;
Spawn a Cone surface at the target's position&lt;br /&gt;
&lt;br /&gt;
'''PlayEffectAt(GAMEOBJECT|FLOAT3:target, STRING:effectName)'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect at the target's position&lt;br /&gt;
&lt;br /&gt;
'''PlayLoopEffectAt(OUT INT64:effectHandle, GAMEOBJECT|FLOAT3:target, STRING:effectName)'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect at the target's position&lt;br /&gt;
&lt;br /&gt;
'''ExplodeAt(GAMEOBJECT|FLOAT3:target, SKILL:projectileSkill, [INT:casterLevel=-1, CHARACTER|ITEM:cause])'''&lt;br /&gt;
&lt;br /&gt;
Trigger an explosion of a projectile skill at the target's position. The cause will trigger NPC behavior as if the cause casted the projectile&lt;br /&gt;
&lt;br /&gt;
'''DisplayText(CHARACTER|ITEM:target, FIXEDSTRING:text, FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
Displays text above the character/item for a certain amount of time. It will replace the current text, including dialogtext&lt;br /&gt;
&lt;br /&gt;
'''DisplayCombatInfoText(CHARACTER|ITEM:target, FIXEDSTRING:text, FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
Displays text above the character/item for a certain amount of time. It will replace the current text, including dialogtext&lt;br /&gt;
&lt;br /&gt;
'''StatusText(CHARACTER|ITEM:target, FIXEDSTRING:text)'''&lt;br /&gt;
&lt;br /&gt;
Adds statustext above the character/item for a short amount of time. Will not replace texts or dialogtexts&lt;br /&gt;
&lt;br /&gt;
'''DebugText(CHARACTER|ITEM:target, STRING:text)'''&lt;br /&gt;
&lt;br /&gt;
Adds debugtext above the character/item for a short amount of time.&lt;br /&gt;
&lt;br /&gt;
'''CombatLogText(CHARACTER|ITEM:target, FIXEDSTRING:text, INT:filterID, INT:broadcastID)'''&lt;br /&gt;
&lt;br /&gt;
Adds combatlog text inside the combat log window. Color-/SizeFormatting should already be applied, if not color and size of the string will be NORMAL. filterID determines what filter shows/hides the text. broadcastID determines who will be able to see the message (0 hearingrange. 1 party. 2 all)&lt;br /&gt;
&lt;br /&gt;
'''Log(STRING:text, ...)'''&lt;br /&gt;
&lt;br /&gt;
Log's the the scriptlog. (for debugging purposes)&lt;br /&gt;
&lt;br /&gt;
'''Output(STRING:text, ...)'''&lt;br /&gt;
&lt;br /&gt;
Pass text with optional parameters to the output panel (e.g. Output(&amp;quot;An int [1]&amp;quot;, INT:10))&lt;br /&gt;
&lt;br /&gt;
'''Assert(STRING:text, ...)'''&lt;br /&gt;
&lt;br /&gt;
Pass text with optional parameters to display as an assert message (e.g. Assert(&amp;quot;This number is wrong: [1]&amp;quot;, INT:666))&lt;br /&gt;
&lt;br /&gt;
'''Label(FIXEDSTRING:name)'''&lt;br /&gt;
&lt;br /&gt;
Marks this line as a label where Goto actions can jump to&lt;br /&gt;
&lt;br /&gt;
'''StartTimer(FIXEDSTRING:timerName, FLOAT:timeInSeconds, INT:repeatCount)'''&lt;br /&gt;
&lt;br /&gt;
Start a timer which will throw the timer event. Set repeatcount &amp;lt; 0 for a permanent timer.&lt;br /&gt;
&lt;br /&gt;
'''StopTimer(FIXEDSTRING:timerName)'''&lt;br /&gt;
&lt;br /&gt;
Stop a timer which will throw the timer event&lt;br /&gt;
&lt;br /&gt;
'''DialogStart(OUT INT:instanceId, STRING:dialog, CHARACTER|ITEM:target, CHARACTER|ITEM:target, CHARACTER|ITEM:target, CHARACTER|ITEM:target)'''&lt;br /&gt;
&lt;br /&gt;
Start a dialog between the targets. You can specify fewer targets than the maximum number.&lt;br /&gt;
&lt;br /&gt;
{{warning|Starting a dialog from behaviour script will always start it as an [[Dialog_editor#Automated|Automated Dialog]]. Interactive dialogs can only be started from [[Osiris]].}}&lt;br /&gt;
&lt;br /&gt;
'''DialogRequestStop(CHARACTER|ITEM:speaker, STRING:dialog)'''&lt;br /&gt;
&lt;br /&gt;
Stops a certain dialog on a certain speaker&lt;br /&gt;
&lt;br /&gt;
'''Check(-)'''&lt;br /&gt;
&lt;br /&gt;
Reevaluate the conditions in the CHECK section of this reaction&lt;br /&gt;
&lt;br /&gt;
'''Reset(-)'''&lt;br /&gt;
&lt;br /&gt;
Resets the current reaction. It will start from the beginning again&lt;br /&gt;
&lt;br /&gt;
'''Interrupt(FIXEDSTRING:reactionName)'''&lt;br /&gt;
&lt;br /&gt;
Interrupt the reaction.&lt;br /&gt;
&lt;br /&gt;
'''GlobalSetEvent(FIXEDSTRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Sets a global event. Scripts and Story can catch it.&lt;br /&gt;
&lt;br /&gt;
'''GlobalClearEvent(FIXEDSTRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Clears a global event. Scripts and Story can catch it.&lt;br /&gt;
&lt;br /&gt;
'''StopLoopEffect(INT64:fxHandle)'''&lt;br /&gt;
&lt;br /&gt;
Stops a looping effect&lt;br /&gt;
&lt;br /&gt;
'''IterateItems(FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each item. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateItemsNear(GAMEOBJECT:source, FLOAT:radius, FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each item in range. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateItemsOnObject(CHARACTER|ITEM:source, FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each item standing on the source. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateParty(FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, CHARACTER:partyMember, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each member of all parties. If you pass a party member only members of that party will be considered. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharacters(FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharactersNear(GAMEOBJECT:source, FLOAT:radius, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character in range. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharactersOnObject(CHARACTER|ITEM:source, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
Launch iterate event for each character standing on the source. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharactersInCombat(CHARACTER|ITEM:source, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character in combat with the source. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateHostilesFor(CHARACTER:source, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character who is targetting the source. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''SpawnCharacter(OUT CHARACTER:result, CHARACTERTEMPLATE:rootTemplate, GAMEOBJECT|FLOAT3:position, INT:playSpawn, [INT:isSummon=0, CHARACTER:summonOwner=null, INT:overrideLevel=-1])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a character&lt;br /&gt;
&lt;br /&gt;
'''SpawnItem(ITEMTEMPLATE:rootTemplate,GAMEOBJECT|FLOAT3:position, OUT ITEM:result)'''&lt;br /&gt;
&lt;br /&gt;
Spawns an item&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalProjectile(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,FLOAT3:direction,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at the source (with offset, can be null) shooting at the target&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalProjectileAt(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,GAMEOBJECT|FLOAT3:target,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at the source (with offset, can be null) shooting at the target&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldProjectile(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,FLOAT3:direction,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at worldPos shooting at the target. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldProjectileAt(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,GAMEOBJECT|FLOAT3:target,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at worldPos shooting at the target. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalCone(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,FLOAT3:direction,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from source (with offset, can be null) in a direction&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalConeAt(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,GAMEOBJECT|FLOAT3:target,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from source (with offset, can be null) at the target&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldCone(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,FLOAT3:direction,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from worldPos in a direction. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldConeAt(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,GAMEOBJECT|FLOAT3:target,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from worldPos at the target. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''SetVisible(CHARACTER|ITEM:object, INT:visible)'''&lt;br /&gt;
&lt;br /&gt;
Sets a character or item visible or not.&lt;br /&gt;
&lt;br /&gt;
'''RotateY(INOUT FLOAT3:vector, FLOAT:degrees)'''&lt;br /&gt;
&lt;br /&gt;
Rotate the vector around the Y-axis for a certain angle (in degrees)&lt;br /&gt;
&lt;br /&gt;
'''SetHealth(CHARACTER|ITEM:target, FLOAT:percent)'''&lt;br /&gt;
&lt;br /&gt;
Set a characters or items health on the given percentage. (percentage between 0 and 1)&lt;br /&gt;
&lt;br /&gt;
'''PlaySound(CHARACTER|ITEM:target, STRING:soundEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a sound event at the target&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicForEveryone(STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on all the clients&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicOnCharacter(CHARACTER:target, STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on a character for all peers (3D)&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicForPeer(CHARACTER:target, STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on the peer of the character&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicForPeerWithInstrument(CHARACTER:target, CHARACTER:charInstrument, STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on the peer of the character concated with _INSTRUMENT&lt;br /&gt;
&lt;br /&gt;
'''SetX(INOUT FLOAT3:vector, FLOAT|INT:value)'''&lt;br /&gt;
&lt;br /&gt;
Sets the X component of the FLOAT3&lt;br /&gt;
&lt;br /&gt;
'''SetY(INOUT FLOAT3:vector, FLOAT|INT:value)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Y component of the FLOAT3&lt;br /&gt;
&lt;br /&gt;
'''SetZ(INOUT FLOAT3:vector, FLOAT|INT:value)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Z component of the FLOAT3&lt;br /&gt;
&lt;br /&gt;
'''SetAtmosphere(FIXEDSTRING:atmosphereTriggerUUID, FIXEDSTRING:atmosphere)'''&lt;br /&gt;
&lt;br /&gt;
Changes the atmosphere of the trigger&lt;br /&gt;
&lt;br /&gt;
'''ResetAtmosphere(FIXEDSTRING:atmosphereTriggerUUID)'''&lt;br /&gt;
&lt;br /&gt;
Resets the atmosphere of the trigger&lt;br /&gt;
&lt;br /&gt;
'''AddStatusInfluence(CHARACTER|ITEM:object, STATUS:statusId, FLOAT:strength, [FIXEDSTRING:extraData=&amp;quot;&amp;quot;], [INT:isWeather=1], [INT:force=1])'''&lt;br /&gt;
&lt;br /&gt;
Adds the status influence strength on the object.&lt;br /&gt;
&lt;br /&gt;
'''RemoveStatusInfluence(CHARACTER|ITEM:object, STATUS:statusId, FLOAT:strength, [FIXEDSTRING:extraData=&amp;quot;&amp;quot;], [INT:isWeather=1])'''&lt;br /&gt;
&lt;br /&gt;
Removes the status influence strength on the object.&lt;br /&gt;
&lt;br /&gt;
'''AddTemporaryStatusInfluence(CHARACTER|ITEM:source, CHARACTER|ITEM:object, STATUS:statusId, FLOAT:strength, [FIXEDSTRING:extraData=&amp;quot;&amp;quot;], [INT:isWeather=1])'''&lt;br /&gt;
&lt;br /&gt;
Adds a temporary status influence strength on the object.. It will be gone in a few seconds if it's not set again&lt;br /&gt;
&lt;br /&gt;
'''CallFunction(FIXEDSTRING:functionName)'''&lt;br /&gt;
&lt;br /&gt;
Calls a function with the ID&lt;br /&gt;
&lt;br /&gt;
'''SetMaterial(CHARACTER|ITEM:object, FIXEDSTRING:materialUUID, INT:duration, INT:applyOnBody, INT:applyOnArmor, INT:applyOnWeapon[)'''&lt;br /&gt;
&lt;br /&gt;
Changes the material of the object for a set time (in turns), -1 is infinite. applyNormalMap: Copy the original materials normal map&lt;br /&gt;
&lt;br /&gt;
'''TeleportTo(CHARACTER|ITEM:object, GAMEOBJECT|FLOAT3:target, [INT:Force=0])'''&lt;br /&gt;
&lt;br /&gt;
Teleport object to or near the target&lt;br /&gt;
&lt;br /&gt;
'''Transform(CHARACTER|ITEM:object, CHARACTERTEMPLATE|ITEMTEMPLATE:root [, FIXEDSTRING:fx, INT:replaceScripts=1, OUT FLOAT:currentHP])'''&lt;br /&gt;
&lt;br /&gt;
Transforms &amp;lt;object&amp;gt; using &amp;lt;root&amp;gt;, returns &amp;lt;currentHP&amp;gt;, plays &amp;lt;fx&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''SaveGame(FIXEDSTRING:saveGameName)'''&lt;br /&gt;
&lt;br /&gt;
Save the savegame with name &amp;lt;saveGameName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LoadGame(FIXEDSTRING:saveGameName)'''&lt;br /&gt;
&lt;br /&gt;
Load the savegame with name &amp;lt;saveGameName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LoadLevel(FIXEDSTRING:levelName)'''&lt;br /&gt;
&lt;br /&gt;
Load the level with name &amp;lt;levelName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''KillCombat(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Kill all the enemies in the combat which contains &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SetTag(CHARACTER|ITEM:object, FIXEDSTRING:tag)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Tag on the Object&lt;br /&gt;
&lt;br /&gt;
'''ClearTag(CHARACTER|ITEM:object, FIXEDSTRING:tag)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Tag on the Object&lt;br /&gt;
&lt;br /&gt;
'''SetGlobalFlag(FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Global Flag&lt;br /&gt;
&lt;br /&gt;
'''ClearGlobalFlag(FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Global Flag&lt;br /&gt;
&lt;br /&gt;
'''SetFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Flag on the Object&lt;br /&gt;
&lt;br /&gt;
'''ClearFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Flag on the Object&lt;br /&gt;
&lt;br /&gt;
'''SetUserFlag(CHARACTER:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Flag on the user's characters&lt;br /&gt;
&lt;br /&gt;
'''ClearUserFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Flag on the user's characters&lt;br /&gt;
&lt;br /&gt;
'''SetPartyFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Flag on the party's characters&lt;br /&gt;
&lt;br /&gt;
'''ClearPartyFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Flag on the party's characters&lt;br /&gt;
&lt;br /&gt;
'''StartVoiceBark(STRING:barkName, CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Start a voicebark on character&lt;br /&gt;
&lt;br /&gt;
'''ConfrontationDone(INT: CrimeID, CHARACTER:lead, CHARACTER:criminal, ...)'''&lt;br /&gt;
&lt;br /&gt;
Resolve the crime with id CrimeID for the specified criminals&lt;br /&gt;
&lt;br /&gt;
'''CrimesceneInvestigationDone(CHARACTER:investigator)'''&lt;br /&gt;
&lt;br /&gt;
Crimescene is considered investigated by this NPC, start looking for culprits&lt;br /&gt;
&lt;br /&gt;
'''ListAdd(LIST&amp;lt;OBJECT&amp;gt;:list, OBJECT:entry)'''&lt;br /&gt;
&lt;br /&gt;
Add &amp;lt;entry&amp;gt; at the back of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ListRemove(LIST&amp;lt;OBJECT&amp;gt;:list, INT:index)'''&lt;br /&gt;
&lt;br /&gt;
Remove the entry at &amp;lt;index&amp;gt; of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ListSet(LIST&amp;lt;OBJECT&amp;gt;:list, INT:index, OBJECT:entry)'''&lt;br /&gt;
&lt;br /&gt;
Set the entry at &amp;lt;index&amp;gt; of &amp;lt;list&amp;gt; to &amp;lt;entry&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ListClear(LIST&amp;lt;OBJECT&amp;gt;:list)'''&lt;br /&gt;
&lt;br /&gt;
Remove all entries of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''EndTurn(CHARACTER|ITEM:Target)'''&lt;br /&gt;
&lt;br /&gt;
Ends the object's current turn&lt;br /&gt;
&lt;br /&gt;
'''SetCanFight(CHARACTER|ITEM:entity, INT:enabled[, INT:wholeGroup=0])'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the entity can fight. Optional for the whole group&lt;br /&gt;
&lt;br /&gt;
'''SetCanJoinCombat(CHARACTER|ITEM:entity, INT:enabled[, INT:wholeGroup=0])'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the entity can join combats. Optional for the whole group&lt;br /&gt;
&lt;br /&gt;
'''SetIsBoss(CHARACTER|ITEM:entity, INT:enabled)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the entity is a boss.&lt;br /&gt;
&lt;br /&gt;
'''GetAIHintTriggers(OUT LIST&amp;lt;TRIGGER&amp;gt;:triggers[, [LIST]FIXEDSTRING:tags, INT:needsAllTags = -1)'''&lt;br /&gt;
&lt;br /&gt;
Returns all AIHintAreaTriggers in &amp;lt;triggers&amp;gt;. Uses contraints if set.&lt;br /&gt;
&lt;br /&gt;
'''SetCombatTimeout(CHARACTER|ITEM:entity, FLOAT:timer)'''&lt;br /&gt;
&lt;br /&gt;
Overwrites the entity's combat timeout check.&lt;br /&gt;
&lt;br /&gt;
'''ResetCombatTimeout(CHARACTER|ITEM:entity)'''&lt;br /&gt;
&lt;br /&gt;
Resets the entity's combat timeout check.&lt;br /&gt;
&lt;br /&gt;
'''EnterCombat(CHARACTER|ITEM:source, CHARACTER|ITEM:target)'''&lt;br /&gt;
&lt;br /&gt;
Enters combat with target&lt;br /&gt;
&lt;br /&gt;
'''LeaveCombat(CHARACTER|ITEM:source)'''&lt;br /&gt;
&lt;br /&gt;
Leaves the combat&lt;br /&gt;
&lt;br /&gt;
'''SetFaction(CHARACTER|ITEM:target, FIXEDSTRING:faction)'''&lt;br /&gt;
&lt;br /&gt;
Changes the faction of a character or item&lt;br /&gt;
&lt;br /&gt;
'''SetInvulnerable(CHARACTER|ITEM:target, INT:bool)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character or item invulnerable or not. (Allow damage)&lt;br /&gt;
&lt;br /&gt;
'''JumpToTurn(CHARACTER|ITEM:Target)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to targets turn (ends the current turn)&lt;br /&gt;
&lt;br /&gt;
'''Sleep(FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
Sleeps for a certain amount of time&lt;br /&gt;
&lt;br /&gt;
'''CharacterAttack(CHARACTER|ITEM|FLOAT3:target [,INT:alwaysHit])'''&lt;br /&gt;
&lt;br /&gt;
Moves in weapon range and attacks the target&lt;br /&gt;
&lt;br /&gt;
'''CharacterAttackWithoutMove(CHARACTER|ITEM|FLOAT3:target [,INT:alwaysHit])'''&lt;br /&gt;
&lt;br /&gt;
Attacks the target without checking weaponranges and without moving&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveTo(GAMEOBJECT|FLOAT3:target, [INT:running=0, INT:shouldArrive=0, INT:longPath=0, FLOAT:minDistance=1.5, FLOAT:maxDistance=minDistance+2.5])'''&lt;br /&gt;
&lt;br /&gt;
Move to the target. Set shouldArrive to 1 if you want a guaranteed move. (teleports on fail) &lt;br /&gt;
&lt;br /&gt;
'''CharacterAiMove(FLOAT3:target, CHARACTER:targetCharacter, ITEM:targetItem)'''&lt;br /&gt;
&lt;br /&gt;
Moves to the target, calculated by the AI. Should only be used with results from the AI!&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveInRange(GAMEOBJECT|FLOAT3:target, FLOAT:rangeMin, FLOAT:rangeMax, INT:running, [LIST&amp;lt;TRIGGER&amp;gt;:hintTriggers=null, INT:mustBeInTrigger=0])'''&lt;br /&gt;
&lt;br /&gt;
Move within a certain range of target. Optionally pass hinttriggers in which the result is preferred/necessary.&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveInWeaponRange(GAMEOBJECT|FLOAT3:target, INT:running, [LIST&amp;lt;TRIGGER&amp;gt;:hintTriggers=null, INT:mustBeInTrigger=0])'''&lt;br /&gt;
&lt;br /&gt;
Move within weapon range of target. Optionally pass hinttriggers in which the result is preferred/necessary.&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveInSkillRange(GAMEOBJECT|FLOAT3:target, SKILL:skill, INT:running, [LIST&amp;lt;TRIGGER&amp;gt;:hintTriggers=null, INT:mustBeInTrigger=0])'''&lt;br /&gt;
&lt;br /&gt;
Move within skill range of target. Optionally pass hinttriggers in which the result is preferred/necessary.&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveOutOfSight(FLOAT:angle)'''&lt;br /&gt;
&lt;br /&gt;
Move out of screen&lt;br /&gt;
&lt;br /&gt;
'''CharacterPlayAnimation(FIXEDSTRING:animation [, INT:exitOnFinish=1, INT:waitForCompletion=1])'''&lt;br /&gt;
&lt;br /&gt;
Plays a certain animation ExitOnFinish means if the exit will kill itself after it was played (revert back to still) &lt;br /&gt;
&lt;br /&gt;
'''CharacterStopAnimation(-)'''&lt;br /&gt;
&lt;br /&gt;
Stops all animations.&lt;br /&gt;
&lt;br /&gt;
'''CharacterPickUpItem(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Moves close enough to the item if necessary and picks it up&lt;br /&gt;
&lt;br /&gt;
'''CharacterUseItem(ITEM:item [, INTEGER:LongPath])'''&lt;br /&gt;
&lt;br /&gt;
Moves close enough to the item if necessary and uses it&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveItem(ITEM:item, INTEGER:ignoreWeight, INTEGER:ignoreAPCost [, INTEGER:ignoreDangerousSurfaces=1, INT:amount=-1, GAMEOBJECT|FLOAT3:destination])'''&lt;br /&gt;
&lt;br /&gt;
Moves close enough to the item if necessary and moves it to the destination. Will try to find a destination if not supplied.&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddSkill(CHARACTER:character, SKILL:skill[, INT:ShowNotification=0])'''&lt;br /&gt;
&lt;br /&gt;
Adds &amp;lt;skill&amp;gt; to &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveSkill(CHARACTER:character, SKILL:skill)'''&lt;br /&gt;
&lt;br /&gt;
Removes &amp;lt;skill&amp;gt; from &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterUseSkill(SKILL:skill, GAMEOBJECT|FLOAT3:target [, GAMEOBJECT|FLOAT3:target2, ITEM:skillItem, INT:ignoreHasSkill=0])'''&lt;br /&gt;
&lt;br /&gt;
Cast a skill&lt;br /&gt;
&lt;br /&gt;
'''CharacterAppearAt(GAMEOBJECT|FLOAT3:target, INT:playspawn)'''&lt;br /&gt;
&lt;br /&gt;
Appear at the target&lt;br /&gt;
&lt;br /&gt;
'''CharacterAppearOutOfSightTo(GAMEOBJECT:target, FLOAT:angle, INT:playspawn)'''&lt;br /&gt;
&lt;br /&gt;
Appears out of sight to the players from a certain angle while being able to reach target&lt;br /&gt;
&lt;br /&gt;
'''CharacterAppearOnTrailOutOfSightTo(CHARACTER:target, FLOAT:angle, INT:playspawn)'''&lt;br /&gt;
&lt;br /&gt;
Appears out of sight to the players, on its previous locations, from a certain angle while being able to reach target&lt;br /&gt;
&lt;br /&gt;
'''CharacterDisappear(FLOAT:angle[, INTEGER:isRunning=0])'''&lt;br /&gt;
&lt;br /&gt;
Move out of screen and go of stage, will run if &amp;lt;isRunning&amp;gt; is not 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetOffStage(-)'''&lt;br /&gt;
&lt;br /&gt;
Set Off Stage&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetOnStage(-)'''&lt;br /&gt;
&lt;br /&gt;
Set On Stage&lt;br /&gt;
&lt;br /&gt;
'''CharacterLookAt(GAMEOBJECT|FLOAT3|SPLINE:target[, INT:snapToTarget=0, INT:angleTolerance=0])'''&lt;br /&gt;
&lt;br /&gt;
Rotates the character to look at the target (Closest spline point in case of a spline).&lt;br /&gt;
&lt;br /&gt;
'''CharacterLookFrom(GAMEOBJECT|SPLINE:target[, INT:snapToTarget=0])'''&lt;br /&gt;
&lt;br /&gt;
Rotates to the character so it has the same rotation as the target (Closest spline point in case of a spline).&lt;br /&gt;
&lt;br /&gt;
'''CharacterFollow(CHARACTER:target, FLOAT:durationInSeconds, INT:run)'''&lt;br /&gt;
&lt;br /&gt;
Follow the target for a certain time&lt;br /&gt;
&lt;br /&gt;
'''CharacterFollowOwnerOrLeader(FLOAT:durationInSeconds, INT:run)'''&lt;br /&gt;
&lt;br /&gt;
Follow the leader or owner for a certain time&lt;br /&gt;
&lt;br /&gt;
'''CharacterWander(FLOAT|TRIGGER:range, FLOAT:durationInSeconds [, INT:run, GAMEOBJECT:anchor])'''&lt;br /&gt;
&lt;br /&gt;
Wander around for a certain time&lt;br /&gt;
&lt;br /&gt;
'''CharacterSwitchWeaponType(WEAPON:type)'''&lt;br /&gt;
&lt;br /&gt;
If necessary switch to the new weapon type&lt;br /&gt;
&lt;br /&gt;
'''CharacterFleeFrom(RELATION:relation, FLOAT:range)'''&lt;br /&gt;
&lt;br /&gt;
Run away from certain characters if necessary&lt;br /&gt;
'''&lt;br /&gt;
CharacterFleeFromSurface(SURFACE:surface)'''&lt;br /&gt;
&lt;br /&gt;
Run away from a certain surface if necessary&lt;br /&gt;
&lt;br /&gt;
'''CharacterFleeFromDangerousSurface(-)'''&lt;br /&gt;
&lt;br /&gt;
Run away from a dangerous surfaces if necessary&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddSourcePoints(CHARACTER:character, INT:amount)'''&lt;br /&gt;
&lt;br /&gt;
Adds x source points (x can be negative to substract)&lt;br /&gt;
&lt;br /&gt;
'''CharacterDie(CHARACTER:character[, DEATH:type=DoT])'''&lt;br /&gt;
&lt;br /&gt;
Kills the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterHeal(CHARACTER:character, FLOAT:percentage)'''&lt;br /&gt;
&lt;br /&gt;
Heals the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterConsume(CHARACTER:character, POTION:potion)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character consume a potion. Doesn't cost any AP and will just execute the result of the potion.&lt;br /&gt;
&lt;br /&gt;
'''CharacterDisableAllCrimes(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Disables all generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterEnableAllCrimes(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Enables all generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
'''&lt;br /&gt;
CharacterEnableCrime(CHARACTER:target, STRING:crime, ...)'''&lt;br /&gt;
&lt;br /&gt;
Enables the specified generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterDisableCrime(CHARACTER:target, STRING:crime, ...)'''&lt;br /&gt;
&lt;br /&gt;
Disables the specified generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetLongInvestigationDuration(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Doubles the time it takes for the investigation to time out. Use this when the character needs to move a long path before investigating.&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiCalculate(-)'''&lt;br /&gt;
&lt;br /&gt;
Calculate the AI of the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiStopCalculate(-)'''&lt;br /&gt;
&lt;br /&gt;
Stop the calculation of the AI of the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiFinishMoveSkill(-)'''&lt;br /&gt;
&lt;br /&gt;
Finish the current MoveSkill.&lt;br /&gt;
'''&lt;br /&gt;
CharacterAiAddInterestingItem(CHARACTER:character, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Make it interesting for the AI to destroy that Item&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiRemoveInterestingItem(CHARACTER:character, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Make it no longer interesting for the AI to destroy that Item&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetArchetype(CHARACTER:character, ARCHETYPE:archetype)'''&lt;br /&gt;
&lt;br /&gt;
Sets the archetype of the character, used in AI calculations&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetStoryNPC(CHARACTER:character, INT:bool)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character storyNPC or not.&lt;br /&gt;
'''&lt;br /&gt;
CharacterAddActionPoints(CHARACTER:character, INT:amount)'''&lt;br /&gt;
&lt;br /&gt;
Give character some action points&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetImmortal(CHARACTER:character, INT:bool)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character immortal or not. (Allow dying)&lt;br /&gt;
&lt;br /&gt;
'''CharacterPlayEffect(CHARACTER:character, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect on the character and it follows the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterPlayLoopEffect(OUT INT64:effectHandle, CHARACTER:character, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays a looping effect on the character and it follows the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterEvent(CHARACTER:character, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw a character event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''CharacterItemEvent(CHARACTER:character, ITEM:item, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw a character/item event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''CharacterCharacterEvent(CHARACTER:character1, CHARACTER:character2, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw a character/character event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetRelationIndivToIndiv(CHARACTER:source, CHARACTER:target, INT:relation)'''&lt;br /&gt;
&lt;br /&gt;
Changes the relationship between 2 characters.&lt;br /&gt;
'''&lt;br /&gt;
CharacterForceUpdate(INT:forceUpdate)'''&lt;br /&gt;
&lt;br /&gt;
Makes sure the attached character is always being update or not. &lt;br /&gt;
'''&lt;br /&gt;
CharacterSetEnemy(CHARACTER:character, CHARACTER:enemy)'''&lt;br /&gt;
&lt;br /&gt;
Sets the current enemy of character&lt;br /&gt;
&lt;br /&gt;
'''CharacterApplyStatus(CHARACTER:character, STATUS:statusId [, INT:turns=null, INT:force=0])'''&lt;br /&gt;
&lt;br /&gt;
Applies the status to the character When turns is -1 it's a permanent status When turns is -2 it's a keep alive status (which means it will die if it's not applied again within 1 second) &lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveStatus(CHARACTER:character, STATUS:statusId [, STATUS:reasonStatusID=null])'''&lt;br /&gt;
&lt;br /&gt;
Removes the status from the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterDestroy(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Destroys the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetCanSpotSneakers(CHARACTER:character, INT:enabled)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the character can spot sneaking characters.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetAttackOfOpportunity(CHARACTER:character, INT:enabled)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the character can do attack of opportunities.&lt;br /&gt;
&lt;br /&gt;
'''CharacterResurrect(CHARACTER:character [, INT:Percentage = 100])'''&lt;br /&gt;
&lt;br /&gt;
Resurrects the character at [2]% health.&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddToInventory(CHARACTER:character, FIXEDSTRING:itemStatsObject[, INT:amount, INT:showInTrade=1])'''&lt;br /&gt;
&lt;br /&gt;
Add the item to the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveFromInventory(CHARACTER:character, FIXEDSTRING:itemStatsObject[, INT:amount])'''&lt;br /&gt;
&lt;br /&gt;
Remove the item from the character. If Amount is -1, then all are removed&lt;br /&gt;
&lt;br /&gt;
'''CharacterDrinkPotion(FIXEDSTRING:statID)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character drink a potion from the inventory.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetAnimationOverride(CHARACTER:character, FIXEDSTRING:animation)'''&lt;br /&gt;
&lt;br /&gt;
Sets an animation override, only walk/run/die animations can override it.&lt;br /&gt;
&lt;br /&gt;
'''CharacterUseActionPoints(CHARACTER:character, INT:amount [, OUT INT:succeeded])'''&lt;br /&gt;
&lt;br /&gt;
Uses x action points&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddTreasureTable(CHARACTER:character, FIXEDSTRING:treasureTable)'''&lt;br /&gt;
&lt;br /&gt;
Adds &amp;lt;treasureTable&amp;gt; to the treasure list of &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveTreasureTable(CHARACTER:character, FIXEDSTRING:treasureTable)'''&lt;br /&gt;
&lt;br /&gt;
Removes &amp;lt;treasureTable&amp;gt; from the treasure list of &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterClearTreasureTables(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Removes all treasure tables from &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetTemporaryHostileRelation(CHARACTER:character, CHARACTER:otherCharacter)'''&lt;br /&gt;
&lt;br /&gt;
Creates a temporary hostile relation between the 2 characters!&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetFightMode(CHARACTER:character, INT:fight [, INT:force=0])'''&lt;br /&gt;
&lt;br /&gt;
Set the character in sheath/unsheated mode.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetStats(CHARACTER:character, FIXEDSTRING:statsEntry [, INT:keepVitality=0, INT:keepAP=0, INT:keepLevel=0, OUT FLOAT:currentHP])'''&lt;br /&gt;
&lt;br /&gt;
Applies &amp;lt;statsEntry&amp;gt; from character.xlsm to &amp;lt;character&amp;gt;, returns &amp;lt;currentHP&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetWalkSpeedOverride(CHARACTER:character, INTEGER:override [, FLOAT:walkSpeed])'''&lt;br /&gt;
&lt;br /&gt;
Sets walk speed override of &amp;lt;character&amp;gt;, removes it if &amp;lt;override&amp;gt; is 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetRunSpeedOverride(CHARACTER:character, INTEGER:override [, FLOAT:runSpeed])'''&lt;br /&gt;
&lt;br /&gt;
Sets run speed override of &amp;lt;character&amp;gt;, removes it if &amp;lt;override&amp;gt; is 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetHasDialog(CHARACTER:character, INTEGER:bool)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the dialog of the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterInitPatrol(SPLINE:spline, INT:splineIndex, INT:reversed, INT:running)'''&lt;br /&gt;
&lt;br /&gt;
Start patroling from the given index along the given spline with the given character.&lt;br /&gt;
&lt;br /&gt;
'''CharacterStartPatrol(SPLINE:spline, INT:splineIndex, INT:reversed, INT:running)'''&lt;br /&gt;
&lt;br /&gt;
Start patroling from the given index along the given spline with the given character.&lt;br /&gt;
&lt;br /&gt;
'''CharacterStopPatrol(-)'''&lt;br /&gt;
&lt;br /&gt;
Let the character stop patrolling whatever spline he's on!&lt;br /&gt;
&lt;br /&gt;
'''CharacterInterruptPatrol(-)'''&lt;br /&gt;
&lt;br /&gt;
Call when the patrol should interrupt so the guard stops moving to the next spline. If this is called when the character is deactivated, a caret will take his place.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetAnimationSetOverride(CHARACTER:source, FIXEDSTRING:override)'''&lt;br /&gt;
&lt;br /&gt;
Sets an animation set override for a character. Empty fixedstring clears the override.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetFloating(CHARACTER:target, INTEGER:isFloating)'''&lt;br /&gt;
&lt;br /&gt;
Sets &amp;lt;target&amp;gt; floating if &amp;lt;isFloating&amp;gt; is not 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterResetCooldowns(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Resets the skill cooldowns for &amp;lt;target&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ItemEvent(ITEM:item, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw an item event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayAnimation(FIXEDSTRING:animation)'''&lt;br /&gt;
&lt;br /&gt;
Plays an animation on the item&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayAnimationTo(FIXEDSTRING:animation, FLOAT:targetPercentage, [FLOAT:speed])'''&lt;br /&gt;
&lt;br /&gt;
Plays an animation on the item to the target time (percentage of the total duration)&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayEffect(ITEM:item, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect on the item and it follows the item&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayLoopEffect(OUT INT:effectHandle, ITEM:item, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays a looping effect on the item and it follows the item&lt;br /&gt;
&lt;br /&gt;
'''ItemSetOnStage(ITEM:item, INTEGER:bool)'''&lt;br /&gt;
&lt;br /&gt;
Sets an item on or offstage&lt;br /&gt;
&lt;br /&gt;
'''ItemSetCanInteract(ITEM:item, INTEGER:bool)'''&lt;br /&gt;
&lt;br /&gt;
Sets an item (not) interactible&lt;br /&gt;
&lt;br /&gt;
'''ItemClose(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Close an item&lt;br /&gt;
&lt;br /&gt;
'''ItemOpen(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Open an item&lt;br /&gt;
&lt;br /&gt;
'''ItemDrop(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Drop an item&lt;br /&gt;
&lt;br /&gt;
'''ItemLock(ITEM:item, FIXEDSTRING:key)'''&lt;br /&gt;
&lt;br /&gt;
Lock an item&lt;br /&gt;
&lt;br /&gt;
'''ItemUnlock(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Unlock an item&lt;br /&gt;
&lt;br /&gt;
'''ItemApplyStatus(ITEM:item, STATUS:statusId [, INT:turns=null, INT:force=0])'''&lt;br /&gt;
&lt;br /&gt;
Applies the status to the item When turns is -1 it's a permanent status When turns is -2 it's a keep alive status (which means it will die if it's not applied again within 1 second) &lt;br /&gt;
&lt;br /&gt;
'''ItemRemoveStatus(ITEM:item, STATUS:statusId)'''&lt;br /&gt;
&lt;br /&gt;
Removes the status from the item&lt;br /&gt;
&lt;br /&gt;
'''ItemDie(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Kills the item&lt;br /&gt;
&lt;br /&gt;
'''ItemMoveTo(GAMEOBJECT|FLOAT3:target, FLOAT:velocity, FLOAT:acceleration, INTEGER:matchTargetRotation)'''&lt;br /&gt;
&lt;br /&gt;
Moves the item to the target&lt;br /&gt;
&lt;br /&gt;
'''ItemToInventory(ITEM:item, CHARACTER|ITEM:target [,INT:amount=-1])'''&lt;br /&gt;
&lt;br /&gt;
Moves the item to the target's inventory&lt;br /&gt;
&lt;br /&gt;
'''ItemLookAt(GAMEOBJECT:target, FLOAT:degreesPerSecond)'''&lt;br /&gt;
&lt;br /&gt;
Rotates the item to look at the target&lt;br /&gt;
&lt;br /&gt;
'''ItemDestroy(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Destroys the item&lt;br /&gt;
&lt;br /&gt;
'''ItemSetAmount(ITEM:item, INT:amount)'''&lt;br /&gt;
&lt;br /&gt;
Change the amount of the item&lt;br /&gt;
&lt;br /&gt;
'''IterateItemsInInventory(CHARACTER|ITEM:source, FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each iten in source's inventory. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''ItemAddCharges(ITEM:TargetItem, INT:charges)'''&lt;br /&gt;
&lt;br /&gt;
Add/subtract charges from an item&lt;br /&gt;
&lt;br /&gt;
'''ItemResetChargesToInitial(ITEM:TargetItem)'''&lt;br /&gt;
&lt;br /&gt;
Resets charges from item to initial state&lt;br /&gt;
&lt;br /&gt;
'''MakePeace(CHARACTER:Source, CHARACTER:Target[, INT:IgnoreVote = 1])'''&lt;br /&gt;
&lt;br /&gt;
Make peace between users of the characters&lt;br /&gt;
&lt;br /&gt;
'''MakeWar(CHARACTER:Source, CHARACTER:Target[, INT:IgnoreVote = 1])'''&lt;br /&gt;
&lt;br /&gt;
Make war between users of the characters&lt;br /&gt;
&lt;br /&gt;
'''FindSurface(OUT FLOAT3:result, GAMEOBJECT|FLOAT3:source, FLOAT:minRange, FLOAT:maxRange, SURFACE:type [,CHARACTER:alignSource, INT:minEnemiesInSurface, INT:maxAlliesInSurface, INT:minimumCellCount])'''&lt;br /&gt;
&lt;br /&gt;
Finds the closest surface of a specific type.&lt;br /&gt;
&lt;br /&gt;
'''FindValidPosition(INOUT FLOAT3:position, FLOAT:radius[, CHARACTER|ITEM:object=null])'''&lt;br /&gt;
&lt;br /&gt;
Finds the closest valid position (where the object can stand.)&lt;br /&gt;
&lt;br /&gt;
'''FindPosition(INOUT FLOAT3:position, CHARACTER:source, INT:canStand, INT:checkSight, FLOAT:minRadius, FLOAT:maxRadius, FLOAT:rangeCheck, CHARACTER:alignSource, INT:minAllies, INT:maxAllies, INT:minEnemies, INT:maxEnemies [,FIXEDSTRING:AiHintTag=null, INT:forceHint=0, FLOAT3:SourcePosition])'''&lt;br /&gt;
&lt;br /&gt;
Finds the closest position from the source (within radius) where the conditions are matched. &lt;br /&gt;
&lt;br /&gt;
'''Cast(OUT OBJECT variable, OBJECT value)'''&lt;br /&gt;
&lt;br /&gt;
Casts the value to the variable.&lt;br /&gt;
&lt;br /&gt;
'''StringConcatenate(STRING:stringA, STRING:stringB, OUT STRING:resultingString)'''&lt;br /&gt;
&lt;br /&gt;
Appends stringB to stringA. Resulting string is stored in the third parameter.&lt;br /&gt;
&lt;br /&gt;
== QUERIES ==&lt;br /&gt;
&lt;br /&gt;
GetPosition(GAMEOBJECT:object,OUT FLOAT3:src)&lt;br /&gt;
&lt;br /&gt;
Get the current position of an object&lt;br /&gt;
&lt;br /&gt;
GetForwardDirection(GAMEOBJECT:object,OUT FLOAT3:direction)&lt;br /&gt;
&lt;br /&gt;
Get the current forward direction of an object&lt;br /&gt;
&lt;br /&gt;
GetRightDirection(GAMEOBJECT:object,OUT FLOAT3:direction)&lt;br /&gt;
&lt;br /&gt;
Get the current right direction of an object&lt;br /&gt;
&lt;br /&gt;
GetUpDirection(GAMEOBJECT:object,OUT FLOAT3:direction)&lt;br /&gt;
&lt;br /&gt;
Get the current up direction of an object&lt;br /&gt;
&lt;br /&gt;
GetDirection(GAMEOBJECT|FLOAT3:src,GAMEOBJECT|FLOAT3:target,OUT FLOAT3:direction[, OUT FLOAT:distance])&lt;br /&gt;
&lt;br /&gt;
Get the direction from src to target (optional: returns the distance between the objects as well)&lt;br /&gt;
&lt;br /&gt;
GetRotation(GAMEOBJECT:object, OUT FLOAT3:vector)&lt;br /&gt;
&lt;br /&gt;
Get the rotation of an object&lt;br /&gt;
&lt;br /&gt;
CharacterGetTargetSpline(INT: SplineIndex)&lt;br /&gt;
&lt;br /&gt;
Returns the spline index the character is currently walking towards, or -1 if he is not active on a spline.&lt;br /&gt;
&lt;br /&gt;
IsEqual(OBJECT:variable, OBJECT:variable)&lt;br /&gt;
&lt;br /&gt;
Compares both objects and see if they are equal.&lt;br /&gt;
&lt;br /&gt;
IsLessThen(INT|FLOAT:variable, INT|FLOAT:variable)&lt;br /&gt;
&lt;br /&gt;
Compares both objects and see if the first one is smaller.&lt;br /&gt;
&lt;br /&gt;
IsGreaterThen(INT|FLOAT:variable, INT|FLOAT:variable)&lt;br /&gt;
&lt;br /&gt;
Compares both objects and see if the first one is bigger.&lt;br /&gt;
&lt;br /&gt;
IsRandom(FLOAT:percentage)&lt;br /&gt;
&lt;br /&gt;
Each time this condition is checked, it will succeed with a chance of the percentage (between 0 and 1)&lt;br /&gt;
&lt;br /&gt;
IsRound(INT:roundNumber)&lt;br /&gt;
&lt;br /&gt;
Checks if we are currently in combat in round x&lt;br /&gt;
&lt;br /&gt;
IsInSurface(OBJECT|FLOAT3:target, SURFACE:type[, FLOAT:radius])&lt;br /&gt;
&lt;br /&gt;
Check if the character, item, trigger or position is currently within the specific surface.&lt;br /&gt;
&lt;br /&gt;
IsInDangerousSurface(OBJECT|FLOAT3:target[, CHARACTER:character, FLOAT:radius])&lt;br /&gt;
&lt;br /&gt;
Check if &amp;lt;target&amp;gt; is currently in on a dangerous surface. Uses &amp;lt;character&amp;gt; for path influences if provided (is necessary with non-character targets)&lt;br /&gt;
&lt;br /&gt;
IsInDialog(CHARACTER|ITEM:target[, INT:ignoreAutomatedDialogs=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character or item is currently in a dialog, optionally ignoring automated dialogs&lt;br /&gt;
&lt;br /&gt;
IsInAutomatedDialog(CHARACTER|ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Check if the character or item is currently in an automated dialog&lt;br /&gt;
&lt;br /&gt;
GetDistance(OUT FLOAT:distance, GAMEOBJECT|FLOAT3:source, GAMEOBJECT|FLOAT3:target)&lt;br /&gt;
&lt;br /&gt;
Returns the distance between 2 positions&lt;br /&gt;
&lt;br /&gt;
GetDistance2D(OUT FLOAT:distance, GAMEOBJECT|FLOAT3:source, GAMEOBJECT|FLOAT3:target)&lt;br /&gt;
Returns the 2D distance between 2 positions (ignores height)&lt;br /&gt;
&lt;br /&gt;
GetInnerDistance(OUT FLOAT:distance, GAMEOBJECT:source, GAMEOBJECT:target)&lt;br /&gt;
&lt;br /&gt;
Returns the distance between 2 gameobjects (character, item, trigger, ...) Their bounds are already subtracted.&lt;br /&gt;
&lt;br /&gt;
GetPosition(GAMEOBJECT:object, OUT FLOAT3:position)&lt;br /&gt;
&lt;br /&gt;
Returns the position of a gameobject (character, item, trigger, ...)&lt;br /&gt;
&lt;br /&gt;
GetVar(OUT OBJECT:returnValue, CHARACTER|ITEM:target, FIXEDSTRING:varName)&lt;br /&gt;
&lt;br /&gt;
Gets a global variable from the target&lt;br /&gt;
&lt;br /&gt;
GetClosestPlayer(OUT CHARACTER:player, GAMEOBJECT|FLOAT3:source)&lt;br /&gt;
&lt;br /&gt;
Gets the closest player near the source, default being being the object itself&lt;br /&gt;
&lt;br /&gt;
GetPlayerCount(OUT INT:playerCount)&lt;br /&gt;
&lt;br /&gt;
Gets the number of players in the party&lt;br /&gt;
&lt;br /&gt;
GetPlayerByIndex(OUT CHARACTER:returnCharacter, INT:playerIndex)&lt;br /&gt;
&lt;br /&gt;
Gets a player from the party by index&lt;br /&gt;
&lt;br /&gt;
GetRandomCharacter(OUT CHARACTER:returnCharacter, [INT:canBeSelf=0, INT:canBePlayer=0])&lt;br /&gt;
&lt;br /&gt;
Gets a random character in the current level&lt;br /&gt;
&lt;br /&gt;
ContainsSurface(GAMEOBJECT|FLOAT3:source, FLOAT:radius, SURFACE:type,)&lt;br /&gt;
&lt;br /&gt;
Checks if there is any surface of the type within a radius of the source&lt;br /&gt;
&lt;br /&gt;
IsSurface(GAMEOBJECT|FLOAT3:source, FLOAT:radius, SURFACE:type,)&lt;br /&gt;
&lt;br /&gt;
Checks if the whole radius around the source is the specified surface type&lt;br /&gt;
&lt;br /&gt;
IsObjectOnObject(CHARACTER|ITEM:source,CHARACTER|ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Checks if the source is standing on the target&lt;br /&gt;
&lt;br /&gt;
GetX(FLOAT3:vector, OUT FLOAT:value)&lt;br /&gt;
&lt;br /&gt;
Returns the X component of the vector&lt;br /&gt;
&lt;br /&gt;
GetY(FLOAT3:vector, OUT FLOAT:value)&lt;br /&gt;
&lt;br /&gt;
Returns the Y component of the vector&lt;br /&gt;
&lt;br /&gt;
GetZ(FLOAT3:vector, OUT FLOAT:value)&lt;br /&gt;
&lt;br /&gt;
Returns the Z component of the vector&lt;br /&gt;
&lt;br /&gt;
CanSee(GAMEOBJECT|FLOAT3:source, GAMEOBJECT|FLOAT3:target[, INT:addProjectileTargetGroundOffset=0])&lt;br /&gt;
&lt;br /&gt;
Check if the sight is blocked between 2 points.&lt;br /&gt;
&lt;br /&gt;
IsVisible(CHARACTER|ITEM:object)&lt;br /&gt;
&lt;br /&gt;
Check if the object is set invisible or not with SetVisible.&lt;br /&gt;
&lt;br /&gt;
GetTextDuration(CHARACTER|ITEM:object, FIXEDSRTING:key, OUT FLOAT:duration)&lt;br /&gt;
&lt;br /&gt;
Gets how long a text needs to be displayed&lt;br /&gt;
&lt;br /&gt;
IsCasual(-)&lt;br /&gt;
&lt;br /&gt;
Returns if the current game mode is Casual&lt;br /&gt;
&lt;br /&gt;
IsHardcore(-)&lt;br /&gt;
&lt;br /&gt;
Returns if the current game mode is Hardcore&lt;br /&gt;
&lt;br /&gt;
IsTagged(GAMEOBJECT:object, FIXEDSTRING:tag)&lt;br /&gt;
&lt;br /&gt;
Check if the object is tagged.&lt;br /&gt;
&lt;br /&gt;
TranslatedStringKeyExists(FIXEDSTRING:key)&lt;br /&gt;
&lt;br /&gt;
Check if the TranslatedString key exists.&lt;br /&gt;
&lt;br /&gt;
IsInCombat(CHARACTER|ITEM:object)&lt;br /&gt;
&lt;br /&gt;
Returns true if the object is in combat.&lt;br /&gt;
&lt;br /&gt;
IsInCombatWith(CHARACTER|ITEM:object, CHARACTER|ITEM:object)&lt;br /&gt;
&lt;br /&gt;
Returns true if the objects are in combat with each other.&lt;br /&gt;
&lt;br /&gt;
IsFacing(GAMEOBJECT:source, GAMEOBJECT|FLOAT3:target, [INT:angle=90])&lt;br /&gt;
&lt;br /&gt;
Returns true if the object is facing the position within the given angle.&lt;br /&gt;
&lt;br /&gt;
GameIsSaving(-)&lt;br /&gt;
&lt;br /&gt;
Returns true if the game is saving.&lt;br /&gt;
&lt;br /&gt;
GameIsLoading(-)&lt;br /&gt;
&lt;br /&gt;
Returns true if the game is loading.&lt;br /&gt;
&lt;br /&gt;
GetUserCount(OUT INT:userCount)&lt;br /&gt;
&lt;br /&gt;
Returns the user count.&lt;br /&gt;
&lt;br /&gt;
GetCurrentCharacter(OUT CHARACTER:character, INT:user)&lt;br /&gt;
&lt;br /&gt;
Returns the character currently being controlled by the specified user.&lt;br /&gt;
&lt;br /&gt;
GetCurrentLevel(OUT FIXEDSTRING:currentLevel)&lt;br /&gt;
&lt;br /&gt;
Returns the current levelname&lt;br /&gt;
&lt;br /&gt;
GetAIBounds(CHARACTER|ITEM:source, OUT FLOAT:bounds)&lt;br /&gt;
&lt;br /&gt;
Returns AI bounds of &amp;lt;source&amp;gt; in &amp;lt;bounds&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HasGlobalFlag(FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Global Flag is set&lt;br /&gt;
&lt;br /&gt;
HasFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Flag is set on the Object&lt;br /&gt;
&lt;br /&gt;
HasUserFlag(CHARACTER:object, FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Flag is set on the user's characters&lt;br /&gt;
&lt;br /&gt;
HasPartyFlag(CHARACTER:object, FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Flag is set on the party's characters&lt;br /&gt;
&lt;br /&gt;
DialogExists(STRING:dialogue)&lt;br /&gt;
&lt;br /&gt;
Returns true if the dialogue exists.&lt;br /&gt;
&lt;br /&gt;
IsActive(CHARACTER|ITEM:Object)&lt;br /&gt;
&lt;br /&gt;
Returns if the character or item is currently active.&lt;br /&gt;
&lt;br /&gt;
ListGetSize(LIST&amp;lt;OBJECT&amp;gt;:list, out INT:size)&lt;br /&gt;
&lt;br /&gt;
Returns the number of elements in &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ListGet(LIST&amp;lt;OBJECT&amp;gt;:list, INT:index, out OBJECT:entry)&lt;br /&gt;
&lt;br /&gt;
Returns &amp;lt;entry&amp;gt; at &amp;lt;index&amp;gt; of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ListGetRandom(LIST&amp;lt;OBJECT&amp;gt;:list, out OBJECT:entry)&lt;br /&gt;
&lt;br /&gt;
Returns a random &amp;lt;entry&amp;gt; of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IsBoss(CHARACTER|ITEM:Object)&lt;br /&gt;
&lt;br /&gt;
Returns true if the entity is tagged as a boss&lt;br /&gt;
&lt;br /&gt;
IsProjectileSkill(SKILL:skill)&lt;br /&gt;
&lt;br /&gt;
Returns true if the skill is a ranged skill (uses a projectile)&lt;br /&gt;
&lt;br /&gt;
IsValidSkillTarget(CHARACTER:source, OBJECT|FLOAT3:target, SKILLID:skill[, INTEGER:ignoreRangeCheck=0])&lt;br /&gt;
&lt;br /&gt;
Checks whether &amp;lt;target&amp;gt; is a valid target for &amp;lt;skill&amp;gt; at &amp;lt;source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GetFaction(OUT FIXEDSTRING:faction, CHARACTER|ITEM:character)&lt;br /&gt;
&lt;br /&gt;
Returns the faction of the provided character or item&lt;br /&gt;
&lt;br /&gt;
IsInActiveTurn(CHARACTER|ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Returns true if it's the character's or item's turn in combat.&lt;br /&gt;
&lt;br /&gt;
IsSkillActive(CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; has &amp;lt;skillId&amp;gt; active (in memory).&lt;br /&gt;
&lt;br /&gt;
HasSkillAi(SKILLID:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns true if the skill is using the new Ai system&lt;br /&gt;
&lt;br /&gt;
IsInArena(CHARACTER::character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character is in an arena fight&lt;br /&gt;
&lt;br /&gt;
CrimeGetType(INTEGER:crimeId, OUT STRING:crimeType)&lt;br /&gt;
&lt;br /&gt;
Returns the type of the crime with this id.&lt;br /&gt;
&lt;br /&gt;
CrimeGetCriminals(INTEGER:crimeId, OUT CHARACTER:criminal1, OUT CHARACTER:criminal2, OUT CHARACTER:criminal3, OUT CHARACTER:criminal4)&lt;br /&gt;
&lt;br /&gt;
Returns the criminals of that crime. They might all be null.&lt;br /&gt;
&lt;br /&gt;
IsSourceSkill(SKILL:skill)&lt;br /&gt;
&lt;br /&gt;
Returns true if the skill is a source skill.&lt;br /&gt;
&lt;br /&gt;
IsInGameMasterMode(-)&lt;br /&gt;
&lt;br /&gt;
Returns true if the game in game master mode.&lt;br /&gt;
&lt;br /&gt;
CharacterGet(OUT CHARACTER:character, GAMEOBJECT|FLOAT3:src, FLOAT:range, COMPARE:howTo, COMPAREFUNC:compareFunc[, RELATION: relation, SURFACE:surface, STATUS:status, TALENT:talent, CHARACTER:inSightOf, FIXEDSTRING:tag])&lt;br /&gt;
&lt;br /&gt;
Get a character within a certain range conforming to the filled in restraints. &lt;br /&gt;
&lt;br /&gt;
CharacterCount(OUT INT:count, GAMEOBJECT|FLOAT3:src, FLOAT:range, [RELATION: relation, SURFACE:surface, STATUS:status, TALENT:talent, CHARACTER:inSightOf])&lt;br /&gt;
&lt;br /&gt;
Counts the characters within a certain range conforming to the filled in restraints.&lt;br /&gt;
&lt;br /&gt;
CharacterGetOwner(OUT CHARACTER:owner, CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get the character's owner&lt;br /&gt;
&lt;br /&gt;
CharacterGetFollow(OUT CHARACTER:to follow, CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get the character to follow&lt;br /&gt;
&lt;br /&gt;
CharacterGetEnemy(OUT CHARACTER:current enemy, CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get current enemy of character&lt;br /&gt;
&lt;br /&gt;
CharacterCanCast(CHARACTER:source, SKILL:skillId, [ITEM:skillItem=null, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can cast the skill: will check cooldown, actionpoints&lt;br /&gt;
&lt;br /&gt;
CharacterCanSitOnItem(CHARACTER:source, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Check if the character source can sit or lie on an item.&lt;br /&gt;
&lt;br /&gt;
CharacterCanDrinkPotion(CHARACTER:source, FIXEDSTRING:potionID[, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can drink the potion: will check inv and actionpoints&lt;br /&gt;
&lt;br /&gt;
CharacterCanUseItem(CHARACTER:source, ITEM:item[, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can use the item in the world&lt;br /&gt;
&lt;br /&gt;
CharacterCanUseItemInInventory(CHARACTER:source, ITEM:item[, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can use the item in his inventory&lt;br /&gt;
&lt;br /&gt;
CharacterCanSee(CHARACTER:watchingChar, CHARACTER|ITEM:target [, INT:forceUpdate=0])&lt;br /&gt;
&lt;br /&gt;
Check if character has target in his line of sight. &lt;br /&gt;
&lt;br /&gt;
CharacterCanShoot(CHARACTER:source, GAMEOBJECT|FLOAT3:target)&lt;br /&gt;
&lt;br /&gt;
Check if the character can shoot the target.&lt;br /&gt;
&lt;br /&gt;
CharacterIsPlayer(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if the character is a player&lt;br /&gt;
&lt;br /&gt;
CharacterIsInParty(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if the character is in the party&lt;br /&gt;
&lt;br /&gt;
CharacterIsEnemy(CHARACTER:source, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is enemy of source&lt;br /&gt;
&lt;br /&gt;
CharacterIsAlly(CHARACTER:source, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is ally of source&lt;br /&gt;
&lt;br /&gt;
CharacterIsNeutral(CHARACTER:source, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is neutral of source&lt;br /&gt;
&lt;br /&gt;
CharacterIsDead(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is dead&lt;br /&gt;
&lt;br /&gt;
CharacterIsMoving(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is moving (speed &amp;gt; 0)&lt;br /&gt;
&lt;br /&gt;
CharacterIsSummon(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a summon&lt;br /&gt;
&lt;br /&gt;
CharacterIsPartyFollower(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a party follower&lt;br /&gt;
&lt;br /&gt;
CharacterIsStoryNPC(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a story NPC&lt;br /&gt;
&lt;br /&gt;
CharacterInWeaponRange(CHARACTER:character, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is in the current's weapon range&lt;br /&gt;
&lt;br /&gt;
CharacterInTouchRange(CHARACTER:character, CHARACTER:targetChar)&lt;br /&gt;
&lt;br /&gt;
Check if target is in the character's touch range &lt;br /&gt;
&lt;br /&gt;
CharacterHasStatus(CHARACTER:character, STATUS:statusId[, FIXEDSTRING:extraData])&lt;br /&gt;
&lt;br /&gt;
Check if character currently has the status. ExtraData can be filled in for some statuses: - Consume: statsid of the item - Shield: skillid of the shield&lt;br /&gt;
&lt;br /&gt;
CharacterGetStatusSourceCharacter(CHARACTER:character, STATUS:statusId, OUT CHARACTER:source[, FIXEDSTRING:extraData])&lt;br /&gt;
&lt;br /&gt;
Get the source character of a status&lt;br /&gt;
&lt;br /&gt;
CharacterGetStatusSourceItem(CHARACTER:character, STATUS:statusId, OUT ITEM:source[, FIXEDSTRING:extraData])&lt;br /&gt;
&lt;br /&gt;
Get the source item of a status&lt;br /&gt;
&lt;br /&gt;
CharacterHasTalent(CHARACTER:character, TALENT:talent)&lt;br /&gt;
&lt;br /&gt;
Check if character currently has the talent&lt;br /&gt;
&lt;br /&gt;
CharacterHasSkill(CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Check if character currently has the skill&lt;br /&gt;
&lt;br /&gt;
CharacterHasWeaponType(CHARACTER:character, WEAPON:weaponTYPE [, INT:equipped])&lt;br /&gt;
&lt;br /&gt;
Check if character currently has a weapon of this type in his inventory or equipped&lt;br /&gt;
&lt;br /&gt;
CharacterGetStat(OUT FLOAT:statValue, CHARACTER:character, CHARACTERSTAT:statType)&lt;br /&gt;
&lt;br /&gt;
Returns the current value of the stat (Vitality, ...)&lt;br /&gt;
&lt;br /&gt;
CharacterGetSightRange(OUT FLOAT:range, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's sight range&lt;br /&gt;
&lt;br /&gt;
CharacterGetWeaponRange(OUT FLOAT:minRange, OUT FLOAT:maxRange, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's current weapon range&lt;br /&gt;
&lt;br /&gt;
CharacterGetTouchRange(OUT FLOAT:touchRange, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's current touch range&lt;br /&gt;
&lt;br /&gt;
CharacterGetSkillRange(OUT FLOAT:minRange, OUT FLOAT:maxRange,CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns the character's skill range&lt;br /&gt;
&lt;br /&gt;
CharacterGetSkillImpactRange(OUT FLOAT:areaRange, CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns the character's skill range&lt;br /&gt;
&lt;br /&gt;
CharacterIsInTrigger(CHARACTER:character, TRIGGER:trigger)&lt;br /&gt;
&lt;br /&gt;
Check if character is in given trigger&lt;br /&gt;
&lt;br /&gt;
CharacterGetAbility(OUT INT:value, CHARACTER:character, ABILITY:ability)&lt;br /&gt;
&lt;br /&gt;
Returns the character's value of the specified ability&lt;br /&gt;
&lt;br /&gt;
CharacterGetHostileCount(OUT INT:value, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns how many characters are targeting this character right now... You can iterate over them with IterateEnemiesOf.&lt;br /&gt;
&lt;br /&gt;
CharacterCanFight(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character can fight.&lt;br /&gt;
&lt;br /&gt;
CharacterGetTemplate(CHARACTER:character, OUT CHARACTERTEMPLATE:root)&lt;br /&gt;
&lt;br /&gt;
Returns the roottemplate of the character.&lt;br /&gt;
&lt;br /&gt;
CharacterCanSpotSneakers(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character can spot sneaking characters&lt;br /&gt;
&lt;br /&gt;
CharacterIsFloating(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a floating character&lt;br /&gt;
&lt;br /&gt;
CharacterInCreation(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character is in character creation&lt;br /&gt;
&lt;br /&gt;
CharacterAvoidsTraps(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character avoids traps&lt;br /&gt;
&lt;br /&gt;
CharacterCheckRelation(CHARACTER:character, RELATION:relation)&lt;br /&gt;
&lt;br /&gt;
Returns true if relation check succeeds&lt;br /&gt;
&lt;br /&gt;
CharacterIsBetterOrEqualClass(CHARACTER:character, INT:currentScore, OUT INT:newScore, INT warriorScore, INT rogueScore, INT mageScore, INT clericScore, INT rangerScore)&lt;br /&gt;
&lt;br /&gt;
Returns true if score is higher or equal than the current score&lt;br /&gt;
&lt;br /&gt;
CharacterHasBeenHitBy(CHARACTER:character, DAMAGE_TYPE:damageType)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character was hit by this type.&lt;br /&gt;
&lt;br /&gt;
CharacterHasCastedSpellLastTurn(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character has casted a spell in his last turn.&lt;br /&gt;
&lt;br /&gt;
CharacterHasHadStatus(CHARACTER:character, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character has had a specific status this combat.&lt;br /&gt;
&lt;br /&gt;
CharacterHasAnimationOverride(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character has an animation override.&lt;br /&gt;
&lt;br /&gt;
CharacterCanUnlock(CHARACTER:character, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character can unlock the item (if the item is already unlocked it returns true!)&lt;br /&gt;
&lt;br /&gt;
CharacterGetReservedUserID(OUT INT:user, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's reserved User id.&lt;br /&gt;
&lt;br /&gt;
CharacterGetRace(CHARACTER:character, OUT FIXEDSTRING:race)&lt;br /&gt;
&lt;br /&gt;
Returns the &amp;lt;character&amp;gt;'s race in &amp;lt;race&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterIsRace(CHARACTER:character, FIXEDSTRING:race)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt;'s race is &amp;lt;race&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterCanMoveItem(CHARACTER:character, ITEM:item, FLOAT:minRadius, FLOAT:maxRadius [, OUT FLOAT3:destination])&lt;br /&gt;
&lt;br /&gt;
Returns true + &amp;lt;destination&amp;gt; if &amp;lt;character&amp;gt; can move &amp;lt;item&amp;gt; somewhere between &amp;lt;minRadius&amp;gt; and &amp;lt;maxRadius&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterGetDeathType(CHARACTER:character, OUT FIXEDSTRING:deathType)&lt;br /&gt;
&lt;br /&gt;
Returns death type of &amp;lt;character&amp;gt; in &amp;lt;deathType&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterGetStillAnimation(CHARACTER:object, OUT FIXEDSTRING:stillAnimation)&lt;br /&gt;
&lt;br /&gt;
Returns the still animation to play&lt;br /&gt;
&lt;br /&gt;
CrimeTransferLeadership(INT: CrimeID[, FIXEDSTRING:Tag1,...])&lt;br /&gt;
&lt;br /&gt;
Try and transfer the leadership of this crime to someone else.&lt;br /&gt;
&lt;br /&gt;
CrimeGetLeadInvestigator(OUT CHARACTER:lead, INT: CrimeID)&lt;br /&gt;
&lt;br /&gt;
Returns the lead investigator for the crime.&lt;br /&gt;
&lt;br /&gt;
CharacterCanHitTargetWithRangedWeapon(CHARACTER:source, OBJECT|FLOAT3:target[, SKILL:skill = null])&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;source&amp;gt; can hit &amp;lt;target&amp;gt; with currently equipped ranged weapon. Will use &amp;lt;skill&amp;gt; instead of equipped weapon if provided.&lt;br /&gt;
&lt;br /&gt;
CharacterHasRangedWeapon(CHARACTER:character[, INT:checkInventory = 0])&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; has has ranged weapon. Checks for non-wielded weapons if &amp;lt;checkInventory&amp;gt; is 1&lt;br /&gt;
&lt;br /&gt;
CheckInteractionReach(CHARACTER:character, CHARACTER|ITEM: target)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; could interact with &amp;lt;target&amp;gt;. This is not checking ranges, but checking if there's too much of a height difference or too many obstacles in between.&lt;br /&gt;
&lt;br /&gt;
CharacterGetSourcePoints(CHARACTER:character, OUT INT: amount)&lt;br /&gt;
&lt;br /&gt;
Returns the amount of sourcepoints of &amp;lt;character&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterAiIsCalculating(-)&lt;br /&gt;
&lt;br /&gt;
Returns if the character is still calculating the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchMoveSkillCommand(OUT SKILL:skill, OUT ITEM:skillItem, OUT FLOAT3:target)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Move Skill command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchSkillCommand(OUT SKILL:skill, OUT ITEM:skillItem, OUT FLOAT3 endPosition, OUT FLOAT3:target, OUT CHARACTER:target, OUT ITEM:target, OUT FLOAT3:target2, OUT CHARACTER:target2, OUT ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Skill command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchConsumeCommand(OUT ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Consume command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchAttackCommand(OUT FLOAT3:endPosition, OUT FLOAT3:target, OUT CHARACTER:target, OUT ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Attack command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchFallbackCommand(OUT FLOAT3:targetPosition, OUT FLOAT3:lookAtPosition)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Fallback command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterGetArchetype(CHARACTER:character, OUT ARCHETYPE:archetype)&lt;br /&gt;
&lt;br /&gt;
Returns the archetype of the character.&lt;br /&gt;
&lt;br /&gt;
CharacterIsPolymorphedInto(CHARACTER:character, FIXEDSTRING:race)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; is polymorphed into &amp;lt;race&amp;gt;. Race can be a race (like HUMAN), but also a template (in case of a polymorph skill like Chicken Touch).&lt;br /&gt;
&lt;br /&gt;
CharacterIsPolymorphInteractionDisabled(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; has his interaction disabled because of a polymorph.&lt;br /&gt;
&lt;br /&gt;
ItemGet(OUT ITEM:item, GAMEOBJECT|FLOAT3:src, FLOAT:range, COMPARE:howTo [, COMPAREFUNC:compareFunc, FIXEDSTRING:rootTemplate, FIXEDSTRING:tag])&lt;br /&gt;
&lt;br /&gt;
Get an item within a certain range conforming to the filled in restraints.&lt;br /&gt;
&lt;br /&gt;
ItemGetFromInventory(OUT ITEM:item, CHARACTER|ITEM:object [, FIXEDSTRING:statsId, FIXEDSTRING:tag, INT:isEquiped])&lt;br /&gt;
&lt;br /&gt;
Returns the first item in the inventory conforming to the filled in restraints.&lt;br /&gt;
&lt;br /&gt;
ItemIsInCharacterInventory(ITEM:item, CHARACTER:object)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is in the inventory of the character&lt;br /&gt;
&lt;br /&gt;
ItemIsInTrigger(ITEM:item, TRIGGER:trigger)&lt;br /&gt;
&lt;br /&gt;
Check if item is in given trigger&lt;br /&gt;
&lt;br /&gt;
ItemGetStat(OUT FLOAT:statValue, ITEM:item, ITEMSTAT:statType)&lt;br /&gt;
&lt;br /&gt;
Returns the current value of the stat (Weight, ...)&lt;br /&gt;
&lt;br /&gt;
ItemIsMoving(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is moving or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsFalling(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is falling or not. (after teleport)&lt;br /&gt;
&lt;br /&gt;
ItemIsOpening(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is opening or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsClosing(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is closing or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsLocked(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is locked or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsMovable(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is movable or not.&lt;br /&gt;
&lt;br /&gt;
ItemCanBeLockPicked(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is can be opened by lockpicking.&lt;br /&gt;
&lt;br /&gt;
ItemIsOpen(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is open or not.&lt;br /&gt;
&lt;br /&gt;
IsStoryItem(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is a story item.&lt;br /&gt;
&lt;br /&gt;
ItemHasStatus(ITEM:item, STATUS:statusId)&lt;br /&gt;
&lt;br /&gt;
Returns if the item has the status.&lt;br /&gt;
&lt;br /&gt;
ItemIsDestroyed(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is destroyed.&lt;br /&gt;
&lt;br /&gt;
ItemGetTemplate(ITEM:item, OUT ITEMTEMPLATE:root)&lt;br /&gt;
&lt;br /&gt;
Returns the roottemplate of the item.&lt;br /&gt;
&lt;br /&gt;
ItemGetSkillId(ITEM:item, OUT SKILL:root)&lt;br /&gt;
&lt;br /&gt;
Returns the skillid of the item if it has one.&lt;br /&gt;
&lt;br /&gt;
ItemGetItemType(ITEM:item, OUT FIXEDSTRING:itemType)&lt;br /&gt;
&lt;br /&gt;
Returns the itemtype of the item: common, unique, rare, ...&lt;br /&gt;
&lt;br /&gt;
ItemGetStatusSourceCharacter(ITEM:item, STATUS:statusId, OUT CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get the source character of a status&lt;br /&gt;
&lt;br /&gt;
ItemGetStatusSourceItem(ITEM:item, STATUS:statusId, OUT ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Get the source item of a status&lt;br /&gt;
&lt;br /&gt;
ItemCanBeMoved(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item can be moved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EVENTS ==&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterEvent(CHARACTER:character, STRING:eventName)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterItemEvent(CHARACTER:character, ITEM:item, STRING:eventName)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterCharacterEvent(CHARACTER:character, CHARACTER:character, STRING:eventName)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
'''OnItemEvent(ITEM:item, STRING:eventName)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
'''OnItemDestroyed(ITEM:item)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when an item is destroyed&lt;br /&gt;
&lt;br /&gt;
'''OnItemDestroying(ITEM:item)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when an item is being destroyed&lt;br /&gt;
&lt;br /&gt;
'''OnItemOpened(ITEM:item)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when an item is opened&lt;br /&gt;
&lt;br /&gt;
'''OnItemClosed(ITEM:item)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when an item is closed&lt;br /&gt;
&lt;br /&gt;
'''OnItemDropped(ITEM:item, STRING:itemTemplate)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when an item is dropped&lt;br /&gt;
&lt;br /&gt;
'''OnGlobalFlagSet(FIXEDSTRING:eventName)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a global event is set&lt;br /&gt;
&lt;br /&gt;
'''OnGlobalFlagCleared(FIXEDSTRING:eventName)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a global event is cleared&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterFlagSet(FIXEDSTRING:eventName, CHARACTER:character)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a dialog event is set on a character&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterFlagCleared(FIXEDSTRING:eventName, CHARACTER:character)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a dialog event is cleared on a character&lt;br /&gt;
&lt;br /&gt;
'''OnItemFlagSet(FIXEDSTRING:eventName, ITEM:item)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a dialog event is set on an item&lt;br /&gt;
&lt;br /&gt;
'''OItemFlagCleared(FIXEDSTRING:eventName, ITEM:item)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a dialog event is cleared on an item&lt;br /&gt;
&lt;br /&gt;
'''OnTimer(FIXEDSTRING:timerName)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a timer has ended&lt;br /&gt;
&lt;br /&gt;
'''OnInit(-)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the script is set&lt;br /&gt;
&lt;br /&gt;
'''OnLoaded(INT:major, INT:minor, INT:revision, INT:build)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the script is loaded from the savegame&lt;br /&gt;
&lt;br /&gt;
'''OnShutdown(-)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character's script is removed&lt;br /&gt;
&lt;br /&gt;
'''OnVariableCleared(FIXEDSTRING:varName)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when this object's script variable is cleared from Osiris with ClearVarObject&lt;br /&gt;
&lt;br /&gt;
'''OnCombatStarted(INT:combatID)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when combat starts&lt;br /&gt;
&lt;br /&gt;
'''OnCombatSwitched(CHARACTER:source, ITEM:source)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character switch from one combat to another&lt;br /&gt;
&lt;br /&gt;
'''OnLeftCombat(CHARACTER:source, ITEM:source)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character or item left the combat&lt;br /&gt;
&lt;br /&gt;
'''OnTurn(CHARACTER:source, ITEM:source)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character's turn starts&lt;br /&gt;
&lt;br /&gt;
'''OnTurnEnded(CHARACTER:source, ITEM:source)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character's turn ended&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterVitalityChanged(CHARACTER:character, FLOAT:percentage)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the characters's vitality changed&lt;br /&gt;
&lt;br /&gt;
'''OnItemVitalityChanged(ITEM:item, FLOAT:percentage)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the item's vitality changed&lt;br /&gt;
&lt;br /&gt;
'''OnAttackOfOpportunity(CHARACTER:target)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the characters gets an attack of opportunity on an enemy&lt;br /&gt;
&lt;br /&gt;
'''OnClearAttackOfOpportunity(-)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the characters attack of opportunity is cleared&lt;br /&gt;
&lt;br /&gt;
'''OnDamage(DAMAGE:type, FLOAT:percentage, CHARACTER:source, ITEM:source)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the object receives damage&lt;br /&gt;
&lt;br /&gt;
'''OnMiss(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character dodges something&lt;br /&gt;
&lt;br /&gt;
'''OnCriticalHit(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character is critical hit&lt;br /&gt;
&lt;br /&gt;
'''OnPreBlock(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown before the character blocks something (at the start of the attack animation)&lt;br /&gt;
&lt;br /&gt;
'''OnBlock(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character blocks something&lt;br /&gt;
&lt;br /&gt;
'''OnDie(CHARACTER:character, DAMAGE:type, CHARACTER:source, ITEM:source)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character dies&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterStatusAttempt(CHARACTER:character, STATUS:status)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character attempts to gain a status&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterStatusApplied(CHARACTER:character, STATUS:status)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character gains a status&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterStatusRemoved(CHARACTER:character, STATUS:status)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character loses a status&lt;br /&gt;
&lt;br /&gt;
'''OnItemStatusAttempt(ITEM:item, STATUS:status)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the item attempts to gain a status&lt;br /&gt;
&lt;br /&gt;
'''OnItemStatus(ITEM:item, STATUS:status)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the item gains a status&lt;br /&gt;
&lt;br /&gt;
'''OnItemStatusRemoved(ITEM:item, STATUS:status)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the item loses a status&lt;br /&gt;
&lt;br /&gt;
'''OnStatusCreateVisuals(STATUS:status)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the item should create the visuals for this status&lt;br /&gt;
&lt;br /&gt;
'''OnStatusDestroyVisuals(STATUS:status)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the item should destroy the visuals for this status&lt;br /&gt;
&lt;br /&gt;
'''OnSight(CHARACTER:character)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character sees another character&lt;br /&gt;
&lt;br /&gt;
'''OnLostSight(CHARACTER:character)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character doesn't see another character anymore&lt;br /&gt;
&lt;br /&gt;
'''OnUseItem(CHARACTER:source, ITEM:item)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character uses an item&lt;br /&gt;
&lt;br /&gt;
'''OnPickupItem(CHARACTER:source, ITEM:item)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character picks up an item&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterPreMovedItem(CHARACTER:source, ITEM:item)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Event thrown just before a character moves an item. No difference whether it is in the world or in their inventory&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterMovedItem(CHARACTER:source, ITEM:item)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character moved an item&lt;br /&gt;
&lt;br /&gt;
'''OnItemEquipped(CHARACTER:source, ITEM:item)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character equips an item&lt;br /&gt;
&lt;br /&gt;
'''OnItemUnequipped(CHARACTER:source, ITEM:item)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character unequips an item&lt;br /&gt;
&lt;br /&gt;
'''OnIterateCharacter(CHARACTER:character, FIXEDSTRING:eventId)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown by iterators&lt;br /&gt;
&lt;br /&gt;
'''OnIterateItem(ITEM:source, FIXEDSTRING:eventId)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown by iterators&lt;br /&gt;
&lt;br /&gt;
'''OnIterateCount(FIXEDSTRING:eventId, INTEGER:Count)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown by iterators after all iterations to inform you of the count.&lt;br /&gt;
&lt;br /&gt;
'''OnStoryOverride(-)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Throw when story overrides what the character was doing: teleport, movement, on/offstage&lt;br /&gt;
&lt;br /&gt;
'''OnTriggerEnter(CHARACTER:character, ITEM:item, FIXEDSTRING:eventId)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown by a character or item entering an EventTrigger&lt;br /&gt;
&lt;br /&gt;
'''OnTriggerLeave(CHARACTER:character, ITEM:item, FIXEDSTRING:eventId)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown by a character or item leaving an EventTrigger&lt;br /&gt;
&lt;br /&gt;
'''OnEnemyChanged(CHARACTER:character, CHARACTER:newEnemy)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character's currentenemy changes&lt;br /&gt;
&lt;br /&gt;
'''OnTalentUnlocked(CHARACTER:character, TALENT:newTalent)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character unlocks a new talent&lt;br /&gt;
&lt;br /&gt;
'''OnTalentLocked(CHARACTER:character, TALENT:removedTalent)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the there's a talent removed from a character&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterClassChanged(CHARACTER:character, FIXEDSTRING:class)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character changes class in the character creation screen&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterCreationStarted(CHARACTER:character, TRIGGER:creationPoint)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character creation has started, and gives where the character should walk to&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterCreationStopped(CHARACTER:character)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character creation has stopped&lt;br /&gt;
&lt;br /&gt;
'''OnFunction(FIXEDSTRING:functionName)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Throws an event on itself with the functionName. This is to fake function calls &lt;br /&gt;
&lt;br /&gt;
'''OnSkillCast(CHARACTER:character, SKILL_ID:skillID)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character casts a skill&lt;br /&gt;
&lt;br /&gt;
'''OnSkillCombatComment(CHARACTER:character, SKILL_ID:skillID)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the character needs to make a comment&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterUsedSkillOnMe(CHARACTER:character, SKILL_ID:skillID)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when you are hit by a skill from a character&lt;br /&gt;
&lt;br /&gt;
'''OnItemUnlocked(ITEM: item, CHARACTER:character, ITEM:key)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when an item gets unlocked by a character.&lt;br /&gt;
&lt;br /&gt;
'''OnAutomatedDialogEnded(STRING:dialogName, INT:instanceID)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a automated dialog is ended for this speaker&lt;br /&gt;
&lt;br /&gt;
'''OnAutomatedDialogStarted(STRING:dialogName, INT:instanceID)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a automated dialog is started for this speaker&lt;br /&gt;
&lt;br /&gt;
'''OnDialogStarted(STRING:dialogName, INT:instanceID)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a dialog is started for this speaker&lt;br /&gt;
&lt;br /&gt;
'''OnDialogEnded(STRING:dialogName, INT:instanceID)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a dialog is ended for this speaker&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeSensibleAction(FIXEDSTRING:regionID, INT:crimeID, FIXEDSTRING:reactionName, STRING:primaryDialog, CHARACTER:criminal1, CHARACTER:criminal2, CHARACTER:criminal3, CHARACTER:criminal4, INT:IsPrimary)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character needs to perform a sensible action against criminals&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeInterrogationRequest(FIXEDSTRING:regionID, INT:crimeID, CHARACTER:criminal1, CHARACTER:criminal2, CHARACTER:criminal3, CHARACTER:criminal4, STRING:interrogationDialog)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character needs to perform an interrogation against criminals&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeInvestigate(FLOAT3:CrimePosition, INT:crimeID)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
One NPC investigates a crimescene&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeAlarmed(FLOAT3:CrimePosition, INT:crimeID)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
All NPCs in a crimearea start looking around.&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeReturnToNormal(-)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Investigation or Alarm timed out.&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeAborted(-)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
The game interrupted the sensible action of this NPC.&lt;br /&gt;
&lt;br /&gt;
'''OnSplineControlPointReached(INT:Index, INT:EndReached, STRING:EventString)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character reached a spline node.&lt;br /&gt;
&lt;br /&gt;
''''OnFinishCalculationAi(-)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the calculation of the AI is finished.&lt;br /&gt;
&lt;br /&gt;
'''OnGrenadeLand(INT:hitObstacle, CHARACTER:caster)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when the grenades lands&lt;br /&gt;
&lt;br /&gt;
'''FetchCharacterApplyStatusData(CHARACTER:character, STATUS:status) RETURN(LIST&amp;lt;STATUS&amp;gt;:removeStatuses, STATUS:applyStatus, INT:turns)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Fetch from script which statuses to remove and apply.&lt;br /&gt;
&lt;br /&gt;
'''FetchItemApplyStatusData(ITEM:item, STATUS:status) RETURN(LIST&amp;lt;STATUS&amp;gt;:removeStatuses, STATUS:applyStatus, INT:turns)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Fetch from script which statuses to remove and apply.&lt;br /&gt;
&lt;br /&gt;
'''FetchItemSkillOnDamage(INT:damage, DAMAGE_TYPE:damageType) RETURN(INT:hasSkill, SKILL_ID:skillID, INT:casterLevel)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Fetch from script what skill to execute on damage.&lt;br /&gt;
&lt;br /&gt;
'''FetchSkillScore(SKILL_ID:skillId, CHARACTER:sourceCharacter, CHARACTER:targetCharacter1, ITEM:targetItem1, FLOAT3:targetPosition1, CHARACTER:targetCharacter2, ITEM:targetItem2, FLOAT3:targetPosition2) RETURN(FLOAT:score) &amp;lt;br /&amp;gt;&lt;br /&gt;
Fetch from script the score of a skill with set source and target&lt;br /&gt;
&lt;br /&gt;
'''OnActivate(-)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character/item activates&lt;br /&gt;
&lt;br /&gt;
'''OnDeactivate(-)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character/item deactivates&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterUsedSourcePoint(CHARACTER:character)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character uses a source point&lt;br /&gt;
&lt;br /&gt;
'''OnSkillAdded(CHARACTER:character, SKILL_ID:skillId, INT:learned)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character learns a skill&lt;br /&gt;
&lt;br /&gt;
'''OnSkillActivated(CHARACTER:character, SKILL_ID:skillId)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character activates (=adds to memory) a skill&lt;br /&gt;
&lt;br /&gt;
'''OnSkillDeactivated(CHARACTER:character, SKILL_ID:skillId)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character deactivates (=removes from memory) a skill&lt;br /&gt;
&lt;br /&gt;
'''OnItemFlagShared(FIXEDSTRING:eventName, ITEM:item, INT:newValue)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a dialog event is shared with an item&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterFlagShared(FIXEDSTRING:eventName, CHARACTER:character, INT:newValue)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a dialog event is shared with a character&lt;br /&gt;
&lt;br /&gt;
'''OnItemOffStageChanged(CHARACTER:character, INT:offstage)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character is set on/off stage&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterOffStageChanged(ITEM:item, INT:offstage)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a item is set on/off stage&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterTeleported(CHARACTER:target, CHARACTER:cause, FLOAT3:oldPosition, FLOAT3:newPosition, SKILL_ID:skillId)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character gets teleported with a teleport skill&lt;br /&gt;
&lt;br /&gt;
'''OnCombatTick(-)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when this object ticks in combat. Only thrown for objects that don't get a turn.&lt;br /&gt;
&lt;br /&gt;
'''OnCombatRoundStarted(INT:combatID, INT:roundID) &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a round in a combat starts&lt;br /&gt;
&lt;br /&gt;
'''OnReadyInCombat(CHARACTER:character, ITEM:item, INT:combatID)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character or item is ready in combat&lt;br /&gt;
&lt;br /&gt;
'''OnRegionLeft(CHARACTER:character, ITEM:item, FIXEDSTRING:region)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character or item leaves a region&lt;br /&gt;
&lt;br /&gt;
'''OnRegionEntered(CHARACTER:character, ITEM:item, FIXEDSTRING:region)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character or item enters a region&lt;br /&gt;
&lt;br /&gt;
'''OnRuneInserted(CHARACTER:character, ITEM:item, ITEMTEMPLATE:runeItemTemplate, INT:slot)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a &amp;lt;character&amp;gt; inserts a rune with roottemplate &amp;lt;runeItemTemplate&amp;gt; from an &amp;lt;item&amp;gt; at a specified &amp;lt;slot&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''OnRuneRemoved(CHARACTER:character, ITEM:item, ITEM:rune, INT:slot)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a &amp;lt;character&amp;gt; removes a &amp;lt;rune&amp;gt; from an &amp;lt;item&amp;gt; at a specified &amp;lt;slot&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterStartAttackObject(CHARACTER:defenderCharacter, ITEM:defenderItem, CHARACTER:attackerOwner, CHARACTER:attacker)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character attacks a character or item with default attack&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterStartAttackPosition(FLOAT3:position, CHARACTER:attackerOwner, CHARACTER:attacker)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown when a character attacks a position with default attack&lt;br /&gt;
&lt;br /&gt;
== INTERRUPTS ==&lt;br /&gt;
&lt;br /&gt;
'''OnMovementFailed(FLOAT3:targetPos)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the reaction is interrupted by a move action failing&lt;br /&gt;
&lt;br /&gt;
'''OnException(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the reaction is interrupted by an exception&lt;br /&gt;
&lt;br /&gt;
'''OnBetterReactionFound(FIXEDSTRING:reactionName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the reaction is interrupted by another reaction&lt;br /&gt;
&lt;br /&gt;
'''OnNoReactionFound(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the reaction is interrupted because no reaction is valid&lt;br /&gt;
&lt;br /&gt;
'''OnScriptDisabled(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the reaction is interrupted because the scriptcontroller is disabled&lt;br /&gt;
&lt;br /&gt;
'''OnManualInterrupt(FIXEDSTRING:reactionName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the reaction is interrupted using the interrupt action&lt;br /&gt;
&lt;br /&gt;
'''OnRegionSwap(FIXEDSTRING:oldLevel, FIXEDSTRING:newLevel)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the reaction is interrupted by a region swap&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Character_and_Item_Script_Triggers,_Calls,_and_Queries&amp;diff=5824</id>
		<title>Character and Item Script Triggers, Calls, and Queries</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Character_and_Item_Script_Triggers,_Calls,_and_Queries&amp;diff=5824"/>
		<updated>2018-03-02T11:47:57Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: /* INTERRUPTS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of almost every character and item script event trigger, call, and query. An event is what triggers the script, and always begin with ''On''. Queries provide information and are always inside an ''IF'' or ''CHECK.'' Calls are actions that are always after THEN.&lt;br /&gt;
&lt;br /&gt;
CharScript/ItemScript Functions&lt;br /&gt;
&lt;br /&gt;
== CALLS ==&lt;br /&gt;
&lt;br /&gt;
'''Set(OUT OBJECT:variable, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Set the value of a variable&lt;br /&gt;
&lt;br /&gt;
'''SetVar(CHARACTER|ITEM:object, FIXEDSTRING:variableName, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Set the value of a global variable&lt;br /&gt;
&lt;br /&gt;
'''Cast(OUT OBJECT variable, OBJECT value)'''&lt;br /&gt;
&lt;br /&gt;
Casts the value to the variable&lt;br /&gt;
&lt;br /&gt;
'''Print(OUT STRING:output, STRING:text)'''&lt;br /&gt;
&lt;br /&gt;
Prints the text to the output with possible parameters: [1], [2], ...&lt;br /&gt;
&lt;br /&gt;
'''Add(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT|FLOAT3:value)'''&lt;br /&gt;
&lt;br /&gt;
Adds both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Subtract(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT|FLOAT3:value)'''&lt;br /&gt;
&lt;br /&gt;
Subtracts both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Multiply(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT:value)'''&lt;br /&gt;
&lt;br /&gt;
Multiplies both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Divide(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT:value)'''&lt;br /&gt;
&lt;br /&gt;
Divides both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Abs(INOUT INT|FLOAT:variable)'''&lt;br /&gt;
&lt;br /&gt;
Takes the absolute value of a variable&lt;br /&gt;
&lt;br /&gt;
'''Clamp(INOUT INT|FLOAT:variable, INT|FLOAT:min, INT|FLOAT:max)'''&lt;br /&gt;
&lt;br /&gt;
Clamps a variable between min and max&lt;br /&gt;
&lt;br /&gt;
'''GetRandom(OUT OBJECT:variable, OBJECT:value, OBJECT:value, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Fills in the variable with random one of the values.&lt;br /&gt;
&lt;br /&gt;
'''GetWeightedRandom(OUT OBJECT:variable, OBJECT:value, INT|FLOAT:weight, ...)'''&lt;br /&gt;
&lt;br /&gt;
Gets a weighted random of the given values!&lt;br /&gt;
&lt;br /&gt;
'''GetRandomBetween(OUT INT|FLOAT:variable, INT|FLOAT:min, INT|FLOAT:max)'''&lt;br /&gt;
&lt;br /&gt;
Gets a random value between min and max (both included)&lt;br /&gt;
&lt;br /&gt;
'''GetRandomPositionInTrigger(OUT FLOAT3:variable, TRIGGER:areaTrigger)'''&lt;br /&gt;
&lt;br /&gt;
Get a random position in a trigger area&lt;br /&gt;
&lt;br /&gt;
'''GetElement(OUT OBJECT:variable, INT:index, OBJECT:value, OBJECT:value, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Fills in the variable with the index one of the values (starting from 0)&lt;br /&gt;
&lt;br /&gt;
'''SetPriority(FIXEDSTRING:reactionName, INT:priority)'''&lt;br /&gt;
&lt;br /&gt;
Changes the priority of a reaction. Priority 0 and below are not executed!&lt;br /&gt;
&lt;br /&gt;
'''DelayReaction(FIXEDSTRING:reactionName, FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
The reaction will not be chosen for the specified time&lt;br /&gt;
&lt;br /&gt;
'''SetScriptFrame(CHARACTER:character, FIXEDSTRING:frame)'''&lt;br /&gt;
&lt;br /&gt;
Sets the scriptframe on the character.&lt;br /&gt;
&lt;br /&gt;
'''ClearScriptFrame(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Clears the scriptframe on the character.&lt;br /&gt;
&lt;br /&gt;
'''Goto(FIXEDSTRING:labelName)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to the label. Two label names are built-in: &amp;quot;Start&amp;quot; for the first instruction of the reaction, and &amp;quot;End&amp;quot; for the last one.&lt;br /&gt;
&lt;br /&gt;
'''GotoIfEqual(OBJECT:variable, OBJECT:value, FIXEDSTRING:labelName)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to the label if the 2 objects are equal&lt;br /&gt;
&lt;br /&gt;
'''GotoRand(FIXEDSTRING:labelName, FIXEDSTRING:labelName, FIXEDSTRING:labelName, FIXEDSTRING:labelName, FIXEDSTRING:labelName)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to a random label in the list&lt;br /&gt;
&lt;br /&gt;
'''CreatePuddleAt(GAMEOBJECT|FLOAT3:target, SURFACE:type, INT:cellAmountMin, INT:cellAmountMax, INT:growAmountMin, INT:growAmountMax, )'''&lt;br /&gt;
&lt;br /&gt;
Spawn a puddle at the target's position for a certain lifetime (in turns)&lt;br /&gt;
&lt;br /&gt;
'''CreateSurfaceAt(GAMEOBJECT|FLOAT3:target, SURFACE:type, FLOAT:radius, INT:lifeTime[, GAMEOBJECT:owner])'''&lt;br /&gt;
&lt;br /&gt;
Spawn a surface at the target's position for a certain lifetime (in turns)&lt;br /&gt;
&lt;br /&gt;
'''CreateSurfaceInPolygon(GAMEOBJECT:owner, SURFACE:type, FLOAT:duration, FLOAT:growTimer, INT:growStep, GAMEOBJECT|FLOAT3:point1, GAMEOBJECT|FLOAT3:point2, GAMEOBJECT|FLOAT3:point3, ...)'''&lt;br /&gt;
&lt;br /&gt;
Spawn a polygon surface at the target's position. Grows &amp;lt;growStep&amp;gt; every &amp;lt;growTimer&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CreateSurfaceInAreaTrigger(GAMEOBJECT:owner, SURFACE:type, FLOAT:duration, FLOAT:growTimer, INT:growStep, TRIGGER:areaTrigger)'''&lt;br /&gt;
&lt;br /&gt;
Spawn a surface within &amp;lt;areaTrigger&amp;gt;. Grows &amp;lt;growStep&amp;gt; every &amp;lt;growTimer&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CreateConeSurfaceAt(GAMEOBJECT|FLOAT3:start, GAMEOBJECT|FLOAT3:target, SURFACE:type, FLOAT:radius, FLOAT:angle, FLOAT:duration)'''&lt;br /&gt;
&lt;br /&gt;
Spawn a Cone surface at the target's position&lt;br /&gt;
&lt;br /&gt;
'''PlayEffectAt(GAMEOBJECT|FLOAT3:target, STRING:effectName)'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect at the target's position&lt;br /&gt;
&lt;br /&gt;
'''PlayLoopEffectAt(OUT INT64:effectHandle, GAMEOBJECT|FLOAT3:target, STRING:effectName)'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect at the target's position&lt;br /&gt;
&lt;br /&gt;
'''ExplodeAt(GAMEOBJECT|FLOAT3:target, SKILL:projectileSkill, [INT:casterLevel=-1, CHARACTER|ITEM:cause])'''&lt;br /&gt;
&lt;br /&gt;
Trigger an explosion of a projectile skill at the target's position. The cause will trigger NPC behavior as if the cause casted the projectile&lt;br /&gt;
&lt;br /&gt;
'''DisplayText(CHARACTER|ITEM:target, FIXEDSTRING:text, FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
Displays text above the character/item for a certain amount of time. It will replace the current text, including dialogtext&lt;br /&gt;
&lt;br /&gt;
'''DisplayCombatInfoText(CHARACTER|ITEM:target, FIXEDSTRING:text, FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
Displays text above the character/item for a certain amount of time. It will replace the current text, including dialogtext&lt;br /&gt;
&lt;br /&gt;
'''StatusText(CHARACTER|ITEM:target, FIXEDSTRING:text)'''&lt;br /&gt;
&lt;br /&gt;
Adds statustext above the character/item for a short amount of time. Will not replace texts or dialogtexts&lt;br /&gt;
&lt;br /&gt;
'''DebugText(CHARACTER|ITEM:target, STRING:text)'''&lt;br /&gt;
&lt;br /&gt;
Adds debugtext above the character/item for a short amount of time.&lt;br /&gt;
&lt;br /&gt;
'''CombatLogText(CHARACTER|ITEM:target, FIXEDSTRING:text, INT:filterID, INT:broadcastID)'''&lt;br /&gt;
&lt;br /&gt;
Adds combatlog text inside the combat log window. Color-/SizeFormatting should already be applied, if not color and size of the string will be NORMAL. filterID determines what filter shows/hides the text. broadcastID determines who will be able to see the message (0 hearingrange. 1 party. 2 all)&lt;br /&gt;
&lt;br /&gt;
'''Log(STRING:text, ...)'''&lt;br /&gt;
&lt;br /&gt;
Log's the the scriptlog. (for debugging purposes)&lt;br /&gt;
&lt;br /&gt;
'''Output(STRING:text, ...)'''&lt;br /&gt;
&lt;br /&gt;
Pass text with optional parameters to the output panel (e.g. Output(&amp;quot;An int [1]&amp;quot;, INT:10))&lt;br /&gt;
&lt;br /&gt;
'''Assert(STRING:text, ...)'''&lt;br /&gt;
&lt;br /&gt;
Pass text with optional parameters to display as an assert message (e.g. Assert(&amp;quot;This number is wrong: [1]&amp;quot;, INT:666))&lt;br /&gt;
&lt;br /&gt;
'''Label(FIXEDSTRING:name)'''&lt;br /&gt;
&lt;br /&gt;
Marks this line as a label where Goto actions can jump to&lt;br /&gt;
&lt;br /&gt;
'''StartTimer(FIXEDSTRING:timerName, FLOAT:timeInSeconds, INT:repeatCount)'''&lt;br /&gt;
&lt;br /&gt;
Start a timer which will throw the timer event. Set repeatcount &amp;lt; 0 for a permanent timer.&lt;br /&gt;
&lt;br /&gt;
'''StopTimer(FIXEDSTRING:timerName)'''&lt;br /&gt;
&lt;br /&gt;
Stop a timer which will throw the timer event&lt;br /&gt;
&lt;br /&gt;
'''DialogStart(OUT INT:instanceId, STRING:dialog, CHARACTER|ITEM:target, CHARACTER|ITEM:target, CHARACTER|ITEM:target, CHARACTER|ITEM:target)'''&lt;br /&gt;
&lt;br /&gt;
Start a dialog between the targets. You can specify fewer targets than the maximum number.&lt;br /&gt;
&lt;br /&gt;
{{warning|Starting a dialog from behaviour script will always start it as an [[Dialog_editor#Automated|Automated Dialog]]. Interactive dialogs can only be started from [[Osiris]].}}&lt;br /&gt;
&lt;br /&gt;
'''DialogRequestStop(CHARACTER|ITEM:speaker, STRING:dialog)'''&lt;br /&gt;
&lt;br /&gt;
Stops a certain dialog on a certain speaker&lt;br /&gt;
&lt;br /&gt;
'''Check(-)'''&lt;br /&gt;
&lt;br /&gt;
Reevaluate the conditions in the CHECK section of this reaction&lt;br /&gt;
&lt;br /&gt;
'''Reset(-)'''&lt;br /&gt;
&lt;br /&gt;
Resets the current reaction. It will start from the beginning again&lt;br /&gt;
&lt;br /&gt;
'''Interrupt(FIXEDSTRING:reactionName)'''&lt;br /&gt;
&lt;br /&gt;
Interrupt the reaction.&lt;br /&gt;
&lt;br /&gt;
'''GlobalSetEvent(FIXEDSTRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Sets a global event. Scripts and Story can catch it.&lt;br /&gt;
&lt;br /&gt;
'''GlobalClearEvent(FIXEDSTRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Clears a global event. Scripts and Story can catch it.&lt;br /&gt;
&lt;br /&gt;
'''StopLoopEffect(INT64:fxHandle)'''&lt;br /&gt;
&lt;br /&gt;
Stops a looping effect&lt;br /&gt;
&lt;br /&gt;
'''IterateItems(FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each item. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateItemsNear(GAMEOBJECT:source, FLOAT:radius, FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each item in range. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateItemsOnObject(CHARACTER|ITEM:source, FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each item standing on the source. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateParty(FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, CHARACTER:partyMember, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each member of all parties. If you pass a party member only members of that party will be considered. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharacters(FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharactersNear(GAMEOBJECT:source, FLOAT:radius, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character in range. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharactersOnObject(CHARACTER|ITEM:source, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
Launch iterate event for each character standing on the source. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharactersInCombat(CHARACTER|ITEM:source, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character in combat with the source. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateHostilesFor(CHARACTER:source, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character who is targetting the source. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''SpawnCharacter(OUT CHARACTER:result, CHARACTERTEMPLATE:rootTemplate, GAMEOBJECT|FLOAT3:position, INT:playSpawn, [INT:isSummon=0, CHARACTER:summonOwner=null, INT:overrideLevel=-1])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a character&lt;br /&gt;
&lt;br /&gt;
'''SpawnItem(ITEMTEMPLATE:rootTemplate,GAMEOBJECT|FLOAT3:position, OUT ITEM:result)'''&lt;br /&gt;
&lt;br /&gt;
Spawns an item&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalProjectile(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,FLOAT3:direction,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at the source (with offset, can be null) shooting at the target&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalProjectileAt(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,GAMEOBJECT|FLOAT3:target,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at the source (with offset, can be null) shooting at the target&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldProjectile(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,FLOAT3:direction,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at worldPos shooting at the target. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldProjectileAt(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,GAMEOBJECT|FLOAT3:target,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at worldPos shooting at the target. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalCone(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,FLOAT3:direction,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from source (with offset, can be null) in a direction&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalConeAt(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,GAMEOBJECT|FLOAT3:target,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from source (with offset, can be null) at the target&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldCone(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,FLOAT3:direction,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from worldPos in a direction. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldConeAt(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,GAMEOBJECT|FLOAT3:target,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from worldPos at the target. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''SetVisible(CHARACTER|ITEM:object, INT:visible)'''&lt;br /&gt;
&lt;br /&gt;
Sets a character or item visible or not.&lt;br /&gt;
&lt;br /&gt;
'''RotateY(INOUT FLOAT3:vector, FLOAT:degrees)'''&lt;br /&gt;
&lt;br /&gt;
Rotate the vector around the Y-axis for a certain angle (in degrees)&lt;br /&gt;
&lt;br /&gt;
'''SetHealth(CHARACTER|ITEM:target, FLOAT:percent)'''&lt;br /&gt;
&lt;br /&gt;
Set a characters or items health on the given percentage. (percentage between 0 and 1)&lt;br /&gt;
&lt;br /&gt;
'''PlaySound(CHARACTER|ITEM:target, STRING:soundEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a sound event at the target&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicForEveryone(STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on all the clients&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicOnCharacter(CHARACTER:target, STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on a character for all peers (3D)&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicForPeer(CHARACTER:target, STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on the peer of the character&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicForPeerWithInstrument(CHARACTER:target, CHARACTER:charInstrument, STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on the peer of the character concated with _INSTRUMENT&lt;br /&gt;
&lt;br /&gt;
'''SetX(INOUT FLOAT3:vector, FLOAT|INT:value)'''&lt;br /&gt;
&lt;br /&gt;
Sets the X component of the FLOAT3&lt;br /&gt;
&lt;br /&gt;
'''SetY(INOUT FLOAT3:vector, FLOAT|INT:value)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Y component of the FLOAT3&lt;br /&gt;
&lt;br /&gt;
'''SetZ(INOUT FLOAT3:vector, FLOAT|INT:value)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Z component of the FLOAT3&lt;br /&gt;
&lt;br /&gt;
'''SetAtmosphere(FIXEDSTRING:atmosphereTriggerUUID, FIXEDSTRING:atmosphere)'''&lt;br /&gt;
&lt;br /&gt;
Changes the atmosphere of the trigger&lt;br /&gt;
&lt;br /&gt;
'''ResetAtmosphere(FIXEDSTRING:atmosphereTriggerUUID)'''&lt;br /&gt;
&lt;br /&gt;
Resets the atmosphere of the trigger&lt;br /&gt;
&lt;br /&gt;
'''AddStatusInfluence(CHARACTER|ITEM:object, STATUS:statusId, FLOAT:strength, [FIXEDSTRING:extraData=&amp;quot;&amp;quot;], [INT:isWeather=1], [INT:force=1])'''&lt;br /&gt;
&lt;br /&gt;
Adds the status influence strength on the object.&lt;br /&gt;
&lt;br /&gt;
'''RemoveStatusInfluence(CHARACTER|ITEM:object, STATUS:statusId, FLOAT:strength, [FIXEDSTRING:extraData=&amp;quot;&amp;quot;], [INT:isWeather=1])'''&lt;br /&gt;
&lt;br /&gt;
Removes the status influence strength on the object.&lt;br /&gt;
&lt;br /&gt;
'''AddTemporaryStatusInfluence(CHARACTER|ITEM:source, CHARACTER|ITEM:object, STATUS:statusId, FLOAT:strength, [FIXEDSTRING:extraData=&amp;quot;&amp;quot;], [INT:isWeather=1])'''&lt;br /&gt;
&lt;br /&gt;
Adds a temporary status influence strength on the object.. It will be gone in a few seconds if it's not set again&lt;br /&gt;
&lt;br /&gt;
'''CallFunction(FIXEDSTRING:functionName)'''&lt;br /&gt;
&lt;br /&gt;
Calls a function with the ID&lt;br /&gt;
&lt;br /&gt;
'''SetMaterial(CHARACTER|ITEM:object, FIXEDSTRING:materialUUID, INT:duration, INT:applyOnBody, INT:applyOnArmor, INT:applyOnWeapon[)'''&lt;br /&gt;
&lt;br /&gt;
Changes the material of the object for a set time (in turns), -1 is infinite. applyNormalMap: Copy the original materials normal map&lt;br /&gt;
&lt;br /&gt;
'''TeleportTo(CHARACTER|ITEM:object, GAMEOBJECT|FLOAT3:target, [INT:Force=0])'''&lt;br /&gt;
&lt;br /&gt;
Teleport object to or near the target&lt;br /&gt;
&lt;br /&gt;
'''Transform(CHARACTER|ITEM:object, CHARACTERTEMPLATE|ITEMTEMPLATE:root [, FIXEDSTRING:fx, INT:replaceScripts=1, OUT FLOAT:currentHP])'''&lt;br /&gt;
&lt;br /&gt;
Transforms &amp;lt;object&amp;gt; using &amp;lt;root&amp;gt;, returns &amp;lt;currentHP&amp;gt;, plays &amp;lt;fx&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''SaveGame(FIXEDSTRING:saveGameName)'''&lt;br /&gt;
&lt;br /&gt;
Save the savegame with name &amp;lt;saveGameName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LoadGame(FIXEDSTRING:saveGameName)'''&lt;br /&gt;
&lt;br /&gt;
Load the savegame with name &amp;lt;saveGameName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LoadLevel(FIXEDSTRING:levelName)'''&lt;br /&gt;
&lt;br /&gt;
Load the level with name &amp;lt;levelName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''KillCombat(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Kill all the enemies in the combat which contains &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SetTag(CHARACTER|ITEM:object, FIXEDSTRING:tag)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Tag on the Object&lt;br /&gt;
&lt;br /&gt;
'''ClearTag(CHARACTER|ITEM:object, FIXEDSTRING:tag)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Tag on the Object&lt;br /&gt;
&lt;br /&gt;
'''SetGlobalFlag(FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Global Flag&lt;br /&gt;
&lt;br /&gt;
'''ClearGlobalFlag(FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Global Flag&lt;br /&gt;
&lt;br /&gt;
'''SetFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Flag on the Object&lt;br /&gt;
&lt;br /&gt;
'''ClearFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Flag on the Object&lt;br /&gt;
&lt;br /&gt;
'''SetUserFlag(CHARACTER:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Flag on the user's characters&lt;br /&gt;
&lt;br /&gt;
'''ClearUserFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Flag on the user's characters&lt;br /&gt;
&lt;br /&gt;
'''SetPartyFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Flag on the party's characters&lt;br /&gt;
&lt;br /&gt;
'''ClearPartyFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Flag on the party's characters&lt;br /&gt;
&lt;br /&gt;
'''StartVoiceBark(STRING:barkName, CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Start a voicebark on character&lt;br /&gt;
&lt;br /&gt;
'''ConfrontationDone(INT: CrimeID, CHARACTER:lead, CHARACTER:criminal, ...)'''&lt;br /&gt;
&lt;br /&gt;
Resolve the crime with id CrimeID for the specified criminals&lt;br /&gt;
&lt;br /&gt;
'''CrimesceneInvestigationDone(CHARACTER:investigator)'''&lt;br /&gt;
&lt;br /&gt;
Crimescene is considered investigated by this NPC, start looking for culprits&lt;br /&gt;
&lt;br /&gt;
'''ListAdd(LIST&amp;lt;OBJECT&amp;gt;:list, OBJECT:entry)'''&lt;br /&gt;
&lt;br /&gt;
Add &amp;lt;entry&amp;gt; at the back of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ListRemove(LIST&amp;lt;OBJECT&amp;gt;:list, INT:index)'''&lt;br /&gt;
&lt;br /&gt;
Remove the entry at &amp;lt;index&amp;gt; of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ListSet(LIST&amp;lt;OBJECT&amp;gt;:list, INT:index, OBJECT:entry)'''&lt;br /&gt;
&lt;br /&gt;
Set the entry at &amp;lt;index&amp;gt; of &amp;lt;list&amp;gt; to &amp;lt;entry&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ListClear(LIST&amp;lt;OBJECT&amp;gt;:list)'''&lt;br /&gt;
&lt;br /&gt;
Remove all entries of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''EndTurn(CHARACTER|ITEM:Target)'''&lt;br /&gt;
&lt;br /&gt;
Ends the object's current turn&lt;br /&gt;
&lt;br /&gt;
'''SetCanFight(CHARACTER|ITEM:entity, INT:enabled[, INT:wholeGroup=0])'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the entity can fight. Optional for the whole group&lt;br /&gt;
&lt;br /&gt;
'''SetCanJoinCombat(CHARACTER|ITEM:entity, INT:enabled[, INT:wholeGroup=0])'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the entity can join combats. Optional for the whole group&lt;br /&gt;
&lt;br /&gt;
'''SetIsBoss(CHARACTER|ITEM:entity, INT:enabled)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the entity is a boss.&lt;br /&gt;
&lt;br /&gt;
'''GetAIHintTriggers(OUT LIST&amp;lt;TRIGGER&amp;gt;:triggers[, [LIST]FIXEDSTRING:tags, INT:needsAllTags = -1)'''&lt;br /&gt;
&lt;br /&gt;
Returns all AIHintAreaTriggers in &amp;lt;triggers&amp;gt;. Uses contraints if set.&lt;br /&gt;
&lt;br /&gt;
'''SetCombatTimeout(CHARACTER|ITEM:entity, FLOAT:timer)'''&lt;br /&gt;
&lt;br /&gt;
Overwrites the entity's combat timeout check.&lt;br /&gt;
&lt;br /&gt;
'''ResetCombatTimeout(CHARACTER|ITEM:entity)'''&lt;br /&gt;
&lt;br /&gt;
Resets the entity's combat timeout check.&lt;br /&gt;
&lt;br /&gt;
'''EnterCombat(CHARACTER|ITEM:source, CHARACTER|ITEM:target)'''&lt;br /&gt;
&lt;br /&gt;
Enters combat with target&lt;br /&gt;
&lt;br /&gt;
'''LeaveCombat(CHARACTER|ITEM:source)'''&lt;br /&gt;
&lt;br /&gt;
Leaves the combat&lt;br /&gt;
&lt;br /&gt;
'''SetFaction(CHARACTER|ITEM:target, FIXEDSTRING:faction)'''&lt;br /&gt;
&lt;br /&gt;
Changes the faction of a character or item&lt;br /&gt;
&lt;br /&gt;
'''SetInvulnerable(CHARACTER|ITEM:target, INT:bool)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character or item invulnerable or not. (Allow damage)&lt;br /&gt;
&lt;br /&gt;
'''JumpToTurn(CHARACTER|ITEM:Target)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to targets turn (ends the current turn)&lt;br /&gt;
&lt;br /&gt;
'''Sleep(FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
Sleeps for a certain amount of time&lt;br /&gt;
&lt;br /&gt;
'''CharacterAttack(CHARACTER|ITEM|FLOAT3:target [,INT:alwaysHit])'''&lt;br /&gt;
&lt;br /&gt;
Moves in weapon range and attacks the target&lt;br /&gt;
&lt;br /&gt;
'''CharacterAttackWithoutMove(CHARACTER|ITEM|FLOAT3:target [,INT:alwaysHit])'''&lt;br /&gt;
&lt;br /&gt;
Attacks the target without checking weaponranges and without moving&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveTo(GAMEOBJECT|FLOAT3:target, [INT:running=0, INT:shouldArrive=0, INT:longPath=0, FLOAT:minDistance=1.5, FLOAT:maxDistance=minDistance+2.5])'''&lt;br /&gt;
&lt;br /&gt;
Move to the target. Set shouldArrive to 1 if you want a guaranteed move. (teleports on fail) &lt;br /&gt;
&lt;br /&gt;
'''CharacterAiMove(FLOAT3:target, CHARACTER:targetCharacter, ITEM:targetItem)'''&lt;br /&gt;
&lt;br /&gt;
Moves to the target, calculated by the AI. Should only be used with results from the AI!&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveInRange(GAMEOBJECT|FLOAT3:target, FLOAT:rangeMin, FLOAT:rangeMax, INT:running, [LIST&amp;lt;TRIGGER&amp;gt;:hintTriggers=null, INT:mustBeInTrigger=0])'''&lt;br /&gt;
&lt;br /&gt;
Move within a certain range of target. Optionally pass hinttriggers in which the result is preferred/necessary.&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveInWeaponRange(GAMEOBJECT|FLOAT3:target, INT:running, [LIST&amp;lt;TRIGGER&amp;gt;:hintTriggers=null, INT:mustBeInTrigger=0])'''&lt;br /&gt;
&lt;br /&gt;
Move within weapon range of target. Optionally pass hinttriggers in which the result is preferred/necessary.&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveInSkillRange(GAMEOBJECT|FLOAT3:target, SKILL:skill, INT:running, [LIST&amp;lt;TRIGGER&amp;gt;:hintTriggers=null, INT:mustBeInTrigger=0])'''&lt;br /&gt;
&lt;br /&gt;
Move within skill range of target. Optionally pass hinttriggers in which the result is preferred/necessary.&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveOutOfSight(FLOAT:angle)'''&lt;br /&gt;
&lt;br /&gt;
Move out of screen&lt;br /&gt;
&lt;br /&gt;
'''CharacterPlayAnimation(FIXEDSTRING:animation [, INT:exitOnFinish=1, INT:waitForCompletion=1])'''&lt;br /&gt;
&lt;br /&gt;
Plays a certain animation ExitOnFinish means if the exit will kill itself after it was played (revert back to still) &lt;br /&gt;
&lt;br /&gt;
'''CharacterStopAnimation(-)'''&lt;br /&gt;
&lt;br /&gt;
Stops all animations.&lt;br /&gt;
&lt;br /&gt;
'''CharacterPickUpItem(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Moves close enough to the item if necessary and picks it up&lt;br /&gt;
&lt;br /&gt;
'''CharacterUseItem(ITEM:item [, INTEGER:LongPath])'''&lt;br /&gt;
&lt;br /&gt;
Moves close enough to the item if necessary and uses it&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveItem(ITEM:item, INTEGER:ignoreWeight, INTEGER:ignoreAPCost [, INTEGER:ignoreDangerousSurfaces=1, INT:amount=-1, GAMEOBJECT|FLOAT3:destination])'''&lt;br /&gt;
&lt;br /&gt;
Moves close enough to the item if necessary and moves it to the destination. Will try to find a destination if not supplied.&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddSkill(CHARACTER:character, SKILL:skill[, INT:ShowNotification=0])'''&lt;br /&gt;
&lt;br /&gt;
Adds &amp;lt;skill&amp;gt; to &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveSkill(CHARACTER:character, SKILL:skill)'''&lt;br /&gt;
&lt;br /&gt;
Removes &amp;lt;skill&amp;gt; from &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterUseSkill(SKILL:skill, GAMEOBJECT|FLOAT3:target [, GAMEOBJECT|FLOAT3:target2, ITEM:skillItem, INT:ignoreHasSkill=0])'''&lt;br /&gt;
&lt;br /&gt;
Cast a skill&lt;br /&gt;
&lt;br /&gt;
'''CharacterAppearAt(GAMEOBJECT|FLOAT3:target, INT:playspawn)'''&lt;br /&gt;
&lt;br /&gt;
Appear at the target&lt;br /&gt;
&lt;br /&gt;
'''CharacterAppearOutOfSightTo(GAMEOBJECT:target, FLOAT:angle, INT:playspawn)'''&lt;br /&gt;
&lt;br /&gt;
Appears out of sight to the players from a certain angle while being able to reach target&lt;br /&gt;
&lt;br /&gt;
'''CharacterAppearOnTrailOutOfSightTo(CHARACTER:target, FLOAT:angle, INT:playspawn)'''&lt;br /&gt;
&lt;br /&gt;
Appears out of sight to the players, on its previous locations, from a certain angle while being able to reach target&lt;br /&gt;
&lt;br /&gt;
'''CharacterDisappear(FLOAT:angle[, INTEGER:isRunning=0])'''&lt;br /&gt;
&lt;br /&gt;
Move out of screen and go of stage, will run if &amp;lt;isRunning&amp;gt; is not 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetOffStage(-)'''&lt;br /&gt;
&lt;br /&gt;
Set Off Stage&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetOnStage(-)'''&lt;br /&gt;
&lt;br /&gt;
Set On Stage&lt;br /&gt;
&lt;br /&gt;
'''CharacterLookAt(GAMEOBJECT|FLOAT3|SPLINE:target[, INT:snapToTarget=0, INT:angleTolerance=0])'''&lt;br /&gt;
&lt;br /&gt;
Rotates the character to look at the target (Closest spline point in case of a spline).&lt;br /&gt;
&lt;br /&gt;
'''CharacterLookFrom(GAMEOBJECT|SPLINE:target[, INT:snapToTarget=0])'''&lt;br /&gt;
&lt;br /&gt;
Rotates to the character so it has the same rotation as the target (Closest spline point in case of a spline).&lt;br /&gt;
&lt;br /&gt;
'''CharacterFollow(CHARACTER:target, FLOAT:durationInSeconds, INT:run)'''&lt;br /&gt;
&lt;br /&gt;
Follow the target for a certain time&lt;br /&gt;
&lt;br /&gt;
'''CharacterFollowOwnerOrLeader(FLOAT:durationInSeconds, INT:run)'''&lt;br /&gt;
&lt;br /&gt;
Follow the leader or owner for a certain time&lt;br /&gt;
&lt;br /&gt;
'''CharacterWander(FLOAT|TRIGGER:range, FLOAT:durationInSeconds [, INT:run, GAMEOBJECT:anchor])'''&lt;br /&gt;
&lt;br /&gt;
Wander around for a certain time&lt;br /&gt;
&lt;br /&gt;
'''CharacterSwitchWeaponType(WEAPON:type)'''&lt;br /&gt;
&lt;br /&gt;
If necessary switch to the new weapon type&lt;br /&gt;
&lt;br /&gt;
'''CharacterFleeFrom(RELATION:relation, FLOAT:range)'''&lt;br /&gt;
&lt;br /&gt;
Run away from certain characters if necessary&lt;br /&gt;
'''&lt;br /&gt;
CharacterFleeFromSurface(SURFACE:surface)'''&lt;br /&gt;
&lt;br /&gt;
Run away from a certain surface if necessary&lt;br /&gt;
&lt;br /&gt;
'''CharacterFleeFromDangerousSurface(-)'''&lt;br /&gt;
&lt;br /&gt;
Run away from a dangerous surfaces if necessary&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddSourcePoints(CHARACTER:character, INT:amount)'''&lt;br /&gt;
&lt;br /&gt;
Adds x source points (x can be negative to substract)&lt;br /&gt;
&lt;br /&gt;
'''CharacterDie(CHARACTER:character[, DEATH:type=DoT])'''&lt;br /&gt;
&lt;br /&gt;
Kills the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterHeal(CHARACTER:character, FLOAT:percentage)'''&lt;br /&gt;
&lt;br /&gt;
Heals the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterConsume(CHARACTER:character, POTION:potion)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character consume a potion. Doesn't cost any AP and will just execute the result of the potion.&lt;br /&gt;
&lt;br /&gt;
'''CharacterDisableAllCrimes(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Disables all generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterEnableAllCrimes(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Enables all generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
'''&lt;br /&gt;
CharacterEnableCrime(CHARACTER:target, STRING:crime, ...)'''&lt;br /&gt;
&lt;br /&gt;
Enables the specified generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterDisableCrime(CHARACTER:target, STRING:crime, ...)'''&lt;br /&gt;
&lt;br /&gt;
Disables the specified generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetLongInvestigationDuration(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Doubles the time it takes for the investigation to time out. Use this when the character needs to move a long path before investigating.&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiCalculate(-)'''&lt;br /&gt;
&lt;br /&gt;
Calculate the AI of the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiStopCalculate(-)'''&lt;br /&gt;
&lt;br /&gt;
Stop the calculation of the AI of the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiFinishMoveSkill(-)'''&lt;br /&gt;
&lt;br /&gt;
Finish the current MoveSkill.&lt;br /&gt;
'''&lt;br /&gt;
CharacterAiAddInterestingItem(CHARACTER:character, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Make it interesting for the AI to destroy that Item&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiRemoveInterestingItem(CHARACTER:character, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Make it no longer interesting for the AI to destroy that Item&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetArchetype(CHARACTER:character, ARCHETYPE:archetype)'''&lt;br /&gt;
&lt;br /&gt;
Sets the archetype of the character, used in AI calculations&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetStoryNPC(CHARACTER:character, INT:bool)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character storyNPC or not.&lt;br /&gt;
'''&lt;br /&gt;
CharacterAddActionPoints(CHARACTER:character, INT:amount)'''&lt;br /&gt;
&lt;br /&gt;
Give character some action points&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetImmortal(CHARACTER:character, INT:bool)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character immortal or not. (Allow dying)&lt;br /&gt;
&lt;br /&gt;
'''CharacterPlayEffect(CHARACTER:character, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect on the character and it follows the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterPlayLoopEffect(OUT INT64:effectHandle, CHARACTER:character, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays a looping effect on the character and it follows the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterEvent(CHARACTER:character, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw a character event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''CharacterItemEvent(CHARACTER:character, ITEM:item, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw a character/item event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''CharacterCharacterEvent(CHARACTER:character1, CHARACTER:character2, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw a character/character event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetRelationIndivToIndiv(CHARACTER:source, CHARACTER:target, INT:relation)'''&lt;br /&gt;
&lt;br /&gt;
Changes the relationship between 2 characters.&lt;br /&gt;
'''&lt;br /&gt;
CharacterForceUpdate(INT:forceUpdate)'''&lt;br /&gt;
&lt;br /&gt;
Makes sure the attached character is always being update or not. &lt;br /&gt;
'''&lt;br /&gt;
CharacterSetEnemy(CHARACTER:character, CHARACTER:enemy)'''&lt;br /&gt;
&lt;br /&gt;
Sets the current enemy of character&lt;br /&gt;
&lt;br /&gt;
'''CharacterApplyStatus(CHARACTER:character, STATUS:statusId [, INT:turns=null, INT:force=0])'''&lt;br /&gt;
&lt;br /&gt;
Applies the status to the character When turns is -1 it's a permanent status When turns is -2 it's a keep alive status (which means it will die if it's not applied again within 1 second) &lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveStatus(CHARACTER:character, STATUS:statusId [, STATUS:reasonStatusID=null])'''&lt;br /&gt;
&lt;br /&gt;
Removes the status from the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterDestroy(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Destroys the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetCanSpotSneakers(CHARACTER:character, INT:enabled)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the character can spot sneaking characters.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetAttackOfOpportunity(CHARACTER:character, INT:enabled)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the character can do attack of opportunities.&lt;br /&gt;
&lt;br /&gt;
'''CharacterResurrect(CHARACTER:character [, INT:Percentage = 100])'''&lt;br /&gt;
&lt;br /&gt;
Resurrects the character at [2]% health.&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddToInventory(CHARACTER:character, FIXEDSTRING:itemStatsObject[, INT:amount, INT:showInTrade=1])'''&lt;br /&gt;
&lt;br /&gt;
Add the item to the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveFromInventory(CHARACTER:character, FIXEDSTRING:itemStatsObject[, INT:amount])'''&lt;br /&gt;
&lt;br /&gt;
Remove the item from the character. If Amount is -1, then all are removed&lt;br /&gt;
&lt;br /&gt;
'''CharacterDrinkPotion(FIXEDSTRING:statID)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character drink a potion from the inventory.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetAnimationOverride(CHARACTER:character, FIXEDSTRING:animation)'''&lt;br /&gt;
&lt;br /&gt;
Sets an animation override, only walk/run/die animations can override it.&lt;br /&gt;
&lt;br /&gt;
'''CharacterUseActionPoints(CHARACTER:character, INT:amount [, OUT INT:succeeded])'''&lt;br /&gt;
&lt;br /&gt;
Uses x action points&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddTreasureTable(CHARACTER:character, FIXEDSTRING:treasureTable)'''&lt;br /&gt;
&lt;br /&gt;
Adds &amp;lt;treasureTable&amp;gt; to the treasure list of &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveTreasureTable(CHARACTER:character, FIXEDSTRING:treasureTable)'''&lt;br /&gt;
&lt;br /&gt;
Removes &amp;lt;treasureTable&amp;gt; from the treasure list of &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterClearTreasureTables(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Removes all treasure tables from &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetTemporaryHostileRelation(CHARACTER:character, CHARACTER:otherCharacter)'''&lt;br /&gt;
&lt;br /&gt;
Creates a temporary hostile relation between the 2 characters!&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetFightMode(CHARACTER:character, INT:fight [, INT:force=0])'''&lt;br /&gt;
&lt;br /&gt;
Set the character in sheath/unsheated mode.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetStats(CHARACTER:character, FIXEDSTRING:statsEntry [, INT:keepVitality=0, INT:keepAP=0, INT:keepLevel=0, OUT FLOAT:currentHP])'''&lt;br /&gt;
&lt;br /&gt;
Applies &amp;lt;statsEntry&amp;gt; from character.xlsm to &amp;lt;character&amp;gt;, returns &amp;lt;currentHP&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetWalkSpeedOverride(CHARACTER:character, INTEGER:override [, FLOAT:walkSpeed])'''&lt;br /&gt;
&lt;br /&gt;
Sets walk speed override of &amp;lt;character&amp;gt;, removes it if &amp;lt;override&amp;gt; is 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetRunSpeedOverride(CHARACTER:character, INTEGER:override [, FLOAT:runSpeed])'''&lt;br /&gt;
&lt;br /&gt;
Sets run speed override of &amp;lt;character&amp;gt;, removes it if &amp;lt;override&amp;gt; is 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetHasDialog(CHARACTER:character, INTEGER:bool)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the dialog of the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterInitPatrol(SPLINE:spline, INT:splineIndex, INT:reversed, INT:running)'''&lt;br /&gt;
&lt;br /&gt;
Start patroling from the given index along the given spline with the given character.&lt;br /&gt;
&lt;br /&gt;
'''CharacterStartPatrol(SPLINE:spline, INT:splineIndex, INT:reversed, INT:running)'''&lt;br /&gt;
&lt;br /&gt;
Start patroling from the given index along the given spline with the given character.&lt;br /&gt;
&lt;br /&gt;
'''CharacterStopPatrol(-)'''&lt;br /&gt;
&lt;br /&gt;
Let the character stop patrolling whatever spline he's on!&lt;br /&gt;
&lt;br /&gt;
'''CharacterInterruptPatrol(-)'''&lt;br /&gt;
&lt;br /&gt;
Call when the patrol should interrupt so the guard stops moving to the next spline. If this is called when the character is deactivated, a caret will take his place.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetAnimationSetOverride(CHARACTER:source, FIXEDSTRING:override)'''&lt;br /&gt;
&lt;br /&gt;
Sets an animation set override for a character. Empty fixedstring clears the override.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetFloating(CHARACTER:target, INTEGER:isFloating)'''&lt;br /&gt;
&lt;br /&gt;
Sets &amp;lt;target&amp;gt; floating if &amp;lt;isFloating&amp;gt; is not 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterResetCooldowns(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Resets the skill cooldowns for &amp;lt;target&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ItemEvent(ITEM:item, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw an item event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayAnimation(FIXEDSTRING:animation)'''&lt;br /&gt;
&lt;br /&gt;
Plays an animation on the item&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayAnimationTo(FIXEDSTRING:animation, FLOAT:targetPercentage, [FLOAT:speed])'''&lt;br /&gt;
&lt;br /&gt;
Plays an animation on the item to the target time (percentage of the total duration)&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayEffect(ITEM:item, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect on the item and it follows the item&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayLoopEffect(OUT INT:effectHandle, ITEM:item, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays a looping effect on the item and it follows the item&lt;br /&gt;
&lt;br /&gt;
'''ItemSetOnStage(ITEM:item, INTEGER:bool)'''&lt;br /&gt;
&lt;br /&gt;
Sets an item on or offstage&lt;br /&gt;
&lt;br /&gt;
'''ItemSetCanInteract(ITEM:item, INTEGER:bool)'''&lt;br /&gt;
&lt;br /&gt;
Sets an item (not) interactible&lt;br /&gt;
&lt;br /&gt;
'''ItemClose(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Close an item&lt;br /&gt;
&lt;br /&gt;
'''ItemOpen(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Open an item&lt;br /&gt;
&lt;br /&gt;
'''ItemDrop(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Drop an item&lt;br /&gt;
&lt;br /&gt;
'''ItemLock(ITEM:item, FIXEDSTRING:key)'''&lt;br /&gt;
&lt;br /&gt;
Lock an item&lt;br /&gt;
&lt;br /&gt;
'''ItemUnlock(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Unlock an item&lt;br /&gt;
&lt;br /&gt;
'''ItemApplyStatus(ITEM:item, STATUS:statusId [, INT:turns=null, INT:force=0])'''&lt;br /&gt;
&lt;br /&gt;
Applies the status to the item When turns is -1 it's a permanent status When turns is -2 it's a keep alive status (which means it will die if it's not applied again within 1 second) &lt;br /&gt;
&lt;br /&gt;
'''ItemRemoveStatus(ITEM:item, STATUS:statusId)'''&lt;br /&gt;
&lt;br /&gt;
Removes the status from the item&lt;br /&gt;
&lt;br /&gt;
'''ItemDie(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Kills the item&lt;br /&gt;
&lt;br /&gt;
'''ItemMoveTo(GAMEOBJECT|FLOAT3:target, FLOAT:velocity, FLOAT:acceleration, INTEGER:matchTargetRotation)'''&lt;br /&gt;
&lt;br /&gt;
Moves the item to the target&lt;br /&gt;
&lt;br /&gt;
'''ItemToInventory(ITEM:item, CHARACTER|ITEM:target [,INT:amount=-1])'''&lt;br /&gt;
&lt;br /&gt;
Moves the item to the target's inventory&lt;br /&gt;
&lt;br /&gt;
'''ItemLookAt(GAMEOBJECT:target, FLOAT:degreesPerSecond)'''&lt;br /&gt;
&lt;br /&gt;
Rotates the item to look at the target&lt;br /&gt;
&lt;br /&gt;
'''ItemDestroy(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Destroys the item&lt;br /&gt;
&lt;br /&gt;
'''ItemSetAmount(ITEM:item, INT:amount)'''&lt;br /&gt;
&lt;br /&gt;
Change the amount of the item&lt;br /&gt;
&lt;br /&gt;
'''IterateItemsInInventory(CHARACTER|ITEM:source, FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each iten in source's inventory. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''ItemAddCharges(ITEM:TargetItem, INT:charges)'''&lt;br /&gt;
&lt;br /&gt;
Add/subtract charges from an item&lt;br /&gt;
&lt;br /&gt;
'''ItemResetChargesToInitial(ITEM:TargetItem)'''&lt;br /&gt;
&lt;br /&gt;
Resets charges from item to initial state&lt;br /&gt;
&lt;br /&gt;
'''MakePeace(CHARACTER:Source, CHARACTER:Target[, INT:IgnoreVote = 1])'''&lt;br /&gt;
&lt;br /&gt;
Make peace between users of the characters&lt;br /&gt;
&lt;br /&gt;
'''MakeWar(CHARACTER:Source, CHARACTER:Target[, INT:IgnoreVote = 1])'''&lt;br /&gt;
&lt;br /&gt;
Make war between users of the characters&lt;br /&gt;
&lt;br /&gt;
'''FindSurface(OUT FLOAT3:result, GAMEOBJECT|FLOAT3:source, FLOAT:minRange, FLOAT:maxRange, SURFACE:type [,CHARACTER:alignSource, INT:minEnemiesInSurface, INT:maxAlliesInSurface, INT:minimumCellCount])'''&lt;br /&gt;
&lt;br /&gt;
Finds the closest surface of a specific type.&lt;br /&gt;
&lt;br /&gt;
'''FindValidPosition(INOUT FLOAT3:position, FLOAT:radius[, CHARACTER|ITEM:object=null])'''&lt;br /&gt;
&lt;br /&gt;
Finds the closest valid position (where the object can stand.)&lt;br /&gt;
&lt;br /&gt;
'''FindPosition(INOUT FLOAT3:position, CHARACTER:source, INT:canStand, INT:checkSight, FLOAT:minRadius, FLOAT:maxRadius, FLOAT:rangeCheck, CHARACTER:alignSource, INT:minAllies, INT:maxAllies, INT:minEnemies, INT:maxEnemies [,FIXEDSTRING:AiHintTag=null, INT:forceHint=0, FLOAT3:SourcePosition])'''&lt;br /&gt;
&lt;br /&gt;
Finds the closest position from the source (within radius) where the conditions are matched. &lt;br /&gt;
&lt;br /&gt;
'''Cast(OUT OBJECT variable, OBJECT value)'''&lt;br /&gt;
&lt;br /&gt;
Casts the value to the variable.&lt;br /&gt;
&lt;br /&gt;
'''StringConcatenate(STRING:stringA, STRING:stringB, OUT STRING:resultingString)'''&lt;br /&gt;
&lt;br /&gt;
Appends stringB to stringA. Resulting string is stored in the third parameter.&lt;br /&gt;
&lt;br /&gt;
== QUERIES ==&lt;br /&gt;
&lt;br /&gt;
GetPosition(GAMEOBJECT:object,OUT FLOAT3:src)&lt;br /&gt;
&lt;br /&gt;
Get the current position of an object&lt;br /&gt;
&lt;br /&gt;
GetForwardDirection(GAMEOBJECT:object,OUT FLOAT3:direction)&lt;br /&gt;
&lt;br /&gt;
Get the current forward direction of an object&lt;br /&gt;
&lt;br /&gt;
GetRightDirection(GAMEOBJECT:object,OUT FLOAT3:direction)&lt;br /&gt;
&lt;br /&gt;
Get the current right direction of an object&lt;br /&gt;
&lt;br /&gt;
GetUpDirection(GAMEOBJECT:object,OUT FLOAT3:direction)&lt;br /&gt;
&lt;br /&gt;
Get the current up direction of an object&lt;br /&gt;
&lt;br /&gt;
GetDirection(GAMEOBJECT|FLOAT3:src,GAMEOBJECT|FLOAT3:target,OUT FLOAT3:direction[, OUT FLOAT:distance])&lt;br /&gt;
&lt;br /&gt;
Get the direction from src to target (optional: returns the distance between the objects as well)&lt;br /&gt;
&lt;br /&gt;
GetRotation(GAMEOBJECT:object, OUT FLOAT3:vector)&lt;br /&gt;
&lt;br /&gt;
Get the rotation of an object&lt;br /&gt;
&lt;br /&gt;
CharacterGetTargetSpline(INT: SplineIndex)&lt;br /&gt;
&lt;br /&gt;
Returns the spline index the character is currently walking towards, or -1 if he is not active on a spline.&lt;br /&gt;
&lt;br /&gt;
IsEqual(OBJECT:variable, OBJECT:variable)&lt;br /&gt;
&lt;br /&gt;
Compares both objects and see if they are equal.&lt;br /&gt;
&lt;br /&gt;
IsLessThen(INT|FLOAT:variable, INT|FLOAT:variable)&lt;br /&gt;
&lt;br /&gt;
Compares both objects and see if the first one is smaller.&lt;br /&gt;
&lt;br /&gt;
IsGreaterThen(INT|FLOAT:variable, INT|FLOAT:variable)&lt;br /&gt;
&lt;br /&gt;
Compares both objects and see if the first one is bigger.&lt;br /&gt;
&lt;br /&gt;
IsRandom(FLOAT:percentage)&lt;br /&gt;
&lt;br /&gt;
Each time this condition is checked, it will succeed with a chance of the percentage (between 0 and 1)&lt;br /&gt;
&lt;br /&gt;
IsRound(INT:roundNumber)&lt;br /&gt;
&lt;br /&gt;
Checks if we are currently in combat in round x&lt;br /&gt;
&lt;br /&gt;
IsInSurface(OBJECT|FLOAT3:target, SURFACE:type[, FLOAT:radius])&lt;br /&gt;
&lt;br /&gt;
Check if the character, item, trigger or position is currently within the specific surface.&lt;br /&gt;
&lt;br /&gt;
IsInDangerousSurface(OBJECT|FLOAT3:target[, CHARACTER:character, FLOAT:radius])&lt;br /&gt;
&lt;br /&gt;
Check if &amp;lt;target&amp;gt; is currently in on a dangerous surface. Uses &amp;lt;character&amp;gt; for path influences if provided (is necessary with non-character targets)&lt;br /&gt;
&lt;br /&gt;
IsInDialog(CHARACTER|ITEM:target[, INT:ignoreAutomatedDialogs=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character or item is currently in a dialog, optionally ignoring automated dialogs&lt;br /&gt;
&lt;br /&gt;
IsInAutomatedDialog(CHARACTER|ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Check if the character or item is currently in an automated dialog&lt;br /&gt;
&lt;br /&gt;
GetDistance(OUT FLOAT:distance, GAMEOBJECT|FLOAT3:source, GAMEOBJECT|FLOAT3:target)&lt;br /&gt;
&lt;br /&gt;
Returns the distance between 2 positions&lt;br /&gt;
&lt;br /&gt;
GetDistance2D(OUT FLOAT:distance, GAMEOBJECT|FLOAT3:source, GAMEOBJECT|FLOAT3:target)&lt;br /&gt;
Returns the 2D distance between 2 positions (ignores height)&lt;br /&gt;
&lt;br /&gt;
GetInnerDistance(OUT FLOAT:distance, GAMEOBJECT:source, GAMEOBJECT:target)&lt;br /&gt;
&lt;br /&gt;
Returns the distance between 2 gameobjects (character, item, trigger, ...) Their bounds are already subtracted.&lt;br /&gt;
&lt;br /&gt;
GetPosition(GAMEOBJECT:object, OUT FLOAT3:position)&lt;br /&gt;
&lt;br /&gt;
Returns the position of a gameobject (character, item, trigger, ...)&lt;br /&gt;
&lt;br /&gt;
GetVar(OUT OBJECT:returnValue, CHARACTER|ITEM:target, FIXEDSTRING:varName)&lt;br /&gt;
&lt;br /&gt;
Gets a global variable from the target&lt;br /&gt;
&lt;br /&gt;
GetClosestPlayer(OUT CHARACTER:player, GAMEOBJECT|FLOAT3:source)&lt;br /&gt;
&lt;br /&gt;
Gets the closest player near the source, default being being the object itself&lt;br /&gt;
&lt;br /&gt;
GetPlayerCount(OUT INT:playerCount)&lt;br /&gt;
&lt;br /&gt;
Gets the number of players in the party&lt;br /&gt;
&lt;br /&gt;
GetPlayerByIndex(OUT CHARACTER:returnCharacter, INT:playerIndex)&lt;br /&gt;
&lt;br /&gt;
Gets a player from the party by index&lt;br /&gt;
&lt;br /&gt;
GetRandomCharacter(OUT CHARACTER:returnCharacter, [INT:canBeSelf=0, INT:canBePlayer=0])&lt;br /&gt;
&lt;br /&gt;
Gets a random character in the current level&lt;br /&gt;
&lt;br /&gt;
ContainsSurface(GAMEOBJECT|FLOAT3:source, FLOAT:radius, SURFACE:type,)&lt;br /&gt;
&lt;br /&gt;
Checks if there is any surface of the type within a radius of the source&lt;br /&gt;
&lt;br /&gt;
IsSurface(GAMEOBJECT|FLOAT3:source, FLOAT:radius, SURFACE:type,)&lt;br /&gt;
&lt;br /&gt;
Checks if the whole radius around the source is the specified surface type&lt;br /&gt;
&lt;br /&gt;
IsObjectOnObject(CHARACTER|ITEM:source,CHARACTER|ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Checks if the source is standing on the target&lt;br /&gt;
&lt;br /&gt;
GetX(FLOAT3:vector, OUT FLOAT:value)&lt;br /&gt;
&lt;br /&gt;
Returns the X component of the vector&lt;br /&gt;
&lt;br /&gt;
GetY(FLOAT3:vector, OUT FLOAT:value)&lt;br /&gt;
&lt;br /&gt;
Returns the Y component of the vector&lt;br /&gt;
&lt;br /&gt;
GetZ(FLOAT3:vector, OUT FLOAT:value)&lt;br /&gt;
&lt;br /&gt;
Returns the Z component of the vector&lt;br /&gt;
&lt;br /&gt;
CanSee(GAMEOBJECT|FLOAT3:source, GAMEOBJECT|FLOAT3:target[, INT:addProjectileTargetGroundOffset=0])&lt;br /&gt;
&lt;br /&gt;
Check if the sight is blocked between 2 points.&lt;br /&gt;
&lt;br /&gt;
IsVisible(CHARACTER|ITEM:object)&lt;br /&gt;
&lt;br /&gt;
Check if the object is set invisible or not with SetVisible.&lt;br /&gt;
&lt;br /&gt;
GetTextDuration(CHARACTER|ITEM:object, FIXEDSRTING:key, OUT FLOAT:duration)&lt;br /&gt;
&lt;br /&gt;
Gets how long a text needs to be displayed&lt;br /&gt;
&lt;br /&gt;
IsCasual(-)&lt;br /&gt;
&lt;br /&gt;
Returns if the current game mode is Casual&lt;br /&gt;
&lt;br /&gt;
IsHardcore(-)&lt;br /&gt;
&lt;br /&gt;
Returns if the current game mode is Hardcore&lt;br /&gt;
&lt;br /&gt;
IsTagged(GAMEOBJECT:object, FIXEDSTRING:tag)&lt;br /&gt;
&lt;br /&gt;
Check if the object is tagged.&lt;br /&gt;
&lt;br /&gt;
TranslatedStringKeyExists(FIXEDSTRING:key)&lt;br /&gt;
&lt;br /&gt;
Check if the TranslatedString key exists.&lt;br /&gt;
&lt;br /&gt;
IsInCombat(CHARACTER|ITEM:object)&lt;br /&gt;
&lt;br /&gt;
Returns true if the object is in combat.&lt;br /&gt;
&lt;br /&gt;
IsInCombatWith(CHARACTER|ITEM:object, CHARACTER|ITEM:object)&lt;br /&gt;
&lt;br /&gt;
Returns true if the objects are in combat with each other.&lt;br /&gt;
&lt;br /&gt;
IsFacing(GAMEOBJECT:source, GAMEOBJECT|FLOAT3:target, [INT:angle=90])&lt;br /&gt;
&lt;br /&gt;
Returns true if the object is facing the position within the given angle.&lt;br /&gt;
&lt;br /&gt;
GameIsSaving(-)&lt;br /&gt;
&lt;br /&gt;
Returns true if the game is saving.&lt;br /&gt;
&lt;br /&gt;
GameIsLoading(-)&lt;br /&gt;
&lt;br /&gt;
Returns true if the game is loading.&lt;br /&gt;
&lt;br /&gt;
GetUserCount(OUT INT:userCount)&lt;br /&gt;
&lt;br /&gt;
Returns the user count.&lt;br /&gt;
&lt;br /&gt;
GetCurrentCharacter(OUT CHARACTER:character, INT:user)&lt;br /&gt;
&lt;br /&gt;
Returns the character currently being controlled by the specified user.&lt;br /&gt;
&lt;br /&gt;
GetCurrentLevel(OUT FIXEDSTRING:currentLevel)&lt;br /&gt;
&lt;br /&gt;
Returns the current levelname&lt;br /&gt;
&lt;br /&gt;
GetAIBounds(CHARACTER|ITEM:source, OUT FLOAT:bounds)&lt;br /&gt;
&lt;br /&gt;
Returns AI bounds of &amp;lt;source&amp;gt; in &amp;lt;bounds&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HasGlobalFlag(FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Global Flag is set&lt;br /&gt;
&lt;br /&gt;
HasFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Flag is set on the Object&lt;br /&gt;
&lt;br /&gt;
HasUserFlag(CHARACTER:object, FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Flag is set on the user's characters&lt;br /&gt;
&lt;br /&gt;
HasPartyFlag(CHARACTER:object, FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Flag is set on the party's characters&lt;br /&gt;
&lt;br /&gt;
DialogExists(STRING:dialogue)&lt;br /&gt;
&lt;br /&gt;
Returns true if the dialogue exists.&lt;br /&gt;
&lt;br /&gt;
IsActive(CHARACTER|ITEM:Object)&lt;br /&gt;
&lt;br /&gt;
Returns if the character or item is currently active.&lt;br /&gt;
&lt;br /&gt;
ListGetSize(LIST&amp;lt;OBJECT&amp;gt;:list, out INT:size)&lt;br /&gt;
&lt;br /&gt;
Returns the number of elements in &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ListGet(LIST&amp;lt;OBJECT&amp;gt;:list, INT:index, out OBJECT:entry)&lt;br /&gt;
&lt;br /&gt;
Returns &amp;lt;entry&amp;gt; at &amp;lt;index&amp;gt; of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ListGetRandom(LIST&amp;lt;OBJECT&amp;gt;:list, out OBJECT:entry)&lt;br /&gt;
&lt;br /&gt;
Returns a random &amp;lt;entry&amp;gt; of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IsBoss(CHARACTER|ITEM:Object)&lt;br /&gt;
&lt;br /&gt;
Returns true if the entity is tagged as a boss&lt;br /&gt;
&lt;br /&gt;
IsProjectileSkill(SKILL:skill)&lt;br /&gt;
&lt;br /&gt;
Returns true if the skill is a ranged skill (uses a projectile)&lt;br /&gt;
&lt;br /&gt;
IsValidSkillTarget(CHARACTER:source, OBJECT|FLOAT3:target, SKILLID:skill[, INTEGER:ignoreRangeCheck=0])&lt;br /&gt;
&lt;br /&gt;
Checks whether &amp;lt;target&amp;gt; is a valid target for &amp;lt;skill&amp;gt; at &amp;lt;source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GetFaction(OUT FIXEDSTRING:faction, CHARACTER|ITEM:character)&lt;br /&gt;
&lt;br /&gt;
Returns the faction of the provided character or item&lt;br /&gt;
&lt;br /&gt;
IsInActiveTurn(CHARACTER|ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Returns true if it's the character's or item's turn in combat.&lt;br /&gt;
&lt;br /&gt;
IsSkillActive(CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; has &amp;lt;skillId&amp;gt; active (in memory).&lt;br /&gt;
&lt;br /&gt;
HasSkillAi(SKILLID:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns true if the skill is using the new Ai system&lt;br /&gt;
&lt;br /&gt;
IsInArena(CHARACTER::character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character is in an arena fight&lt;br /&gt;
&lt;br /&gt;
CrimeGetType(INTEGER:crimeId, OUT STRING:crimeType)&lt;br /&gt;
&lt;br /&gt;
Returns the type of the crime with this id.&lt;br /&gt;
&lt;br /&gt;
CrimeGetCriminals(INTEGER:crimeId, OUT CHARACTER:criminal1, OUT CHARACTER:criminal2, OUT CHARACTER:criminal3, OUT CHARACTER:criminal4)&lt;br /&gt;
&lt;br /&gt;
Returns the criminals of that crime. They might all be null.&lt;br /&gt;
&lt;br /&gt;
IsSourceSkill(SKILL:skill)&lt;br /&gt;
&lt;br /&gt;
Returns true if the skill is a source skill.&lt;br /&gt;
&lt;br /&gt;
IsInGameMasterMode(-)&lt;br /&gt;
&lt;br /&gt;
Returns true if the game in game master mode.&lt;br /&gt;
&lt;br /&gt;
CharacterGet(OUT CHARACTER:character, GAMEOBJECT|FLOAT3:src, FLOAT:range, COMPARE:howTo, COMPAREFUNC:compareFunc[, RELATION: relation, SURFACE:surface, STATUS:status, TALENT:talent, CHARACTER:inSightOf, FIXEDSTRING:tag])&lt;br /&gt;
&lt;br /&gt;
Get a character within a certain range conforming to the filled in restraints. &lt;br /&gt;
&lt;br /&gt;
CharacterCount(OUT INT:count, GAMEOBJECT|FLOAT3:src, FLOAT:range, [RELATION: relation, SURFACE:surface, STATUS:status, TALENT:talent, CHARACTER:inSightOf])&lt;br /&gt;
&lt;br /&gt;
Counts the characters within a certain range conforming to the filled in restraints.&lt;br /&gt;
&lt;br /&gt;
CharacterGetOwner(OUT CHARACTER:owner, CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get the character's owner&lt;br /&gt;
&lt;br /&gt;
CharacterGetFollow(OUT CHARACTER:to follow, CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get the character to follow&lt;br /&gt;
&lt;br /&gt;
CharacterGetEnemy(OUT CHARACTER:current enemy, CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get current enemy of character&lt;br /&gt;
&lt;br /&gt;
CharacterCanCast(CHARACTER:source, SKILL:skillId, [ITEM:skillItem=null, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can cast the skill: will check cooldown, actionpoints&lt;br /&gt;
&lt;br /&gt;
CharacterCanSitOnItem(CHARACTER:source, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Check if the character source can sit or lie on an item.&lt;br /&gt;
&lt;br /&gt;
CharacterCanDrinkPotion(CHARACTER:source, FIXEDSTRING:potionID[, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can drink the potion: will check inv and actionpoints&lt;br /&gt;
&lt;br /&gt;
CharacterCanUseItem(CHARACTER:source, ITEM:item[, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can use the item in the world&lt;br /&gt;
&lt;br /&gt;
CharacterCanUseItemInInventory(CHARACTER:source, ITEM:item[, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can use the item in his inventory&lt;br /&gt;
&lt;br /&gt;
CharacterCanSee(CHARACTER:watchingChar, CHARACTER|ITEM:target [, INT:forceUpdate=0])&lt;br /&gt;
&lt;br /&gt;
Check if character has target in his line of sight. &lt;br /&gt;
&lt;br /&gt;
CharacterCanShoot(CHARACTER:source, GAMEOBJECT|FLOAT3:target)&lt;br /&gt;
&lt;br /&gt;
Check if the character can shoot the target.&lt;br /&gt;
&lt;br /&gt;
CharacterIsPlayer(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if the character is a player&lt;br /&gt;
&lt;br /&gt;
CharacterIsInParty(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if the character is in the party&lt;br /&gt;
&lt;br /&gt;
CharacterIsEnemy(CHARACTER:source, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is enemy of source&lt;br /&gt;
&lt;br /&gt;
CharacterIsAlly(CHARACTER:source, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is ally of source&lt;br /&gt;
&lt;br /&gt;
CharacterIsNeutral(CHARACTER:source, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is neutral of source&lt;br /&gt;
&lt;br /&gt;
CharacterIsDead(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is dead&lt;br /&gt;
&lt;br /&gt;
CharacterIsMoving(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is moving (speed &amp;gt; 0)&lt;br /&gt;
&lt;br /&gt;
CharacterIsSummon(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a summon&lt;br /&gt;
&lt;br /&gt;
CharacterIsPartyFollower(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a party follower&lt;br /&gt;
&lt;br /&gt;
CharacterIsStoryNPC(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a story NPC&lt;br /&gt;
&lt;br /&gt;
CharacterInWeaponRange(CHARACTER:character, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is in the current's weapon range&lt;br /&gt;
&lt;br /&gt;
CharacterInTouchRange(CHARACTER:character, CHARACTER:targetChar)&lt;br /&gt;
&lt;br /&gt;
Check if target is in the character's touch range &lt;br /&gt;
&lt;br /&gt;
CharacterHasStatus(CHARACTER:character, STATUS:statusId[, FIXEDSTRING:extraData])&lt;br /&gt;
&lt;br /&gt;
Check if character currently has the status. ExtraData can be filled in for some statuses: - Consume: statsid of the item - Shield: skillid of the shield&lt;br /&gt;
&lt;br /&gt;
CharacterGetStatusSourceCharacter(CHARACTER:character, STATUS:statusId, OUT CHARACTER:source[, FIXEDSTRING:extraData])&lt;br /&gt;
&lt;br /&gt;
Get the source character of a status&lt;br /&gt;
&lt;br /&gt;
CharacterGetStatusSourceItem(CHARACTER:character, STATUS:statusId, OUT ITEM:source[, FIXEDSTRING:extraData])&lt;br /&gt;
&lt;br /&gt;
Get the source item of a status&lt;br /&gt;
&lt;br /&gt;
CharacterHasTalent(CHARACTER:character, TALENT:talent)&lt;br /&gt;
&lt;br /&gt;
Check if character currently has the talent&lt;br /&gt;
&lt;br /&gt;
CharacterHasSkill(CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Check if character currently has the skill&lt;br /&gt;
&lt;br /&gt;
CharacterHasWeaponType(CHARACTER:character, WEAPON:weaponTYPE [, INT:equipped])&lt;br /&gt;
&lt;br /&gt;
Check if character currently has a weapon of this type in his inventory or equipped&lt;br /&gt;
&lt;br /&gt;
CharacterGetStat(OUT FLOAT:statValue, CHARACTER:character, CHARACTERSTAT:statType)&lt;br /&gt;
&lt;br /&gt;
Returns the current value of the stat (Vitality, ...)&lt;br /&gt;
&lt;br /&gt;
CharacterGetSightRange(OUT FLOAT:range, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's sight range&lt;br /&gt;
&lt;br /&gt;
CharacterGetWeaponRange(OUT FLOAT:minRange, OUT FLOAT:maxRange, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's current weapon range&lt;br /&gt;
&lt;br /&gt;
CharacterGetTouchRange(OUT FLOAT:touchRange, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's current touch range&lt;br /&gt;
&lt;br /&gt;
CharacterGetSkillRange(OUT FLOAT:minRange, OUT FLOAT:maxRange,CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns the character's skill range&lt;br /&gt;
&lt;br /&gt;
CharacterGetSkillImpactRange(OUT FLOAT:areaRange, CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns the character's skill range&lt;br /&gt;
&lt;br /&gt;
CharacterIsInTrigger(CHARACTER:character, TRIGGER:trigger)&lt;br /&gt;
&lt;br /&gt;
Check if character is in given trigger&lt;br /&gt;
&lt;br /&gt;
CharacterGetAbility(OUT INT:value, CHARACTER:character, ABILITY:ability)&lt;br /&gt;
&lt;br /&gt;
Returns the character's value of the specified ability&lt;br /&gt;
&lt;br /&gt;
CharacterGetHostileCount(OUT INT:value, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns how many characters are targeting this character right now... You can iterate over them with IterateEnemiesOf.&lt;br /&gt;
&lt;br /&gt;
CharacterCanFight(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character can fight.&lt;br /&gt;
&lt;br /&gt;
CharacterGetTemplate(CHARACTER:character, OUT CHARACTERTEMPLATE:root)&lt;br /&gt;
&lt;br /&gt;
Returns the roottemplate of the character.&lt;br /&gt;
&lt;br /&gt;
CharacterCanSpotSneakers(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character can spot sneaking characters&lt;br /&gt;
&lt;br /&gt;
CharacterIsFloating(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a floating character&lt;br /&gt;
&lt;br /&gt;
CharacterInCreation(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character is in character creation&lt;br /&gt;
&lt;br /&gt;
CharacterAvoidsTraps(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character avoids traps&lt;br /&gt;
&lt;br /&gt;
CharacterCheckRelation(CHARACTER:character, RELATION:relation)&lt;br /&gt;
&lt;br /&gt;
Returns true if relation check succeeds&lt;br /&gt;
&lt;br /&gt;
CharacterIsBetterOrEqualClass(CHARACTER:character, INT:currentScore, OUT INT:newScore, INT warriorScore, INT rogueScore, INT mageScore, INT clericScore, INT rangerScore)&lt;br /&gt;
&lt;br /&gt;
Returns true if score is higher or equal than the current score&lt;br /&gt;
&lt;br /&gt;
CharacterHasBeenHitBy(CHARACTER:character, DAMAGE_TYPE:damageType)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character was hit by this type.&lt;br /&gt;
&lt;br /&gt;
CharacterHasCastedSpellLastTurn(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character has casted a spell in his last turn.&lt;br /&gt;
&lt;br /&gt;
CharacterHasHadStatus(CHARACTER:character, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character has had a specific status this combat.&lt;br /&gt;
&lt;br /&gt;
CharacterHasAnimationOverride(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character has an animation override.&lt;br /&gt;
&lt;br /&gt;
CharacterCanUnlock(CHARACTER:character, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character can unlock the item (if the item is already unlocked it returns true!)&lt;br /&gt;
&lt;br /&gt;
CharacterGetReservedUserID(OUT INT:user, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's reserved User id.&lt;br /&gt;
&lt;br /&gt;
CharacterGetRace(CHARACTER:character, OUT FIXEDSTRING:race)&lt;br /&gt;
&lt;br /&gt;
Returns the &amp;lt;character&amp;gt;'s race in &amp;lt;race&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterIsRace(CHARACTER:character, FIXEDSTRING:race)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt;'s race is &amp;lt;race&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterCanMoveItem(CHARACTER:character, ITEM:item, FLOAT:minRadius, FLOAT:maxRadius [, OUT FLOAT3:destination])&lt;br /&gt;
&lt;br /&gt;
Returns true + &amp;lt;destination&amp;gt; if &amp;lt;character&amp;gt; can move &amp;lt;item&amp;gt; somewhere between &amp;lt;minRadius&amp;gt; and &amp;lt;maxRadius&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterGetDeathType(CHARACTER:character, OUT FIXEDSTRING:deathType)&lt;br /&gt;
&lt;br /&gt;
Returns death type of &amp;lt;character&amp;gt; in &amp;lt;deathType&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterGetStillAnimation(CHARACTER:object, OUT FIXEDSTRING:stillAnimation)&lt;br /&gt;
&lt;br /&gt;
Returns the still animation to play&lt;br /&gt;
&lt;br /&gt;
CrimeTransferLeadership(INT: CrimeID[, FIXEDSTRING:Tag1,...])&lt;br /&gt;
&lt;br /&gt;
Try and transfer the leadership of this crime to someone else.&lt;br /&gt;
&lt;br /&gt;
CrimeGetLeadInvestigator(OUT CHARACTER:lead, INT: CrimeID)&lt;br /&gt;
&lt;br /&gt;
Returns the lead investigator for the crime.&lt;br /&gt;
&lt;br /&gt;
CharacterCanHitTargetWithRangedWeapon(CHARACTER:source, OBJECT|FLOAT3:target[, SKILL:skill = null])&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;source&amp;gt; can hit &amp;lt;target&amp;gt; with currently equipped ranged weapon. Will use &amp;lt;skill&amp;gt; instead of equipped weapon if provided.&lt;br /&gt;
&lt;br /&gt;
CharacterHasRangedWeapon(CHARACTER:character[, INT:checkInventory = 0])&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; has has ranged weapon. Checks for non-wielded weapons if &amp;lt;checkInventory&amp;gt; is 1&lt;br /&gt;
&lt;br /&gt;
CheckInteractionReach(CHARACTER:character, CHARACTER|ITEM: target)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; could interact with &amp;lt;target&amp;gt;. This is not checking ranges, but checking if there's too much of a height difference or too many obstacles in between.&lt;br /&gt;
&lt;br /&gt;
CharacterGetSourcePoints(CHARACTER:character, OUT INT: amount)&lt;br /&gt;
&lt;br /&gt;
Returns the amount of sourcepoints of &amp;lt;character&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterAiIsCalculating(-)&lt;br /&gt;
&lt;br /&gt;
Returns if the character is still calculating the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchMoveSkillCommand(OUT SKILL:skill, OUT ITEM:skillItem, OUT FLOAT3:target)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Move Skill command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchSkillCommand(OUT SKILL:skill, OUT ITEM:skillItem, OUT FLOAT3 endPosition, OUT FLOAT3:target, OUT CHARACTER:target, OUT ITEM:target, OUT FLOAT3:target2, OUT CHARACTER:target2, OUT ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Skill command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchConsumeCommand(OUT ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Consume command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchAttackCommand(OUT FLOAT3:endPosition, OUT FLOAT3:target, OUT CHARACTER:target, OUT ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Attack command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchFallbackCommand(OUT FLOAT3:targetPosition, OUT FLOAT3:lookAtPosition)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Fallback command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterGetArchetype(CHARACTER:character, OUT ARCHETYPE:archetype)&lt;br /&gt;
&lt;br /&gt;
Returns the archetype of the character.&lt;br /&gt;
&lt;br /&gt;
CharacterIsPolymorphedInto(CHARACTER:character, FIXEDSTRING:race)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; is polymorphed into &amp;lt;race&amp;gt;. Race can be a race (like HUMAN), but also a template (in case of a polymorph skill like Chicken Touch).&lt;br /&gt;
&lt;br /&gt;
CharacterIsPolymorphInteractionDisabled(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; has his interaction disabled because of a polymorph.&lt;br /&gt;
&lt;br /&gt;
ItemGet(OUT ITEM:item, GAMEOBJECT|FLOAT3:src, FLOAT:range, COMPARE:howTo [, COMPAREFUNC:compareFunc, FIXEDSTRING:rootTemplate, FIXEDSTRING:tag])&lt;br /&gt;
&lt;br /&gt;
Get an item within a certain range conforming to the filled in restraints.&lt;br /&gt;
&lt;br /&gt;
ItemGetFromInventory(OUT ITEM:item, CHARACTER|ITEM:object [, FIXEDSTRING:statsId, FIXEDSTRING:tag, INT:isEquiped])&lt;br /&gt;
&lt;br /&gt;
Returns the first item in the inventory conforming to the filled in restraints.&lt;br /&gt;
&lt;br /&gt;
ItemIsInCharacterInventory(ITEM:item, CHARACTER:object)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is in the inventory of the character&lt;br /&gt;
&lt;br /&gt;
ItemIsInTrigger(ITEM:item, TRIGGER:trigger)&lt;br /&gt;
&lt;br /&gt;
Check if item is in given trigger&lt;br /&gt;
&lt;br /&gt;
ItemGetStat(OUT FLOAT:statValue, ITEM:item, ITEMSTAT:statType)&lt;br /&gt;
&lt;br /&gt;
Returns the current value of the stat (Weight, ...)&lt;br /&gt;
&lt;br /&gt;
ItemIsMoving(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is moving or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsFalling(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is falling or not. (after teleport)&lt;br /&gt;
&lt;br /&gt;
ItemIsOpening(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is opening or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsClosing(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is closing or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsLocked(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is locked or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsMovable(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is movable or not.&lt;br /&gt;
&lt;br /&gt;
ItemCanBeLockPicked(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is can be opened by lockpicking.&lt;br /&gt;
&lt;br /&gt;
ItemIsOpen(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is open or not.&lt;br /&gt;
&lt;br /&gt;
IsStoryItem(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is a story item.&lt;br /&gt;
&lt;br /&gt;
ItemHasStatus(ITEM:item, STATUS:statusId)&lt;br /&gt;
&lt;br /&gt;
Returns if the item has the status.&lt;br /&gt;
&lt;br /&gt;
ItemIsDestroyed(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is destroyed.&lt;br /&gt;
&lt;br /&gt;
ItemGetTemplate(ITEM:item, OUT ITEMTEMPLATE:root)&lt;br /&gt;
&lt;br /&gt;
Returns the roottemplate of the item.&lt;br /&gt;
&lt;br /&gt;
ItemGetSkillId(ITEM:item, OUT SKILL:root)&lt;br /&gt;
&lt;br /&gt;
Returns the skillid of the item if it has one.&lt;br /&gt;
&lt;br /&gt;
ItemGetItemType(ITEM:item, OUT FIXEDSTRING:itemType)&lt;br /&gt;
&lt;br /&gt;
Returns the itemtype of the item: common, unique, rare, ...&lt;br /&gt;
&lt;br /&gt;
ItemGetStatusSourceCharacter(ITEM:item, STATUS:statusId, OUT CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get the source character of a status&lt;br /&gt;
&lt;br /&gt;
ItemGetStatusSourceItem(ITEM:item, STATUS:statusId, OUT ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Get the source item of a status&lt;br /&gt;
&lt;br /&gt;
ItemCanBeMoved(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item can be moved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EVENTS ==&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterEvent(CHARACTER:character, STRING:eventName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterItemEvent(CHARACTER:character, ITEM:item, STRING:eventName)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterCharacterEvent(CHARACTER:character, CHARACTER:character, STRING:eventName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
'''OnItemEvent(ITEM:item, STRING:eventName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
'''OnItemDestroyed(ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when an item is destroyed&lt;br /&gt;
&lt;br /&gt;
'''OnItemDestroying(ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when an item is being destroyed&lt;br /&gt;
&lt;br /&gt;
'''OnItemOpened(ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when an item is opened&lt;br /&gt;
&lt;br /&gt;
'''OnItemClosed(ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when an item is closed&lt;br /&gt;
&lt;br /&gt;
'''OnItemDropped(ITEM:item, STRING:itemTemplate)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when an item is dropped&lt;br /&gt;
&lt;br /&gt;
'''OnGlobalFlagSet(FIXEDSTRING:eventName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a global event is set&lt;br /&gt;
&lt;br /&gt;
'''OnGlobalFlagCleared(FIXEDSTRING:eventName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a global event is cleared&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterFlagSet(FIXEDSTRING:eventName, CHARACTER:character)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a dialog event is set on a character&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterFlagCleared(FIXEDSTRING:eventName, CHARACTER:character)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a dialog event is cleared on a character&lt;br /&gt;
&lt;br /&gt;
'''OnItemFlagSet(FIXEDSTRING:eventName, ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a dialog event is set on an item&lt;br /&gt;
&lt;br /&gt;
'''OItemFlagCleared(FIXEDSTRING:eventName, ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a dialog event is cleared on an item&lt;br /&gt;
&lt;br /&gt;
'''OnTimer(FIXEDSTRING:timerName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a timer has ended&lt;br /&gt;
&lt;br /&gt;
'''OnInit(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the script is set&lt;br /&gt;
&lt;br /&gt;
'''OnLoaded(INT:major, INT:minor, INT:revision, INT:build)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the script is loaded from the savegame&lt;br /&gt;
&lt;br /&gt;
'''OnShutdown(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character's script is removed&lt;br /&gt;
&lt;br /&gt;
'''OnVariableCleared(FIXEDSTRING:varName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when this object's script variable is cleared from Osiris with ClearVarObject&lt;br /&gt;
&lt;br /&gt;
'''OnCombatStarted(INT:combatID)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when combat starts&lt;br /&gt;
&lt;br /&gt;
'''OnCombatSwitched(CHARACTER:source, ITEM:source)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character switch from one combat to another&lt;br /&gt;
&lt;br /&gt;
'''OnLeftCombat(CHARACTER:source, ITEM:source)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character or item left the combat&lt;br /&gt;
&lt;br /&gt;
'''OnTurn(CHARACTER:source, ITEM:source)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character's turn starts&lt;br /&gt;
&lt;br /&gt;
'''OnTurnEnded(CHARACTER:source, ITEM:source)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character's turn ended&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterVitalityChanged(CHARACTER:character, FLOAT:percentage)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the characters's vitality changed&lt;br /&gt;
&lt;br /&gt;
'''OnItemVitalityChanged(ITEM:item, FLOAT:percentage)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the item's vitality changed&lt;br /&gt;
&lt;br /&gt;
'''OnAttackOfOpportunity(CHARACTER:target)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the characters gets an attack of opportunity on an enemy&lt;br /&gt;
&lt;br /&gt;
'''OnClearAttackOfOpportunity(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the characters attack of opportunity is cleared&lt;br /&gt;
&lt;br /&gt;
'''OnDamage(DAMAGE:type, FLOAT:percentage, CHARACTER:source, ITEM:source)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the object receives damage&lt;br /&gt;
&lt;br /&gt;
'''OnMiss(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character dodges something&lt;br /&gt;
&lt;br /&gt;
'''OnCriticalHit(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character is critical hit&lt;br /&gt;
&lt;br /&gt;
'''OnPreBlock(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown before the character blocks something (at the start of the attack animation)&lt;br /&gt;
&lt;br /&gt;
'''OnBlock(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character blocks something&lt;br /&gt;
&lt;br /&gt;
'''OnDie(CHARACTER:character, DAMAGE:type, CHARACTER:source, ITEM:source)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character dies&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterStatusAttempt(CHARACTER:character, STATUS:status)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character attempts to gain a status&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterStatusApplied(CHARACTER:character, STATUS:status)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character gains a status&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterStatusRemoved(CHARACTER:character, STATUS:status)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character loses a status&lt;br /&gt;
&lt;br /&gt;
'''OnItemStatusAttempt(ITEM:item, STATUS:status)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the item attempts to gain a status&lt;br /&gt;
&lt;br /&gt;
'''OnItemStatus(ITEM:item, STATUS:status)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the item gains a status&lt;br /&gt;
&lt;br /&gt;
'''OnItemStatusRemoved(ITEM:item, STATUS:status)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the item loses a status&lt;br /&gt;
&lt;br /&gt;
'''OnStatusCreateVisuals(STATUS:status)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the item should create the visuals for this status&lt;br /&gt;
&lt;br /&gt;
'''OnStatusDestroyVisuals(STATUS:status)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the item should destroy the visuals for this status&lt;br /&gt;
&lt;br /&gt;
'''OnSight(CHARACTER:character)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character sees another character&lt;br /&gt;
&lt;br /&gt;
'''OnLostSight(CHARACTER:character)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character doesn't see another character anymore&lt;br /&gt;
&lt;br /&gt;
'''OnUseItem(CHARACTER:source, ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character uses an item&lt;br /&gt;
&lt;br /&gt;
'''OnPickupItem(CHARACTER:source, ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character picks up an item&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterPreMovedItem(CHARACTER:source, ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Event thrown just before a character moves an item. No difference whether it is in the world or in their inventory&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterMovedItem(CHARACTER:source, ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character moved an item&lt;br /&gt;
&lt;br /&gt;
'''OnItemEquipped(CHARACTER:source, ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character equips an item&lt;br /&gt;
&lt;br /&gt;
'''OnItemUnequipped(CHARACTER:source, ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character unequips an item&lt;br /&gt;
&lt;br /&gt;
'''OnIterateCharacter(CHARACTER:character, FIXEDSTRING:eventId)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown by iterators&lt;br /&gt;
&lt;br /&gt;
'''OnIterateItem(ITEM:source, FIXEDSTRING:eventId)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown by iterators&lt;br /&gt;
&lt;br /&gt;
'''OnIterateCount(FIXEDSTRING:eventId, INTEGER:Count)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown by iterators after all iterations to inform you of the count.&lt;br /&gt;
&lt;br /&gt;
'''OnStoryOverride(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Throw when story overrides what the character was doing: teleport, movement, on/offstage&lt;br /&gt;
&lt;br /&gt;
'''OnTriggerEnter(CHARACTER:character, ITEM:item, FIXEDSTRING:eventId)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown by a character or item entering an EventTrigger&lt;br /&gt;
&lt;br /&gt;
'''OnTriggerLeave(CHARACTER:character, ITEM:item, FIXEDSTRING:eventId)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown by a character or item leaving an EventTrigger&lt;br /&gt;
&lt;br /&gt;
'''OnEnemyChanged(CHARACTER:character, CHARACTER:newEnemy)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character's currentenemy changes&lt;br /&gt;
&lt;br /&gt;
'''OnTalentUnlocked(CHARACTER:character, TALENT:newTalent)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character unlocks a new talent&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterClassChanged(CHARACTER:character, FIXEDSTRING:class)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character changes class in the character creation screen&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterCreationStarted(CHARACTER:character, TRIGGER:creationPoint)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character creation has started, and gives where the character should walk to&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterCreationStopped(CHARACTER:character)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character creation has stopped&lt;br /&gt;
&lt;br /&gt;
'''OnFunction(FIXEDSTRING:functionName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Throws an event on itself with the functionName. This is to fake function calls &lt;br /&gt;
&lt;br /&gt;
'''OnSkillCast(CHARACTER:character, SKILL_ID:skillID)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character casts a skill&lt;br /&gt;
&lt;br /&gt;
'''OnSkillCombatComment(CHARACTER:character, SKILL_ID:skillID)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character needs to make a comment&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterUsedSkillOnMe(CHARACTER:character, SKILL_ID:skillID)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when you are hit by a skill from a character&lt;br /&gt;
&lt;br /&gt;
'''OnItemUnlocked(ITEM: item, CHARACTER:character, ITEM:key)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when an item gets unlocked by a character.&lt;br /&gt;
&lt;br /&gt;
'''OnAutomatedDialogEnded(STRING:dialogName, INT:instanceID)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a automated dialog is ended for this speaker&lt;br /&gt;
&lt;br /&gt;
'''OnAutomatedDialogStarted(STRING:dialogName, INT:instanceID)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a automated dialog is started for this speaker&lt;br /&gt;
&lt;br /&gt;
'''OnDialogEnded(STRING:dialogName, INT:instanceID)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a dialog is ended for this speaker&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeSensibleAction(FIXEDSTRING:regionID, INT:crimeID, FIXEDSTRING:reactionName, STRING:primaryDialog, CHARACTER:criminal1, CHARACTER:criminal2, CHARACTER:criminal3, CHARACTER:criminal4, INT:IsPrimary)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character needs to perform a sensible action against criminals&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeInterrogationRequest(FIXEDSTRING:regionID, INT:crimeID, CHARACTER:criminal1, CHARACTER:criminal2, CHARACTER:criminal3, CHARACTER:criminal4, STRING:interrogationDialog)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character needs to perform an interrogation against criminals&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeInvestigate(FLOAT3:CrimePosition, INT:crimeID)''' &amp;lt;br &amp;gt;&lt;br /&gt;
One NPC investigates a crimescene&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeAlarmed(FLOAT3:CrimePosition, INT:crimeID)''' &amp;lt;br &amp;gt;&lt;br /&gt;
All NPCs in a crimearea start looking around.&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeReturnToNormal(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Investigation or Alarm timed out.&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeAborted(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
The game interrupted the sensible action of this NPC.&lt;br /&gt;
&lt;br /&gt;
'''OnSplineControlPointReached(INT:Index, INT:EndReached, STRING:EventString)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character reached a spline node.&lt;br /&gt;
&lt;br /&gt;
''''OnFinishCalculationAi(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the calculation of the AI is finished.&lt;br /&gt;
&lt;br /&gt;
'''OnGrenadeLand(INT:hitObstacle, CHARACTER:caster)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the grenades lands&lt;br /&gt;
&lt;br /&gt;
'''FetchCharacterApplyStatusData(CHARACTER:character, STATUS:status) RETURN(LIST&amp;lt;STATUS&amp;gt;:removeStatuses, STATUS:applyStatus, INT:turns)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Fetch from script which statuses to remove and apply.&lt;br /&gt;
&lt;br /&gt;
'''FetchItemApplyStatusData(ITEM:item, STATUS:status) RETURN(LIST&amp;lt;STATUS&amp;gt;:removeStatuses, STATUS:applyStatus, INT:turns)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Fetch from script which statuses to remove and apply.&lt;br /&gt;
&lt;br /&gt;
'''FetchItemSkillOnDamage(INT:damage, DAMAGE_TYPE:damageType) RETURN(INT:hasSkill, SKILL_ID:skillID, INT:casterLevel)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Fetch from script what skill to execute on damage.&lt;br /&gt;
&lt;br /&gt;
'''OnActivate(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character/item activates&lt;br /&gt;
&lt;br /&gt;
'''OnDeactivate(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character/item deactivates&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterUsedSourcePoint(CHARACTER:character)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character uses a source point&lt;br /&gt;
&lt;br /&gt;
'''OnSkillAdded(CHARACTER:character, SKILL_ID:skillId, INT:learned)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character learns a skill&lt;br /&gt;
&lt;br /&gt;
'''OnSkillActivated(CHARACTER:character, SKILL_ID:skillId)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character activates (=adds to memory) a skill&lt;br /&gt;
&lt;br /&gt;
'''OnSkillDeactivated(CHARACTER:character, SKILL_ID:skillId)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character deactivates (=removes from memory) a skill&lt;br /&gt;
&lt;br /&gt;
'''OnItemFlagShared(FIXEDSTRING:eventName, ITEM:item, INT:newValue)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a dialog event is shared with an item&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterFlagShared(FIXEDSTRING:eventName, CHARACTER:character, INT:newValue)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a dialog event is shared with a character&lt;br /&gt;
&lt;br /&gt;
'''OnItemOffStageChanged(CHARACTER:character, INT:offstage)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character is set on/off stage&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterOffStageChanged(ITEM:item, INT:offstage)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a item is set on/off stage&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterTeleported(CHARACTER:target, CHARACTER:cause, FLOAT3:oldPosition, FLOAT3:newPosition, SKILL_ID:skillId)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character gets teleported with a teleport skill&lt;br /&gt;
&lt;br /&gt;
'''OnCombatTick(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when this object ticks in combat. Only thrown for objects that don't get a turn.&lt;br /&gt;
&lt;br /&gt;
== INTERRUPTS ==&lt;br /&gt;
&lt;br /&gt;
'''OnMovementFailed(FLOAT3:targetPos)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the reaction is interrupted by a move action failing&lt;br /&gt;
&lt;br /&gt;
'''OnException(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the reaction is interrupted by an exception&lt;br /&gt;
&lt;br /&gt;
'''OnBetterReactionFound(FIXEDSTRING:reactionName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the reaction is interrupted by another reaction&lt;br /&gt;
&lt;br /&gt;
'''OnNoReactionFound(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the reaction is interrupted because no reaction is valid&lt;br /&gt;
&lt;br /&gt;
'''OnScriptDisabled(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the reaction is interrupted because the scriptcontroller is disabled&lt;br /&gt;
&lt;br /&gt;
'''OnManualInterrupt(FIXEDSTRING:reactionName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the reaction is interrupted using the interrupt action&lt;br /&gt;
&lt;br /&gt;
'''OnRegionSwap(FIXEDSTRING:oldLevel, FIXEDSTRING:newLevel)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the reaction is interrupted by a region swap&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Character_and_Item_Script_Triggers,_Calls,_and_Queries&amp;diff=5823</id>
		<title>Character and Item Script Triggers, Calls, and Queries</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Character_and_Item_Script_Triggers,_Calls,_and_Queries&amp;diff=5823"/>
		<updated>2018-03-02T11:47:21Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: /* EVENTS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of almost every character and item script event trigger, call, and query. An event is what triggers the script, and always begin with ''On''. Queries provide information and are always inside an ''IF'' or ''CHECK.'' Calls are actions that are always after THEN.&lt;br /&gt;
&lt;br /&gt;
CharScript/ItemScript Functions&lt;br /&gt;
&lt;br /&gt;
== CALLS ==&lt;br /&gt;
&lt;br /&gt;
'''Set(OUT OBJECT:variable, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Set the value of a variable&lt;br /&gt;
&lt;br /&gt;
'''SetVar(CHARACTER|ITEM:object, FIXEDSTRING:variableName, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Set the value of a global variable&lt;br /&gt;
&lt;br /&gt;
'''Cast(OUT OBJECT variable, OBJECT value)'''&lt;br /&gt;
&lt;br /&gt;
Casts the value to the variable&lt;br /&gt;
&lt;br /&gt;
'''Print(OUT STRING:output, STRING:text)'''&lt;br /&gt;
&lt;br /&gt;
Prints the text to the output with possible parameters: [1], [2], ...&lt;br /&gt;
&lt;br /&gt;
'''Add(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT|FLOAT3:value)'''&lt;br /&gt;
&lt;br /&gt;
Adds both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Subtract(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT|FLOAT3:value)'''&lt;br /&gt;
&lt;br /&gt;
Subtracts both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Multiply(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT:value)'''&lt;br /&gt;
&lt;br /&gt;
Multiplies both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Divide(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT:value)'''&lt;br /&gt;
&lt;br /&gt;
Divides both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Abs(INOUT INT|FLOAT:variable)'''&lt;br /&gt;
&lt;br /&gt;
Takes the absolute value of a variable&lt;br /&gt;
&lt;br /&gt;
'''Clamp(INOUT INT|FLOAT:variable, INT|FLOAT:min, INT|FLOAT:max)'''&lt;br /&gt;
&lt;br /&gt;
Clamps a variable between min and max&lt;br /&gt;
&lt;br /&gt;
'''GetRandom(OUT OBJECT:variable, OBJECT:value, OBJECT:value, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Fills in the variable with random one of the values.&lt;br /&gt;
&lt;br /&gt;
'''GetWeightedRandom(OUT OBJECT:variable, OBJECT:value, INT|FLOAT:weight, ...)'''&lt;br /&gt;
&lt;br /&gt;
Gets a weighted random of the given values!&lt;br /&gt;
&lt;br /&gt;
'''GetRandomBetween(OUT INT|FLOAT:variable, INT|FLOAT:min, INT|FLOAT:max)'''&lt;br /&gt;
&lt;br /&gt;
Gets a random value between min and max (both included)&lt;br /&gt;
&lt;br /&gt;
'''GetRandomPositionInTrigger(OUT FLOAT3:variable, TRIGGER:areaTrigger)'''&lt;br /&gt;
&lt;br /&gt;
Get a random position in a trigger area&lt;br /&gt;
&lt;br /&gt;
'''GetElement(OUT OBJECT:variable, INT:index, OBJECT:value, OBJECT:value, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Fills in the variable with the index one of the values (starting from 0)&lt;br /&gt;
&lt;br /&gt;
'''SetPriority(FIXEDSTRING:reactionName, INT:priority)'''&lt;br /&gt;
&lt;br /&gt;
Changes the priority of a reaction. Priority 0 and below are not executed!&lt;br /&gt;
&lt;br /&gt;
'''DelayReaction(FIXEDSTRING:reactionName, FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
The reaction will not be chosen for the specified time&lt;br /&gt;
&lt;br /&gt;
'''SetScriptFrame(CHARACTER:character, FIXEDSTRING:frame)'''&lt;br /&gt;
&lt;br /&gt;
Sets the scriptframe on the character.&lt;br /&gt;
&lt;br /&gt;
'''ClearScriptFrame(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Clears the scriptframe on the character.&lt;br /&gt;
&lt;br /&gt;
'''Goto(FIXEDSTRING:labelName)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to the label. Two label names are built-in: &amp;quot;Start&amp;quot; for the first instruction of the reaction, and &amp;quot;End&amp;quot; for the last one.&lt;br /&gt;
&lt;br /&gt;
'''GotoIfEqual(OBJECT:variable, OBJECT:value, FIXEDSTRING:labelName)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to the label if the 2 objects are equal&lt;br /&gt;
&lt;br /&gt;
'''GotoRand(FIXEDSTRING:labelName, FIXEDSTRING:labelName, FIXEDSTRING:labelName, FIXEDSTRING:labelName, FIXEDSTRING:labelName)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to a random label in the list&lt;br /&gt;
&lt;br /&gt;
'''CreatePuddleAt(GAMEOBJECT|FLOAT3:target, SURFACE:type, INT:cellAmountMin, INT:cellAmountMax, INT:growAmountMin, INT:growAmountMax, )'''&lt;br /&gt;
&lt;br /&gt;
Spawn a puddle at the target's position for a certain lifetime (in turns)&lt;br /&gt;
&lt;br /&gt;
'''CreateSurfaceAt(GAMEOBJECT|FLOAT3:target, SURFACE:type, FLOAT:radius, INT:lifeTime[, GAMEOBJECT:owner])'''&lt;br /&gt;
&lt;br /&gt;
Spawn a surface at the target's position for a certain lifetime (in turns)&lt;br /&gt;
&lt;br /&gt;
'''CreateSurfaceInPolygon(GAMEOBJECT:owner, SURFACE:type, FLOAT:duration, FLOAT:growTimer, INT:growStep, GAMEOBJECT|FLOAT3:point1, GAMEOBJECT|FLOAT3:point2, GAMEOBJECT|FLOAT3:point3, ...)'''&lt;br /&gt;
&lt;br /&gt;
Spawn a polygon surface at the target's position. Grows &amp;lt;growStep&amp;gt; every &amp;lt;growTimer&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CreateSurfaceInAreaTrigger(GAMEOBJECT:owner, SURFACE:type, FLOAT:duration, FLOAT:growTimer, INT:growStep, TRIGGER:areaTrigger)'''&lt;br /&gt;
&lt;br /&gt;
Spawn a surface within &amp;lt;areaTrigger&amp;gt;. Grows &amp;lt;growStep&amp;gt; every &amp;lt;growTimer&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CreateConeSurfaceAt(GAMEOBJECT|FLOAT3:start, GAMEOBJECT|FLOAT3:target, SURFACE:type, FLOAT:radius, FLOAT:angle, FLOAT:duration)'''&lt;br /&gt;
&lt;br /&gt;
Spawn a Cone surface at the target's position&lt;br /&gt;
&lt;br /&gt;
'''PlayEffectAt(GAMEOBJECT|FLOAT3:target, STRING:effectName)'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect at the target's position&lt;br /&gt;
&lt;br /&gt;
'''PlayLoopEffectAt(OUT INT64:effectHandle, GAMEOBJECT|FLOAT3:target, STRING:effectName)'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect at the target's position&lt;br /&gt;
&lt;br /&gt;
'''ExplodeAt(GAMEOBJECT|FLOAT3:target, SKILL:projectileSkill, [INT:casterLevel=-1, CHARACTER|ITEM:cause])'''&lt;br /&gt;
&lt;br /&gt;
Trigger an explosion of a projectile skill at the target's position. The cause will trigger NPC behavior as if the cause casted the projectile&lt;br /&gt;
&lt;br /&gt;
'''DisplayText(CHARACTER|ITEM:target, FIXEDSTRING:text, FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
Displays text above the character/item for a certain amount of time. It will replace the current text, including dialogtext&lt;br /&gt;
&lt;br /&gt;
'''DisplayCombatInfoText(CHARACTER|ITEM:target, FIXEDSTRING:text, FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
Displays text above the character/item for a certain amount of time. It will replace the current text, including dialogtext&lt;br /&gt;
&lt;br /&gt;
'''StatusText(CHARACTER|ITEM:target, FIXEDSTRING:text)'''&lt;br /&gt;
&lt;br /&gt;
Adds statustext above the character/item for a short amount of time. Will not replace texts or dialogtexts&lt;br /&gt;
&lt;br /&gt;
'''DebugText(CHARACTER|ITEM:target, STRING:text)'''&lt;br /&gt;
&lt;br /&gt;
Adds debugtext above the character/item for a short amount of time.&lt;br /&gt;
&lt;br /&gt;
'''CombatLogText(CHARACTER|ITEM:target, FIXEDSTRING:text, INT:filterID, INT:broadcastID)'''&lt;br /&gt;
&lt;br /&gt;
Adds combatlog text inside the combat log window. Color-/SizeFormatting should already be applied, if not color and size of the string will be NORMAL. filterID determines what filter shows/hides the text. broadcastID determines who will be able to see the message (0 hearingrange. 1 party. 2 all)&lt;br /&gt;
&lt;br /&gt;
'''Log(STRING:text, ...)'''&lt;br /&gt;
&lt;br /&gt;
Log's the the scriptlog. (for debugging purposes)&lt;br /&gt;
&lt;br /&gt;
'''Output(STRING:text, ...)'''&lt;br /&gt;
&lt;br /&gt;
Pass text with optional parameters to the output panel (e.g. Output(&amp;quot;An int [1]&amp;quot;, INT:10))&lt;br /&gt;
&lt;br /&gt;
'''Assert(STRING:text, ...)'''&lt;br /&gt;
&lt;br /&gt;
Pass text with optional parameters to display as an assert message (e.g. Assert(&amp;quot;This number is wrong: [1]&amp;quot;, INT:666))&lt;br /&gt;
&lt;br /&gt;
'''Label(FIXEDSTRING:name)'''&lt;br /&gt;
&lt;br /&gt;
Marks this line as a label where Goto actions can jump to&lt;br /&gt;
&lt;br /&gt;
'''StartTimer(FIXEDSTRING:timerName, FLOAT:timeInSeconds, INT:repeatCount)'''&lt;br /&gt;
&lt;br /&gt;
Start a timer which will throw the timer event. Set repeatcount &amp;lt; 0 for a permanent timer.&lt;br /&gt;
&lt;br /&gt;
'''StopTimer(FIXEDSTRING:timerName)'''&lt;br /&gt;
&lt;br /&gt;
Stop a timer which will throw the timer event&lt;br /&gt;
&lt;br /&gt;
'''DialogStart(OUT INT:instanceId, STRING:dialog, CHARACTER|ITEM:target, CHARACTER|ITEM:target, CHARACTER|ITEM:target, CHARACTER|ITEM:target)'''&lt;br /&gt;
&lt;br /&gt;
Start a dialog between the targets. You can specify fewer targets than the maximum number.&lt;br /&gt;
&lt;br /&gt;
{{warning|Starting a dialog from behaviour script will always start it as an [[Dialog_editor#Automated|Automated Dialog]]. Interactive dialogs can only be started from [[Osiris]].}}&lt;br /&gt;
&lt;br /&gt;
'''DialogRequestStop(CHARACTER|ITEM:speaker, STRING:dialog)'''&lt;br /&gt;
&lt;br /&gt;
Stops a certain dialog on a certain speaker&lt;br /&gt;
&lt;br /&gt;
'''Check(-)'''&lt;br /&gt;
&lt;br /&gt;
Reevaluate the conditions in the CHECK section of this reaction&lt;br /&gt;
&lt;br /&gt;
'''Reset(-)'''&lt;br /&gt;
&lt;br /&gt;
Resets the current reaction. It will start from the beginning again&lt;br /&gt;
&lt;br /&gt;
'''Interrupt(FIXEDSTRING:reactionName)'''&lt;br /&gt;
&lt;br /&gt;
Interrupt the reaction.&lt;br /&gt;
&lt;br /&gt;
'''GlobalSetEvent(FIXEDSTRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Sets a global event. Scripts and Story can catch it.&lt;br /&gt;
&lt;br /&gt;
'''GlobalClearEvent(FIXEDSTRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Clears a global event. Scripts and Story can catch it.&lt;br /&gt;
&lt;br /&gt;
'''StopLoopEffect(INT64:fxHandle)'''&lt;br /&gt;
&lt;br /&gt;
Stops a looping effect&lt;br /&gt;
&lt;br /&gt;
'''IterateItems(FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each item. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateItemsNear(GAMEOBJECT:source, FLOAT:radius, FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each item in range. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateItemsOnObject(CHARACTER|ITEM:source, FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each item standing on the source. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateParty(FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, CHARACTER:partyMember, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each member of all parties. If you pass a party member only members of that party will be considered. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharacters(FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharactersNear(GAMEOBJECT:source, FLOAT:radius, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character in range. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharactersOnObject(CHARACTER|ITEM:source, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
Launch iterate event for each character standing on the source. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharactersInCombat(CHARACTER|ITEM:source, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character in combat with the source. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateHostilesFor(CHARACTER:source, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character who is targetting the source. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''SpawnCharacter(OUT CHARACTER:result, CHARACTERTEMPLATE:rootTemplate, GAMEOBJECT|FLOAT3:position, INT:playSpawn, [INT:isSummon=0, CHARACTER:summonOwner=null, INT:overrideLevel=-1])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a character&lt;br /&gt;
&lt;br /&gt;
'''SpawnItem(ITEMTEMPLATE:rootTemplate,GAMEOBJECT|FLOAT3:position, OUT ITEM:result)'''&lt;br /&gt;
&lt;br /&gt;
Spawns an item&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalProjectile(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,FLOAT3:direction,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at the source (with offset, can be null) shooting at the target&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalProjectileAt(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,GAMEOBJECT|FLOAT3:target,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at the source (with offset, can be null) shooting at the target&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldProjectile(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,FLOAT3:direction,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at worldPos shooting at the target. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldProjectileAt(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,GAMEOBJECT|FLOAT3:target,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at worldPos shooting at the target. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalCone(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,FLOAT3:direction,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from source (with offset, can be null) in a direction&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalConeAt(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,GAMEOBJECT|FLOAT3:target,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from source (with offset, can be null) at the target&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldCone(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,FLOAT3:direction,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from worldPos in a direction. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldConeAt(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,GAMEOBJECT|FLOAT3:target,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from worldPos at the target. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''SetVisible(CHARACTER|ITEM:object, INT:visible)'''&lt;br /&gt;
&lt;br /&gt;
Sets a character or item visible or not.&lt;br /&gt;
&lt;br /&gt;
'''RotateY(INOUT FLOAT3:vector, FLOAT:degrees)'''&lt;br /&gt;
&lt;br /&gt;
Rotate the vector around the Y-axis for a certain angle (in degrees)&lt;br /&gt;
&lt;br /&gt;
'''SetHealth(CHARACTER|ITEM:target, FLOAT:percent)'''&lt;br /&gt;
&lt;br /&gt;
Set a characters or items health on the given percentage. (percentage between 0 and 1)&lt;br /&gt;
&lt;br /&gt;
'''PlaySound(CHARACTER|ITEM:target, STRING:soundEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a sound event at the target&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicForEveryone(STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on all the clients&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicOnCharacter(CHARACTER:target, STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on a character for all peers (3D)&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicForPeer(CHARACTER:target, STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on the peer of the character&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicForPeerWithInstrument(CHARACTER:target, CHARACTER:charInstrument, STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on the peer of the character concated with _INSTRUMENT&lt;br /&gt;
&lt;br /&gt;
'''SetX(INOUT FLOAT3:vector, FLOAT|INT:value)'''&lt;br /&gt;
&lt;br /&gt;
Sets the X component of the FLOAT3&lt;br /&gt;
&lt;br /&gt;
'''SetY(INOUT FLOAT3:vector, FLOAT|INT:value)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Y component of the FLOAT3&lt;br /&gt;
&lt;br /&gt;
'''SetZ(INOUT FLOAT3:vector, FLOAT|INT:value)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Z component of the FLOAT3&lt;br /&gt;
&lt;br /&gt;
'''SetAtmosphere(FIXEDSTRING:atmosphereTriggerUUID, FIXEDSTRING:atmosphere)'''&lt;br /&gt;
&lt;br /&gt;
Changes the atmosphere of the trigger&lt;br /&gt;
&lt;br /&gt;
'''ResetAtmosphere(FIXEDSTRING:atmosphereTriggerUUID)'''&lt;br /&gt;
&lt;br /&gt;
Resets the atmosphere of the trigger&lt;br /&gt;
&lt;br /&gt;
'''AddStatusInfluence(CHARACTER|ITEM:object, STATUS:statusId, FLOAT:strength, [FIXEDSTRING:extraData=&amp;quot;&amp;quot;], [INT:isWeather=1], [INT:force=1])'''&lt;br /&gt;
&lt;br /&gt;
Adds the status influence strength on the object.&lt;br /&gt;
&lt;br /&gt;
'''RemoveStatusInfluence(CHARACTER|ITEM:object, STATUS:statusId, FLOAT:strength, [FIXEDSTRING:extraData=&amp;quot;&amp;quot;], [INT:isWeather=1])'''&lt;br /&gt;
&lt;br /&gt;
Removes the status influence strength on the object.&lt;br /&gt;
&lt;br /&gt;
'''AddTemporaryStatusInfluence(CHARACTER|ITEM:source, CHARACTER|ITEM:object, STATUS:statusId, FLOAT:strength, [FIXEDSTRING:extraData=&amp;quot;&amp;quot;], [INT:isWeather=1])'''&lt;br /&gt;
&lt;br /&gt;
Adds a temporary status influence strength on the object.. It will be gone in a few seconds if it's not set again&lt;br /&gt;
&lt;br /&gt;
'''CallFunction(FIXEDSTRING:functionName)'''&lt;br /&gt;
&lt;br /&gt;
Calls a function with the ID&lt;br /&gt;
&lt;br /&gt;
'''SetMaterial(CHARACTER|ITEM:object, FIXEDSTRING:materialUUID, INT:duration, INT:applyOnBody, INT:applyOnArmor, INT:applyOnWeapon[)'''&lt;br /&gt;
&lt;br /&gt;
Changes the material of the object for a set time (in turns), -1 is infinite. applyNormalMap: Copy the original materials normal map&lt;br /&gt;
&lt;br /&gt;
'''TeleportTo(CHARACTER|ITEM:object, GAMEOBJECT|FLOAT3:target, [INT:Force=0])'''&lt;br /&gt;
&lt;br /&gt;
Teleport object to or near the target&lt;br /&gt;
&lt;br /&gt;
'''Transform(CHARACTER|ITEM:object, CHARACTERTEMPLATE|ITEMTEMPLATE:root [, FIXEDSTRING:fx, INT:replaceScripts=1, OUT FLOAT:currentHP])'''&lt;br /&gt;
&lt;br /&gt;
Transforms &amp;lt;object&amp;gt; using &amp;lt;root&amp;gt;, returns &amp;lt;currentHP&amp;gt;, plays &amp;lt;fx&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''SaveGame(FIXEDSTRING:saveGameName)'''&lt;br /&gt;
&lt;br /&gt;
Save the savegame with name &amp;lt;saveGameName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LoadGame(FIXEDSTRING:saveGameName)'''&lt;br /&gt;
&lt;br /&gt;
Load the savegame with name &amp;lt;saveGameName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LoadLevel(FIXEDSTRING:levelName)'''&lt;br /&gt;
&lt;br /&gt;
Load the level with name &amp;lt;levelName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''KillCombat(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Kill all the enemies in the combat which contains &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SetTag(CHARACTER|ITEM:object, FIXEDSTRING:tag)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Tag on the Object&lt;br /&gt;
&lt;br /&gt;
'''ClearTag(CHARACTER|ITEM:object, FIXEDSTRING:tag)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Tag on the Object&lt;br /&gt;
&lt;br /&gt;
'''SetGlobalFlag(FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Global Flag&lt;br /&gt;
&lt;br /&gt;
'''ClearGlobalFlag(FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Global Flag&lt;br /&gt;
&lt;br /&gt;
'''SetFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Flag on the Object&lt;br /&gt;
&lt;br /&gt;
'''ClearFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Flag on the Object&lt;br /&gt;
&lt;br /&gt;
'''SetUserFlag(CHARACTER:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Flag on the user's characters&lt;br /&gt;
&lt;br /&gt;
'''ClearUserFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Flag on the user's characters&lt;br /&gt;
&lt;br /&gt;
'''SetPartyFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Flag on the party's characters&lt;br /&gt;
&lt;br /&gt;
'''ClearPartyFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Flag on the party's characters&lt;br /&gt;
&lt;br /&gt;
'''StartVoiceBark(STRING:barkName, CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Start a voicebark on character&lt;br /&gt;
&lt;br /&gt;
'''ConfrontationDone(INT: CrimeID, CHARACTER:lead, CHARACTER:criminal, ...)'''&lt;br /&gt;
&lt;br /&gt;
Resolve the crime with id CrimeID for the specified criminals&lt;br /&gt;
&lt;br /&gt;
'''CrimesceneInvestigationDone(CHARACTER:investigator)'''&lt;br /&gt;
&lt;br /&gt;
Crimescene is considered investigated by this NPC, start looking for culprits&lt;br /&gt;
&lt;br /&gt;
'''ListAdd(LIST&amp;lt;OBJECT&amp;gt;:list, OBJECT:entry)'''&lt;br /&gt;
&lt;br /&gt;
Add &amp;lt;entry&amp;gt; at the back of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ListRemove(LIST&amp;lt;OBJECT&amp;gt;:list, INT:index)'''&lt;br /&gt;
&lt;br /&gt;
Remove the entry at &amp;lt;index&amp;gt; of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ListSet(LIST&amp;lt;OBJECT&amp;gt;:list, INT:index, OBJECT:entry)'''&lt;br /&gt;
&lt;br /&gt;
Set the entry at &amp;lt;index&amp;gt; of &amp;lt;list&amp;gt; to &amp;lt;entry&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ListClear(LIST&amp;lt;OBJECT&amp;gt;:list)'''&lt;br /&gt;
&lt;br /&gt;
Remove all entries of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''EndTurn(CHARACTER|ITEM:Target)'''&lt;br /&gt;
&lt;br /&gt;
Ends the object's current turn&lt;br /&gt;
&lt;br /&gt;
'''SetCanFight(CHARACTER|ITEM:entity, INT:enabled[, INT:wholeGroup=0])'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the entity can fight. Optional for the whole group&lt;br /&gt;
&lt;br /&gt;
'''SetCanJoinCombat(CHARACTER|ITEM:entity, INT:enabled[, INT:wholeGroup=0])'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the entity can join combats. Optional for the whole group&lt;br /&gt;
&lt;br /&gt;
'''SetIsBoss(CHARACTER|ITEM:entity, INT:enabled)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the entity is a boss.&lt;br /&gt;
&lt;br /&gt;
'''GetAIHintTriggers(OUT LIST&amp;lt;TRIGGER&amp;gt;:triggers[, [LIST]FIXEDSTRING:tags, INT:needsAllTags = -1)'''&lt;br /&gt;
&lt;br /&gt;
Returns all AIHintAreaTriggers in &amp;lt;triggers&amp;gt;. Uses contraints if set.&lt;br /&gt;
&lt;br /&gt;
'''SetCombatTimeout(CHARACTER|ITEM:entity, FLOAT:timer)'''&lt;br /&gt;
&lt;br /&gt;
Overwrites the entity's combat timeout check.&lt;br /&gt;
&lt;br /&gt;
'''ResetCombatTimeout(CHARACTER|ITEM:entity)'''&lt;br /&gt;
&lt;br /&gt;
Resets the entity's combat timeout check.&lt;br /&gt;
&lt;br /&gt;
'''EnterCombat(CHARACTER|ITEM:source, CHARACTER|ITEM:target)'''&lt;br /&gt;
&lt;br /&gt;
Enters combat with target&lt;br /&gt;
&lt;br /&gt;
'''LeaveCombat(CHARACTER|ITEM:source)'''&lt;br /&gt;
&lt;br /&gt;
Leaves the combat&lt;br /&gt;
&lt;br /&gt;
'''SetFaction(CHARACTER|ITEM:target, FIXEDSTRING:faction)'''&lt;br /&gt;
&lt;br /&gt;
Changes the faction of a character or item&lt;br /&gt;
&lt;br /&gt;
'''SetInvulnerable(CHARACTER|ITEM:target, INT:bool)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character or item invulnerable or not. (Allow damage)&lt;br /&gt;
&lt;br /&gt;
'''JumpToTurn(CHARACTER|ITEM:Target)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to targets turn (ends the current turn)&lt;br /&gt;
&lt;br /&gt;
'''Sleep(FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
Sleeps for a certain amount of time&lt;br /&gt;
&lt;br /&gt;
'''CharacterAttack(CHARACTER|ITEM|FLOAT3:target [,INT:alwaysHit])'''&lt;br /&gt;
&lt;br /&gt;
Moves in weapon range and attacks the target&lt;br /&gt;
&lt;br /&gt;
'''CharacterAttackWithoutMove(CHARACTER|ITEM|FLOAT3:target [,INT:alwaysHit])'''&lt;br /&gt;
&lt;br /&gt;
Attacks the target without checking weaponranges and without moving&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveTo(GAMEOBJECT|FLOAT3:target, [INT:running=0, INT:shouldArrive=0, INT:longPath=0, FLOAT:minDistance=1.5, FLOAT:maxDistance=minDistance+2.5])'''&lt;br /&gt;
&lt;br /&gt;
Move to the target. Set shouldArrive to 1 if you want a guaranteed move. (teleports on fail) &lt;br /&gt;
&lt;br /&gt;
'''CharacterAiMove(FLOAT3:target, CHARACTER:targetCharacter, ITEM:targetItem)'''&lt;br /&gt;
&lt;br /&gt;
Moves to the target, calculated by the AI. Should only be used with results from the AI!&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveInRange(GAMEOBJECT|FLOAT3:target, FLOAT:rangeMin, FLOAT:rangeMax, INT:running, [LIST&amp;lt;TRIGGER&amp;gt;:hintTriggers=null, INT:mustBeInTrigger=0])'''&lt;br /&gt;
&lt;br /&gt;
Move within a certain range of target. Optionally pass hinttriggers in which the result is preferred/necessary.&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveInWeaponRange(GAMEOBJECT|FLOAT3:target, INT:running, [LIST&amp;lt;TRIGGER&amp;gt;:hintTriggers=null, INT:mustBeInTrigger=0])'''&lt;br /&gt;
&lt;br /&gt;
Move within weapon range of target. Optionally pass hinttriggers in which the result is preferred/necessary.&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveInSkillRange(GAMEOBJECT|FLOAT3:target, SKILL:skill, INT:running, [LIST&amp;lt;TRIGGER&amp;gt;:hintTriggers=null, INT:mustBeInTrigger=0])'''&lt;br /&gt;
&lt;br /&gt;
Move within skill range of target. Optionally pass hinttriggers in which the result is preferred/necessary.&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveOutOfSight(FLOAT:angle)'''&lt;br /&gt;
&lt;br /&gt;
Move out of screen&lt;br /&gt;
&lt;br /&gt;
'''CharacterPlayAnimation(FIXEDSTRING:animation [, INT:exitOnFinish=1, INT:waitForCompletion=1])'''&lt;br /&gt;
&lt;br /&gt;
Plays a certain animation ExitOnFinish means if the exit will kill itself after it was played (revert back to still) &lt;br /&gt;
&lt;br /&gt;
'''CharacterStopAnimation(-)'''&lt;br /&gt;
&lt;br /&gt;
Stops all animations.&lt;br /&gt;
&lt;br /&gt;
'''CharacterPickUpItem(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Moves close enough to the item if necessary and picks it up&lt;br /&gt;
&lt;br /&gt;
'''CharacterUseItem(ITEM:item [, INTEGER:LongPath])'''&lt;br /&gt;
&lt;br /&gt;
Moves close enough to the item if necessary and uses it&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveItem(ITEM:item, INTEGER:ignoreWeight, INTEGER:ignoreAPCost [, INTEGER:ignoreDangerousSurfaces=1, INT:amount=-1, GAMEOBJECT|FLOAT3:destination])'''&lt;br /&gt;
&lt;br /&gt;
Moves close enough to the item if necessary and moves it to the destination. Will try to find a destination if not supplied.&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddSkill(CHARACTER:character, SKILL:skill[, INT:ShowNotification=0])'''&lt;br /&gt;
&lt;br /&gt;
Adds &amp;lt;skill&amp;gt; to &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveSkill(CHARACTER:character, SKILL:skill)'''&lt;br /&gt;
&lt;br /&gt;
Removes &amp;lt;skill&amp;gt; from &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterUseSkill(SKILL:skill, GAMEOBJECT|FLOAT3:target [, GAMEOBJECT|FLOAT3:target2, ITEM:skillItem, INT:ignoreHasSkill=0])'''&lt;br /&gt;
&lt;br /&gt;
Cast a skill&lt;br /&gt;
&lt;br /&gt;
'''CharacterAppearAt(GAMEOBJECT|FLOAT3:target, INT:playspawn)'''&lt;br /&gt;
&lt;br /&gt;
Appear at the target&lt;br /&gt;
&lt;br /&gt;
'''CharacterAppearOutOfSightTo(GAMEOBJECT:target, FLOAT:angle, INT:playspawn)'''&lt;br /&gt;
&lt;br /&gt;
Appears out of sight to the players from a certain angle while being able to reach target&lt;br /&gt;
&lt;br /&gt;
'''CharacterAppearOnTrailOutOfSightTo(CHARACTER:target, FLOAT:angle, INT:playspawn)'''&lt;br /&gt;
&lt;br /&gt;
Appears out of sight to the players, on its previous locations, from a certain angle while being able to reach target&lt;br /&gt;
&lt;br /&gt;
'''CharacterDisappear(FLOAT:angle[, INTEGER:isRunning=0])'''&lt;br /&gt;
&lt;br /&gt;
Move out of screen and go of stage, will run if &amp;lt;isRunning&amp;gt; is not 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetOffStage(-)'''&lt;br /&gt;
&lt;br /&gt;
Set Off Stage&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetOnStage(-)'''&lt;br /&gt;
&lt;br /&gt;
Set On Stage&lt;br /&gt;
&lt;br /&gt;
'''CharacterLookAt(GAMEOBJECT|FLOAT3|SPLINE:target[, INT:snapToTarget=0, INT:angleTolerance=0])'''&lt;br /&gt;
&lt;br /&gt;
Rotates the character to look at the target (Closest spline point in case of a spline).&lt;br /&gt;
&lt;br /&gt;
'''CharacterLookFrom(GAMEOBJECT|SPLINE:target[, INT:snapToTarget=0])'''&lt;br /&gt;
&lt;br /&gt;
Rotates to the character so it has the same rotation as the target (Closest spline point in case of a spline).&lt;br /&gt;
&lt;br /&gt;
'''CharacterFollow(CHARACTER:target, FLOAT:durationInSeconds, INT:run)'''&lt;br /&gt;
&lt;br /&gt;
Follow the target for a certain time&lt;br /&gt;
&lt;br /&gt;
'''CharacterFollowOwnerOrLeader(FLOAT:durationInSeconds, INT:run)'''&lt;br /&gt;
&lt;br /&gt;
Follow the leader or owner for a certain time&lt;br /&gt;
&lt;br /&gt;
'''CharacterWander(FLOAT|TRIGGER:range, FLOAT:durationInSeconds [, INT:run, GAMEOBJECT:anchor])'''&lt;br /&gt;
&lt;br /&gt;
Wander around for a certain time&lt;br /&gt;
&lt;br /&gt;
'''CharacterSwitchWeaponType(WEAPON:type)'''&lt;br /&gt;
&lt;br /&gt;
If necessary switch to the new weapon type&lt;br /&gt;
&lt;br /&gt;
'''CharacterFleeFrom(RELATION:relation, FLOAT:range)'''&lt;br /&gt;
&lt;br /&gt;
Run away from certain characters if necessary&lt;br /&gt;
'''&lt;br /&gt;
CharacterFleeFromSurface(SURFACE:surface)'''&lt;br /&gt;
&lt;br /&gt;
Run away from a certain surface if necessary&lt;br /&gt;
&lt;br /&gt;
'''CharacterFleeFromDangerousSurface(-)'''&lt;br /&gt;
&lt;br /&gt;
Run away from a dangerous surfaces if necessary&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddSourcePoints(CHARACTER:character, INT:amount)'''&lt;br /&gt;
&lt;br /&gt;
Adds x source points (x can be negative to substract)&lt;br /&gt;
&lt;br /&gt;
'''CharacterDie(CHARACTER:character[, DEATH:type=DoT])'''&lt;br /&gt;
&lt;br /&gt;
Kills the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterHeal(CHARACTER:character, FLOAT:percentage)'''&lt;br /&gt;
&lt;br /&gt;
Heals the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterConsume(CHARACTER:character, POTION:potion)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character consume a potion. Doesn't cost any AP and will just execute the result of the potion.&lt;br /&gt;
&lt;br /&gt;
'''CharacterDisableAllCrimes(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Disables all generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterEnableAllCrimes(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Enables all generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
'''&lt;br /&gt;
CharacterEnableCrime(CHARACTER:target, STRING:crime, ...)'''&lt;br /&gt;
&lt;br /&gt;
Enables the specified generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterDisableCrime(CHARACTER:target, STRING:crime, ...)'''&lt;br /&gt;
&lt;br /&gt;
Disables the specified generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetLongInvestigationDuration(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Doubles the time it takes for the investigation to time out. Use this when the character needs to move a long path before investigating.&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiCalculate(-)'''&lt;br /&gt;
&lt;br /&gt;
Calculate the AI of the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiStopCalculate(-)'''&lt;br /&gt;
&lt;br /&gt;
Stop the calculation of the AI of the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiFinishMoveSkill(-)'''&lt;br /&gt;
&lt;br /&gt;
Finish the current MoveSkill.&lt;br /&gt;
'''&lt;br /&gt;
CharacterAiAddInterestingItem(CHARACTER:character, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Make it interesting for the AI to destroy that Item&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiRemoveInterestingItem(CHARACTER:character, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Make it no longer interesting for the AI to destroy that Item&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetArchetype(CHARACTER:character, ARCHETYPE:archetype)'''&lt;br /&gt;
&lt;br /&gt;
Sets the archetype of the character, used in AI calculations&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetStoryNPC(CHARACTER:character, INT:bool)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character storyNPC or not.&lt;br /&gt;
'''&lt;br /&gt;
CharacterAddActionPoints(CHARACTER:character, INT:amount)'''&lt;br /&gt;
&lt;br /&gt;
Give character some action points&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetImmortal(CHARACTER:character, INT:bool)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character immortal or not. (Allow dying)&lt;br /&gt;
&lt;br /&gt;
'''CharacterPlayEffect(CHARACTER:character, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect on the character and it follows the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterPlayLoopEffect(OUT INT64:effectHandle, CHARACTER:character, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays a looping effect on the character and it follows the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterEvent(CHARACTER:character, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw a character event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''CharacterItemEvent(CHARACTER:character, ITEM:item, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw a character/item event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''CharacterCharacterEvent(CHARACTER:character1, CHARACTER:character2, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw a character/character event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetRelationIndivToIndiv(CHARACTER:source, CHARACTER:target, INT:relation)'''&lt;br /&gt;
&lt;br /&gt;
Changes the relationship between 2 characters.&lt;br /&gt;
'''&lt;br /&gt;
CharacterForceUpdate(INT:forceUpdate)'''&lt;br /&gt;
&lt;br /&gt;
Makes sure the attached character is always being update or not. &lt;br /&gt;
'''&lt;br /&gt;
CharacterSetEnemy(CHARACTER:character, CHARACTER:enemy)'''&lt;br /&gt;
&lt;br /&gt;
Sets the current enemy of character&lt;br /&gt;
&lt;br /&gt;
'''CharacterApplyStatus(CHARACTER:character, STATUS:statusId [, INT:turns=null, INT:force=0])'''&lt;br /&gt;
&lt;br /&gt;
Applies the status to the character When turns is -1 it's a permanent status When turns is -2 it's a keep alive status (which means it will die if it's not applied again within 1 second) &lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveStatus(CHARACTER:character, STATUS:statusId [, STATUS:reasonStatusID=null])'''&lt;br /&gt;
&lt;br /&gt;
Removes the status from the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterDestroy(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Destroys the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetCanSpotSneakers(CHARACTER:character, INT:enabled)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the character can spot sneaking characters.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetAttackOfOpportunity(CHARACTER:character, INT:enabled)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the character can do attack of opportunities.&lt;br /&gt;
&lt;br /&gt;
'''CharacterResurrect(CHARACTER:character [, INT:Percentage = 100])'''&lt;br /&gt;
&lt;br /&gt;
Resurrects the character at [2]% health.&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddToInventory(CHARACTER:character, FIXEDSTRING:itemStatsObject[, INT:amount, INT:showInTrade=1])'''&lt;br /&gt;
&lt;br /&gt;
Add the item to the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveFromInventory(CHARACTER:character, FIXEDSTRING:itemStatsObject[, INT:amount])'''&lt;br /&gt;
&lt;br /&gt;
Remove the item from the character. If Amount is -1, then all are removed&lt;br /&gt;
&lt;br /&gt;
'''CharacterDrinkPotion(FIXEDSTRING:statID)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character drink a potion from the inventory.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetAnimationOverride(CHARACTER:character, FIXEDSTRING:animation)'''&lt;br /&gt;
&lt;br /&gt;
Sets an animation override, only walk/run/die animations can override it.&lt;br /&gt;
&lt;br /&gt;
'''CharacterUseActionPoints(CHARACTER:character, INT:amount [, OUT INT:succeeded])'''&lt;br /&gt;
&lt;br /&gt;
Uses x action points&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddTreasureTable(CHARACTER:character, FIXEDSTRING:treasureTable)'''&lt;br /&gt;
&lt;br /&gt;
Adds &amp;lt;treasureTable&amp;gt; to the treasure list of &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveTreasureTable(CHARACTER:character, FIXEDSTRING:treasureTable)'''&lt;br /&gt;
&lt;br /&gt;
Removes &amp;lt;treasureTable&amp;gt; from the treasure list of &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterClearTreasureTables(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Removes all treasure tables from &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetTemporaryHostileRelation(CHARACTER:character, CHARACTER:otherCharacter)'''&lt;br /&gt;
&lt;br /&gt;
Creates a temporary hostile relation between the 2 characters!&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetFightMode(CHARACTER:character, INT:fight [, INT:force=0])'''&lt;br /&gt;
&lt;br /&gt;
Set the character in sheath/unsheated mode.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetStats(CHARACTER:character, FIXEDSTRING:statsEntry [, INT:keepVitality=0, INT:keepAP=0, INT:keepLevel=0, OUT FLOAT:currentHP])'''&lt;br /&gt;
&lt;br /&gt;
Applies &amp;lt;statsEntry&amp;gt; from character.xlsm to &amp;lt;character&amp;gt;, returns &amp;lt;currentHP&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetWalkSpeedOverride(CHARACTER:character, INTEGER:override [, FLOAT:walkSpeed])'''&lt;br /&gt;
&lt;br /&gt;
Sets walk speed override of &amp;lt;character&amp;gt;, removes it if &amp;lt;override&amp;gt; is 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetRunSpeedOverride(CHARACTER:character, INTEGER:override [, FLOAT:runSpeed])'''&lt;br /&gt;
&lt;br /&gt;
Sets run speed override of &amp;lt;character&amp;gt;, removes it if &amp;lt;override&amp;gt; is 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetHasDialog(CHARACTER:character, INTEGER:bool)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the dialog of the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterInitPatrol(SPLINE:spline, INT:splineIndex, INT:reversed, INT:running)'''&lt;br /&gt;
&lt;br /&gt;
Start patroling from the given index along the given spline with the given character.&lt;br /&gt;
&lt;br /&gt;
'''CharacterStartPatrol(SPLINE:spline, INT:splineIndex, INT:reversed, INT:running)'''&lt;br /&gt;
&lt;br /&gt;
Start patroling from the given index along the given spline with the given character.&lt;br /&gt;
&lt;br /&gt;
'''CharacterStopPatrol(-)'''&lt;br /&gt;
&lt;br /&gt;
Let the character stop patrolling whatever spline he's on!&lt;br /&gt;
&lt;br /&gt;
'''CharacterInterruptPatrol(-)'''&lt;br /&gt;
&lt;br /&gt;
Call when the patrol should interrupt so the guard stops moving to the next spline. If this is called when the character is deactivated, a caret will take his place.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetAnimationSetOverride(CHARACTER:source, FIXEDSTRING:override)'''&lt;br /&gt;
&lt;br /&gt;
Sets an animation set override for a character. Empty fixedstring clears the override.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetFloating(CHARACTER:target, INTEGER:isFloating)'''&lt;br /&gt;
&lt;br /&gt;
Sets &amp;lt;target&amp;gt; floating if &amp;lt;isFloating&amp;gt; is not 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterResetCooldowns(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Resets the skill cooldowns for &amp;lt;target&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ItemEvent(ITEM:item, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw an item event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayAnimation(FIXEDSTRING:animation)'''&lt;br /&gt;
&lt;br /&gt;
Plays an animation on the item&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayAnimationTo(FIXEDSTRING:animation, FLOAT:targetPercentage, [FLOAT:speed])'''&lt;br /&gt;
&lt;br /&gt;
Plays an animation on the item to the target time (percentage of the total duration)&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayEffect(ITEM:item, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect on the item and it follows the item&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayLoopEffect(OUT INT:effectHandle, ITEM:item, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays a looping effect on the item and it follows the item&lt;br /&gt;
&lt;br /&gt;
'''ItemSetOnStage(ITEM:item, INTEGER:bool)'''&lt;br /&gt;
&lt;br /&gt;
Sets an item on or offstage&lt;br /&gt;
&lt;br /&gt;
'''ItemSetCanInteract(ITEM:item, INTEGER:bool)'''&lt;br /&gt;
&lt;br /&gt;
Sets an item (not) interactible&lt;br /&gt;
&lt;br /&gt;
'''ItemClose(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Close an item&lt;br /&gt;
&lt;br /&gt;
'''ItemOpen(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Open an item&lt;br /&gt;
&lt;br /&gt;
'''ItemDrop(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Drop an item&lt;br /&gt;
&lt;br /&gt;
'''ItemLock(ITEM:item, FIXEDSTRING:key)'''&lt;br /&gt;
&lt;br /&gt;
Lock an item&lt;br /&gt;
&lt;br /&gt;
'''ItemUnlock(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Unlock an item&lt;br /&gt;
&lt;br /&gt;
'''ItemApplyStatus(ITEM:item, STATUS:statusId [, INT:turns=null, INT:force=0])'''&lt;br /&gt;
&lt;br /&gt;
Applies the status to the item When turns is -1 it's a permanent status When turns is -2 it's a keep alive status (which means it will die if it's not applied again within 1 second) &lt;br /&gt;
&lt;br /&gt;
'''ItemRemoveStatus(ITEM:item, STATUS:statusId)'''&lt;br /&gt;
&lt;br /&gt;
Removes the status from the item&lt;br /&gt;
&lt;br /&gt;
'''ItemDie(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Kills the item&lt;br /&gt;
&lt;br /&gt;
'''ItemMoveTo(GAMEOBJECT|FLOAT3:target, FLOAT:velocity, FLOAT:acceleration, INTEGER:matchTargetRotation)'''&lt;br /&gt;
&lt;br /&gt;
Moves the item to the target&lt;br /&gt;
&lt;br /&gt;
'''ItemToInventory(ITEM:item, CHARACTER|ITEM:target [,INT:amount=-1])'''&lt;br /&gt;
&lt;br /&gt;
Moves the item to the target's inventory&lt;br /&gt;
&lt;br /&gt;
'''ItemLookAt(GAMEOBJECT:target, FLOAT:degreesPerSecond)'''&lt;br /&gt;
&lt;br /&gt;
Rotates the item to look at the target&lt;br /&gt;
&lt;br /&gt;
'''ItemDestroy(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Destroys the item&lt;br /&gt;
&lt;br /&gt;
'''ItemSetAmount(ITEM:item, INT:amount)'''&lt;br /&gt;
&lt;br /&gt;
Change the amount of the item&lt;br /&gt;
&lt;br /&gt;
'''IterateItemsInInventory(CHARACTER|ITEM:source, FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each iten in source's inventory. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''ItemAddCharges(ITEM:TargetItem, INT:charges)'''&lt;br /&gt;
&lt;br /&gt;
Add/subtract charges from an item&lt;br /&gt;
&lt;br /&gt;
'''ItemResetChargesToInitial(ITEM:TargetItem)'''&lt;br /&gt;
&lt;br /&gt;
Resets charges from item to initial state&lt;br /&gt;
&lt;br /&gt;
'''MakePeace(CHARACTER:Source, CHARACTER:Target[, INT:IgnoreVote = 1])'''&lt;br /&gt;
&lt;br /&gt;
Make peace between users of the characters&lt;br /&gt;
&lt;br /&gt;
'''MakeWar(CHARACTER:Source, CHARACTER:Target[, INT:IgnoreVote = 1])'''&lt;br /&gt;
&lt;br /&gt;
Make war between users of the characters&lt;br /&gt;
&lt;br /&gt;
'''FindSurface(OUT FLOAT3:result, GAMEOBJECT|FLOAT3:source, FLOAT:minRange, FLOAT:maxRange, SURFACE:type [,CHARACTER:alignSource, INT:minEnemiesInSurface, INT:maxAlliesInSurface, INT:minimumCellCount])'''&lt;br /&gt;
&lt;br /&gt;
Finds the closest surface of a specific type.&lt;br /&gt;
&lt;br /&gt;
'''FindValidPosition(INOUT FLOAT3:position, FLOAT:radius[, CHARACTER|ITEM:object=null])'''&lt;br /&gt;
&lt;br /&gt;
Finds the closest valid position (where the object can stand.)&lt;br /&gt;
&lt;br /&gt;
'''FindPosition(INOUT FLOAT3:position, CHARACTER:source, INT:canStand, INT:checkSight, FLOAT:minRadius, FLOAT:maxRadius, FLOAT:rangeCheck, CHARACTER:alignSource, INT:minAllies, INT:maxAllies, INT:minEnemies, INT:maxEnemies [,FIXEDSTRING:AiHintTag=null, INT:forceHint=0, FLOAT3:SourcePosition])'''&lt;br /&gt;
&lt;br /&gt;
Finds the closest position from the source (within radius) where the conditions are matched. &lt;br /&gt;
&lt;br /&gt;
'''Cast(OUT OBJECT variable, OBJECT value)'''&lt;br /&gt;
&lt;br /&gt;
Casts the value to the variable.&lt;br /&gt;
&lt;br /&gt;
'''StringConcatenate(STRING:stringA, STRING:stringB, OUT STRING:resultingString)'''&lt;br /&gt;
&lt;br /&gt;
Appends stringB to stringA. Resulting string is stored in the third parameter.&lt;br /&gt;
&lt;br /&gt;
== QUERIES ==&lt;br /&gt;
&lt;br /&gt;
GetPosition(GAMEOBJECT:object,OUT FLOAT3:src)&lt;br /&gt;
&lt;br /&gt;
Get the current position of an object&lt;br /&gt;
&lt;br /&gt;
GetForwardDirection(GAMEOBJECT:object,OUT FLOAT3:direction)&lt;br /&gt;
&lt;br /&gt;
Get the current forward direction of an object&lt;br /&gt;
&lt;br /&gt;
GetRightDirection(GAMEOBJECT:object,OUT FLOAT3:direction)&lt;br /&gt;
&lt;br /&gt;
Get the current right direction of an object&lt;br /&gt;
&lt;br /&gt;
GetUpDirection(GAMEOBJECT:object,OUT FLOAT3:direction)&lt;br /&gt;
&lt;br /&gt;
Get the current up direction of an object&lt;br /&gt;
&lt;br /&gt;
GetDirection(GAMEOBJECT|FLOAT3:src,GAMEOBJECT|FLOAT3:target,OUT FLOAT3:direction[, OUT FLOAT:distance])&lt;br /&gt;
&lt;br /&gt;
Get the direction from src to target (optional: returns the distance between the objects as well)&lt;br /&gt;
&lt;br /&gt;
GetRotation(GAMEOBJECT:object, OUT FLOAT3:vector)&lt;br /&gt;
&lt;br /&gt;
Get the rotation of an object&lt;br /&gt;
&lt;br /&gt;
CharacterGetTargetSpline(INT: SplineIndex)&lt;br /&gt;
&lt;br /&gt;
Returns the spline index the character is currently walking towards, or -1 if he is not active on a spline.&lt;br /&gt;
&lt;br /&gt;
IsEqual(OBJECT:variable, OBJECT:variable)&lt;br /&gt;
&lt;br /&gt;
Compares both objects and see if they are equal.&lt;br /&gt;
&lt;br /&gt;
IsLessThen(INT|FLOAT:variable, INT|FLOAT:variable)&lt;br /&gt;
&lt;br /&gt;
Compares both objects and see if the first one is smaller.&lt;br /&gt;
&lt;br /&gt;
IsGreaterThen(INT|FLOAT:variable, INT|FLOAT:variable)&lt;br /&gt;
&lt;br /&gt;
Compares both objects and see if the first one is bigger.&lt;br /&gt;
&lt;br /&gt;
IsRandom(FLOAT:percentage)&lt;br /&gt;
&lt;br /&gt;
Each time this condition is checked, it will succeed with a chance of the percentage (between 0 and 1)&lt;br /&gt;
&lt;br /&gt;
IsRound(INT:roundNumber)&lt;br /&gt;
&lt;br /&gt;
Checks if we are currently in combat in round x&lt;br /&gt;
&lt;br /&gt;
IsInSurface(OBJECT|FLOAT3:target, SURFACE:type[, FLOAT:radius])&lt;br /&gt;
&lt;br /&gt;
Check if the character, item, trigger or position is currently within the specific surface.&lt;br /&gt;
&lt;br /&gt;
IsInDangerousSurface(OBJECT|FLOAT3:target[, CHARACTER:character, FLOAT:radius])&lt;br /&gt;
&lt;br /&gt;
Check if &amp;lt;target&amp;gt; is currently in on a dangerous surface. Uses &amp;lt;character&amp;gt; for path influences if provided (is necessary with non-character targets)&lt;br /&gt;
&lt;br /&gt;
IsInDialog(CHARACTER|ITEM:target[, INT:ignoreAutomatedDialogs=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character or item is currently in a dialog, optionally ignoring automated dialogs&lt;br /&gt;
&lt;br /&gt;
IsInAutomatedDialog(CHARACTER|ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Check if the character or item is currently in an automated dialog&lt;br /&gt;
&lt;br /&gt;
GetDistance(OUT FLOAT:distance, GAMEOBJECT|FLOAT3:source, GAMEOBJECT|FLOAT3:target)&lt;br /&gt;
&lt;br /&gt;
Returns the distance between 2 positions&lt;br /&gt;
&lt;br /&gt;
GetDistance2D(OUT FLOAT:distance, GAMEOBJECT|FLOAT3:source, GAMEOBJECT|FLOAT3:target)&lt;br /&gt;
Returns the 2D distance between 2 positions (ignores height)&lt;br /&gt;
&lt;br /&gt;
GetInnerDistance(OUT FLOAT:distance, GAMEOBJECT:source, GAMEOBJECT:target)&lt;br /&gt;
&lt;br /&gt;
Returns the distance between 2 gameobjects (character, item, trigger, ...) Their bounds are already subtracted.&lt;br /&gt;
&lt;br /&gt;
GetPosition(GAMEOBJECT:object, OUT FLOAT3:position)&lt;br /&gt;
&lt;br /&gt;
Returns the position of a gameobject (character, item, trigger, ...)&lt;br /&gt;
&lt;br /&gt;
GetVar(OUT OBJECT:returnValue, CHARACTER|ITEM:target, FIXEDSTRING:varName)&lt;br /&gt;
&lt;br /&gt;
Gets a global variable from the target&lt;br /&gt;
&lt;br /&gt;
GetClosestPlayer(OUT CHARACTER:player, GAMEOBJECT|FLOAT3:source)&lt;br /&gt;
&lt;br /&gt;
Gets the closest player near the source, default being being the object itself&lt;br /&gt;
&lt;br /&gt;
GetPlayerCount(OUT INT:playerCount)&lt;br /&gt;
&lt;br /&gt;
Gets the number of players in the party&lt;br /&gt;
&lt;br /&gt;
GetPlayerByIndex(OUT CHARACTER:returnCharacter, INT:playerIndex)&lt;br /&gt;
&lt;br /&gt;
Gets a player from the party by index&lt;br /&gt;
&lt;br /&gt;
GetRandomCharacter(OUT CHARACTER:returnCharacter, [INT:canBeSelf=0, INT:canBePlayer=0])&lt;br /&gt;
&lt;br /&gt;
Gets a random character in the current level&lt;br /&gt;
&lt;br /&gt;
ContainsSurface(GAMEOBJECT|FLOAT3:source, FLOAT:radius, SURFACE:type,)&lt;br /&gt;
&lt;br /&gt;
Checks if there is any surface of the type within a radius of the source&lt;br /&gt;
&lt;br /&gt;
IsSurface(GAMEOBJECT|FLOAT3:source, FLOAT:radius, SURFACE:type,)&lt;br /&gt;
&lt;br /&gt;
Checks if the whole radius around the source is the specified surface type&lt;br /&gt;
&lt;br /&gt;
IsObjectOnObject(CHARACTER|ITEM:source,CHARACTER|ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Checks if the source is standing on the target&lt;br /&gt;
&lt;br /&gt;
GetX(FLOAT3:vector, OUT FLOAT:value)&lt;br /&gt;
&lt;br /&gt;
Returns the X component of the vector&lt;br /&gt;
&lt;br /&gt;
GetY(FLOAT3:vector, OUT FLOAT:value)&lt;br /&gt;
&lt;br /&gt;
Returns the Y component of the vector&lt;br /&gt;
&lt;br /&gt;
GetZ(FLOAT3:vector, OUT FLOAT:value)&lt;br /&gt;
&lt;br /&gt;
Returns the Z component of the vector&lt;br /&gt;
&lt;br /&gt;
CanSee(GAMEOBJECT|FLOAT3:source, GAMEOBJECT|FLOAT3:target[, INT:addProjectileTargetGroundOffset=0])&lt;br /&gt;
&lt;br /&gt;
Check if the sight is blocked between 2 points.&lt;br /&gt;
&lt;br /&gt;
IsVisible(CHARACTER|ITEM:object)&lt;br /&gt;
&lt;br /&gt;
Check if the object is set invisible or not with SetVisible.&lt;br /&gt;
&lt;br /&gt;
GetTextDuration(CHARACTER|ITEM:object, FIXEDSRTING:key, OUT FLOAT:duration)&lt;br /&gt;
&lt;br /&gt;
Gets how long a text needs to be displayed&lt;br /&gt;
&lt;br /&gt;
IsCasual(-)&lt;br /&gt;
&lt;br /&gt;
Returns if the current game mode is Casual&lt;br /&gt;
&lt;br /&gt;
IsHardcore(-)&lt;br /&gt;
&lt;br /&gt;
Returns if the current game mode is Hardcore&lt;br /&gt;
&lt;br /&gt;
IsTagged(GAMEOBJECT:object, FIXEDSTRING:tag)&lt;br /&gt;
&lt;br /&gt;
Check if the object is tagged.&lt;br /&gt;
&lt;br /&gt;
TranslatedStringKeyExists(FIXEDSTRING:key)&lt;br /&gt;
&lt;br /&gt;
Check if the TranslatedString key exists.&lt;br /&gt;
&lt;br /&gt;
IsInCombat(CHARACTER|ITEM:object)&lt;br /&gt;
&lt;br /&gt;
Returns true if the object is in combat.&lt;br /&gt;
&lt;br /&gt;
IsInCombatWith(CHARACTER|ITEM:object, CHARACTER|ITEM:object)&lt;br /&gt;
&lt;br /&gt;
Returns true if the objects are in combat with each other.&lt;br /&gt;
&lt;br /&gt;
IsFacing(GAMEOBJECT:source, GAMEOBJECT|FLOAT3:target, [INT:angle=90])&lt;br /&gt;
&lt;br /&gt;
Returns true if the object is facing the position within the given angle.&lt;br /&gt;
&lt;br /&gt;
GameIsSaving(-)&lt;br /&gt;
&lt;br /&gt;
Returns true if the game is saving.&lt;br /&gt;
&lt;br /&gt;
GameIsLoading(-)&lt;br /&gt;
&lt;br /&gt;
Returns true if the game is loading.&lt;br /&gt;
&lt;br /&gt;
GetUserCount(OUT INT:userCount)&lt;br /&gt;
&lt;br /&gt;
Returns the user count.&lt;br /&gt;
&lt;br /&gt;
GetCurrentCharacter(OUT CHARACTER:character, INT:user)&lt;br /&gt;
&lt;br /&gt;
Returns the character currently being controlled by the specified user.&lt;br /&gt;
&lt;br /&gt;
GetCurrentLevel(OUT FIXEDSTRING:currentLevel)&lt;br /&gt;
&lt;br /&gt;
Returns the current levelname&lt;br /&gt;
&lt;br /&gt;
GetAIBounds(CHARACTER|ITEM:source, OUT FLOAT:bounds)&lt;br /&gt;
&lt;br /&gt;
Returns AI bounds of &amp;lt;source&amp;gt; in &amp;lt;bounds&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HasGlobalFlag(FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Global Flag is set&lt;br /&gt;
&lt;br /&gt;
HasFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Flag is set on the Object&lt;br /&gt;
&lt;br /&gt;
HasUserFlag(CHARACTER:object, FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Flag is set on the user's characters&lt;br /&gt;
&lt;br /&gt;
HasPartyFlag(CHARACTER:object, FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Flag is set on the party's characters&lt;br /&gt;
&lt;br /&gt;
DialogExists(STRING:dialogue)&lt;br /&gt;
&lt;br /&gt;
Returns true if the dialogue exists.&lt;br /&gt;
&lt;br /&gt;
IsActive(CHARACTER|ITEM:Object)&lt;br /&gt;
&lt;br /&gt;
Returns if the character or item is currently active.&lt;br /&gt;
&lt;br /&gt;
ListGetSize(LIST&amp;lt;OBJECT&amp;gt;:list, out INT:size)&lt;br /&gt;
&lt;br /&gt;
Returns the number of elements in &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ListGet(LIST&amp;lt;OBJECT&amp;gt;:list, INT:index, out OBJECT:entry)&lt;br /&gt;
&lt;br /&gt;
Returns &amp;lt;entry&amp;gt; at &amp;lt;index&amp;gt; of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ListGetRandom(LIST&amp;lt;OBJECT&amp;gt;:list, out OBJECT:entry)&lt;br /&gt;
&lt;br /&gt;
Returns a random &amp;lt;entry&amp;gt; of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IsBoss(CHARACTER|ITEM:Object)&lt;br /&gt;
&lt;br /&gt;
Returns true if the entity is tagged as a boss&lt;br /&gt;
&lt;br /&gt;
IsProjectileSkill(SKILL:skill)&lt;br /&gt;
&lt;br /&gt;
Returns true if the skill is a ranged skill (uses a projectile)&lt;br /&gt;
&lt;br /&gt;
IsValidSkillTarget(CHARACTER:source, OBJECT|FLOAT3:target, SKILLID:skill[, INTEGER:ignoreRangeCheck=0])&lt;br /&gt;
&lt;br /&gt;
Checks whether &amp;lt;target&amp;gt; is a valid target for &amp;lt;skill&amp;gt; at &amp;lt;source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GetFaction(OUT FIXEDSTRING:faction, CHARACTER|ITEM:character)&lt;br /&gt;
&lt;br /&gt;
Returns the faction of the provided character or item&lt;br /&gt;
&lt;br /&gt;
IsInActiveTurn(CHARACTER|ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Returns true if it's the character's or item's turn in combat.&lt;br /&gt;
&lt;br /&gt;
IsSkillActive(CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; has &amp;lt;skillId&amp;gt; active (in memory).&lt;br /&gt;
&lt;br /&gt;
HasSkillAi(SKILLID:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns true if the skill is using the new Ai system&lt;br /&gt;
&lt;br /&gt;
IsInArena(CHARACTER::character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character is in an arena fight&lt;br /&gt;
&lt;br /&gt;
CrimeGetType(INTEGER:crimeId, OUT STRING:crimeType)&lt;br /&gt;
&lt;br /&gt;
Returns the type of the crime with this id.&lt;br /&gt;
&lt;br /&gt;
CrimeGetCriminals(INTEGER:crimeId, OUT CHARACTER:criminal1, OUT CHARACTER:criminal2, OUT CHARACTER:criminal3, OUT CHARACTER:criminal4)&lt;br /&gt;
&lt;br /&gt;
Returns the criminals of that crime. They might all be null.&lt;br /&gt;
&lt;br /&gt;
IsSourceSkill(SKILL:skill)&lt;br /&gt;
&lt;br /&gt;
Returns true if the skill is a source skill.&lt;br /&gt;
&lt;br /&gt;
IsInGameMasterMode(-)&lt;br /&gt;
&lt;br /&gt;
Returns true if the game in game master mode.&lt;br /&gt;
&lt;br /&gt;
CharacterGet(OUT CHARACTER:character, GAMEOBJECT|FLOAT3:src, FLOAT:range, COMPARE:howTo, COMPAREFUNC:compareFunc[, RELATION: relation, SURFACE:surface, STATUS:status, TALENT:talent, CHARACTER:inSightOf, FIXEDSTRING:tag])&lt;br /&gt;
&lt;br /&gt;
Get a character within a certain range conforming to the filled in restraints. &lt;br /&gt;
&lt;br /&gt;
CharacterCount(OUT INT:count, GAMEOBJECT|FLOAT3:src, FLOAT:range, [RELATION: relation, SURFACE:surface, STATUS:status, TALENT:talent, CHARACTER:inSightOf])&lt;br /&gt;
&lt;br /&gt;
Counts the characters within a certain range conforming to the filled in restraints.&lt;br /&gt;
&lt;br /&gt;
CharacterGetOwner(OUT CHARACTER:owner, CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get the character's owner&lt;br /&gt;
&lt;br /&gt;
CharacterGetFollow(OUT CHARACTER:to follow, CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get the character to follow&lt;br /&gt;
&lt;br /&gt;
CharacterGetEnemy(OUT CHARACTER:current enemy, CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get current enemy of character&lt;br /&gt;
&lt;br /&gt;
CharacterCanCast(CHARACTER:source, SKILL:skillId, [ITEM:skillItem=null, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can cast the skill: will check cooldown, actionpoints&lt;br /&gt;
&lt;br /&gt;
CharacterCanSitOnItem(CHARACTER:source, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Check if the character source can sit or lie on an item.&lt;br /&gt;
&lt;br /&gt;
CharacterCanDrinkPotion(CHARACTER:source, FIXEDSTRING:potionID[, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can drink the potion: will check inv and actionpoints&lt;br /&gt;
&lt;br /&gt;
CharacterCanUseItem(CHARACTER:source, ITEM:item[, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can use the item in the world&lt;br /&gt;
&lt;br /&gt;
CharacterCanUseItemInInventory(CHARACTER:source, ITEM:item[, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can use the item in his inventory&lt;br /&gt;
&lt;br /&gt;
CharacterCanSee(CHARACTER:watchingChar, CHARACTER|ITEM:target [, INT:forceUpdate=0])&lt;br /&gt;
&lt;br /&gt;
Check if character has target in his line of sight. &lt;br /&gt;
&lt;br /&gt;
CharacterCanShoot(CHARACTER:source, GAMEOBJECT|FLOAT3:target)&lt;br /&gt;
&lt;br /&gt;
Check if the character can shoot the target.&lt;br /&gt;
&lt;br /&gt;
CharacterIsPlayer(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if the character is a player&lt;br /&gt;
&lt;br /&gt;
CharacterIsInParty(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if the character is in the party&lt;br /&gt;
&lt;br /&gt;
CharacterIsEnemy(CHARACTER:source, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is enemy of source&lt;br /&gt;
&lt;br /&gt;
CharacterIsAlly(CHARACTER:source, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is ally of source&lt;br /&gt;
&lt;br /&gt;
CharacterIsNeutral(CHARACTER:source, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is neutral of source&lt;br /&gt;
&lt;br /&gt;
CharacterIsDead(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is dead&lt;br /&gt;
&lt;br /&gt;
CharacterIsMoving(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is moving (speed &amp;gt; 0)&lt;br /&gt;
&lt;br /&gt;
CharacterIsSummon(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a summon&lt;br /&gt;
&lt;br /&gt;
CharacterIsPartyFollower(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a party follower&lt;br /&gt;
&lt;br /&gt;
CharacterIsStoryNPC(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a story NPC&lt;br /&gt;
&lt;br /&gt;
CharacterInWeaponRange(CHARACTER:character, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is in the current's weapon range&lt;br /&gt;
&lt;br /&gt;
CharacterInTouchRange(CHARACTER:character, CHARACTER:targetChar)&lt;br /&gt;
&lt;br /&gt;
Check if target is in the character's touch range &lt;br /&gt;
&lt;br /&gt;
CharacterHasStatus(CHARACTER:character, STATUS:statusId[, FIXEDSTRING:extraData])&lt;br /&gt;
&lt;br /&gt;
Check if character currently has the status. ExtraData can be filled in for some statuses: - Consume: statsid of the item - Shield: skillid of the shield&lt;br /&gt;
&lt;br /&gt;
CharacterGetStatusSourceCharacter(CHARACTER:character, STATUS:statusId, OUT CHARACTER:source[, FIXEDSTRING:extraData])&lt;br /&gt;
&lt;br /&gt;
Get the source character of a status&lt;br /&gt;
&lt;br /&gt;
CharacterGetStatusSourceItem(CHARACTER:character, STATUS:statusId, OUT ITEM:source[, FIXEDSTRING:extraData])&lt;br /&gt;
&lt;br /&gt;
Get the source item of a status&lt;br /&gt;
&lt;br /&gt;
CharacterHasTalent(CHARACTER:character, TALENT:talent)&lt;br /&gt;
&lt;br /&gt;
Check if character currently has the talent&lt;br /&gt;
&lt;br /&gt;
CharacterHasSkill(CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Check if character currently has the skill&lt;br /&gt;
&lt;br /&gt;
CharacterHasWeaponType(CHARACTER:character, WEAPON:weaponTYPE [, INT:equipped])&lt;br /&gt;
&lt;br /&gt;
Check if character currently has a weapon of this type in his inventory or equipped&lt;br /&gt;
&lt;br /&gt;
CharacterGetStat(OUT FLOAT:statValue, CHARACTER:character, CHARACTERSTAT:statType)&lt;br /&gt;
&lt;br /&gt;
Returns the current value of the stat (Vitality, ...)&lt;br /&gt;
&lt;br /&gt;
CharacterGetSightRange(OUT FLOAT:range, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's sight range&lt;br /&gt;
&lt;br /&gt;
CharacterGetWeaponRange(OUT FLOAT:minRange, OUT FLOAT:maxRange, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's current weapon range&lt;br /&gt;
&lt;br /&gt;
CharacterGetTouchRange(OUT FLOAT:touchRange, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's current touch range&lt;br /&gt;
&lt;br /&gt;
CharacterGetSkillRange(OUT FLOAT:minRange, OUT FLOAT:maxRange,CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns the character's skill range&lt;br /&gt;
&lt;br /&gt;
CharacterGetSkillImpactRange(OUT FLOAT:areaRange, CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns the character's skill range&lt;br /&gt;
&lt;br /&gt;
CharacterIsInTrigger(CHARACTER:character, TRIGGER:trigger)&lt;br /&gt;
&lt;br /&gt;
Check if character is in given trigger&lt;br /&gt;
&lt;br /&gt;
CharacterGetAbility(OUT INT:value, CHARACTER:character, ABILITY:ability)&lt;br /&gt;
&lt;br /&gt;
Returns the character's value of the specified ability&lt;br /&gt;
&lt;br /&gt;
CharacterGetHostileCount(OUT INT:value, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns how many characters are targeting this character right now... You can iterate over them with IterateEnemiesOf.&lt;br /&gt;
&lt;br /&gt;
CharacterCanFight(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character can fight.&lt;br /&gt;
&lt;br /&gt;
CharacterGetTemplate(CHARACTER:character, OUT CHARACTERTEMPLATE:root)&lt;br /&gt;
&lt;br /&gt;
Returns the roottemplate of the character.&lt;br /&gt;
&lt;br /&gt;
CharacterCanSpotSneakers(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character can spot sneaking characters&lt;br /&gt;
&lt;br /&gt;
CharacterIsFloating(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a floating character&lt;br /&gt;
&lt;br /&gt;
CharacterInCreation(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character is in character creation&lt;br /&gt;
&lt;br /&gt;
CharacterAvoidsTraps(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character avoids traps&lt;br /&gt;
&lt;br /&gt;
CharacterCheckRelation(CHARACTER:character, RELATION:relation)&lt;br /&gt;
&lt;br /&gt;
Returns true if relation check succeeds&lt;br /&gt;
&lt;br /&gt;
CharacterIsBetterOrEqualClass(CHARACTER:character, INT:currentScore, OUT INT:newScore, INT warriorScore, INT rogueScore, INT mageScore, INT clericScore, INT rangerScore)&lt;br /&gt;
&lt;br /&gt;
Returns true if score is higher or equal than the current score&lt;br /&gt;
&lt;br /&gt;
CharacterHasBeenHitBy(CHARACTER:character, DAMAGE_TYPE:damageType)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character was hit by this type.&lt;br /&gt;
&lt;br /&gt;
CharacterHasCastedSpellLastTurn(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character has casted a spell in his last turn.&lt;br /&gt;
&lt;br /&gt;
CharacterHasHadStatus(CHARACTER:character, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character has had a specific status this combat.&lt;br /&gt;
&lt;br /&gt;
CharacterHasAnimationOverride(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character has an animation override.&lt;br /&gt;
&lt;br /&gt;
CharacterCanUnlock(CHARACTER:character, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character can unlock the item (if the item is already unlocked it returns true!)&lt;br /&gt;
&lt;br /&gt;
CharacterGetReservedUserID(OUT INT:user, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's reserved User id.&lt;br /&gt;
&lt;br /&gt;
CharacterGetRace(CHARACTER:character, OUT FIXEDSTRING:race)&lt;br /&gt;
&lt;br /&gt;
Returns the &amp;lt;character&amp;gt;'s race in &amp;lt;race&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterIsRace(CHARACTER:character, FIXEDSTRING:race)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt;'s race is &amp;lt;race&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterCanMoveItem(CHARACTER:character, ITEM:item, FLOAT:minRadius, FLOAT:maxRadius [, OUT FLOAT3:destination])&lt;br /&gt;
&lt;br /&gt;
Returns true + &amp;lt;destination&amp;gt; if &amp;lt;character&amp;gt; can move &amp;lt;item&amp;gt; somewhere between &amp;lt;minRadius&amp;gt; and &amp;lt;maxRadius&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterGetDeathType(CHARACTER:character, OUT FIXEDSTRING:deathType)&lt;br /&gt;
&lt;br /&gt;
Returns death type of &amp;lt;character&amp;gt; in &amp;lt;deathType&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterGetStillAnimation(CHARACTER:object, OUT FIXEDSTRING:stillAnimation)&lt;br /&gt;
&lt;br /&gt;
Returns the still animation to play&lt;br /&gt;
&lt;br /&gt;
CrimeTransferLeadership(INT: CrimeID[, FIXEDSTRING:Tag1,...])&lt;br /&gt;
&lt;br /&gt;
Try and transfer the leadership of this crime to someone else.&lt;br /&gt;
&lt;br /&gt;
CrimeGetLeadInvestigator(OUT CHARACTER:lead, INT: CrimeID)&lt;br /&gt;
&lt;br /&gt;
Returns the lead investigator for the crime.&lt;br /&gt;
&lt;br /&gt;
CharacterCanHitTargetWithRangedWeapon(CHARACTER:source, OBJECT|FLOAT3:target[, SKILL:skill = null])&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;source&amp;gt; can hit &amp;lt;target&amp;gt; with currently equipped ranged weapon. Will use &amp;lt;skill&amp;gt; instead of equipped weapon if provided.&lt;br /&gt;
&lt;br /&gt;
CharacterHasRangedWeapon(CHARACTER:character[, INT:checkInventory = 0])&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; has has ranged weapon. Checks for non-wielded weapons if &amp;lt;checkInventory&amp;gt; is 1&lt;br /&gt;
&lt;br /&gt;
CheckInteractionReach(CHARACTER:character, CHARACTER|ITEM: target)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; could interact with &amp;lt;target&amp;gt;. This is not checking ranges, but checking if there's too much of a height difference or too many obstacles in between.&lt;br /&gt;
&lt;br /&gt;
CharacterGetSourcePoints(CHARACTER:character, OUT INT: amount)&lt;br /&gt;
&lt;br /&gt;
Returns the amount of sourcepoints of &amp;lt;character&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterAiIsCalculating(-)&lt;br /&gt;
&lt;br /&gt;
Returns if the character is still calculating the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchMoveSkillCommand(OUT SKILL:skill, OUT ITEM:skillItem, OUT FLOAT3:target)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Move Skill command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchSkillCommand(OUT SKILL:skill, OUT ITEM:skillItem, OUT FLOAT3 endPosition, OUT FLOAT3:target, OUT CHARACTER:target, OUT ITEM:target, OUT FLOAT3:target2, OUT CHARACTER:target2, OUT ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Skill command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchConsumeCommand(OUT ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Consume command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchAttackCommand(OUT FLOAT3:endPosition, OUT FLOAT3:target, OUT CHARACTER:target, OUT ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Attack command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchFallbackCommand(OUT FLOAT3:targetPosition, OUT FLOAT3:lookAtPosition)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Fallback command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterGetArchetype(CHARACTER:character, OUT ARCHETYPE:archetype)&lt;br /&gt;
&lt;br /&gt;
Returns the archetype of the character.&lt;br /&gt;
&lt;br /&gt;
CharacterIsPolymorphedInto(CHARACTER:character, FIXEDSTRING:race)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; is polymorphed into &amp;lt;race&amp;gt;. Race can be a race (like HUMAN), but also a template (in case of a polymorph skill like Chicken Touch).&lt;br /&gt;
&lt;br /&gt;
CharacterIsPolymorphInteractionDisabled(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; has his interaction disabled because of a polymorph.&lt;br /&gt;
&lt;br /&gt;
ItemGet(OUT ITEM:item, GAMEOBJECT|FLOAT3:src, FLOAT:range, COMPARE:howTo [, COMPAREFUNC:compareFunc, FIXEDSTRING:rootTemplate, FIXEDSTRING:tag])&lt;br /&gt;
&lt;br /&gt;
Get an item within a certain range conforming to the filled in restraints.&lt;br /&gt;
&lt;br /&gt;
ItemGetFromInventory(OUT ITEM:item, CHARACTER|ITEM:object [, FIXEDSTRING:statsId, FIXEDSTRING:tag, INT:isEquiped])&lt;br /&gt;
&lt;br /&gt;
Returns the first item in the inventory conforming to the filled in restraints.&lt;br /&gt;
&lt;br /&gt;
ItemIsInCharacterInventory(ITEM:item, CHARACTER:object)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is in the inventory of the character&lt;br /&gt;
&lt;br /&gt;
ItemIsInTrigger(ITEM:item, TRIGGER:trigger)&lt;br /&gt;
&lt;br /&gt;
Check if item is in given trigger&lt;br /&gt;
&lt;br /&gt;
ItemGetStat(OUT FLOAT:statValue, ITEM:item, ITEMSTAT:statType)&lt;br /&gt;
&lt;br /&gt;
Returns the current value of the stat (Weight, ...)&lt;br /&gt;
&lt;br /&gt;
ItemIsMoving(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is moving or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsFalling(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is falling or not. (after teleport)&lt;br /&gt;
&lt;br /&gt;
ItemIsOpening(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is opening or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsClosing(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is closing or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsLocked(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is locked or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsMovable(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is movable or not.&lt;br /&gt;
&lt;br /&gt;
ItemCanBeLockPicked(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is can be opened by lockpicking.&lt;br /&gt;
&lt;br /&gt;
ItemIsOpen(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is open or not.&lt;br /&gt;
&lt;br /&gt;
IsStoryItem(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is a story item.&lt;br /&gt;
&lt;br /&gt;
ItemHasStatus(ITEM:item, STATUS:statusId)&lt;br /&gt;
&lt;br /&gt;
Returns if the item has the status.&lt;br /&gt;
&lt;br /&gt;
ItemIsDestroyed(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is destroyed.&lt;br /&gt;
&lt;br /&gt;
ItemGetTemplate(ITEM:item, OUT ITEMTEMPLATE:root)&lt;br /&gt;
&lt;br /&gt;
Returns the roottemplate of the item.&lt;br /&gt;
&lt;br /&gt;
ItemGetSkillId(ITEM:item, OUT SKILL:root)&lt;br /&gt;
&lt;br /&gt;
Returns the skillid of the item if it has one.&lt;br /&gt;
&lt;br /&gt;
ItemGetItemType(ITEM:item, OUT FIXEDSTRING:itemType)&lt;br /&gt;
&lt;br /&gt;
Returns the itemtype of the item: common, unique, rare, ...&lt;br /&gt;
&lt;br /&gt;
ItemGetStatusSourceCharacter(ITEM:item, STATUS:statusId, OUT CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get the source character of a status&lt;br /&gt;
&lt;br /&gt;
ItemGetStatusSourceItem(ITEM:item, STATUS:statusId, OUT ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Get the source item of a status&lt;br /&gt;
&lt;br /&gt;
ItemCanBeMoved(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item can be moved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EVENTS ==&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterEvent(CHARACTER:character, STRING:eventName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterItemEvent(CHARACTER:character, ITEM:item, STRING:eventName)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterCharacterEvent(CHARACTER:character, CHARACTER:character, STRING:eventName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
'''OnItemEvent(ITEM:item, STRING:eventName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
'''OnItemDestroyed(ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when an item is destroyed&lt;br /&gt;
&lt;br /&gt;
'''OnItemDestroying(ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when an item is being destroyed&lt;br /&gt;
&lt;br /&gt;
'''OnItemOpened(ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when an item is opened&lt;br /&gt;
&lt;br /&gt;
'''OnItemClosed(ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when an item is closed&lt;br /&gt;
&lt;br /&gt;
'''OnItemDropped(ITEM:item, STRING:itemTemplate)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when an item is dropped&lt;br /&gt;
&lt;br /&gt;
'''OnGlobalFlagSet(FIXEDSTRING:eventName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a global event is set&lt;br /&gt;
&lt;br /&gt;
'''OnGlobalFlagCleared(FIXEDSTRING:eventName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a global event is cleared&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterFlagSet(FIXEDSTRING:eventName, CHARACTER:character)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a dialog event is set on a character&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterFlagCleared(FIXEDSTRING:eventName, CHARACTER:character)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a dialog event is cleared on a character&lt;br /&gt;
&lt;br /&gt;
'''OnItemFlagSet(FIXEDSTRING:eventName, ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a dialog event is set on an item&lt;br /&gt;
&lt;br /&gt;
'''OItemFlagCleared(FIXEDSTRING:eventName, ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a dialog event is cleared on an item&lt;br /&gt;
&lt;br /&gt;
'''OnTimer(FIXEDSTRING:timerName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a timer has ended&lt;br /&gt;
&lt;br /&gt;
'''OnInit(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the script is set&lt;br /&gt;
&lt;br /&gt;
'''OnLoaded(INT:major, INT:minor, INT:revision, INT:build)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the script is loaded from the savegame&lt;br /&gt;
&lt;br /&gt;
'''OnShutdown(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character's script is removed&lt;br /&gt;
&lt;br /&gt;
'''OnVariableCleared(FIXEDSTRING:varName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when this object's script variable is cleared from Osiris with ClearVarObject&lt;br /&gt;
&lt;br /&gt;
'''OnCombatStarted(INT:combatID)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when combat starts&lt;br /&gt;
&lt;br /&gt;
'''OnCombatSwitched(CHARACTER:source, ITEM:source)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character switch from one combat to another&lt;br /&gt;
&lt;br /&gt;
'''OnLeftCombat(CHARACTER:source, ITEM:source)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character or item left the combat&lt;br /&gt;
&lt;br /&gt;
'''OnTurn(CHARACTER:source, ITEM:source)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character's turn starts&lt;br /&gt;
&lt;br /&gt;
'''OnTurnEnded(CHARACTER:source, ITEM:source)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character's turn ended&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterVitalityChanged(CHARACTER:character, FLOAT:percentage)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the characters's vitality changed&lt;br /&gt;
&lt;br /&gt;
'''OnItemVitalityChanged(ITEM:item, FLOAT:percentage)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the item's vitality changed&lt;br /&gt;
&lt;br /&gt;
'''OnAttackOfOpportunity(CHARACTER:target)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the characters gets an attack of opportunity on an enemy&lt;br /&gt;
&lt;br /&gt;
'''OnClearAttackOfOpportunity(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the characters attack of opportunity is cleared&lt;br /&gt;
&lt;br /&gt;
'''OnDamage(DAMAGE:type, FLOAT:percentage, CHARACTER:source, ITEM:source)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the object receives damage&lt;br /&gt;
&lt;br /&gt;
'''OnMiss(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character dodges something&lt;br /&gt;
&lt;br /&gt;
'''OnCriticalHit(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character is critical hit&lt;br /&gt;
&lt;br /&gt;
'''OnPreBlock(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown before the character blocks something (at the start of the attack animation)&lt;br /&gt;
&lt;br /&gt;
'''OnBlock(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character blocks something&lt;br /&gt;
&lt;br /&gt;
'''OnDie(CHARACTER:character, DAMAGE:type, CHARACTER:source, ITEM:source)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character dies&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterStatusAttempt(CHARACTER:character, STATUS:status)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character attempts to gain a status&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterStatusApplied(CHARACTER:character, STATUS:status)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character gains a status&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterStatusRemoved(CHARACTER:character, STATUS:status)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character loses a status&lt;br /&gt;
&lt;br /&gt;
'''OnItemStatusAttempt(ITEM:item, STATUS:status)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the item attempts to gain a status&lt;br /&gt;
&lt;br /&gt;
'''OnItemStatus(ITEM:item, STATUS:status)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the item gains a status&lt;br /&gt;
&lt;br /&gt;
'''OnItemStatusRemoved(ITEM:item, STATUS:status)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the item loses a status&lt;br /&gt;
&lt;br /&gt;
'''OnStatusCreateVisuals(STATUS:status)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the item should create the visuals for this status&lt;br /&gt;
&lt;br /&gt;
'''OnStatusDestroyVisuals(STATUS:status)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the item should destroy the visuals for this status&lt;br /&gt;
&lt;br /&gt;
'''OnSight(CHARACTER:character)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character sees another character&lt;br /&gt;
&lt;br /&gt;
'''OnLostSight(CHARACTER:character)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character doesn't see another character anymore&lt;br /&gt;
&lt;br /&gt;
'''OnUseItem(CHARACTER:source, ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character uses an item&lt;br /&gt;
&lt;br /&gt;
'''OnPickupItem(CHARACTER:source, ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character picks up an item&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterPreMovedItem(CHARACTER:source, ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Event thrown just before a character moves an item. No difference whether it is in the world or in their inventory&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterMovedItem(CHARACTER:source, ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character moved an item&lt;br /&gt;
&lt;br /&gt;
'''OnItemEquipped(CHARACTER:source, ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character equips an item&lt;br /&gt;
&lt;br /&gt;
'''OnItemUnequipped(CHARACTER:source, ITEM:item)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character unequips an item&lt;br /&gt;
&lt;br /&gt;
'''OnIterateCharacter(CHARACTER:character, FIXEDSTRING:eventId)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown by iterators&lt;br /&gt;
&lt;br /&gt;
'''OnIterateItem(ITEM:source, FIXEDSTRING:eventId)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown by iterators&lt;br /&gt;
&lt;br /&gt;
'''OnIterateCount(FIXEDSTRING:eventId, INTEGER:Count)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown by iterators after all iterations to inform you of the count.&lt;br /&gt;
&lt;br /&gt;
'''OnStoryOverride(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Throw when story overrides what the character was doing: teleport, movement, on/offstage&lt;br /&gt;
&lt;br /&gt;
'''OnTriggerEnter(CHARACTER:character, ITEM:item, FIXEDSTRING:eventId)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown by a character or item entering an EventTrigger&lt;br /&gt;
&lt;br /&gt;
'''OnTriggerLeave(CHARACTER:character, ITEM:item, FIXEDSTRING:eventId)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown by a character or item leaving an EventTrigger&lt;br /&gt;
&lt;br /&gt;
'''OnEnemyChanged(CHARACTER:character, CHARACTER:newEnemy)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character's currentenemy changes&lt;br /&gt;
&lt;br /&gt;
'''OnTalentUnlocked(CHARACTER:character, TALENT:newTalent)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character unlocks a new talent&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterClassChanged(CHARACTER:character, FIXEDSTRING:class)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character changes class in the character creation screen&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterCreationStarted(CHARACTER:character, TRIGGER:creationPoint)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character creation has started, and gives where the character should walk to&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterCreationStopped(CHARACTER:character)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character creation has stopped&lt;br /&gt;
&lt;br /&gt;
'''OnFunction(FIXEDSTRING:functionName)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Throws an event on itself with the functionName. This is to fake function calls &lt;br /&gt;
&lt;br /&gt;
'''OnSkillCast(CHARACTER:character, SKILL_ID:skillID)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character casts a skill&lt;br /&gt;
&lt;br /&gt;
'''OnSkillCombatComment(CHARACTER:character, SKILL_ID:skillID)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the character needs to make a comment&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterUsedSkillOnMe(CHARACTER:character, SKILL_ID:skillID)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when you are hit by a skill from a character&lt;br /&gt;
&lt;br /&gt;
'''OnItemUnlocked(ITEM: item, CHARACTER:character, ITEM:key)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when an item gets unlocked by a character.&lt;br /&gt;
&lt;br /&gt;
'''OnAutomatedDialogEnded(STRING:dialogName, INT:instanceID)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a automated dialog is ended for this speaker&lt;br /&gt;
&lt;br /&gt;
'''OnAutomatedDialogStarted(STRING:dialogName, INT:instanceID)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a automated dialog is started for this speaker&lt;br /&gt;
&lt;br /&gt;
'''OnDialogEnded(STRING:dialogName, INT:instanceID)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a dialog is ended for this speaker&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeSensibleAction(FIXEDSTRING:regionID, INT:crimeID, FIXEDSTRING:reactionName, STRING:primaryDialog, CHARACTER:criminal1, CHARACTER:criminal2, CHARACTER:criminal3, CHARACTER:criminal4, INT:IsPrimary)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character needs to perform a sensible action against criminals&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeInterrogationRequest(FIXEDSTRING:regionID, INT:crimeID, CHARACTER:criminal1, CHARACTER:criminal2, CHARACTER:criminal3, CHARACTER:criminal4, STRING:interrogationDialog)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character needs to perform an interrogation against criminals&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeInvestigate(FLOAT3:CrimePosition, INT:crimeID)''' &amp;lt;br &amp;gt;&lt;br /&gt;
One NPC investigates a crimescene&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeAlarmed(FLOAT3:CrimePosition, INT:crimeID)''' &amp;lt;br &amp;gt;&lt;br /&gt;
All NPCs in a crimearea start looking around.&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeReturnToNormal(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Investigation or Alarm timed out.&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeAborted(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
The game interrupted the sensible action of this NPC.&lt;br /&gt;
&lt;br /&gt;
'''OnSplineControlPointReached(INT:Index, INT:EndReached, STRING:EventString)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character reached a spline node.&lt;br /&gt;
&lt;br /&gt;
''''OnFinishCalculationAi(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the calculation of the AI is finished.&lt;br /&gt;
&lt;br /&gt;
'''OnGrenadeLand(INT:hitObstacle, CHARACTER:caster)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when the grenades lands&lt;br /&gt;
&lt;br /&gt;
'''FetchCharacterApplyStatusData(CHARACTER:character, STATUS:status) RETURN(LIST&amp;lt;STATUS&amp;gt;:removeStatuses, STATUS:applyStatus, INT:turns)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Fetch from script which statuses to remove and apply.&lt;br /&gt;
&lt;br /&gt;
'''FetchItemApplyStatusData(ITEM:item, STATUS:status) RETURN(LIST&amp;lt;STATUS&amp;gt;:removeStatuses, STATUS:applyStatus, INT:turns)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Fetch from script which statuses to remove and apply.&lt;br /&gt;
&lt;br /&gt;
'''FetchItemSkillOnDamage(INT:damage, DAMAGE_TYPE:damageType) RETURN(INT:hasSkill, SKILL_ID:skillID, INT:casterLevel)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Fetch from script what skill to execute on damage.&lt;br /&gt;
&lt;br /&gt;
'''OnActivate(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character/item activates&lt;br /&gt;
&lt;br /&gt;
'''OnDeactivate(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character/item deactivates&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterUsedSourcePoint(CHARACTER:character)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character uses a source point&lt;br /&gt;
&lt;br /&gt;
'''OnSkillAdded(CHARACTER:character, SKILL_ID:skillId, INT:learned)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character learns a skill&lt;br /&gt;
&lt;br /&gt;
'''OnSkillActivated(CHARACTER:character, SKILL_ID:skillId)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character activates (=adds to memory) a skill&lt;br /&gt;
&lt;br /&gt;
'''OnSkillDeactivated(CHARACTER:character, SKILL_ID:skillId)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character deactivates (=removes from memory) a skill&lt;br /&gt;
&lt;br /&gt;
'''OnItemFlagShared(FIXEDSTRING:eventName, ITEM:item, INT:newValue)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a dialog event is shared with an item&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterFlagShared(FIXEDSTRING:eventName, CHARACTER:character, INT:newValue)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a dialog event is shared with a character&lt;br /&gt;
&lt;br /&gt;
'''OnItemOffStageChanged(CHARACTER:character, INT:offstage)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character is set on/off stage&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterOffStageChanged(ITEM:item, INT:offstage)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a item is set on/off stage&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterTeleported(CHARACTER:target, CHARACTER:cause, FLOAT3:oldPosition, FLOAT3:newPosition, SKILL_ID:skillId)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when a character gets teleported with a teleport skill&lt;br /&gt;
&lt;br /&gt;
'''OnCombatTick(-)''' &amp;lt;br &amp;gt;&lt;br /&gt;
Thrown when this object ticks in combat. Only thrown for objects that don't get a turn.&lt;br /&gt;
&lt;br /&gt;
== INTERRUPTS ==&lt;br /&gt;
&lt;br /&gt;
'''OnMovementFailed(FLOAT3:targetPos)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted by a move action failing&lt;br /&gt;
&lt;br /&gt;
'''OnException(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted by an exception&lt;br /&gt;
&lt;br /&gt;
'''OnBetterReactionFound(FIXEDSTRING:reactionName)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted by another reaction&lt;br /&gt;
&lt;br /&gt;
'''OnNoReactionFound(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted because no reaction is valid&lt;br /&gt;
&lt;br /&gt;
'''OnScriptDisabled(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted because the scriptcontroller is disabled&lt;br /&gt;
&lt;br /&gt;
'''OnManualInterrupt(FIXEDSTRING:reactionName)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted using the interrupt action&lt;br /&gt;
&lt;br /&gt;
'''OnRegionSwap(FIXEDSTRING:oldLevel, FIXEDSTRING:newLevel)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted by a region swap&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Character_and_Item_Script_Triggers,_Calls,_and_Queries&amp;diff=5822</id>
		<title>Character and Item Script Triggers, Calls, and Queries</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Character_and_Item_Script_Triggers,_Calls,_and_Queries&amp;diff=5822"/>
		<updated>2018-03-02T11:44:20Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: /* EVENTS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of almost every character and item script event trigger, call, and query. An event is what triggers the script, and always begin with ''On''. Queries provide information and are always inside an ''IF'' or ''CHECK.'' Calls are actions that are always after THEN.&lt;br /&gt;
&lt;br /&gt;
CharScript/ItemScript Functions&lt;br /&gt;
&lt;br /&gt;
== CALLS ==&lt;br /&gt;
&lt;br /&gt;
'''Set(OUT OBJECT:variable, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Set the value of a variable&lt;br /&gt;
&lt;br /&gt;
'''SetVar(CHARACTER|ITEM:object, FIXEDSTRING:variableName, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Set the value of a global variable&lt;br /&gt;
&lt;br /&gt;
'''Cast(OUT OBJECT variable, OBJECT value)'''&lt;br /&gt;
&lt;br /&gt;
Casts the value to the variable&lt;br /&gt;
&lt;br /&gt;
'''Print(OUT STRING:output, STRING:text)'''&lt;br /&gt;
&lt;br /&gt;
Prints the text to the output with possible parameters: [1], [2], ...&lt;br /&gt;
&lt;br /&gt;
'''Add(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT|FLOAT3:value)'''&lt;br /&gt;
&lt;br /&gt;
Adds both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Subtract(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT|FLOAT3:value)'''&lt;br /&gt;
&lt;br /&gt;
Subtracts both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Multiply(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT:value)'''&lt;br /&gt;
&lt;br /&gt;
Multiplies both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Divide(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT:value)'''&lt;br /&gt;
&lt;br /&gt;
Divides both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Abs(INOUT INT|FLOAT:variable)'''&lt;br /&gt;
&lt;br /&gt;
Takes the absolute value of a variable&lt;br /&gt;
&lt;br /&gt;
'''Clamp(INOUT INT|FLOAT:variable, INT|FLOAT:min, INT|FLOAT:max)'''&lt;br /&gt;
&lt;br /&gt;
Clamps a variable between min and max&lt;br /&gt;
&lt;br /&gt;
'''GetRandom(OUT OBJECT:variable, OBJECT:value, OBJECT:value, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Fills in the variable with random one of the values.&lt;br /&gt;
&lt;br /&gt;
'''GetWeightedRandom(OUT OBJECT:variable, OBJECT:value, INT|FLOAT:weight, ...)'''&lt;br /&gt;
&lt;br /&gt;
Gets a weighted random of the given values!&lt;br /&gt;
&lt;br /&gt;
'''GetRandomBetween(OUT INT|FLOAT:variable, INT|FLOAT:min, INT|FLOAT:max)'''&lt;br /&gt;
&lt;br /&gt;
Gets a random value between min and max (both included)&lt;br /&gt;
&lt;br /&gt;
'''GetRandomPositionInTrigger(OUT FLOAT3:variable, TRIGGER:areaTrigger)'''&lt;br /&gt;
&lt;br /&gt;
Get a random position in a trigger area&lt;br /&gt;
&lt;br /&gt;
'''GetElement(OUT OBJECT:variable, INT:index, OBJECT:value, OBJECT:value, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Fills in the variable with the index one of the values (starting from 0)&lt;br /&gt;
&lt;br /&gt;
'''SetPriority(FIXEDSTRING:reactionName, INT:priority)'''&lt;br /&gt;
&lt;br /&gt;
Changes the priority of a reaction. Priority 0 and below are not executed!&lt;br /&gt;
&lt;br /&gt;
'''DelayReaction(FIXEDSTRING:reactionName, FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
The reaction will not be chosen for the specified time&lt;br /&gt;
&lt;br /&gt;
'''SetScriptFrame(CHARACTER:character, FIXEDSTRING:frame)'''&lt;br /&gt;
&lt;br /&gt;
Sets the scriptframe on the character.&lt;br /&gt;
&lt;br /&gt;
'''ClearScriptFrame(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Clears the scriptframe on the character.&lt;br /&gt;
&lt;br /&gt;
'''Goto(FIXEDSTRING:labelName)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to the label. Two label names are built-in: &amp;quot;Start&amp;quot; for the first instruction of the reaction, and &amp;quot;End&amp;quot; for the last one.&lt;br /&gt;
&lt;br /&gt;
'''GotoIfEqual(OBJECT:variable, OBJECT:value, FIXEDSTRING:labelName)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to the label if the 2 objects are equal&lt;br /&gt;
&lt;br /&gt;
'''GotoRand(FIXEDSTRING:labelName, FIXEDSTRING:labelName, FIXEDSTRING:labelName, FIXEDSTRING:labelName, FIXEDSTRING:labelName)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to a random label in the list&lt;br /&gt;
&lt;br /&gt;
'''CreatePuddleAt(GAMEOBJECT|FLOAT3:target, SURFACE:type, INT:cellAmountMin, INT:cellAmountMax, INT:growAmountMin, INT:growAmountMax, )'''&lt;br /&gt;
&lt;br /&gt;
Spawn a puddle at the target's position for a certain lifetime (in turns)&lt;br /&gt;
&lt;br /&gt;
'''CreateSurfaceAt(GAMEOBJECT|FLOAT3:target, SURFACE:type, FLOAT:radius, INT:lifeTime[, GAMEOBJECT:owner])'''&lt;br /&gt;
&lt;br /&gt;
Spawn a surface at the target's position for a certain lifetime (in turns)&lt;br /&gt;
&lt;br /&gt;
'''CreateSurfaceInPolygon(GAMEOBJECT:owner, SURFACE:type, FLOAT:duration, FLOAT:growTimer, INT:growStep, GAMEOBJECT|FLOAT3:point1, GAMEOBJECT|FLOAT3:point2, GAMEOBJECT|FLOAT3:point3, ...)'''&lt;br /&gt;
&lt;br /&gt;
Spawn a polygon surface at the target's position. Grows &amp;lt;growStep&amp;gt; every &amp;lt;growTimer&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CreateSurfaceInAreaTrigger(GAMEOBJECT:owner, SURFACE:type, FLOAT:duration, FLOAT:growTimer, INT:growStep, TRIGGER:areaTrigger)'''&lt;br /&gt;
&lt;br /&gt;
Spawn a surface within &amp;lt;areaTrigger&amp;gt;. Grows &amp;lt;growStep&amp;gt; every &amp;lt;growTimer&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CreateConeSurfaceAt(GAMEOBJECT|FLOAT3:start, GAMEOBJECT|FLOAT3:target, SURFACE:type, FLOAT:radius, FLOAT:angle, FLOAT:duration)'''&lt;br /&gt;
&lt;br /&gt;
Spawn a Cone surface at the target's position&lt;br /&gt;
&lt;br /&gt;
'''PlayEffectAt(GAMEOBJECT|FLOAT3:target, STRING:effectName)'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect at the target's position&lt;br /&gt;
&lt;br /&gt;
'''PlayLoopEffectAt(OUT INT64:effectHandle, GAMEOBJECT|FLOAT3:target, STRING:effectName)'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect at the target's position&lt;br /&gt;
&lt;br /&gt;
'''ExplodeAt(GAMEOBJECT|FLOAT3:target, SKILL:projectileSkill, [INT:casterLevel=-1, CHARACTER|ITEM:cause])'''&lt;br /&gt;
&lt;br /&gt;
Trigger an explosion of a projectile skill at the target's position. The cause will trigger NPC behavior as if the cause casted the projectile&lt;br /&gt;
&lt;br /&gt;
'''DisplayText(CHARACTER|ITEM:target, FIXEDSTRING:text, FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
Displays text above the character/item for a certain amount of time. It will replace the current text, including dialogtext&lt;br /&gt;
&lt;br /&gt;
'''DisplayCombatInfoText(CHARACTER|ITEM:target, FIXEDSTRING:text, FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
Displays text above the character/item for a certain amount of time. It will replace the current text, including dialogtext&lt;br /&gt;
&lt;br /&gt;
'''StatusText(CHARACTER|ITEM:target, FIXEDSTRING:text)'''&lt;br /&gt;
&lt;br /&gt;
Adds statustext above the character/item for a short amount of time. Will not replace texts or dialogtexts&lt;br /&gt;
&lt;br /&gt;
'''DebugText(CHARACTER|ITEM:target, STRING:text)'''&lt;br /&gt;
&lt;br /&gt;
Adds debugtext above the character/item for a short amount of time.&lt;br /&gt;
&lt;br /&gt;
'''CombatLogText(CHARACTER|ITEM:target, FIXEDSTRING:text, INT:filterID, INT:broadcastID)'''&lt;br /&gt;
&lt;br /&gt;
Adds combatlog text inside the combat log window. Color-/SizeFormatting should already be applied, if not color and size of the string will be NORMAL. filterID determines what filter shows/hides the text. broadcastID determines who will be able to see the message (0 hearingrange. 1 party. 2 all)&lt;br /&gt;
&lt;br /&gt;
'''Log(STRING:text, ...)'''&lt;br /&gt;
&lt;br /&gt;
Log's the the scriptlog. (for debugging purposes)&lt;br /&gt;
&lt;br /&gt;
'''Output(STRING:text, ...)'''&lt;br /&gt;
&lt;br /&gt;
Pass text with optional parameters to the output panel (e.g. Output(&amp;quot;An int [1]&amp;quot;, INT:10))&lt;br /&gt;
&lt;br /&gt;
'''Assert(STRING:text, ...)'''&lt;br /&gt;
&lt;br /&gt;
Pass text with optional parameters to display as an assert message (e.g. Assert(&amp;quot;This number is wrong: [1]&amp;quot;, INT:666))&lt;br /&gt;
&lt;br /&gt;
'''Label(FIXEDSTRING:name)'''&lt;br /&gt;
&lt;br /&gt;
Marks this line as a label where Goto actions can jump to&lt;br /&gt;
&lt;br /&gt;
'''StartTimer(FIXEDSTRING:timerName, FLOAT:timeInSeconds, INT:repeatCount)'''&lt;br /&gt;
&lt;br /&gt;
Start a timer which will throw the timer event. Set repeatcount &amp;lt; 0 for a permanent timer.&lt;br /&gt;
&lt;br /&gt;
'''StopTimer(FIXEDSTRING:timerName)'''&lt;br /&gt;
&lt;br /&gt;
Stop a timer which will throw the timer event&lt;br /&gt;
&lt;br /&gt;
'''DialogStart(OUT INT:instanceId, STRING:dialog, CHARACTER|ITEM:target, CHARACTER|ITEM:target, CHARACTER|ITEM:target, CHARACTER|ITEM:target)'''&lt;br /&gt;
&lt;br /&gt;
Start a dialog between the targets. You can specify fewer targets than the maximum number.&lt;br /&gt;
&lt;br /&gt;
{{warning|Starting a dialog from behaviour script will always start it as an [[Dialog_editor#Automated|Automated Dialog]]. Interactive dialogs can only be started from [[Osiris]].}}&lt;br /&gt;
&lt;br /&gt;
'''DialogRequestStop(CHARACTER|ITEM:speaker, STRING:dialog)'''&lt;br /&gt;
&lt;br /&gt;
Stops a certain dialog on a certain speaker&lt;br /&gt;
&lt;br /&gt;
'''Check(-)'''&lt;br /&gt;
&lt;br /&gt;
Reevaluate the conditions in the CHECK section of this reaction&lt;br /&gt;
&lt;br /&gt;
'''Reset(-)'''&lt;br /&gt;
&lt;br /&gt;
Resets the current reaction. It will start from the beginning again&lt;br /&gt;
&lt;br /&gt;
'''Interrupt(FIXEDSTRING:reactionName)'''&lt;br /&gt;
&lt;br /&gt;
Interrupt the reaction.&lt;br /&gt;
&lt;br /&gt;
'''GlobalSetEvent(FIXEDSTRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Sets a global event. Scripts and Story can catch it.&lt;br /&gt;
&lt;br /&gt;
'''GlobalClearEvent(FIXEDSTRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Clears a global event. Scripts and Story can catch it.&lt;br /&gt;
&lt;br /&gt;
'''StopLoopEffect(INT64:fxHandle)'''&lt;br /&gt;
&lt;br /&gt;
Stops a looping effect&lt;br /&gt;
&lt;br /&gt;
'''IterateItems(FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each item. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateItemsNear(GAMEOBJECT:source, FLOAT:radius, FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each item in range. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateItemsOnObject(CHARACTER|ITEM:source, FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each item standing on the source. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateParty(FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, CHARACTER:partyMember, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each member of all parties. If you pass a party member only members of that party will be considered. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharacters(FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharactersNear(GAMEOBJECT:source, FLOAT:radius, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character in range. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharactersOnObject(CHARACTER|ITEM:source, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
Launch iterate event for each character standing on the source. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharactersInCombat(CHARACTER|ITEM:source, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character in combat with the source. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateHostilesFor(CHARACTER:source, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character who is targetting the source. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''SpawnCharacter(OUT CHARACTER:result, CHARACTERTEMPLATE:rootTemplate, GAMEOBJECT|FLOAT3:position, INT:playSpawn, [INT:isSummon=0, CHARACTER:summonOwner=null, INT:overrideLevel=-1])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a character&lt;br /&gt;
&lt;br /&gt;
'''SpawnItem(ITEMTEMPLATE:rootTemplate,GAMEOBJECT|FLOAT3:position, OUT ITEM:result)'''&lt;br /&gt;
&lt;br /&gt;
Spawns an item&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalProjectile(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,FLOAT3:direction,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at the source (with offset, can be null) shooting at the target&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalProjectileAt(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,GAMEOBJECT|FLOAT3:target,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at the source (with offset, can be null) shooting at the target&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldProjectile(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,FLOAT3:direction,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at worldPos shooting at the target. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldProjectileAt(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,GAMEOBJECT|FLOAT3:target,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at worldPos shooting at the target. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalCone(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,FLOAT3:direction,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from source (with offset, can be null) in a direction&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalConeAt(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,GAMEOBJECT|FLOAT3:target,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from source (with offset, can be null) at the target&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldCone(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,FLOAT3:direction,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from worldPos in a direction. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldConeAt(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,GAMEOBJECT|FLOAT3:target,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from worldPos at the target. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''SetVisible(CHARACTER|ITEM:object, INT:visible)'''&lt;br /&gt;
&lt;br /&gt;
Sets a character or item visible or not.&lt;br /&gt;
&lt;br /&gt;
'''RotateY(INOUT FLOAT3:vector, FLOAT:degrees)'''&lt;br /&gt;
&lt;br /&gt;
Rotate the vector around the Y-axis for a certain angle (in degrees)&lt;br /&gt;
&lt;br /&gt;
'''SetHealth(CHARACTER|ITEM:target, FLOAT:percent)'''&lt;br /&gt;
&lt;br /&gt;
Set a characters or items health on the given percentage. (percentage between 0 and 1)&lt;br /&gt;
&lt;br /&gt;
'''PlaySound(CHARACTER|ITEM:target, STRING:soundEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a sound event at the target&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicForEveryone(STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on all the clients&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicOnCharacter(CHARACTER:target, STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on a character for all peers (3D)&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicForPeer(CHARACTER:target, STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on the peer of the character&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicForPeerWithInstrument(CHARACTER:target, CHARACTER:charInstrument, STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on the peer of the character concated with _INSTRUMENT&lt;br /&gt;
&lt;br /&gt;
'''SetX(INOUT FLOAT3:vector, FLOAT|INT:value)'''&lt;br /&gt;
&lt;br /&gt;
Sets the X component of the FLOAT3&lt;br /&gt;
&lt;br /&gt;
'''SetY(INOUT FLOAT3:vector, FLOAT|INT:value)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Y component of the FLOAT3&lt;br /&gt;
&lt;br /&gt;
'''SetZ(INOUT FLOAT3:vector, FLOAT|INT:value)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Z component of the FLOAT3&lt;br /&gt;
&lt;br /&gt;
'''SetAtmosphere(FIXEDSTRING:atmosphereTriggerUUID, FIXEDSTRING:atmosphere)'''&lt;br /&gt;
&lt;br /&gt;
Changes the atmosphere of the trigger&lt;br /&gt;
&lt;br /&gt;
'''ResetAtmosphere(FIXEDSTRING:atmosphereTriggerUUID)'''&lt;br /&gt;
&lt;br /&gt;
Resets the atmosphere of the trigger&lt;br /&gt;
&lt;br /&gt;
'''AddStatusInfluence(CHARACTER|ITEM:object, STATUS:statusId, FLOAT:strength, [FIXEDSTRING:extraData=&amp;quot;&amp;quot;], [INT:isWeather=1], [INT:force=1])'''&lt;br /&gt;
&lt;br /&gt;
Adds the status influence strength on the object.&lt;br /&gt;
&lt;br /&gt;
'''RemoveStatusInfluence(CHARACTER|ITEM:object, STATUS:statusId, FLOAT:strength, [FIXEDSTRING:extraData=&amp;quot;&amp;quot;], [INT:isWeather=1])'''&lt;br /&gt;
&lt;br /&gt;
Removes the status influence strength on the object.&lt;br /&gt;
&lt;br /&gt;
'''AddTemporaryStatusInfluence(CHARACTER|ITEM:source, CHARACTER|ITEM:object, STATUS:statusId, FLOAT:strength, [FIXEDSTRING:extraData=&amp;quot;&amp;quot;], [INT:isWeather=1])'''&lt;br /&gt;
&lt;br /&gt;
Adds a temporary status influence strength on the object.. It will be gone in a few seconds if it's not set again&lt;br /&gt;
&lt;br /&gt;
'''CallFunction(FIXEDSTRING:functionName)'''&lt;br /&gt;
&lt;br /&gt;
Calls a function with the ID&lt;br /&gt;
&lt;br /&gt;
'''SetMaterial(CHARACTER|ITEM:object, FIXEDSTRING:materialUUID, INT:duration, INT:applyOnBody, INT:applyOnArmor, INT:applyOnWeapon[)'''&lt;br /&gt;
&lt;br /&gt;
Changes the material of the object for a set time (in turns), -1 is infinite. applyNormalMap: Copy the original materials normal map&lt;br /&gt;
&lt;br /&gt;
'''TeleportTo(CHARACTER|ITEM:object, GAMEOBJECT|FLOAT3:target, [INT:Force=0])'''&lt;br /&gt;
&lt;br /&gt;
Teleport object to or near the target&lt;br /&gt;
&lt;br /&gt;
'''Transform(CHARACTER|ITEM:object, CHARACTERTEMPLATE|ITEMTEMPLATE:root [, FIXEDSTRING:fx, INT:replaceScripts=1, OUT FLOAT:currentHP])'''&lt;br /&gt;
&lt;br /&gt;
Transforms &amp;lt;object&amp;gt; using &amp;lt;root&amp;gt;, returns &amp;lt;currentHP&amp;gt;, plays &amp;lt;fx&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''SaveGame(FIXEDSTRING:saveGameName)'''&lt;br /&gt;
&lt;br /&gt;
Save the savegame with name &amp;lt;saveGameName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LoadGame(FIXEDSTRING:saveGameName)'''&lt;br /&gt;
&lt;br /&gt;
Load the savegame with name &amp;lt;saveGameName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LoadLevel(FIXEDSTRING:levelName)'''&lt;br /&gt;
&lt;br /&gt;
Load the level with name &amp;lt;levelName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''KillCombat(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Kill all the enemies in the combat which contains &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SetTag(CHARACTER|ITEM:object, FIXEDSTRING:tag)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Tag on the Object&lt;br /&gt;
&lt;br /&gt;
'''ClearTag(CHARACTER|ITEM:object, FIXEDSTRING:tag)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Tag on the Object&lt;br /&gt;
&lt;br /&gt;
'''SetGlobalFlag(FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Global Flag&lt;br /&gt;
&lt;br /&gt;
'''ClearGlobalFlag(FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Global Flag&lt;br /&gt;
&lt;br /&gt;
'''SetFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Flag on the Object&lt;br /&gt;
&lt;br /&gt;
'''ClearFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Flag on the Object&lt;br /&gt;
&lt;br /&gt;
'''SetUserFlag(CHARACTER:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Flag on the user's characters&lt;br /&gt;
&lt;br /&gt;
'''ClearUserFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Flag on the user's characters&lt;br /&gt;
&lt;br /&gt;
'''SetPartyFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Flag on the party's characters&lt;br /&gt;
&lt;br /&gt;
'''ClearPartyFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Flag on the party's characters&lt;br /&gt;
&lt;br /&gt;
'''StartVoiceBark(STRING:barkName, CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Start a voicebark on character&lt;br /&gt;
&lt;br /&gt;
'''ConfrontationDone(INT: CrimeID, CHARACTER:lead, CHARACTER:criminal, ...)'''&lt;br /&gt;
&lt;br /&gt;
Resolve the crime with id CrimeID for the specified criminals&lt;br /&gt;
&lt;br /&gt;
'''CrimesceneInvestigationDone(CHARACTER:investigator)'''&lt;br /&gt;
&lt;br /&gt;
Crimescene is considered investigated by this NPC, start looking for culprits&lt;br /&gt;
&lt;br /&gt;
'''ListAdd(LIST&amp;lt;OBJECT&amp;gt;:list, OBJECT:entry)'''&lt;br /&gt;
&lt;br /&gt;
Add &amp;lt;entry&amp;gt; at the back of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ListRemove(LIST&amp;lt;OBJECT&amp;gt;:list, INT:index)'''&lt;br /&gt;
&lt;br /&gt;
Remove the entry at &amp;lt;index&amp;gt; of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ListSet(LIST&amp;lt;OBJECT&amp;gt;:list, INT:index, OBJECT:entry)'''&lt;br /&gt;
&lt;br /&gt;
Set the entry at &amp;lt;index&amp;gt; of &amp;lt;list&amp;gt; to &amp;lt;entry&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ListClear(LIST&amp;lt;OBJECT&amp;gt;:list)'''&lt;br /&gt;
&lt;br /&gt;
Remove all entries of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''EndTurn(CHARACTER|ITEM:Target)'''&lt;br /&gt;
&lt;br /&gt;
Ends the object's current turn&lt;br /&gt;
&lt;br /&gt;
'''SetCanFight(CHARACTER|ITEM:entity, INT:enabled[, INT:wholeGroup=0])'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the entity can fight. Optional for the whole group&lt;br /&gt;
&lt;br /&gt;
'''SetCanJoinCombat(CHARACTER|ITEM:entity, INT:enabled[, INT:wholeGroup=0])'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the entity can join combats. Optional for the whole group&lt;br /&gt;
&lt;br /&gt;
'''SetIsBoss(CHARACTER|ITEM:entity, INT:enabled)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the entity is a boss.&lt;br /&gt;
&lt;br /&gt;
'''GetAIHintTriggers(OUT LIST&amp;lt;TRIGGER&amp;gt;:triggers[, [LIST]FIXEDSTRING:tags, INT:needsAllTags = -1)'''&lt;br /&gt;
&lt;br /&gt;
Returns all AIHintAreaTriggers in &amp;lt;triggers&amp;gt;. Uses contraints if set.&lt;br /&gt;
&lt;br /&gt;
'''SetCombatTimeout(CHARACTER|ITEM:entity, FLOAT:timer)'''&lt;br /&gt;
&lt;br /&gt;
Overwrites the entity's combat timeout check.&lt;br /&gt;
&lt;br /&gt;
'''ResetCombatTimeout(CHARACTER|ITEM:entity)'''&lt;br /&gt;
&lt;br /&gt;
Resets the entity's combat timeout check.&lt;br /&gt;
&lt;br /&gt;
'''EnterCombat(CHARACTER|ITEM:source, CHARACTER|ITEM:target)'''&lt;br /&gt;
&lt;br /&gt;
Enters combat with target&lt;br /&gt;
&lt;br /&gt;
'''LeaveCombat(CHARACTER|ITEM:source)'''&lt;br /&gt;
&lt;br /&gt;
Leaves the combat&lt;br /&gt;
&lt;br /&gt;
'''SetFaction(CHARACTER|ITEM:target, FIXEDSTRING:faction)'''&lt;br /&gt;
&lt;br /&gt;
Changes the faction of a character or item&lt;br /&gt;
&lt;br /&gt;
'''SetInvulnerable(CHARACTER|ITEM:target, INT:bool)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character or item invulnerable or not. (Allow damage)&lt;br /&gt;
&lt;br /&gt;
'''JumpToTurn(CHARACTER|ITEM:Target)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to targets turn (ends the current turn)&lt;br /&gt;
&lt;br /&gt;
'''Sleep(FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
Sleeps for a certain amount of time&lt;br /&gt;
&lt;br /&gt;
'''CharacterAttack(CHARACTER|ITEM|FLOAT3:target [,INT:alwaysHit])'''&lt;br /&gt;
&lt;br /&gt;
Moves in weapon range and attacks the target&lt;br /&gt;
&lt;br /&gt;
'''CharacterAttackWithoutMove(CHARACTER|ITEM|FLOAT3:target [,INT:alwaysHit])'''&lt;br /&gt;
&lt;br /&gt;
Attacks the target without checking weaponranges and without moving&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveTo(GAMEOBJECT|FLOAT3:target, [INT:running=0, INT:shouldArrive=0, INT:longPath=0, FLOAT:minDistance=1.5, FLOAT:maxDistance=minDistance+2.5])'''&lt;br /&gt;
&lt;br /&gt;
Move to the target. Set shouldArrive to 1 if you want a guaranteed move. (teleports on fail) &lt;br /&gt;
&lt;br /&gt;
'''CharacterAiMove(FLOAT3:target, CHARACTER:targetCharacter, ITEM:targetItem)'''&lt;br /&gt;
&lt;br /&gt;
Moves to the target, calculated by the AI. Should only be used with results from the AI!&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveInRange(GAMEOBJECT|FLOAT3:target, FLOAT:rangeMin, FLOAT:rangeMax, INT:running, [LIST&amp;lt;TRIGGER&amp;gt;:hintTriggers=null, INT:mustBeInTrigger=0])'''&lt;br /&gt;
&lt;br /&gt;
Move within a certain range of target. Optionally pass hinttriggers in which the result is preferred/necessary.&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveInWeaponRange(GAMEOBJECT|FLOAT3:target, INT:running, [LIST&amp;lt;TRIGGER&amp;gt;:hintTriggers=null, INT:mustBeInTrigger=0])'''&lt;br /&gt;
&lt;br /&gt;
Move within weapon range of target. Optionally pass hinttriggers in which the result is preferred/necessary.&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveInSkillRange(GAMEOBJECT|FLOAT3:target, SKILL:skill, INT:running, [LIST&amp;lt;TRIGGER&amp;gt;:hintTriggers=null, INT:mustBeInTrigger=0])'''&lt;br /&gt;
&lt;br /&gt;
Move within skill range of target. Optionally pass hinttriggers in which the result is preferred/necessary.&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveOutOfSight(FLOAT:angle)'''&lt;br /&gt;
&lt;br /&gt;
Move out of screen&lt;br /&gt;
&lt;br /&gt;
'''CharacterPlayAnimation(FIXEDSTRING:animation [, INT:exitOnFinish=1, INT:waitForCompletion=1])'''&lt;br /&gt;
&lt;br /&gt;
Plays a certain animation ExitOnFinish means if the exit will kill itself after it was played (revert back to still) &lt;br /&gt;
&lt;br /&gt;
'''CharacterStopAnimation(-)'''&lt;br /&gt;
&lt;br /&gt;
Stops all animations.&lt;br /&gt;
&lt;br /&gt;
'''CharacterPickUpItem(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Moves close enough to the item if necessary and picks it up&lt;br /&gt;
&lt;br /&gt;
'''CharacterUseItem(ITEM:item [, INTEGER:LongPath])'''&lt;br /&gt;
&lt;br /&gt;
Moves close enough to the item if necessary and uses it&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveItem(ITEM:item, INTEGER:ignoreWeight, INTEGER:ignoreAPCost [, INTEGER:ignoreDangerousSurfaces=1, INT:amount=-1, GAMEOBJECT|FLOAT3:destination])'''&lt;br /&gt;
&lt;br /&gt;
Moves close enough to the item if necessary and moves it to the destination. Will try to find a destination if not supplied.&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddSkill(CHARACTER:character, SKILL:skill[, INT:ShowNotification=0])'''&lt;br /&gt;
&lt;br /&gt;
Adds &amp;lt;skill&amp;gt; to &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveSkill(CHARACTER:character, SKILL:skill)'''&lt;br /&gt;
&lt;br /&gt;
Removes &amp;lt;skill&amp;gt; from &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterUseSkill(SKILL:skill, GAMEOBJECT|FLOAT3:target [, GAMEOBJECT|FLOAT3:target2, ITEM:skillItem, INT:ignoreHasSkill=0])'''&lt;br /&gt;
&lt;br /&gt;
Cast a skill&lt;br /&gt;
&lt;br /&gt;
'''CharacterAppearAt(GAMEOBJECT|FLOAT3:target, INT:playspawn)'''&lt;br /&gt;
&lt;br /&gt;
Appear at the target&lt;br /&gt;
&lt;br /&gt;
'''CharacterAppearOutOfSightTo(GAMEOBJECT:target, FLOAT:angle, INT:playspawn)'''&lt;br /&gt;
&lt;br /&gt;
Appears out of sight to the players from a certain angle while being able to reach target&lt;br /&gt;
&lt;br /&gt;
'''CharacterAppearOnTrailOutOfSightTo(CHARACTER:target, FLOAT:angle, INT:playspawn)'''&lt;br /&gt;
&lt;br /&gt;
Appears out of sight to the players, on its previous locations, from a certain angle while being able to reach target&lt;br /&gt;
&lt;br /&gt;
'''CharacterDisappear(FLOAT:angle[, INTEGER:isRunning=0])'''&lt;br /&gt;
&lt;br /&gt;
Move out of screen and go of stage, will run if &amp;lt;isRunning&amp;gt; is not 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetOffStage(-)'''&lt;br /&gt;
&lt;br /&gt;
Set Off Stage&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetOnStage(-)'''&lt;br /&gt;
&lt;br /&gt;
Set On Stage&lt;br /&gt;
&lt;br /&gt;
'''CharacterLookAt(GAMEOBJECT|FLOAT3|SPLINE:target[, INT:snapToTarget=0, INT:angleTolerance=0])'''&lt;br /&gt;
&lt;br /&gt;
Rotates the character to look at the target (Closest spline point in case of a spline).&lt;br /&gt;
&lt;br /&gt;
'''CharacterLookFrom(GAMEOBJECT|SPLINE:target[, INT:snapToTarget=0])'''&lt;br /&gt;
&lt;br /&gt;
Rotates to the character so it has the same rotation as the target (Closest spline point in case of a spline).&lt;br /&gt;
&lt;br /&gt;
'''CharacterFollow(CHARACTER:target, FLOAT:durationInSeconds, INT:run)'''&lt;br /&gt;
&lt;br /&gt;
Follow the target for a certain time&lt;br /&gt;
&lt;br /&gt;
'''CharacterFollowOwnerOrLeader(FLOAT:durationInSeconds, INT:run)'''&lt;br /&gt;
&lt;br /&gt;
Follow the leader or owner for a certain time&lt;br /&gt;
&lt;br /&gt;
'''CharacterWander(FLOAT|TRIGGER:range, FLOAT:durationInSeconds [, INT:run, GAMEOBJECT:anchor])'''&lt;br /&gt;
&lt;br /&gt;
Wander around for a certain time&lt;br /&gt;
&lt;br /&gt;
'''CharacterSwitchWeaponType(WEAPON:type)'''&lt;br /&gt;
&lt;br /&gt;
If necessary switch to the new weapon type&lt;br /&gt;
&lt;br /&gt;
'''CharacterFleeFrom(RELATION:relation, FLOAT:range)'''&lt;br /&gt;
&lt;br /&gt;
Run away from certain characters if necessary&lt;br /&gt;
'''&lt;br /&gt;
CharacterFleeFromSurface(SURFACE:surface)'''&lt;br /&gt;
&lt;br /&gt;
Run away from a certain surface if necessary&lt;br /&gt;
&lt;br /&gt;
'''CharacterFleeFromDangerousSurface(-)'''&lt;br /&gt;
&lt;br /&gt;
Run away from a dangerous surfaces if necessary&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddSourcePoints(CHARACTER:character, INT:amount)'''&lt;br /&gt;
&lt;br /&gt;
Adds x source points (x can be negative to substract)&lt;br /&gt;
&lt;br /&gt;
'''CharacterDie(CHARACTER:character[, DEATH:type=DoT])'''&lt;br /&gt;
&lt;br /&gt;
Kills the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterHeal(CHARACTER:character, FLOAT:percentage)'''&lt;br /&gt;
&lt;br /&gt;
Heals the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterConsume(CHARACTER:character, POTION:potion)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character consume a potion. Doesn't cost any AP and will just execute the result of the potion.&lt;br /&gt;
&lt;br /&gt;
'''CharacterDisableAllCrimes(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Disables all generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterEnableAllCrimes(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Enables all generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
'''&lt;br /&gt;
CharacterEnableCrime(CHARACTER:target, STRING:crime, ...)'''&lt;br /&gt;
&lt;br /&gt;
Enables the specified generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterDisableCrime(CHARACTER:target, STRING:crime, ...)'''&lt;br /&gt;
&lt;br /&gt;
Disables the specified generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetLongInvestigationDuration(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Doubles the time it takes for the investigation to time out. Use this when the character needs to move a long path before investigating.&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiCalculate(-)'''&lt;br /&gt;
&lt;br /&gt;
Calculate the AI of the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiStopCalculate(-)'''&lt;br /&gt;
&lt;br /&gt;
Stop the calculation of the AI of the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiFinishMoveSkill(-)'''&lt;br /&gt;
&lt;br /&gt;
Finish the current MoveSkill.&lt;br /&gt;
'''&lt;br /&gt;
CharacterAiAddInterestingItem(CHARACTER:character, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Make it interesting for the AI to destroy that Item&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiRemoveInterestingItem(CHARACTER:character, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Make it no longer interesting for the AI to destroy that Item&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetArchetype(CHARACTER:character, ARCHETYPE:archetype)'''&lt;br /&gt;
&lt;br /&gt;
Sets the archetype of the character, used in AI calculations&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetStoryNPC(CHARACTER:character, INT:bool)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character storyNPC or not.&lt;br /&gt;
'''&lt;br /&gt;
CharacterAddActionPoints(CHARACTER:character, INT:amount)'''&lt;br /&gt;
&lt;br /&gt;
Give character some action points&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetImmortal(CHARACTER:character, INT:bool)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character immortal or not. (Allow dying)&lt;br /&gt;
&lt;br /&gt;
'''CharacterPlayEffect(CHARACTER:character, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect on the character and it follows the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterPlayLoopEffect(OUT INT64:effectHandle, CHARACTER:character, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays a looping effect on the character and it follows the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterEvent(CHARACTER:character, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw a character event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''CharacterItemEvent(CHARACTER:character, ITEM:item, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw a character/item event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''CharacterCharacterEvent(CHARACTER:character1, CHARACTER:character2, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw a character/character event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetRelationIndivToIndiv(CHARACTER:source, CHARACTER:target, INT:relation)'''&lt;br /&gt;
&lt;br /&gt;
Changes the relationship between 2 characters.&lt;br /&gt;
'''&lt;br /&gt;
CharacterForceUpdate(INT:forceUpdate)'''&lt;br /&gt;
&lt;br /&gt;
Makes sure the attached character is always being update or not. &lt;br /&gt;
'''&lt;br /&gt;
CharacterSetEnemy(CHARACTER:character, CHARACTER:enemy)'''&lt;br /&gt;
&lt;br /&gt;
Sets the current enemy of character&lt;br /&gt;
&lt;br /&gt;
'''CharacterApplyStatus(CHARACTER:character, STATUS:statusId [, INT:turns=null, INT:force=0])'''&lt;br /&gt;
&lt;br /&gt;
Applies the status to the character When turns is -1 it's a permanent status When turns is -2 it's a keep alive status (which means it will die if it's not applied again within 1 second) &lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveStatus(CHARACTER:character, STATUS:statusId [, STATUS:reasonStatusID=null])'''&lt;br /&gt;
&lt;br /&gt;
Removes the status from the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterDestroy(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Destroys the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetCanSpotSneakers(CHARACTER:character, INT:enabled)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the character can spot sneaking characters.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetAttackOfOpportunity(CHARACTER:character, INT:enabled)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the character can do attack of opportunities.&lt;br /&gt;
&lt;br /&gt;
'''CharacterResurrect(CHARACTER:character [, INT:Percentage = 100])'''&lt;br /&gt;
&lt;br /&gt;
Resurrects the character at [2]% health.&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddToInventory(CHARACTER:character, FIXEDSTRING:itemStatsObject[, INT:amount, INT:showInTrade=1])'''&lt;br /&gt;
&lt;br /&gt;
Add the item to the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveFromInventory(CHARACTER:character, FIXEDSTRING:itemStatsObject[, INT:amount])'''&lt;br /&gt;
&lt;br /&gt;
Remove the item from the character. If Amount is -1, then all are removed&lt;br /&gt;
&lt;br /&gt;
'''CharacterDrinkPotion(FIXEDSTRING:statID)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character drink a potion from the inventory.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetAnimationOverride(CHARACTER:character, FIXEDSTRING:animation)'''&lt;br /&gt;
&lt;br /&gt;
Sets an animation override, only walk/run/die animations can override it.&lt;br /&gt;
&lt;br /&gt;
'''CharacterUseActionPoints(CHARACTER:character, INT:amount [, OUT INT:succeeded])'''&lt;br /&gt;
&lt;br /&gt;
Uses x action points&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddTreasureTable(CHARACTER:character, FIXEDSTRING:treasureTable)'''&lt;br /&gt;
&lt;br /&gt;
Adds &amp;lt;treasureTable&amp;gt; to the treasure list of &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveTreasureTable(CHARACTER:character, FIXEDSTRING:treasureTable)'''&lt;br /&gt;
&lt;br /&gt;
Removes &amp;lt;treasureTable&amp;gt; from the treasure list of &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterClearTreasureTables(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Removes all treasure tables from &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetTemporaryHostileRelation(CHARACTER:character, CHARACTER:otherCharacter)'''&lt;br /&gt;
&lt;br /&gt;
Creates a temporary hostile relation between the 2 characters!&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetFightMode(CHARACTER:character, INT:fight [, INT:force=0])'''&lt;br /&gt;
&lt;br /&gt;
Set the character in sheath/unsheated mode.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetStats(CHARACTER:character, FIXEDSTRING:statsEntry [, INT:keepVitality=0, INT:keepAP=0, INT:keepLevel=0, OUT FLOAT:currentHP])'''&lt;br /&gt;
&lt;br /&gt;
Applies &amp;lt;statsEntry&amp;gt; from character.xlsm to &amp;lt;character&amp;gt;, returns &amp;lt;currentHP&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetWalkSpeedOverride(CHARACTER:character, INTEGER:override [, FLOAT:walkSpeed])'''&lt;br /&gt;
&lt;br /&gt;
Sets walk speed override of &amp;lt;character&amp;gt;, removes it if &amp;lt;override&amp;gt; is 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetRunSpeedOverride(CHARACTER:character, INTEGER:override [, FLOAT:runSpeed])'''&lt;br /&gt;
&lt;br /&gt;
Sets run speed override of &amp;lt;character&amp;gt;, removes it if &amp;lt;override&amp;gt; is 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetHasDialog(CHARACTER:character, INTEGER:bool)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the dialog of the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterInitPatrol(SPLINE:spline, INT:splineIndex, INT:reversed, INT:running)'''&lt;br /&gt;
&lt;br /&gt;
Start patroling from the given index along the given spline with the given character.&lt;br /&gt;
&lt;br /&gt;
'''CharacterStartPatrol(SPLINE:spline, INT:splineIndex, INT:reversed, INT:running)'''&lt;br /&gt;
&lt;br /&gt;
Start patroling from the given index along the given spline with the given character.&lt;br /&gt;
&lt;br /&gt;
'''CharacterStopPatrol(-)'''&lt;br /&gt;
&lt;br /&gt;
Let the character stop patrolling whatever spline he's on!&lt;br /&gt;
&lt;br /&gt;
'''CharacterInterruptPatrol(-)'''&lt;br /&gt;
&lt;br /&gt;
Call when the patrol should interrupt so the guard stops moving to the next spline. If this is called when the character is deactivated, a caret will take his place.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetAnimationSetOverride(CHARACTER:source, FIXEDSTRING:override)'''&lt;br /&gt;
&lt;br /&gt;
Sets an animation set override for a character. Empty fixedstring clears the override.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetFloating(CHARACTER:target, INTEGER:isFloating)'''&lt;br /&gt;
&lt;br /&gt;
Sets &amp;lt;target&amp;gt; floating if &amp;lt;isFloating&amp;gt; is not 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterResetCooldowns(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Resets the skill cooldowns for &amp;lt;target&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ItemEvent(ITEM:item, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw an item event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayAnimation(FIXEDSTRING:animation)'''&lt;br /&gt;
&lt;br /&gt;
Plays an animation on the item&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayAnimationTo(FIXEDSTRING:animation, FLOAT:targetPercentage, [FLOAT:speed])'''&lt;br /&gt;
&lt;br /&gt;
Plays an animation on the item to the target time (percentage of the total duration)&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayEffect(ITEM:item, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect on the item and it follows the item&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayLoopEffect(OUT INT:effectHandle, ITEM:item, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays a looping effect on the item and it follows the item&lt;br /&gt;
&lt;br /&gt;
'''ItemSetOnStage(ITEM:item, INTEGER:bool)'''&lt;br /&gt;
&lt;br /&gt;
Sets an item on or offstage&lt;br /&gt;
&lt;br /&gt;
'''ItemSetCanInteract(ITEM:item, INTEGER:bool)'''&lt;br /&gt;
&lt;br /&gt;
Sets an item (not) interactible&lt;br /&gt;
&lt;br /&gt;
'''ItemClose(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Close an item&lt;br /&gt;
&lt;br /&gt;
'''ItemOpen(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Open an item&lt;br /&gt;
&lt;br /&gt;
'''ItemDrop(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Drop an item&lt;br /&gt;
&lt;br /&gt;
'''ItemLock(ITEM:item, FIXEDSTRING:key)'''&lt;br /&gt;
&lt;br /&gt;
Lock an item&lt;br /&gt;
&lt;br /&gt;
'''ItemUnlock(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Unlock an item&lt;br /&gt;
&lt;br /&gt;
'''ItemApplyStatus(ITEM:item, STATUS:statusId [, INT:turns=null, INT:force=0])'''&lt;br /&gt;
&lt;br /&gt;
Applies the status to the item When turns is -1 it's a permanent status When turns is -2 it's a keep alive status (which means it will die if it's not applied again within 1 second) &lt;br /&gt;
&lt;br /&gt;
'''ItemRemoveStatus(ITEM:item, STATUS:statusId)'''&lt;br /&gt;
&lt;br /&gt;
Removes the status from the item&lt;br /&gt;
&lt;br /&gt;
'''ItemDie(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Kills the item&lt;br /&gt;
&lt;br /&gt;
'''ItemMoveTo(GAMEOBJECT|FLOAT3:target, FLOAT:velocity, FLOAT:acceleration, INTEGER:matchTargetRotation)'''&lt;br /&gt;
&lt;br /&gt;
Moves the item to the target&lt;br /&gt;
&lt;br /&gt;
'''ItemToInventory(ITEM:item, CHARACTER|ITEM:target [,INT:amount=-1])'''&lt;br /&gt;
&lt;br /&gt;
Moves the item to the target's inventory&lt;br /&gt;
&lt;br /&gt;
'''ItemLookAt(GAMEOBJECT:target, FLOAT:degreesPerSecond)'''&lt;br /&gt;
&lt;br /&gt;
Rotates the item to look at the target&lt;br /&gt;
&lt;br /&gt;
'''ItemDestroy(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Destroys the item&lt;br /&gt;
&lt;br /&gt;
'''ItemSetAmount(ITEM:item, INT:amount)'''&lt;br /&gt;
&lt;br /&gt;
Change the amount of the item&lt;br /&gt;
&lt;br /&gt;
'''IterateItemsInInventory(CHARACTER|ITEM:source, FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each iten in source's inventory. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''ItemAddCharges(ITEM:TargetItem, INT:charges)'''&lt;br /&gt;
&lt;br /&gt;
Add/subtract charges from an item&lt;br /&gt;
&lt;br /&gt;
'''ItemResetChargesToInitial(ITEM:TargetItem)'''&lt;br /&gt;
&lt;br /&gt;
Resets charges from item to initial state&lt;br /&gt;
&lt;br /&gt;
'''MakePeace(CHARACTER:Source, CHARACTER:Target[, INT:IgnoreVote = 1])'''&lt;br /&gt;
&lt;br /&gt;
Make peace between users of the characters&lt;br /&gt;
&lt;br /&gt;
'''MakeWar(CHARACTER:Source, CHARACTER:Target[, INT:IgnoreVote = 1])'''&lt;br /&gt;
&lt;br /&gt;
Make war between users of the characters&lt;br /&gt;
&lt;br /&gt;
'''FindSurface(OUT FLOAT3:result, GAMEOBJECT|FLOAT3:source, FLOAT:minRange, FLOAT:maxRange, SURFACE:type [,CHARACTER:alignSource, INT:minEnemiesInSurface, INT:maxAlliesInSurface, INT:minimumCellCount])'''&lt;br /&gt;
&lt;br /&gt;
Finds the closest surface of a specific type.&lt;br /&gt;
&lt;br /&gt;
'''FindValidPosition(INOUT FLOAT3:position, FLOAT:radius[, CHARACTER|ITEM:object=null])'''&lt;br /&gt;
&lt;br /&gt;
Finds the closest valid position (where the object can stand.)&lt;br /&gt;
&lt;br /&gt;
'''FindPosition(INOUT FLOAT3:position, CHARACTER:source, INT:canStand, INT:checkSight, FLOAT:minRadius, FLOAT:maxRadius, FLOAT:rangeCheck, CHARACTER:alignSource, INT:minAllies, INT:maxAllies, INT:minEnemies, INT:maxEnemies [,FIXEDSTRING:AiHintTag=null, INT:forceHint=0, FLOAT3:SourcePosition])'''&lt;br /&gt;
&lt;br /&gt;
Finds the closest position from the source (within radius) where the conditions are matched. &lt;br /&gt;
&lt;br /&gt;
'''Cast(OUT OBJECT variable, OBJECT value)'''&lt;br /&gt;
&lt;br /&gt;
Casts the value to the variable.&lt;br /&gt;
&lt;br /&gt;
'''StringConcatenate(STRING:stringA, STRING:stringB, OUT STRING:resultingString)'''&lt;br /&gt;
&lt;br /&gt;
Appends stringB to stringA. Resulting string is stored in the third parameter.&lt;br /&gt;
&lt;br /&gt;
== QUERIES ==&lt;br /&gt;
&lt;br /&gt;
GetPosition(GAMEOBJECT:object,OUT FLOAT3:src)&lt;br /&gt;
&lt;br /&gt;
Get the current position of an object&lt;br /&gt;
&lt;br /&gt;
GetForwardDirection(GAMEOBJECT:object,OUT FLOAT3:direction)&lt;br /&gt;
&lt;br /&gt;
Get the current forward direction of an object&lt;br /&gt;
&lt;br /&gt;
GetRightDirection(GAMEOBJECT:object,OUT FLOAT3:direction)&lt;br /&gt;
&lt;br /&gt;
Get the current right direction of an object&lt;br /&gt;
&lt;br /&gt;
GetUpDirection(GAMEOBJECT:object,OUT FLOAT3:direction)&lt;br /&gt;
&lt;br /&gt;
Get the current up direction of an object&lt;br /&gt;
&lt;br /&gt;
GetDirection(GAMEOBJECT|FLOAT3:src,GAMEOBJECT|FLOAT3:target,OUT FLOAT3:direction[, OUT FLOAT:distance])&lt;br /&gt;
&lt;br /&gt;
Get the direction from src to target (optional: returns the distance between the objects as well)&lt;br /&gt;
&lt;br /&gt;
GetRotation(GAMEOBJECT:object, OUT FLOAT3:vector)&lt;br /&gt;
&lt;br /&gt;
Get the rotation of an object&lt;br /&gt;
&lt;br /&gt;
CharacterGetTargetSpline(INT: SplineIndex)&lt;br /&gt;
&lt;br /&gt;
Returns the spline index the character is currently walking towards, or -1 if he is not active on a spline.&lt;br /&gt;
&lt;br /&gt;
IsEqual(OBJECT:variable, OBJECT:variable)&lt;br /&gt;
&lt;br /&gt;
Compares both objects and see if they are equal.&lt;br /&gt;
&lt;br /&gt;
IsLessThen(INT|FLOAT:variable, INT|FLOAT:variable)&lt;br /&gt;
&lt;br /&gt;
Compares both objects and see if the first one is smaller.&lt;br /&gt;
&lt;br /&gt;
IsGreaterThen(INT|FLOAT:variable, INT|FLOAT:variable)&lt;br /&gt;
&lt;br /&gt;
Compares both objects and see if the first one is bigger.&lt;br /&gt;
&lt;br /&gt;
IsRandom(FLOAT:percentage)&lt;br /&gt;
&lt;br /&gt;
Each time this condition is checked, it will succeed with a chance of the percentage (between 0 and 1)&lt;br /&gt;
&lt;br /&gt;
IsRound(INT:roundNumber)&lt;br /&gt;
&lt;br /&gt;
Checks if we are currently in combat in round x&lt;br /&gt;
&lt;br /&gt;
IsInSurface(OBJECT|FLOAT3:target, SURFACE:type[, FLOAT:radius])&lt;br /&gt;
&lt;br /&gt;
Check if the character, item, trigger or position is currently within the specific surface.&lt;br /&gt;
&lt;br /&gt;
IsInDangerousSurface(OBJECT|FLOAT3:target[, CHARACTER:character, FLOAT:radius])&lt;br /&gt;
&lt;br /&gt;
Check if &amp;lt;target&amp;gt; is currently in on a dangerous surface. Uses &amp;lt;character&amp;gt; for path influences if provided (is necessary with non-character targets)&lt;br /&gt;
&lt;br /&gt;
IsInDialog(CHARACTER|ITEM:target[, INT:ignoreAutomatedDialogs=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character or item is currently in a dialog, optionally ignoring automated dialogs&lt;br /&gt;
&lt;br /&gt;
IsInAutomatedDialog(CHARACTER|ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Check if the character or item is currently in an automated dialog&lt;br /&gt;
&lt;br /&gt;
GetDistance(OUT FLOAT:distance, GAMEOBJECT|FLOAT3:source, GAMEOBJECT|FLOAT3:target)&lt;br /&gt;
&lt;br /&gt;
Returns the distance between 2 positions&lt;br /&gt;
&lt;br /&gt;
GetDistance2D(OUT FLOAT:distance, GAMEOBJECT|FLOAT3:source, GAMEOBJECT|FLOAT3:target)&lt;br /&gt;
Returns the 2D distance between 2 positions (ignores height)&lt;br /&gt;
&lt;br /&gt;
GetInnerDistance(OUT FLOAT:distance, GAMEOBJECT:source, GAMEOBJECT:target)&lt;br /&gt;
&lt;br /&gt;
Returns the distance between 2 gameobjects (character, item, trigger, ...) Their bounds are already subtracted.&lt;br /&gt;
&lt;br /&gt;
GetPosition(GAMEOBJECT:object, OUT FLOAT3:position)&lt;br /&gt;
&lt;br /&gt;
Returns the position of a gameobject (character, item, trigger, ...)&lt;br /&gt;
&lt;br /&gt;
GetVar(OUT OBJECT:returnValue, CHARACTER|ITEM:target, FIXEDSTRING:varName)&lt;br /&gt;
&lt;br /&gt;
Gets a global variable from the target&lt;br /&gt;
&lt;br /&gt;
GetClosestPlayer(OUT CHARACTER:player, GAMEOBJECT|FLOAT3:source)&lt;br /&gt;
&lt;br /&gt;
Gets the closest player near the source, default being being the object itself&lt;br /&gt;
&lt;br /&gt;
GetPlayerCount(OUT INT:playerCount)&lt;br /&gt;
&lt;br /&gt;
Gets the number of players in the party&lt;br /&gt;
&lt;br /&gt;
GetPlayerByIndex(OUT CHARACTER:returnCharacter, INT:playerIndex)&lt;br /&gt;
&lt;br /&gt;
Gets a player from the party by index&lt;br /&gt;
&lt;br /&gt;
GetRandomCharacter(OUT CHARACTER:returnCharacter, [INT:canBeSelf=0, INT:canBePlayer=0])&lt;br /&gt;
&lt;br /&gt;
Gets a random character in the current level&lt;br /&gt;
&lt;br /&gt;
ContainsSurface(GAMEOBJECT|FLOAT3:source, FLOAT:radius, SURFACE:type,)&lt;br /&gt;
&lt;br /&gt;
Checks if there is any surface of the type within a radius of the source&lt;br /&gt;
&lt;br /&gt;
IsSurface(GAMEOBJECT|FLOAT3:source, FLOAT:radius, SURFACE:type,)&lt;br /&gt;
&lt;br /&gt;
Checks if the whole radius around the source is the specified surface type&lt;br /&gt;
&lt;br /&gt;
IsObjectOnObject(CHARACTER|ITEM:source,CHARACTER|ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Checks if the source is standing on the target&lt;br /&gt;
&lt;br /&gt;
GetX(FLOAT3:vector, OUT FLOAT:value)&lt;br /&gt;
&lt;br /&gt;
Returns the X component of the vector&lt;br /&gt;
&lt;br /&gt;
GetY(FLOAT3:vector, OUT FLOAT:value)&lt;br /&gt;
&lt;br /&gt;
Returns the Y component of the vector&lt;br /&gt;
&lt;br /&gt;
GetZ(FLOAT3:vector, OUT FLOAT:value)&lt;br /&gt;
&lt;br /&gt;
Returns the Z component of the vector&lt;br /&gt;
&lt;br /&gt;
CanSee(GAMEOBJECT|FLOAT3:source, GAMEOBJECT|FLOAT3:target[, INT:addProjectileTargetGroundOffset=0])&lt;br /&gt;
&lt;br /&gt;
Check if the sight is blocked between 2 points.&lt;br /&gt;
&lt;br /&gt;
IsVisible(CHARACTER|ITEM:object)&lt;br /&gt;
&lt;br /&gt;
Check if the object is set invisible or not with SetVisible.&lt;br /&gt;
&lt;br /&gt;
GetTextDuration(CHARACTER|ITEM:object, FIXEDSRTING:key, OUT FLOAT:duration)&lt;br /&gt;
&lt;br /&gt;
Gets how long a text needs to be displayed&lt;br /&gt;
&lt;br /&gt;
IsCasual(-)&lt;br /&gt;
&lt;br /&gt;
Returns if the current game mode is Casual&lt;br /&gt;
&lt;br /&gt;
IsHardcore(-)&lt;br /&gt;
&lt;br /&gt;
Returns if the current game mode is Hardcore&lt;br /&gt;
&lt;br /&gt;
IsTagged(GAMEOBJECT:object, FIXEDSTRING:tag)&lt;br /&gt;
&lt;br /&gt;
Check if the object is tagged.&lt;br /&gt;
&lt;br /&gt;
TranslatedStringKeyExists(FIXEDSTRING:key)&lt;br /&gt;
&lt;br /&gt;
Check if the TranslatedString key exists.&lt;br /&gt;
&lt;br /&gt;
IsInCombat(CHARACTER|ITEM:object)&lt;br /&gt;
&lt;br /&gt;
Returns true if the object is in combat.&lt;br /&gt;
&lt;br /&gt;
IsInCombatWith(CHARACTER|ITEM:object, CHARACTER|ITEM:object)&lt;br /&gt;
&lt;br /&gt;
Returns true if the objects are in combat with each other.&lt;br /&gt;
&lt;br /&gt;
IsFacing(GAMEOBJECT:source, GAMEOBJECT|FLOAT3:target, [INT:angle=90])&lt;br /&gt;
&lt;br /&gt;
Returns true if the object is facing the position within the given angle.&lt;br /&gt;
&lt;br /&gt;
GameIsSaving(-)&lt;br /&gt;
&lt;br /&gt;
Returns true if the game is saving.&lt;br /&gt;
&lt;br /&gt;
GameIsLoading(-)&lt;br /&gt;
&lt;br /&gt;
Returns true if the game is loading.&lt;br /&gt;
&lt;br /&gt;
GetUserCount(OUT INT:userCount)&lt;br /&gt;
&lt;br /&gt;
Returns the user count.&lt;br /&gt;
&lt;br /&gt;
GetCurrentCharacter(OUT CHARACTER:character, INT:user)&lt;br /&gt;
&lt;br /&gt;
Returns the character currently being controlled by the specified user.&lt;br /&gt;
&lt;br /&gt;
GetCurrentLevel(OUT FIXEDSTRING:currentLevel)&lt;br /&gt;
&lt;br /&gt;
Returns the current levelname&lt;br /&gt;
&lt;br /&gt;
GetAIBounds(CHARACTER|ITEM:source, OUT FLOAT:bounds)&lt;br /&gt;
&lt;br /&gt;
Returns AI bounds of &amp;lt;source&amp;gt; in &amp;lt;bounds&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HasGlobalFlag(FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Global Flag is set&lt;br /&gt;
&lt;br /&gt;
HasFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Flag is set on the Object&lt;br /&gt;
&lt;br /&gt;
HasUserFlag(CHARACTER:object, FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Flag is set on the user's characters&lt;br /&gt;
&lt;br /&gt;
HasPartyFlag(CHARACTER:object, FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Flag is set on the party's characters&lt;br /&gt;
&lt;br /&gt;
DialogExists(STRING:dialogue)&lt;br /&gt;
&lt;br /&gt;
Returns true if the dialogue exists.&lt;br /&gt;
&lt;br /&gt;
IsActive(CHARACTER|ITEM:Object)&lt;br /&gt;
&lt;br /&gt;
Returns if the character or item is currently active.&lt;br /&gt;
&lt;br /&gt;
ListGetSize(LIST&amp;lt;OBJECT&amp;gt;:list, out INT:size)&lt;br /&gt;
&lt;br /&gt;
Returns the number of elements in &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ListGet(LIST&amp;lt;OBJECT&amp;gt;:list, INT:index, out OBJECT:entry)&lt;br /&gt;
&lt;br /&gt;
Returns &amp;lt;entry&amp;gt; at &amp;lt;index&amp;gt; of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ListGetRandom(LIST&amp;lt;OBJECT&amp;gt;:list, out OBJECT:entry)&lt;br /&gt;
&lt;br /&gt;
Returns a random &amp;lt;entry&amp;gt; of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IsBoss(CHARACTER|ITEM:Object)&lt;br /&gt;
&lt;br /&gt;
Returns true if the entity is tagged as a boss&lt;br /&gt;
&lt;br /&gt;
IsProjectileSkill(SKILL:skill)&lt;br /&gt;
&lt;br /&gt;
Returns true if the skill is a ranged skill (uses a projectile)&lt;br /&gt;
&lt;br /&gt;
IsValidSkillTarget(CHARACTER:source, OBJECT|FLOAT3:target, SKILLID:skill[, INTEGER:ignoreRangeCheck=0])&lt;br /&gt;
&lt;br /&gt;
Checks whether &amp;lt;target&amp;gt; is a valid target for &amp;lt;skill&amp;gt; at &amp;lt;source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GetFaction(OUT FIXEDSTRING:faction, CHARACTER|ITEM:character)&lt;br /&gt;
&lt;br /&gt;
Returns the faction of the provided character or item&lt;br /&gt;
&lt;br /&gt;
IsInActiveTurn(CHARACTER|ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Returns true if it's the character's or item's turn in combat.&lt;br /&gt;
&lt;br /&gt;
IsSkillActive(CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; has &amp;lt;skillId&amp;gt; active (in memory).&lt;br /&gt;
&lt;br /&gt;
HasSkillAi(SKILLID:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns true if the skill is using the new Ai system&lt;br /&gt;
&lt;br /&gt;
IsInArena(CHARACTER::character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character is in an arena fight&lt;br /&gt;
&lt;br /&gt;
CrimeGetType(INTEGER:crimeId, OUT STRING:crimeType)&lt;br /&gt;
&lt;br /&gt;
Returns the type of the crime with this id.&lt;br /&gt;
&lt;br /&gt;
CrimeGetCriminals(INTEGER:crimeId, OUT CHARACTER:criminal1, OUT CHARACTER:criminal2, OUT CHARACTER:criminal3, OUT CHARACTER:criminal4)&lt;br /&gt;
&lt;br /&gt;
Returns the criminals of that crime. They might all be null.&lt;br /&gt;
&lt;br /&gt;
IsSourceSkill(SKILL:skill)&lt;br /&gt;
&lt;br /&gt;
Returns true if the skill is a source skill.&lt;br /&gt;
&lt;br /&gt;
IsInGameMasterMode(-)&lt;br /&gt;
&lt;br /&gt;
Returns true if the game in game master mode.&lt;br /&gt;
&lt;br /&gt;
CharacterGet(OUT CHARACTER:character, GAMEOBJECT|FLOAT3:src, FLOAT:range, COMPARE:howTo, COMPAREFUNC:compareFunc[, RELATION: relation, SURFACE:surface, STATUS:status, TALENT:talent, CHARACTER:inSightOf, FIXEDSTRING:tag])&lt;br /&gt;
&lt;br /&gt;
Get a character within a certain range conforming to the filled in restraints. &lt;br /&gt;
&lt;br /&gt;
CharacterCount(OUT INT:count, GAMEOBJECT|FLOAT3:src, FLOAT:range, [RELATION: relation, SURFACE:surface, STATUS:status, TALENT:talent, CHARACTER:inSightOf])&lt;br /&gt;
&lt;br /&gt;
Counts the characters within a certain range conforming to the filled in restraints.&lt;br /&gt;
&lt;br /&gt;
CharacterGetOwner(OUT CHARACTER:owner, CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get the character's owner&lt;br /&gt;
&lt;br /&gt;
CharacterGetFollow(OUT CHARACTER:to follow, CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get the character to follow&lt;br /&gt;
&lt;br /&gt;
CharacterGetEnemy(OUT CHARACTER:current enemy, CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get current enemy of character&lt;br /&gt;
&lt;br /&gt;
CharacterCanCast(CHARACTER:source, SKILL:skillId, [ITEM:skillItem=null, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can cast the skill: will check cooldown, actionpoints&lt;br /&gt;
&lt;br /&gt;
CharacterCanSitOnItem(CHARACTER:source, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Check if the character source can sit or lie on an item.&lt;br /&gt;
&lt;br /&gt;
CharacterCanDrinkPotion(CHARACTER:source, FIXEDSTRING:potionID[, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can drink the potion: will check inv and actionpoints&lt;br /&gt;
&lt;br /&gt;
CharacterCanUseItem(CHARACTER:source, ITEM:item[, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can use the item in the world&lt;br /&gt;
&lt;br /&gt;
CharacterCanUseItemInInventory(CHARACTER:source, ITEM:item[, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can use the item in his inventory&lt;br /&gt;
&lt;br /&gt;
CharacterCanSee(CHARACTER:watchingChar, CHARACTER|ITEM:target [, INT:forceUpdate=0])&lt;br /&gt;
&lt;br /&gt;
Check if character has target in his line of sight. &lt;br /&gt;
&lt;br /&gt;
CharacterCanShoot(CHARACTER:source, GAMEOBJECT|FLOAT3:target)&lt;br /&gt;
&lt;br /&gt;
Check if the character can shoot the target.&lt;br /&gt;
&lt;br /&gt;
CharacterIsPlayer(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if the character is a player&lt;br /&gt;
&lt;br /&gt;
CharacterIsInParty(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if the character is in the party&lt;br /&gt;
&lt;br /&gt;
CharacterIsEnemy(CHARACTER:source, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is enemy of source&lt;br /&gt;
&lt;br /&gt;
CharacterIsAlly(CHARACTER:source, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is ally of source&lt;br /&gt;
&lt;br /&gt;
CharacterIsNeutral(CHARACTER:source, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is neutral of source&lt;br /&gt;
&lt;br /&gt;
CharacterIsDead(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is dead&lt;br /&gt;
&lt;br /&gt;
CharacterIsMoving(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is moving (speed &amp;gt; 0)&lt;br /&gt;
&lt;br /&gt;
CharacterIsSummon(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a summon&lt;br /&gt;
&lt;br /&gt;
CharacterIsPartyFollower(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a party follower&lt;br /&gt;
&lt;br /&gt;
CharacterIsStoryNPC(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a story NPC&lt;br /&gt;
&lt;br /&gt;
CharacterInWeaponRange(CHARACTER:character, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is in the current's weapon range&lt;br /&gt;
&lt;br /&gt;
CharacterInTouchRange(CHARACTER:character, CHARACTER:targetChar)&lt;br /&gt;
&lt;br /&gt;
Check if target is in the character's touch range &lt;br /&gt;
&lt;br /&gt;
CharacterHasStatus(CHARACTER:character, STATUS:statusId[, FIXEDSTRING:extraData])&lt;br /&gt;
&lt;br /&gt;
Check if character currently has the status. ExtraData can be filled in for some statuses: - Consume: statsid of the item - Shield: skillid of the shield&lt;br /&gt;
&lt;br /&gt;
CharacterGetStatusSourceCharacter(CHARACTER:character, STATUS:statusId, OUT CHARACTER:source[, FIXEDSTRING:extraData])&lt;br /&gt;
&lt;br /&gt;
Get the source character of a status&lt;br /&gt;
&lt;br /&gt;
CharacterGetStatusSourceItem(CHARACTER:character, STATUS:statusId, OUT ITEM:source[, FIXEDSTRING:extraData])&lt;br /&gt;
&lt;br /&gt;
Get the source item of a status&lt;br /&gt;
&lt;br /&gt;
CharacterHasTalent(CHARACTER:character, TALENT:talent)&lt;br /&gt;
&lt;br /&gt;
Check if character currently has the talent&lt;br /&gt;
&lt;br /&gt;
CharacterHasSkill(CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Check if character currently has the skill&lt;br /&gt;
&lt;br /&gt;
CharacterHasWeaponType(CHARACTER:character, WEAPON:weaponTYPE [, INT:equipped])&lt;br /&gt;
&lt;br /&gt;
Check if character currently has a weapon of this type in his inventory or equipped&lt;br /&gt;
&lt;br /&gt;
CharacterGetStat(OUT FLOAT:statValue, CHARACTER:character, CHARACTERSTAT:statType)&lt;br /&gt;
&lt;br /&gt;
Returns the current value of the stat (Vitality, ...)&lt;br /&gt;
&lt;br /&gt;
CharacterGetSightRange(OUT FLOAT:range, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's sight range&lt;br /&gt;
&lt;br /&gt;
CharacterGetWeaponRange(OUT FLOAT:minRange, OUT FLOAT:maxRange, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's current weapon range&lt;br /&gt;
&lt;br /&gt;
CharacterGetTouchRange(OUT FLOAT:touchRange, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's current touch range&lt;br /&gt;
&lt;br /&gt;
CharacterGetSkillRange(OUT FLOAT:minRange, OUT FLOAT:maxRange,CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns the character's skill range&lt;br /&gt;
&lt;br /&gt;
CharacterGetSkillImpactRange(OUT FLOAT:areaRange, CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns the character's skill range&lt;br /&gt;
&lt;br /&gt;
CharacterIsInTrigger(CHARACTER:character, TRIGGER:trigger)&lt;br /&gt;
&lt;br /&gt;
Check if character is in given trigger&lt;br /&gt;
&lt;br /&gt;
CharacterGetAbility(OUT INT:value, CHARACTER:character, ABILITY:ability)&lt;br /&gt;
&lt;br /&gt;
Returns the character's value of the specified ability&lt;br /&gt;
&lt;br /&gt;
CharacterGetHostileCount(OUT INT:value, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns how many characters are targeting this character right now... You can iterate over them with IterateEnemiesOf.&lt;br /&gt;
&lt;br /&gt;
CharacterCanFight(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character can fight.&lt;br /&gt;
&lt;br /&gt;
CharacterGetTemplate(CHARACTER:character, OUT CHARACTERTEMPLATE:root)&lt;br /&gt;
&lt;br /&gt;
Returns the roottemplate of the character.&lt;br /&gt;
&lt;br /&gt;
CharacterCanSpotSneakers(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character can spot sneaking characters&lt;br /&gt;
&lt;br /&gt;
CharacterIsFloating(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a floating character&lt;br /&gt;
&lt;br /&gt;
CharacterInCreation(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character is in character creation&lt;br /&gt;
&lt;br /&gt;
CharacterAvoidsTraps(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character avoids traps&lt;br /&gt;
&lt;br /&gt;
CharacterCheckRelation(CHARACTER:character, RELATION:relation)&lt;br /&gt;
&lt;br /&gt;
Returns true if relation check succeeds&lt;br /&gt;
&lt;br /&gt;
CharacterIsBetterOrEqualClass(CHARACTER:character, INT:currentScore, OUT INT:newScore, INT warriorScore, INT rogueScore, INT mageScore, INT clericScore, INT rangerScore)&lt;br /&gt;
&lt;br /&gt;
Returns true if score is higher or equal than the current score&lt;br /&gt;
&lt;br /&gt;
CharacterHasBeenHitBy(CHARACTER:character, DAMAGE_TYPE:damageType)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character was hit by this type.&lt;br /&gt;
&lt;br /&gt;
CharacterHasCastedSpellLastTurn(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character has casted a spell in his last turn.&lt;br /&gt;
&lt;br /&gt;
CharacterHasHadStatus(CHARACTER:character, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character has had a specific status this combat.&lt;br /&gt;
&lt;br /&gt;
CharacterHasAnimationOverride(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character has an animation override.&lt;br /&gt;
&lt;br /&gt;
CharacterCanUnlock(CHARACTER:character, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character can unlock the item (if the item is already unlocked it returns true!)&lt;br /&gt;
&lt;br /&gt;
CharacterGetReservedUserID(OUT INT:user, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's reserved User id.&lt;br /&gt;
&lt;br /&gt;
CharacterGetRace(CHARACTER:character, OUT FIXEDSTRING:race)&lt;br /&gt;
&lt;br /&gt;
Returns the &amp;lt;character&amp;gt;'s race in &amp;lt;race&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterIsRace(CHARACTER:character, FIXEDSTRING:race)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt;'s race is &amp;lt;race&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterCanMoveItem(CHARACTER:character, ITEM:item, FLOAT:minRadius, FLOAT:maxRadius [, OUT FLOAT3:destination])&lt;br /&gt;
&lt;br /&gt;
Returns true + &amp;lt;destination&amp;gt; if &amp;lt;character&amp;gt; can move &amp;lt;item&amp;gt; somewhere between &amp;lt;minRadius&amp;gt; and &amp;lt;maxRadius&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterGetDeathType(CHARACTER:character, OUT FIXEDSTRING:deathType)&lt;br /&gt;
&lt;br /&gt;
Returns death type of &amp;lt;character&amp;gt; in &amp;lt;deathType&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterGetStillAnimation(CHARACTER:object, OUT FIXEDSTRING:stillAnimation)&lt;br /&gt;
&lt;br /&gt;
Returns the still animation to play&lt;br /&gt;
&lt;br /&gt;
CrimeTransferLeadership(INT: CrimeID[, FIXEDSTRING:Tag1,...])&lt;br /&gt;
&lt;br /&gt;
Try and transfer the leadership of this crime to someone else.&lt;br /&gt;
&lt;br /&gt;
CrimeGetLeadInvestigator(OUT CHARACTER:lead, INT: CrimeID)&lt;br /&gt;
&lt;br /&gt;
Returns the lead investigator for the crime.&lt;br /&gt;
&lt;br /&gt;
CharacterCanHitTargetWithRangedWeapon(CHARACTER:source, OBJECT|FLOAT3:target[, SKILL:skill = null])&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;source&amp;gt; can hit &amp;lt;target&amp;gt; with currently equipped ranged weapon. Will use &amp;lt;skill&amp;gt; instead of equipped weapon if provided.&lt;br /&gt;
&lt;br /&gt;
CharacterHasRangedWeapon(CHARACTER:character[, INT:checkInventory = 0])&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; has has ranged weapon. Checks for non-wielded weapons if &amp;lt;checkInventory&amp;gt; is 1&lt;br /&gt;
&lt;br /&gt;
CheckInteractionReach(CHARACTER:character, CHARACTER|ITEM: target)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; could interact with &amp;lt;target&amp;gt;. This is not checking ranges, but checking if there's too much of a height difference or too many obstacles in between.&lt;br /&gt;
&lt;br /&gt;
CharacterGetSourcePoints(CHARACTER:character, OUT INT: amount)&lt;br /&gt;
&lt;br /&gt;
Returns the amount of sourcepoints of &amp;lt;character&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterAiIsCalculating(-)&lt;br /&gt;
&lt;br /&gt;
Returns if the character is still calculating the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchMoveSkillCommand(OUT SKILL:skill, OUT ITEM:skillItem, OUT FLOAT3:target)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Move Skill command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchSkillCommand(OUT SKILL:skill, OUT ITEM:skillItem, OUT FLOAT3 endPosition, OUT FLOAT3:target, OUT CHARACTER:target, OUT ITEM:target, OUT FLOAT3:target2, OUT CHARACTER:target2, OUT ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Skill command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchConsumeCommand(OUT ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Consume command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchAttackCommand(OUT FLOAT3:endPosition, OUT FLOAT3:target, OUT CHARACTER:target, OUT ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Attack command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchFallbackCommand(OUT FLOAT3:targetPosition, OUT FLOAT3:lookAtPosition)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Fallback command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterGetArchetype(CHARACTER:character, OUT ARCHETYPE:archetype)&lt;br /&gt;
&lt;br /&gt;
Returns the archetype of the character.&lt;br /&gt;
&lt;br /&gt;
CharacterIsPolymorphedInto(CHARACTER:character, FIXEDSTRING:race)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; is polymorphed into &amp;lt;race&amp;gt;. Race can be a race (like HUMAN), but also a template (in case of a polymorph skill like Chicken Touch).&lt;br /&gt;
&lt;br /&gt;
CharacterIsPolymorphInteractionDisabled(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; has his interaction disabled because of a polymorph.&lt;br /&gt;
&lt;br /&gt;
ItemGet(OUT ITEM:item, GAMEOBJECT|FLOAT3:src, FLOAT:range, COMPARE:howTo [, COMPAREFUNC:compareFunc, FIXEDSTRING:rootTemplate, FIXEDSTRING:tag])&lt;br /&gt;
&lt;br /&gt;
Get an item within a certain range conforming to the filled in restraints.&lt;br /&gt;
&lt;br /&gt;
ItemGetFromInventory(OUT ITEM:item, CHARACTER|ITEM:object [, FIXEDSTRING:statsId, FIXEDSTRING:tag, INT:isEquiped])&lt;br /&gt;
&lt;br /&gt;
Returns the first item in the inventory conforming to the filled in restraints.&lt;br /&gt;
&lt;br /&gt;
ItemIsInCharacterInventory(ITEM:item, CHARACTER:object)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is in the inventory of the character&lt;br /&gt;
&lt;br /&gt;
ItemIsInTrigger(ITEM:item, TRIGGER:trigger)&lt;br /&gt;
&lt;br /&gt;
Check if item is in given trigger&lt;br /&gt;
&lt;br /&gt;
ItemGetStat(OUT FLOAT:statValue, ITEM:item, ITEMSTAT:statType)&lt;br /&gt;
&lt;br /&gt;
Returns the current value of the stat (Weight, ...)&lt;br /&gt;
&lt;br /&gt;
ItemIsMoving(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is moving or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsFalling(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is falling or not. (after teleport)&lt;br /&gt;
&lt;br /&gt;
ItemIsOpening(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is opening or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsClosing(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is closing or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsLocked(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is locked or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsMovable(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is movable or not.&lt;br /&gt;
&lt;br /&gt;
ItemCanBeLockPicked(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is can be opened by lockpicking.&lt;br /&gt;
&lt;br /&gt;
ItemIsOpen(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is open or not.&lt;br /&gt;
&lt;br /&gt;
IsStoryItem(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is a story item.&lt;br /&gt;
&lt;br /&gt;
ItemHasStatus(ITEM:item, STATUS:statusId)&lt;br /&gt;
&lt;br /&gt;
Returns if the item has the status.&lt;br /&gt;
&lt;br /&gt;
ItemIsDestroyed(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is destroyed.&lt;br /&gt;
&lt;br /&gt;
ItemGetTemplate(ITEM:item, OUT ITEMTEMPLATE:root)&lt;br /&gt;
&lt;br /&gt;
Returns the roottemplate of the item.&lt;br /&gt;
&lt;br /&gt;
ItemGetSkillId(ITEM:item, OUT SKILL:root)&lt;br /&gt;
&lt;br /&gt;
Returns the skillid of the item if it has one.&lt;br /&gt;
&lt;br /&gt;
ItemGetItemType(ITEM:item, OUT FIXEDSTRING:itemType)&lt;br /&gt;
&lt;br /&gt;
Returns the itemtype of the item: common, unique, rare, ...&lt;br /&gt;
&lt;br /&gt;
ItemGetStatusSourceCharacter(ITEM:item, STATUS:statusId, OUT CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get the source character of a status&lt;br /&gt;
&lt;br /&gt;
ItemGetStatusSourceItem(ITEM:item, STATUS:statusId, OUT ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Get the source item of a status&lt;br /&gt;
&lt;br /&gt;
ItemCanBeMoved(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item can be moved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EVENTS ==&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterEvent(CHARACTER:character, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterItemEvent(CHARACTER:character, ITEM:item, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterCharacterEvent(CHARACTER:character, CHARACTER:character, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
'''OnItemEvent(ITEM:item, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
'''OnItemDestroyed(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when an item is destroyed&lt;br /&gt;
&lt;br /&gt;
'''OnItemDestroying(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when an item is being destroyed&lt;br /&gt;
&lt;br /&gt;
'''OnItemOpened(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when an item is opened&lt;br /&gt;
&lt;br /&gt;
'''OnItemClosed(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when an item is closed&lt;br /&gt;
&lt;br /&gt;
'''OnItemDropped(ITEM:item, STRING:itemTemplate)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when an item is dropped&lt;br /&gt;
&lt;br /&gt;
'''OnGlobalFlagSet(FIXEDSTRING:eventName)'''&lt;br /&gt;
Thrown when a global event is set&lt;br /&gt;
&lt;br /&gt;
'''OnGlobalFlagCleared(FIXEDSTRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a global event is cleared&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterFlagSet(FIXEDSTRING:eventName, CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a dialog event is set on a character&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterFlagCleared(FIXEDSTRING:eventName, CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a dialog event is cleared on a character&lt;br /&gt;
&lt;br /&gt;
'''OnItemFlagSet(FIXEDSTRING:eventName, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a dialog event is set on an item&lt;br /&gt;
&lt;br /&gt;
'''OItemFlagCleared(FIXEDSTRING:eventName, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a dialog event is cleared on an item&lt;br /&gt;
&lt;br /&gt;
'''OnTimer(FIXEDSTRING:timerName)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a timer has ended&lt;br /&gt;
&lt;br /&gt;
'''OnInit(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the script is set&lt;br /&gt;
&lt;br /&gt;
'''OnLoaded(INT:major, INT:minor, INT:revision, INT:build)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the script is loaded from the savegame&lt;br /&gt;
&lt;br /&gt;
'''OnShutdown(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character's script is removed&lt;br /&gt;
&lt;br /&gt;
'''OnVariableCleared(FIXEDSTRING:varName)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when this object's script variable is cleared from Osiris with ClearVarObject&lt;br /&gt;
&lt;br /&gt;
'''OnCombatStarted(INT:combatID)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when combat starts&lt;br /&gt;
&lt;br /&gt;
'''OnCombatSwitched(CHARACTER:source, ITEM:source)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character switch from one combat to another&lt;br /&gt;
&lt;br /&gt;
'''OnLeftCombat(CHARACTER:source, ITEM:source)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character or item left the combat&lt;br /&gt;
&lt;br /&gt;
'''OnTurn(CHARACTER:source, ITEM:source)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character's turn starts&lt;br /&gt;
&lt;br /&gt;
'''OnTurnEnded(CHARACTER:source, ITEM:source)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character's turn ended&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterVitalityChanged(CHARACTER:character, FLOAT:percentage)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the characters's vitality changed&lt;br /&gt;
&lt;br /&gt;
'''OnItemVitalityChanged(ITEM:item, FLOAT:percentage)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the item's vitality changed&lt;br /&gt;
&lt;br /&gt;
'''OnAttackOfOpportunity(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the characters gets an attack of opportunity on an enemy&lt;br /&gt;
&lt;br /&gt;
'''OnClearAttackOfOpportunity(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the characters attack of opportunity is cleared&lt;br /&gt;
&lt;br /&gt;
'''OnDamage(DAMAGE:type, FLOAT:percentage, CHARACTER:source, ITEM:source)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the object receives damage&lt;br /&gt;
&lt;br /&gt;
'''OnMiss(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character dodges something&lt;br /&gt;
&lt;br /&gt;
'''OnCriticalHit(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character is critical hit&lt;br /&gt;
&lt;br /&gt;
'''OnPreBlock(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)'''&lt;br /&gt;
&lt;br /&gt;
Thrown before the character blocks something (at the start of the attack animation)&lt;br /&gt;
&lt;br /&gt;
'''OnBlock(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character blocks something&lt;br /&gt;
&lt;br /&gt;
'''OnDie(CHARACTER:character, DAMAGE:type, CHARACTER:source, ITEM:source)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character dies&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterStatusAttempt(CHARACTER:character, STATUS:status)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character attempts to gain a status&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterStatusApplied(CHARACTER:character, STATUS:status)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character gains a status&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterStatusRemoved(CHARACTER:character, STATUS:status)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character loses a status&lt;br /&gt;
&lt;br /&gt;
'''OnItemStatusAttempt(ITEM:item, STATUS:status)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the item attempts to gain a status&lt;br /&gt;
&lt;br /&gt;
'''OnItemStatus(ITEM:item, STATUS:status)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the item gains a status&lt;br /&gt;
&lt;br /&gt;
'''OnItemStatusRemoved(ITEM:item, STATUS:status)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the item loses a status&lt;br /&gt;
&lt;br /&gt;
'''OnStatusCreateVisuals(STATUS:status)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the item should create the visuals for this status&lt;br /&gt;
&lt;br /&gt;
'''OnStatusDestroyVisuals(STATUS:status)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the item should destroy the visuals for this status&lt;br /&gt;
&lt;br /&gt;
'''OnSight(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character sees another character&lt;br /&gt;
&lt;br /&gt;
'''OnLostSight(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character doesn't see another character anymore&lt;br /&gt;
&lt;br /&gt;
'''OnUseItem(CHARACTER:source, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character uses an item&lt;br /&gt;
&lt;br /&gt;
'''OnPickupItem(CHARACTER:source, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character picks up an item&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterPreMovedItem(CHARACTER:source, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Event thrown just before a character moves an item. No difference whether it is in the world or in their inventory&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterMovedItem(CHARACTER:source, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character moved an item&lt;br /&gt;
&lt;br /&gt;
'''OnItemEquipped(CHARACTER:source, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character equips an item&lt;br /&gt;
&lt;br /&gt;
'''OnItemUnequipped(CHARACTER:source, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character unequips an item&lt;br /&gt;
&lt;br /&gt;
'''OnIterateCharacter(CHARACTER:character, FIXEDSTRING:eventId)'''&lt;br /&gt;
&lt;br /&gt;
Thrown by iterators&lt;br /&gt;
&lt;br /&gt;
'''OnIterateItem(ITEM:source, FIXEDSTRING:eventId)'''&lt;br /&gt;
&lt;br /&gt;
Thrown by iterators&lt;br /&gt;
&lt;br /&gt;
'''OnIterateCount(FIXEDSTRING:eventId, INTEGER:Count)'''&lt;br /&gt;
&lt;br /&gt;
Thrown by iterators after all iterations to inform you of the count.&lt;br /&gt;
&lt;br /&gt;
'''OnStoryOverride(-)'''&lt;br /&gt;
&lt;br /&gt;
Throw when story overrides what the character was doing: teleport, movement, on/offstage&lt;br /&gt;
&lt;br /&gt;
'''OnTriggerEnter(CHARACTER:character, ITEM:item, FIXEDSTRING:eventId)'''&lt;br /&gt;
&lt;br /&gt;
Thrown by a character or item entering an EventTrigger&lt;br /&gt;
&lt;br /&gt;
'''OnTriggerLeave(CHARACTER:character, ITEM:item, FIXEDSTRING:eventId)'''&lt;br /&gt;
&lt;br /&gt;
Thrown by a character or item leaving an EventTrigger&lt;br /&gt;
&lt;br /&gt;
'''OnEnemyChanged(CHARACTER:character, CHARACTER:newEnemy)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character's currentenemy changes&lt;br /&gt;
&lt;br /&gt;
'''OnTalentUnlocked(CHARACTER:character, TALENT:newTalent)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character unlocks a new talent&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterClassChanged(CHARACTER:character, FIXEDSTRING:class)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character changes class in the character creation screen&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterCreationStarted(CHARACTER:character, TRIGGER:creationPoint)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character creation has started, and gives where the character should walk to&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterCreationStopped(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character creation has stopped&lt;br /&gt;
&lt;br /&gt;
'''OnFunction(FIXEDSTRING:functionName)'''&lt;br /&gt;
&lt;br /&gt;
Throws an event on itself with the functionName. This is to fake function calls &lt;br /&gt;
&lt;br /&gt;
'''OnSkillCast(CHARACTER:character, SKILL_ID:skillID)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character casts a skill&lt;br /&gt;
&lt;br /&gt;
'''OnSkillCombatComment(CHARACTER:character, SKILL_ID:skillID)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character needs to make a comment&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterUsedSkillOnMe(CHARACTER:character, SKILL_ID:skillID)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when you are hit by a skill from a character&lt;br /&gt;
&lt;br /&gt;
'''OnItemUnlocked(ITEM: item, CHARACTER:character, ITEM:key)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when an item gets unlocked by a character.&lt;br /&gt;
&lt;br /&gt;
'''OnAutomatedDialogEnded(STRING:dialogName, INT:instanceID)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a automated dialog is ended for this speaker&lt;br /&gt;
&lt;br /&gt;
'''OnAutomatedDialogStarted(STRING:dialogName, INT:instanceID)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a automated dialog is started for this speaker&lt;br /&gt;
&lt;br /&gt;
'''OnDialogEnded(STRING:dialogName, INT:instanceID)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a dialog is ended for this speaker&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeSensibleAction(FIXEDSTRING:regionID, INT:crimeID, FIXEDSTRING:reactionName, STRING:primaryDialog, CHARACTER:criminal1, CHARACTER:criminal2, CHARACTER:criminal3, CHARACTER:criminal4, INT:IsPrimary)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character needs to perform a sensible action against criminals&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeInterrogationRequest(FIXEDSTRING:regionID, INT:crimeID, CHARACTER:criminal1, CHARACTER:criminal2, CHARACTER:criminal3, CHARACTER:criminal4, STRING:interrogationDialog)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character needs to perform an interrogation against criminals&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeInvestigate(FLOAT3:CrimePosition, INT:crimeID)'''&lt;br /&gt;
&lt;br /&gt;
One NPC investigates a crimescene&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeAlarmed(FLOAT3:CrimePosition, INT:crimeID)'''&lt;br /&gt;
&lt;br /&gt;
All NPCs in a crimearea start looking around.&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeReturnToNormal(-)'''&lt;br /&gt;
&lt;br /&gt;
Investigation or Alarm timed out.&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeAborted(-)'''&lt;br /&gt;
&lt;br /&gt;
The game interrupted the sensible action of this NPC.&lt;br /&gt;
&lt;br /&gt;
'''OnSplineControlPointReached(INT:Index, INT:EndReached, STRING:EventString)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character reached a spline node.&lt;br /&gt;
&lt;br /&gt;
''''OnFinishCalculationAi(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the calculation of the AI is finished.&lt;br /&gt;
&lt;br /&gt;
'''OnGrenadeLand(INT:hitObstacle, CHARACTER:caster)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the grenades lands&lt;br /&gt;
&lt;br /&gt;
'''FetchCharacterApplyStatusData(CHARACTER:character, STATUS:status) RETURN(LIST&amp;lt;STATUS&amp;gt;:removeStatuses, STATUS:applyStatus, INT:turns)'''&lt;br /&gt;
&lt;br /&gt;
Fetch from script which statuses to remove and apply.&lt;br /&gt;
&lt;br /&gt;
'''FetchItemApplyStatusData(ITEM:item, STATUS:status) RETURN(LIST&amp;lt;STATUS&amp;gt;:removeStatuses, STATUS:applyStatus, INT:turns)'''&lt;br /&gt;
&lt;br /&gt;
Fetch from script which statuses to remove and apply.&lt;br /&gt;
&lt;br /&gt;
'''FetchItemSkillOnDamage(INT:damage, DAMAGE_TYPE:damageType) RETURN(INT:hasSkill, SKILL_ID:skillID, INT:casterLevel)'''&lt;br /&gt;
&lt;br /&gt;
Fetch from script what skill to execute on damage.&lt;br /&gt;
&lt;br /&gt;
'''OnActivate(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character/item activates&lt;br /&gt;
&lt;br /&gt;
'''OnDeactivate(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character/item deactivates&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterUsedSourcePoint(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character uses a source point&lt;br /&gt;
&lt;br /&gt;
'''OnSkillAdded(CHARACTER:character, SKILL_ID:skillId, INT:learned)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character learns a skill&lt;br /&gt;
&lt;br /&gt;
'''OnSkillActivated(CHARACTER:character, SKILL_ID:skillId)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character activates (=adds to memory) a skill&lt;br /&gt;
&lt;br /&gt;
'''OnSkillDeactivated(CHARACTER:character, SKILL_ID:skillId)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character deactivates (=removes from memory) a skill&lt;br /&gt;
&lt;br /&gt;
'''OnItemFlagShared(FIXEDSTRING:eventName, ITEM:item, INT:newValue)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a dialog event is shared with an item&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterFlagShared(FIXEDSTRING:eventName, CHARACTER:character, INT:newValue)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a dialog event is shared with a character&lt;br /&gt;
&lt;br /&gt;
'''OnItemOffStageChanged(CHARACTER:character, INT:offstage)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character is set on/off stage&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterOffStageChanged(ITEM:item, INT:offstage)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a item is set on/off stage&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterTeleported(CHARACTER:target, CHARACTER:cause, FLOAT3:oldPosition, FLOAT3:newPosition, SKILL_ID:skillId)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character gets teleported with a teleport skill&lt;br /&gt;
&lt;br /&gt;
'''OnCombatTick(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when this object ticks in combat. Only thrown for objects that don't get a turn.&lt;br /&gt;
&lt;br /&gt;
== INTERRUPTS ==&lt;br /&gt;
&lt;br /&gt;
'''OnMovementFailed(FLOAT3:targetPos)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted by a move action failing&lt;br /&gt;
&lt;br /&gt;
'''OnException(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted by an exception&lt;br /&gt;
&lt;br /&gt;
'''OnBetterReactionFound(FIXEDSTRING:reactionName)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted by another reaction&lt;br /&gt;
&lt;br /&gt;
'''OnNoReactionFound(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted because no reaction is valid&lt;br /&gt;
&lt;br /&gt;
'''OnScriptDisabled(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted because the scriptcontroller is disabled&lt;br /&gt;
&lt;br /&gt;
'''OnManualInterrupt(FIXEDSTRING:reactionName)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted using the interrupt action&lt;br /&gt;
&lt;br /&gt;
'''OnRegionSwap(FIXEDSTRING:oldLevel, FIXEDSTRING:newLevel)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted by a region swap&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Character_and_Item_Script_Triggers,_Calls,_and_Queries&amp;diff=5821</id>
		<title>Character and Item Script Triggers, Calls, and Queries</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Character_and_Item_Script_Triggers,_Calls,_and_Queries&amp;diff=5821"/>
		<updated>2018-03-02T11:23:34Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: /* EVENTS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of almost every character and item script event trigger, call, and query. An event is what triggers the script, and always begin with ''On''. Queries provide information and are always inside an ''IF'' or ''CHECK.'' Calls are actions that are always after THEN.&lt;br /&gt;
&lt;br /&gt;
CharScript/ItemScript Functions&lt;br /&gt;
&lt;br /&gt;
== CALLS ==&lt;br /&gt;
&lt;br /&gt;
'''Set(OUT OBJECT:variable, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Set the value of a variable&lt;br /&gt;
&lt;br /&gt;
'''SetVar(CHARACTER|ITEM:object, FIXEDSTRING:variableName, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Set the value of a global variable&lt;br /&gt;
&lt;br /&gt;
'''Cast(OUT OBJECT variable, OBJECT value)'''&lt;br /&gt;
&lt;br /&gt;
Casts the value to the variable&lt;br /&gt;
&lt;br /&gt;
'''Print(OUT STRING:output, STRING:text)'''&lt;br /&gt;
&lt;br /&gt;
Prints the text to the output with possible parameters: [1], [2], ...&lt;br /&gt;
&lt;br /&gt;
'''Add(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT|FLOAT3:value)'''&lt;br /&gt;
&lt;br /&gt;
Adds both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Subtract(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT|FLOAT3:value)'''&lt;br /&gt;
&lt;br /&gt;
Subtracts both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Multiply(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT:value)'''&lt;br /&gt;
&lt;br /&gt;
Multiplies both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Divide(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT:value)'''&lt;br /&gt;
&lt;br /&gt;
Divides both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Abs(INOUT INT|FLOAT:variable)'''&lt;br /&gt;
&lt;br /&gt;
Takes the absolute value of a variable&lt;br /&gt;
&lt;br /&gt;
'''Clamp(INOUT INT|FLOAT:variable, INT|FLOAT:min, INT|FLOAT:max)'''&lt;br /&gt;
&lt;br /&gt;
Clamps a variable between min and max&lt;br /&gt;
&lt;br /&gt;
'''GetRandom(OUT OBJECT:variable, OBJECT:value, OBJECT:value, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Fills in the variable with random one of the values.&lt;br /&gt;
&lt;br /&gt;
'''GetWeightedRandom(OUT OBJECT:variable, OBJECT:value, INT|FLOAT:weight, ...)'''&lt;br /&gt;
&lt;br /&gt;
Gets a weighted random of the given values!&lt;br /&gt;
&lt;br /&gt;
'''GetRandomBetween(OUT INT|FLOAT:variable, INT|FLOAT:min, INT|FLOAT:max)'''&lt;br /&gt;
&lt;br /&gt;
Gets a random value between min and max (both included)&lt;br /&gt;
&lt;br /&gt;
'''GetRandomPositionInTrigger(OUT FLOAT3:variable, TRIGGER:areaTrigger)'''&lt;br /&gt;
&lt;br /&gt;
Get a random position in a trigger area&lt;br /&gt;
&lt;br /&gt;
'''GetElement(OUT OBJECT:variable, INT:index, OBJECT:value, OBJECT:value, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Fills in the variable with the index one of the values (starting from 0)&lt;br /&gt;
&lt;br /&gt;
'''SetPriority(FIXEDSTRING:reactionName, INT:priority)'''&lt;br /&gt;
&lt;br /&gt;
Changes the priority of a reaction. Priority 0 and below are not executed!&lt;br /&gt;
&lt;br /&gt;
'''DelayReaction(FIXEDSTRING:reactionName, FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
The reaction will not be chosen for the specified time&lt;br /&gt;
&lt;br /&gt;
'''SetScriptFrame(CHARACTER:character, FIXEDSTRING:frame)'''&lt;br /&gt;
&lt;br /&gt;
Sets the scriptframe on the character.&lt;br /&gt;
&lt;br /&gt;
'''ClearScriptFrame(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Clears the scriptframe on the character.&lt;br /&gt;
&lt;br /&gt;
'''Goto(FIXEDSTRING:labelName)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to the label. Two label names are built-in: &amp;quot;Start&amp;quot; for the first instruction of the reaction, and &amp;quot;End&amp;quot; for the last one.&lt;br /&gt;
&lt;br /&gt;
'''GotoIfEqual(OBJECT:variable, OBJECT:value, FIXEDSTRING:labelName)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to the label if the 2 objects are equal&lt;br /&gt;
&lt;br /&gt;
'''GotoRand(FIXEDSTRING:labelName, FIXEDSTRING:labelName, FIXEDSTRING:labelName, FIXEDSTRING:labelName, FIXEDSTRING:labelName)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to a random label in the list&lt;br /&gt;
&lt;br /&gt;
'''CreatePuddleAt(GAMEOBJECT|FLOAT3:target, SURFACE:type, INT:cellAmountMin, INT:cellAmountMax, INT:growAmountMin, INT:growAmountMax, )'''&lt;br /&gt;
&lt;br /&gt;
Spawn a puddle at the target's position for a certain lifetime (in turns)&lt;br /&gt;
&lt;br /&gt;
'''CreateSurfaceAt(GAMEOBJECT|FLOAT3:target, SURFACE:type, FLOAT:radius, INT:lifeTime[, GAMEOBJECT:owner])'''&lt;br /&gt;
&lt;br /&gt;
Spawn a surface at the target's position for a certain lifetime (in turns)&lt;br /&gt;
&lt;br /&gt;
'''CreateSurfaceInPolygon(GAMEOBJECT:owner, SURFACE:type, FLOAT:duration, FLOAT:growTimer, INT:growStep, GAMEOBJECT|FLOAT3:point1, GAMEOBJECT|FLOAT3:point2, GAMEOBJECT|FLOAT3:point3, ...)'''&lt;br /&gt;
&lt;br /&gt;
Spawn a polygon surface at the target's position. Grows &amp;lt;growStep&amp;gt; every &amp;lt;growTimer&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CreateSurfaceInAreaTrigger(GAMEOBJECT:owner, SURFACE:type, FLOAT:duration, FLOAT:growTimer, INT:growStep, TRIGGER:areaTrigger)'''&lt;br /&gt;
&lt;br /&gt;
Spawn a surface within &amp;lt;areaTrigger&amp;gt;. Grows &amp;lt;growStep&amp;gt; every &amp;lt;growTimer&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CreateConeSurfaceAt(GAMEOBJECT|FLOAT3:start, GAMEOBJECT|FLOAT3:target, SURFACE:type, FLOAT:radius, FLOAT:angle, FLOAT:duration)'''&lt;br /&gt;
&lt;br /&gt;
Spawn a Cone surface at the target's position&lt;br /&gt;
&lt;br /&gt;
'''PlayEffectAt(GAMEOBJECT|FLOAT3:target, STRING:effectName)'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect at the target's position&lt;br /&gt;
&lt;br /&gt;
'''PlayLoopEffectAt(OUT INT64:effectHandle, GAMEOBJECT|FLOAT3:target, STRING:effectName)'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect at the target's position&lt;br /&gt;
&lt;br /&gt;
'''ExplodeAt(GAMEOBJECT|FLOAT3:target, SKILL:projectileSkill, [INT:casterLevel=-1, CHARACTER|ITEM:cause])'''&lt;br /&gt;
&lt;br /&gt;
Trigger an explosion of a projectile skill at the target's position. The cause will trigger NPC behavior as if the cause casted the projectile&lt;br /&gt;
&lt;br /&gt;
'''DisplayText(CHARACTER|ITEM:target, FIXEDSTRING:text, FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
Displays text above the character/item for a certain amount of time. It will replace the current text, including dialogtext&lt;br /&gt;
&lt;br /&gt;
'''DisplayCombatInfoText(CHARACTER|ITEM:target, FIXEDSTRING:text, FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
Displays text above the character/item for a certain amount of time. It will replace the current text, including dialogtext&lt;br /&gt;
&lt;br /&gt;
'''StatusText(CHARACTER|ITEM:target, FIXEDSTRING:text)'''&lt;br /&gt;
&lt;br /&gt;
Adds statustext above the character/item for a short amount of time. Will not replace texts or dialogtexts&lt;br /&gt;
&lt;br /&gt;
'''DebugText(CHARACTER|ITEM:target, STRING:text)'''&lt;br /&gt;
&lt;br /&gt;
Adds debugtext above the character/item for a short amount of time.&lt;br /&gt;
&lt;br /&gt;
'''CombatLogText(CHARACTER|ITEM:target, FIXEDSTRING:text, INT:filterID, INT:broadcastID)'''&lt;br /&gt;
&lt;br /&gt;
Adds combatlog text inside the combat log window. Color-/SizeFormatting should already be applied, if not color and size of the string will be NORMAL. filterID determines what filter shows/hides the text. broadcastID determines who will be able to see the message (0 hearingrange. 1 party. 2 all)&lt;br /&gt;
&lt;br /&gt;
'''Log(STRING:text, ...)'''&lt;br /&gt;
&lt;br /&gt;
Log's the the scriptlog. (for debugging purposes)&lt;br /&gt;
&lt;br /&gt;
'''Output(STRING:text, ...)'''&lt;br /&gt;
&lt;br /&gt;
Pass text with optional parameters to the output panel (e.g. Output(&amp;quot;An int [1]&amp;quot;, INT:10))&lt;br /&gt;
&lt;br /&gt;
'''Assert(STRING:text, ...)'''&lt;br /&gt;
&lt;br /&gt;
Pass text with optional parameters to display as an assert message (e.g. Assert(&amp;quot;This number is wrong: [1]&amp;quot;, INT:666))&lt;br /&gt;
&lt;br /&gt;
'''Label(FIXEDSTRING:name)'''&lt;br /&gt;
&lt;br /&gt;
Marks this line as a label where Goto actions can jump to&lt;br /&gt;
&lt;br /&gt;
'''StartTimer(FIXEDSTRING:timerName, FLOAT:timeInSeconds, INT:repeatCount)'''&lt;br /&gt;
&lt;br /&gt;
Start a timer which will throw the timer event. Set repeatcount &amp;lt; 0 for a permanent timer.&lt;br /&gt;
&lt;br /&gt;
'''StopTimer(FIXEDSTRING:timerName)'''&lt;br /&gt;
&lt;br /&gt;
Stop a timer which will throw the timer event&lt;br /&gt;
&lt;br /&gt;
'''DialogStart(OUT INT:instanceId, STRING:dialog, CHARACTER|ITEM:target, CHARACTER|ITEM:target, CHARACTER|ITEM:target, CHARACTER|ITEM:target)'''&lt;br /&gt;
&lt;br /&gt;
Start a dialog between the targets. You can specify fewer targets than the maximum number.&lt;br /&gt;
&lt;br /&gt;
{{warning|Starting a dialog from behaviour script will always start it as an [[Dialog_editor#Automated|Automated Dialog]]. Interactive dialogs can only be started from [[Osiris]].}}&lt;br /&gt;
&lt;br /&gt;
'''DialogRequestStop(CHARACTER|ITEM:speaker, STRING:dialog)'''&lt;br /&gt;
&lt;br /&gt;
Stops a certain dialog on a certain speaker&lt;br /&gt;
&lt;br /&gt;
'''Check(-)'''&lt;br /&gt;
&lt;br /&gt;
Reevaluate the conditions in the CHECK section of this reaction&lt;br /&gt;
&lt;br /&gt;
'''Reset(-)'''&lt;br /&gt;
&lt;br /&gt;
Resets the current reaction. It will start from the beginning again&lt;br /&gt;
&lt;br /&gt;
'''Interrupt(FIXEDSTRING:reactionName)'''&lt;br /&gt;
&lt;br /&gt;
Interrupt the reaction.&lt;br /&gt;
&lt;br /&gt;
'''GlobalSetEvent(FIXEDSTRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Sets a global event. Scripts and Story can catch it.&lt;br /&gt;
&lt;br /&gt;
'''GlobalClearEvent(FIXEDSTRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Clears a global event. Scripts and Story can catch it.&lt;br /&gt;
&lt;br /&gt;
'''StopLoopEffect(INT64:fxHandle)'''&lt;br /&gt;
&lt;br /&gt;
Stops a looping effect&lt;br /&gt;
&lt;br /&gt;
'''IterateItems(FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each item. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateItemsNear(GAMEOBJECT:source, FLOAT:radius, FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each item in range. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateItemsOnObject(CHARACTER|ITEM:source, FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each item standing on the source. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateParty(FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, CHARACTER:partyMember, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each member of all parties. If you pass a party member only members of that party will be considered. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharacters(FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharactersNear(GAMEOBJECT:source, FLOAT:radius, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character in range. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharactersOnObject(CHARACTER|ITEM:source, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
Launch iterate event for each character standing on the source. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharactersInCombat(CHARACTER|ITEM:source, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character in combat with the source. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateHostilesFor(CHARACTER:source, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character who is targetting the source. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''SpawnCharacter(OUT CHARACTER:result, CHARACTERTEMPLATE:rootTemplate, GAMEOBJECT|FLOAT3:position, INT:playSpawn, [INT:isSummon=0, CHARACTER:summonOwner=null, INT:overrideLevel=-1])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a character&lt;br /&gt;
&lt;br /&gt;
'''SpawnItem(ITEMTEMPLATE:rootTemplate,GAMEOBJECT|FLOAT3:position, OUT ITEM:result)'''&lt;br /&gt;
&lt;br /&gt;
Spawns an item&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalProjectile(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,FLOAT3:direction,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at the source (with offset, can be null) shooting at the target&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalProjectileAt(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,GAMEOBJECT|FLOAT3:target,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at the source (with offset, can be null) shooting at the target&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldProjectile(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,FLOAT3:direction,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at worldPos shooting at the target. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldProjectileAt(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,GAMEOBJECT|FLOAT3:target,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at worldPos shooting at the target. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalCone(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,FLOAT3:direction,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from source (with offset, can be null) in a direction&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalConeAt(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,GAMEOBJECT|FLOAT3:target,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from source (with offset, can be null) at the target&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldCone(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,FLOAT3:direction,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from worldPos in a direction. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldConeAt(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,GAMEOBJECT|FLOAT3:target,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from worldPos at the target. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''SetVisible(CHARACTER|ITEM:object, INT:visible)'''&lt;br /&gt;
&lt;br /&gt;
Sets a character or item visible or not.&lt;br /&gt;
&lt;br /&gt;
'''RotateY(INOUT FLOAT3:vector, FLOAT:degrees)'''&lt;br /&gt;
&lt;br /&gt;
Rotate the vector around the Y-axis for a certain angle (in degrees)&lt;br /&gt;
&lt;br /&gt;
'''SetHealth(CHARACTER|ITEM:target, FLOAT:percent)'''&lt;br /&gt;
&lt;br /&gt;
Set a characters or items health on the given percentage. (percentage between 0 and 1)&lt;br /&gt;
&lt;br /&gt;
'''PlaySound(CHARACTER|ITEM:target, STRING:soundEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a sound event at the target&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicForEveryone(STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on all the clients&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicOnCharacter(CHARACTER:target, STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on a character for all peers (3D)&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicForPeer(CHARACTER:target, STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on the peer of the character&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicForPeerWithInstrument(CHARACTER:target, CHARACTER:charInstrument, STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on the peer of the character concated with _INSTRUMENT&lt;br /&gt;
&lt;br /&gt;
'''SetX(INOUT FLOAT3:vector, FLOAT|INT:value)'''&lt;br /&gt;
&lt;br /&gt;
Sets the X component of the FLOAT3&lt;br /&gt;
&lt;br /&gt;
'''SetY(INOUT FLOAT3:vector, FLOAT|INT:value)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Y component of the FLOAT3&lt;br /&gt;
&lt;br /&gt;
'''SetZ(INOUT FLOAT3:vector, FLOAT|INT:value)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Z component of the FLOAT3&lt;br /&gt;
&lt;br /&gt;
'''SetAtmosphere(FIXEDSTRING:atmosphereTriggerUUID, FIXEDSTRING:atmosphere)'''&lt;br /&gt;
&lt;br /&gt;
Changes the atmosphere of the trigger&lt;br /&gt;
&lt;br /&gt;
'''ResetAtmosphere(FIXEDSTRING:atmosphereTriggerUUID)'''&lt;br /&gt;
&lt;br /&gt;
Resets the atmosphere of the trigger&lt;br /&gt;
&lt;br /&gt;
'''AddStatusInfluence(CHARACTER|ITEM:object, STATUS:statusId, FLOAT:strength, [FIXEDSTRING:extraData=&amp;quot;&amp;quot;], [INT:isWeather=1], [INT:force=1])'''&lt;br /&gt;
&lt;br /&gt;
Adds the status influence strength on the object.&lt;br /&gt;
&lt;br /&gt;
'''RemoveStatusInfluence(CHARACTER|ITEM:object, STATUS:statusId, FLOAT:strength, [FIXEDSTRING:extraData=&amp;quot;&amp;quot;], [INT:isWeather=1])'''&lt;br /&gt;
&lt;br /&gt;
Removes the status influence strength on the object.&lt;br /&gt;
&lt;br /&gt;
'''AddTemporaryStatusInfluence(CHARACTER|ITEM:source, CHARACTER|ITEM:object, STATUS:statusId, FLOAT:strength, [FIXEDSTRING:extraData=&amp;quot;&amp;quot;], [INT:isWeather=1])'''&lt;br /&gt;
&lt;br /&gt;
Adds a temporary status influence strength on the object.. It will be gone in a few seconds if it's not set again&lt;br /&gt;
&lt;br /&gt;
'''CallFunction(FIXEDSTRING:functionName)'''&lt;br /&gt;
&lt;br /&gt;
Calls a function with the ID&lt;br /&gt;
&lt;br /&gt;
'''SetMaterial(CHARACTER|ITEM:object, FIXEDSTRING:materialUUID, INT:duration, INT:applyOnBody, INT:applyOnArmor, INT:applyOnWeapon[)'''&lt;br /&gt;
&lt;br /&gt;
Changes the material of the object for a set time (in turns), -1 is infinite. applyNormalMap: Copy the original materials normal map&lt;br /&gt;
&lt;br /&gt;
'''TeleportTo(CHARACTER|ITEM:object, GAMEOBJECT|FLOAT3:target, [INT:Force=0])'''&lt;br /&gt;
&lt;br /&gt;
Teleport object to or near the target&lt;br /&gt;
&lt;br /&gt;
'''Transform(CHARACTER|ITEM:object, CHARACTERTEMPLATE|ITEMTEMPLATE:root [, FIXEDSTRING:fx, INT:replaceScripts=1, OUT FLOAT:currentHP])'''&lt;br /&gt;
&lt;br /&gt;
Transforms &amp;lt;object&amp;gt; using &amp;lt;root&amp;gt;, returns &amp;lt;currentHP&amp;gt;, plays &amp;lt;fx&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''SaveGame(FIXEDSTRING:saveGameName)'''&lt;br /&gt;
&lt;br /&gt;
Save the savegame with name &amp;lt;saveGameName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LoadGame(FIXEDSTRING:saveGameName)'''&lt;br /&gt;
&lt;br /&gt;
Load the savegame with name &amp;lt;saveGameName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LoadLevel(FIXEDSTRING:levelName)'''&lt;br /&gt;
&lt;br /&gt;
Load the level with name &amp;lt;levelName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''KillCombat(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Kill all the enemies in the combat which contains &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SetTag(CHARACTER|ITEM:object, FIXEDSTRING:tag)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Tag on the Object&lt;br /&gt;
&lt;br /&gt;
'''ClearTag(CHARACTER|ITEM:object, FIXEDSTRING:tag)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Tag on the Object&lt;br /&gt;
&lt;br /&gt;
'''SetGlobalFlag(FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Global Flag&lt;br /&gt;
&lt;br /&gt;
'''ClearGlobalFlag(FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Global Flag&lt;br /&gt;
&lt;br /&gt;
'''SetFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Flag on the Object&lt;br /&gt;
&lt;br /&gt;
'''ClearFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Flag on the Object&lt;br /&gt;
&lt;br /&gt;
'''SetUserFlag(CHARACTER:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Flag on the user's characters&lt;br /&gt;
&lt;br /&gt;
'''ClearUserFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Flag on the user's characters&lt;br /&gt;
&lt;br /&gt;
'''SetPartyFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Flag on the party's characters&lt;br /&gt;
&lt;br /&gt;
'''ClearPartyFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Flag on the party's characters&lt;br /&gt;
&lt;br /&gt;
'''StartVoiceBark(STRING:barkName, CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Start a voicebark on character&lt;br /&gt;
&lt;br /&gt;
'''ConfrontationDone(INT: CrimeID, CHARACTER:lead, CHARACTER:criminal, ...)'''&lt;br /&gt;
&lt;br /&gt;
Resolve the crime with id CrimeID for the specified criminals&lt;br /&gt;
&lt;br /&gt;
'''CrimesceneInvestigationDone(CHARACTER:investigator)'''&lt;br /&gt;
&lt;br /&gt;
Crimescene is considered investigated by this NPC, start looking for culprits&lt;br /&gt;
&lt;br /&gt;
'''ListAdd(LIST&amp;lt;OBJECT&amp;gt;:list, OBJECT:entry)'''&lt;br /&gt;
&lt;br /&gt;
Add &amp;lt;entry&amp;gt; at the back of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ListRemove(LIST&amp;lt;OBJECT&amp;gt;:list, INT:index)'''&lt;br /&gt;
&lt;br /&gt;
Remove the entry at &amp;lt;index&amp;gt; of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ListSet(LIST&amp;lt;OBJECT&amp;gt;:list, INT:index, OBJECT:entry)'''&lt;br /&gt;
&lt;br /&gt;
Set the entry at &amp;lt;index&amp;gt; of &amp;lt;list&amp;gt; to &amp;lt;entry&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ListClear(LIST&amp;lt;OBJECT&amp;gt;:list)'''&lt;br /&gt;
&lt;br /&gt;
Remove all entries of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''EndTurn(CHARACTER|ITEM:Target)'''&lt;br /&gt;
&lt;br /&gt;
Ends the object's current turn&lt;br /&gt;
&lt;br /&gt;
'''SetCanFight(CHARACTER|ITEM:entity, INT:enabled[, INT:wholeGroup=0])'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the entity can fight. Optional for the whole group&lt;br /&gt;
&lt;br /&gt;
'''SetCanJoinCombat(CHARACTER|ITEM:entity, INT:enabled[, INT:wholeGroup=0])'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the entity can join combats. Optional for the whole group&lt;br /&gt;
&lt;br /&gt;
'''SetIsBoss(CHARACTER|ITEM:entity, INT:enabled)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the entity is a boss.&lt;br /&gt;
&lt;br /&gt;
'''GetAIHintTriggers(OUT LIST&amp;lt;TRIGGER&amp;gt;:triggers[, [LIST]FIXEDSTRING:tags, INT:needsAllTags = -1)'''&lt;br /&gt;
&lt;br /&gt;
Returns all AIHintAreaTriggers in &amp;lt;triggers&amp;gt;. Uses contraints if set.&lt;br /&gt;
&lt;br /&gt;
'''SetCombatTimeout(CHARACTER|ITEM:entity, FLOAT:timer)'''&lt;br /&gt;
&lt;br /&gt;
Overwrites the entity's combat timeout check.&lt;br /&gt;
&lt;br /&gt;
'''ResetCombatTimeout(CHARACTER|ITEM:entity)'''&lt;br /&gt;
&lt;br /&gt;
Resets the entity's combat timeout check.&lt;br /&gt;
&lt;br /&gt;
'''EnterCombat(CHARACTER|ITEM:source, CHARACTER|ITEM:target)'''&lt;br /&gt;
&lt;br /&gt;
Enters combat with target&lt;br /&gt;
&lt;br /&gt;
'''LeaveCombat(CHARACTER|ITEM:source)'''&lt;br /&gt;
&lt;br /&gt;
Leaves the combat&lt;br /&gt;
&lt;br /&gt;
'''SetFaction(CHARACTER|ITEM:target, FIXEDSTRING:faction)'''&lt;br /&gt;
&lt;br /&gt;
Changes the faction of a character or item&lt;br /&gt;
&lt;br /&gt;
'''SetInvulnerable(CHARACTER|ITEM:target, INT:bool)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character or item invulnerable or not. (Allow damage)&lt;br /&gt;
&lt;br /&gt;
'''JumpToTurn(CHARACTER|ITEM:Target)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to targets turn (ends the current turn)&lt;br /&gt;
&lt;br /&gt;
'''Sleep(FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
Sleeps for a certain amount of time&lt;br /&gt;
&lt;br /&gt;
'''CharacterAttack(CHARACTER|ITEM|FLOAT3:target [,INT:alwaysHit])'''&lt;br /&gt;
&lt;br /&gt;
Moves in weapon range and attacks the target&lt;br /&gt;
&lt;br /&gt;
'''CharacterAttackWithoutMove(CHARACTER|ITEM|FLOAT3:target [,INT:alwaysHit])'''&lt;br /&gt;
&lt;br /&gt;
Attacks the target without checking weaponranges and without moving&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveTo(GAMEOBJECT|FLOAT3:target, [INT:running=0, INT:shouldArrive=0, INT:longPath=0, FLOAT:minDistance=1.5, FLOAT:maxDistance=minDistance+2.5])'''&lt;br /&gt;
&lt;br /&gt;
Move to the target. Set shouldArrive to 1 if you want a guaranteed move. (teleports on fail) &lt;br /&gt;
&lt;br /&gt;
'''CharacterAiMove(FLOAT3:target, CHARACTER:targetCharacter, ITEM:targetItem)'''&lt;br /&gt;
&lt;br /&gt;
Moves to the target, calculated by the AI. Should only be used with results from the AI!&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveInRange(GAMEOBJECT|FLOAT3:target, FLOAT:rangeMin, FLOAT:rangeMax, INT:running, [LIST&amp;lt;TRIGGER&amp;gt;:hintTriggers=null, INT:mustBeInTrigger=0])'''&lt;br /&gt;
&lt;br /&gt;
Move within a certain range of target. Optionally pass hinttriggers in which the result is preferred/necessary.&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveInWeaponRange(GAMEOBJECT|FLOAT3:target, INT:running, [LIST&amp;lt;TRIGGER&amp;gt;:hintTriggers=null, INT:mustBeInTrigger=0])'''&lt;br /&gt;
&lt;br /&gt;
Move within weapon range of target. Optionally pass hinttriggers in which the result is preferred/necessary.&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveInSkillRange(GAMEOBJECT|FLOAT3:target, SKILL:skill, INT:running, [LIST&amp;lt;TRIGGER&amp;gt;:hintTriggers=null, INT:mustBeInTrigger=0])'''&lt;br /&gt;
&lt;br /&gt;
Move within skill range of target. Optionally pass hinttriggers in which the result is preferred/necessary.&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveOutOfSight(FLOAT:angle)'''&lt;br /&gt;
&lt;br /&gt;
Move out of screen&lt;br /&gt;
&lt;br /&gt;
'''CharacterPlayAnimation(FIXEDSTRING:animation [, INT:exitOnFinish=1, INT:waitForCompletion=1])'''&lt;br /&gt;
&lt;br /&gt;
Plays a certain animation ExitOnFinish means if the exit will kill itself after it was played (revert back to still) &lt;br /&gt;
&lt;br /&gt;
'''CharacterStopAnimation(-)'''&lt;br /&gt;
&lt;br /&gt;
Stops all animations.&lt;br /&gt;
&lt;br /&gt;
'''CharacterPickUpItem(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Moves close enough to the item if necessary and picks it up&lt;br /&gt;
&lt;br /&gt;
'''CharacterUseItem(ITEM:item [, INTEGER:LongPath])'''&lt;br /&gt;
&lt;br /&gt;
Moves close enough to the item if necessary and uses it&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveItem(ITEM:item, INTEGER:ignoreWeight, INTEGER:ignoreAPCost [, INTEGER:ignoreDangerousSurfaces=1, INT:amount=-1, GAMEOBJECT|FLOAT3:destination])'''&lt;br /&gt;
&lt;br /&gt;
Moves close enough to the item if necessary and moves it to the destination. Will try to find a destination if not supplied.&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddSkill(CHARACTER:character, SKILL:skill[, INT:ShowNotification=0])'''&lt;br /&gt;
&lt;br /&gt;
Adds &amp;lt;skill&amp;gt; to &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveSkill(CHARACTER:character, SKILL:skill)'''&lt;br /&gt;
&lt;br /&gt;
Removes &amp;lt;skill&amp;gt; from &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterUseSkill(SKILL:skill, GAMEOBJECT|FLOAT3:target [, GAMEOBJECT|FLOAT3:target2, ITEM:skillItem, INT:ignoreHasSkill=0])'''&lt;br /&gt;
&lt;br /&gt;
Cast a skill&lt;br /&gt;
&lt;br /&gt;
'''CharacterAppearAt(GAMEOBJECT|FLOAT3:target, INT:playspawn)'''&lt;br /&gt;
&lt;br /&gt;
Appear at the target&lt;br /&gt;
&lt;br /&gt;
'''CharacterAppearOutOfSightTo(GAMEOBJECT:target, FLOAT:angle, INT:playspawn)'''&lt;br /&gt;
&lt;br /&gt;
Appears out of sight to the players from a certain angle while being able to reach target&lt;br /&gt;
&lt;br /&gt;
'''CharacterAppearOnTrailOutOfSightTo(CHARACTER:target, FLOAT:angle, INT:playspawn)'''&lt;br /&gt;
&lt;br /&gt;
Appears out of sight to the players, on its previous locations, from a certain angle while being able to reach target&lt;br /&gt;
&lt;br /&gt;
'''CharacterDisappear(FLOAT:angle[, INTEGER:isRunning=0])'''&lt;br /&gt;
&lt;br /&gt;
Move out of screen and go of stage, will run if &amp;lt;isRunning&amp;gt; is not 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetOffStage(-)'''&lt;br /&gt;
&lt;br /&gt;
Set Off Stage&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetOnStage(-)'''&lt;br /&gt;
&lt;br /&gt;
Set On Stage&lt;br /&gt;
&lt;br /&gt;
'''CharacterLookAt(GAMEOBJECT|FLOAT3|SPLINE:target[, INT:snapToTarget=0, INT:angleTolerance=0])'''&lt;br /&gt;
&lt;br /&gt;
Rotates the character to look at the target (Closest spline point in case of a spline).&lt;br /&gt;
&lt;br /&gt;
'''CharacterLookFrom(GAMEOBJECT|SPLINE:target[, INT:snapToTarget=0])'''&lt;br /&gt;
&lt;br /&gt;
Rotates to the character so it has the same rotation as the target (Closest spline point in case of a spline).&lt;br /&gt;
&lt;br /&gt;
'''CharacterFollow(CHARACTER:target, FLOAT:durationInSeconds, INT:run)'''&lt;br /&gt;
&lt;br /&gt;
Follow the target for a certain time&lt;br /&gt;
&lt;br /&gt;
'''CharacterFollowOwnerOrLeader(FLOAT:durationInSeconds, INT:run)'''&lt;br /&gt;
&lt;br /&gt;
Follow the leader or owner for a certain time&lt;br /&gt;
&lt;br /&gt;
'''CharacterWander(FLOAT|TRIGGER:range, FLOAT:durationInSeconds [, INT:run, GAMEOBJECT:anchor])'''&lt;br /&gt;
&lt;br /&gt;
Wander around for a certain time&lt;br /&gt;
&lt;br /&gt;
'''CharacterSwitchWeaponType(WEAPON:type)'''&lt;br /&gt;
&lt;br /&gt;
If necessary switch to the new weapon type&lt;br /&gt;
&lt;br /&gt;
'''CharacterFleeFrom(RELATION:relation, FLOAT:range)'''&lt;br /&gt;
&lt;br /&gt;
Run away from certain characters if necessary&lt;br /&gt;
'''&lt;br /&gt;
CharacterFleeFromSurface(SURFACE:surface)'''&lt;br /&gt;
&lt;br /&gt;
Run away from a certain surface if necessary&lt;br /&gt;
&lt;br /&gt;
'''CharacterFleeFromDangerousSurface(-)'''&lt;br /&gt;
&lt;br /&gt;
Run away from a dangerous surfaces if necessary&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddSourcePoints(CHARACTER:character, INT:amount)'''&lt;br /&gt;
&lt;br /&gt;
Adds x source points (x can be negative to substract)&lt;br /&gt;
&lt;br /&gt;
'''CharacterDie(CHARACTER:character[, DEATH:type=DoT])'''&lt;br /&gt;
&lt;br /&gt;
Kills the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterHeal(CHARACTER:character, FLOAT:percentage)'''&lt;br /&gt;
&lt;br /&gt;
Heals the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterConsume(CHARACTER:character, POTION:potion)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character consume a potion. Doesn't cost any AP and will just execute the result of the potion.&lt;br /&gt;
&lt;br /&gt;
'''CharacterDisableAllCrimes(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Disables all generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterEnableAllCrimes(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Enables all generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
'''&lt;br /&gt;
CharacterEnableCrime(CHARACTER:target, STRING:crime, ...)'''&lt;br /&gt;
&lt;br /&gt;
Enables the specified generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterDisableCrime(CHARACTER:target, STRING:crime, ...)'''&lt;br /&gt;
&lt;br /&gt;
Disables the specified generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetLongInvestigationDuration(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Doubles the time it takes for the investigation to time out. Use this when the character needs to move a long path before investigating.&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiCalculate(-)'''&lt;br /&gt;
&lt;br /&gt;
Calculate the AI of the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiStopCalculate(-)'''&lt;br /&gt;
&lt;br /&gt;
Stop the calculation of the AI of the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiFinishMoveSkill(-)'''&lt;br /&gt;
&lt;br /&gt;
Finish the current MoveSkill.&lt;br /&gt;
'''&lt;br /&gt;
CharacterAiAddInterestingItem(CHARACTER:character, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Make it interesting for the AI to destroy that Item&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiRemoveInterestingItem(CHARACTER:character, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Make it no longer interesting for the AI to destroy that Item&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetArchetype(CHARACTER:character, ARCHETYPE:archetype)'''&lt;br /&gt;
&lt;br /&gt;
Sets the archetype of the character, used in AI calculations&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetStoryNPC(CHARACTER:character, INT:bool)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character storyNPC or not.&lt;br /&gt;
'''&lt;br /&gt;
CharacterAddActionPoints(CHARACTER:character, INT:amount)'''&lt;br /&gt;
&lt;br /&gt;
Give character some action points&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetImmortal(CHARACTER:character, INT:bool)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character immortal or not. (Allow dying)&lt;br /&gt;
&lt;br /&gt;
'''CharacterPlayEffect(CHARACTER:character, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect on the character and it follows the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterPlayLoopEffect(OUT INT64:effectHandle, CHARACTER:character, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays a looping effect on the character and it follows the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterEvent(CHARACTER:character, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw a character event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''CharacterItemEvent(CHARACTER:character, ITEM:item, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw a character/item event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''CharacterCharacterEvent(CHARACTER:character1, CHARACTER:character2, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw a character/character event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetRelationIndivToIndiv(CHARACTER:source, CHARACTER:target, INT:relation)'''&lt;br /&gt;
&lt;br /&gt;
Changes the relationship between 2 characters.&lt;br /&gt;
'''&lt;br /&gt;
CharacterForceUpdate(INT:forceUpdate)'''&lt;br /&gt;
&lt;br /&gt;
Makes sure the attached character is always being update or not. &lt;br /&gt;
'''&lt;br /&gt;
CharacterSetEnemy(CHARACTER:character, CHARACTER:enemy)'''&lt;br /&gt;
&lt;br /&gt;
Sets the current enemy of character&lt;br /&gt;
&lt;br /&gt;
'''CharacterApplyStatus(CHARACTER:character, STATUS:statusId [, INT:turns=null, INT:force=0])'''&lt;br /&gt;
&lt;br /&gt;
Applies the status to the character When turns is -1 it's a permanent status When turns is -2 it's a keep alive status (which means it will die if it's not applied again within 1 second) &lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveStatus(CHARACTER:character, STATUS:statusId [, STATUS:reasonStatusID=null])'''&lt;br /&gt;
&lt;br /&gt;
Removes the status from the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterDestroy(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Destroys the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetCanSpotSneakers(CHARACTER:character, INT:enabled)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the character can spot sneaking characters.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetAttackOfOpportunity(CHARACTER:character, INT:enabled)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the character can do attack of opportunities.&lt;br /&gt;
&lt;br /&gt;
'''CharacterResurrect(CHARACTER:character [, INT:Percentage = 100])'''&lt;br /&gt;
&lt;br /&gt;
Resurrects the character at [2]% health.&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddToInventory(CHARACTER:character, FIXEDSTRING:itemStatsObject[, INT:amount, INT:showInTrade=1])'''&lt;br /&gt;
&lt;br /&gt;
Add the item to the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveFromInventory(CHARACTER:character, FIXEDSTRING:itemStatsObject[, INT:amount])'''&lt;br /&gt;
&lt;br /&gt;
Remove the item from the character. If Amount is -1, then all are removed&lt;br /&gt;
&lt;br /&gt;
'''CharacterDrinkPotion(FIXEDSTRING:statID)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character drink a potion from the inventory.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetAnimationOverride(CHARACTER:character, FIXEDSTRING:animation)'''&lt;br /&gt;
&lt;br /&gt;
Sets an animation override, only walk/run/die animations can override it.&lt;br /&gt;
&lt;br /&gt;
'''CharacterUseActionPoints(CHARACTER:character, INT:amount [, OUT INT:succeeded])'''&lt;br /&gt;
&lt;br /&gt;
Uses x action points&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddTreasureTable(CHARACTER:character, FIXEDSTRING:treasureTable)'''&lt;br /&gt;
&lt;br /&gt;
Adds &amp;lt;treasureTable&amp;gt; to the treasure list of &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveTreasureTable(CHARACTER:character, FIXEDSTRING:treasureTable)'''&lt;br /&gt;
&lt;br /&gt;
Removes &amp;lt;treasureTable&amp;gt; from the treasure list of &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterClearTreasureTables(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Removes all treasure tables from &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetTemporaryHostileRelation(CHARACTER:character, CHARACTER:otherCharacter)'''&lt;br /&gt;
&lt;br /&gt;
Creates a temporary hostile relation between the 2 characters!&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetFightMode(CHARACTER:character, INT:fight [, INT:force=0])'''&lt;br /&gt;
&lt;br /&gt;
Set the character in sheath/unsheated mode.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetStats(CHARACTER:character, FIXEDSTRING:statsEntry [, INT:keepVitality=0, INT:keepAP=0, INT:keepLevel=0, OUT FLOAT:currentHP])'''&lt;br /&gt;
&lt;br /&gt;
Applies &amp;lt;statsEntry&amp;gt; from character.xlsm to &amp;lt;character&amp;gt;, returns &amp;lt;currentHP&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetWalkSpeedOverride(CHARACTER:character, INTEGER:override [, FLOAT:walkSpeed])'''&lt;br /&gt;
&lt;br /&gt;
Sets walk speed override of &amp;lt;character&amp;gt;, removes it if &amp;lt;override&amp;gt; is 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetRunSpeedOverride(CHARACTER:character, INTEGER:override [, FLOAT:runSpeed])'''&lt;br /&gt;
&lt;br /&gt;
Sets run speed override of &amp;lt;character&amp;gt;, removes it if &amp;lt;override&amp;gt; is 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetHasDialog(CHARACTER:character, INTEGER:bool)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the dialog of the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterInitPatrol(SPLINE:spline, INT:splineIndex, INT:reversed, INT:running)'''&lt;br /&gt;
&lt;br /&gt;
Start patroling from the given index along the given spline with the given character.&lt;br /&gt;
&lt;br /&gt;
'''CharacterStartPatrol(SPLINE:spline, INT:splineIndex, INT:reversed, INT:running)'''&lt;br /&gt;
&lt;br /&gt;
Start patroling from the given index along the given spline with the given character.&lt;br /&gt;
&lt;br /&gt;
'''CharacterStopPatrol(-)'''&lt;br /&gt;
&lt;br /&gt;
Let the character stop patrolling whatever spline he's on!&lt;br /&gt;
&lt;br /&gt;
'''CharacterInterruptPatrol(-)'''&lt;br /&gt;
&lt;br /&gt;
Call when the patrol should interrupt so the guard stops moving to the next spline. If this is called when the character is deactivated, a caret will take his place.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetAnimationSetOverride(CHARACTER:source, FIXEDSTRING:override)'''&lt;br /&gt;
&lt;br /&gt;
Sets an animation set override for a character. Empty fixedstring clears the override.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetFloating(CHARACTER:target, INTEGER:isFloating)'''&lt;br /&gt;
&lt;br /&gt;
Sets &amp;lt;target&amp;gt; floating if &amp;lt;isFloating&amp;gt; is not 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterResetCooldowns(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Resets the skill cooldowns for &amp;lt;target&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ItemEvent(ITEM:item, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw an item event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayAnimation(FIXEDSTRING:animation)'''&lt;br /&gt;
&lt;br /&gt;
Plays an animation on the item&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayAnimationTo(FIXEDSTRING:animation, FLOAT:targetPercentage, [FLOAT:speed])'''&lt;br /&gt;
&lt;br /&gt;
Plays an animation on the item to the target time (percentage of the total duration)&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayEffect(ITEM:item, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect on the item and it follows the item&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayLoopEffect(OUT INT:effectHandle, ITEM:item, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays a looping effect on the item and it follows the item&lt;br /&gt;
&lt;br /&gt;
'''ItemSetOnStage(ITEM:item, INTEGER:bool)'''&lt;br /&gt;
&lt;br /&gt;
Sets an item on or offstage&lt;br /&gt;
&lt;br /&gt;
'''ItemSetCanInteract(ITEM:item, INTEGER:bool)'''&lt;br /&gt;
&lt;br /&gt;
Sets an item (not) interactible&lt;br /&gt;
&lt;br /&gt;
'''ItemClose(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Close an item&lt;br /&gt;
&lt;br /&gt;
'''ItemOpen(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Open an item&lt;br /&gt;
&lt;br /&gt;
'''ItemDrop(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Drop an item&lt;br /&gt;
&lt;br /&gt;
'''ItemLock(ITEM:item, FIXEDSTRING:key)'''&lt;br /&gt;
&lt;br /&gt;
Lock an item&lt;br /&gt;
&lt;br /&gt;
'''ItemUnlock(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Unlock an item&lt;br /&gt;
&lt;br /&gt;
'''ItemApplyStatus(ITEM:item, STATUS:statusId [, INT:turns=null, INT:force=0])'''&lt;br /&gt;
&lt;br /&gt;
Applies the status to the item When turns is -1 it's a permanent status When turns is -2 it's a keep alive status (which means it will die if it's not applied again within 1 second) &lt;br /&gt;
&lt;br /&gt;
'''ItemRemoveStatus(ITEM:item, STATUS:statusId)'''&lt;br /&gt;
&lt;br /&gt;
Removes the status from the item&lt;br /&gt;
&lt;br /&gt;
'''ItemDie(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Kills the item&lt;br /&gt;
&lt;br /&gt;
'''ItemMoveTo(GAMEOBJECT|FLOAT3:target, FLOAT:velocity, FLOAT:acceleration, INTEGER:matchTargetRotation)'''&lt;br /&gt;
&lt;br /&gt;
Moves the item to the target&lt;br /&gt;
&lt;br /&gt;
'''ItemToInventory(ITEM:item, CHARACTER|ITEM:target [,INT:amount=-1])'''&lt;br /&gt;
&lt;br /&gt;
Moves the item to the target's inventory&lt;br /&gt;
&lt;br /&gt;
'''ItemLookAt(GAMEOBJECT:target, FLOAT:degreesPerSecond)'''&lt;br /&gt;
&lt;br /&gt;
Rotates the item to look at the target&lt;br /&gt;
&lt;br /&gt;
'''ItemDestroy(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Destroys the item&lt;br /&gt;
&lt;br /&gt;
'''ItemSetAmount(ITEM:item, INT:amount)'''&lt;br /&gt;
&lt;br /&gt;
Change the amount of the item&lt;br /&gt;
&lt;br /&gt;
'''IterateItemsInInventory(CHARACTER|ITEM:source, FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each iten in source's inventory. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''ItemAddCharges(ITEM:TargetItem, INT:charges)'''&lt;br /&gt;
&lt;br /&gt;
Add/subtract charges from an item&lt;br /&gt;
&lt;br /&gt;
'''ItemResetChargesToInitial(ITEM:TargetItem)'''&lt;br /&gt;
&lt;br /&gt;
Resets charges from item to initial state&lt;br /&gt;
&lt;br /&gt;
'''MakePeace(CHARACTER:Source, CHARACTER:Target[, INT:IgnoreVote = 1])'''&lt;br /&gt;
&lt;br /&gt;
Make peace between users of the characters&lt;br /&gt;
&lt;br /&gt;
'''MakeWar(CHARACTER:Source, CHARACTER:Target[, INT:IgnoreVote = 1])'''&lt;br /&gt;
&lt;br /&gt;
Make war between users of the characters&lt;br /&gt;
&lt;br /&gt;
'''FindSurface(OUT FLOAT3:result, GAMEOBJECT|FLOAT3:source, FLOAT:minRange, FLOAT:maxRange, SURFACE:type [,CHARACTER:alignSource, INT:minEnemiesInSurface, INT:maxAlliesInSurface, INT:minimumCellCount])'''&lt;br /&gt;
&lt;br /&gt;
Finds the closest surface of a specific type.&lt;br /&gt;
&lt;br /&gt;
'''FindValidPosition(INOUT FLOAT3:position, FLOAT:radius[, CHARACTER|ITEM:object=null])'''&lt;br /&gt;
&lt;br /&gt;
Finds the closest valid position (where the object can stand.)&lt;br /&gt;
&lt;br /&gt;
'''FindPosition(INOUT FLOAT3:position, CHARACTER:source, INT:canStand, INT:checkSight, FLOAT:minRadius, FLOAT:maxRadius, FLOAT:rangeCheck, CHARACTER:alignSource, INT:minAllies, INT:maxAllies, INT:minEnemies, INT:maxEnemies [,FIXEDSTRING:AiHintTag=null, INT:forceHint=0, FLOAT3:SourcePosition])'''&lt;br /&gt;
&lt;br /&gt;
Finds the closest position from the source (within radius) where the conditions are matched. &lt;br /&gt;
&lt;br /&gt;
'''Cast(OUT OBJECT variable, OBJECT value)'''&lt;br /&gt;
&lt;br /&gt;
Casts the value to the variable.&lt;br /&gt;
&lt;br /&gt;
'''StringConcatenate(STRING:stringA, STRING:stringB, OUT STRING:resultingString)'''&lt;br /&gt;
&lt;br /&gt;
Appends stringB to stringA. Resulting string is stored in the third parameter.&lt;br /&gt;
&lt;br /&gt;
== QUERIES ==&lt;br /&gt;
&lt;br /&gt;
GetPosition(GAMEOBJECT:object,OUT FLOAT3:src)&lt;br /&gt;
&lt;br /&gt;
Get the current position of an object&lt;br /&gt;
&lt;br /&gt;
GetForwardDirection(GAMEOBJECT:object,OUT FLOAT3:direction)&lt;br /&gt;
&lt;br /&gt;
Get the current forward direction of an object&lt;br /&gt;
&lt;br /&gt;
GetRightDirection(GAMEOBJECT:object,OUT FLOAT3:direction)&lt;br /&gt;
&lt;br /&gt;
Get the current right direction of an object&lt;br /&gt;
&lt;br /&gt;
GetUpDirection(GAMEOBJECT:object,OUT FLOAT3:direction)&lt;br /&gt;
&lt;br /&gt;
Get the current up direction of an object&lt;br /&gt;
&lt;br /&gt;
GetDirection(GAMEOBJECT|FLOAT3:src,GAMEOBJECT|FLOAT3:target,OUT FLOAT3:direction[, OUT FLOAT:distance])&lt;br /&gt;
&lt;br /&gt;
Get the direction from src to target (optional: returns the distance between the objects as well)&lt;br /&gt;
&lt;br /&gt;
GetRotation(GAMEOBJECT:object, OUT FLOAT3:vector)&lt;br /&gt;
&lt;br /&gt;
Get the rotation of an object&lt;br /&gt;
&lt;br /&gt;
CharacterGetTargetSpline(INT: SplineIndex)&lt;br /&gt;
&lt;br /&gt;
Returns the spline index the character is currently walking towards, or -1 if he is not active on a spline.&lt;br /&gt;
&lt;br /&gt;
IsEqual(OBJECT:variable, OBJECT:variable)&lt;br /&gt;
&lt;br /&gt;
Compares both objects and see if they are equal.&lt;br /&gt;
&lt;br /&gt;
IsLessThen(INT|FLOAT:variable, INT|FLOAT:variable)&lt;br /&gt;
&lt;br /&gt;
Compares both objects and see if the first one is smaller.&lt;br /&gt;
&lt;br /&gt;
IsGreaterThen(INT|FLOAT:variable, INT|FLOAT:variable)&lt;br /&gt;
&lt;br /&gt;
Compares both objects and see if the first one is bigger.&lt;br /&gt;
&lt;br /&gt;
IsRandom(FLOAT:percentage)&lt;br /&gt;
&lt;br /&gt;
Each time this condition is checked, it will succeed with a chance of the percentage (between 0 and 1)&lt;br /&gt;
&lt;br /&gt;
IsRound(INT:roundNumber)&lt;br /&gt;
&lt;br /&gt;
Checks if we are currently in combat in round x&lt;br /&gt;
&lt;br /&gt;
IsInSurface(OBJECT|FLOAT3:target, SURFACE:type[, FLOAT:radius])&lt;br /&gt;
&lt;br /&gt;
Check if the character, item, trigger or position is currently within the specific surface.&lt;br /&gt;
&lt;br /&gt;
IsInDangerousSurface(OBJECT|FLOAT3:target[, CHARACTER:character, FLOAT:radius])&lt;br /&gt;
&lt;br /&gt;
Check if &amp;lt;target&amp;gt; is currently in on a dangerous surface. Uses &amp;lt;character&amp;gt; for path influences if provided (is necessary with non-character targets)&lt;br /&gt;
&lt;br /&gt;
IsInDialog(CHARACTER|ITEM:target[, INT:ignoreAutomatedDialogs=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character or item is currently in a dialog, optionally ignoring automated dialogs&lt;br /&gt;
&lt;br /&gt;
IsInAutomatedDialog(CHARACTER|ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Check if the character or item is currently in an automated dialog&lt;br /&gt;
&lt;br /&gt;
GetDistance(OUT FLOAT:distance, GAMEOBJECT|FLOAT3:source, GAMEOBJECT|FLOAT3:target)&lt;br /&gt;
&lt;br /&gt;
Returns the distance between 2 positions&lt;br /&gt;
&lt;br /&gt;
GetDistance2D(OUT FLOAT:distance, GAMEOBJECT|FLOAT3:source, GAMEOBJECT|FLOAT3:target)&lt;br /&gt;
Returns the 2D distance between 2 positions (ignores height)&lt;br /&gt;
&lt;br /&gt;
GetInnerDistance(OUT FLOAT:distance, GAMEOBJECT:source, GAMEOBJECT:target)&lt;br /&gt;
&lt;br /&gt;
Returns the distance between 2 gameobjects (character, item, trigger, ...) Their bounds are already subtracted.&lt;br /&gt;
&lt;br /&gt;
GetPosition(GAMEOBJECT:object, OUT FLOAT3:position)&lt;br /&gt;
&lt;br /&gt;
Returns the position of a gameobject (character, item, trigger, ...)&lt;br /&gt;
&lt;br /&gt;
GetVar(OUT OBJECT:returnValue, CHARACTER|ITEM:target, FIXEDSTRING:varName)&lt;br /&gt;
&lt;br /&gt;
Gets a global variable from the target&lt;br /&gt;
&lt;br /&gt;
GetClosestPlayer(OUT CHARACTER:player, GAMEOBJECT|FLOAT3:source)&lt;br /&gt;
&lt;br /&gt;
Gets the closest player near the source, default being being the object itself&lt;br /&gt;
&lt;br /&gt;
GetPlayerCount(OUT INT:playerCount)&lt;br /&gt;
&lt;br /&gt;
Gets the number of players in the party&lt;br /&gt;
&lt;br /&gt;
GetPlayerByIndex(OUT CHARACTER:returnCharacter, INT:playerIndex)&lt;br /&gt;
&lt;br /&gt;
Gets a player from the party by index&lt;br /&gt;
&lt;br /&gt;
GetRandomCharacter(OUT CHARACTER:returnCharacter, [INT:canBeSelf=0, INT:canBePlayer=0])&lt;br /&gt;
&lt;br /&gt;
Gets a random character in the current level&lt;br /&gt;
&lt;br /&gt;
ContainsSurface(GAMEOBJECT|FLOAT3:source, FLOAT:radius, SURFACE:type,)&lt;br /&gt;
&lt;br /&gt;
Checks if there is any surface of the type within a radius of the source&lt;br /&gt;
&lt;br /&gt;
IsSurface(GAMEOBJECT|FLOAT3:source, FLOAT:radius, SURFACE:type,)&lt;br /&gt;
&lt;br /&gt;
Checks if the whole radius around the source is the specified surface type&lt;br /&gt;
&lt;br /&gt;
IsObjectOnObject(CHARACTER|ITEM:source,CHARACTER|ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Checks if the source is standing on the target&lt;br /&gt;
&lt;br /&gt;
GetX(FLOAT3:vector, OUT FLOAT:value)&lt;br /&gt;
&lt;br /&gt;
Returns the X component of the vector&lt;br /&gt;
&lt;br /&gt;
GetY(FLOAT3:vector, OUT FLOAT:value)&lt;br /&gt;
&lt;br /&gt;
Returns the Y component of the vector&lt;br /&gt;
&lt;br /&gt;
GetZ(FLOAT3:vector, OUT FLOAT:value)&lt;br /&gt;
&lt;br /&gt;
Returns the Z component of the vector&lt;br /&gt;
&lt;br /&gt;
CanSee(GAMEOBJECT|FLOAT3:source, GAMEOBJECT|FLOAT3:target[, INT:addProjectileTargetGroundOffset=0])&lt;br /&gt;
&lt;br /&gt;
Check if the sight is blocked between 2 points.&lt;br /&gt;
&lt;br /&gt;
IsVisible(CHARACTER|ITEM:object)&lt;br /&gt;
&lt;br /&gt;
Check if the object is set invisible or not with SetVisible.&lt;br /&gt;
&lt;br /&gt;
GetTextDuration(CHARACTER|ITEM:object, FIXEDSRTING:key, OUT FLOAT:duration)&lt;br /&gt;
&lt;br /&gt;
Gets how long a text needs to be displayed&lt;br /&gt;
&lt;br /&gt;
IsCasual(-)&lt;br /&gt;
&lt;br /&gt;
Returns if the current game mode is Casual&lt;br /&gt;
&lt;br /&gt;
IsHardcore(-)&lt;br /&gt;
&lt;br /&gt;
Returns if the current game mode is Hardcore&lt;br /&gt;
&lt;br /&gt;
IsTagged(GAMEOBJECT:object, FIXEDSTRING:tag)&lt;br /&gt;
&lt;br /&gt;
Check if the object is tagged.&lt;br /&gt;
&lt;br /&gt;
TranslatedStringKeyExists(FIXEDSTRING:key)&lt;br /&gt;
&lt;br /&gt;
Check if the TranslatedString key exists.&lt;br /&gt;
&lt;br /&gt;
IsInCombat(CHARACTER|ITEM:object)&lt;br /&gt;
&lt;br /&gt;
Returns true if the object is in combat.&lt;br /&gt;
&lt;br /&gt;
IsInCombatWith(CHARACTER|ITEM:object, CHARACTER|ITEM:object)&lt;br /&gt;
&lt;br /&gt;
Returns true if the objects are in combat with each other.&lt;br /&gt;
&lt;br /&gt;
IsFacing(GAMEOBJECT:source, GAMEOBJECT|FLOAT3:target, [INT:angle=90])&lt;br /&gt;
&lt;br /&gt;
Returns true if the object is facing the position within the given angle.&lt;br /&gt;
&lt;br /&gt;
GameIsSaving(-)&lt;br /&gt;
&lt;br /&gt;
Returns true if the game is saving.&lt;br /&gt;
&lt;br /&gt;
GameIsLoading(-)&lt;br /&gt;
&lt;br /&gt;
Returns true if the game is loading.&lt;br /&gt;
&lt;br /&gt;
GetUserCount(OUT INT:userCount)&lt;br /&gt;
&lt;br /&gt;
Returns the user count.&lt;br /&gt;
&lt;br /&gt;
GetCurrentCharacter(OUT CHARACTER:character, INT:user)&lt;br /&gt;
&lt;br /&gt;
Returns the character currently being controlled by the specified user.&lt;br /&gt;
&lt;br /&gt;
GetCurrentLevel(OUT FIXEDSTRING:currentLevel)&lt;br /&gt;
&lt;br /&gt;
Returns the current levelname&lt;br /&gt;
&lt;br /&gt;
GetAIBounds(CHARACTER|ITEM:source, OUT FLOAT:bounds)&lt;br /&gt;
&lt;br /&gt;
Returns AI bounds of &amp;lt;source&amp;gt; in &amp;lt;bounds&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HasGlobalFlag(FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Global Flag is set&lt;br /&gt;
&lt;br /&gt;
HasFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Flag is set on the Object&lt;br /&gt;
&lt;br /&gt;
HasUserFlag(CHARACTER:object, FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Flag is set on the user's characters&lt;br /&gt;
&lt;br /&gt;
HasPartyFlag(CHARACTER:object, FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Flag is set on the party's characters&lt;br /&gt;
&lt;br /&gt;
DialogExists(STRING:dialogue)&lt;br /&gt;
&lt;br /&gt;
Returns true if the dialogue exists.&lt;br /&gt;
&lt;br /&gt;
IsActive(CHARACTER|ITEM:Object)&lt;br /&gt;
&lt;br /&gt;
Returns if the character or item is currently active.&lt;br /&gt;
&lt;br /&gt;
ListGetSize(LIST&amp;lt;OBJECT&amp;gt;:list, out INT:size)&lt;br /&gt;
&lt;br /&gt;
Returns the number of elements in &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ListGet(LIST&amp;lt;OBJECT&amp;gt;:list, INT:index, out OBJECT:entry)&lt;br /&gt;
&lt;br /&gt;
Returns &amp;lt;entry&amp;gt; at &amp;lt;index&amp;gt; of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ListGetRandom(LIST&amp;lt;OBJECT&amp;gt;:list, out OBJECT:entry)&lt;br /&gt;
&lt;br /&gt;
Returns a random &amp;lt;entry&amp;gt; of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IsBoss(CHARACTER|ITEM:Object)&lt;br /&gt;
&lt;br /&gt;
Returns true if the entity is tagged as a boss&lt;br /&gt;
&lt;br /&gt;
IsProjectileSkill(SKILL:skill)&lt;br /&gt;
&lt;br /&gt;
Returns true if the skill is a ranged skill (uses a projectile)&lt;br /&gt;
&lt;br /&gt;
IsValidSkillTarget(CHARACTER:source, OBJECT|FLOAT3:target, SKILLID:skill[, INTEGER:ignoreRangeCheck=0])&lt;br /&gt;
&lt;br /&gt;
Checks whether &amp;lt;target&amp;gt; is a valid target for &amp;lt;skill&amp;gt; at &amp;lt;source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GetFaction(OUT FIXEDSTRING:faction, CHARACTER|ITEM:character)&lt;br /&gt;
&lt;br /&gt;
Returns the faction of the provided character or item&lt;br /&gt;
&lt;br /&gt;
IsInActiveTurn(CHARACTER|ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Returns true if it's the character's or item's turn in combat.&lt;br /&gt;
&lt;br /&gt;
IsSkillActive(CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; has &amp;lt;skillId&amp;gt; active (in memory).&lt;br /&gt;
&lt;br /&gt;
HasSkillAi(SKILLID:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns true if the skill is using the new Ai system&lt;br /&gt;
&lt;br /&gt;
IsInArena(CHARACTER::character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character is in an arena fight&lt;br /&gt;
&lt;br /&gt;
CrimeGetType(INTEGER:crimeId, OUT STRING:crimeType)&lt;br /&gt;
&lt;br /&gt;
Returns the type of the crime with this id.&lt;br /&gt;
&lt;br /&gt;
CrimeGetCriminals(INTEGER:crimeId, OUT CHARACTER:criminal1, OUT CHARACTER:criminal2, OUT CHARACTER:criminal3, OUT CHARACTER:criminal4)&lt;br /&gt;
&lt;br /&gt;
Returns the criminals of that crime. They might all be null.&lt;br /&gt;
&lt;br /&gt;
IsSourceSkill(SKILL:skill)&lt;br /&gt;
&lt;br /&gt;
Returns true if the skill is a source skill.&lt;br /&gt;
&lt;br /&gt;
IsInGameMasterMode(-)&lt;br /&gt;
&lt;br /&gt;
Returns true if the game in game master mode.&lt;br /&gt;
&lt;br /&gt;
CharacterGet(OUT CHARACTER:character, GAMEOBJECT|FLOAT3:src, FLOAT:range, COMPARE:howTo, COMPAREFUNC:compareFunc[, RELATION: relation, SURFACE:surface, STATUS:status, TALENT:talent, CHARACTER:inSightOf, FIXEDSTRING:tag])&lt;br /&gt;
&lt;br /&gt;
Get a character within a certain range conforming to the filled in restraints. &lt;br /&gt;
&lt;br /&gt;
CharacterCount(OUT INT:count, GAMEOBJECT|FLOAT3:src, FLOAT:range, [RELATION: relation, SURFACE:surface, STATUS:status, TALENT:talent, CHARACTER:inSightOf])&lt;br /&gt;
&lt;br /&gt;
Counts the characters within a certain range conforming to the filled in restraints.&lt;br /&gt;
&lt;br /&gt;
CharacterGetOwner(OUT CHARACTER:owner, CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get the character's owner&lt;br /&gt;
&lt;br /&gt;
CharacterGetFollow(OUT CHARACTER:to follow, CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get the character to follow&lt;br /&gt;
&lt;br /&gt;
CharacterGetEnemy(OUT CHARACTER:current enemy, CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get current enemy of character&lt;br /&gt;
&lt;br /&gt;
CharacterCanCast(CHARACTER:source, SKILL:skillId, [ITEM:skillItem=null, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can cast the skill: will check cooldown, actionpoints&lt;br /&gt;
&lt;br /&gt;
CharacterCanSitOnItem(CHARACTER:source, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Check if the character source can sit or lie on an item.&lt;br /&gt;
&lt;br /&gt;
CharacterCanDrinkPotion(CHARACTER:source, FIXEDSTRING:potionID[, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can drink the potion: will check inv and actionpoints&lt;br /&gt;
&lt;br /&gt;
CharacterCanUseItem(CHARACTER:source, ITEM:item[, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can use the item in the world&lt;br /&gt;
&lt;br /&gt;
CharacterCanUseItemInInventory(CHARACTER:source, ITEM:item[, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can use the item in his inventory&lt;br /&gt;
&lt;br /&gt;
CharacterCanSee(CHARACTER:watchingChar, CHARACTER|ITEM:target [, INT:forceUpdate=0])&lt;br /&gt;
&lt;br /&gt;
Check if character has target in his line of sight. &lt;br /&gt;
&lt;br /&gt;
CharacterCanShoot(CHARACTER:source, GAMEOBJECT|FLOAT3:target)&lt;br /&gt;
&lt;br /&gt;
Check if the character can shoot the target.&lt;br /&gt;
&lt;br /&gt;
CharacterIsPlayer(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if the character is a player&lt;br /&gt;
&lt;br /&gt;
CharacterIsInParty(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if the character is in the party&lt;br /&gt;
&lt;br /&gt;
CharacterIsEnemy(CHARACTER:source, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is enemy of source&lt;br /&gt;
&lt;br /&gt;
CharacterIsAlly(CHARACTER:source, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is ally of source&lt;br /&gt;
&lt;br /&gt;
CharacterIsNeutral(CHARACTER:source, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is neutral of source&lt;br /&gt;
&lt;br /&gt;
CharacterIsDead(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is dead&lt;br /&gt;
&lt;br /&gt;
CharacterIsMoving(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is moving (speed &amp;gt; 0)&lt;br /&gt;
&lt;br /&gt;
CharacterIsSummon(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a summon&lt;br /&gt;
&lt;br /&gt;
CharacterIsPartyFollower(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a party follower&lt;br /&gt;
&lt;br /&gt;
CharacterIsStoryNPC(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a story NPC&lt;br /&gt;
&lt;br /&gt;
CharacterInWeaponRange(CHARACTER:character, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is in the current's weapon range&lt;br /&gt;
&lt;br /&gt;
CharacterInTouchRange(CHARACTER:character, CHARACTER:targetChar)&lt;br /&gt;
&lt;br /&gt;
Check if target is in the character's touch range &lt;br /&gt;
&lt;br /&gt;
CharacterHasStatus(CHARACTER:character, STATUS:statusId[, FIXEDSTRING:extraData])&lt;br /&gt;
&lt;br /&gt;
Check if character currently has the status. ExtraData can be filled in for some statuses: - Consume: statsid of the item - Shield: skillid of the shield&lt;br /&gt;
&lt;br /&gt;
CharacterGetStatusSourceCharacter(CHARACTER:character, STATUS:statusId, OUT CHARACTER:source[, FIXEDSTRING:extraData])&lt;br /&gt;
&lt;br /&gt;
Get the source character of a status&lt;br /&gt;
&lt;br /&gt;
CharacterGetStatusSourceItem(CHARACTER:character, STATUS:statusId, OUT ITEM:source[, FIXEDSTRING:extraData])&lt;br /&gt;
&lt;br /&gt;
Get the source item of a status&lt;br /&gt;
&lt;br /&gt;
CharacterHasTalent(CHARACTER:character, TALENT:talent)&lt;br /&gt;
&lt;br /&gt;
Check if character currently has the talent&lt;br /&gt;
&lt;br /&gt;
CharacterHasSkill(CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Check if character currently has the skill&lt;br /&gt;
&lt;br /&gt;
CharacterHasWeaponType(CHARACTER:character, WEAPON:weaponTYPE [, INT:equipped])&lt;br /&gt;
&lt;br /&gt;
Check if character currently has a weapon of this type in his inventory or equipped&lt;br /&gt;
&lt;br /&gt;
CharacterGetStat(OUT FLOAT:statValue, CHARACTER:character, CHARACTERSTAT:statType)&lt;br /&gt;
&lt;br /&gt;
Returns the current value of the stat (Vitality, ...)&lt;br /&gt;
&lt;br /&gt;
CharacterGetSightRange(OUT FLOAT:range, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's sight range&lt;br /&gt;
&lt;br /&gt;
CharacterGetWeaponRange(OUT FLOAT:minRange, OUT FLOAT:maxRange, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's current weapon range&lt;br /&gt;
&lt;br /&gt;
CharacterGetTouchRange(OUT FLOAT:touchRange, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's current touch range&lt;br /&gt;
&lt;br /&gt;
CharacterGetSkillRange(OUT FLOAT:minRange, OUT FLOAT:maxRange,CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns the character's skill range&lt;br /&gt;
&lt;br /&gt;
CharacterGetSkillImpactRange(OUT FLOAT:areaRange, CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns the character's skill range&lt;br /&gt;
&lt;br /&gt;
CharacterIsInTrigger(CHARACTER:character, TRIGGER:trigger)&lt;br /&gt;
&lt;br /&gt;
Check if character is in given trigger&lt;br /&gt;
&lt;br /&gt;
CharacterGetAbility(OUT INT:value, CHARACTER:character, ABILITY:ability)&lt;br /&gt;
&lt;br /&gt;
Returns the character's value of the specified ability&lt;br /&gt;
&lt;br /&gt;
CharacterGetHostileCount(OUT INT:value, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns how many characters are targeting this character right now... You can iterate over them with IterateEnemiesOf.&lt;br /&gt;
&lt;br /&gt;
CharacterCanFight(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character can fight.&lt;br /&gt;
&lt;br /&gt;
CharacterGetTemplate(CHARACTER:character, OUT CHARACTERTEMPLATE:root)&lt;br /&gt;
&lt;br /&gt;
Returns the roottemplate of the character.&lt;br /&gt;
&lt;br /&gt;
CharacterCanSpotSneakers(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character can spot sneaking characters&lt;br /&gt;
&lt;br /&gt;
CharacterIsFloating(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a floating character&lt;br /&gt;
&lt;br /&gt;
CharacterInCreation(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character is in character creation&lt;br /&gt;
&lt;br /&gt;
CharacterAvoidsTraps(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character avoids traps&lt;br /&gt;
&lt;br /&gt;
CharacterCheckRelation(CHARACTER:character, RELATION:relation)&lt;br /&gt;
&lt;br /&gt;
Returns true if relation check succeeds&lt;br /&gt;
&lt;br /&gt;
CharacterIsBetterOrEqualClass(CHARACTER:character, INT:currentScore, OUT INT:newScore, INT warriorScore, INT rogueScore, INT mageScore, INT clericScore, INT rangerScore)&lt;br /&gt;
&lt;br /&gt;
Returns true if score is higher or equal than the current score&lt;br /&gt;
&lt;br /&gt;
CharacterHasBeenHitBy(CHARACTER:character, DAMAGE_TYPE:damageType)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character was hit by this type.&lt;br /&gt;
&lt;br /&gt;
CharacterHasCastedSpellLastTurn(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character has casted a spell in his last turn.&lt;br /&gt;
&lt;br /&gt;
CharacterHasHadStatus(CHARACTER:character, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character has had a specific status this combat.&lt;br /&gt;
&lt;br /&gt;
CharacterHasAnimationOverride(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character has an animation override.&lt;br /&gt;
&lt;br /&gt;
CharacterCanUnlock(CHARACTER:character, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character can unlock the item (if the item is already unlocked it returns true!)&lt;br /&gt;
&lt;br /&gt;
CharacterGetReservedUserID(OUT INT:user, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's reserved User id.&lt;br /&gt;
&lt;br /&gt;
CharacterGetRace(CHARACTER:character, OUT FIXEDSTRING:race)&lt;br /&gt;
&lt;br /&gt;
Returns the &amp;lt;character&amp;gt;'s race in &amp;lt;race&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterIsRace(CHARACTER:character, FIXEDSTRING:race)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt;'s race is &amp;lt;race&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterCanMoveItem(CHARACTER:character, ITEM:item, FLOAT:minRadius, FLOAT:maxRadius [, OUT FLOAT3:destination])&lt;br /&gt;
&lt;br /&gt;
Returns true + &amp;lt;destination&amp;gt; if &amp;lt;character&amp;gt; can move &amp;lt;item&amp;gt; somewhere between &amp;lt;minRadius&amp;gt; and &amp;lt;maxRadius&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterGetDeathType(CHARACTER:character, OUT FIXEDSTRING:deathType)&lt;br /&gt;
&lt;br /&gt;
Returns death type of &amp;lt;character&amp;gt; in &amp;lt;deathType&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterGetStillAnimation(CHARACTER:object, OUT FIXEDSTRING:stillAnimation)&lt;br /&gt;
&lt;br /&gt;
Returns the still animation to play&lt;br /&gt;
&lt;br /&gt;
CrimeTransferLeadership(INT: CrimeID[, FIXEDSTRING:Tag1,...])&lt;br /&gt;
&lt;br /&gt;
Try and transfer the leadership of this crime to someone else.&lt;br /&gt;
&lt;br /&gt;
CrimeGetLeadInvestigator(OUT CHARACTER:lead, INT: CrimeID)&lt;br /&gt;
&lt;br /&gt;
Returns the lead investigator for the crime.&lt;br /&gt;
&lt;br /&gt;
CharacterCanHitTargetWithRangedWeapon(CHARACTER:source, OBJECT|FLOAT3:target[, SKILL:skill = null])&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;source&amp;gt; can hit &amp;lt;target&amp;gt; with currently equipped ranged weapon. Will use &amp;lt;skill&amp;gt; instead of equipped weapon if provided.&lt;br /&gt;
&lt;br /&gt;
CharacterHasRangedWeapon(CHARACTER:character[, INT:checkInventory = 0])&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; has has ranged weapon. Checks for non-wielded weapons if &amp;lt;checkInventory&amp;gt; is 1&lt;br /&gt;
&lt;br /&gt;
CheckInteractionReach(CHARACTER:character, CHARACTER|ITEM: target)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; could interact with &amp;lt;target&amp;gt;. This is not checking ranges, but checking if there's too much of a height difference or too many obstacles in between.&lt;br /&gt;
&lt;br /&gt;
CharacterGetSourcePoints(CHARACTER:character, OUT INT: amount)&lt;br /&gt;
&lt;br /&gt;
Returns the amount of sourcepoints of &amp;lt;character&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterAiIsCalculating(-)&lt;br /&gt;
&lt;br /&gt;
Returns if the character is still calculating the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchMoveSkillCommand(OUT SKILL:skill, OUT ITEM:skillItem, OUT FLOAT3:target)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Move Skill command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchSkillCommand(OUT SKILL:skill, OUT ITEM:skillItem, OUT FLOAT3 endPosition, OUT FLOAT3:target, OUT CHARACTER:target, OUT ITEM:target, OUT FLOAT3:target2, OUT CHARACTER:target2, OUT ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Skill command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchConsumeCommand(OUT ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Consume command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchAttackCommand(OUT FLOAT3:endPosition, OUT FLOAT3:target, OUT CHARACTER:target, OUT ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Attack command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchFallbackCommand(OUT FLOAT3:targetPosition, OUT FLOAT3:lookAtPosition)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Fallback command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterGetArchetype(CHARACTER:character, OUT ARCHETYPE:archetype)&lt;br /&gt;
&lt;br /&gt;
Returns the archetype of the character.&lt;br /&gt;
&lt;br /&gt;
CharacterIsPolymorphedInto(CHARACTER:character, FIXEDSTRING:race)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; is polymorphed into &amp;lt;race&amp;gt;. Race can be a race (like HUMAN), but also a template (in case of a polymorph skill like Chicken Touch).&lt;br /&gt;
&lt;br /&gt;
CharacterIsPolymorphInteractionDisabled(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; has his interaction disabled because of a polymorph.&lt;br /&gt;
&lt;br /&gt;
ItemGet(OUT ITEM:item, GAMEOBJECT|FLOAT3:src, FLOAT:range, COMPARE:howTo [, COMPAREFUNC:compareFunc, FIXEDSTRING:rootTemplate, FIXEDSTRING:tag])&lt;br /&gt;
&lt;br /&gt;
Get an item within a certain range conforming to the filled in restraints.&lt;br /&gt;
&lt;br /&gt;
ItemGetFromInventory(OUT ITEM:item, CHARACTER|ITEM:object [, FIXEDSTRING:statsId, FIXEDSTRING:tag, INT:isEquiped])&lt;br /&gt;
&lt;br /&gt;
Returns the first item in the inventory conforming to the filled in restraints.&lt;br /&gt;
&lt;br /&gt;
ItemIsInCharacterInventory(ITEM:item, CHARACTER:object)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is in the inventory of the character&lt;br /&gt;
&lt;br /&gt;
ItemIsInTrigger(ITEM:item, TRIGGER:trigger)&lt;br /&gt;
&lt;br /&gt;
Check if item is in given trigger&lt;br /&gt;
&lt;br /&gt;
ItemGetStat(OUT FLOAT:statValue, ITEM:item, ITEMSTAT:statType)&lt;br /&gt;
&lt;br /&gt;
Returns the current value of the stat (Weight, ...)&lt;br /&gt;
&lt;br /&gt;
ItemIsMoving(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is moving or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsFalling(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is falling or not. (after teleport)&lt;br /&gt;
&lt;br /&gt;
ItemIsOpening(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is opening or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsClosing(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is closing or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsLocked(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is locked or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsMovable(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is movable or not.&lt;br /&gt;
&lt;br /&gt;
ItemCanBeLockPicked(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is can be opened by lockpicking.&lt;br /&gt;
&lt;br /&gt;
ItemIsOpen(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is open or not.&lt;br /&gt;
&lt;br /&gt;
IsStoryItem(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is a story item.&lt;br /&gt;
&lt;br /&gt;
ItemHasStatus(ITEM:item, STATUS:statusId)&lt;br /&gt;
&lt;br /&gt;
Returns if the item has the status.&lt;br /&gt;
&lt;br /&gt;
ItemIsDestroyed(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is destroyed.&lt;br /&gt;
&lt;br /&gt;
ItemGetTemplate(ITEM:item, OUT ITEMTEMPLATE:root)&lt;br /&gt;
&lt;br /&gt;
Returns the roottemplate of the item.&lt;br /&gt;
&lt;br /&gt;
ItemGetSkillId(ITEM:item, OUT SKILL:root)&lt;br /&gt;
&lt;br /&gt;
Returns the skillid of the item if it has one.&lt;br /&gt;
&lt;br /&gt;
ItemGetItemType(ITEM:item, OUT FIXEDSTRING:itemType)&lt;br /&gt;
&lt;br /&gt;
Returns the itemtype of the item: common, unique, rare, ...&lt;br /&gt;
&lt;br /&gt;
ItemGetStatusSourceCharacter(ITEM:item, STATUS:statusId, OUT CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get the source character of a status&lt;br /&gt;
&lt;br /&gt;
ItemGetStatusSourceItem(ITEM:item, STATUS:statusId, OUT ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Get the source item of a status&lt;br /&gt;
&lt;br /&gt;
ItemCanBeMoved(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item can be moved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EVENTS ==&lt;br /&gt;
&lt;br /&gt;
OnCharacterEvent(CHARACTER:character, STRING:eventName)&lt;br /&gt;
&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
OnCharacterItemEvent(CHARACTER:character, ITEM:item, STRING:eventName)&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
OnCharacterCharacterEvent(CHARACTER:character, CHARACTER:character, STRING:eventName)&lt;br /&gt;
&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
OnItemEvent(ITEM:item, STRING:eventName)&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
OnItemDestroyed(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Thrown when an item is destroyed&lt;br /&gt;
&lt;br /&gt;
OnItemDestroying(ITEM:item)&lt;br /&gt;
Thrown when an item is being destroyed&lt;br /&gt;
&lt;br /&gt;
OnItemOpened(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Thrown when an item is opened&lt;br /&gt;
&lt;br /&gt;
OnItemClosed(ITEM:item)&lt;br /&gt;
Thrown when an item is closed&lt;br /&gt;
&lt;br /&gt;
OnItemDropped(ITEM:item, STRING:itemTemplate)&lt;br /&gt;
&lt;br /&gt;
Thrown when an item is dropped&lt;br /&gt;
&lt;br /&gt;
OnGlobalFlagSet(FIXEDSTRING:eventName)&lt;br /&gt;
Thrown when a global event is set&lt;br /&gt;
&lt;br /&gt;
OnGlobalFlagCleared(FIXEDSTRING:eventName)&lt;br /&gt;
&lt;br /&gt;
Thrown when a global event is cleared&lt;br /&gt;
&lt;br /&gt;
OnCharacterFlagSet(FIXEDSTRING:eventName, CHARACTER:character)&lt;br /&gt;
Thrown when a dialog event is set on a character&lt;br /&gt;
&lt;br /&gt;
OnCharacterFlagCleared(FIXEDSTRING:eventName, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Thrown when a dialog event is cleared on a character&lt;br /&gt;
&lt;br /&gt;
OnItemFlagSet(FIXEDSTRING:eventName, ITEM:item)&lt;br /&gt;
Thrown when a dialog event is set on an item&lt;br /&gt;
&lt;br /&gt;
OItemFlagCleared(FIXEDSTRING:eventName, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Thrown when a dialog event is cleared on an item&lt;br /&gt;
&lt;br /&gt;
OnTimer(FIXEDSTRING:timerName)&lt;br /&gt;
Thrown when a timer has ended&lt;br /&gt;
&lt;br /&gt;
OnInit(-)&lt;br /&gt;
&lt;br /&gt;
Thrown when the script is set&lt;br /&gt;
&lt;br /&gt;
OnLoaded(INT:major, INT:minor, INT:revision, INT:build)&lt;br /&gt;
&lt;br /&gt;
Thrown when the script is loaded from the savegame&lt;br /&gt;
&lt;br /&gt;
OnShutdown(-)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character's script is removed&lt;br /&gt;
&lt;br /&gt;
OnVariableCleared(FIXEDSTRING:varName)&lt;br /&gt;
&lt;br /&gt;
Thrown when this object's script variable is cleared from Osiris with ClearVarObject&lt;br /&gt;
&lt;br /&gt;
OnCombatStarted(CHARACTER:source, ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character entered a combat&lt;br /&gt;
&lt;br /&gt;
OnCombatSwitched(CHARACTER:source, ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character switch from one combat to another&lt;br /&gt;
&lt;br /&gt;
OnCombatEnded(CHARACTER:source, ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character left the combat&lt;br /&gt;
&lt;br /&gt;
OnTurn(CHARACTER:source, ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character's turn starts&lt;br /&gt;
&lt;br /&gt;
OnTurnEnded(CHARACTER:source, ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character's turn ended&lt;br /&gt;
&lt;br /&gt;
OnCharacterVitalityChanged(CHARACTER:character, FLOAT:percentage)&lt;br /&gt;
&lt;br /&gt;
Thrown when the characters's vitality changed&lt;br /&gt;
&lt;br /&gt;
OnItemVitalityChanged(ITEM:item, FLOAT:percentage)&lt;br /&gt;
&lt;br /&gt;
Thrown when the item's vitality changed&lt;br /&gt;
&lt;br /&gt;
OnAttackOfOpportunity(CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Thrown when the characters gets an attack of opportunity on an enemy&lt;br /&gt;
&lt;br /&gt;
OnDamage(DAMAGE:type, FLOAT:percentage, CHARACTER:source, ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Thrown when the object receives damage&lt;br /&gt;
&lt;br /&gt;
OnMiss(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character dodges something&lt;br /&gt;
&lt;br /&gt;
OnCriticalHit(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character is critical hit&lt;br /&gt;
&lt;br /&gt;
OnBlock(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character blocks something&lt;br /&gt;
&lt;br /&gt;
OnDie(CHARACTER:character, DAMAGE:type, CHARACTER:source, ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character dies&lt;br /&gt;
&lt;br /&gt;
OnCharacterStatusAttempt(CHARACTER:character, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character attempts to gain a status&lt;br /&gt;
&lt;br /&gt;
OnCharacterStatusApplied(CHARACTER:character, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character gains a status&lt;br /&gt;
&lt;br /&gt;
OnCharacterStatusRemoved(CHARACTER:character, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character loses a status&lt;br /&gt;
&lt;br /&gt;
OnItemStatusAttempt(ITEM:item, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Thrown when the item attempts to gain a status&lt;br /&gt;
&lt;br /&gt;
OnItemStatus(ITEM:item, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Thrown when the item gains a status&lt;br /&gt;
&lt;br /&gt;
OnItemStatusRemoved(ITEM:item, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Thrown when the item loses a status&lt;br /&gt;
&lt;br /&gt;
OnStatusCreateVisuals(STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Thrown when the item should create the visuals for this status&lt;br /&gt;
&lt;br /&gt;
OnStatusDestroyVisuals(STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Thrown when the item should destroy the visuals for this status&lt;br /&gt;
&lt;br /&gt;
OnSight(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character sees another character&lt;br /&gt;
&lt;br /&gt;
OnLostSight(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character doesn't see another character anymore&lt;br /&gt;
&lt;br /&gt;
OnUseItem(CHARACTER:source, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Thrown when a character uses an item&lt;br /&gt;
&lt;br /&gt;
OnPickupItem(CHARACTER:source, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Thrown when a character picks up an item&lt;br /&gt;
&lt;br /&gt;
OnCharacterMovedItem(CHARACTER:source, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Thrown when a character moved an item&lt;br /&gt;
&lt;br /&gt;
OnItemEquipped(CHARACTER:source, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Thrown when a character equips an item&lt;br /&gt;
&lt;br /&gt;
OnItemUnequipped(CHARACTER:source, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Thrown when a character unequips an item&lt;br /&gt;
&lt;br /&gt;
'''OnIterateCharacter(CHARACTER:character, FIXEDSTRING:eventId)'''&lt;br /&gt;
&lt;br /&gt;
Thrown by iterators&lt;br /&gt;
&lt;br /&gt;
'''OnIterateItem(ITEM:source, FIXEDSTRING:eventId)'''&lt;br /&gt;
&lt;br /&gt;
Thrown by iterators&lt;br /&gt;
&lt;br /&gt;
'''OnIterateCount(FIXEDSTRING:eventId, INTEGER:Count)'''&lt;br /&gt;
&lt;br /&gt;
Thrown by iterators after all iterations to inform you of the count.&lt;br /&gt;
&lt;br /&gt;
'''OnStoryOverride(-)'''&lt;br /&gt;
&lt;br /&gt;
Throw when story overrides what the character was doing: teleport, movement, on/offstage&lt;br /&gt;
&lt;br /&gt;
'''OnTriggerEnter(CHARACTER:character, ITEM:item, FIXEDSTRING:eventId)'''&lt;br /&gt;
&lt;br /&gt;
Thrown by a character or item entering an EventTrigger&lt;br /&gt;
&lt;br /&gt;
'''OnTriggerLeave(CHARACTER:character, ITEM:item, FIXEDSTRING:eventId)'''&lt;br /&gt;
&lt;br /&gt;
Thrown by a character or item leaving an EventTrigger&lt;br /&gt;
&lt;br /&gt;
'''OnEnemyChanged(CHARACTER:character, CHARACTER:newEnemy)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character's currentenemy changes&lt;br /&gt;
&lt;br /&gt;
'''OnTalentUnlocked(CHARACTER:character, TALENT:newTalent)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character unlocks a new talent&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterClassChanged(CHARACTER:character, FIXEDSTRING:class)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character changes class in the character creation screen&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterCreationStarted(CHARACTER:character, TRIGGER:creationPoint)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character creation has started, and gives where the character should walk to&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterCreationStopped(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character creation has stopped&lt;br /&gt;
&lt;br /&gt;
'''OnFunction(FIXEDSTRING:functionName)'''&lt;br /&gt;
&lt;br /&gt;
Throws an event on itself with the functionName. This is to fake function calls &lt;br /&gt;
&lt;br /&gt;
'''OnSkillCast(CHARACTER:character, SKILL_ID:skillID)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character casts a skill&lt;br /&gt;
&lt;br /&gt;
'''OnSkillCombatComment(CHARACTER:character, SKILL_ID:skillID)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the character needs to make a comment&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterUsedSkillOnMe(CHARACTER:character, SKILL_ID:skillID)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when you are hit by a skill from a character&lt;br /&gt;
&lt;br /&gt;
'''OnItemUnlocked(ITEM: item, CHARACTER:character, ITEM:key)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when an item gets unlocked by a character.&lt;br /&gt;
&lt;br /&gt;
'''OnAutomatedDialogEnded(STRING:dialogName, INT:instanceID)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a automated dialog is ended for this speaker&lt;br /&gt;
&lt;br /&gt;
'''OnAutomatedDialogStarted(STRING:dialogName, INT:instanceID)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a automated dialog is started for this speaker&lt;br /&gt;
&lt;br /&gt;
'''OnDialogEnded(STRING:dialogName, INT:instanceID)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a dialog is ended for this speaker&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeSensibleAction(FIXEDSTRING:regionID, INT:crimeID, FIXEDSTRING:reactionName, STRING:primaryDialog, CHARACTER:criminal1, CHARACTER:criminal2, CHARACTER:criminal3, CHARACTER:criminal4, INT:IsPrimary)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character needs to perform a sensible action against criminals&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeInterrogationRequest(FIXEDSTRING:regionID, INT:crimeID, CHARACTER:criminal1, CHARACTER:criminal2, CHARACTER:criminal3, CHARACTER:criminal4, STRING:interrogationDialog)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character needs to perform an interrogation against criminals&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeInvestigate(FLOAT3:CrimePosition, INT:crimeID)'''&lt;br /&gt;
&lt;br /&gt;
One NPC investigates a crimescene&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeAlarmed(FLOAT3:CrimePosition, INT:crimeID)'''&lt;br /&gt;
&lt;br /&gt;
All NPCs in a crimearea start looking around.&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeReturnToNormal(-)'''&lt;br /&gt;
&lt;br /&gt;
Investigation or Alarm timed out.&lt;br /&gt;
&lt;br /&gt;
'''OnCrimeAborted(-)'''&lt;br /&gt;
&lt;br /&gt;
The game interrupted the sensible action of this NPC.&lt;br /&gt;
&lt;br /&gt;
'''OnSplineControlPointReached(INT:Index, INT:EndReached, STRING:EventString)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character reached a spline node.&lt;br /&gt;
&lt;br /&gt;
''''OnFinishCalculationAi(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the calculation of the AI is finished.&lt;br /&gt;
&lt;br /&gt;
'''OnGrenadeLand(INT:hitObstacle, CHARACTER:caster)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the grenades lands&lt;br /&gt;
&lt;br /&gt;
'''FetchCharacterApplyStatusData(CHARACTER:character, STATUS:status) RETURN(LIST&amp;lt;STATUS&amp;gt;:removeStatuses, STATUS:applyStatus, INT:turns)'''&lt;br /&gt;
&lt;br /&gt;
Fetch from script which statuses to remove and apply.&lt;br /&gt;
&lt;br /&gt;
'''FetchItemApplyStatusData(ITEM:item, STATUS:status) RETURN(LIST&amp;lt;STATUS&amp;gt;:removeStatuses, STATUS:applyStatus, INT:turns)'''&lt;br /&gt;
&lt;br /&gt;
Fetch from script which statuses to remove and apply.&lt;br /&gt;
&lt;br /&gt;
'''FetchItemSkillOnDamage(INT:damage, DAMAGE_TYPE:damageType) RETURN(INT:hasSkill, SKILL_ID:skillID, INT:casterLevel)'''&lt;br /&gt;
&lt;br /&gt;
Fetch from script what skill to execute on damage.&lt;br /&gt;
&lt;br /&gt;
'''OnActivate(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character/item activates&lt;br /&gt;
&lt;br /&gt;
'''OnDeactivate(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character/item deactivates&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterUsedSourcePoint(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character uses a source point&lt;br /&gt;
&lt;br /&gt;
'''OnSkillAdded(CHARACTER:character, SKILL_ID:skillId, INT:learned)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character learns a skill&lt;br /&gt;
&lt;br /&gt;
'''OnSkillActivated(CHARACTER:character, SKILL_ID:skillId)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character activates (=adds to memory) a skill&lt;br /&gt;
&lt;br /&gt;
'''OnSkillDeactivated(CHARACTER:character, SKILL_ID:skillId)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character deactivates (=removes from memory) a skill&lt;br /&gt;
&lt;br /&gt;
'''OnItemFlagShared(FIXEDSTRING:eventName, ITEM:item, INT:newValue)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a dialog event is shared with an item&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterFlagShared(FIXEDSTRING:eventName, CHARACTER:character, INT:newValue)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a dialog event is shared with a character&lt;br /&gt;
&lt;br /&gt;
'''OnItemOffStageChanged(CHARACTER:character, INT:offstage)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character is set on/off stage&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterOffStageChanged(ITEM:item, INT:offstage)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a item is set on/off stage&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterTeleported(CHARACTER:target, CHARACTER:cause, FLOAT3:oldPosition, FLOAT3:newPosition, SKILL_ID:skillId)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character gets teleported with a teleport skill&lt;br /&gt;
&lt;br /&gt;
'''OnCombatTick(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when this object ticks in combat. Only thrown for objects that don't get a turn.&lt;br /&gt;
&lt;br /&gt;
== INTERRUPTS ==&lt;br /&gt;
&lt;br /&gt;
'''OnMovementFailed(FLOAT3:targetPos)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted by a move action failing&lt;br /&gt;
&lt;br /&gt;
'''OnException(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted by an exception&lt;br /&gt;
&lt;br /&gt;
'''OnBetterReactionFound(FIXEDSTRING:reactionName)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted by another reaction&lt;br /&gt;
&lt;br /&gt;
'''OnNoReactionFound(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted because no reaction is valid&lt;br /&gt;
&lt;br /&gt;
'''OnScriptDisabled(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted because the scriptcontroller is disabled&lt;br /&gt;
&lt;br /&gt;
'''OnManualInterrupt(FIXEDSTRING:reactionName)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted using the interrupt action&lt;br /&gt;
&lt;br /&gt;
'''OnRegionSwap(FIXEDSTRING:oldLevel, FIXEDSTRING:newLevel)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted by a region swap&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Character_and_Item_Script_Triggers,_Calls,_and_Queries&amp;diff=5820</id>
		<title>Character and Item Script Triggers, Calls, and Queries</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Character_and_Item_Script_Triggers,_Calls,_and_Queries&amp;diff=5820"/>
		<updated>2018-03-02T10:58:50Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of almost every character and item script event trigger, call, and query. An event is what triggers the script, and always begin with ''On''. Queries provide information and are always inside an ''IF'' or ''CHECK.'' Calls are actions that are always after THEN.&lt;br /&gt;
&lt;br /&gt;
CharScript/ItemScript Functions&lt;br /&gt;
&lt;br /&gt;
== CALLS ==&lt;br /&gt;
&lt;br /&gt;
'''Set(OUT OBJECT:variable, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Set the value of a variable&lt;br /&gt;
&lt;br /&gt;
'''SetVar(CHARACTER|ITEM:object, FIXEDSTRING:variableName, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Set the value of a global variable&lt;br /&gt;
&lt;br /&gt;
'''Cast(OUT OBJECT variable, OBJECT value)'''&lt;br /&gt;
&lt;br /&gt;
Casts the value to the variable&lt;br /&gt;
&lt;br /&gt;
'''Print(OUT STRING:output, STRING:text)'''&lt;br /&gt;
&lt;br /&gt;
Prints the text to the output with possible parameters: [1], [2], ...&lt;br /&gt;
&lt;br /&gt;
'''Add(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT|FLOAT3:value)'''&lt;br /&gt;
&lt;br /&gt;
Adds both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Subtract(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT|FLOAT3:value)'''&lt;br /&gt;
&lt;br /&gt;
Subtracts both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Multiply(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT:value)'''&lt;br /&gt;
&lt;br /&gt;
Multiplies both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Divide(INOUT INT|FLOAT|FLOAT3:variable, INT|FLOAT:value)'''&lt;br /&gt;
&lt;br /&gt;
Divides both values and stores it in the first variable&lt;br /&gt;
&lt;br /&gt;
'''Abs(INOUT INT|FLOAT:variable)'''&lt;br /&gt;
&lt;br /&gt;
Takes the absolute value of a variable&lt;br /&gt;
&lt;br /&gt;
'''Clamp(INOUT INT|FLOAT:variable, INT|FLOAT:min, INT|FLOAT:max)'''&lt;br /&gt;
&lt;br /&gt;
Clamps a variable between min and max&lt;br /&gt;
&lt;br /&gt;
'''GetRandom(OUT OBJECT:variable, OBJECT:value, OBJECT:value, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Fills in the variable with random one of the values.&lt;br /&gt;
&lt;br /&gt;
'''GetWeightedRandom(OUT OBJECT:variable, OBJECT:value, INT|FLOAT:weight, ...)'''&lt;br /&gt;
&lt;br /&gt;
Gets a weighted random of the given values!&lt;br /&gt;
&lt;br /&gt;
'''GetRandomBetween(OUT INT|FLOAT:variable, INT|FLOAT:min, INT|FLOAT:max)'''&lt;br /&gt;
&lt;br /&gt;
Gets a random value between min and max (both included)&lt;br /&gt;
&lt;br /&gt;
'''GetRandomPositionInTrigger(OUT FLOAT3:variable, TRIGGER:areaTrigger)'''&lt;br /&gt;
&lt;br /&gt;
Get a random position in a trigger area&lt;br /&gt;
&lt;br /&gt;
'''GetElement(OUT OBJECT:variable, INT:index, OBJECT:value, OBJECT:value, OBJECT:value)'''&lt;br /&gt;
&lt;br /&gt;
Fills in the variable with the index one of the values (starting from 0)&lt;br /&gt;
&lt;br /&gt;
'''SetPriority(FIXEDSTRING:reactionName, INT:priority)'''&lt;br /&gt;
&lt;br /&gt;
Changes the priority of a reaction. Priority 0 and below are not executed!&lt;br /&gt;
&lt;br /&gt;
'''DelayReaction(FIXEDSTRING:reactionName, FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
The reaction will not be chosen for the specified time&lt;br /&gt;
&lt;br /&gt;
'''SetScriptFrame(CHARACTER:character, FIXEDSTRING:frame)'''&lt;br /&gt;
&lt;br /&gt;
Sets the scriptframe on the character.&lt;br /&gt;
&lt;br /&gt;
'''ClearScriptFrame(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Clears the scriptframe on the character.&lt;br /&gt;
&lt;br /&gt;
'''Goto(FIXEDSTRING:labelName)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to the label. Two label names are built-in: &amp;quot;Start&amp;quot; for the first instruction of the reaction, and &amp;quot;End&amp;quot; for the last one.&lt;br /&gt;
&lt;br /&gt;
'''GotoIfEqual(OBJECT:variable, OBJECT:value, FIXEDSTRING:labelName)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to the label if the 2 objects are equal&lt;br /&gt;
&lt;br /&gt;
'''GotoRand(FIXEDSTRING:labelName, FIXEDSTRING:labelName, FIXEDSTRING:labelName, FIXEDSTRING:labelName, FIXEDSTRING:labelName)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to a random label in the list&lt;br /&gt;
&lt;br /&gt;
'''CreatePuddleAt(GAMEOBJECT|FLOAT3:target, SURFACE:type, INT:cellAmountMin, INT:cellAmountMax, INT:growAmountMin, INT:growAmountMax, )'''&lt;br /&gt;
&lt;br /&gt;
Spawn a puddle at the target's position for a certain lifetime (in turns)&lt;br /&gt;
&lt;br /&gt;
'''CreateSurfaceAt(GAMEOBJECT|FLOAT3:target, SURFACE:type, FLOAT:radius, INT:lifeTime[, GAMEOBJECT:owner])'''&lt;br /&gt;
&lt;br /&gt;
Spawn a surface at the target's position for a certain lifetime (in turns)&lt;br /&gt;
&lt;br /&gt;
'''CreateSurfaceInPolygon(GAMEOBJECT:owner, SURFACE:type, FLOAT:duration, FLOAT:growTimer, INT:growStep, GAMEOBJECT|FLOAT3:point1, GAMEOBJECT|FLOAT3:point2, GAMEOBJECT|FLOAT3:point3, ...)'''&lt;br /&gt;
&lt;br /&gt;
Spawn a polygon surface at the target's position. Grows &amp;lt;growStep&amp;gt; every &amp;lt;growTimer&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CreateSurfaceInAreaTrigger(GAMEOBJECT:owner, SURFACE:type, FLOAT:duration, FLOAT:growTimer, INT:growStep, TRIGGER:areaTrigger)'''&lt;br /&gt;
&lt;br /&gt;
Spawn a surface within &amp;lt;areaTrigger&amp;gt;. Grows &amp;lt;growStep&amp;gt; every &amp;lt;growTimer&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CreateConeSurfaceAt(GAMEOBJECT|FLOAT3:start, GAMEOBJECT|FLOAT3:target, SURFACE:type, FLOAT:radius, FLOAT:angle, FLOAT:duration)'''&lt;br /&gt;
&lt;br /&gt;
Spawn a Cone surface at the target's position&lt;br /&gt;
&lt;br /&gt;
'''PlayEffectAt(GAMEOBJECT|FLOAT3:target, STRING:effectName)'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect at the target's position&lt;br /&gt;
&lt;br /&gt;
'''PlayLoopEffectAt(OUT INT64:effectHandle, GAMEOBJECT|FLOAT3:target, STRING:effectName)'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect at the target's position&lt;br /&gt;
&lt;br /&gt;
'''ExplodeAt(GAMEOBJECT|FLOAT3:target, SKILL:projectileSkill, [INT:casterLevel=-1, CHARACTER|ITEM:cause])'''&lt;br /&gt;
&lt;br /&gt;
Trigger an explosion of a projectile skill at the target's position. The cause will trigger NPC behavior as if the cause casted the projectile&lt;br /&gt;
&lt;br /&gt;
'''DisplayText(CHARACTER|ITEM:target, FIXEDSTRING:text, FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
Displays text above the character/item for a certain amount of time. It will replace the current text, including dialogtext&lt;br /&gt;
&lt;br /&gt;
'''DisplayCombatInfoText(CHARACTER|ITEM:target, FIXEDSTRING:text, FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
Displays text above the character/item for a certain amount of time. It will replace the current text, including dialogtext&lt;br /&gt;
&lt;br /&gt;
'''StatusText(CHARACTER|ITEM:target, FIXEDSTRING:text)'''&lt;br /&gt;
&lt;br /&gt;
Adds statustext above the character/item for a short amount of time. Will not replace texts or dialogtexts&lt;br /&gt;
&lt;br /&gt;
'''DebugText(CHARACTER|ITEM:target, STRING:text)'''&lt;br /&gt;
&lt;br /&gt;
Adds debugtext above the character/item for a short amount of time.&lt;br /&gt;
&lt;br /&gt;
'''CombatLogText(CHARACTER|ITEM:target, FIXEDSTRING:text, INT:filterID, INT:broadcastID)'''&lt;br /&gt;
&lt;br /&gt;
Adds combatlog text inside the combat log window. Color-/SizeFormatting should already be applied, if not color and size of the string will be NORMAL. filterID determines what filter shows/hides the text. broadcastID determines who will be able to see the message (0 hearingrange. 1 party. 2 all)&lt;br /&gt;
&lt;br /&gt;
'''Log(STRING:text, ...)'''&lt;br /&gt;
&lt;br /&gt;
Log's the the scriptlog. (for debugging purposes)&lt;br /&gt;
&lt;br /&gt;
'''Output(STRING:text, ...)'''&lt;br /&gt;
&lt;br /&gt;
Pass text with optional parameters to the output panel (e.g. Output(&amp;quot;An int [1]&amp;quot;, INT:10))&lt;br /&gt;
&lt;br /&gt;
'''Assert(STRING:text, ...)'''&lt;br /&gt;
&lt;br /&gt;
Pass text with optional parameters to display as an assert message (e.g. Assert(&amp;quot;This number is wrong: [1]&amp;quot;, INT:666))&lt;br /&gt;
&lt;br /&gt;
'''Label(FIXEDSTRING:name)'''&lt;br /&gt;
&lt;br /&gt;
Marks this line as a label where Goto actions can jump to&lt;br /&gt;
&lt;br /&gt;
'''StartTimer(FIXEDSTRING:timerName, FLOAT:timeInSeconds, INT:repeatCount)'''&lt;br /&gt;
&lt;br /&gt;
Start a timer which will throw the timer event. Set repeatcount &amp;lt; 0 for a permanent timer.&lt;br /&gt;
&lt;br /&gt;
'''StopTimer(FIXEDSTRING:timerName)'''&lt;br /&gt;
&lt;br /&gt;
Stop a timer which will throw the timer event&lt;br /&gt;
&lt;br /&gt;
'''DialogStart(OUT INT:instanceId, STRING:dialog, CHARACTER|ITEM:target, CHARACTER|ITEM:target, CHARACTER|ITEM:target, CHARACTER|ITEM:target)'''&lt;br /&gt;
&lt;br /&gt;
Start a dialog between the targets. You can specify fewer targets than the maximum number.&lt;br /&gt;
&lt;br /&gt;
{{warning|Starting a dialog from behaviour script will always start it as an [[Dialog_editor#Automated|Automated Dialog]]. Interactive dialogs can only be started from [[Osiris]].}}&lt;br /&gt;
&lt;br /&gt;
'''DialogRequestStop(CHARACTER|ITEM:speaker, STRING:dialog)'''&lt;br /&gt;
&lt;br /&gt;
Stops a certain dialog on a certain speaker&lt;br /&gt;
&lt;br /&gt;
'''Check(-)'''&lt;br /&gt;
&lt;br /&gt;
Reevaluate the conditions in the CHECK section of this reaction&lt;br /&gt;
&lt;br /&gt;
'''Reset(-)'''&lt;br /&gt;
&lt;br /&gt;
Resets the current reaction. It will start from the beginning again&lt;br /&gt;
&lt;br /&gt;
'''Interrupt(FIXEDSTRING:reactionName)'''&lt;br /&gt;
&lt;br /&gt;
Interrupt the reaction.&lt;br /&gt;
&lt;br /&gt;
'''GlobalSetEvent(FIXEDSTRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Sets a global event. Scripts and Story can catch it.&lt;br /&gt;
&lt;br /&gt;
'''GlobalClearEvent(FIXEDSTRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Clears a global event. Scripts and Story can catch it.&lt;br /&gt;
&lt;br /&gt;
'''StopLoopEffect(INT64:fxHandle)'''&lt;br /&gt;
&lt;br /&gt;
Stops a looping effect&lt;br /&gt;
&lt;br /&gt;
'''IterateItems(FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each item. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateItemsNear(GAMEOBJECT:source, FLOAT:radius, FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each item in range. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateItemsOnObject(CHARACTER|ITEM:source, FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each item standing on the source. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateParty(FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, CHARACTER:partyMember, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each member of all parties. If you pass a party member only members of that party will be considered. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharacters(FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharactersNear(GAMEOBJECT:source, FLOAT:radius, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character in range. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharactersOnObject(CHARACTER|ITEM:source, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
Launch iterate event for each character standing on the source. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateCharactersInCombat(CHARACTER|ITEM:source, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character in combat with the source. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''IterateHostilesFor(CHARACTER:source, FIXEDSTRING:eventname, [COMPARE:howTo, COMPAREFUNC:compareFunc, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each character who is targetting the source. If you pass compare parameters, it will iterate over them in the requested order. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''SpawnCharacter(OUT CHARACTER:result, CHARACTERTEMPLATE:rootTemplate, GAMEOBJECT|FLOAT3:position, INT:playSpawn, [INT:isSummon=0, CHARACTER:summonOwner=null, INT:overrideLevel=-1])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a character&lt;br /&gt;
&lt;br /&gt;
'''SpawnItem(ITEMTEMPLATE:rootTemplate,GAMEOBJECT|FLOAT3:position, OUT ITEM:result)'''&lt;br /&gt;
&lt;br /&gt;
Spawns an item&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalProjectile(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,FLOAT3:direction,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at the source (with offset, can be null) shooting at the target&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalProjectileAt(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,GAMEOBJECT|FLOAT3:target,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at the source (with offset, can be null) shooting at the target&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldProjectile(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,FLOAT3:direction,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at worldPos shooting at the target. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldProjectileAt(SKILL:projectileSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,GAMEOBJECT|FLOAT3:target,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Spawns a projectile at worldPos shooting at the target. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalCone(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,FLOAT3:direction,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from source (with offset, can be null) in a direction&lt;br /&gt;
&lt;br /&gt;
'''ShootLocalConeAt(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:localOffset,GAMEOBJECT|FLOAT3:target,[INT:casterLevel, CHARACTER|ITEM:caster])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from source (with offset, can be null) at the target&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldCone(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,FLOAT3:direction,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from worldPos in a direction. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''ShootWorldConeAt(SKILL:coneSkill,CHARACTER|ITEM:source,FLOAT3:worldPos,GAMEOBJECT|FLOAT3:target,[INT:casterLevel])'''&lt;br /&gt;
&lt;br /&gt;
Shoots a cone from worldPos at the target. Source can be null.&lt;br /&gt;
&lt;br /&gt;
'''SetVisible(CHARACTER|ITEM:object, INT:visible)'''&lt;br /&gt;
&lt;br /&gt;
Sets a character or item visible or not.&lt;br /&gt;
&lt;br /&gt;
'''RotateY(INOUT FLOAT3:vector, FLOAT:degrees)'''&lt;br /&gt;
&lt;br /&gt;
Rotate the vector around the Y-axis for a certain angle (in degrees)&lt;br /&gt;
&lt;br /&gt;
'''SetHealth(CHARACTER|ITEM:target, FLOAT:percent)'''&lt;br /&gt;
&lt;br /&gt;
Set a characters or items health on the given percentage. (percentage between 0 and 1)&lt;br /&gt;
&lt;br /&gt;
'''PlaySound(CHARACTER|ITEM:target, STRING:soundEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a sound event at the target&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicForEveryone(STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on all the clients&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicOnCharacter(CHARACTER:target, STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on a character for all peers (3D)&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicForPeer(CHARACTER:target, STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on the peer of the character&lt;br /&gt;
&lt;br /&gt;
'''PlayMusicForPeerWithInstrument(CHARACTER:target, CHARACTER:charInstrument, STRING:musicEvent)'''&lt;br /&gt;
&lt;br /&gt;
Plays a music event on the peer of the character concated with _INSTRUMENT&lt;br /&gt;
&lt;br /&gt;
'''SetX(INOUT FLOAT3:vector, FLOAT|INT:value)'''&lt;br /&gt;
&lt;br /&gt;
Sets the X component of the FLOAT3&lt;br /&gt;
&lt;br /&gt;
'''SetY(INOUT FLOAT3:vector, FLOAT|INT:value)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Y component of the FLOAT3&lt;br /&gt;
&lt;br /&gt;
'''SetZ(INOUT FLOAT3:vector, FLOAT|INT:value)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Z component of the FLOAT3&lt;br /&gt;
&lt;br /&gt;
'''SetAtmosphere(FIXEDSTRING:atmosphereTriggerUUID, FIXEDSTRING:atmosphere)'''&lt;br /&gt;
&lt;br /&gt;
Changes the atmosphere of the trigger&lt;br /&gt;
&lt;br /&gt;
'''ResetAtmosphere(FIXEDSTRING:atmosphereTriggerUUID)'''&lt;br /&gt;
&lt;br /&gt;
Resets the atmosphere of the trigger&lt;br /&gt;
&lt;br /&gt;
'''AddStatusInfluence(CHARACTER|ITEM:object, STATUS:statusId, FLOAT:strength, [FIXEDSTRING:extraData=&amp;quot;&amp;quot;], [INT:isWeather=1], [INT:force=1])'''&lt;br /&gt;
&lt;br /&gt;
Adds the status influence strength on the object.&lt;br /&gt;
&lt;br /&gt;
'''RemoveStatusInfluence(CHARACTER|ITEM:object, STATUS:statusId, FLOAT:strength, [FIXEDSTRING:extraData=&amp;quot;&amp;quot;], [INT:isWeather=1])'''&lt;br /&gt;
&lt;br /&gt;
Removes the status influence strength on the object.&lt;br /&gt;
&lt;br /&gt;
'''AddTemporaryStatusInfluence(CHARACTER|ITEM:source, CHARACTER|ITEM:object, STATUS:statusId, FLOAT:strength, [FIXEDSTRING:extraData=&amp;quot;&amp;quot;], [INT:isWeather=1])'''&lt;br /&gt;
&lt;br /&gt;
Adds a temporary status influence strength on the object.. It will be gone in a few seconds if it's not set again&lt;br /&gt;
&lt;br /&gt;
'''CallFunction(FIXEDSTRING:functionName)'''&lt;br /&gt;
&lt;br /&gt;
Calls a function with the ID&lt;br /&gt;
&lt;br /&gt;
'''SetMaterial(CHARACTER|ITEM:object, FIXEDSTRING:materialUUID, INT:duration, INT:applyOnBody, INT:applyOnArmor, INT:applyOnWeapon[)'''&lt;br /&gt;
&lt;br /&gt;
Changes the material of the object for a set time (in turns), -1 is infinite. applyNormalMap: Copy the original materials normal map&lt;br /&gt;
&lt;br /&gt;
'''TeleportTo(CHARACTER|ITEM:object, GAMEOBJECT|FLOAT3:target, [INT:Force=0])'''&lt;br /&gt;
&lt;br /&gt;
Teleport object to or near the target&lt;br /&gt;
&lt;br /&gt;
'''Transform(CHARACTER|ITEM:object, CHARACTERTEMPLATE|ITEMTEMPLATE:root [, FIXEDSTRING:fx, INT:replaceScripts=1, OUT FLOAT:currentHP])'''&lt;br /&gt;
&lt;br /&gt;
Transforms &amp;lt;object&amp;gt; using &amp;lt;root&amp;gt;, returns &amp;lt;currentHP&amp;gt;, plays &amp;lt;fx&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''SaveGame(FIXEDSTRING:saveGameName)'''&lt;br /&gt;
&lt;br /&gt;
Save the savegame with name &amp;lt;saveGameName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LoadGame(FIXEDSTRING:saveGameName)'''&lt;br /&gt;
&lt;br /&gt;
Load the savegame with name &amp;lt;saveGameName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LoadLevel(FIXEDSTRING:levelName)'''&lt;br /&gt;
&lt;br /&gt;
Load the level with name &amp;lt;levelName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''KillCombat(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Kill all the enemies in the combat which contains &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SetTag(CHARACTER|ITEM:object, FIXEDSTRING:tag)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Tag on the Object&lt;br /&gt;
&lt;br /&gt;
'''ClearTag(CHARACTER|ITEM:object, FIXEDSTRING:tag)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Tag on the Object&lt;br /&gt;
&lt;br /&gt;
'''SetGlobalFlag(FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Global Flag&lt;br /&gt;
&lt;br /&gt;
'''ClearGlobalFlag(FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Global Flag&lt;br /&gt;
&lt;br /&gt;
'''SetFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Flag on the Object&lt;br /&gt;
&lt;br /&gt;
'''ClearFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Flag on the Object&lt;br /&gt;
&lt;br /&gt;
'''SetUserFlag(CHARACTER:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Flag on the user's characters&lt;br /&gt;
&lt;br /&gt;
'''ClearUserFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Flag on the user's characters&lt;br /&gt;
&lt;br /&gt;
'''SetPartyFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Sets the Flag on the party's characters&lt;br /&gt;
&lt;br /&gt;
'''ClearPartyFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagname)'''&lt;br /&gt;
&lt;br /&gt;
Clears the Flag on the party's characters&lt;br /&gt;
&lt;br /&gt;
'''StartVoiceBark(STRING:barkName, CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Start a voicebark on character&lt;br /&gt;
&lt;br /&gt;
'''ConfrontationDone(INT: CrimeID, CHARACTER:lead, CHARACTER:criminal, ...)'''&lt;br /&gt;
&lt;br /&gt;
Resolve the crime with id CrimeID for the specified criminals&lt;br /&gt;
&lt;br /&gt;
'''CrimesceneInvestigationDone(CHARACTER:investigator)'''&lt;br /&gt;
&lt;br /&gt;
Crimescene is considered investigated by this NPC, start looking for culprits&lt;br /&gt;
&lt;br /&gt;
'''ListAdd(LIST&amp;lt;OBJECT&amp;gt;:list, OBJECT:entry)'''&lt;br /&gt;
&lt;br /&gt;
Add &amp;lt;entry&amp;gt; at the back of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ListRemove(LIST&amp;lt;OBJECT&amp;gt;:list, INT:index)'''&lt;br /&gt;
&lt;br /&gt;
Remove the entry at &amp;lt;index&amp;gt; of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ListSet(LIST&amp;lt;OBJECT&amp;gt;:list, INT:index, OBJECT:entry)'''&lt;br /&gt;
&lt;br /&gt;
Set the entry at &amp;lt;index&amp;gt; of &amp;lt;list&amp;gt; to &amp;lt;entry&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ListClear(LIST&amp;lt;OBJECT&amp;gt;:list)'''&lt;br /&gt;
&lt;br /&gt;
Remove all entries of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''EndTurn(CHARACTER|ITEM:Target)'''&lt;br /&gt;
&lt;br /&gt;
Ends the object's current turn&lt;br /&gt;
&lt;br /&gt;
'''SetCanFight(CHARACTER|ITEM:entity, INT:enabled[, INT:wholeGroup=0])'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the entity can fight. Optional for the whole group&lt;br /&gt;
&lt;br /&gt;
'''SetCanJoinCombat(CHARACTER|ITEM:entity, INT:enabled[, INT:wholeGroup=0])'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the entity can join combats. Optional for the whole group&lt;br /&gt;
&lt;br /&gt;
'''SetIsBoss(CHARACTER|ITEM:entity, INT:enabled)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the entity is a boss.&lt;br /&gt;
&lt;br /&gt;
'''GetAIHintTriggers(OUT LIST&amp;lt;TRIGGER&amp;gt;:triggers[, [LIST]FIXEDSTRING:tags, INT:needsAllTags = -1)'''&lt;br /&gt;
&lt;br /&gt;
Returns all AIHintAreaTriggers in &amp;lt;triggers&amp;gt;. Uses contraints if set.&lt;br /&gt;
&lt;br /&gt;
'''SetCombatTimeout(CHARACTER|ITEM:entity, FLOAT:timer)'''&lt;br /&gt;
&lt;br /&gt;
Overwrites the entity's combat timeout check.&lt;br /&gt;
&lt;br /&gt;
'''ResetCombatTimeout(CHARACTER|ITEM:entity)'''&lt;br /&gt;
&lt;br /&gt;
Resets the entity's combat timeout check.&lt;br /&gt;
&lt;br /&gt;
'''EnterCombat(CHARACTER|ITEM:source, CHARACTER|ITEM:target)'''&lt;br /&gt;
&lt;br /&gt;
Enters combat with target&lt;br /&gt;
&lt;br /&gt;
'''LeaveCombat(CHARACTER|ITEM:source)'''&lt;br /&gt;
&lt;br /&gt;
Leaves the combat&lt;br /&gt;
&lt;br /&gt;
'''SetFaction(CHARACTER|ITEM:target, FIXEDSTRING:faction)'''&lt;br /&gt;
&lt;br /&gt;
Changes the faction of a character or item&lt;br /&gt;
&lt;br /&gt;
'''SetInvulnerable(CHARACTER|ITEM:target, INT:bool)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character or item invulnerable or not. (Allow damage)&lt;br /&gt;
&lt;br /&gt;
'''JumpToTurn(CHARACTER|ITEM:Target)'''&lt;br /&gt;
&lt;br /&gt;
Jumps to targets turn (ends the current turn)&lt;br /&gt;
&lt;br /&gt;
'''Sleep(FLOAT:timeInSeconds)'''&lt;br /&gt;
&lt;br /&gt;
Sleeps for a certain amount of time&lt;br /&gt;
&lt;br /&gt;
'''CharacterAttack(CHARACTER|ITEM|FLOAT3:target [,INT:alwaysHit])'''&lt;br /&gt;
&lt;br /&gt;
Moves in weapon range and attacks the target&lt;br /&gt;
&lt;br /&gt;
'''CharacterAttackWithoutMove(CHARACTER|ITEM|FLOAT3:target [,INT:alwaysHit])'''&lt;br /&gt;
&lt;br /&gt;
Attacks the target without checking weaponranges and without moving&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveTo(GAMEOBJECT|FLOAT3:target, [INT:running=0, INT:shouldArrive=0, INT:longPath=0, FLOAT:minDistance=1.5, FLOAT:maxDistance=minDistance+2.5])'''&lt;br /&gt;
&lt;br /&gt;
Move to the target. Set shouldArrive to 1 if you want a guaranteed move. (teleports on fail) &lt;br /&gt;
&lt;br /&gt;
'''CharacterAiMove(FLOAT3:target, CHARACTER:targetCharacter, ITEM:targetItem)'''&lt;br /&gt;
&lt;br /&gt;
Moves to the target, calculated by the AI. Should only be used with results from the AI!&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveInRange(GAMEOBJECT|FLOAT3:target, FLOAT:rangeMin, FLOAT:rangeMax, INT:running, [LIST&amp;lt;TRIGGER&amp;gt;:hintTriggers=null, INT:mustBeInTrigger=0])'''&lt;br /&gt;
&lt;br /&gt;
Move within a certain range of target. Optionally pass hinttriggers in which the result is preferred/necessary.&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveInWeaponRange(GAMEOBJECT|FLOAT3:target, INT:running, [LIST&amp;lt;TRIGGER&amp;gt;:hintTriggers=null, INT:mustBeInTrigger=0])'''&lt;br /&gt;
&lt;br /&gt;
Move within weapon range of target. Optionally pass hinttriggers in which the result is preferred/necessary.&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveInSkillRange(GAMEOBJECT|FLOAT3:target, SKILL:skill, INT:running, [LIST&amp;lt;TRIGGER&amp;gt;:hintTriggers=null, INT:mustBeInTrigger=0])'''&lt;br /&gt;
&lt;br /&gt;
Move within skill range of target. Optionally pass hinttriggers in which the result is preferred/necessary.&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveOutOfSight(FLOAT:angle)'''&lt;br /&gt;
&lt;br /&gt;
Move out of screen&lt;br /&gt;
&lt;br /&gt;
'''CharacterPlayAnimation(FIXEDSTRING:animation [, INT:exitOnFinish=1, INT:waitForCompletion=1])'''&lt;br /&gt;
&lt;br /&gt;
Plays a certain animation ExitOnFinish means if the exit will kill itself after it was played (revert back to still) &lt;br /&gt;
&lt;br /&gt;
'''CharacterStopAnimation(-)'''&lt;br /&gt;
&lt;br /&gt;
Stops all animations.&lt;br /&gt;
&lt;br /&gt;
'''CharacterPickUpItem(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Moves close enough to the item if necessary and picks it up&lt;br /&gt;
&lt;br /&gt;
'''CharacterUseItem(ITEM:item [, INTEGER:LongPath])'''&lt;br /&gt;
&lt;br /&gt;
Moves close enough to the item if necessary and uses it&lt;br /&gt;
&lt;br /&gt;
'''CharacterMoveItem(ITEM:item, INTEGER:ignoreWeight, INTEGER:ignoreAPCost [, INTEGER:ignoreDangerousSurfaces=1, INT:amount=-1, GAMEOBJECT|FLOAT3:destination])'''&lt;br /&gt;
&lt;br /&gt;
Moves close enough to the item if necessary and moves it to the destination. Will try to find a destination if not supplied.&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddSkill(CHARACTER:character, SKILL:skill[, INT:ShowNotification=0])'''&lt;br /&gt;
&lt;br /&gt;
Adds &amp;lt;skill&amp;gt; to &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveSkill(CHARACTER:character, SKILL:skill)'''&lt;br /&gt;
&lt;br /&gt;
Removes &amp;lt;skill&amp;gt; from &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterUseSkill(SKILL:skill, GAMEOBJECT|FLOAT3:target [, GAMEOBJECT|FLOAT3:target2, ITEM:skillItem, INT:ignoreHasSkill=0])'''&lt;br /&gt;
&lt;br /&gt;
Cast a skill&lt;br /&gt;
&lt;br /&gt;
'''CharacterAppearAt(GAMEOBJECT|FLOAT3:target, INT:playspawn)'''&lt;br /&gt;
&lt;br /&gt;
Appear at the target&lt;br /&gt;
&lt;br /&gt;
'''CharacterAppearOutOfSightTo(GAMEOBJECT:target, FLOAT:angle, INT:playspawn)'''&lt;br /&gt;
&lt;br /&gt;
Appears out of sight to the players from a certain angle while being able to reach target&lt;br /&gt;
&lt;br /&gt;
'''CharacterAppearOnTrailOutOfSightTo(CHARACTER:target, FLOAT:angle, INT:playspawn)'''&lt;br /&gt;
&lt;br /&gt;
Appears out of sight to the players, on its previous locations, from a certain angle while being able to reach target&lt;br /&gt;
&lt;br /&gt;
'''CharacterDisappear(FLOAT:angle[, INTEGER:isRunning=0])'''&lt;br /&gt;
&lt;br /&gt;
Move out of screen and go of stage, will run if &amp;lt;isRunning&amp;gt; is not 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetOffStage(-)'''&lt;br /&gt;
&lt;br /&gt;
Set Off Stage&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetOnStage(-)'''&lt;br /&gt;
&lt;br /&gt;
Set On Stage&lt;br /&gt;
&lt;br /&gt;
'''CharacterLookAt(GAMEOBJECT|FLOAT3|SPLINE:target[, INT:snapToTarget=0, INT:angleTolerance=0])'''&lt;br /&gt;
&lt;br /&gt;
Rotates the character to look at the target (Closest spline point in case of a spline).&lt;br /&gt;
&lt;br /&gt;
'''CharacterLookFrom(GAMEOBJECT|SPLINE:target[, INT:snapToTarget=0])'''&lt;br /&gt;
&lt;br /&gt;
Rotates to the character so it has the same rotation as the target (Closest spline point in case of a spline).&lt;br /&gt;
&lt;br /&gt;
'''CharacterFollow(CHARACTER:target, FLOAT:durationInSeconds, INT:run)'''&lt;br /&gt;
&lt;br /&gt;
Follow the target for a certain time&lt;br /&gt;
&lt;br /&gt;
'''CharacterFollowOwnerOrLeader(FLOAT:durationInSeconds, INT:run)'''&lt;br /&gt;
&lt;br /&gt;
Follow the leader or owner for a certain time&lt;br /&gt;
&lt;br /&gt;
'''CharacterWander(FLOAT|TRIGGER:range, FLOAT:durationInSeconds [, INT:run, GAMEOBJECT:anchor])'''&lt;br /&gt;
&lt;br /&gt;
Wander around for a certain time&lt;br /&gt;
&lt;br /&gt;
'''CharacterSwitchWeaponType(WEAPON:type)'''&lt;br /&gt;
&lt;br /&gt;
If necessary switch to the new weapon type&lt;br /&gt;
&lt;br /&gt;
'''CharacterFleeFrom(RELATION:relation, FLOAT:range)'''&lt;br /&gt;
&lt;br /&gt;
Run away from certain characters if necessary&lt;br /&gt;
'''&lt;br /&gt;
CharacterFleeFromSurface(SURFACE:surface)'''&lt;br /&gt;
&lt;br /&gt;
Run away from a certain surface if necessary&lt;br /&gt;
&lt;br /&gt;
'''CharacterFleeFromDangerousSurface(-)'''&lt;br /&gt;
&lt;br /&gt;
Run away from a dangerous surfaces if necessary&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddSourcePoints(CHARACTER:character, INT:amount)'''&lt;br /&gt;
&lt;br /&gt;
Adds x source points (x can be negative to substract)&lt;br /&gt;
&lt;br /&gt;
'''CharacterDie(CHARACTER:character[, DEATH:type=DoT])'''&lt;br /&gt;
&lt;br /&gt;
Kills the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterHeal(CHARACTER:character, FLOAT:percentage)'''&lt;br /&gt;
&lt;br /&gt;
Heals the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterConsume(CHARACTER:character, POTION:potion)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character consume a potion. Doesn't cost any AP and will just execute the result of the potion.&lt;br /&gt;
&lt;br /&gt;
'''CharacterDisableAllCrimes(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Disables all generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterEnableAllCrimes(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Enables all generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
'''&lt;br /&gt;
CharacterEnableCrime(CHARACTER:target, STRING:crime, ...)'''&lt;br /&gt;
&lt;br /&gt;
Enables the specified generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterDisableCrime(CHARACTER:target, STRING:crime, ...)'''&lt;br /&gt;
&lt;br /&gt;
Disables the specified generic behaviours for &amp;lt;target&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetLongInvestigationDuration(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Doubles the time it takes for the investigation to time out. Use this when the character needs to move a long path before investigating.&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiCalculate(-)'''&lt;br /&gt;
&lt;br /&gt;
Calculate the AI of the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiStopCalculate(-)'''&lt;br /&gt;
&lt;br /&gt;
Stop the calculation of the AI of the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiFinishMoveSkill(-)'''&lt;br /&gt;
&lt;br /&gt;
Finish the current MoveSkill.&lt;br /&gt;
'''&lt;br /&gt;
CharacterAiAddInterestingItem(CHARACTER:character, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Make it interesting for the AI to destroy that Item&lt;br /&gt;
&lt;br /&gt;
'''CharacterAiRemoveInterestingItem(CHARACTER:character, ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Make it no longer interesting for the AI to destroy that Item&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetArchetype(CHARACTER:character, ARCHETYPE:archetype)'''&lt;br /&gt;
&lt;br /&gt;
Sets the archetype of the character, used in AI calculations&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetStoryNPC(CHARACTER:character, INT:bool)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character storyNPC or not.&lt;br /&gt;
'''&lt;br /&gt;
CharacterAddActionPoints(CHARACTER:character, INT:amount)'''&lt;br /&gt;
&lt;br /&gt;
Give character some action points&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetImmortal(CHARACTER:character, INT:bool)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character immortal or not. (Allow dying)&lt;br /&gt;
&lt;br /&gt;
'''CharacterPlayEffect(CHARACTER:character, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect on the character and it follows the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterPlayLoopEffect(OUT INT64:effectHandle, CHARACTER:character, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays a looping effect on the character and it follows the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterEvent(CHARACTER:character, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw a character event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''CharacterItemEvent(CHARACTER:character, ITEM:item, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw a character/item event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''CharacterCharacterEvent(CHARACTER:character1, CHARACTER:character2, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw a character/character event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetRelationIndivToIndiv(CHARACTER:source, CHARACTER:target, INT:relation)'''&lt;br /&gt;
&lt;br /&gt;
Changes the relationship between 2 characters.&lt;br /&gt;
'''&lt;br /&gt;
CharacterForceUpdate(INT:forceUpdate)'''&lt;br /&gt;
&lt;br /&gt;
Makes sure the attached character is always being update or not. &lt;br /&gt;
'''&lt;br /&gt;
CharacterSetEnemy(CHARACTER:character, CHARACTER:enemy)'''&lt;br /&gt;
&lt;br /&gt;
Sets the current enemy of character&lt;br /&gt;
&lt;br /&gt;
'''CharacterApplyStatus(CHARACTER:character, STATUS:statusId [, INT:turns=null, INT:force=0])'''&lt;br /&gt;
&lt;br /&gt;
Applies the status to the character When turns is -1 it's a permanent status When turns is -2 it's a keep alive status (which means it will die if it's not applied again within 1 second) &lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveStatus(CHARACTER:character, STATUS:statusId [, STATUS:reasonStatusID=null])'''&lt;br /&gt;
&lt;br /&gt;
Removes the status from the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterDestroy(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Destroys the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetCanSpotSneakers(CHARACTER:character, INT:enabled)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the character can spot sneaking characters.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetAttackOfOpportunity(CHARACTER:character, INT:enabled)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the fact if the character can do attack of opportunities.&lt;br /&gt;
&lt;br /&gt;
'''CharacterResurrect(CHARACTER:character [, INT:Percentage = 100])'''&lt;br /&gt;
&lt;br /&gt;
Resurrects the character at [2]% health.&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddToInventory(CHARACTER:character, FIXEDSTRING:itemStatsObject[, INT:amount, INT:showInTrade=1])'''&lt;br /&gt;
&lt;br /&gt;
Add the item to the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveFromInventory(CHARACTER:character, FIXEDSTRING:itemStatsObject[, INT:amount])'''&lt;br /&gt;
&lt;br /&gt;
Remove the item from the character. If Amount is -1, then all are removed&lt;br /&gt;
&lt;br /&gt;
'''CharacterDrinkPotion(FIXEDSTRING:statID)'''&lt;br /&gt;
&lt;br /&gt;
Makes the character drink a potion from the inventory.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetAnimationOverride(CHARACTER:character, FIXEDSTRING:animation)'''&lt;br /&gt;
&lt;br /&gt;
Sets an animation override, only walk/run/die animations can override it.&lt;br /&gt;
&lt;br /&gt;
'''CharacterUseActionPoints(CHARACTER:character, INT:amount [, OUT INT:succeeded])'''&lt;br /&gt;
&lt;br /&gt;
Uses x action points&lt;br /&gt;
&lt;br /&gt;
'''CharacterAddTreasureTable(CHARACTER:character, FIXEDSTRING:treasureTable)'''&lt;br /&gt;
&lt;br /&gt;
Adds &amp;lt;treasureTable&amp;gt; to the treasure list of &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterRemoveTreasureTable(CHARACTER:character, FIXEDSTRING:treasureTable)'''&lt;br /&gt;
&lt;br /&gt;
Removes &amp;lt;treasureTable&amp;gt; from the treasure list of &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterClearTreasureTables(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Removes all treasure tables from &amp;lt;character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetTemporaryHostileRelation(CHARACTER:character, CHARACTER:otherCharacter)'''&lt;br /&gt;
&lt;br /&gt;
Creates a temporary hostile relation between the 2 characters!&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetFightMode(CHARACTER:character, INT:fight [, INT:force=0])'''&lt;br /&gt;
&lt;br /&gt;
Set the character in sheath/unsheated mode.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetStats(CHARACTER:character, FIXEDSTRING:statsEntry [, INT:keepVitality=0, INT:keepAP=0, INT:keepLevel=0, OUT FLOAT:currentHP])'''&lt;br /&gt;
&lt;br /&gt;
Applies &amp;lt;statsEntry&amp;gt; from character.xlsm to &amp;lt;character&amp;gt;, returns &amp;lt;currentHP&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetWalkSpeedOverride(CHARACTER:character, INTEGER:override [, FLOAT:walkSpeed])'''&lt;br /&gt;
&lt;br /&gt;
Sets walk speed override of &amp;lt;character&amp;gt;, removes it if &amp;lt;override&amp;gt; is 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetRunSpeedOverride(CHARACTER:character, INTEGER:override [, FLOAT:runSpeed])'''&lt;br /&gt;
&lt;br /&gt;
Sets run speed override of &amp;lt;character&amp;gt;, removes it if &amp;lt;override&amp;gt; is 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetHasDialog(CHARACTER:character, INTEGER:bool)'''&lt;br /&gt;
&lt;br /&gt;
Enables/Disables the dialog of the character&lt;br /&gt;
&lt;br /&gt;
'''CharacterInitPatrol(SPLINE:spline, INT:splineIndex, INT:reversed, INT:running)'''&lt;br /&gt;
&lt;br /&gt;
Start patroling from the given index along the given spline with the given character.&lt;br /&gt;
&lt;br /&gt;
'''CharacterStartPatrol(SPLINE:spline, INT:splineIndex, INT:reversed, INT:running)'''&lt;br /&gt;
&lt;br /&gt;
Start patroling from the given index along the given spline with the given character.&lt;br /&gt;
&lt;br /&gt;
'''CharacterStopPatrol(-)'''&lt;br /&gt;
&lt;br /&gt;
Let the character stop patrolling whatever spline he's on!&lt;br /&gt;
&lt;br /&gt;
'''CharacterInterruptPatrol(-)'''&lt;br /&gt;
&lt;br /&gt;
Call when the patrol should interrupt so the guard stops moving to the next spline. If this is called when the character is deactivated, a caret will take his place.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetAnimationSetOverride(CHARACTER:source, FIXEDSTRING:override)'''&lt;br /&gt;
&lt;br /&gt;
Sets an animation set override for a character. Empty fixedstring clears the override.&lt;br /&gt;
&lt;br /&gt;
'''CharacterSetFloating(CHARACTER:target, INTEGER:isFloating)'''&lt;br /&gt;
&lt;br /&gt;
Sets &amp;lt;target&amp;gt; floating if &amp;lt;isFloating&amp;gt; is not 0&lt;br /&gt;
&lt;br /&gt;
'''CharacterResetCooldowns(CHARACTER:target)'''&lt;br /&gt;
&lt;br /&gt;
Resets the skill cooldowns for &amp;lt;target&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ItemEvent(ITEM:item, STRING:eventName)'''&lt;br /&gt;
&lt;br /&gt;
Throw an item event which you can catch in scripts and story&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayAnimation(FIXEDSTRING:animation)'''&lt;br /&gt;
&lt;br /&gt;
Plays an animation on the item&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayAnimationTo(FIXEDSTRING:animation, FLOAT:targetPercentage, [FLOAT:speed])'''&lt;br /&gt;
&lt;br /&gt;
Plays an animation on the item to the target time (percentage of the total duration)&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayEffect(ITEM:item, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays an effect on the item and it follows the item&lt;br /&gt;
&lt;br /&gt;
'''ItemPlayLoopEffect(OUT INT:effectHandle, ITEM:item, STRING:effect [,FIXEDSTRING:boneName])'''&lt;br /&gt;
&lt;br /&gt;
Plays a looping effect on the item and it follows the item&lt;br /&gt;
&lt;br /&gt;
'''ItemSetOnStage(ITEM:item, INTEGER:bool)'''&lt;br /&gt;
&lt;br /&gt;
Sets an item on or offstage&lt;br /&gt;
&lt;br /&gt;
'''ItemSetCanInteract(ITEM:item, INTEGER:bool)'''&lt;br /&gt;
&lt;br /&gt;
Sets an item (not) interactible&lt;br /&gt;
&lt;br /&gt;
'''ItemClose(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Close an item&lt;br /&gt;
&lt;br /&gt;
'''ItemOpen(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Open an item&lt;br /&gt;
&lt;br /&gt;
'''ItemDrop(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Drop an item&lt;br /&gt;
&lt;br /&gt;
'''ItemLock(ITEM:item, FIXEDSTRING:key)'''&lt;br /&gt;
&lt;br /&gt;
Lock an item&lt;br /&gt;
&lt;br /&gt;
'''ItemUnlock(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Unlock an item&lt;br /&gt;
&lt;br /&gt;
'''ItemApplyStatus(ITEM:item, STATUS:statusId [, INT:turns=null, INT:force=0])'''&lt;br /&gt;
&lt;br /&gt;
Applies the status to the item When turns is -1 it's a permanent status When turns is -2 it's a keep alive status (which means it will die if it's not applied again within 1 second) &lt;br /&gt;
&lt;br /&gt;
'''ItemRemoveStatus(ITEM:item, STATUS:statusId)'''&lt;br /&gt;
&lt;br /&gt;
Removes the status from the item&lt;br /&gt;
&lt;br /&gt;
'''ItemDie(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Kills the item&lt;br /&gt;
&lt;br /&gt;
'''ItemMoveTo(GAMEOBJECT|FLOAT3:target, FLOAT:velocity, FLOAT:acceleration, INTEGER:matchTargetRotation)'''&lt;br /&gt;
&lt;br /&gt;
Moves the item to the target&lt;br /&gt;
&lt;br /&gt;
'''ItemToInventory(ITEM:item, CHARACTER|ITEM:target [,INT:amount=-1])'''&lt;br /&gt;
&lt;br /&gt;
Moves the item to the target's inventory&lt;br /&gt;
&lt;br /&gt;
'''ItemLookAt(GAMEOBJECT:target, FLOAT:degreesPerSecond)'''&lt;br /&gt;
&lt;br /&gt;
Rotates the item to look at the target&lt;br /&gt;
&lt;br /&gt;
'''ItemDestroy(ITEM:item)'''&lt;br /&gt;
&lt;br /&gt;
Destroys the item&lt;br /&gt;
&lt;br /&gt;
'''ItemSetAmount(ITEM:item, INT:amount)'''&lt;br /&gt;
&lt;br /&gt;
Change the amount of the item&lt;br /&gt;
&lt;br /&gt;
'''IterateItemsInInventory(CHARACTER|ITEM:source, FIXEDSTRING:eventname[, FIXEDSTRING:tag])'''&lt;br /&gt;
&lt;br /&gt;
Launch iterate event for each iten in source's inventory. If you pass a tag, it has to have that tag.&lt;br /&gt;
&lt;br /&gt;
'''ItemAddCharges(ITEM:TargetItem, INT:charges)'''&lt;br /&gt;
&lt;br /&gt;
Add/subtract charges from an item&lt;br /&gt;
&lt;br /&gt;
'''ItemResetChargesToInitial(ITEM:TargetItem)'''&lt;br /&gt;
&lt;br /&gt;
Resets charges from item to initial state&lt;br /&gt;
&lt;br /&gt;
'''MakePeace(CHARACTER:Source, CHARACTER:Target[, INT:IgnoreVote = 1])'''&lt;br /&gt;
&lt;br /&gt;
Make peace between users of the characters&lt;br /&gt;
&lt;br /&gt;
'''MakeWar(CHARACTER:Source, CHARACTER:Target[, INT:IgnoreVote = 1])'''&lt;br /&gt;
&lt;br /&gt;
Make war between users of the characters&lt;br /&gt;
&lt;br /&gt;
'''FindSurface(OUT FLOAT3:result, GAMEOBJECT|FLOAT3:source, FLOAT:minRange, FLOAT:maxRange, SURFACE:type [,CHARACTER:alignSource, INT:minEnemiesInSurface, INT:maxAlliesInSurface, INT:minimumCellCount])'''&lt;br /&gt;
&lt;br /&gt;
Finds the closest surface of a specific type.&lt;br /&gt;
&lt;br /&gt;
'''FindValidPosition(INOUT FLOAT3:position, FLOAT:radius[, CHARACTER|ITEM:object=null])'''&lt;br /&gt;
&lt;br /&gt;
Finds the closest valid position (where the object can stand.)&lt;br /&gt;
&lt;br /&gt;
'''FindPosition(INOUT FLOAT3:position, CHARACTER:source, INT:canStand, INT:checkSight, FLOAT:minRadius, FLOAT:maxRadius, FLOAT:rangeCheck, CHARACTER:alignSource, INT:minAllies, INT:maxAllies, INT:minEnemies, INT:maxEnemies [,FIXEDSTRING:AiHintTag=null, INT:forceHint=0, FLOAT3:SourcePosition])'''&lt;br /&gt;
&lt;br /&gt;
Finds the closest position from the source (within radius) where the conditions are matched. &lt;br /&gt;
&lt;br /&gt;
'''Cast(OUT OBJECT variable, OBJECT value)'''&lt;br /&gt;
&lt;br /&gt;
Casts the value to the variable.&lt;br /&gt;
&lt;br /&gt;
'''StringConcatenate(STRING:stringA, STRING:stringB, OUT STRING:resultingString)'''&lt;br /&gt;
&lt;br /&gt;
Appends stringB to stringA. Resulting string is stored in the third parameter.&lt;br /&gt;
&lt;br /&gt;
== QUERIES ==&lt;br /&gt;
&lt;br /&gt;
GetPosition(GAMEOBJECT:object,OUT FLOAT3:src)&lt;br /&gt;
&lt;br /&gt;
Get the current position of an object&lt;br /&gt;
&lt;br /&gt;
GetForwardDirection(GAMEOBJECT:object,OUT FLOAT3:direction)&lt;br /&gt;
&lt;br /&gt;
Get the current forward direction of an object&lt;br /&gt;
&lt;br /&gt;
GetRightDirection(GAMEOBJECT:object,OUT FLOAT3:direction)&lt;br /&gt;
&lt;br /&gt;
Get the current right direction of an object&lt;br /&gt;
&lt;br /&gt;
GetUpDirection(GAMEOBJECT:object,OUT FLOAT3:direction)&lt;br /&gt;
&lt;br /&gt;
Get the current up direction of an object&lt;br /&gt;
&lt;br /&gt;
GetDirection(GAMEOBJECT|FLOAT3:src,GAMEOBJECT|FLOAT3:target,OUT FLOAT3:direction[, OUT FLOAT:distance])&lt;br /&gt;
&lt;br /&gt;
Get the direction from src to target (optional: returns the distance between the objects as well)&lt;br /&gt;
&lt;br /&gt;
GetRotation(GAMEOBJECT:object, OUT FLOAT3:vector)&lt;br /&gt;
&lt;br /&gt;
Get the rotation of an object&lt;br /&gt;
&lt;br /&gt;
CharacterGetTargetSpline(INT: SplineIndex)&lt;br /&gt;
&lt;br /&gt;
Returns the spline index the character is currently walking towards, or -1 if he is not active on a spline.&lt;br /&gt;
&lt;br /&gt;
IsEqual(OBJECT:variable, OBJECT:variable)&lt;br /&gt;
&lt;br /&gt;
Compares both objects and see if they are equal.&lt;br /&gt;
&lt;br /&gt;
IsLessThen(INT|FLOAT:variable, INT|FLOAT:variable)&lt;br /&gt;
&lt;br /&gt;
Compares both objects and see if the first one is smaller.&lt;br /&gt;
&lt;br /&gt;
IsGreaterThen(INT|FLOAT:variable, INT|FLOAT:variable)&lt;br /&gt;
&lt;br /&gt;
Compares both objects and see if the first one is bigger.&lt;br /&gt;
&lt;br /&gt;
IsRandom(FLOAT:percentage)&lt;br /&gt;
&lt;br /&gt;
Each time this condition is checked, it will succeed with a chance of the percentage (between 0 and 1)&lt;br /&gt;
&lt;br /&gt;
IsRound(INT:roundNumber)&lt;br /&gt;
&lt;br /&gt;
Checks if we are currently in combat in round x&lt;br /&gt;
&lt;br /&gt;
IsInSurface(OBJECT|FLOAT3:target, SURFACE:type[, FLOAT:radius])&lt;br /&gt;
&lt;br /&gt;
Check if the character, item, trigger or position is currently within the specific surface.&lt;br /&gt;
&lt;br /&gt;
IsInDangerousSurface(OBJECT|FLOAT3:target[, CHARACTER:character, FLOAT:radius])&lt;br /&gt;
&lt;br /&gt;
Check if &amp;lt;target&amp;gt; is currently in on a dangerous surface. Uses &amp;lt;character&amp;gt; for path influences if provided (is necessary with non-character targets)&lt;br /&gt;
&lt;br /&gt;
IsInDialog(CHARACTER|ITEM:target[, INT:ignoreAutomatedDialogs=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character or item is currently in a dialog, optionally ignoring automated dialogs&lt;br /&gt;
&lt;br /&gt;
IsInAutomatedDialog(CHARACTER|ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Check if the character or item is currently in an automated dialog&lt;br /&gt;
&lt;br /&gt;
GetDistance(OUT FLOAT:distance, GAMEOBJECT|FLOAT3:source, GAMEOBJECT|FLOAT3:target)&lt;br /&gt;
&lt;br /&gt;
Returns the distance between 2 positions&lt;br /&gt;
&lt;br /&gt;
GetDistance2D(OUT FLOAT:distance, GAMEOBJECT|FLOAT3:source, GAMEOBJECT|FLOAT3:target)&lt;br /&gt;
Returns the 2D distance between 2 positions (ignores height)&lt;br /&gt;
&lt;br /&gt;
GetInnerDistance(OUT FLOAT:distance, GAMEOBJECT:source, GAMEOBJECT:target)&lt;br /&gt;
&lt;br /&gt;
Returns the distance between 2 gameobjects (character, item, trigger, ...) Their bounds are already subtracted.&lt;br /&gt;
&lt;br /&gt;
GetPosition(GAMEOBJECT:object, OUT FLOAT3:position)&lt;br /&gt;
&lt;br /&gt;
Returns the position of a gameobject (character, item, trigger, ...)&lt;br /&gt;
&lt;br /&gt;
GetVar(OUT OBJECT:returnValue, CHARACTER|ITEM:target, FIXEDSTRING:varName)&lt;br /&gt;
&lt;br /&gt;
Gets a global variable from the target&lt;br /&gt;
&lt;br /&gt;
GetClosestPlayer(OUT CHARACTER:player, GAMEOBJECT|FLOAT3:source)&lt;br /&gt;
&lt;br /&gt;
Gets the closest player near the source, default being being the object itself&lt;br /&gt;
&lt;br /&gt;
GetPlayerCount(OUT INT:playerCount)&lt;br /&gt;
&lt;br /&gt;
Gets the number of players in the party&lt;br /&gt;
&lt;br /&gt;
GetPlayerByIndex(OUT CHARACTER:returnCharacter, INT:playerIndex)&lt;br /&gt;
&lt;br /&gt;
Gets a player from the party by index&lt;br /&gt;
&lt;br /&gt;
GetRandomCharacter(OUT CHARACTER:returnCharacter, [INT:canBeSelf=0, INT:canBePlayer=0])&lt;br /&gt;
&lt;br /&gt;
Gets a random character in the current level&lt;br /&gt;
&lt;br /&gt;
ContainsSurface(GAMEOBJECT|FLOAT3:source, FLOAT:radius, SURFACE:type,)&lt;br /&gt;
&lt;br /&gt;
Checks if there is any surface of the type within a radius of the source&lt;br /&gt;
&lt;br /&gt;
IsSurface(GAMEOBJECT|FLOAT3:source, FLOAT:radius, SURFACE:type,)&lt;br /&gt;
&lt;br /&gt;
Checks if the whole radius around the source is the specified surface type&lt;br /&gt;
&lt;br /&gt;
IsObjectOnObject(CHARACTER|ITEM:source,CHARACTER|ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Checks if the source is standing on the target&lt;br /&gt;
&lt;br /&gt;
GetX(FLOAT3:vector, OUT FLOAT:value)&lt;br /&gt;
&lt;br /&gt;
Returns the X component of the vector&lt;br /&gt;
&lt;br /&gt;
GetY(FLOAT3:vector, OUT FLOAT:value)&lt;br /&gt;
&lt;br /&gt;
Returns the Y component of the vector&lt;br /&gt;
&lt;br /&gt;
GetZ(FLOAT3:vector, OUT FLOAT:value)&lt;br /&gt;
&lt;br /&gt;
Returns the Z component of the vector&lt;br /&gt;
&lt;br /&gt;
CanSee(GAMEOBJECT|FLOAT3:source, GAMEOBJECT|FLOAT3:target[, INT:addProjectileTargetGroundOffset=0])&lt;br /&gt;
&lt;br /&gt;
Check if the sight is blocked between 2 points.&lt;br /&gt;
&lt;br /&gt;
IsVisible(CHARACTER|ITEM:object)&lt;br /&gt;
&lt;br /&gt;
Check if the object is set invisible or not with SetVisible.&lt;br /&gt;
&lt;br /&gt;
GetTextDuration(CHARACTER|ITEM:object, FIXEDSRTING:key, OUT FLOAT:duration)&lt;br /&gt;
&lt;br /&gt;
Gets how long a text needs to be displayed&lt;br /&gt;
&lt;br /&gt;
IsCasual(-)&lt;br /&gt;
&lt;br /&gt;
Returns if the current game mode is Casual&lt;br /&gt;
&lt;br /&gt;
IsHardcore(-)&lt;br /&gt;
&lt;br /&gt;
Returns if the current game mode is Hardcore&lt;br /&gt;
&lt;br /&gt;
IsTagged(GAMEOBJECT:object, FIXEDSTRING:tag)&lt;br /&gt;
&lt;br /&gt;
Check if the object is tagged.&lt;br /&gt;
&lt;br /&gt;
TranslatedStringKeyExists(FIXEDSTRING:key)&lt;br /&gt;
&lt;br /&gt;
Check if the TranslatedString key exists.&lt;br /&gt;
&lt;br /&gt;
IsInCombat(CHARACTER|ITEM:object)&lt;br /&gt;
&lt;br /&gt;
Returns true if the object is in combat.&lt;br /&gt;
&lt;br /&gt;
IsInCombatWith(CHARACTER|ITEM:object, CHARACTER|ITEM:object)&lt;br /&gt;
&lt;br /&gt;
Returns true if the objects are in combat with each other.&lt;br /&gt;
&lt;br /&gt;
IsFacing(GAMEOBJECT:source, GAMEOBJECT|FLOAT3:target, [INT:angle=90])&lt;br /&gt;
&lt;br /&gt;
Returns true if the object is facing the position within the given angle.&lt;br /&gt;
&lt;br /&gt;
GameIsSaving(-)&lt;br /&gt;
&lt;br /&gt;
Returns true if the game is saving.&lt;br /&gt;
&lt;br /&gt;
GameIsLoading(-)&lt;br /&gt;
&lt;br /&gt;
Returns true if the game is loading.&lt;br /&gt;
&lt;br /&gt;
GetUserCount(OUT INT:userCount)&lt;br /&gt;
&lt;br /&gt;
Returns the user count.&lt;br /&gt;
&lt;br /&gt;
GetCurrentCharacter(OUT CHARACTER:character, INT:user)&lt;br /&gt;
&lt;br /&gt;
Returns the character currently being controlled by the specified user.&lt;br /&gt;
&lt;br /&gt;
GetCurrentLevel(OUT FIXEDSTRING:currentLevel)&lt;br /&gt;
&lt;br /&gt;
Returns the current levelname&lt;br /&gt;
&lt;br /&gt;
GetAIBounds(CHARACTER|ITEM:source, OUT FLOAT:bounds)&lt;br /&gt;
&lt;br /&gt;
Returns AI bounds of &amp;lt;source&amp;gt; in &amp;lt;bounds&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HasGlobalFlag(FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Global Flag is set&lt;br /&gt;
&lt;br /&gt;
HasFlag(CHARACTER|ITEM:object, FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Flag is set on the Object&lt;br /&gt;
&lt;br /&gt;
HasUserFlag(CHARACTER:object, FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Flag is set on the user's characters&lt;br /&gt;
&lt;br /&gt;
HasPartyFlag(CHARACTER:object, FIXEDSTRING:flagName)&lt;br /&gt;
&lt;br /&gt;
Returns if the Flag is set on the party's characters&lt;br /&gt;
&lt;br /&gt;
DialogExists(STRING:dialogue)&lt;br /&gt;
&lt;br /&gt;
Returns true if the dialogue exists.&lt;br /&gt;
&lt;br /&gt;
IsActive(CHARACTER|ITEM:Object)&lt;br /&gt;
&lt;br /&gt;
Returns if the character or item is currently active.&lt;br /&gt;
&lt;br /&gt;
ListGetSize(LIST&amp;lt;OBJECT&amp;gt;:list, out INT:size)&lt;br /&gt;
&lt;br /&gt;
Returns the number of elements in &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ListGet(LIST&amp;lt;OBJECT&amp;gt;:list, INT:index, out OBJECT:entry)&lt;br /&gt;
&lt;br /&gt;
Returns &amp;lt;entry&amp;gt; at &amp;lt;index&amp;gt; of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ListGetRandom(LIST&amp;lt;OBJECT&amp;gt;:list, out OBJECT:entry)&lt;br /&gt;
&lt;br /&gt;
Returns a random &amp;lt;entry&amp;gt; of &amp;lt;list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IsBoss(CHARACTER|ITEM:Object)&lt;br /&gt;
&lt;br /&gt;
Returns true if the entity is tagged as a boss&lt;br /&gt;
&lt;br /&gt;
IsProjectileSkill(SKILL:skill)&lt;br /&gt;
&lt;br /&gt;
Returns true if the skill is a ranged skill (uses a projectile)&lt;br /&gt;
&lt;br /&gt;
IsValidSkillTarget(CHARACTER:source, OBJECT|FLOAT3:target, SKILLID:skill[, INTEGER:ignoreRangeCheck=0])&lt;br /&gt;
&lt;br /&gt;
Checks whether &amp;lt;target&amp;gt; is a valid target for &amp;lt;skill&amp;gt; at &amp;lt;source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GetFaction(OUT FIXEDSTRING:faction, CHARACTER|ITEM:character)&lt;br /&gt;
&lt;br /&gt;
Returns the faction of the provided character or item&lt;br /&gt;
&lt;br /&gt;
IsInActiveTurn(CHARACTER|ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Returns true if it's the character's or item's turn in combat.&lt;br /&gt;
&lt;br /&gt;
IsSkillActive(CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; has &amp;lt;skillId&amp;gt; active (in memory).&lt;br /&gt;
&lt;br /&gt;
HasSkillAi(SKILLID:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns true if the skill is using the new Ai system&lt;br /&gt;
&lt;br /&gt;
IsInArena(CHARACTER::character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character is in an arena fight&lt;br /&gt;
&lt;br /&gt;
CrimeGetType(INTEGER:crimeId, OUT STRING:crimeType)&lt;br /&gt;
&lt;br /&gt;
Returns the type of the crime with this id.&lt;br /&gt;
&lt;br /&gt;
CrimeGetCriminals(INTEGER:crimeId, OUT CHARACTER:criminal1, OUT CHARACTER:criminal2, OUT CHARACTER:criminal3, OUT CHARACTER:criminal4)&lt;br /&gt;
&lt;br /&gt;
Returns the criminals of that crime. They might all be null.&lt;br /&gt;
&lt;br /&gt;
IsSourceSkill(SKILL:skill)&lt;br /&gt;
&lt;br /&gt;
Returns true if the skill is a source skill.&lt;br /&gt;
&lt;br /&gt;
IsInGameMasterMode(-)&lt;br /&gt;
&lt;br /&gt;
Returns true if the game in game master mode.&lt;br /&gt;
&lt;br /&gt;
CharacterGet(OUT CHARACTER:character, GAMEOBJECT|FLOAT3:src, FLOAT:range, COMPARE:howTo, COMPAREFUNC:compareFunc[, RELATION: relation, SURFACE:surface, STATUS:status, TALENT:talent, CHARACTER:inSightOf, FIXEDSTRING:tag])&lt;br /&gt;
&lt;br /&gt;
Get a character within a certain range conforming to the filled in restraints. &lt;br /&gt;
&lt;br /&gt;
CharacterCount(OUT INT:count, GAMEOBJECT|FLOAT3:src, FLOAT:range, [RELATION: relation, SURFACE:surface, STATUS:status, TALENT:talent, CHARACTER:inSightOf])&lt;br /&gt;
&lt;br /&gt;
Counts the characters within a certain range conforming to the filled in restraints.&lt;br /&gt;
&lt;br /&gt;
CharacterGetOwner(OUT CHARACTER:owner, CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get the character's owner&lt;br /&gt;
&lt;br /&gt;
CharacterGetFollow(OUT CHARACTER:to follow, CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get the character to follow&lt;br /&gt;
&lt;br /&gt;
CharacterGetEnemy(OUT CHARACTER:current enemy, CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get current enemy of character&lt;br /&gt;
&lt;br /&gt;
CharacterCanCast(CHARACTER:source, SKILL:skillId, [ITEM:skillItem=null, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can cast the skill: will check cooldown, actionpoints&lt;br /&gt;
&lt;br /&gt;
CharacterCanSitOnItem(CHARACTER:source, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Check if the character source can sit or lie on an item.&lt;br /&gt;
&lt;br /&gt;
CharacterCanDrinkPotion(CHARACTER:source, FIXEDSTRING:potionID[, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can drink the potion: will check inv and actionpoints&lt;br /&gt;
&lt;br /&gt;
CharacterCanUseItem(CHARACTER:source, ITEM:item[, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can use the item in the world&lt;br /&gt;
&lt;br /&gt;
CharacterCanUseItemInInventory(CHARACTER:source, ITEM:item[, INT:ignoreActionPoints=0])&lt;br /&gt;
&lt;br /&gt;
Check if the character source can use the item in his inventory&lt;br /&gt;
&lt;br /&gt;
CharacterCanSee(CHARACTER:watchingChar, CHARACTER|ITEM:target [, INT:forceUpdate=0])&lt;br /&gt;
&lt;br /&gt;
Check if character has target in his line of sight. &lt;br /&gt;
&lt;br /&gt;
CharacterCanShoot(CHARACTER:source, GAMEOBJECT|FLOAT3:target)&lt;br /&gt;
&lt;br /&gt;
Check if the character can shoot the target.&lt;br /&gt;
&lt;br /&gt;
CharacterIsPlayer(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if the character is a player&lt;br /&gt;
&lt;br /&gt;
CharacterIsInParty(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if the character is in the party&lt;br /&gt;
&lt;br /&gt;
CharacterIsEnemy(CHARACTER:source, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is enemy of source&lt;br /&gt;
&lt;br /&gt;
CharacterIsAlly(CHARACTER:source, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is ally of source&lt;br /&gt;
&lt;br /&gt;
CharacterIsNeutral(CHARACTER:source, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is neutral of source&lt;br /&gt;
&lt;br /&gt;
CharacterIsDead(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is dead&lt;br /&gt;
&lt;br /&gt;
CharacterIsMoving(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is moving (speed &amp;gt; 0)&lt;br /&gt;
&lt;br /&gt;
CharacterIsSummon(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a summon&lt;br /&gt;
&lt;br /&gt;
CharacterIsPartyFollower(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a party follower&lt;br /&gt;
&lt;br /&gt;
CharacterIsStoryNPC(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a story NPC&lt;br /&gt;
&lt;br /&gt;
CharacterInWeaponRange(CHARACTER:character, CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Check if target is in the current's weapon range&lt;br /&gt;
&lt;br /&gt;
CharacterInTouchRange(CHARACTER:character, CHARACTER:targetChar)&lt;br /&gt;
&lt;br /&gt;
Check if target is in the character's touch range &lt;br /&gt;
&lt;br /&gt;
CharacterHasStatus(CHARACTER:character, STATUS:statusId[, FIXEDSTRING:extraData])&lt;br /&gt;
&lt;br /&gt;
Check if character currently has the status. ExtraData can be filled in for some statuses: - Consume: statsid of the item - Shield: skillid of the shield&lt;br /&gt;
&lt;br /&gt;
CharacterGetStatusSourceCharacter(CHARACTER:character, STATUS:statusId, OUT CHARACTER:source[, FIXEDSTRING:extraData])&lt;br /&gt;
&lt;br /&gt;
Get the source character of a status&lt;br /&gt;
&lt;br /&gt;
CharacterGetStatusSourceItem(CHARACTER:character, STATUS:statusId, OUT ITEM:source[, FIXEDSTRING:extraData])&lt;br /&gt;
&lt;br /&gt;
Get the source item of a status&lt;br /&gt;
&lt;br /&gt;
CharacterHasTalent(CHARACTER:character, TALENT:talent)&lt;br /&gt;
&lt;br /&gt;
Check if character currently has the talent&lt;br /&gt;
&lt;br /&gt;
CharacterHasSkill(CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Check if character currently has the skill&lt;br /&gt;
&lt;br /&gt;
CharacterHasWeaponType(CHARACTER:character, WEAPON:weaponTYPE [, INT:equipped])&lt;br /&gt;
&lt;br /&gt;
Check if character currently has a weapon of this type in his inventory or equipped&lt;br /&gt;
&lt;br /&gt;
CharacterGetStat(OUT FLOAT:statValue, CHARACTER:character, CHARACTERSTAT:statType)&lt;br /&gt;
&lt;br /&gt;
Returns the current value of the stat (Vitality, ...)&lt;br /&gt;
&lt;br /&gt;
CharacterGetSightRange(OUT FLOAT:range, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's sight range&lt;br /&gt;
&lt;br /&gt;
CharacterGetWeaponRange(OUT FLOAT:minRange, OUT FLOAT:maxRange, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's current weapon range&lt;br /&gt;
&lt;br /&gt;
CharacterGetTouchRange(OUT FLOAT:touchRange, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's current touch range&lt;br /&gt;
&lt;br /&gt;
CharacterGetSkillRange(OUT FLOAT:minRange, OUT FLOAT:maxRange,CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns the character's skill range&lt;br /&gt;
&lt;br /&gt;
CharacterGetSkillImpactRange(OUT FLOAT:areaRange, CHARACTER:character, SKILL:skillId)&lt;br /&gt;
&lt;br /&gt;
Returns the character's skill range&lt;br /&gt;
&lt;br /&gt;
CharacterIsInTrigger(CHARACTER:character, TRIGGER:trigger)&lt;br /&gt;
&lt;br /&gt;
Check if character is in given trigger&lt;br /&gt;
&lt;br /&gt;
CharacterGetAbility(OUT INT:value, CHARACTER:character, ABILITY:ability)&lt;br /&gt;
&lt;br /&gt;
Returns the character's value of the specified ability&lt;br /&gt;
&lt;br /&gt;
CharacterGetHostileCount(OUT INT:value, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns how many characters are targeting this character right now... You can iterate over them with IterateEnemiesOf.&lt;br /&gt;
&lt;br /&gt;
CharacterCanFight(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character can fight.&lt;br /&gt;
&lt;br /&gt;
CharacterGetTemplate(CHARACTER:character, OUT CHARACTERTEMPLATE:root)&lt;br /&gt;
&lt;br /&gt;
Returns the roottemplate of the character.&lt;br /&gt;
&lt;br /&gt;
CharacterCanSpotSneakers(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character can spot sneaking characters&lt;br /&gt;
&lt;br /&gt;
CharacterIsFloating(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Check if character is a floating character&lt;br /&gt;
&lt;br /&gt;
CharacterInCreation(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character is in character creation&lt;br /&gt;
&lt;br /&gt;
CharacterAvoidsTraps(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character avoids traps&lt;br /&gt;
&lt;br /&gt;
CharacterCheckRelation(CHARACTER:character, RELATION:relation)&lt;br /&gt;
&lt;br /&gt;
Returns true if relation check succeeds&lt;br /&gt;
&lt;br /&gt;
CharacterIsBetterOrEqualClass(CHARACTER:character, INT:currentScore, OUT INT:newScore, INT warriorScore, INT rogueScore, INT mageScore, INT clericScore, INT rangerScore)&lt;br /&gt;
&lt;br /&gt;
Returns true if score is higher or equal than the current score&lt;br /&gt;
&lt;br /&gt;
CharacterHasBeenHitBy(CHARACTER:character, DAMAGE_TYPE:damageType)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character was hit by this type.&lt;br /&gt;
&lt;br /&gt;
CharacterHasCastedSpellLastTurn(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character has casted a spell in his last turn.&lt;br /&gt;
&lt;br /&gt;
CharacterHasHadStatus(CHARACTER:character, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character has had a specific status this combat.&lt;br /&gt;
&lt;br /&gt;
CharacterHasAnimationOverride(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character has an animation override.&lt;br /&gt;
&lt;br /&gt;
CharacterCanUnlock(CHARACTER:character, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns true if the character can unlock the item (if the item is already unlocked it returns true!)&lt;br /&gt;
&lt;br /&gt;
CharacterGetReservedUserID(OUT INT:user, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns the character's reserved User id.&lt;br /&gt;
&lt;br /&gt;
CharacterGetRace(CHARACTER:character, OUT FIXEDSTRING:race)&lt;br /&gt;
&lt;br /&gt;
Returns the &amp;lt;character&amp;gt;'s race in &amp;lt;race&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterIsRace(CHARACTER:character, FIXEDSTRING:race)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt;'s race is &amp;lt;race&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterCanMoveItem(CHARACTER:character, ITEM:item, FLOAT:minRadius, FLOAT:maxRadius [, OUT FLOAT3:destination])&lt;br /&gt;
&lt;br /&gt;
Returns true + &amp;lt;destination&amp;gt; if &amp;lt;character&amp;gt; can move &amp;lt;item&amp;gt; somewhere between &amp;lt;minRadius&amp;gt; and &amp;lt;maxRadius&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterGetDeathType(CHARACTER:character, OUT FIXEDSTRING:deathType)&lt;br /&gt;
&lt;br /&gt;
Returns death type of &amp;lt;character&amp;gt; in &amp;lt;deathType&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterGetStillAnimation(CHARACTER:object, OUT FIXEDSTRING:stillAnimation)&lt;br /&gt;
&lt;br /&gt;
Returns the still animation to play&lt;br /&gt;
&lt;br /&gt;
CrimeTransferLeadership(INT: CrimeID[, FIXEDSTRING:Tag1,...])&lt;br /&gt;
&lt;br /&gt;
Try and transfer the leadership of this crime to someone else.&lt;br /&gt;
&lt;br /&gt;
CrimeGetLeadInvestigator(OUT CHARACTER:lead, INT: CrimeID)&lt;br /&gt;
&lt;br /&gt;
Returns the lead investigator for the crime.&lt;br /&gt;
&lt;br /&gt;
CharacterCanHitTargetWithRangedWeapon(CHARACTER:source, OBJECT|FLOAT3:target[, SKILL:skill = null])&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;source&amp;gt; can hit &amp;lt;target&amp;gt; with currently equipped ranged weapon. Will use &amp;lt;skill&amp;gt; instead of equipped weapon if provided.&lt;br /&gt;
&lt;br /&gt;
CharacterHasRangedWeapon(CHARACTER:character[, INT:checkInventory = 0])&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; has has ranged weapon. Checks for non-wielded weapons if &amp;lt;checkInventory&amp;gt; is 1&lt;br /&gt;
&lt;br /&gt;
CheckInteractionReach(CHARACTER:character, CHARACTER|ITEM: target)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; could interact with &amp;lt;target&amp;gt;. This is not checking ranges, but checking if there's too much of a height difference or too many obstacles in between.&lt;br /&gt;
&lt;br /&gt;
CharacterGetSourcePoints(CHARACTER:character, OUT INT: amount)&lt;br /&gt;
&lt;br /&gt;
Returns the amount of sourcepoints of &amp;lt;character&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CharacterAiIsCalculating(-)&lt;br /&gt;
&lt;br /&gt;
Returns if the character is still calculating the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchMoveSkillCommand(OUT SKILL:skill, OUT ITEM:skillItem, OUT FLOAT3:target)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Move Skill command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchSkillCommand(OUT SKILL:skill, OUT ITEM:skillItem, OUT FLOAT3 endPosition, OUT FLOAT3:target, OUT CHARACTER:target, OUT ITEM:target, OUT FLOAT3:target2, OUT CHARACTER:target2, OUT ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Skill command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchConsumeCommand(OUT ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Consume command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchAttackCommand(OUT FLOAT3:endPosition, OUT FLOAT3:target, OUT CHARACTER:target, OUT ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Attack command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterAiFetchFallbackCommand(OUT FLOAT3:targetPosition, OUT FLOAT3:lookAtPosition)&lt;br /&gt;
&lt;br /&gt;
Returns if the character has a Fallback command to execute according to the AI.&lt;br /&gt;
&lt;br /&gt;
CharacterGetArchetype(CHARACTER:character, OUT ARCHETYPE:archetype)&lt;br /&gt;
&lt;br /&gt;
Returns the archetype of the character.&lt;br /&gt;
&lt;br /&gt;
CharacterIsPolymorphedInto(CHARACTER:character, FIXEDSTRING:race)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; is polymorphed into &amp;lt;race&amp;gt;. Race can be a race (like HUMAN), but also a template (in case of a polymorph skill like Chicken Touch).&lt;br /&gt;
&lt;br /&gt;
CharacterIsPolymorphInteractionDisabled(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Returns true if &amp;lt;character&amp;gt; has his interaction disabled because of a polymorph.&lt;br /&gt;
&lt;br /&gt;
ItemGet(OUT ITEM:item, GAMEOBJECT|FLOAT3:src, FLOAT:range, COMPARE:howTo [, COMPAREFUNC:compareFunc, FIXEDSTRING:rootTemplate, FIXEDSTRING:tag])&lt;br /&gt;
&lt;br /&gt;
Get an item within a certain range conforming to the filled in restraints.&lt;br /&gt;
&lt;br /&gt;
ItemGetFromInventory(OUT ITEM:item, CHARACTER|ITEM:object [, FIXEDSTRING:statsId, FIXEDSTRING:tag, INT:isEquiped])&lt;br /&gt;
&lt;br /&gt;
Returns the first item in the inventory conforming to the filled in restraints.&lt;br /&gt;
&lt;br /&gt;
ItemIsInCharacterInventory(ITEM:item, CHARACTER:object)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is in the inventory of the character&lt;br /&gt;
&lt;br /&gt;
ItemIsInTrigger(ITEM:item, TRIGGER:trigger)&lt;br /&gt;
&lt;br /&gt;
Check if item is in given trigger&lt;br /&gt;
&lt;br /&gt;
ItemGetStat(OUT FLOAT:statValue, ITEM:item, ITEMSTAT:statType)&lt;br /&gt;
&lt;br /&gt;
Returns the current value of the stat (Weight, ...)&lt;br /&gt;
&lt;br /&gt;
ItemIsMoving(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is moving or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsFalling(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is falling or not. (after teleport)&lt;br /&gt;
&lt;br /&gt;
ItemIsOpening(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is opening or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsClosing(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is closing or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsLocked(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is locked or not.&lt;br /&gt;
&lt;br /&gt;
ItemIsMovable(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is movable or not.&lt;br /&gt;
&lt;br /&gt;
ItemCanBeLockPicked(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is can be opened by lockpicking.&lt;br /&gt;
&lt;br /&gt;
ItemIsOpen(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is open or not.&lt;br /&gt;
&lt;br /&gt;
IsStoryItem(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is a story item.&lt;br /&gt;
&lt;br /&gt;
ItemHasStatus(ITEM:item, STATUS:statusId)&lt;br /&gt;
&lt;br /&gt;
Returns if the item has the status.&lt;br /&gt;
&lt;br /&gt;
ItemIsDestroyed(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item is destroyed.&lt;br /&gt;
&lt;br /&gt;
ItemGetTemplate(ITEM:item, OUT ITEMTEMPLATE:root)&lt;br /&gt;
&lt;br /&gt;
Returns the roottemplate of the item.&lt;br /&gt;
&lt;br /&gt;
ItemGetSkillId(ITEM:item, OUT SKILL:root)&lt;br /&gt;
&lt;br /&gt;
Returns the skillid of the item if it has one.&lt;br /&gt;
&lt;br /&gt;
ItemGetItemType(ITEM:item, OUT FIXEDSTRING:itemType)&lt;br /&gt;
&lt;br /&gt;
Returns the itemtype of the item: common, unique, rare, ...&lt;br /&gt;
&lt;br /&gt;
ItemGetStatusSourceCharacter(ITEM:item, STATUS:statusId, OUT CHARACTER:source)&lt;br /&gt;
&lt;br /&gt;
Get the source character of a status&lt;br /&gt;
&lt;br /&gt;
ItemGetStatusSourceItem(ITEM:item, STATUS:statusId, OUT ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Get the source item of a status&lt;br /&gt;
&lt;br /&gt;
ItemCanBeMoved(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Returns if the item can be moved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EVENTS ==&lt;br /&gt;
&lt;br /&gt;
OnCharacterEvent(CHARACTER:character, STRING:eventName)&lt;br /&gt;
&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
OnCharacterItemEvent(CHARACTER:character, ITEM:item, STRING:eventName)&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
OnCharacterCharacterEvent(CHARACTER:character, CHARACTER:character, STRING:eventName)&lt;br /&gt;
&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
OnItemEvent(ITEM:item, STRING:eventName)&lt;br /&gt;
Thrown from scripts or story&lt;br /&gt;
&lt;br /&gt;
OnItemDestroyed(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Thrown when an item is destroyed&lt;br /&gt;
&lt;br /&gt;
OnItemDestroying(ITEM:item)&lt;br /&gt;
Thrown when an item is being destroyed&lt;br /&gt;
&lt;br /&gt;
OnItemOpened(ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Thrown when an item is opened&lt;br /&gt;
&lt;br /&gt;
OnItemClosed(ITEM:item)&lt;br /&gt;
Thrown when an item is closed&lt;br /&gt;
&lt;br /&gt;
OnItemDropped(ITEM:item, STRING:itemTemplate)&lt;br /&gt;
&lt;br /&gt;
Thrown when an item is dropped&lt;br /&gt;
&lt;br /&gt;
OnGlobalFlagSet(FIXEDSTRING:eventName)&lt;br /&gt;
Thrown when a global event is set&lt;br /&gt;
&lt;br /&gt;
OnGlobalFlagCleared(FIXEDSTRING:eventName)&lt;br /&gt;
&lt;br /&gt;
Thrown when a global event is cleared&lt;br /&gt;
&lt;br /&gt;
OnCharacterFlagSet(FIXEDSTRING:eventName, CHARACTER:character)&lt;br /&gt;
Thrown when a dialog event is set on a character&lt;br /&gt;
&lt;br /&gt;
OnCharacterFlagCleared(FIXEDSTRING:eventName, CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Thrown when a dialog event is cleared on a character&lt;br /&gt;
&lt;br /&gt;
OnItemFlagSet(FIXEDSTRING:eventName, ITEM:item)&lt;br /&gt;
Thrown when a dialog event is set on an item&lt;br /&gt;
&lt;br /&gt;
OItemFlagCleared(FIXEDSTRING:eventName, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Thrown when a dialog event is cleared on an item&lt;br /&gt;
&lt;br /&gt;
OnTimer(FIXEDSTRING:timerName)&lt;br /&gt;
Thrown when a timer has ended&lt;br /&gt;
&lt;br /&gt;
OnInit(-)&lt;br /&gt;
&lt;br /&gt;
Thrown when the script is set&lt;br /&gt;
&lt;br /&gt;
OnLoaded(INT:major, INT:minor, INT:revision, INT:build)&lt;br /&gt;
&lt;br /&gt;
Thrown when the script is loaded from the savegame&lt;br /&gt;
&lt;br /&gt;
OnShutdown(-)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character's script is removed&lt;br /&gt;
&lt;br /&gt;
OnVariableCleared(FIXEDSTRING:varName)&lt;br /&gt;
&lt;br /&gt;
Thrown when this object's script variable is cleared from Osiris with ClearVarObject&lt;br /&gt;
&lt;br /&gt;
OnCombatStarted(CHARACTER:source, ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character entered a combat&lt;br /&gt;
&lt;br /&gt;
OnCombatSwitched(CHARACTER:source, ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character switch from one combat to another&lt;br /&gt;
&lt;br /&gt;
OnCombatEnded(CHARACTER:source, ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character left the combat&lt;br /&gt;
&lt;br /&gt;
OnTurn(CHARACTER:source, ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character's turn starts&lt;br /&gt;
&lt;br /&gt;
OnTurnEnded(CHARACTER:source, ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character's turn ended&lt;br /&gt;
&lt;br /&gt;
OnCharacterVitalityChanged(CHARACTER:character, FLOAT:percentage)&lt;br /&gt;
&lt;br /&gt;
Thrown when the characters's vitality changed&lt;br /&gt;
&lt;br /&gt;
OnItemVitalityChanged(ITEM:item, FLOAT:percentage)&lt;br /&gt;
&lt;br /&gt;
Thrown when the item's vitality changed&lt;br /&gt;
&lt;br /&gt;
OnAttackOfOpportunity(CHARACTER:target)&lt;br /&gt;
&lt;br /&gt;
Thrown when the characters gets an attack of opportunity on an enemy&lt;br /&gt;
&lt;br /&gt;
OnDamage(DAMAGE:type, FLOAT:percentage, CHARACTER:source, ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Thrown when the object receives damage&lt;br /&gt;
&lt;br /&gt;
OnMiss(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character dodges something&lt;br /&gt;
&lt;br /&gt;
OnCriticalHit(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character is critical hit&lt;br /&gt;
&lt;br /&gt;
OnBlock(CHARACTER:source, ITEM:source, CHARACTER:target, ITEM:target)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character blocks something&lt;br /&gt;
&lt;br /&gt;
OnDie(CHARACTER:character, DAMAGE:type, CHARACTER:source, ITEM:source)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character dies&lt;br /&gt;
&lt;br /&gt;
OnCharacterStatusAttempt(CHARACTER:character, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character attempts to gain a status&lt;br /&gt;
&lt;br /&gt;
OnCharacterStatusApplied(CHARACTER:character, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character gains a status&lt;br /&gt;
&lt;br /&gt;
OnCharacterStatusRemoved(CHARACTER:character, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character loses a status&lt;br /&gt;
&lt;br /&gt;
OnItemStatusAttempt(ITEM:item, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Thrown when the item attempts to gain a status&lt;br /&gt;
&lt;br /&gt;
OnItemStatus(ITEM:item, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Thrown when the item gains a status&lt;br /&gt;
&lt;br /&gt;
OnItemStatusRemoved(ITEM:item, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Thrown when the item loses a status&lt;br /&gt;
&lt;br /&gt;
OnStatusCreateVisuals(STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Thrown when the item should create the visuals for this status&lt;br /&gt;
&lt;br /&gt;
OnStatusDestroyVisuals(STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Thrown when the item should destroy the visuals for this status&lt;br /&gt;
&lt;br /&gt;
OnSight(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character sees another character&lt;br /&gt;
&lt;br /&gt;
OnLostSight(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character doesn't see another character anymore&lt;br /&gt;
&lt;br /&gt;
OnUseItem(CHARACTER:source, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Thrown when a character uses an item&lt;br /&gt;
&lt;br /&gt;
OnPickupItem(CHARACTER:source, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Thrown when a character picks up an item&lt;br /&gt;
&lt;br /&gt;
OnCharacterMovedItem(CHARACTER:source, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Thrown when a character moved an item&lt;br /&gt;
&lt;br /&gt;
OnItemEquipped(CHARACTER:source, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Thrown when a character equips an item&lt;br /&gt;
&lt;br /&gt;
OnItemUnequipped(CHARACTER:source, ITEM:item)&lt;br /&gt;
&lt;br /&gt;
Thrown when a character unequips an item&lt;br /&gt;
&lt;br /&gt;
OnIterateCharacter(CHARACTER:character, FIXEDSTRING:eventId)&lt;br /&gt;
&lt;br /&gt;
Thrown by iterators&lt;br /&gt;
&lt;br /&gt;
OnIterateItem(ITEM:source, FIXEDSTRING:eventId)&lt;br /&gt;
&lt;br /&gt;
Thrown by iterators&lt;br /&gt;
&lt;br /&gt;
OnIterateCount(FIXEDSTRING:eventId, INTEGER:Count)&lt;br /&gt;
&lt;br /&gt;
Thrown by iterators after all iterations to inform you of the count.&lt;br /&gt;
&lt;br /&gt;
OnStoryOverride(-)&lt;br /&gt;
&lt;br /&gt;
Throw when story overrides what the character was doing: teleport, movement, on/offstage&lt;br /&gt;
&lt;br /&gt;
OnTriggerEnter(CHARACTER:character, ITEM:item, FIXEDSTRING:eventId)&lt;br /&gt;
&lt;br /&gt;
Thrown by a character or item entering an EventTrigger&lt;br /&gt;
&lt;br /&gt;
OnTriggerLeave(CHARACTER:character, ITEM:item, FIXEDSTRING:eventId)&lt;br /&gt;
&lt;br /&gt;
Thrown by a character or item leaving an EventTrigger&lt;br /&gt;
&lt;br /&gt;
OnEnemyChanged(CHARACTER:character, CHARACTER:newEnemy)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character's currentenemy changes&lt;br /&gt;
&lt;br /&gt;
OnTalentUnlocked(CHARACTER:character, TALENT:newTalent)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character unlocks a new talent&lt;br /&gt;
&lt;br /&gt;
OnCharacterClassChanged(CHARACTER:character, FIXEDSTRING:class)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character changes class in the character creation screen&lt;br /&gt;
&lt;br /&gt;
OnCharacterCreationStarted(CHARACTER:character, TRIGGER:creationPoint)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character creation has started, and gives where the character should walk to&lt;br /&gt;
&lt;br /&gt;
OnCharacterCreationStopped(CHARACTER:character)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character creation has stopped&lt;br /&gt;
&lt;br /&gt;
OnFunction(FIXEDSTRING:functionName)&lt;br /&gt;
&lt;br /&gt;
Throws an event on itself with the functionName. This is to fake function calls &lt;br /&gt;
&lt;br /&gt;
OnSkillCast(CHARACTER:character, SKILL_ID:skillID)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character casts a skill&lt;br /&gt;
&lt;br /&gt;
OnSkillCombatComment(CHARACTER:character, SKILL_ID:skillID)&lt;br /&gt;
&lt;br /&gt;
Thrown when the character needs to make a comment&lt;br /&gt;
&lt;br /&gt;
OnCharacterUsedSkillOnMe(CHARACTER:character, SKILL_ID:skillID)&lt;br /&gt;
&lt;br /&gt;
Thrown when you are hit by a skill from a character&lt;br /&gt;
&lt;br /&gt;
OnItemUnlocked(ITEM: item, CHARACTER:character, ITEM:key)&lt;br /&gt;
&lt;br /&gt;
Thrown when an item gets unlocked by a character.&lt;br /&gt;
&lt;br /&gt;
OnAutomatedDialogEnded(STRING:dialogName, INT:instanceID)&lt;br /&gt;
&lt;br /&gt;
Thrown when a automated dialog is ended for this speaker&lt;br /&gt;
&lt;br /&gt;
OnAutomatedDialogStarted(STRING:dialogName, INT:instanceID)&lt;br /&gt;
&lt;br /&gt;
Thrown when a automated dialog is started for this speaker&lt;br /&gt;
&lt;br /&gt;
OnDialogEnded(STRING:dialogName, INT:instanceID)&lt;br /&gt;
&lt;br /&gt;
Thrown when a dialog is ended for this speaker&lt;br /&gt;
&lt;br /&gt;
OnCrimeSensibleAction(INT:IsPrimary; FIXEDSTRING:regionID, INT:crimeID, FIXEDSTRING:reactionName, STRING:primaryDialog, CHARACTER:criminal1, CHARACTER:criminal2, CHARACTER:criminal3, CHARACTER:criminal4)&lt;br /&gt;
&lt;br /&gt;
Thrown when a character needs to perform a sensible action against criminals&lt;br /&gt;
&lt;br /&gt;
OnCrimeInterrogationRequest(FIXEDSTRING:regionID, INT:crimeID, CHARACTER:criminal1, CHARACTER:criminal2, CHARACTER:criminal3, CHARACTER:criminal4)&lt;br /&gt;
&lt;br /&gt;
Thrown when a character needs to perform an interrogation against criminals&lt;br /&gt;
&lt;br /&gt;
OnCrimeInvestigate(INT:crimeID; FLOAT3:CrimePosition)&lt;br /&gt;
&lt;br /&gt;
One NPC investigates a crimescene&lt;br /&gt;
&lt;br /&gt;
OnCrimeAlarmed(INT:crimeID; FLOAT3:CrimePosition)&lt;br /&gt;
&lt;br /&gt;
All NPCs in a crimearea start looking around.&lt;br /&gt;
&lt;br /&gt;
OnCrimeReturnToNormal(-)&lt;br /&gt;
&lt;br /&gt;
Investigation or Alarm timed out.&lt;br /&gt;
&lt;br /&gt;
OnCrimeAborted(-)&lt;br /&gt;
&lt;br /&gt;
The game interrupted the sensible action of this NPC.&lt;br /&gt;
&lt;br /&gt;
OnSplineControlPointReached(INT:Index, INT:EndReached, STRING:EventString)&lt;br /&gt;
&lt;br /&gt;
Thrown when a character reached a spline node.&lt;br /&gt;
&lt;br /&gt;
OnFinishCalculationAi(-)&lt;br /&gt;
&lt;br /&gt;
Thrown when the calculation of the AI is finished.&lt;br /&gt;
&lt;br /&gt;
OnGrenadeLand(INT:hitObstacle, CHARACTER:caster)&lt;br /&gt;
&lt;br /&gt;
Thrown when the grenades lands&lt;br /&gt;
&lt;br /&gt;
FetchCharacterApplyStatusData(LIST&amp;lt;STATUS&amp;gt;:removeStatuses, STATUS:applyStatus, INT:turns; CHARACTER:character, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Fetch from script which statuses to remove and apply.&lt;br /&gt;
&lt;br /&gt;
FetchItemApplyStatusData(LIST&amp;lt;STATUS&amp;gt;:removeStatuses, STATUS:applyStatus, INT:turns; ITEM:item, STATUS:status)&lt;br /&gt;
&lt;br /&gt;
Fetch from script which statuses to remove and apply.&lt;br /&gt;
&lt;br /&gt;
FetchItemSkillOnDamage(INT:hasSkill, SKILL_ID:skillID, INT:casterLevel; INT:damage, DAMAGE_TYPE:damageType)&lt;br /&gt;
&lt;br /&gt;
Fetch from script what skill to execute on damage.&lt;br /&gt;
&lt;br /&gt;
'''OnActivate(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character/item activates&lt;br /&gt;
&lt;br /&gt;
'''OnDeactivate(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character/item deactivates&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterUsedSourcePoint(CHARACTER:character)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character uses a source point&lt;br /&gt;
&lt;br /&gt;
'''OnSkillAdded(CHARACTER:character, SKILL_ID:skillId, INT:learned)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character learns a skill&lt;br /&gt;
&lt;br /&gt;
'''OnSkillActivated(CHARACTER:character, SKILL_ID:skillId)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character activates (=adds to memory) a skill&lt;br /&gt;
&lt;br /&gt;
'''OnSkillDeactivated(CHARACTER:character, SKILL_ID:skillId)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character deactivates (=removes from memory) a skill&lt;br /&gt;
&lt;br /&gt;
'''OnItemFlagShared(FIXEDSTRING:eventName, ITEM:item, INT:newValue)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a dialog event is shared with an item&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterFlagShared(FIXEDSTRING:eventName, CHARACTER:character, INT:newValue)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a dialog event is shared with a character&lt;br /&gt;
&lt;br /&gt;
'''OnItemOffStageChanged(CHARACTER:character, INT:offstage)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character is set on/off stage&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterOffStageChanged(ITEM:item, INT:offstage)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a item is set on/off stage&lt;br /&gt;
&lt;br /&gt;
'''OnCharacterTeleported(CHARACTER:target, CHARACTER:cause, FLOAT3:oldPosition, FLOAT3:newPosition, SKILL_ID:skillId)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when a character gets teleported with a teleport skill&lt;br /&gt;
&lt;br /&gt;
'''OnCombatTick(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when this object ticks in combat. Only thrown for objects that don't get a turn.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== INTERRUPTS ==&lt;br /&gt;
&lt;br /&gt;
'''OnMovementFailed(FLOAT3:targetPos)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted by a move action failing&lt;br /&gt;
&lt;br /&gt;
'''OnException(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted by an exception&lt;br /&gt;
&lt;br /&gt;
'''OnBetterReactionFound(FIXEDSTRING:reactionName)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted by another reaction&lt;br /&gt;
&lt;br /&gt;
'''OnNoReactionFound(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted because no reaction is valid&lt;br /&gt;
&lt;br /&gt;
'''OnScriptDisabled(-)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted because the scriptcontroller is disabled&lt;br /&gt;
&lt;br /&gt;
'''OnManualInterrupt(FIXEDSTRING:reactionName)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted using the interrupt action&lt;br /&gt;
&lt;br /&gt;
'''OnRegionSwap(FIXEDSTRING:oldLevel, FIXEDSTRING:newLevel)'''&lt;br /&gt;
&lt;br /&gt;
Thrown when the reaction is interrupted by a region swap&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_surface_transform_types&amp;diff=5815</id>
		<title>Scripting surface transform types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_surface_transform_types&amp;diff=5815"/>
		<updated>2018-03-01T10:41:16Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
The following surface transform types can be used in script:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;None&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ignite&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Bless&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Purify&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Curse&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Electrify&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Melt&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Freeze&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Condense&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Vaporize&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Bloodify&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Contaminate&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Oilify&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Shatter&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=CombatAi_Archetypes_And_Modifiers&amp;diff=5814</id>
		<title>CombatAi Archetypes And Modifiers</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=CombatAi_Archetypes_And_Modifiers&amp;diff=5814"/>
		<updated>2018-03-01T10:40:50Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
The following archetypes already exist in D:OS2 and can have their modifiers overridden:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;base&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;berserker&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;bomber&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;healer&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;mage&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;melee&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ranged&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ranger&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;rogue&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;warrior&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following table lists all modifiers, their default value in the base archetype, and a short desciption on how their used. More information on the &amp;lt;i&amp;gt;italic&amp;lt;/i&amp;gt; terms and a basic explanation on how scores work for Ai can be found [[Combat_AI#How_does_it_work|here]]:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Modifier !! Base Value !! Description&lt;br /&gt;
|-&lt;br /&gt;
| SCORE_MOD || 100.0 || A general modifier that you probably shouldn't change, but you're welcome to try&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DAMAGE_SELF_POS || 1.0 || Damage score on self that's considered positive (e.g. when removing the Burning status, which 'removes' damage)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DAMAGE_SELF_NEG || 1.0 || Damage score on self that's considered negative (this is just damage)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DAMAGE_ENEMY_POS || 1.0 || Same as MULTIPLIER_DAMAGE_SELF_POS, but for enemies (this is just damage)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DAMAGE_ENEMY_NEG || 1.0 || Same as MULTIPLIER_DAMAGE_SELF_NEG, but for enemies (e.g. when removing the Burning status, which 'removes' damage)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DAMAGE_ALLY_POS || 1.0 || Same as MULTIPLIER_DAMAGE_SELF_POS, but for allies&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DAMAGE_ALLY_NEG || 1.5 || Same as MULTIPLIER_DAMAGE_SELF_NEG, but for allies&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DAMAGE_NEUTRAL_POS || 1.0 || Same as MULTIPLIER_DAMAGE_SELF_POS, but for neutrals&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DAMAGE_NEUTRAL_NEG || 1.0 || Same as MULTIPLIER_DAMAGE_SELF_NEG, but for neutrals&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_HEAL_SELF_POS || 1.0 || Healing score on self that's considered positive (this is just healing)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_HEAL_SELF_NEG || 1.0 || Healing score on self that's considered negative (e.g. when removing the Restoration status, which 'removes' healing)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_HEAL_ENEMY_POS || 1.0 || Same as MULTIPLIER_HEAL_SELF_POS, but for enemies (e.g. when removing the Restoration status, which 'removes' healing)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_HEAL_ENEMY_NEG || 1.0 || Same as MULTIPLIER_HEAL_SELF_NEG, but for enemies (this is just healing)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_HEAL_ALLY_POS || 1.0 || Same as MULTIPLIER_HEAL_SELF_POS, but for allies&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_HEAL_ALLY_NEG || 1.0 || Same as MULTIPLIER_HEAL_SELF_NEG, but for allies&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_HEAL_NEUTRAL_POS || 1.0 || Same as MULTIPLIER_HEAL_SELF_POS, but for neutrals&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_HEAL_NEUTRAL_NEG || 1.0 || Same as MULTIPLIER_HEAL_SELF_NEG, but for neutrals&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DOT_SELF_POS || 1.0 || Same as MULTIPLIER_DAMAGE_SELF_POS, but for damage over time&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DOT_SELF_NEG || 1.0 || Same as MULTIPLIER_DAMAGE_SELF_NEG, but for damage over time&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DOT_ENEMY_POS || 1.0 || Same as MULTIPLIER_DAMAGE_ENEMY_POS, but for damage over time&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DOT_ENEMY_NEG || 1.0 || Same as MULTIPLIER_DAMAGE_ENEMY_NEG, but for damage over time&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DOT_ALLY_POS || 1.0 || Same as MULTIPLIER_DAMAGE_ALLY_POS, but for damage over time&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DOT_ALLY_NEG || 1.0 || Same as MULTIPLIER_DAMAGE_ALLY_NEG, but for damage over time&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DOT_NEUTRAL_POS || 1.0 || Same as MULTIPLIER_NEUTRAL_SELF_POS, but for damage over time&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DOT_NEUTRAL_NEG || 1.0 || Same as MULTIPLIER_NEUTRAL_SELF_NEG, but for damage over time&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_HOT_SELF_POS || 1.0 || Same as MULTIPLIER_HEAL_SELF_POS, but for healing over time&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_HOT_SELF_NEG || 1.0 || Same as MULTIPLIER_HEAL_SELF_NEG, but for healing over time&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_HOT_ENEMY_POS || 1.0 || Same as MULTIPLIER_HEAL_ENEMY_POS, but for healing over time&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_HOT_ENEMY_NEG || 1.0 || Same as MULTIPLIER_HEAL_ENEMY_NEG, but for healing over time&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_HOT_ALLY_POS || 1.0 || Same as MULTIPLIER_HEAL_ALLY_POS, but for healing over time&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_HOT_ALLY_NEG || 1.0 || Same as MULTIPLIER_HEAL_ALLY_NEG, but for healing over time&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_HOT_NEUTRAL_POS || 1.0 || Same as MULTIPLIER_NEUTRAL_SELF_POS, but for healing over time&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_HOT_NEUTRAL_NEG || 1.0 || Same as MULTIPLIER_NEUTRAL_SELF_NEG, but for healing over time&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_CONTROL_SELF_POS || 1.0 || Control score on self that's considered positive. Control score comes from the statuses KnockedDown, Blind, ShacklesOfPain, Fear, Charmed, Incapacitated, and any Consume status that makes you lose control. (e.g. removing KnockedDown)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_CONTROL_SELF_NEG || 2.0 || Control score on self that's considered negative. (e.g. applying KnockedDown)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_CONTROL_ENEMY_POS || 1.0 || Same as MULTIPLIER_CONTROL_SELF_POS, but for enemies (e.g. applying KnockedDown)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_CONTROL_ENEMY_NEG || 1.0 || Same as MULTIPLIER_CONTROL_SELF_NEG, but for enemies (e.g. removing KnockedDown)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_CONTROL_ALLY_POS || 1.0 || Same as MULTIPLIER_CONTROL_SELF_POS, but for allies&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_CONTROL_ALLY_NEG || 2.0 || Same as MULTIPLIER_CONTROL_SELF_NEG, but for allies&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_CONTROL_NEUTRAL_POS || 1.0 || Same as MULTIPLIER_CONTROL_SELF_POS, but for neutrals&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_CONTROL_NEUTRAL_NEG || 1.0 || Same as MULTIPLIER_CONTROL_SELF_NEG, but for neutrals&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_BOOST_SELF_POS || 1.0 || Boost score on self that's considered positive (e.g. buffs like resistance increase)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_BOOST_SELF_NEG || 1.0 || Boost score on self that's considered negative (e.g. debuffs like a intelligence penalty)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_BOOST_ENEMY_POS || 1.0 || Same as MULTIPLIER_BOOST_ENEMY_POS, but for enemies (e.g. debuffs like a intelligence penalty)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_BOOST_ENEMY_NEG || 1.0 || Same as MULTIPLIER_BOOST_ENEMY_NEG, but for enemies (e.g. buffs like resistance increase)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_BOOST_ALLY_POS || 1.0 || Same as MULTIPLIER_BOOST_ALLY_POS, but for allies&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_BOOST_ALLY_NEG || 1.0 || Same as MULTIPLIER_BOOST_ALLY_NEG, but for allies&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_BOOST_NEUTRAL_POS || 1.0 || Same as MULTIPLIER_BOOST_NEUTRAL_POS, but for neutrals&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_BOOST_NEUTRAL_NEG || 1.0 || Same as MULTIPLIER_BOOST_NEUTRAL_NEG, but for neutrals&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ARMOR_SELF_POS || 0.75 || Armor (both physical and magical) score on self that's considered positive (e.g. when removing the Acid status, which 'removes' armor damage)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ARMOR_SELF_NEG || 0.75 || Armor score on self that's considered negative (this is just armor damage)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ARMOR_ENEMY_POS || 0.75 || Same as MULTIPLIER_ARMOR_ENEMY_POS, but for enemies (this is just armor damage)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ARMOR_ENEMY_NEG || 0.75 || Same as MULTIPLIER_ARMOR_ENEMY_NEG, but for enemies (e.g. when removing the Acid status, which 'removes' armor damage)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ARMOR_ALLY_POS || 0.75 || Same as MULTIPLIER_ARMOR_ALLY_POS, but for allies&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ARMOR_ALLY_NEG || 1.50 || Same as MULTIPLIER_ARMOR_ALLY_NEG, but for allies&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ARMOR_NEUTRAL_POS || 0.75 || Same as MULTIPLIER_ARMOR_NEUTRAL_POS, but for neutrals&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ARMOR_NEUTRAL_NEG || 0.75 || Same as MULTIPLIER_ARMOR_NEUTRAL_NEG, but for neutrals&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_FREE_ACTION || 0.25 || The 'final' score of an action (combined score of damage, heal, dot, hot, armor, boost, and control) is multiplied by a &amp;lt;i&amp;gt;CostModifier&amp;lt;/i&amp;gt; and divided by an &amp;lt;i&amp;gt;ActionCostModifier&amp;lt;/i&amp;gt;. If an action is free (meaning 0 AP) the &amp;lt;i&amp;gt;ActionCostModifier&amp;lt;/i&amp;gt; will be equal to MULTIPLIER_FREE_ACTION&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ACTION_COST_MULTIPLIER || 1.00 || Used in the &amp;lt;i&amp;gt;ActionCostModifier&amp;lt;/i&amp;gt; explained in MULTIPLIER_FREE_ACTION. MULTIPLIER_ACTION_COST_MULTIPLIER is multiplied with the AP cost of the action itself and added to the &amp;lt;i&amp;gt;ActionCostModifier&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_MOVEMENT_COST_MULTPLIER || 0.90 || Used in the &amp;lt;i&amp;gt;ActionCostModifier&amp;lt;/i&amp;gt; explained in MULTIPLIER_FREE_ACTION. MULTIPLIER_MOVEMENT_COST_MULTIPLIER is multiplied with the AP cost of the movement needed to execute the action and added to the &amp;lt;i&amp;gt;ActionCostModifier&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_INVISIBLE_MOVEMENT_COST_MULTPLIER || 0.30 || If the player is sneaking or invisible this modifier is used on top of MULTIPLIER_MOVEMENT_COST_MULTIPLIER&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_SOURCE_COST_MULTIPLIER || 1.00 || Used in the &amp;lt;i&amp;gt;ActionCostModifier&amp;lt;/i&amp;gt; explained in MULTIPLIER_FREE_ACTION. MULTIPLIER_SOURCE_COST_MULTIPLIER is multiplied with the SP cost of the action itself and added to the &amp;lt;i&amp;gt;ActionCostModifier&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_COOLDOWN_MULTIPLIER || 0.01 || Used in the &amp;lt;i&amp;gt;CostModifier&amp;lt;/i&amp;gt; explained in MULTIPLIER_FREE_ACTION. MULTIPLIER_COOLDOWN_MULTIPLIER is used in combination with the cooldown of the action and a higher MULTIPLIER_COOLDOWN_MULTIPLIER results in a lower &amp;lt;i&amp;gt;CostModifier&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_LOW_ITEM_AMOUNT_MULTIPLIER || 0.45 || Used in the &amp;lt;i&amp;gt;CostModifier&amp;lt;/i&amp;gt; explained in MULTIPLIER_FREE_ACTION. MULTIPLIER_LOW_ITEM_AMOUNT_MULTIPLIER is used in combination with MULTIPLIER_HIGH_ITEM_AMOUNT_MULTIPLIER and we lerp between the LOW and HIGH value based on the health of the source character before multiplying it with the &amp;lt;i&amp;gt;CostModifier&amp;lt;/i&amp;gt;. This way we make sure that lower health characters are more likely to use items&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_HIGH_ITEM_AMOUNT_MULTIPLIER || 1.00 || See MULTIPLIER_LOW_ITEM_AMOUNT_MULTIPLIER&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_CANNOT_EXECUTE_THIS_TURN || 0.50 ||  Used in the &amp;lt;i&amp;gt;CostModifier&amp;lt;/i&amp;gt; explained in MULTIPLIER_FREE_ACTION. MULTIPLIER_CANNOT_EXECUTE_THIS_TURN is multiplied with the &amp;lt;i&amp;gt;CostModifier&amp;lt;/i&amp;gt; if the action can not be executed this turn&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_TARGET_MY_ENEMY || 1.50 || Used whtn the target of the action is attacking the source character&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_TARGET_MY_HOSTILE || 3.00 || Used when the target of the action is already under attack by the source character&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_TARGET_SUMMON || 0.35 || Used when the target is a summon&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_TARGET_AGGRO_MARKED || 5.00 || Used when the target has the status AggroMarked&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_TARGET_HOSTILE_COUNT_ONE || 0.50 || Used when the target already is under attack by another character&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_TARGET_HOSTILE_COUNT_TWO_OR_MORE || 0.25 || Used when the target already is under attack by 2 or more characters&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_TARGET_IN_SIGHT || 1.05 || Used when the target is in sight from the current position of the source character&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_TARGET_INCAPACITATED || 0.20 || Used when the character is incapacitated (e.g. due to Frozen status)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_TARGET_KNOCKED_DOWN || 1.25 || Used when the character has the KnockedDown status. Replaces MULTIPLIER_TARGET_INCAPACITATED (because KnockedDown is also incapacitates)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_TARGET_PREFERRED || 20.00 || Used when the target has the AI_PREFERRED_TARGET tag&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_TARGET_UNPREFERRED || 0.20 || Used when the target has the AI_UNPREFERRED_TARGET tag&lt;br /&gt;
|-&lt;br /&gt;
| ENDPOS_NEARBY_DISTANCE || 6.00 || The maximum distance that's considered to be 'nearby'. Is used in combination with several other modifiers&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ENDPOS_ALLIES_NEARBY || 0.00 || Used when calculating the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt;. MULTIPLIER_ENDPOS_ALLIES_NEARBY is multiplied with the amount of allies nearby (defined by ENDPOS_NEARBY_DISTANCE) and added to the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ENDPOS_ENEMIES_NEARBY || 0.00 || Used when calculating the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt;. MULTIPLIER_ENDPOS_ENEMIES_NEARBY is multiplied with the amount of enemies nearby (defined by ENDPOS_NEARBY_DISTANCE) and added to the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ENDPOS_STENCH || 0.25 || Used when the target has the Stench talen&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ENDPOS_FLANKED || 0.05 || Used when calculating the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt;. MULTIPLIER_ENDPOS_FLANKED is multiplied with the amount of characters that would flank the source character and added to the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ENDPOS_HEIGHT_DIFFERENCE || 0.002 || Used when calculating the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt;. MULTIPLIER_ENDPOS_HEIGHT_DIFFERENCE is multiplied with the height difference between the current and the new position and added to the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ENDPOS_TURNED_INVISIBLE || 0.01 || Used when calculating the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt;. MULTIPLIER_ENDPOS_TURNED_INVISIBLE is used when invisible for the difference between the old and new position and substracted from the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt; (going invisible and not moving is bad)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ENDPOS_NOT_IN_AIHINT || 0.01 || Used when calculating the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt;. MULTIPLIER_ENDPOS_NOT_IN_AIHINT is substracted from the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt; if it's not in an AiHint (and if it's not forced, because then the action would be completely aborted)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ENDPOS_NOT_IN_SMOKE || 0.00 || Used when calculating the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt;. MULTIPLIER_ENDPOS_NOT_IN_SMOKE is added the the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt; when the position is not inside a smoke surface&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ENDPOS_NOT_IN_DANGEROUS_SURFACE || 0.10 || Used when calculating the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt;. MULTIPLIER_ENDPOS_NOT_IN_DANGEROUS_SURFACE is added the the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt; when the position is inside a dangerous surface that has positive effects (e.g. when you heal from a poison surface)&lt;br /&gt;
|-&lt;br /&gt;
| DANGEROUS_ITEM_NEARBY || 0.00 || Used when calculating the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt;. DANGEROUS_ITEM_NEARBY is multiplied by all dangerous items (e.g. barrels) nearby (defined by ENDPOS_NEARBY_DISTANCE) and added to the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| FALLBACK_ALLIES_NEARBY || 0.00 || Replaces MULTIPLIER_ENDPOS_ALLIES_NEARBY when calculating the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt; for the fallback action&lt;br /&gt;
|-&lt;br /&gt;
| FALLBACK_ENEMIES_NEARBY || 0.00 || Replaces MULTIPLIER_ENDPOS_ENEMIES_NEARBY when calculating the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt; for the fallback action&lt;br /&gt;
|-&lt;br /&gt;
| FALLBACK_WANTED_ENEMY_DISTANCE || 5.00 || The distance the source character will try to create when it has to use its fallback action&lt;br /&gt;
|-&lt;br /&gt;
| MOVESKILL_AP_DIFF_REQUIREMENT || 2.00 || The minimum amount of AP the source character can save if it uses a jump/teleport skill instead of walking to its target position&lt;br /&gt;
|-&lt;br /&gt;
| MOVESKILL_ITEM_AP_DIFF_REQUIREMENT || 3.00 || The minimum amount of AP the source character can save if it uses a jump/teleport skill by item instead of walking to its target position&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_SCORE_ON_NEUTRAL || -0.1 || The target multiplier for neutral targets&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_SCORE_ON_ALLY || -1.10 || The target multiplier for allied targets&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_SCORE_OUT_OF_COMBAT || 0.25 || The target multiplier for targets that are not part of the source character's combat&lt;br /&gt;
|-&lt;br /&gt;
| MAX_SCORE_ON_NEUTRAL || 0.00 || Not used at the time of writing&lt;br /&gt;
|-&lt;br /&gt;
| MAX_HEAL_MULTIPLIER || 0.50 || A multiplier to determine the importance of healing someone that's close to dying. Has to be in between 0.00 and 1.00&lt;br /&gt;
|-&lt;br /&gt;
| MAX_HEAL_SELF_MULTIPLIER || 1.00 || A multiplier to determine the importance of healing self when close to dying. Has to be in between 0.00 and 1.00&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_VITALITYBOOST || 0.50 || Used for vitality boosts gained by statuses or potions&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DAMAGEBOOST || 0.50 || Used for damage boosts gained by statuses or potions&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_BONUS_WEAPON_BOOST || 0.50 || Used for bonus weapon boosts gained by statuses or potions&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ARMORBOOST || 0.50 || Used for armor boosts gained by statuses or potions&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_KILL_ENEMY || 2.50 || Target multiplier used when an enemy target will die due to the action&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_KILL_ENEMY_SUMMON || 1.10 || Target multiplier used when an enemy summon target will die due to the action&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_KILL_ALLY || 1.50 || Target multiplier used when an allied target will die due to the action&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_KILL_ALLY_SUMMON || 1.10 || Target multiplier used when an alied summon target will die due to the action&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_EXPLOSION_DISTANCE_MIN || 0.50 || Not used at the time of writing&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_SURFACE_STATUS_ON_MOVE || 0.75 || Multiplier used by scores that are caused by surfaces, but only if a character moves&lt;br /&gt;
|-&lt;br /&gt;
| SURFACE_DAMAGE_MAX_TURNS || 2.00 || Maximum amount of turns Ai takes into account for damage caused by surfaces&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_STATUS_REMOVE || 1.00 || Multiplier used for the score caused by status removal&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_STATUS_FAILED || 0.50 || Multiplier used for the score that a status would have had if it would apply. This score is then added to the &amp;lt;i&amp;gt;MinimumScore&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_STATUS_CANCEL_INVISIBILITY || 0.50 || Multiplier used when an action cancels the Invisibility status that the source character has. The score of the Invisibility status is calculated and multiplied with MULTIPLIER_STATUS_CANCEL_INVISIBILITY&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_STATUS_CANCEL_SLEEPING || 0.50 || Multiplier used when an action cancels the Sleeping status that the source character has. The score of the Sleeping status is calculated and multiplied with MULTIPLIER_STATUS_CANCEL_SLEEPING&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_STATUS_OVERWRITE || 0.50 || Multiplier used for the score that a status would have had if we don't overwrite it. This score is then added to the &amp;lt;i&amp;gt;MinimumScore&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_LOSE_CONTROL || 1.00 || Multiplier used for consume statuses that make the target lose control&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_INCAPACITATE || 1.25 || Multiplier used for Incapacitated statuses&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_KNOCKDOWN || 1.75 || Multiplier used for Knockdown status&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_CHARMED || 2.50 || Multiplier used for Charmed status&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_FEAR || 1.00 || Multiplier used for the Fear status&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_BLIND || 0.80 || Multiplier used for the Blind status&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_INVISIBLE || 0.20 || Multiplier used for the Invisible status&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_MUTE || 0.80 || Multiplier used for the Mute status&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_SOURCE_MUTE || 4.00 || Multiplier used for the SourceMute status&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_SHACKLES_OF_PAIN || 0.50 || Multiplier used for the ShacklesOfPain status&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_HEAL_SHARING || 0.50 || Multiplier used for the HealSharing status&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DECAYING_TOUCH || 0.75 || Multiplier used for the DecayingTouch status&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DISARMED || 0.80 || Multiplier used for the Disarmed status&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_WINDWALKER || 0.50 || Multiplier used for the Windwalker status&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_GUARDIAN_ANGEL || 0.20 || Multiplier used for the GuardianAngel status&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ACTIVE_DEFENSE || 1.00 || Multiplier used for the ActiveDefense status&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_SPARK || 0.40 || Multiplier used for the Spark status&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DAMAGE_ON_MOVE || 10.00 || Multiplier used for the DamageOnMove status&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DEATH_RESIST || 4.00 || Multiplier used for Consume statuses with IsResistingDeath property&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_RESURRECT || 4.00 || Multiplier used for the resurrect property in skills&lt;br /&gt;
|-&lt;br /&gt;
| SKILL_JUMP_MINIMUM_DISTANCE || 8.00 || Minimum distance a character has to jump to use the skill&lt;br /&gt;
|-&lt;br /&gt;
| SKILL_TELEPORT_MINIMUM_DISTANCE || 6.00 || Minimum distance an object has to be teleported to use the skill&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ADD_ARMOR || 0.50 || Multiplier that's removed from the boost score if we're trying to add physical armor when it's already full&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ADD_MAGIC_ARMOR || 0.50 || Multiplier that's removed from the boost score if we're trying to add magical armor when it's already full&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_REMOVE_ARMOR || 0.50 || Multiplier that's added to the boost score if we're completely removing physical armor&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_REMOVE_MAGIC_ARMOR || 0.50 || Multiplier that's added to the boost score if we're completely removing magical armor&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_SURFACE_REMOVE || 0.35 || Multiplier used for scores of surfaces that get removed&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DESTROY_INTERESTING_ITEM || 0.50 || Multiplier added to the score when destroying an interesting item (e.g. an oil barrel)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_CRITICAL || 1.00 || Used for critical boosts gained by statuses or potions&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_ACC_BOOST || 0.25 || Used for accuracy boosts gained by statuses or potions&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DODGE_BOOST || 0.80 || Used for dodge boosts gained by statuses or potions&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_MOVEMENT_BOOST || 0.30 || Used for movement boosts gained by statuses or potions&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_RESISTANCE || 0.80 || Used for resistance boosts gained by statuses or potions&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_AP_RECOVERY || 1.20 || Used for ap recovery boosts gained by statuses or potions&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_AP_BOOST || 0.60 || Used for ap boosts gained by statuses or potions&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_AP_MAX || 0.10 || Used for ap max boosts gained by statuses or potions&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_AP_COSTBOOST || 2.00 || Used for ap cost boosts gained by statuses or potions&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_SOURCE_POINT || 0.75 || Used for sp boosts gained by statuses or potions&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_SP_COSTBOOST || 2.00 || Used for sp cost boosts gained by statuses or potions&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_MAIN_ATTRIB || 1.00 || Used for attribute boosts gained by statuses or potions, if that attribute is the highest attribute of the character&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_SECONDARY_ATTRIB || 0.50 || Used for attribute boosts gained by statuses or potions, if that attribute is not the highest attribute of the character&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_CONTACT_BOOST || 0.50 || Used for contact boosts gained by statuses or potions (freeze on contact, poison on contact, ...)&lt;br /&gt;
|-&lt;br /&gt;
| MIN_TURNS_SCORE_EXISTING_STATUS || 1 || The minimum amount of turns used when calculating the score of an existing status (could be 0, but still exist)&lt;br /&gt;
|-&lt;br /&gt;
| TURNS_REPLACEMENT_INFINITE || 5 || If anything is applied/removed with an infinite turn amount it is replaced with TURNS_REPLACEMENT_INFINITE&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_PUDDLE_RADIUS || 1.00 || Not used at the time of writing&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_COMBO_SCORE_INTERACTION || 0.90 || Multiplier used for possible surface interaction scores (we place water -&amp;gt; could be electrified)&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_COMBO_SCORE_POSITIONING || 0.00 || Same as MULTIPLIER_COMBO_SCORE_INTERACTION, but for calculating the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_POSITION_LEAVE || -1.00 || Modifier used for jump and teleportation skills for the &amp;lt;i&amp;gt;PositionScore&amp;lt;/i&amp;gt; of the position we're leaving&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_GROUNDED || -0.05 || Used for grounded attribute gained by statuses or potions&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_DEFLECT_PROJECTILES || 0.20 || Used for deflect projectiles attribute gained by statuses or potions&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_SUMMON_PATH_INFLUENCES || 0.04 || Used when calculate the score of a summon position (e.g. when a summon has doesn't like fire surfaces due to path influences)&lt;br /&gt;
|-&lt;br /&gt;
| BUFF_DIST_MAX || 30.0 || Maximum distance at which Ai will use buffs. The score of buffs is lerped based on the distance between BUFF_DIST_MIN and BUFF_DIST_MAX&lt;br /&gt;
|-&lt;br /&gt;
| BUFF_DIST_MIN || 10.0 || See BUFF_DIST_MAX&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_POS_SECONDARY_SURFACE || 0.25 || Multiplier for positive surface scores on allies that are secondary. E.g. blessed surface on an ally that's caused by a placed fire surface that's connected to a blessed surface.&lt;br /&gt;
|-&lt;br /&gt;
| ENABLE_ACTIVE_DEFENSE_OFFENSIVE_USE || 0 || When != 0 Ai will use the ActiveDefense skill in an offensive way (e.g. just target it in the middle of a group of enemies)&lt;br /&gt;
|-&lt;br /&gt;
| ENABLE_SAVING_ACTION_POINTS || 1 || When != 0 Ai will move less to save AP if it can't execute an attack anyways&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_SHIELD_BLOCK || 1.00 || Multiplier used to determine how important it is that a target has a shield with a chance to block&lt;br /&gt;
|-&lt;br /&gt;
| MULTIPLIER_REFLECT_DAMAGE || 0.25 || Multiplier used for damage that's reflected due to retribution&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_death_types&amp;diff=5813</id>
		<title>Scripting death types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_death_types&amp;diff=5813"/>
		<updated>2018-03-01T10:40:14Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
The following death types can be used in script:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;None&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Physical&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Piercing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Arrow&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DoT&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Incinerate&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Acid&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Electrocution&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FrozenShatter&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PetrifiedShatter&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Explode&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Surrender&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Hang&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;KnockedDown&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Lifetime&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_ability_types&amp;diff=5812</id>
		<title>Scripting ability types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_ability_types&amp;diff=5812"/>
		<updated>2018-03-01T10:40:05Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
The following ability types can be used in script:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WarriorLore&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RangerLore&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RogueLore&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SingleHanded&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TwoHanded&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reflection&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ranged&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Shield&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reflexes&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PhysicalArmorMastery&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MagicArmorMastery&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;VitalityMastery&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sourcery&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Telekinesis&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FireSpecialist&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WaterSpecialist&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AirSpecialist&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EarthSpecialist&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Necromancy&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Summoning&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Polymorph&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Repair&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sneaking&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pickpocket&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Thievery&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Loremaster&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Crafting&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Barter&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Charm&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intimidate&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reason&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Charisma&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Leadership&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Luck&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DualWielding&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wand&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Perseverance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Runecrafting&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Brewmaster&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_compare_functions&amp;diff=5811</id>
		<title>Scripting compare functions</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_compare_functions&amp;diff=5811"/>
		<updated>2018-03-01T10:39:48Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
The following compare functions can be used in script:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Distance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Level&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Vitality&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;VitalityPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Magic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MagicPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ActionPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;APMaximum&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;APStart&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;APRecovery&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Experience&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reputation&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Karma&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Strength&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Finesse&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intelligence&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Constitution&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wits&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TrapWits&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Movement&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FireResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EarthResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WaterResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AirResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PoisonResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PiercingResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PhysicalResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CorrosiveResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MagicResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ShadowResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sight&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Hearing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Initiative&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Armor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ArmorPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GoldValue&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_compare_types&amp;diff=5810</id>
		<title>Scripting compare types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_compare_types&amp;diff=5810"/>
		<updated>2018-03-01T10:39:37Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
The following compare types can be used in script:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Highest&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Lowest&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Random&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_talent_types&amp;diff=5809</id>
		<title>Scripting talent types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_talent_types&amp;diff=5809"/>
		<updated>2018-03-01T10:39:25Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
The following talent types can be used in script:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ItemMovement&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ItemCreation&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Flanking&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AttackOfOpportunity&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Backstab&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Trade&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Lockpick&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ChanceToHitRanged&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ChanceToHitMelee&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Damage&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ActionPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ActionPoints2&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Criticals&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IncreasedArmor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sight&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ResistFear&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ResistKnockdown&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ResistStun&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ResistPoison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ResistSilence&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ResistDead&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Carry&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Throwing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Repair&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ExpGain&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ExtraStatPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ExtraSkillPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Durability&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Awareness&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Vitality&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FireSpells&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WaterSpells&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AirSpells&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EarthSpells&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Charm&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intimidate&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reason&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Luck&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Initiative&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;InventoryAccess&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AvoidDetection&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AnimalEmpathy&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Escapist&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;StandYourGround&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurpriseAttack&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LightStep&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ResurrectToFullHealth&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Scientist&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Raistlin&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MrKnowItAll&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WhatARush&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FaroutDude&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Leech&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ElementalAffinity&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FiveStarRestaurant&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Bully&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ElementalRanger&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LightningRod&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Politician&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WeatherProof&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LoneWolf&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Zombie&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Demon&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IceKing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Courageous&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GoldenMage&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WalkItOff&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FolkDancer&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SpillNoBlood&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Stench&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Kickstarter&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WarriorLoreNaturalArmor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WarriorLoreNaturalHealth&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WarriorLoreNaturalResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RangerLoreArrowRecover&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RangerLoreEvasionBonus&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RangerLoreRangedAPBonus&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RogueLoreDaggerAPBonus&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RogueLoreDaggerBackStab&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RogueLoreMovementBonus&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RogueLoreHoldResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;NoAttackOfOpportunity&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WarriorLoreGrenadeRange&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RogueLoreGrenadePrecision&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WandCharge&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DualWieldingDodging&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Human_Inventive&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Human_Civil&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Dwarf_Sneaking&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Dwarf_Sturdy&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Elf_CorpseEating&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Elf_Lore&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Lizard_Persuasion&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Lizard_Resistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Perfectionist&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Executioner&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ViolentMagic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;QuickStep&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Quest_SpidersKiss_Str&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Quest_SpidersKiss_Int&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Quest_SpidersKiss_Per&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Quest_SpidersKiss_Null&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;BeastMaster&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LivingArmor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Torturer&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ambidextrous&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Unstable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Quest_TradeSecrets&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Quest_GhostTree&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ResurrectExtraHealth&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;NaturalConductor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Quest_Rooted&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_damage_types&amp;diff=5808</id>
		<title>Scripting damage types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_damage_types&amp;diff=5808"/>
		<updated>2018-03-01T10:39:11Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
The following damage types can be used in script:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Physical&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Piercing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Corrosive&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Magic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Chaos&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Shadow&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fire&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Air&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Water&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Earth&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Poison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_weapon_types&amp;diff=5807</id>
		<title>Scripting weapon types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_weapon_types&amp;diff=5807"/>
		<updated>2018-03-01T10:38:55Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
The following weapon types can be used in script:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;None&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sword&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Club&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Axe&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Staff&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Bow&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Crossbow&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Spear&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Knife&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wand&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Arrow&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_itemstat_types&amp;diff=5806</id>
		<title>Scripting itemstat types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_itemstat_types&amp;diff=5806"/>
		<updated>2018-03-01T10:38:39Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
The following itemstat types can be used in script:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Weight&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Value&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Vitality&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;VitalityPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_characterstat_types&amp;diff=5805</id>
		<title>Scripting characterstat types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_characterstat_types&amp;diff=5805"/>
		<updated>2018-03-01T10:38:21Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
The following characterstat types can be used in script:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Level&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Vitality&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;VitalityPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;VitalityMax&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Magic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MagicPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ActionPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;APMaximum&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;APStart&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;APRecovery&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Experience&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reputation&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Karma&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Strength&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Finesse&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intelligence&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Constitution&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wits&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TrapWits&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Movement&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FireResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EarthResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WaterResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AirResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PoisonResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PiercingResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PhysicalResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CorrosiveResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MagicResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ShadowResistance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sight&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Hearing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Initiative&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Weight&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TrapDetection&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Willpower&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Bodybuilding&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PhysicalArmor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MagicArmor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PhysicalArmorPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MagicArmorPoints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_status_types&amp;diff=5804</id>
		<title>Scripting status types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_status_types&amp;diff=5804"/>
		<updated>2018-03-01T10:38:05Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
The following status types can be used in script:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HIT&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DYING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAL&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MUTED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CHARMED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;KNOCKED_DOWN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SUMMONING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEALING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;THROWN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHIELD&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TELEPORT_FALLING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CONSUME&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COMBAT&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AOO&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STORY_FROZEN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SNEAKING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNLOCK&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FEAR&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;BOOST&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNSHEATHED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STANCE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SITTING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LYING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;BLIND&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SMELLY&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;INFECTIOUS_DISEASED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;INVISIBLE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ROTATE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ENCUMBERED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IDENTIFY&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;REPAIR&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MATERIAL&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LEADERSHIP&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXPLODE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ADRENALINE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHACKLES_OF_PAIN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHACKLES_OF_PAIN_CASTER&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WIND_WALKER&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DARK_AVENGER&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;REMORSE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DECAYING_TOUCH&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNHEALABLE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FLANKED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CHANNELING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DRAIN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LINGERING_WOUNDS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;INFUSED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SPIRIT_VISION&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SPIRIT&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DAMAGE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FORCE_MOVE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLIMBING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;INCAPACITATED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;INSURFACE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SOURCE_MUTED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OVERPOWER&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COMBUSTION&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;POLYMORPHED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DAMAGE_ON_MOVE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DEMONIC_BARGAIN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GUARDIAN_ANGEL&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;THICK_OF_THE_FIGHT&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FLOATING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CHALLENGE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DISARMED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAL_SHARING&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAL_SHARING_CASTER&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXTRA_TURN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ACTIVE_DEFENSE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SPARK&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PLAY_DEAD&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CONSTRAINED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EFFECT&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DEACTIVATED&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_surface_types&amp;diff=5803</id>
		<title>Scripting surface types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_surface_types&amp;diff=5803"/>
		<updated>2018-03-01T10:37:37Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
The following surface types can be used in behavior scripts:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceNone&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFire&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFirePurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWater&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozenBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozenCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterFrozenPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBlood&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozenBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozenCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodFrozenPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoison&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOil&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOilBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOilCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceOilPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceLava&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSource&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWeb&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWebBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWebCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWebPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceDeepwater&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFireCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceWaterCloudElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrifiedBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrifiedCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceBloodCloudElectrifiedPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfacePoisonCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloudBlessed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloudCursed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceSmokeCloudPurified&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceExplosionCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceFrostCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SurfaceDeathfogCloud&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_relation_types&amp;diff=5802</id>
		<title>Scripting relation types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_relation_types&amp;diff=5802"/>
		<updated>2018-03-01T10:37:12Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list is purely for values that can be used in script. More information on these values can be found [[Scripting#Variables|here]].&amp;lt;br /&amp;gt;&lt;br /&gt;
The following relation types can be used in behavior scripts:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Unknown&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ally&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Enemy&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Neutral&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Player&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Multiplayer&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Party&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PlayersNoSummon&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Combat_AI&amp;diff=5693</id>
		<title>Combat AI</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Combat_AI&amp;diff=5693"/>
		<updated>2018-02-20T15:05:30Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: /* Skill overrides */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
Ai 2.0 or, as we'd like to call it, &amp;lt;b&amp;gt;Jane&amp;lt;/b&amp;gt; (used to be an abbreviation, but we already forgot about it the next day) no longer uses a script for every single skill to reason about its usage. Almost all logic has been moved to code, and all that's left in script is starting the Ai calculation, stopping the Ai calculation, and executing the action that has been selected by Ai. This script logic can be found in DefaultBehaviour.charScript. The Ai now takes into account the properties of a skill, the statuses that are applied, the weapons that are used, the items nearby, etc. Besides being smarter in general it also fixes a lot of issues with Ai ending turns we had in D:OS. It (attempts) to simulate what's going to happen if it will use a certain skill at a certain target and assign a score to it. The action with the highest score will be executed. All this happens automatically, so a new skill or status can be used by Ai without any extra steps. Of course, there are exceptions, and you'd still like to guide or override the Ai from time to time. That's what this page tries to cover in detail. &lt;br /&gt;
&lt;br /&gt;
=How does it work=&lt;br /&gt;
When trying to guide or override the Ai it's useful to know why the Ai is doing what it's doing. I'll try to explain the general approach the Ai takes in one turn to decide what action it will take, and try to refrain from using too many implementation details. First of all, let me explain a couple of terms up front that might also also be useful when touching [[CombatAi_Archetypes_And_Modifiers|archetypes and modifiers]]:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Action: walking to a position (if needed) and using a skill on one or multiple targets, or a fallback (finding a preferable position if no other action is viable)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ActionScore: the score of the use of a skill&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PositionScore: the score of a position, based on surfaces that may be on that position, allies or enemies in the vicinity, etc.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MovementScore: the score of moving from A to B, based on PositionScores on the path from A to B&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ActionCostModifier: the modifier combined from multiple modifiers that determines the total 'action cost' of an action, including AP and SP&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CostModifier: the modifier combined from multiple modifiers that determines the total 'cost' of an action. Affected by e.g. items being used, cooldowns, etc.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Let's say the Ai has the Projectile_Fireball skill and go through the steps that the Ai takes to calculate the scores for possible actions:&lt;br /&gt;
# Check first: can we cast this skill? Skill conditions, cooldowns, difficulty mode, statuses preventing us from casting, etc. No need to calculate anything if we can't even cast.&lt;br /&gt;
# Find interesting targets to cast the skill on. Ai checks for characters, items (barrels could explode), and positions on the terrain. We run a simulation on each of these targets to see what effect it will have. This simulation on every target gives us damage scores, health scores, buff scores, etc. for every object we hit (the &amp;lt;i&amp;gt;ActionScore&amp;lt;/i&amp;gt;).&lt;br /&gt;
# Calculate the 'final' score of every &amp;lt;i&amp;gt;Action&amp;lt;/i&amp;gt; (at this point this is purely the skill being casted). The different scores are thrown together, affected by a whole bunch of target specific [[CombatAi_Archetypes_And_Modifiers|modifiers]], and balanced so that we end up with one single value for the score.&lt;br /&gt;
# Only the interesting &amp;lt;i&amp;gt;Actions&amp;lt;/i&amp;gt;, based on the 'final' score in the previous step, will be investigated further. We start to find a good position to cast from. The character might not be able to cast from it's current position (out of sight, out of range, etc.), or the character might not like its current position due to nearby enemies. &amp;lt;i&amp;gt;PositionScores&amp;lt;/i&amp;gt; will be calculated and we hope to find a good position for every action.&lt;br /&gt;
# After finding a good position we start calculating the &amp;lt;i&amp;gt;MovementScore&amp;lt;/i&amp;gt;. Does the character need to walk through a fire surface? Could we jump instead of walking? Do I have enough AP to even walk there this turn?&lt;br /&gt;
# In the end only one &amp;lt;i&amp;gt;Action&amp;lt;/i&amp;gt; will be on top. We have a skill (or default attack), a target, a position, and even the path has been checked. The action will be fetched from script and executed.&lt;br /&gt;
# What if we don't have any &amp;lt;i&amp;gt;Action&amp;lt;/i&amp;gt; that is deemed positive? That's when the fallback action kicks in. The fallback action tries to find a good position for the character and walks there.&lt;br /&gt;
&lt;br /&gt;
=Guiding Ai=&lt;br /&gt;
There are multiple ways to guide Ai into certain actions or behaviour. Skill conditions, archetypes and modifiers, and AiHints are all supported by Ai and are used by Ai during the score calculation. Any other way to guide Ai might result in incorrect behaviour (but you're welcome to try).&lt;br /&gt;
===Skill conditions===&lt;br /&gt;
[[File:CombatAi_SkillConditions.PNG|none]]&lt;br /&gt;
&amp;lt;sub&amp;gt;The skill conditions panel you get when adding a skill to a character&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The skill conditions panel can be used to set conditions for casting a skill (e.g. prohibit using a skill if the caster is still full health), set flags for the skill, or apply a simple score modifier.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AiFlags: AiFlags can be set on a [[#AiFlags|skill on a global level]], but they can also be set in the skill conditions. A list of the flags and what they do can be found [[CombatAi_AiFlags|here]]. It is possible to use multiple flags by concatenating them with a semicolon (';')&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MinimumImpact: The skill should impact at least this amount of characters in a &amp;lt;i&amp;gt;positive&amp;lt;/i&amp;gt; way, or else it can not be used. Positive in this case means it's benefitial for the caster: e.g. healing an ally, or damaging an enemy&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnlyCastOnSelf: The skill can only be cast on self. Can be used, for example, to force a character to only use the bless skill on itself&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;StartRound: The skill can only be used from this round. Everything below and including 1 means it can be used from the start&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;i&amp;gt;HasNoMagicalArmor&amp;lt;/i&amp;gt;: The skill can only be used if the source/target has no magical armor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;i&amp;gt;HasNoPhysicalArmor&amp;lt;/i&amp;gt;: The skill can only be used if the source/target has no physical armor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;i&amp;gt;MaximumHealthPercentage&amp;lt;/i&amp;gt;: The skill can only be used if the source/target has a health percentage lower or equal to this value&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;i&amp;gt;MinimumHealthPercentage&amp;lt;/i&amp;gt;: The skill can only be used if the source/target has a health percentage higher or equal to this value&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;i&amp;gt;Tags&amp;lt;/i&amp;gt;: The skill can only be used if the source/target has these tags&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
You may have noticed that the italic conditions in above list are listed twice in the skill conditions. It's possible to set these for both the source (the caster of the skill) and the target of the skill (if the skill has a direct target).&lt;br /&gt;
&amp;lt;b&amp;gt;Tip&amp;lt;/b&amp;gt;: Tags can be used for any skill condition that is not part of the standard skill conditions. You can create a custom tag and a script that assigns/removes a tag based on scripted conditions.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The last skill conditions are the difficulty modes. These are simple checkboxes to enable/disable a skill on a certain difficulty. The very last thing on the list, the score modifier, is exactly what it says it is: a score modifier. If you want the Ai to use a skill more often, even if it's not that good at all, you could increase the score modifier. You could also use to, for example, force Ai to cast a certain skill after an event: set a high score modifier and set a source tag condition for a tag that you apply via script. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Archetypes and modifiers===&lt;br /&gt;
[[File:CombatAi_Archetype.PNG|none]]&lt;br /&gt;
&amp;lt;sub&amp;gt;The EXTERN script variable that sets the archetype&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The EXTERN Archetype parameter in the DefaultBehaviour script allows you to set the archetype of a character. It can also be set using the &amp;lt;i&amp;gt;CharacterSetArchetype&amp;lt;/i&amp;gt; call in script. Archetypes are linked to a text file that contain modifiers for Ai. These modifiers are used when calculating the scores for all the skills and are delicately balanced. And you can change them.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
You can find the archetype files in: &amp;lt;i&amp;gt;Public/YourMod/AI/Archetypes/&amp;lt;/i&amp;gt; (if the directory doesn't exist you can just create it yourself). All .txt files in the Archetypes folder will be shown as options in script. The archetypes in this folder are used for Explorer and Classic mode. If you want to override modifiers from archetypes for Tactician and Hardcore mode you can place these in a folder called &amp;lt;i&amp;gt;TACTICIAN&amp;lt;/i&amp;gt; inside the &amp;lt;i&amp;gt;Archetypes&amp;lt;/i&amp;gt; folder. So, let's say we want to override a modifier in the base archetype (an already existing archetype in D:OS2). We'd have to create a new text file called base.txt and give it the following content:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// We want self-healing to be more common in our mod -&amp;gt; yes, comments work in these files!&lt;br /&gt;
MULTIPLIER_HEAL_SELF_POS          10.0 // This will override the modifier MULTIPLIER_HEAL_SELF_POS located in the D:OS2 base archetype with our own value of 10.0. Only int and float values are allowed in these files&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Or we'd like to create a completely new archetype called myFirstArchetype. We'd have to create a text file called myFirstArchetype.txt and give it the following content:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// We copy over all modifiers from the base archetype because we don't want to specify every single modifier&lt;br /&gt;
USING base&lt;br /&gt;
&lt;br /&gt;
MULTIPLIER_HEAL_SELF_POS          10.0 // Because I'm unoriginal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you place a .txt file containing the above snippet in your &amp;lt;i&amp;gt;Archetypes&amp;lt;/i&amp;gt; folder you'll have the archetype myFirstArchetype showing up in script.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The only information you're still missing now is a list of all the modifiers and archetypes and what they do. You can find that list right [[CombatAi_Archetypes_And_Modifiers|here]].&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===AiHints===&lt;br /&gt;
[[File:CombatAi_AiHints.PNG|none]]&lt;br /&gt;
&amp;lt;sub&amp;gt;The EXTERN script variables AiHints and StayInAiHints&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can assign a tag to the EXTERN AiHint parameter in the DefaultBehaviour script for the Ai to use. Ai will find AiHintAreaTriggers with this tag and use these during the calculation. The AiHintAreaTriggers with the specified tag (referred to ai AiHints from now on) are areas where the Ai would &amp;lt;i&amp;gt;prefer&amp;lt;/i&amp;gt; to stand when attacking. You could use this when you, for example, want a ranger to prefer standing on some platforms in the back instead of on the lower ground. Keep in mind that it does &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; force the Ai to stay in the AiHint. For that you also need to enable the &amp;lt;i&amp;gt;StayInAiHints&amp;lt;/i&amp;gt; parameter in the same DefaultBehaviour script. This forces the Ai to always stand in the AiHint, even if it blocks it from attacking. There's only 2 exceptions to this rule:&lt;br /&gt;
# All of the AiHints are filled with dangerous surfaces (all of them full of fire for example)&lt;br /&gt;
# The character has been moved outside of the AiHint (started outside of it or has been teleported for example) and is not able to attack anyone from any AiHints. In this case it will try to attack anyone without moving.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Tags===&lt;br /&gt;
Sometimes you'd like to make sure Ai prefers a target, or doesn't, or even totally ignores a target. There are some tags you can set on objects to make it work:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AI_PREFERRED_TARGET: boosts any score on this target. This will not only increase being attacked by enemies, but also being healed by allies&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AI_UNPREFERRED_TARGET: decreases any score on this target. This will not only decrease being attacked by enemies, but also being healed by allies&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AI_IGNORED_TARGET: completely ignored by Ai. Damage doesn't matter, healing doesn't matter, killing doesn't matter.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Overriding Ai=&lt;br /&gt;
It's strongly advised to not override the Ai, but we understand that it's needed from time to time. Below are some supported ways to override the Ai and some tips and tricks you might want to use.&lt;br /&gt;
===Skills===&lt;br /&gt;
The skills in [[skill_creation|SkillData]] have several properties that affect the Ai in a special way.&lt;br /&gt;
====Skill overrides====&lt;br /&gt;
Several skill types have the possibility to be overwritten with the score of a specified &amp;lt;b&amp;gt;Target&amp;lt;/b&amp;gt; skill (can not be of any other type) in the AiCalculationSkillOverride column. If a skill has an override it will calculate the score by simulating with the Target skill instead of the original skill. This can be used to make the Ai think a skill will do something that it won't actually do, but some skills actually need to have an override skill:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Summon skills: Ai does not know what kind of impact a summon will have. The AiCalculationSkillOverride skill will be used to calculate the impact of the summon.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Projectile skills with a filled in SpawnObject: Just like with Summon skills Ai does not know what kind of impact a summon will have. The AiCalculationSkillOverride skill will be used to calculate the impact of the summon.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Target skills: The AiCalculationSkillOverride skill will be used to calculate the score on the target.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rain and Shout skills: The AiCalculationSkillOverride skill will be used on all targets that would get hit by the original skill to calculate the score on the target.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Next to Summon and Projectile skills it is also supported by Shout and Target skills.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The override skill can be fairly simple, just like the Target_DummyTargetSkill that we use in a couple of cases. However, it's advised to make the override skill as accurate as possible. E.g.: for a Summon skill that spawns a summon that does only fire damage you shouldn't use an override skill that only does physical damage. Ai might then cast the summon in the middle of a group of enemies that are all immune to fire damage. Use a target skill that represents the actual summon as accurate as you possibly can.&lt;br /&gt;
&lt;br /&gt;
====AiFlags====&lt;br /&gt;
The AiFlags column is used to set flags specifically for Ai. A list of the flags and what they do can be found [[CombatAi_AiFlags|here]]. It is possible to use multiple flags by concatenating them with a semicolon (';').&lt;br /&gt;
===Scripting===&lt;br /&gt;
Overriding Ai with scripting is relatively easy: make sure the priority of your REACTION is higher than 60 (higher than all REACTIONs related to Ai) and the Ai won't execute anymore.&lt;br /&gt;
&lt;br /&gt;
=Unsupported properties=&lt;br /&gt;
Some skill and status properties are not supported for Ai. If it's not supported Ai will ignore the property altogether and it might do unexpected things. Try to avoid these properties for Ai and use the &amp;lt;i&amp;gt;CanNotUse&amp;lt;/i&amp;gt; [[#AiFlags|AiFlag]] to prevent the Ai from casting any skills with these properties.&lt;br /&gt;
===Skills===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Chaos damage type (random damage type)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Spawning multiple summons&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Zone skills with a push distance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Skills with the Sabotage property&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Skills with the Equalize property&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Skills with the SwapSurfaces property&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Skills with the CreateConeSurface property&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Projectile skills with an angle and multiple targets&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
===Statuses===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Surface absorption boostst&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Adding skills&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The statuses STANCE, SMELLY, CLEAN, DARK_AVENGER, REMORSE, UNHEALABLE, CHANNELING, INFUSED, LINGERING_WOUNDS, SPIRIT_VISION, FORCE_MOVE, DEMONIC_BARGAIN, FLOATING, CHALLENGE, and EXTRA_TURN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Consume statuses that set weapon overrides&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Consume statuses that reset cooldowns&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Script_editor&amp;diff=3421</id>
		<title>Script editor</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Script_editor&amp;diff=3421"/>
		<updated>2017-10-02T09:15:59Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Description==&lt;br /&gt;
The Script Editor allows you to create and edit scripts. You can also use it to [[script_debugger|debug scripts]].&lt;br /&gt;
&lt;br /&gt;
== Using the Script Editor ==&lt;br /&gt;
[[File:ScriptEditor_StepByStep.png|none]]&lt;br /&gt;
&amp;lt;sub&amp;gt;The Script Editor with each component numbered and an absurd amount of errors to illustrate a stressful situation&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The Script Editor consists of the following components:&amp;lt;/p&amp;gt;&lt;br /&gt;
# [[#Menu|Menu]]&lt;br /&gt;
# [[#Quick Menu|Quick Menu]]&lt;br /&gt;
# [[#Solution Explorer|Solution Explorer]]&lt;br /&gt;
# [[#Script Editor|Script Editor]]&lt;br /&gt;
# [[#Debug Panel|Debug Panel]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Menu===&lt;br /&gt;
====File====&lt;br /&gt;
[[File:ScriptEditor_Menu_File.PNG|none]]&lt;br /&gt;
&amp;lt;sub&amp;gt;A closeup of the File menu&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The File menu allows you to create, save, open, or reload script files. It also allows you to exit the editor.&lt;br /&gt;
====Edit====&lt;br /&gt;
[[File:ScriptEditor_Menu_Edit.PNG|none]]&lt;br /&gt;
&amp;lt;sub&amp;gt;A closeup of the Edit menu&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Edit menu allows you to undo or redo, cut/copy/paste, select all, or find within scripts.&lt;br /&gt;
====View====&lt;br /&gt;
[[File:ScriptEditor_Menu_View.PNG|none]]&lt;br /&gt;
&amp;lt;sub&amp;gt;A closeup of the View menu&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The View menu allows you to show the Solution Panel, the Errors Panel, the Watch Panel, and the Output Panel.&lt;br /&gt;
====Build====&lt;br /&gt;
[[File:ScriptEditor_Menu_Build.PNG|none]]&lt;br /&gt;
&amp;lt;sub&amp;gt;A closeup of the Build menu&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Build menu allows you to build the current file, build all files, rebuild all files, and reload the object lists.&lt;br /&gt;
====Debug====&lt;br /&gt;
[[File:ScriptEditor_Menu_Debug.PNG|none]]&lt;br /&gt;
&amp;lt;sub&amp;gt;A closeup of the Debug menu&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Debug menu allows you to pause, continue, and step when debugging. These are not available while editing scripts. More information can be found [[script_debugger|here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Quick Menu===&lt;br /&gt;
The Quick Menu contains the most used options from the Menu and a couple more. All debugging related options on the Quick Menu are explained in detail on the [[script_debugger|debug scripts]] page.&lt;br /&gt;
From left to right the Quick Menu buttons do the following:&lt;br /&gt;
# Create a new script file&lt;br /&gt;
# Open a script file&lt;br /&gt;
# Save a script file&lt;br /&gt;
# Save all script files&lt;br /&gt;
# Cut selected text&lt;br /&gt;
# Copy selected text&lt;br /&gt;
# Paste text&lt;br /&gt;
# Build the current script&lt;br /&gt;
# Build all scripts&lt;br /&gt;
# Rebuild all scripts&lt;br /&gt;
# Reload the object lists&lt;br /&gt;
# Collapse all regions by one level in the current script&lt;br /&gt;
# Expand all regions by one level in the current script&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Solution Explorer===&lt;br /&gt;
[[File:ScriptEditor_Solution_Panel.PNG|none]]&lt;br /&gt;
&amp;lt;sub&amp;gt;The solution explorer&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The solution explorer shows the scripts in their respective project and folder as they appear in the Data folder. You can filter by typing in the filter textbox at the bottom and quickly clear the filter by pressing the X next to the filter. The Solution Explorer will only show files with the extensions .charScript, .itemScript, and .gameScript.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Script Editor===&lt;br /&gt;
[[File:ScriptEditor_Script_Editor.PNG|none]]&lt;br /&gt;
&amp;lt;sub&amp;gt;The script editor&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The script editor is a simple text editor, which also correctly color codes the script. It allows you to expand or collapse regions that are automatically created for each section (INIT, BEHAVIOUR, STORY, and EVENTS) and for each REACTION, EVENT, and SCRIPTFRAME. The status at the top of the script editor shows you whether the file has been built succesfully (meaning without any errors). A file can only be built when it is linked to a script resource.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Debug Panel===&lt;br /&gt;
[[File:ScriptEditor_Debug_Panel.PNG|none]]&lt;br /&gt;
&amp;lt;sub&amp;gt;The debug panel, containing the error panel, watch panel, and output panel&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The debug panel contains three panels: error panel, watch panel, and output panel. The watch panel and output panel are explained in detail on the [[script_debugger|script debugger]] page. The error panel contains both errors and warnings that occured during the latest build (could be a single script or a full build of all scripts). It will show you the error/warning, the file, the line, and -if applicable- the template. Double clicking the error will automatically open the relevant script at the correct line and show the error/warning with a red/yellow highlight. If an error description is preceded by [Instantiating] it will open the affected character or item. Instantation errors usually mean that an EXTERN variable has been filled in incorrectly on a character or item.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Find Panel===&lt;br /&gt;
[[File:ScriptEditor_Find_Panel.PNG|none]]&lt;br /&gt;
&amp;lt;sub&amp;gt;The find panel&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The find panel (CTRL+F) allows you to search in the current script or in all scripts, with the options to match case or match the whole word.&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting&amp;diff=2266</id>
		<title>Scripting</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting&amp;diff=2266"/>
		<updated>2017-09-13T18:30:22Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: /* Common Mistakes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
The scripting system is currently used for the behaviour of characters and items. For characters this is only part of the behaviour, as many more systems are influencing this in the following priority:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Story: executing Osiris Tasks&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Dialogs: dialog behaviour and animations&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Statuses: dying, frozen, petrified, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Scripts: executing the current reaction or scriptframe&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
Scripts are the lowest priority and will only execute if none of the other systems want to do something. For items it's a lot simpler, as the scripting system is the only thing that influences the items behaviour.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Sections=&lt;br /&gt;
Before any section in a script, we can INCLUDE files. When you INCLUDE a file, you're telling the system to parse that file first.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===INIT===&lt;br /&gt;
In the INIT section you can declare global variables and inherit from other scripts. Global variables always start with&amp;amp;nbsp;% and can be accessed and modified everywhere (including other scripts, osiris, and in code). There are also EXTERN variables, which are exposed when you assign a script to an object so you can change the value for local instances of the script. The INIT section also contains the special variable '__Me', which contains the owner of the script. This is a character or item depending on the script type. Code will automatically fill this variable.&amp;lt;br /&amp;gt;&lt;br /&gt;
Inheritance is done with the USING keyword and copies everything from the other script into the current script. This includes all global variables, reactions, scriptframes, and events. You can use USING SHARED if you intend to overwrite reactions, events, or scriptframes.&amp;lt;br /&amp;gt;&lt;br /&gt;
An example INIT section:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INIT&lt;br /&gt;
     USING SHARED Base&lt;br /&gt;
     CHARACTER:__Me&lt;br /&gt;
     CHARACTER:%AnotherCharacter=null&lt;br /&gt;
     FLOAT3:%CurrentPosition=null&lt;br /&gt;
     EXTERN INT:%CanRun=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to override a specific reaction, event, or scriptframe you have to specify this with the OVERRIDE keyword:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REACTION TestReaction, 5 OVERRIDE&lt;br /&gt;
EVENT TestEvent OVERRIDE&lt;br /&gt;
SCRIPTFRAME TestFrame OVERRIDE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If needed, you can also only inherit specific reactions, events, or scriptframes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
USING ScriptName REACTION ReactionName,NewPriority&lt;br /&gt;
USING ScriptName EVENT EventName&lt;br /&gt;
USING ScriptName SCRIPTFRAME ScriptFrameName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===BEHAVIOUR===&lt;br /&gt;
This section contains the actual behaviour of the object. It solely consists of a whole bunch of reactions, of which only 1 reaction can be active at the same time. The current reaction gets selected based on its priority and its CHECK. The priority defines how much it wants to be executed and the CHECK decided whether its possible to be executed. The reaction with the highest priority whose CHECK succeeds will be selected for execution:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;span style=&amp;quot;background-color:transparent;font-size:1em&amp;quot;&amp;gt;The whole list of reactions is always sorted from HIGH to LOW priorities.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;span style=&amp;quot;background-color:transparent;font-size:1em&amp;quot;&amp;gt;We then check in that order all the reactions with a higher priority of the current reaction and see if their CHECK succeeds.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;span style=&amp;quot;background-color:transparent;font-size:1em&amp;quot;&amp;gt;As soon as a higher priority reaction's CHECK succeeds, it interrupts the current reaction and will start executing.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Important note&amp;lt;/b&amp;gt;: only the CHECKs of higher priority reactions are evaluated every frame. This means that the current reaction's CHECK is &amp;lt;b&amp;gt;NOT&amp;lt;/b&amp;gt; reevaluated while it's executing! It could become invalid during the execution. This is also true when calling Reset(): execution simply restarts at the beginning of the current reaction without evaluating the CHECK conditions again.&lt;br /&gt;
On top of the priority and CHECKs there's also the USAGE keyword. A reaction needs to specify a USAGE context. You can pick the following USAGE contexts:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;USAGE COMBAT: can only be executed during combat when its the turn of the object&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;USAGE WAITING: can only be executed during combat when waiting for its turn&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;USAGE PEACE: can only be executed when not in combat&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;USAGE ALL: can always be executed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
A reaction can have its own local variables. These variables have to start with an underscore and can only be accessed within the reaction itself.&amp;lt;br /&amp;gt;&lt;br /&gt;
As soon as a reaction is interrupted, the INTERRUPT event will be called immediately and you can execute some code to for example Reset the reaction. You can catch all INTERRUPTS or only specific interrupts (like the movement failed interrupt) and execute actions on the interrupt. If you catch a specific interrupt event you have the possibility to fill in variables for the event:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An underscore ('_'): this variable is not relevant for the event, it will not prevent the event from firing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A constant (e.g. &amp;quot;TestString&amp;quot;) or a global variable: the variable has to be equal to this constant, otherwise the event will not be executed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A local variable: this variable will get filled with the variable from the event&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Some examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OnEnteredCombat(__Me, _) // Only catch the event when __Me entered combat, the second variable one is irrelevant&lt;br /&gt;
OnEnteredCombat(_, %GlobalItemVariable) // Only catch the event when %GlobalItemVariable entered combat, the first variable is irrelevant&lt;br /&gt;
OnEnteredCombat(_LocalCharacterVariable, _) // Always catches the event, and _LocalCharacterVariable contains the character that entered combat. BEWARE: _LocalCharacterVariable can be null if an item entered combat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The actions during an interrupt are limited to immediate/simple actions, which can be executed immediately (e.g. CharacterMoveTo() is not allowed). Keep in mind though that a reaction can be interrupted for many reasons:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Higher priority reaction takes over.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Other system takes over: statuses/dialog/story&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An exception was thrown in the script: e.g. pathfinding failed, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The object got culled (more details on culling can be found later on this page)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Important note&amp;lt;/b&amp;gt;: if a reaction gets interrupted and later gets resumed, it will continue executing where it got interrupted! (unless &amp;quot;Reset&amp;quot; was called in the INTERRUPT handler, in which case it will begin from the start again)&amp;lt;br /&amp;gt;&lt;br /&gt;
An example BEHAVIOUR section:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEHAVIOUR&lt;br /&gt;
REACTION TestReaction, 5 // Priority 5&lt;br /&gt;
USAGE PEACE&lt;br /&gt;
VARS&lt;br /&gt;
     CHARACTER:_TestCharacter&lt;br /&gt;
CHECK &amp;quot;(c1|c2)&amp;amp;!c3&amp;quot; // Reaction can be executed when one of the first 2 conditions passes, and the third condition doesn't pass&lt;br /&gt;
     IsInSurface(__Me, SurfaceOil)&lt;br /&gt;
     IsInDangerousSurface(__Me)&lt;br /&gt;
     CharacterIsFloating(__Me)&lt;br /&gt;
ACTIONS&lt;br /&gt;
     CharacterFleeFromSurface()&lt;br /&gt;
INTERRUPT&lt;br /&gt;
ON&lt;br /&gt;
     OnMovementFailed(_) // Only when interrupted by a failed movement&lt;br /&gt;
ACTIONS&lt;br /&gt;
     Reset()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===STORY===&lt;br /&gt;
There are specific story &amp;quot;reactions&amp;quot; called scriptframes. These are almost exactly the same as reactions, but they don't have a priority or CHECK block. They are managed by Story (Osiris) and can be SET or INJECTED. We keep a stack of all currently set scriptframes. If something is on the stack, the current REACTION always gets interrupted! The stack is the highest priority and comes before BEHAVIOUR reactions! Example of stack behaviour:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When you push something, it is put on the top of the stack.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When you pop, the top scriptframe is removed (happens when it finished executing)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
In our case:&amp;lt;br /&amp;gt;&lt;br /&gt;
If you SET a scriptframe the stack gets cleared (Abort!) and the new scriptframe gets pushed on the stack.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you INJECT a scriptframe, it will just push a copy of it on the stack. You can keep injecting the same scriptframe on the stack and it will be executed multiple times.&amp;lt;br /&amp;gt;&lt;br /&gt;
As soon as the TOP scriptframe is finished, it pops from the stack and the one below it starts/resumes executing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Just like with reactions, if you INJECT a new scriptframe and there was already a scriptframe on the stack active, it will get interrupted and later resume where it was before. The syntax for writing a SCRIPTFRAME is exactly the same as a REACTION (except for the lack of priority and CHECK, and the fact that they need to be in the STORY section).&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===EVENTS===&lt;br /&gt;
This section contains all the events that we want to catch. Events are always &amp;lt;b&amp;gt;immediately&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;completely&amp;lt;/b&amp;gt; executed! It cannot take multiple frames: it's a blocking call and will execute and return immediately when it's done. Even when the object is culled or offstage will it execute its events. Events are always thrown to all objects in the current level. An event can be thrown from code, osiris, or from script itself.&amp;lt;br /&amp;gt;&lt;br /&gt;
In a reaction or scriptframe, each frame only 1 action gets executed at most. Let's take a piece of script from a REACTION:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Set(%TargetPos,%Enemy)&lt;br /&gt;
CharacterEvent(%Enemy,&amp;quot;Attack!&amp;quot;) &lt;br /&gt;
CharacterMoveTo(%TargetPos)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In the example above, the first 2 lines will take 2 frames (1 frame per line). The third one will take as long as it takes for the character to move to the target position. However, in an event the actions get executed immediately. Even if it was 100 actions with IFs and WHILEs, it would be executed as it was 1 action. For that reason, you cannot use actions in events that need time (Sleep, CharacterMoveTo, ...). Additionally, the number of actions an event can execute is limited. If you exceed the limit, Osiris will log an error and exit the event. In fact, let me amaze you even more. If you throw a CharacterEvent in an event, that spawns a new event and is thrown on every character and item... even all those events are executed immediately before it gets to the next line.&amp;lt;br /&amp;gt;&lt;br /&gt;
Just like INTERRUPTs in REACTIONs, EVENTs have to react on something (INTERRUPTs can and EVENTs must). The syntax is equal as well (more information on the event variables can be found in the REACTION INTERRUPT section).&amp;lt;br /&amp;gt;&lt;br /&gt;
An example EVENTS section:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EVENT TestInitEvent&lt;br /&gt;
ON&lt;br /&gt;
     OnInit()&lt;br /&gt;
ACTIONS&lt;br /&gt;
     IF &amp;quot;!c1&amp;quot;&lt;br /&gt;
          IsEqual(%StartTrigger, null)&lt;br /&gt;
     THEN&lt;br /&gt;
          TeleportTo(__Me, %StartTrigger)&lt;br /&gt;
     ENDIF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Variables=&lt;br /&gt;
===Types===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;INTEGER and INTEGER64: 'whole' numbers. The difference between INTEGER and INTEGER64 is not relevant for the scripter (unless you care about really, really big numbers), as long as you make sure to pass the right type in actions. For example: -10, 0, 8, 102324, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FLOAT: all other numbers. For example: 0.1, -0.323, 8.3, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STRING and FIXEDSTRING: the difference between STRING and FIXEDSTRING is not important when scripting, just make sure to pass the correct type in actions. For example: &amp;quot;&amp;quot;, &amp;quot;testString&amp;quot;, &amp;quot;testing123&amp;quot;, ... . &amp;lt;b&amp;gt;Important note:&amp;lt;/b&amp;gt; do not start a string with the characters '%' or '_', as they will get recognized as a variable instead (it's not intended, it's a bug).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CHARACTER, ITEM, TRIGGER, and SPLINE: objects that are currently loaded in the game. This includes globals and locals of the curently loaded level. The script will assert if the script uses an object that isn't currently loaded. It will also warn you if the character's name does not start with the prefix 'S_'. This prefix helps to prevent objects being deleted because they aren't used (they could be used in script). For example: S_GLO_Dallis, S_MyFirstItem, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RELATION_TYPE: only used in a handful actions. A list of possible relation types can be found [[scripting_relation_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SKILL_ID: the name/id of a skill as it can be found in [[skill_creation|SkillData]]. For example: Target_Bless, Projectile_Fireball, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SURFACE_TYPE: surface types can be found [[scripting_surface_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STATUS_TYPE: status types can be found [[Scripting_status_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CHARACTERSTAT_TYPE: characterstat types can be found [[Scripting_characterstat_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ITEMSTAT_TYPE: itemstat types can be found [[Scripting_itemstat_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WEAPON_TYPE: weapon types can be found [[Scripting_weapon_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DAMAGE_TYPE: damage types can be found [[Scripting_damage_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TALENT_TYPE: talent types can be found [[Scripting_talent_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COMPARE_TYPE: compare types can be found [[Scripting_compare_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COMPARE_FUNCTION: compare functions can be found [[Scripting_compare_functions|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FLOAT3: floats are written as {number;number;number}, and can contain integers as well&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CHARACTERTEMPLATE, ITEMTEMPLATE, and PROJECTILETEMPLATE: the script will warn you if the template's name does not start with the prefix 'S_'. This prefix helps to prevent objects being deleted because they aren't used (they could be used in script). For example: S_Chair_A, S_Human_Male_B, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;POTION_ID: all loaded potions from stats&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ABILITY_TYPE: ability types can be found [[Scripting_ability_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DEATH_TYPE: death types can be found [[Scripting_death_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STATUS_ID: all loaded statuses from stats&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ARCHETYPE: all available archetypes that are loaded. More information on archetypes can be found [[CombatAi_Archetypes_And_Modifiers|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SURFACE_TRANSFORM_TYPE: surface transform types can be found [[Scripting_surface_transform_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Lists===&lt;br /&gt;
Lists are a special parameter type and contain multiple parameters of a single type.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Important note&amp;lt;/b&amp;gt;: Lists are more convenient, but they are slower than normal parameters. They also have a limited size, so don't try to fill them with thousands of entries.&amp;lt;br /&amp;gt;&lt;br /&gt;
Declaring a list:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LIST&amp;lt;INT&amp;gt;:%TestListInt // Fine&lt;br /&gt;
LIST&amp;lt;CHARACTER&amp;gt;:%TestListCharacter // Fine&lt;br /&gt;
LIST&amp;lt;LIST&amp;lt;INT&amp;gt;&amp;gt;:%TestListNested // Error, can't nest lists&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Adding entries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListAdd(%TestListInt, 0) // Fine&lt;br /&gt;
ListAdd(%TestListInt, {0;1;2}) // Error, trying to add a FLOAT3 to an INT LIST&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Removing entries: indices start at 1, and end at the list size. All entries after the removed entry will be shifted to the left:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListRemove(%TestListInt, 1) // Fine, assuming that the list has 1 or more entries&lt;br /&gt;
ListRemove(%TestListInt, 0) // Error, invalid index&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Setting or getting entries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListSet(%TestListInt, 1, %AnInt) // Fine&lt;br /&gt;
ListGet(%TestListInt, 1, %AnInt)&lt;br /&gt;
&lt;br /&gt;
ListSet(%TestListInt, 1, %ACharacter) // Error, trying to set a CHARACTER in an INT LIST&lt;br /&gt;
ListGet(%TestListInt, 1, %ACharacter)&lt;br /&gt;
&lt;br /&gt;
ListSet(%TestListInt, 0, %AnInt) // Error, invalid index&lt;br /&gt;
ListGet(%TestListInt, 0, %AnInt)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Getting the list size:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListGetSize(%TestList, %ListSize)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Clearing a list:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListClear(%TestList)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Important note&amp;lt;/b&amp;gt;: Lists currently do not support EXTERN, constants, and STRING , meaning that the following lines will not work in scripts and result in an error during script build:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LIST&amp;lt;INT&amp;gt;:%TestList = {1, 2, 3, 4, 5} // Using a constant to initialize&lt;br /&gt;
ListGetSize({1, 2, 3, 4}, %ListSize) // Using a constant in an action call&lt;br /&gt;
EXTERN LIST&amp;lt;INT&amp;gt;:%TestList = {1, 2} // Using EXTERN and using a constant to initialize&lt;br /&gt;
LIST&amp;lt;STRING&amp;gt;:%TestString // Using STRING as the type&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, how would you use these lists?&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Important Events=&lt;br /&gt;
===OnInit and OnShutDown===&lt;br /&gt;
OnInit is called each time on all objects in the level when the level is loaded, and OnShutdown is called when the level is unloaded. This would be the place where you can create/destroy your looping effects that should always be on the object.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===OnLoaded===&lt;br /&gt;
OnLoaded is called when the savegame is loaded or when the levelcache is loaded (levelswap). The version of the savegame is passed so you can do your patching &amp;quot;hacks&amp;quot; if necessary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Interrupts===&lt;br /&gt;
Interrupts are only called on reactions and can only be caught on that reaction:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnBetterReactionFound: a higher priority reaction succeeded its check&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnNoReactionFound: no reaction has succeeded its check&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnScriptDisabled: another system has taken control (dialogs, statuses, story)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnManualInterrupt: the Interrupt action itself has caused the interrupt&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnMovementFailed: pathfinding has failed to find a path to the target&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnException: a character task has failed&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===OnFunction===&lt;br /&gt;
You can create your own &amp;quot;functions' with &amp;lt;b&amp;gt;CallFunction(&amp;quot;functionName&amp;quot;)&amp;lt;/b&amp;gt; and catching the event &amp;lt;b&amp;gt;OnFunction(&amp;quot;functionName&amp;quot;)&amp;lt;/b&amp;gt;. This way you can share functionality between multiple events and reactions. You can not pass parameters directly, but you could set some function-specific global variables which the function uses and can even 'return' results in.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Culling=&lt;br /&gt;
For performance reasons we only update a small set of all the characters &amp;amp; items in the level.&amp;lt;br /&amp;gt;&lt;br /&gt;
The updating characters are:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Force updating (can be set in script/story, but should only be used in an emergency!)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In Combat&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Executing Osiris Tasks&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In range of the party (within 40m)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
The updating items are:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Force updating (can be set in script/story using ItemSetForceSynch(), but should only be used in an emergency!)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In Combat&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Moving&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In range of the party (within 40m)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
This means that in most cases objects far away from the party get culled and stop updating. When an object doesn't update anymore this means the behaviour is interrupted and won't be executed anymore. However, events always get executed, so culling has no impact on this. Another consequence of culling is that timers of that script are not ticking anymore and are basically paused.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Debugging=&lt;br /&gt;
There are 4 ways to help you debug:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The script debugger in the script editor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CTRL+SHIFT+ClICK on the object you wish to debug to show the Script Screen, and CTRL+SHIFT+SCROLL to the Script and/or Variables screen to see what the current state is.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Add a whole bunch of DebugText output in your code to see which code is called in what order.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Start the script log for an object, which logs as much stuff as possible about the script (reactions, interrupts, events, ...)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Script Debugger===&lt;br /&gt;
See the [[script_debugger|Script Debugger]] page for more information.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Script Screen===&lt;br /&gt;
On the left side of the Script Screen it shows the script variables, the script reactions (ordered from high priority to low), and the current Event it catches. It colors the reactions gray (not checked), green (check passed), and red (check failed). At the right you can see the current reaction's conditions and actions. You can see which action is currently executing and you can see the return results of the conditions from the check: gray (not evaluated), green (TRUE), and red (FALSE).&amp;lt;br /&amp;gt;&lt;br /&gt;
You can filter in the script variables through the [[console|console]] by using: &amp;quot;filtervar &amp;lt;filter&amp;gt;&amp;quot;.&lt;br /&gt;
&amp;lt;b&amp;gt;Tip:&amp;lt;/b&amp;gt; type &amp;quot;filtervar asdf&amp;quot; or something to remove all variables so you can see all the reactions!&amp;lt;br /&amp;gt;&lt;br /&gt;
You can also change which reaction you want to see at the right, by entering the number of that reaction in the console. This way you can easily check why certain reactions are never succeeding their CHECK by checking the return values of the conditions. To do this first you must activate this mode, by entering &amp;quot;show server&amp;quot; in the console. Then you can type the number of the wanted reaction or type &amp;quot;0&amp;quot; to show the current reaction again.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===DebugText===&lt;br /&gt;
You can put DebugText in events/scriptframes/reactions to print text in the world on any object you want. This way you can easily see if you get in the code you wrote and you can also print any variable's value at that time. To print the variables we use the same syntax as translated strings: [1] [2] [3] ...&amp;lt;br /&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DebugText(__Me,&amp;quot;Target: [1], Speed is [2]&amp;quot;,_Target,%Speed)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For characters, items, triggers, splines, and templates the name will be shown in the debug text. Numbers will be shown in full, and all other variables will be directly converted to strings.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===ScriptLog===&lt;br /&gt;
You can also start/stop the scriptlog in console with:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;ai log all&amp;quot;: Start the scriptlog for all character/items.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;ai log none&amp;quot;: Stop the scriptlog for all character/items.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;ai log selected&amp;quot;: Toggle the separate scriptlog for the selected (CTRL+SHIFT+CLICK) object&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
It will generate scriptlog file(s) right next to the executable.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Common Mistakes=&lt;br /&gt;
===Reset()===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REACTION CastSkill, 1000&lt;br /&gt;
USAGE COMBAT&lt;br /&gt;
VARS&lt;br /&gt;
     FLOAT:_minRange&lt;br /&gt;
     FLOAT:_maxRange&lt;br /&gt;
CHECK &amp;quot;!c1&amp;amp;c2&amp;amp;c3&amp;quot;&lt;br /&gt;
     IsEqual(%SkillTarget,null)&lt;br /&gt;
     CharacterCanCast(__Me,Projectile_Fireball,0)&lt;br /&gt;
     CharacterGetSkillRange(_minRange,_maxRange,__MeProjectile_Fireball)&lt;br /&gt;
ACTIONS&lt;br /&gt;
     CharacterMoveInRange(%SkillTarget,_minRange,_maxRange,1)&lt;br /&gt;
     PlayEffectAt(__Me, &amp;quot;FX_GP_HugeFireball_A&amp;quot;)&lt;br /&gt;
     CharacterUseSkill(Projectile_Fireball,%SkillTarget)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;In this case we have a reaction that will move in range of the target and as soon as we are in range we will play an effect and cast a fireball. However, if this reaction gets interrupted during the playeffect, next time this reaction becomes active again we will just cast a fireball on the target even when we would not be in range and didn't play the effect. This is why in these cases you should add an INTERRUPT to Reset() the reaction.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CHECK or IF===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REACTION CastSkill,1000&lt;br /&gt;
USAGE COMBAT&lt;br /&gt;
VARS&lt;br /&gt;
     FLOAT:_minRange&lt;br /&gt;
     FLOAT:_maxRange&lt;br /&gt;
CHECK &amp;quot;!c1&amp;amp;c2&amp;quot;&lt;br /&gt;
     IsEqual(%SkillTarget,null)&lt;br /&gt;
     CharacterGetSkillRange(_minRange,_maxRange,__MeProjectile_Fireball)&lt;br /&gt;
ACTIONS&lt;br /&gt;
     IF &amp;quot;c1&amp;quot;&lt;br /&gt;
          CharacterCanCast(__Me,Projectile_Fireball,0)	&lt;br /&gt;
     THEN&lt;br /&gt;
          CharacterMoveInRange(%SkillTarget,_minRange,_maxRange,1)&lt;br /&gt;
          PlayEffectAt(__Me, &amp;quot;FX_GP_HugeFireball_A&amp;quot;)&lt;br /&gt;
          CharacterUseSkill(Projectile_Fireball,%SkillTarget)&lt;br /&gt;
     ENDIF&lt;br /&gt;
INTERRUPT&lt;br /&gt;
     Reset()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In this case we're checking something in the reaction when it's executing, but we don't do anything if the IF fails. There is no ELSE behaviour. This means that in combat this reaction could keep failing and not do anything, which will cause a ForceEndTurn for that character. Here we should have checked CharacterCanCast in the CHECK and not write a separate IF check. In general when the IF check in a REACTION is blocking the whole REACTION from executing it's probably better to place it in the CHECK instead.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Check order===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
IF &amp;quot;c1&amp;amp;c2&amp;amp;!c3&amp;amp;c4&amp;quot;&lt;br /&gt;
     CharacterGetStat(_Vitality, __Me, Vitality) // Fetch before checking&lt;br /&gt;
     IsGreaterThen(_Vitality, 0.5)&lt;br /&gt;
     IsEqual(_Character, null) // Null check before checking&lt;br /&gt;
     CharacterIsPlayer(_Character)&lt;br /&gt;
THEN&lt;br /&gt;
     // Do something&lt;br /&gt;
ENDIF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure to perform your checks in the right order. Before checking a stat make sure to fetch it. Before checking if the character is a player consider checking if it is a valid player. Could it be the player is off stage? Could it be dead? Is it even set?&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===AD interrupts===&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_surface_transform_types&amp;diff=2265</id>
		<title>Scripting surface transform types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_surface_transform_types&amp;diff=2265"/>
		<updated>2017-09-13T18:28:20Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: Created page with &amp;quot;The following surface transform types can be used in script: &amp;lt;ul&amp;gt; &amp;lt;li&amp;gt;None&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;Ignite&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;Bless&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;Purify&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;Curse&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;Electrify&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;Melt&amp;lt;/li&amp;gt;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following surface transform types can be used in script:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;None&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ignite&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Bless&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Purify&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Curse&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Electrify&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Melt&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Freeze&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Condense&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Vaporize&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Bloodify&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Contaminate&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Oilify&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Shatter&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting&amp;diff=2264</id>
		<title>Scripting</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting&amp;diff=2264"/>
		<updated>2017-09-13T18:26:50Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
The scripting system is currently used for the behaviour of characters and items. For characters this is only part of the behaviour, as many more systems are influencing this in the following priority:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Story: executing Osiris Tasks&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Dialogs: dialog behaviour and animations&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Statuses: dying, frozen, petrified, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Scripts: executing the current reaction or scriptframe&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
Scripts are the lowest priority and will only execute if none of the other systems want to do something. For items it's a lot simpler, as the scripting system is the only thing that influences the items behaviour.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Sections=&lt;br /&gt;
Before any section in a script, we can INCLUDE files. When you INCLUDE a file, you're telling the system to parse that file first.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===INIT===&lt;br /&gt;
In the INIT section you can declare global variables and inherit from other scripts. Global variables always start with&amp;amp;nbsp;% and can be accessed and modified everywhere (including other scripts, osiris, and in code). There are also EXTERN variables, which are exposed when you assign a script to an object so you can change the value for local instances of the script. The INIT section also contains the special variable '__Me', which contains the owner of the script. This is a character or item depending on the script type. Code will automatically fill this variable.&amp;lt;br /&amp;gt;&lt;br /&gt;
Inheritance is done with the USING keyword and copies everything from the other script into the current script. This includes all global variables, reactions, scriptframes, and events. You can use USING SHARED if you intend to overwrite reactions, events, or scriptframes.&amp;lt;br /&amp;gt;&lt;br /&gt;
An example INIT section:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INIT&lt;br /&gt;
     USING SHARED Base&lt;br /&gt;
     CHARACTER:__Me&lt;br /&gt;
     CHARACTER:%AnotherCharacter=null&lt;br /&gt;
     FLOAT3:%CurrentPosition=null&lt;br /&gt;
     EXTERN INT:%CanRun=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to override a specific reaction, event, or scriptframe you have to specify this with the OVERRIDE keyword:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REACTION TestReaction, 5 OVERRIDE&lt;br /&gt;
EVENT TestEvent OVERRIDE&lt;br /&gt;
SCRIPTFRAME TestFrame OVERRIDE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If needed, you can also only inherit specific reactions, events, or scriptframes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
USING ScriptName REACTION ReactionName,NewPriority&lt;br /&gt;
USING ScriptName EVENT EventName&lt;br /&gt;
USING ScriptName SCRIPTFRAME ScriptFrameName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===BEHAVIOUR===&lt;br /&gt;
This section contains the actual behaviour of the object. It solely consists of a whole bunch of reactions, of which only 1 reaction can be active at the same time. The current reaction gets selected based on its priority and its CHECK. The priority defines how much it wants to be executed and the CHECK decided whether its possible to be executed. The reaction with the highest priority whose CHECK succeeds will be selected for execution:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;span style=&amp;quot;background-color:transparent;font-size:1em&amp;quot;&amp;gt;The whole list of reactions is always sorted from HIGH to LOW priorities.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;span style=&amp;quot;background-color:transparent;font-size:1em&amp;quot;&amp;gt;We then check in that order all the reactions with a higher priority of the current reaction and see if their CHECK succeeds.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;span style=&amp;quot;background-color:transparent;font-size:1em&amp;quot;&amp;gt;As soon as a higher priority reaction's CHECK succeeds, it interrupts the current reaction and will start executing.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Important note&amp;lt;/b&amp;gt;: only the CHECKs of higher priority reactions are evaluated every frame. This means that the current reaction's CHECK is &amp;lt;b&amp;gt;NOT&amp;lt;/b&amp;gt; reevaluated while it's executing! It could become invalid during the execution. This is also true when calling Reset(): execution simply restarts at the beginning of the current reaction without evaluating the CHECK conditions again.&lt;br /&gt;
On top of the priority and CHECKs there's also the USAGE keyword. A reaction needs to specify a USAGE context. You can pick the following USAGE contexts:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;USAGE COMBAT: can only be executed during combat when its the turn of the object&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;USAGE WAITING: can only be executed during combat when waiting for its turn&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;USAGE PEACE: can only be executed when not in combat&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;USAGE ALL: can always be executed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
A reaction can have its own local variables. These variables have to start with an underscore and can only be accessed within the reaction itself.&amp;lt;br /&amp;gt;&lt;br /&gt;
As soon as a reaction is interrupted, the INTERRUPT event will be called immediately and you can execute some code to for example Reset the reaction. You can catch all INTERRUPTS or only specific interrupts (like the movement failed interrupt) and execute actions on the interrupt. If you catch a specific interrupt event you have the possibility to fill in variables for the event:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An underscore ('_'): this variable is not relevant for the event, it will not prevent the event from firing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A constant (e.g. &amp;quot;TestString&amp;quot;) or a global variable: the variable has to be equal to this constant, otherwise the event will not be executed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A local variable: this variable will get filled with the variable from the event&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Some examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OnEnteredCombat(__Me, _) // Only catch the event when __Me entered combat, the second variable one is irrelevant&lt;br /&gt;
OnEnteredCombat(_, %GlobalItemVariable) // Only catch the event when %GlobalItemVariable entered combat, the first variable is irrelevant&lt;br /&gt;
OnEnteredCombat(_LocalCharacterVariable, _) // Always catches the event, and _LocalCharacterVariable contains the character that entered combat. BEWARE: _LocalCharacterVariable can be null if an item entered combat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The actions during an interrupt are limited to immediate/simple actions, which can be executed immediately (e.g. CharacterMoveTo() is not allowed). Keep in mind though that a reaction can be interrupted for many reasons:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Higher priority reaction takes over.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Other system takes over: statuses/dialog/story&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An exception was thrown in the script: e.g. pathfinding failed, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The object got culled (more details on culling can be found later on this page)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Important note&amp;lt;/b&amp;gt;: if a reaction gets interrupted and later gets resumed, it will continue executing where it got interrupted! (unless &amp;quot;Reset&amp;quot; was called in the INTERRUPT handler, in which case it will begin from the start again)&amp;lt;br /&amp;gt;&lt;br /&gt;
An example BEHAVIOUR section:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEHAVIOUR&lt;br /&gt;
REACTION TestReaction, 5 // Priority 5&lt;br /&gt;
USAGE PEACE&lt;br /&gt;
VARS&lt;br /&gt;
     CHARACTER:_TestCharacter&lt;br /&gt;
CHECK &amp;quot;(c1|c2)&amp;amp;!c3&amp;quot; // Reaction can be executed when one of the first 2 conditions passes, and the third condition doesn't pass&lt;br /&gt;
     IsInSurface(__Me, SurfaceOil)&lt;br /&gt;
     IsInDangerousSurface(__Me)&lt;br /&gt;
     CharacterIsFloating(__Me)&lt;br /&gt;
ACTIONS&lt;br /&gt;
     CharacterFleeFromSurface()&lt;br /&gt;
INTERRUPT&lt;br /&gt;
ON&lt;br /&gt;
     OnMovementFailed(_) // Only when interrupted by a failed movement&lt;br /&gt;
ACTIONS&lt;br /&gt;
     Reset()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===STORY===&lt;br /&gt;
There are specific story &amp;quot;reactions&amp;quot; called scriptframes. These are almost exactly the same as reactions, but they don't have a priority or CHECK block. They are managed by Story (Osiris) and can be SET or INJECTED. We keep a stack of all currently set scriptframes. If something is on the stack, the current REACTION always gets interrupted! The stack is the highest priority and comes before BEHAVIOUR reactions! Example of stack behaviour:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When you push something, it is put on the top of the stack.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When you pop, the top scriptframe is removed (happens when it finished executing)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
In our case:&amp;lt;br /&amp;gt;&lt;br /&gt;
If you SET a scriptframe the stack gets cleared (Abort!) and the new scriptframe gets pushed on the stack.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you INJECT a scriptframe, it will just push a copy of it on the stack. You can keep injecting the same scriptframe on the stack and it will be executed multiple times.&amp;lt;br /&amp;gt;&lt;br /&gt;
As soon as the TOP scriptframe is finished, it pops from the stack and the one below it starts/resumes executing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Just like with reactions, if you INJECT a new scriptframe and there was already a scriptframe on the stack active, it will get interrupted and later resume where it was before. The syntax for writing a SCRIPTFRAME is exactly the same as a REACTION (except for the lack of priority and CHECK, and the fact that they need to be in the STORY section).&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===EVENTS===&lt;br /&gt;
This section contains all the events that we want to catch. Events are always &amp;lt;b&amp;gt;immediately&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;completely&amp;lt;/b&amp;gt; executed! It cannot take multiple frames: it's a blocking call and will execute and return immediately when it's done. Even when the object is culled or offstage will it execute its events. Events are always thrown to all objects in the current level. An event can be thrown from code, osiris, or from script itself.&amp;lt;br /&amp;gt;&lt;br /&gt;
In a reaction or scriptframe, each frame only 1 action gets executed at most. Let's take a piece of script from a REACTION:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Set(%TargetPos,%Enemy)&lt;br /&gt;
CharacterEvent(%Enemy,&amp;quot;Attack!&amp;quot;) &lt;br /&gt;
CharacterMoveTo(%TargetPos)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In the example above, the first 2 lines will take 2 frames (1 frame per line). The third one will take as long as it takes for the character to move to the target position. However, in an event the actions get executed immediately. Even if it was 100 actions with IFs and WHILEs, it would be executed as it was 1 action. For that reason, you cannot use actions in events that need time (Sleep, CharacterMoveTo, ...). Additionally, the number of actions an event can execute is limited. If you exceed the limit, Osiris will log an error and exit the event. In fact, let me amaze you even more. If you throw a CharacterEvent in an event, that spawns a new event and is thrown on every character and item... even all those events are executed immediately before it gets to the next line.&amp;lt;br /&amp;gt;&lt;br /&gt;
Just like INTERRUPTs in REACTIONs, EVENTs have to react on something (INTERRUPTs can and EVENTs must). The syntax is equal as well (more information on the event variables can be found in the REACTION INTERRUPT section).&amp;lt;br /&amp;gt;&lt;br /&gt;
An example EVENTS section:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EVENT TestInitEvent&lt;br /&gt;
ON&lt;br /&gt;
     OnInit()&lt;br /&gt;
ACTIONS&lt;br /&gt;
     IF &amp;quot;!c1&amp;quot;&lt;br /&gt;
          IsEqual(%StartTrigger, null)&lt;br /&gt;
     THEN&lt;br /&gt;
          TeleportTo(__Me, %StartTrigger)&lt;br /&gt;
     ENDIF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Variables=&lt;br /&gt;
===Types===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;INTEGER and INTEGER64: 'whole' numbers. The difference between INTEGER and INTEGER64 is not relevant for the scripter (unless you care about really, really big numbers), as long as you make sure to pass the right type in actions. For example: -10, 0, 8, 102324, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FLOAT: all other numbers. For example: 0.1, -0.323, 8.3, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STRING and FIXEDSTRING: the difference between STRING and FIXEDSTRING is not important when scripting, just make sure to pass the correct type in actions. For example: &amp;quot;&amp;quot;, &amp;quot;testString&amp;quot;, &amp;quot;testing123&amp;quot;, ... . &amp;lt;b&amp;gt;Important note:&amp;lt;/b&amp;gt; do not start a string with the characters '%' or '_', as they will get recognized as a variable instead (it's not intended, it's a bug).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CHARACTER, ITEM, TRIGGER, and SPLINE: objects that are currently loaded in the game. This includes globals and locals of the curently loaded level. The script will assert if the script uses an object that isn't currently loaded. It will also warn you if the character's name does not start with the prefix 'S_'. This prefix helps to prevent objects being deleted because they aren't used (they could be used in script). For example: S_GLO_Dallis, S_MyFirstItem, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RELATION_TYPE: only used in a handful actions. A list of possible relation types can be found [[scripting_relation_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SKILL_ID: the name/id of a skill as it can be found in [[skill_creation|SkillData]]. For example: Target_Bless, Projectile_Fireball, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SURFACE_TYPE: surface types can be found [[scripting_surface_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STATUS_TYPE: status types can be found [[Scripting_status_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CHARACTERSTAT_TYPE: characterstat types can be found [[Scripting_characterstat_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ITEMSTAT_TYPE: itemstat types can be found [[Scripting_itemstat_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WEAPON_TYPE: weapon types can be found [[Scripting_weapon_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DAMAGE_TYPE: damage types can be found [[Scripting_damage_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TALENT_TYPE: talent types can be found [[Scripting_talent_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COMPARE_TYPE: compare types can be found [[Scripting_compare_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COMPARE_FUNCTION: compare functions can be found [[Scripting_compare_functions|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FLOAT3: floats are written as {number;number;number}, and can contain integers as well&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CHARACTERTEMPLATE, ITEMTEMPLATE, and PROJECTILETEMPLATE: the script will warn you if the template's name does not start with the prefix 'S_'. This prefix helps to prevent objects being deleted because they aren't used (they could be used in script). For example: S_Chair_A, S_Human_Male_B, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;POTION_ID: all loaded potions from stats&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ABILITY_TYPE: ability types can be found [[Scripting_ability_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DEATH_TYPE: death types can be found [[Scripting_death_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STATUS_ID: all loaded statuses from stats&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ARCHETYPE: all available archetypes that are loaded. More information on archetypes can be found [[CombatAi_Archetypes_And_Modifiers|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SURFACE_TRANSFORM_TYPE: surface transform types can be found [[Scripting_surface_transform_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Lists===&lt;br /&gt;
Lists are a special parameter type and contain multiple parameters of a single type.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Important note&amp;lt;/b&amp;gt;: Lists are more convenient, but they are slower than normal parameters. They also have a limited size, so don't try to fill them with thousands of entries.&amp;lt;br /&amp;gt;&lt;br /&gt;
Declaring a list:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LIST&amp;lt;INT&amp;gt;:%TestListInt // Fine&lt;br /&gt;
LIST&amp;lt;CHARACTER&amp;gt;:%TestListCharacter // Fine&lt;br /&gt;
LIST&amp;lt;LIST&amp;lt;INT&amp;gt;&amp;gt;:%TestListNested // Error, can't nest lists&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Adding entries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListAdd(%TestListInt, 0) // Fine&lt;br /&gt;
ListAdd(%TestListInt, {0;1;2}) // Error, trying to add a FLOAT3 to an INT LIST&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Removing entries: indices start at 1, and end at the list size. All entries after the removed entry will be shifted to the left:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListRemove(%TestListInt, 1) // Fine, assuming that the list has 1 or more entries&lt;br /&gt;
ListRemove(%TestListInt, 0) // Error, invalid index&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Setting or getting entries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListSet(%TestListInt, 1, %AnInt) // Fine&lt;br /&gt;
ListGet(%TestListInt, 1, %AnInt)&lt;br /&gt;
&lt;br /&gt;
ListSet(%TestListInt, 1, %ACharacter) // Error, trying to set a CHARACTER in an INT LIST&lt;br /&gt;
ListGet(%TestListInt, 1, %ACharacter)&lt;br /&gt;
&lt;br /&gt;
ListSet(%TestListInt, 0, %AnInt) // Error, invalid index&lt;br /&gt;
ListGet(%TestListInt, 0, %AnInt)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Getting the list size:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListGetSize(%TestList, %ListSize)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Clearing a list:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListClear(%TestList)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Important note&amp;lt;/b&amp;gt;: Lists currently do not support EXTERN, constants, and STRING , meaning that the following lines will not work in scripts and result in an error during script build:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LIST&amp;lt;INT&amp;gt;:%TestList = {1, 2, 3, 4, 5} // Using a constant to initialize&lt;br /&gt;
ListGetSize({1, 2, 3, 4}, %ListSize) // Using a constant in an action call&lt;br /&gt;
EXTERN LIST&amp;lt;INT&amp;gt;:%TestList = {1, 2} // Using EXTERN and using a constant to initialize&lt;br /&gt;
LIST&amp;lt;STRING&amp;gt;:%TestString // Using STRING as the type&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, how would you use these lists?&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Important Events=&lt;br /&gt;
===OnInit and OnShutDown===&lt;br /&gt;
OnInit is called each time on all objects in the level when the level is loaded, and OnShutdown is called when the level is unloaded. This would be the place where you can create/destroy your looping effects that should always be on the object.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===OnLoaded===&lt;br /&gt;
OnLoaded is called when the savegame is loaded or when the levelcache is loaded (levelswap). The version of the savegame is passed so you can do your patching &amp;quot;hacks&amp;quot; if necessary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Interrupts===&lt;br /&gt;
Interrupts are only called on reactions and can only be caught on that reaction:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnBetterReactionFound: a higher priority reaction succeeded its check&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnNoReactionFound: no reaction has succeeded its check&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnScriptDisabled: another system has taken control (dialogs, statuses, story)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnManualInterrupt: the Interrupt action itself has caused the interrupt&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnMovementFailed: pathfinding has failed to find a path to the target&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnException: a character task has failed&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===OnFunction===&lt;br /&gt;
You can create your own &amp;quot;functions' with &amp;lt;b&amp;gt;CallFunction(&amp;quot;functionName&amp;quot;)&amp;lt;/b&amp;gt; and catching the event &amp;lt;b&amp;gt;OnFunction(&amp;quot;functionName&amp;quot;)&amp;lt;/b&amp;gt;. This way you can share functionality between multiple events and reactions. You can not pass parameters directly, but you could set some function-specific global variables which the function uses and can even 'return' results in.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Culling=&lt;br /&gt;
For performance reasons we only update a small set of all the characters &amp;amp; items in the level.&amp;lt;br /&amp;gt;&lt;br /&gt;
The updating characters are:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Force updating (can be set in script/story, but should only be used in an emergency!)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In Combat&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Executing Osiris Tasks&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In range of the party (within 40m)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
The updating items are:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Force updating (can be set in script/story using ItemSetForceSynch(), but should only be used in an emergency!)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In Combat&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Moving&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In range of the party (within 40m)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
This means that in most cases objects far away from the party get culled and stop updating. When an object doesn't update anymore this means the behaviour is interrupted and won't be executed anymore. However, events always get executed, so culling has no impact on this. Another consequence of culling is that timers of that script are not ticking anymore and are basically paused.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Debugging=&lt;br /&gt;
There are 4 ways to help you debug:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The script debugger in the script editor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CTRL+SHIFT+ClICK on the object you wish to debug to show the Script Screen, and CTRL+SHIFT+SCROLL to the Script and/or Variables screen to see what the current state is.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Add a whole bunch of DebugText output in your code to see which code is called in what order.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Start the script log for an object, which logs as much stuff as possible about the script (reactions, interrupts, events, ...)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Script Debugger===&lt;br /&gt;
See the [[script_debugger|Script Debugger]] page for more information.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Script Screen===&lt;br /&gt;
On the left side of the Script Screen it shows the script variables, the script reactions (ordered from high priority to low), and the current Event it catches. It colors the reactions gray (not checked), green (check passed), and red (check failed). At the right you can see the current reaction's conditions and actions. You can see which action is currently executing and you can see the return results of the conditions from the check: gray (not evaluated), green (TRUE), and red (FALSE).&amp;lt;br /&amp;gt;&lt;br /&gt;
You can filter in the script variables through the [[console|console]] by using: &amp;quot;filtervar &amp;lt;filter&amp;gt;&amp;quot;.&lt;br /&gt;
&amp;lt;b&amp;gt;Tip:&amp;lt;/b&amp;gt; type &amp;quot;filtervar asdf&amp;quot; or something to remove all variables so you can see all the reactions!&amp;lt;br /&amp;gt;&lt;br /&gt;
You can also change which reaction you want to see at the right, by entering the number of that reaction in the console. This way you can easily check why certain reactions are never succeeding their CHECK by checking the return values of the conditions. To do this first you must activate this mode, by entering &amp;quot;show server&amp;quot; in the console. Then you can type the number of the wanted reaction or type &amp;quot;0&amp;quot; to show the current reaction again.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===DebugText===&lt;br /&gt;
You can put DebugText in events/scriptframes/reactions to print text in the world on any object you want. This way you can easily see if you get in the code you wrote and you can also print any variable's value at that time. To print the variables we use the same syntax as translated strings: [1] [2] [3] ...&amp;lt;br /&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DebugText(__Me,&amp;quot;Target: [1], Speed is [2]&amp;quot;,_Target,%Speed)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For characters, items, triggers, splines, and templates the name will be shown in the debug text. Numbers will be shown in full, and all other variables will be directly converted to strings.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===ScriptLog===&lt;br /&gt;
You can also start/stop the scriptlog in console with:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;ai log all&amp;quot;: Start the scriptlog for all character/items.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;ai log none&amp;quot;: Stop the scriptlog for all character/items.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;ai log selected&amp;quot;: Toggle the separate scriptlog for the selected (CTRL+SHIFT+CLICK) object&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
It will generate scriptlog file(s) right next to the executable.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Common Mistakes=&lt;br /&gt;
===Reset()===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REACTION CastSkill, 1000&lt;br /&gt;
USAGE COMBAT&lt;br /&gt;
VARS&lt;br /&gt;
     FLOAT:_minRange&lt;br /&gt;
     FLOAT:_maxRange&lt;br /&gt;
CHECK &amp;quot;!c1&amp;amp;c2&amp;amp;c3&amp;quot;&lt;br /&gt;
     IsEqual(%SkillTarget,null)&lt;br /&gt;
     CharacterCanCast(__Me,Projectile_Fireball,0)&lt;br /&gt;
     CharacterGetSkillRange(_minRange,_maxRange,__MeProjectile_Fireball)&lt;br /&gt;
ACTIONS&lt;br /&gt;
     CharacterMoveInRange(%SkillTarget,_minRange,_maxRange,1)&lt;br /&gt;
     PlayEffectAt(__Me, &amp;quot;FX_GP_HugeFireball_A&amp;quot;)&lt;br /&gt;
     CharacterUseSkill(Projectile_Fireball,%SkillTarget)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;In this case we have a reaction that will move in range of the target and as soon as we are in range we will play an effect and cast a fireball. However, if this reaction gets interrupted during the playeffect, next time this reaction becomes active again we will just cast a fireball on the target even when we would not be in range and didn't play the effect. This is why in these cases you should add an INTERRUPT to Reset() the reaction.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CHECK or IF===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REACTION CastSkill,1000&lt;br /&gt;
USAGE COMBAT&lt;br /&gt;
VARS&lt;br /&gt;
     FLOAT:_minRange&lt;br /&gt;
     FLOAT:_maxRange&lt;br /&gt;
CHECK &amp;quot;!c1&amp;amp;c2&amp;quot;&lt;br /&gt;
     IsEqual(%SkillTarget,null)&lt;br /&gt;
     CharacterGetSkillRange(_minRange,_maxRange,__MeProjectile_Fireball)&lt;br /&gt;
ACTIONS&lt;br /&gt;
     IF &amp;quot;c1&amp;quot;&lt;br /&gt;
          CharacterCanCast(__Me,Projectile_Fireball,0)	&lt;br /&gt;
     THEN&lt;br /&gt;
          CharacterMoveInRange(%SkillTarget,_minRange,_maxRange,1)&lt;br /&gt;
          PlayEffectAt(__Me, &amp;quot;FX_GP_HugeFireball_A&amp;quot;)&lt;br /&gt;
          CharacterUseSkill(Projectile_Fireball,%SkillTarget)&lt;br /&gt;
     ENDIF&lt;br /&gt;
INTERRUPT&lt;br /&gt;
     Reset()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In this case we're checking something in the reaction when it's executing, but we don't do anything if the IF fails. There is no ELSE behaviour. This means that in combat this reaction could keep failing and not do anything, which will cause a ForceEndTurn for that character. Here we should have checked CharacterCanCast in the CHECK and not write a separate IF check. In general when the IF check in a REACTION is blocking the whole REACTION from executing it's probably better to place it in the CHECK instead.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Check order===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
IF &amp;quot;c1&amp;amp;c2&amp;amp;!c3&amp;amp;c4&amp;quot;&lt;br /&gt;
     CharacterGetStat(_Vitality, __Me, Vitality) // Fetch before checking&lt;br /&gt;
     IsGreaterThen(_Vitality, 0.5)&lt;br /&gt;
     IsEqual(_Character, null) // Null check before checking&lt;br /&gt;
     CharacterIsPlayer(_Character)&lt;br /&gt;
THEN&lt;br /&gt;
     // Do something&lt;br /&gt;
ENDIF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure to perform your checks in the right order. Before checking a stat make sure to fetch it. Before checking if the character is a player consider checking if it is a valid player. Could it be the player is off stage? Could it be dead? Is it even set?&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting&amp;diff=2263</id>
		<title>Scripting</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting&amp;diff=2263"/>
		<updated>2017-09-13T18:25:54Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
The scripting system is currently used for the behaviour of characters and items. For characters this is only part of the behaviour, as many more systems are influencing this in the following priority:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Story: executing Osiris Tasks&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Dialogs: dialog behaviour and animations&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Statuses: dying, frozen, petrified, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Scripts: executing the current reaction or scriptframe&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
Scripts are the lowest priority and will only execute if none of the other systems want to do something. For items it's a lot simpler, as the scripting system is the only thing that influences the items behaviour.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Sections=&lt;br /&gt;
Before any section in a script, we can INCLUDE files. When you INCLUDE a file, you're telling the system to parse that file first.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===INIT===&lt;br /&gt;
In the INIT section you can declare global variables and inherit from other scripts. Global variables always start with&amp;amp;nbsp;% and can be accessed and modified everywhere (including other scripts, osiris, and in code). There are also EXTERN variables, which are exposed when you assign a script to an object so you can change the value for local instances of the script. The INIT section also contains the special variable '__Me', which contains the owner of the script. This is a character or item depending on the script type. Code will automatically fill this variable.&amp;lt;br /&amp;gt;&lt;br /&gt;
Inheritance is done with the USING keyword and copies everything from the other script into the current script. This includes all global variables, reactions, scriptframes, and events. You can use USING SHARED if you intend to overwrite reactions, events, or scriptframes.&amp;lt;br /&amp;gt;&lt;br /&gt;
An example INIT section:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INIT&lt;br /&gt;
     USING SHARED Base&lt;br /&gt;
     CHARACTER:__Me&lt;br /&gt;
     CHARACTER:%AnotherCharacter=null&lt;br /&gt;
     FLOAT3:%CurrentPosition=null&lt;br /&gt;
     EXTERN INT:%CanRun=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to override a specific reaction, event, or scriptframe you have to specify this with the OVERRIDE keyword:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REACTION TestReaction, 5 OVERRIDE&lt;br /&gt;
EVENT TestEvent OVERRIDE&lt;br /&gt;
SCRIPTFRAME TestFrame OVERRIDE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If needed, you can also only inherit specific reactions, events, or scriptframes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
USING ScriptName REACTION ReactionName,NewPriority&lt;br /&gt;
USING ScriptName EVENT EventName&lt;br /&gt;
USING ScriptName SCRIPTFRAME ScriptFrameName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===BEHAVIOUR===&lt;br /&gt;
This section contains the actual behaviour of the object. It solely consists of a whole bunch of reactions, of which only 1 reaction can be active at the same time. The current reaction gets selected based on its priority and its CHECK. The priority defines how much it wants to be executed and the CHECK decided whether its possible to be executed. The reaction with the highest priority whose CHECK succeeds will be selected for execution:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;span style=&amp;quot;background-color:transparent;font-size:1em&amp;quot;&amp;gt;The whole list of reactions is always sorted from HIGH to LOW priorities.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;span style=&amp;quot;background-color:transparent;font-size:1em&amp;quot;&amp;gt;We then check in that order all the reactions with a higher priority of the current reaction and see if their CHECK succeeds.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;span style=&amp;quot;background-color:transparent;font-size:1em&amp;quot;&amp;gt;As soon as a higher priority reaction's CHECK succeeds, it interrupts the current reaction and will start executing.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Important note&amp;lt;/b&amp;gt;: only the CHECKs of higher priority reactions are evaluated every frame. This means that the current reaction's CHECK is &amp;lt;b&amp;gt;NOT&amp;lt;/b&amp;gt; reevaluated while it's executing! It could become invalid during the execution. This is also true when calling Reset(): execution simply restarts at the beginning of the current reaction without evaluating the CHECK conditions again.&lt;br /&gt;
On top of the priority and CHECKs there's also the USAGE keyword. A reaction needs to specify a USAGE context. You can pick the following USAGE contexts:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;USAGE COMBAT: can only be executed during combat when its the turn of the object&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;USAGE WAITING: can only be executed during combat when waiting for its turn&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;USAGE PEACE: can only be executed when not in combat&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;USAGE ALL: can always be executed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
A reaction can have its own local variables. These variables have to start with an underscore and can only be accessed within the reaction itself.&amp;lt;br /&amp;gt;&lt;br /&gt;
As soon as a reaction is interrupted, the INTERRUPT event will be called immediately and you can execute some code to for example Reset the reaction. You can catch all INTERRUPTS or only specific interrupts (like the movement failed interrupt) and execute actions on the interrupt. If you catch a specific interrupt event you have the possibility to fill in variables for the event:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An underscore ('_'): this variable is not relevant for the event, it will not prevent the event from firing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A constant (e.g. &amp;quot;TestString&amp;quot;) or a global variable: the variable has to be equal to this constant, otherwise the event will not be executed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A local variable: this variable will get filled with the variable from the event&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Some examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OnEnteredCombat(__Me, _) // Only catch the event when __Me entered combat, the second variable one is irrelevant&lt;br /&gt;
OnEnteredCombat(_, %GlobalItemVariable) // Only catch the event when %GlobalItemVariable entered combat, the first variable is irrelevant&lt;br /&gt;
OnEnteredCombat(_LocalCharacterVariable, _) // Always catches the event, and _LocalCharacterVariable contains the character that entered combat. BEWARE: _LocalCharacterVariable can be null if an item entered combat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The actions during an interrupt are limited to immediate/simple actions, which can be executed immediately (e.g. CharacterMoveTo() is not allowed). Keep in mind though that a reaction can be interrupted for many reasons:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Higher priority reaction takes over.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Other system takes over: statuses/dialog/story&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An exception was thrown in the script: e.g. pathfinding failed, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The object got culled (more details on culling can be found later on this page)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Important note&amp;lt;/b&amp;gt;: if a reaction gets interrupted and later gets resumed, it will continue executing where it got interrupted! (unless &amp;quot;Reset&amp;quot; was called in the INTERRUPT handler, in which case it will begin from the start again)&amp;lt;br /&amp;gt;&lt;br /&gt;
An example BEHAVIOUR section:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEHAVIOUR&lt;br /&gt;
REACTION TestReaction, 5 // Priority 5&lt;br /&gt;
USAGE PEACE&lt;br /&gt;
VARS&lt;br /&gt;
     CHARACTER:_TestCharacter&lt;br /&gt;
CHECK &amp;quot;(c1|c2)&amp;amp;!c3&amp;quot; // Reaction can be executed when one of the first 2 conditions passes, and the third condition doesn't pass&lt;br /&gt;
     IsInSurface(__Me, SurfaceOil)&lt;br /&gt;
     IsInDangerousSurface(__Me)&lt;br /&gt;
     CharacterIsFloating(__Me)&lt;br /&gt;
ACTIONS&lt;br /&gt;
     CharacterFleeFromSurface()&lt;br /&gt;
INTERRUPT&lt;br /&gt;
ON&lt;br /&gt;
     OnMovementFailed(_) // Only when interrupted by a failed movement&lt;br /&gt;
ACTIONS&lt;br /&gt;
     Reset()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===STORY===&lt;br /&gt;
There are specific story &amp;quot;reactions&amp;quot; called scriptframes. These are almost exactly the same as reactions, but they don't have a priority or CHECK block. They are managed by Story (Osiris) and can be SET or INJECTED. We keep a stack of all currently set scriptframes. If something is on the stack, the current REACTION always gets interrupted! The stack is the highest priority and comes before BEHAVIOUR reactions! Example of stack behaviour:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When you push something, it is put on the top of the stack.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When you pop, the top scriptframe is removed (happens when it finished executing)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
In our case:&amp;lt;br /&amp;gt;&lt;br /&gt;
If you SET a scriptframe the stack gets cleared (Abort!) and the new scriptframe gets pushed on the stack.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you INJECT a scriptframe, it will just push a copy of it on the stack. You can keep injecting the same scriptframe on the stack and it will be executed multiple times.&amp;lt;br /&amp;gt;&lt;br /&gt;
As soon as the TOP scriptframe is finished, it pops from the stack and the one below it starts/resumes executing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Just like with reactions, if you INJECT a new scriptframe and there was already a scriptframe on the stack active, it will get interrupted and later resume where it was before. The syntax for writing a SCRIPTFRAME is exactly the same as a REACTION (except for the lack of priority and CHECK, and the fact that they need to be in the STORY section).&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===EVENTS===&lt;br /&gt;
This section contains all the events that we want to catch. Events are always &amp;lt;b&amp;gt;immediately&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;completely&amp;lt;/b&amp;gt; executed! It cannot take multiple frames: it's a blocking call and will execute and return immediately when it's done. Even when the object is culled or offstage will it execute its events. Events are always thrown to all objects in the current level. An event can be thrown from code, osiris, or from script itself.&amp;lt;br /&amp;gt;&lt;br /&gt;
In a reaction or scriptframe, each frame only 1 action gets executed at most. Let's take a piece of script from a REACTION:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Set(%TargetPos,%Enemy)&lt;br /&gt;
CharacterEvent(%Enemy,&amp;quot;Attack!&amp;quot;) &lt;br /&gt;
CharacterMoveTo(%TargetPos)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In the example above, the first 2 lines will take 2 frames (1 frame per line). The third one will take as long as it takes for the character to move to the target position. However, in an event the actions get executed immediately. Even if it was 100 actions with IFs and WHILEs, it would be executed as it was 1 action. For that reason, you cannot use actions in events that need time (Sleep, CharacterMoveTo, ...). Additionally, the number of actions an event can execute is limited. If you exceed the limit, Osiris will log an error and exit the event. In fact, let me amaze you even more. If you throw a CharacterEvent in an event, that spawns a new event and is thrown on every character and item... even all those events are executed immediately before it gets to the next line.&amp;lt;br /&amp;gt;&lt;br /&gt;
Just like INTERRUPTs in REACTIONs, EVENTs have to react on something (INTERRUPTs can and EVENTs must). The syntax is equal as well (more information on the event variables can be found in the REACTION INTERRUPT section).&amp;lt;br /&amp;gt;&lt;br /&gt;
An example EVENTS section:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EVENT TestInitEvent&lt;br /&gt;
ON&lt;br /&gt;
     OnInit()&lt;br /&gt;
ACTIONS&lt;br /&gt;
     IF &amp;quot;!c1&amp;quot;&lt;br /&gt;
          IsEqual(%StartTrigger, null)&lt;br /&gt;
     THEN&lt;br /&gt;
          TeleportTo(__Me, %StartTrigger)&lt;br /&gt;
     ENDIF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Variables=&lt;br /&gt;
===Types===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;INTEGER and INTEGER64: 'whole' numbers. The difference between INTEGER and INTEGER64 is not relevant for the scripter (unless you care about really, really big numbers), as long as you make sure to pass the right type in actions. For example: -10, 0, 8, 102324, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FLOAT: all other numbers. For example: 0.1, -0.323, 8.3, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STRING and FIXEDSTRING: the difference between STRING and FIXEDSTRING is not important when scripting, just make sure to pass the correct type in actions. For example: &amp;quot;&amp;quot;, &amp;quot;testString&amp;quot;, &amp;quot;testing123&amp;quot;, ... . &amp;lt;b&amp;gt;Important note:&amp;lt;/b&amp;gt; do not start a string with the characters '%' or '_', as they will get recognized as a variable instead (it's not intended, it's a bug).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CHARACTER, ITEM, TRIGGER, and SPLINE: objects that are currently loaded in the game. This includes globals and locals of the curently loaded level. The script will assert if the script uses an object that isn't currently loaded. It will also warn you if the character's name does not start with the prefix 'S_'. This prefix helps to prevent objects being deleted because they aren't used (they could be used in script). For example: S_GLO_Dallis, S_MyFirstItem, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RELATION_TYPE: only used in a handful actions. A list of possible relation types can be found [[scripting_relation_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SKILL_ID: the name/id of a skill as it can be found in [[skill_creation|SkillData]]. For example: Target_Bless, Projectile_Fireball, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SURFACE_TYPE: surface types can be found [[scripting_surface_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STATUS_TYPE: status types can be found [[Scripting_status_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CHARACTERSTAT_TYPE: characterstat types can be found [[Scripting_characterstat_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ITEMSTAT_TYPE: itemstat types can be found [[Scripting_itemstat_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;WEAPON_TYPE: weapon types can be found [[Scripting_weapon_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DAMAGE_TYPE: damage types can be found [[Scripting_damage_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TALENT_TYPE: talent types can be found [[Scripting_talent_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COMPARE_TYPE: compare types can be found [[Scripting_compare_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COMPARE_FUNCTION: compare functions can be found [[Scripting_compare_functions|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FLOAT3: floats are written as {number;number;number}, and can contain integers as well&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CHARACTERTEMPLATE, ITEMTEMPLATE, and PROJECTILETEMPLATE: the script will warn you if the template's name does not start with the prefix 'S_'. This prefix helps to prevent objects being deleted because they aren't used (they could be used in script). For example: S_Chair_A, S_Human_Male_B, ...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;POTION_ID: all loaded potions from stats&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ABILITY_TYPE: ability types can be found [[Scripting_ability_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DEATH_TYPE: death types can be found [[Scripting_death_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STATUS_ID: all loaded statuses from stats&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ARCHETYPE: all available archetypes that are loaded. More information on archetypes can be found [[CombatAi_Archetypes_and_Modifiers|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SURFACE_TRANSFORM_TYPE: surface transform types can be found [[Scripting_surface_transform_types|here]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Lists===&lt;br /&gt;
Lists are a special parameter type and contain multiple parameters of a single type.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Important note&amp;lt;/b&amp;gt;: Lists are more convenient, but they are slower than normal parameters. They also have a limited size, so don't try to fill them with thousands of entries.&amp;lt;br /&amp;gt;&lt;br /&gt;
Declaring a list:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LIST&amp;lt;INT&amp;gt;:%TestListInt // Fine&lt;br /&gt;
LIST&amp;lt;CHARACTER&amp;gt;:%TestListCharacter // Fine&lt;br /&gt;
LIST&amp;lt;LIST&amp;lt;INT&amp;gt;&amp;gt;:%TestListNested // Error, can't nest lists&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Adding entries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListAdd(%TestListInt, 0) // Fine&lt;br /&gt;
ListAdd(%TestListInt, {0;1;2}) // Error, trying to add a FLOAT3 to an INT LIST&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Removing entries: indices start at 1, and end at the list size. All entries after the removed entry will be shifted to the left:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListRemove(%TestListInt, 1) // Fine, assuming that the list has 1 or more entries&lt;br /&gt;
ListRemove(%TestListInt, 0) // Error, invalid index&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Setting or getting entries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListSet(%TestListInt, 1, %AnInt) // Fine&lt;br /&gt;
ListGet(%TestListInt, 1, %AnInt)&lt;br /&gt;
&lt;br /&gt;
ListSet(%TestListInt, 1, %ACharacter) // Error, trying to set a CHARACTER in an INT LIST&lt;br /&gt;
ListGet(%TestListInt, 1, %ACharacter)&lt;br /&gt;
&lt;br /&gt;
ListSet(%TestListInt, 0, %AnInt) // Error, invalid index&lt;br /&gt;
ListGet(%TestListInt, 0, %AnInt)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Getting the list size:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListGetSize(%TestList, %ListSize)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Clearing a list:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ListClear(%TestList)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Important note&amp;lt;/b&amp;gt;: Lists currently do not support EXTERN, constants, and STRING , meaning that the following lines will not work in scripts and result in an error during script build:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LIST&amp;lt;INT&amp;gt;:%TestList = {1, 2, 3, 4, 5} // Using a constant to initialize&lt;br /&gt;
ListGetSize({1, 2, 3, 4}, %ListSize) // Using a constant in an action call&lt;br /&gt;
EXTERN LIST&amp;lt;INT&amp;gt;:%TestList = {1, 2} // Using EXTERN and using a constant to initialize&lt;br /&gt;
LIST&amp;lt;STRING&amp;gt;:%TestString // Using STRING as the type&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, how would you use these lists?&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Important Events=&lt;br /&gt;
===OnInit and OnShutDown===&lt;br /&gt;
OnInit is called each time on all objects in the level when the level is loaded, and OnShutdown is called when the level is unloaded. This would be the place where you can create/destroy your looping effects that should always be on the object.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===OnLoaded===&lt;br /&gt;
OnLoaded is called when the savegame is loaded or when the levelcache is loaded (levelswap). The version of the savegame is passed so you can do your patching &amp;quot;hacks&amp;quot; if necessary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Interrupts===&lt;br /&gt;
Interrupts are only called on reactions and can only be caught on that reaction:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnBetterReactionFound: a higher priority reaction succeeded its check&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnNoReactionFound: no reaction has succeeded its check&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnScriptDisabled: another system has taken control (dialogs, statuses, story)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnManualInterrupt: the Interrupt action itself has caused the interrupt&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnMovementFailed: pathfinding has failed to find a path to the target&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OnException: a character task has failed&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===OnFunction===&lt;br /&gt;
You can create your own &amp;quot;functions' with &amp;lt;b&amp;gt;CallFunction(&amp;quot;functionName&amp;quot;)&amp;lt;/b&amp;gt; and catching the event &amp;lt;b&amp;gt;OnFunction(&amp;quot;functionName&amp;quot;)&amp;lt;/b&amp;gt;. This way you can share functionality between multiple events and reactions. You can not pass parameters directly, but you could set some function-specific global variables which the function uses and can even 'return' results in.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Culling=&lt;br /&gt;
For performance reasons we only update a small set of all the characters &amp;amp; items in the level.&amp;lt;br /&amp;gt;&lt;br /&gt;
The updating characters are:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Force updating (can be set in script/story, but should only be used in an emergency!)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In Combat&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Executing Osiris Tasks&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In range of the party (within 40m)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
The updating items are:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Force updating (can be set in script/story using ItemSetForceSynch(), but should only be used in an emergency!)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In Combat&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Moving&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In range of the party (within 40m)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
This means that in most cases objects far away from the party get culled and stop updating. When an object doesn't update anymore this means the behaviour is interrupted and won't be executed anymore. However, events always get executed, so culling has no impact on this. Another consequence of culling is that timers of that script are not ticking anymore and are basically paused.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Debugging=&lt;br /&gt;
There are 4 ways to help you debug:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The script debugger in the script editor&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CTRL+SHIFT+ClICK on the object you wish to debug to show the Script Screen, and CTRL+SHIFT+SCROLL to the Script and/or Variables screen to see what the current state is.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Add a whole bunch of DebugText output in your code to see which code is called in what order.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Start the script log for an object, which logs as much stuff as possible about the script (reactions, interrupts, events, ...)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Script Debugger===&lt;br /&gt;
See the [[script_debugger|Script Debugger]] page for more information.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Script Screen===&lt;br /&gt;
On the left side of the Script Screen it shows the script variables, the script reactions (ordered from high priority to low), and the current Event it catches. It colors the reactions gray (not checked), green (check passed), and red (check failed). At the right you can see the current reaction's conditions and actions. You can see which action is currently executing and you can see the return results of the conditions from the check: gray (not evaluated), green (TRUE), and red (FALSE).&amp;lt;br /&amp;gt;&lt;br /&gt;
You can filter in the script variables through the [[console|console]] by using: &amp;quot;filtervar &amp;lt;filter&amp;gt;&amp;quot;.&lt;br /&gt;
&amp;lt;b&amp;gt;Tip:&amp;lt;/b&amp;gt; type &amp;quot;filtervar asdf&amp;quot; or something to remove all variables so you can see all the reactions!&amp;lt;br /&amp;gt;&lt;br /&gt;
You can also change which reaction you want to see at the right, by entering the number of that reaction in the console. This way you can easily check why certain reactions are never succeeding their CHECK by checking the return values of the conditions. To do this first you must activate this mode, by entering &amp;quot;show server&amp;quot; in the console. Then you can type the number of the wanted reaction or type &amp;quot;0&amp;quot; to show the current reaction again.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===DebugText===&lt;br /&gt;
You can put DebugText in events/scriptframes/reactions to print text in the world on any object you want. This way you can easily see if you get in the code you wrote and you can also print any variable's value at that time. To print the variables we use the same syntax as translated strings: [1] [2] [3] ...&amp;lt;br /&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DebugText(__Me,&amp;quot;Target: [1], Speed is [2]&amp;quot;,_Target,%Speed)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For characters, items, triggers, splines, and templates the name will be shown in the debug text. Numbers will be shown in full, and all other variables will be directly converted to strings.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===ScriptLog===&lt;br /&gt;
You can also start/stop the scriptlog in console with:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;ai log all&amp;quot;: Start the scriptlog for all character/items.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;ai log none&amp;quot;: Stop the scriptlog for all character/items.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;ai log selected&amp;quot;: Toggle the separate scriptlog for the selected (CTRL+SHIFT+CLICK) object&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
It will generate scriptlog file(s) right next to the executable.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
=Common Mistakes=&lt;br /&gt;
===Reset()===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REACTION CastSkill, 1000&lt;br /&gt;
USAGE COMBAT&lt;br /&gt;
VARS&lt;br /&gt;
     FLOAT:_minRange&lt;br /&gt;
     FLOAT:_maxRange&lt;br /&gt;
CHECK &amp;quot;!c1&amp;amp;c2&amp;amp;c3&amp;quot;&lt;br /&gt;
     IsEqual(%SkillTarget,null)&lt;br /&gt;
     CharacterCanCast(__Me,Projectile_Fireball,0)&lt;br /&gt;
     CharacterGetSkillRange(_minRange,_maxRange,__MeProjectile_Fireball)&lt;br /&gt;
ACTIONS&lt;br /&gt;
     CharacterMoveInRange(%SkillTarget,_minRange,_maxRange,1)&lt;br /&gt;
     PlayEffectAt(__Me, &amp;quot;FX_GP_HugeFireball_A&amp;quot;)&lt;br /&gt;
     CharacterUseSkill(Projectile_Fireball,%SkillTarget)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;In this case we have a reaction that will move in range of the target and as soon as we are in range we will play an effect and cast a fireball. However, if this reaction gets interrupted during the playeffect, next time this reaction becomes active again we will just cast a fireball on the target even when we would not be in range and didn't play the effect. This is why in these cases you should add an INTERRUPT to Reset() the reaction.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CHECK or IF===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REACTION CastSkill,1000&lt;br /&gt;
USAGE COMBAT&lt;br /&gt;
VARS&lt;br /&gt;
     FLOAT:_minRange&lt;br /&gt;
     FLOAT:_maxRange&lt;br /&gt;
CHECK &amp;quot;!c1&amp;amp;c2&amp;quot;&lt;br /&gt;
     IsEqual(%SkillTarget,null)&lt;br /&gt;
     CharacterGetSkillRange(_minRange,_maxRange,__MeProjectile_Fireball)&lt;br /&gt;
ACTIONS&lt;br /&gt;
     IF &amp;quot;c1&amp;quot;&lt;br /&gt;
          CharacterCanCast(__Me,Projectile_Fireball,0)	&lt;br /&gt;
     THEN&lt;br /&gt;
          CharacterMoveInRange(%SkillTarget,_minRange,_maxRange,1)&lt;br /&gt;
          PlayEffectAt(__Me, &amp;quot;FX_GP_HugeFireball_A&amp;quot;)&lt;br /&gt;
          CharacterUseSkill(Projectile_Fireball,%SkillTarget)&lt;br /&gt;
     ENDIF&lt;br /&gt;
INTERRUPT&lt;br /&gt;
     Reset()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In this case we're checking something in the reaction when it's executing, but we don't do anything if the IF fails. There is no ELSE behaviour. This means that in combat this reaction could keep failing and not do anything, which will cause a ForceEndTurn for that character. Here we should have checked CharacterCanCast in the CHECK and not write a separate IF check. In general when the IF check in a REACTION is blocking the whole REACTION from executing it's probably better to place it in the CHECK instead.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Check order===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
IF &amp;quot;c1&amp;amp;c2&amp;amp;!c3&amp;amp;c4&amp;quot;&lt;br /&gt;
     CharacterGetStat(_Vitality, __Me, Vitality) // Fetch before checking&lt;br /&gt;
     IsGreaterThen(_Vitality, 0.5)&lt;br /&gt;
     IsEqual(_Character, null) // Null check before checking&lt;br /&gt;
     CharacterIsPlayer(_Character)&lt;br /&gt;
THEN&lt;br /&gt;
     // Do something&lt;br /&gt;
ENDIF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure to perform your checks in the right order. Before checking a stat make sure to fetch it. Before checking if the character is a player consider checking if it is a valid player. Could it be the player is off stage? Could it be dead? Is it even set?&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
	<entry>
		<id>https://docs.larian.game/index.php?title=Scripting_death_types&amp;diff=2262</id>
		<title>Scripting death types</title>
		<link rel="alternate" type="text/html" href="https://docs.larian.game/index.php?title=Scripting_death_types&amp;diff=2262"/>
		<updated>2017-09-13T18:25:12Z</updated>

		<summary type="html">&lt;p&gt;Rimevan: Created page with &amp;quot;The following death types can be used in script: &amp;lt;ul&amp;gt; &amp;lt;li&amp;gt;None&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;Physical&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;Piercing&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;Arrow&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;DoT&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;Incinerate&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;Acid&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;Elect...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following death types can be used in script:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;None&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Physical&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Piercing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Arrow&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DoT&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Incinerate&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Acid&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Electrocution&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FrozenShatter&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PetrifiedShatter&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Explode&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Surrender&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Hang&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;KnockedDown&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Lifetime&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimevan</name></author>
	</entry>
</feed>