Skip to content

Lua commands to create/move/remove objects; consistent handling of disabled objects (#6726, #6893)

Petr Mikheev requested to merge ptmikheev/openmw:lua_create into master

New commands

Only in global scripts

  • obj = world.createObject(recordId, count) - creates a new disabled object

  • obj:remove()

  • obj:remove(count)

  • obj:moveInto(inventoryOrContainer)

  • obj2 = obj:split(count)

  • obj.enabled = true/false

  • Also obj:teleport(cellName, pos) now can be used to move objects from container/inventory to the world. Teleporting a disabled object enables it.

In any scripts

  • if obj.enabled then ...

  • inventory:find(recordId) - find first item with this recordId, returns nil if not found (use for stackable items)

  • inventory:findAll(recordId) - return list of all items with this recordId (use for non-stackable items)

  • A reminder: there is already existing command inventory:getAll(type) -> list, for example inventory:getAll(types.Armor).

Examples

All examples work only in global scripts

-- send 50 gold from player to a guard
local playerInventory = types.Actor.inventory(player)
local guardInventory = types.Actor.inventory(guard)
playerInventory:find('gold_001'):split(50):moveInto(guardInventory)
-- crafting
local playerInventory = types.Actor.inventory(player)
local ingr1 = playerInventory:find('some_ingredient_01')
local ingr2 = playerInventory:find('some_ingredient_02')
if ingr1 and ingr2 then
    ingr1:remove(1)
    ingr2:remove(1)
    world.createObject('iron dagger'):moveInto(playerInventory)
end
-- disable all statics (e.g. for debugging purposes)
for _, obj in ipairs(player.cell:getAll(types.Static))
    obj.enabled = false
end
-- "drop money" curse
local playerInventory = types.Actor.inventory(player)
time.runRepeatedly(
    function()
        local gold = playerInventory:find('gold_001')
        if gold then
            gold:split(1):teleport(player.cell.name, player.position)
        end
    end, 5 * time.second)
Edited by Petr Mikheev

Merge request reports