mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-30 21:56:39 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			50 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			50 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,
 | |
|     },
 | |
| }
 |