Jump to content

Module Manager scripts


Monniasza

Recommended Posts

Spoiler

This thread has been created on request by TranceaddicT

The associated issue is located at https://github.com/sarbian/ModuleManager/issues/157

Overview

Strings must be now explicitly stated either by single or double quotation marks, otherwise, they will be treated as variables, which might cause errors.

To create a new key, you must place '+' or '$' before the setter

All other existing syntax will be preserved

Functions
- getVar(variable)  get a variable, starting here
- getVarRoot(variable) - get a variable by the name, starting from root
or key correspondingly. The first parameter is optional and is used to track the number of calls. 
- Variables belonging to the local node are obtained by simply typing their name.
- To get variables from ancestors, use ##$...$ instead.
- regexp(pattern,string) - run regexp expression on a string
- sin, cos, tan, log10, ln, log2, expE, exp10, mod, exp, sec, csc, sqrt, curt, root, log - math functions
- getKey(...) :
  - 2 inputs: name, index - get a single **key** by **index**
  - 1 input: name - get all **keys** by name
  - 1 input: key - get key's value
  - no inputs - get all keys under all names
- getKeyValue(...): Like getKey(...), but gets values, not the keys themselves.
- setKey(...) :
  - 3 inputs: key name, index, value - set given key at the given index to the given value
  - 2 inputs: key, value: sets given a key to a given value
  - 2 inputs: keys, value: sets all given keys to a single value
  - 2 inputs: keys, values: sets keys to the corresponding values
  - 2 inputs: key name, values: sets keys under given name to the corresponding values
  - 2 inputs: key name, value: sets keys under given name to a single value
  - If you want to set multiple keys to a list, use setKeyDuplicate function
- setKeyDuplicate(...):
  - 2 inputs: key name, value: sets keys under given name to a single value
  - 2 inputs: keys, value: sets all given keys to a single value
- call(func, inputs): calls a function with given list of inputs
- getKey(...) :
  - 2 inputs: name, index - get a single **key** by **index**
  - 1 input: name - get all **keys** by name
  - 1 input: key - get key's value
  - no inputs - get all keys under all names
- getNodeValue(...): Like getNode(...), but gets values, not the nodes themselves.
- setNode(...) :
  - 3 inputs: node name, index, value - set given node at the given index to the given value
  - 2 inputs: node, value: sets given a node to a given value
  - 2 inputs: nodes, value: sets all given nodes to a single value
  - 2 inputs: nodes, values: sets nodes to the corresponding values
  - 2 inputs: node name, values: sets nodes under given name to the corresponding values
  - 2 inputs: node name, value: sets nodes under given name to a single value
  - If you want to set multiple nodes to a list, use setKeyDuplicate function
- setNodeDuplicate(...):
  - 2 inputs: node name, value: sets nodes under given name to a single value
  - 2 inputs: nodes, value: sets all given nodes to a single value
Setter prefixes
'$' as a modifier - creates a temporary variable
'$$' as a modifier - creates a long-term variable, but it is removed after all scripts finish.

Basic data types
String, node, key, number, boolean, list, anonymous function

Advanced data types
Achieved through specialized functions.

Operators
- \+ adddition
- \- substraction
- \* multiplication
- / division
- ^ exponent
- | OR
- ! NOT
- & AND
- \ XOR
- !| NOR
- !& NAND
- !\ XNOR
- = equal
- \> more
- < less
- <= !> not more
- \>= !< not less
- <> != not equal

Grouping
- () parentheses
- <% ... %> code sections (they do not start a new node).
- [[...]] - list

Where?
It will need a new file format - which distinguishes it from simpler patches.
Suggestions for file extension:

- mm - from '**m**odule **m**anager'
- akp - from '**a**dvanced **k**erbal **p**atch'
- kscript - from '**k**erbal **script**'
- kpscript - from '**k**erbal **p**atch **script**'

Why?
- KSP API is too complex for beginners
- Existing capabilities are insufficient for extremely advanced users

How?
Existing patches should not be called 'scripts' - they will be more advanced form of data.

Constructs
- Define function: FUNCTIONDEF[...] <%...%>. Place inputs within square brackets, and in double curly brackets place code. The FUNCTIONDEF is a reserved name in this programming language (but not in CFG files). The first input names the function, following ones are input variable names.
- Define anonymous function: FUNCTIONANONYM[...] <%...%>. Place inputs within square brackets, and in double curly brackets place code. The FUNCTIONANONYM is a reserved name in this programming language (but not in CFG files).
- for($x = 0; #$x# < 10; @x += 1) - a 'for' loop
- foreach($x = 0;@NODE[y]) <%...%> or foreach($x = 0;#key) <%...%>and  - runs an action for every node or key 
- if(cond) <%...%> elseif(cond2) <%...%>} else <%...%>} - conditional statement
- fornode(node) <%...%> - run given code for a given node
- try <%...%> catch($exc) <%...%> - if first block throws an error or exception, call second block


'-' with text
"qwertyuiop" - 3 = "qwertyu"
3 - "qwertyuiop" = "rtyuiop"
3 - "qwertyuiop" - 3 = "rtyu"

Remove the last instance:
"anobnoa" -< "no" = "anoba" Remove last instance
"anobnoa" >- "no" = "abnoa" Remove first instance
"anobnoa" - "no" = "aba" Remove all instances

Link to comment
Share on other sites

2 hours ago, Nightside said:

What problems would this solve?

Would existing patches still work?

1. Parts could now have spaces in the name, and SMURFF could shrink a lot.

2. Yes, because scripts would have separate file format.

Link to comment
Share on other sites

4 hours ago, Monniasza said:

1. Parts could now have spaces in the name, and SMURFF could shrink a lot.

2. Yes, because scripts would have separate file format.

1a.  I thought this was a limitation of KSP?

1b.  This might be useful to me. I have a long neglected project (See "Transmogrifier" in my sig) which is basically an add-on to SMURFF which resizes models to realistic dimensions and recalculates resource capacities as well. 

2. Oh, yeah. Good idea.

 

 

Link to comment
Share on other sites

  • 1 month later...
On 6/24/2020 at 10:12 PM, Nightside said:

1a.  I thought this was a limitation of KSP?

1b.  This might be useful to me. I have a long neglected project (See "Transmogrifier" in my sig) which is basically an add-on to SMURFF which resizes models to realistic dimensions and recalculates resource capacities as well. 

2. Oh, yeah. Good idea.

 

 

Do you have any plans for these scripts? I plan to use scripts extensively in LPG module of SSTO Project.

Link to comment
Share on other sites

This thread is quite old. Please consider starting a new thread rather than reviving this one.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...