openmw/files/data/scripts/omw/mechanics/globalcontroller.lua
2025-07-30 20:21:15 +00:00

51 lines
1.6 KiB
Lua

local types = require('openmw.types')
local Lockable = types.Lockable
local Item = require('openmw.types').Item
local world = require('openmw.world')
local core = require('openmw.core')
local function onConsumeItem(data)
local item = data.item
local amount = data.amount
if amount > item.count then
print('Warning: tried to consume '..tostring(amount)..' '..tostring(item)..'s, but there were only '..tostring(item.count))
amount = item.count
end
item:remove(amount)
end
local function onPlaySound3d(data)
if data.sound then
core.sound.playSound3d(data.sound, data.position, data.options)
elseif data.file then
core.sound.playSoundFile3d(data.file, data.position, data.options)
end
end
local function onModifyItemCondition(data)
local itemData = Item.itemData(data.item)
itemData.condition = math.min(data.item.type.record(data.item).health, math.max(0, itemData.condition + data.amount))
-- Force unequip broken items
if data.actor and itemData.condition <= 0 then
data.actor:sendEvent('Unequip', {item = data.item})
end
end
return {
eventHandlers = {
SpawnVfx = function(data)
world.vfx.spawn(data.model, data.position, data.options)
end,
PlaySound3d = onPlaySound3d,
ConsumeItem = onConsumeItem,
Lock = function(data)
Lockable.lock(data.target, data.magnitude)
end,
Unlock = function(data)
Lockable.unlock(data.target)
end,
ModifyItemCondition = onModifyItemCondition,
},
}