Scripting Introduction

From Soldat2 Wiki
Revision as of 11:47, 10 June 2023 by Nerf cardboard (talk | contribs) (move to Category:Modding)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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"
        ]
      }
  ...
}