📗Scripting API

Explaining how to create and run a custom mod

Summary

This page explains what is what

Helpers

  • Helpers make it easy, some listed below

Game

  • Where can we use it, difference to redscript thing

GetPlayer

  • What is it in reds, dont store it etc.

IsDefined

  • Description

From/ToVariant

Classes

  • TODO: What names to use

Creating Instances

  • .new, as constructor

Member Functions

These functions are called on Handles. You do not call them on a class, but rather on an instance of a class (not NPCPuppet:isTargetingPlayer(), but npcHandle:isTargetingPlayer())

Static Functions

They do not need a handle and are all located in a class, e.g. the Game object:

Game.PrintHealth()
-- or
Game.AddToInventory("Items.money", 500)

Enums

  • How to use, nativeDB link, enumInt

CName

  • Function to add CNames, string to cname

Observe and Override

Blackboard System

Blackboard is a kind of shared data storage and a framework to access/notify/listen to the data in the storage. Similar to a real blackboard, game objects put their data on the board that then other objects can observe, react to or update the data. E.g. various game state values.

Handle functions

They require a handle (more on that later). Assuming you have a player handle:

print(player:IsNaked())
print(player:IsMoving())
player:OnDied()

Handles

Handles are a way to pass an object to the function. For example IsNaked makes no sense without telling the engine for which object we want to know this information.

Singleton

These handles are static, there is only one in the game, for example the gameTimeSystem is a singleton so there is no need to tell the script engine which one you want. That being said you need a singleton handle so it knows you want to call a function on that system.

Sample:

gameTime = GetSingleton("gameTimeSystem")
print(gameTime:GetGameTime())
gameTime:SetGameTimeByHMS(12,0,0) -- 12h0m0s

Regular handles

These handles are not unique, for example, the game contains multiple NPCs so there are as many handles as NPCs. Currently as far as I know we can only get the handle of the player by calling the global function Game.GetPlayer().

Sample:

player = Game.GetPlayer()
if player:IsNaked() then
    player:OnDied() -- kill the player if it's naked
end
player = Game.GetPlayer()
ts = Game.GetTransactionSystem()

tid = TweakDBID.new("Items.money")
itemid = ItemID.new(tid)

result = ts:GiveItem(player, itemid, 100000)
if result then
    print("We added " .. tostring(itemid) .. " to the inventory!")
else
    print("Failed to add " .. tostring(itemid))
end

Helpers

If you need to dump the content of a type, you can use the Dump function like the following:

player = Game.GetPlayer()
dmp = Dump(player, false)
print(dmp)

You can also call DumpType for a static type you want to know about but don't have an instance of:

type = DumpType("gameItemID", false)
print(type)

Last updated