MDE ScriptHook: Script Table
Every Script has its own Script Table. It returns a Lua table that can be used for two things:
- Storing variables for the Script
- Callback / Event Handlers
- Access config options
Using the Event Handlers is also the only way to properly unregister event listeners from the Game's event system. We strongly recommend not using global variables or functions in Scripts, since these won't be properly garbage collected and could cause conflicts with other Scripts.
Contents
ScriptHook.CurrentScript() in Action
This example illustrates how you can avoid using global variables & functions and how the ScriptHook.CurrentScript() function can be used instead. Syntax:
ScriptHook.CurrentScript()
main.lua
local script = ScriptHook.CurrentScript()
script.my_variable = 1234
function script:PrintMyVariable()
print(self.my_variable)
end
include("test.lua")
test.lua
-- Prints 1234 twice
print(ScriptHook.CurrentScript().my_variable)
print(ScriptHook.CurrentScript():PrintMyVariable())
Config Options
With ScriptHook version 1.2, it is possible to save config options into a JSON file. The options are stored persistently, which means that they are still available even after a reboot. The supported Lua types are:
- Numbers
- Booleans
- Strings
Usage:
local script = ScriptHook.CurrentScript()
script:SetConfigOption("key", 123)
print(script:GetConfigOption("key")) -- 123
-- Other types
script:SetConfigOption("test-str", "test")
script:SetConfigOption("test-num", 123124)
script:SetConfigOption("test-bool", false)
The example above generates a user-config.json in the scripts directory with the following contents:
{
"key": 123.0,
"test-bool": false,
"test-num": 123124.0,
"test-str": "test"
}
Event Handlers
Check out this guide about Event Handling.