Scripting Introduction: Difference between revisions

From Soldat2 Wiki
Jump to navigation Jump to search
No edit summary
(document how to parametrize scripts in game modes)
Line 46: Line 46:
=== In a rule / game mode ===
=== In a rule / game mode ===


Add the script name to the <code>GameRules</code> section of the rule definition in <code>Rules/Custom/YourGameMode.json</code>:
To add a script to all matches of a gamemode, edit <code>Rules/Custom/YourGameMode.json</code>.
 
Add a script by adding its class name as a key to the game mode definition (on the same level as <code>GameScript</code>). Inside that object, you can define parameters the script potentially exposes via <code>JSONProperty</code> tags:


<syntaxhighlight lang="JSON">
<syntaxhighlight lang="JSON">
{
{
   "Objects": {
   ...
    "YourGameMode": {
      "GameScript": { ... },
      "YourScriptName": {
        "ExampleParameter": true,
      }
  ...
}
</syntaxhighlight>
 
 


An alternative way, is to add the class name of your script to the <code>GameScript.Scripts</code> array:
<syntaxhighlight lang="JSON">
{
  ...
       "GameScript": {
       "GameScript": {
         "Scripts": [
         "Scripts": [
Line 59: Line 73:
         ]
         ]
       }
       }
 
   ...
    }
   }
}
}
</syntaxhighlight>
</syntaxhighlight>
* TODO: check if parameters can be passed in this syntax too (eg <code>"Scripts": [{ "YourScriptName": { MyParam: false } }]</code>

Revision as of 15:24, 7 March 2023

Scripting in Soldat 2 is done in a Unity/C# environment. For a script to be usable in-game, the script file must be placed under Soldat2/Scripts/ and there needs to be a ruleset that specifies that script in the GameScript object in its json - for example, see Soldat2/Rules/Standard/Climb.json. The script can be tested by starting a game that uses that ruleset.


Scripting Resources

The Soldat 2 engine uses Unity, so it may be useful to familiarise yourself with the Unity Manual.

There is some preliminary documentation for the Soldat 2 engine, however it is currently rather limited.

Some examples of scripts can be found in your Soldat 2 game directory under the path Soldat2/Scripts/Standard/. Some unofficial examples are available at Scripting Examples.

See Category:Scripting for a list of all pages on this wiki related to scripting.

Using Scripts

A script can be applied to a match via Modifiers or via a Game Mode ("Rules").

In a modifier

Example of a modifier Modifiers/Custom/FlagIsPoison.json applying the Scripts/Custom/FlagIsPoison.cs script:

{
  "Objects": {
    "Rules": {
      "FlagIsPoison": {
        "FlagDamagePerSecond": 3.0
      }
    }   
  },
  "Meta": {
    "Description": "(applies the FlagIsPoison script)",
    "Author": "noerw",
    "Version": 1.0
  }
}

A script can be parametrized, where the parameters are defined in the modifier or rule definition. In the above example the FlagDamagePerSecond parameter is applied when the script class contains a JsonProperty with a default value:

[JsonProperty("FlagDamagePerSecond")] public float flagDPS = 5.0;


In a rule / game mode

To add a script to all matches of a gamemode, edit Rules/Custom/YourGameMode.json.

Add a script by adding its class name as a key to the game mode definition (on the same level as GameScript). Inside that object, you can define parameters the script potentially exposes via JSONProperty tags:

{
  ...
      "GameScript": { ... },
      "YourScriptName": {
        "ExampleParameter": true,
      }
  ...
}


An alternative way, is to add the class name of your script to the GameScript.Scripts array:

{
  ...
      "GameScript": {
        "Scripts": [
          ... potentially other scripts ...,
          "YourScriptName"
        ]
      }
  ...
}