Changes for page Mission Director Guide
Last modified by Klaus Meyer on 2025/03/31 16:39
From version 32970.2
edited by Owen Lake
on 2023/10/10 15:34
on 2023/10/10 15:34
Change comment:
fighting with formatting
To version 32970.9
edited by Heinrich Unrau
on 2024/10/17 12:53
on 2024/10/17 12:53
Change comment:
There is no comment for this version
Summary
-
Page properties (2 modified, 0 added, 0 removed)
Details
- Page properties
-
- Author
-
... ... @@ -1,1 +1,1 @@ 1 -xwiki:XWiki. Owen1 +xwiki:XWiki.Heinrich - Content
-
... ... @@ -407,11 +407,11 @@ 407 407 408 408 Most of the attribute values in actions and conditions are interpreted as script expressions and parsed accordingly. An expression is a phrase that can be evaluated to a single value. The simplest expressions are actual numeric values and strings, so called **literals:** 409 409 410 -* {{code language="xml"}}0{{/code}} 411 -* {{code language="xml"}}0772{{/code}} 412 -* {{code language="xml"}}3.14159{{/code}} 413 -* {{code language="xml"}}5e12{{/code}} 414 -* {{code language="xml"}}0xCAFE{{/code}} 410 +* {{code language="xml"}}0{{/code}}(integer number) 411 +* {{code language="xml"}}0772{{/code}}(leading 0 means octal integer number) 412 +* {{code language="xml"}}3.14159{{/code}}(floating point number) 413 +* {{code language="xml"}}5e12{{/code}}(float in exponent notation, "times ten to the power of") 414 +* {{code language="xml"}}0xCAFE{{/code}}(hexadecimal integer number) 415 415 416 416 {{info}} 417 417 Since octal numbers are hardly ever used (usually unknowingly), the parser is will produce a warning if an octal number is encountered." ... ... @@ -420,7 +420,7 @@ 420 420 You can write string literals by putting the string in single quotes: 421 421 422 422 * {{code language="xml"}}'Hello world'{{/code}} 423 -* {{code language="xml"}}''{{/code}} 423 +* {{code language="xml"}}''{{/code}}(empty string) 424 424 * {{code language="xml"}}'String with a line break\n'{{/code}} 425 425 426 426 {{info}} ... ... @@ -432,12 +432,12 @@ 432 432 433 433 Numbers can have a suffix that determines their numeric type. There are also numerical data types like "money" or "time" which can only be expressed by using an appropriate unit suffix: 434 434 435 -* {{code language="xml"}}5000000000L{{/code}} 436 -* {{code language="xml"}}1f{{/code}} 437 -* {{code language="xml"}}1000Cr{{/code}} 438 -* {{code language="xml"}}500m{{/code}} 439 -* {{code language="xml"}}10s{{/code}} 440 -* {{code language="xml"}}1h{{/code}} 435 +* {{code language="xml"}}5000000000L{{/code}}(large integer) 436 +* {{code language="xml"}}1f{{/code}}(floating point number, same as 1.0, just 1 would be an integer) 437 +* {{code language="xml"}}1000Cr{{/code}}(Money in Credits, converted to 100000 cents automatically) 438 +* {{code language="xml"}}500m{{/code}}(Length in metres) 439 +* {{code language="xml"}}10s{{/code}}(Time in seconds) 440 +* {{code language="xml"}}1h{{/code}}(Time in hours, which is converted to 3600s automatically) 441 441 442 442 A space between number and suffix is allowed. 443 443 ... ... @@ -522,18 +522,36 @@ 522 522 {{code language="xml"}}tan(-45deg){{/code}} 523 523 \\{{code language="xml"}}tan(45deg){{/code}}| 524 524 {{code language="xml"}}-1.0{{/code}} 525 -\\{{code language="xml"}}1.0{{/code}}|Tangent (function-style, parentheses required) 525 +\\{{code language="xml"}}1.0{{/code}}|((( 526 +Tangent (function-style, parentheses required) 527 + 528 +Available from X4 v7.0 529 +))) 526 526 |asin|unary| 527 527 {{code language="xml"}}asin(-0.5f){{/code}} 528 528 \\{{code language="xml"}}asin(1){{/code}}| 529 529 {{code language="xml"}}-0.523599rad{{/code}} 530 -\\{{code language="xml"}}1.5708rad{{/code}}|Inverse sine (function-style, parentheses required) 534 +\\{{code language="xml"}}1.5708rad{{/code}}|((( 535 +Inverse sine (function-style, parentheses required) 536 + 537 +Available from X4 v7.0 538 +))) 531 531 |acos|unary| 532 -{{code language="xml"}}acos(0.5f){{/code}} 540 +{{code language="xml"}}acos(-0.5f){{/code}} 533 533 \\{{code language="xml"}}acos(1.0f){{/code}}| 534 -{{code language="xml"}}asin(2.0944rad){{/code}} 535 -\\{{code language="xml"}}0rad{{/code}}|Inverse cosine (function-style, parentheses required) 536 -|atan|unary| | |Inverse tangent (function-style, parentheses required) 542 +{{code language="xml"}}2.0944rad{{/code}} 543 +\\{{code language="xml"}}0rad{{/code}}|((( 544 +Inverse cosine (function-style, parentheses required) 545 + 546 +Available from X4 v7.0 547 +))) 548 +|atan|unary| 549 +{{code language="xml"}}atan(1.0f){{/code}}| 550 +{{code language="xml"}}0.785398rad{{/code}}|((( 551 +Inverse tangent (function-style, parentheses required) 552 + 553 +Available from X4 v7.0 554 +))) 537 537 |sqrt|unary|{{code language="xml"}}sqrt(2){{/code}}|{{code language="xml"}}1.414213LF{{/code}}|Square root (function-style, parentheses required) 538 538 |exp|unary|{{code language="xml"}}exp(1){{/code}}|{{code language="xml"}}2.71828LF{{/code}}|Exponential function (function-style, parentheses required) 539 539 |log|unary|{{code language="xml"}}log(8) / log(2){{/code}}|{{code language="xml"}}3.0LF{{/code}}|Natural logarithm (function-style, parentheses required) ... ... @@ -612,8 +612,8 @@ 612 612 613 613 There is a way to convert a number into a different type manually: You append the corresponding suffix to a sub-expression in parentheses, like this: 614 614 615 -* {{code language="xml"}}(1 + 1)f{{/code}} 616 -* {{code language="xml"}}(1h) m / (180deg) i{{/code}} 633 +* {{code language="xml"}}(1 + 1)f{{/code}}⟹ {{code language="xml"}}2f{{/code}} ⟹ {{code language="xml"}}2.0{{/code}} 634 +* {{code language="xml"}}(1h) m / (180deg) i{{/code}}⟹ {{code language="xml"}}(3600s) m / (3.14rad) i{{/code}} ⟹ {{code language="xml"}}3600m / 3{{/code}} ⟹ {{code language="xml"}}1200m{{/code}} 617 617 618 618 When converting to a non-default unit type, this means you interpret the number as in the given units: "{{code language="xml"}}(1km + 500m)h{{/code}}" means that you interpret 1500m as 1500 hours, so the resulting value will be 1500x3600 seconds. (As stated above, the default unit for a length is metres.) 619 619 ... ... @@ -621,8 +621,8 @@ 621 621 622 622 Every data type can be combined with a string with the + operator, and will be converted to a string representation. That way you can also concatenate strings and numbers: 623 623 624 -* {{code language="xml"}}'One plus one is equal to ' + (1+1) + '.'{{/code}} 625 -* {{code language="xml"}}'One plus one is not equal to ' + 1 + 1 + '.'{{/code}} 642 +* {{code language="xml"}}'One plus one is equal to ' + (1+1) + '.'{{/code}}⟹ {{code language="xml"}}'One plus one is equal to 2.'{{/code}} 643 +* {{code language="xml"}}'One plus one is not equal to ' + 1 + 1 + '.'{{/code}}⟹ {{code language="xml"}}'One plus one is not equal to 11.'{{/code}} 626 626 627 627 As you can see, operators of the same precedence (+ in this case) are always evaluated from left to right. 628 628 ... ... @@ -654,9 +654,9 @@ 654 654 \\**[New as of X Rebirth 4.0]** 655 655 \\ With the formatting syntax above, it is even possible to control how the parameter is formatted, using modifiers between "%" and the parameter specifier ("s" or the parameter number): 656 656 657 -* {{code language="xml"}}'%,s'.[12345678]{{/code}} 658 -* {{code language="xml"}}'%.3s'.[123.4]{{/code}} 659 -* {{code language="xml"}}'%,.1s'.[12345.67]'{{/code}} 675 +* {{code language="xml"}}'%,s'.[12345678]{{/code}}⟹ {{code language="xml"}}'12,345,678'{{/code}} (the "," modifier shows a number with thousands separators, correctly localised) 676 +* {{code language="xml"}}'%.3s'.[123.4]{{/code}}⟹ {{code language="xml"}}'123.400'{{/code}} (show 3 fractional digits, rounding half away from zero - decimal point correctly localised) 677 +* {{code language="xml"}}'%,.1s'.[12345.67]'{{/code}}⟹ {{code language="xml"}}'12,345.7'{{/code}} (combination of the above) 660 660 661 661 Additional remarks: 662 662 ... ... @@ -701,13 +701,13 @@ 701 701 702 702 These restrictions only apply to the keys, there are no restrictions for values that you assign to them. For example: 703 703 704 -* {{code language="xml"}}table[]{{/code}} 705 -* {{code language="xml"}}table[{0} = null]{{/code}} 722 +* {{code language="xml"}}table[]{{/code}}⟹ creates an empty table 723 +* {{code language="xml"}}table[{0} = null]{{/code}}⟹ creates a table that maps the number 0 to null 706 706 707 -* {{code language="xml"}}table[{'$foo'} = 'bar']{{/code}} 708 -* {{code language="xml"}}table[$foo = 'bar']{{/code}} 709 -* {{code language="xml"}}table[foo = 'bar']{{/code}} 710 -* {{code language="xml"}}table[{1} = [], {2} = table[]] {{/code}} 725 +* {{code language="xml"}}table[{'$foo'} = 'bar']{{/code}}⟹ a table that maps the string '$foo' to the string 'bar' 726 +* {{code language="xml"}}table[$foo = 'bar']{{/code}}⟹ exactly the same, just a shorter notation for string keys 727 +* {{code language="xml"}}table[foo = 'bar']{{/code}}⟹ error, 'foo' does not start with a '$' 728 +* {{code language="xml"}}table[{1} = [], {2} = table[]] {{/code}}⟹ a table that maps 1 to an empty list and 2 to an empty table 711 711 712 712 Just like lists, tables are stored as references, so it's possible that multiple variables reference the same table (see above). 713 713 ... ... @@ -728,10 +728,10 @@ 728 728 729 729 You can look up a property by appending a dot and the key in curly braces: 730 730 731 -* {{code language="xml"}}[100, 200, 300, 400].{1}{{/code}} 732 -* {{code language="xml"}}[100, 200, ['Hello ', 'world']] .{3}.{2}{{/code}} 733 -* {{code language="xml"}}[].{'count'}{{/code}} 734 -* {{code language="xml"}}table[{21} = 42].{21}{{/code}} 749 +* {{code language="xml"}}[100, 200, 300, 400].{1}{{/code}}⟹ 100 (reading the first element) 750 +* {{code language="xml"}}[100, 200, ['Hello ', 'world']] .{3}.{2}{{/code}}⟹ 'world' (second element of the inner list, which is the third element of the outer list) 751 +* {{code language="xml"}}[].{'count'}{{/code}}⟹ 0 752 +* {{code language="xml"}}table[{21} = 42].{21}{{/code}}⟹ 42 735 735 736 736 In most cases the property key is a fixed string, like "name" or "class". You can write this like above: 737 737 ... ... @@ -755,19 +755,19 @@ 755 755 756 756 **min'** and '**max'** return the minimum or maximum (all elements have to be numeric) 757 757 758 -* {{code language="xml"}}[1, 6, 8].min{{/code}} 776 +* {{code language="xml"}}[1, 6, 8].min{{/code}}⟹ 1 759 759 760 760 **average'** returns the average (but all element types have to be compatible) 761 761 762 -* {{code language="xml"}}[1, 6, 8].average{{/code}} 780 +* {{code language="xml"}}[1, 6, 8].average{{/code}}⟹ 5 763 763 764 764 **indexof'** is followed by another property, and the index of the first occurence of that key in the list is returned, or 0 if it's not in the list 765 765 766 -* {{code language="xml"}}[1, 6, 8].indexof.{8}{{/code}} 784 +* {{code language="xml"}}[1, 6, 8].indexof.{8}{{/code}}⟹ 3 767 767 768 768 **clone'** creates a shallow copy of the list (i.e. lists that are contained as elements in the list are not copied, only the reference to them) 769 769 770 -* {{code language="xml"}}[1, 6, 8].clone{{/code}} 788 +* {{code language="xml"}}[1, 6, 8].clone{{/code}}⟹ {{code language="xml"}}[1, 6, 8]{{/code}} 771 771 772 772 A table has different properties: 773 773 ... ... @@ -791,20 +791,20 @@ 791 791 792 792 If you look up a property that does not exist, there will be an error, and the result will be null. To test whether a property exists, you can append a question mark "?" to the lookup, which yields true or false: 793 793 794 -* {{code language="xml"}}$list.{5}{{/code}} 795 -* {{code language="xml"}}$list.{5}?{{/code}} 796 -* {{code language="xml"}}$table.$key?{{/code}} 812 +* {{code language="xml"}}$list.{5}{{/code}}⟹ The fifth element of a list - however, if $list has less than 5 elements (and if it's also not a table with the key 5), there will be an error 813 +* {{code language="xml"}}$list.{5}?{{/code}}⟹ true if $list exists and has the property 5, false otherwise 814 +* {{code language="xml"}}$table.$key?{{/code}}⟹ Analogously, true if $table exists and has the string property '$key' 797 797 798 798 The question mark can even be applied to variables: 799 799 800 -* {{code language="xml"}}$list{{/code}} 801 -* {{code language="xml"}}$list?{{/code}} 818 +* {{code language="xml"}}$list{{/code}}⟹ The value stored under the name $list, or an error if there is no such variable 819 +* {{code language="xml"}}$list?{{/code}}⟹ true if the variable exists, false otherwise 802 802 803 803 To look up the value of a property although it may not exist, you can use the at-sign "@" as prefix: 804 804 805 -* {{code language="xml"}}@$list.{5}{{/code}} 806 -* {{code language="xml"}}@$list{{/code}} 807 -* {{code language="xml"}}@$list.{5}.{1}{{/code}} 823 +* {{code language="xml"}}@$list.{5}{{/code}}⟹ The result of the $list lookup if $list exists and has the property 5, otherwise null (without error message) 824 +* {{code language="xml"}}@$list{{/code}}⟹ The list if this variable exists, null otherwise 825 +* {{code language="xml"}}@$list.{5}.{1}{{/code}}⟹ The first element of the fifth element of $list, if it exists, null otherwise 808 808 809 809 As you can see, an error is already prevented if any link in the property chain does not exist. But use the @ prefix with care, since error messages are really helpful for detecting problems in your scripts. The @ prefix only suppresses property-related error messages and does not change any in-game behaviour. 810 810 ... ... @@ -912,10 +912,10 @@ 912 912 \\Numbers don't have any properties, except for money and time: They have a "**formatted**" property, which allows you to get a custom string representation with more advanced options than the [[generic formatting method>>||anchor="HStringsandformatting" style="outline-width: 0px !important; user-select: auto !important;"]] for numbers. 913 913 914 914 * {{code language="xml"}}$money.formatted.{'formatstring'}{{/code}} 915 -* {{code language="xml"}}$money.formatted.default{{/code}} 933 +* {{code language="xml"}}$money.formatted.default{{/code}}(using default format string '%s') 916 916 917 917 * {{code language="xml"}}$time.formatted.{'formatstring'}{{/code}} 918 -* {{code language="xml"}}$time.formatted.default{{/code}} 936 +* {{code language="xml"}}$time.formatted.default{{/code}}(using default format string '%T') 919 919 920 920 In scripts, money is stored in cents, not Credits. The formatted representation always shows the value in Credits, including thousands separators. 921 921 ... ... @@ -949,10 +949,10 @@ 949 949 950 950 Examples: 951 951 952 -* {{code language="xml"}}(151s).formatted.{'%T'}{{/code}} 953 -* {{code language="xml"}}(151s).formatted.default{{/code}} 954 -* {{code language="xml"}}(151s).formatted.{'%.3T'}{{/code}} 955 -* {{code language="xml"}}(151s).formatted.{'%h:%M'}{{/code}} 970 +* {{code language="xml"}}(151s).formatted.{'%T'}{{/code}}⟹ {{code language="xml"}}'00:02:31'{{/code}} 971 +* {{code language="xml"}}(151s).formatted.default{{/code}}⟹ {{code language="xml"}}'00:02:31'{{/code}} (same as {'%T'}) 972 +* {{code language="xml"}}(151s).formatted.{'%.3T'}{{/code}}⟹ {{code language="xml"}}'00:02:31.000'{{/code}} 973 +* {{code language="xml"}}(151s).formatted.{'%h:%M'}{{/code}}⟹ {{code language="xml"}}'0:02'{{/code}} 956 956 957 957 === Complete property documentation === 958 958 ... ... @@ -964,7 +964,7 @@ 964 964 scriptproperties.html has to load files from different folders, which modern browsers do not allow by default for security reasons. In order to open scriptproperties.html, the following is required: 965 965 966 966 * Firefox: On the about:config page, the value of "security.fileuri.strict_origin_policy" has to be changed to "false". 967 -* Chrome: The Chrome launcher has to be started with the command-line parameter --allow-file-access-from-files --985 +* Chrome: The Chrome launcher has to be started with the command-line parameter --~-~---allow-file-access-from-files 968 968 {{/info}} 969 969 970 970 This provides you with a complete list of all supported "base keywords" and properties. To filter in this list, you can enter an expression in the text field: ... ... @@ -989,6 +989,7 @@ 989 989 990 990 * MD scripts and cues are identified by their names. So a script can only be refreshed if it has the same script name as before (file name is irrelevant). 991 991 * If there are new script files or new cue nodes (i.e. scripts/cues with new names) they are created and added properly. If you remove script files or cue nodes, the corresponding scripts/cues are removed from the game, including instances. 1010 +** If you remove a cue and then later add another cue with the same name, old save files will not know that the cue has been removed inbetween. 992 992 * As a consequence, you CANNOT rename scripts or cues if you want to refresh them. Doing so would remove the old script or cue and add a new one with the new name. 993 993 * You CANNOT change a <cue> to a <library> or vice versa. 994 994 * You CANNOT add, remove, or change the "ref" attribute of a cue. But it is possible to remove the whole cue. (If all references to a library are removed you can also remove the library itself.)