Changes for page Mission Director Guide

Last modified by Klaus Meyer on 2025/03/31 16:39

From version 31190.1
edited by Daniel Turner
on 2023/04/25 11:20
Change comment: There is no comment for this version
To version 31075.1
edited by Daniel Turner
on 2023/04/14 17:13
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -1,3 +1,12 @@
1 +{{info body="Please note that this is officially-maintained documentation.
2 +
3 +To ensure that you can rely on the information having been checked by Egosoft, you will not be able to edit this page."/}}
4 +
5 +
6 +
7 +(% style="color: rgb(0,0,0);text-decoration: none;" %)
8 +
9 +
1 1  (% style="color: rgb(0,0,0);text-decoration: none;" %)The Mission Director (MD) is a subsystem of the game and interprets mission scripts, which are written in an XML-based language. The Mission Director in X Rebirth and X4 is based on the MD in X3: Terran Conflict, with some major changes based on feedback from MD users.
2 2  
3 3  
... ... @@ -288,26 +288,17 @@
288 288  
289 289  (% style="color: rgb(0,0,0);text-decoration: none;" %)Library cues are written like normal cues, they are also defined in a <cues> node, just with the difference that the XML tag is called library instead of cue:
290 290  
291 -{{code language="xml"}}
292 -<library name="LibFoo" checktime="1h" checkinterval="5s">
293 - <conditions>
294 - [...]
295 -</library>
296 -{{/code}}
300 +{{code}}&lt;library name=&quot;LibFoo&quot; checktime=&quot;1h&quot; checkinterval=&quot;5s&quot;&gt;  &lt;conditions&gt;  [...]&lt;/library&gt;{{/code}}
297 297  
298 298  (% style="color: rgb(0,0,0);text-decoration: none;" %)Although it is called library, itΓÇÖs basically just a cue that doesnΓÇÖt do anything. You can mix cues and libraries as you want, as root cues or sub-cues - the location within the file is unimportant. All that counts is the library name, which has to be unique within the MD script, like all other cue names.
299 299  
300 300  (% style="color: rgb(0,0,0);text-decoration: none;" %)To use a library, use the attribute ref:
301 301  
302 -{{code language="xml"}}
303 -<cue name="Foo" ref="LibFoo"/>
304 -{{/code}}
306 +{{code}}&lt;cue name=&quot;Foo&quot; ref=&quot;LibFoo&quot;/&gt;{{/code}}
305 305  
306 306  (% style="color: rgb(0,0,0);text-decoration: none;" %)This will create a cue with the name Foo that behaves just like the library cue LibFoo. In this example, LibFoo has to be a library in the same MD script file. To use a library LibFoo from another script, you have to qualify it with the script name, using the (%%)**(% style="color: rgb(0,0,0);text-decoration: none;" %)md(%%)**(% style="color: rgb(0,0,0);text-decoration: none;" %) prefix:
307 307  
308 -{{code language="xml"}}
309 -<cue name="Foo" ref="md.ScriptName.LibFoo"/>
310 -{{/code}}
310 +{{code}}&lt;cue name=&quot;Foo&quot; ref=&quot;md.ScriptName.LibFoo&quot;/&gt;{{/code}}
311 311  
312 312  (% style="color: rgb(0,0,0);text-decoration: none;" %)When the ref attribute is provided, all other attributes (except for name) will be ignored and taken from the library cue instead. ((% style="color: rgb(0,0,0);text-decoration: none;" %)By default a library creates its own namespace, as if namespace="static" were specified. See the section about namespaces.(%%))
313 313  
... ... @@ -315,28 +315,8 @@
315 315  
316 316  (% style="color: rgb(0,0,0);text-decoration: none;" %)In contrast to X3TC, a cue that references a library also has its own name (Foo in the example above), so other cues can access it in expressions by that name. Sub-cues of Foo cannot be accessed by their name though. Within the library itself, expressions can use all names of cues that belong to the library (the <library> and all sub-cues). They will be translated properly when the library is referenced. Examples:
317 317  
318 -{{code language="xml"}}
319 -<cue name="Foo" ref="LibFoo"/>
320 -<cue name="Bar" ref="LibFoo"/>
318 +{{code}}&lt;cue name=&quot;Foo&quot; ref=&quot;LibFoo&quot;/&gt;&lt;cue name=&quot;Bar&quot; ref=&quot;LibFoo&quot;/&gt;&lt;library name=&quot;LibFoo&quot;&gt;  &lt;actions&gt;    &lt;cancel_cue cue=&quot;this&quot;/&gt;             &lt;!-- Cancels the cue referencing LibFoo --&gt;    &lt;cancel_cue cue=&quot;LibFoo&quot;/&gt;           &lt;!-- Cancels the cue referencing LibFoo --&gt;    &lt;cancel_cue cue=&quot;Foo&quot;/&gt;              &lt;!-- Error, Foo not found in library --&gt;    &lt;cancel_cue cue=&quot;Baz&quot;/&gt;              &lt;!-- Cancels Baz in the referencing cue --&gt;    &lt;cancel_cue cue=&quot;md.Script.Foo&quot;/&gt;    &lt;!-- Cancels Foo --&gt;    &lt;cancel_cue cue=&quot;md.Script.LibFoo&quot;/&gt; &lt;!-- Error, trying to cancel library --&gt;    &lt;cancel_cue cue=&quot;md.Script.Baz&quot;/&gt;    &lt;!-- Error, trying to cancel library sub-cue --&gt;  &lt;/actions&gt;  &lt;cues&gt;    &lt;cue name=&quot;Baz&quot;&gt; [...] &lt;!-- Sub-cue is created in all cues referencing LibFoo --&gt;  &lt;/cues&gt;&lt;/library&gt;{{/code}}
321 321  
322 -<library name="LibFoo">
323 - <actions>
324 - <cancel_cue cue="this"/>
325 - <cancel_cue cue="LibFoo"/>
326 - <cancel_cue cue="Foo"/>
327 - <cancel_cue cue="Baz"/>
328 - <cancel_cue cue="md.Script.Foo"/>
329 - <cancel_cue cue="md.Script.LibFoo"/>
330 - <cancel_cue cue="md.Script.Baz"/>
331 - </actions>
332 - <cues>
333 - <cue name="Baz"> [...]
334 - </cues>
335 -</library>
336 -{{/code}}
337 -
338 -
339 -
340 340  {{warning body="These examples are definitely <u>not</u> examples of good scripting style."/}}
341 341  
342 342  
... ... @@ -357,38 +357,15 @@
357 357  
358 358  (% style="color: rgb(0,0,0);text-decoration: none;" %)Parameters are defined like this:
359 359  
360 -{{code language="xml"}}
361 -<library name="Lib" onfail="cancel">
362 - <params>
363 - <param name="foo"/>
364 - <param name="bar" default="42"/>
365 - <param name="baz" default="player.age"/>
366 - </params>
367 - [...]
368 -</library>
369 -{{/code}}
340 +{{code}}&lt;library name=&quot;Lib&quot; onfail=&quot;cancel&quot;&gt;  &lt;params&gt;    &lt;param name=&quot;foo&quot;/&gt;    &lt;param name=&quot;bar&quot; default=&quot;42&quot;/&gt;    &lt;param name=&quot;baz&quot; default=&quot;player.age&quot;/&gt;  &lt;/params&gt;  [...]&lt;/library&gt;{{/code}}
370 370  
371 371  (% style="color: rgb(0,0,0);text-decoration: none;" %)If a default value is supplied, the parameter is regarded as optional, otherwise itΓÇÖs required. When providing the actual parameters in a referencing cue, note that there is no <params> node:
372 372  
373 -{{code language="xml"}}
374 -<cue name="Foo" ref="Lib">
375 - <param name="foo" value="race.argon"/>
376 - <param name="bar" value="0"/>
377 -</cue>
378 -{{/code}}
344 +{{code}}&lt;cue name=&quot;Foo&quot; ref=&quot;Lib&quot;&gt; &lt;param name=&quot;foo&quot; value=&quot;race.argon&quot;/&gt; &lt;param name=&quot;bar&quot; value=&quot;0&quot;/&gt;&lt;/cue&gt;{{/code}}
379 379  
380 380  (% style="color: rgb(0,0,0);text-decoration: none;" %)The values (including default values) can be variable expressions and will be evaluated when the cue is enabled, i.e. when it starts checking the conditions. They will be available to the cue as variables, using the parameter name with a ΓÇÿ$ΓÇÖ prefix. In the example above, the variables $foo, $bar, and $baz would be created.
381 381  
382 -{{code language="xml"}}
383 -<library name="Lib">
384 - <params>
385 - <param name="foo"/>
386 - </params>
387 - <actions>
388 - <debug_text text="$foo"/>
389 - </actions>
390 -</library>
391 -{{/code}}
348 +{{code}}&lt;library name=&quot;Lib&quot;&gt;  &lt;params&gt;    &lt;param name=&quot;foo&quot;/&gt;  &lt;/params&gt;  &lt;actions&gt;    &lt;debug_text text=&quot;$foo&quot;/&gt;  &lt;/actions&gt;&lt;/library&gt;{{/code}}
392 392  
393 393  (% style="color: rgb(0,0,0);text-decoration: none;" %)If your library is supposed to provide a result to the library user, it is recommended to store a predefined variable in the library cue with a standardised name, e.g. $result. The user will be able to read it via CueName.$result. This variable does not have to be defined as a parameter but should be documented in the library.
394 394