81 lines
2.6 KiB
Lua
81 lines
2.6 KiB
Lua
local CachedDataHandler = require("TOC/Handlers/CachedDataHandler")
|
|
local StaticData = require("TOC/StaticData")
|
|
local ModDataHandler = require("TOC/Handlers/ModDataHandler")
|
|
---------------
|
|
|
|
-- TODO Surgery Kits
|
|
|
|
local function AddInventorySurgeryMenu(playerNum, context, items)
|
|
|
|
end
|
|
|
|
Events.OnFillInventoryObjectContextMenu.Add(AddInventorySurgeryMenu)
|
|
|
|
|
|
-- TODO Oven
|
|
|
|
-- TODO We need a class to handle operations, this is just a placeholder
|
|
local function Cauterize(limbName)
|
|
local modDataHandler = ModDataHandler.GetInstance()
|
|
modDataHandler:setCicatrizationTime(limbName, 0)
|
|
modDataHandler:setIsCicatrized(limbName, true)
|
|
modDataHandler:setIsCauterized(limbName, true)
|
|
|
|
-- we don't care bout the depended limbs, since they're alread "cicatrized"
|
|
|
|
modDataHandler:apply()
|
|
end
|
|
|
|
---@param playerNum number
|
|
---@param context ISContextMenu
|
|
---@param worldObjects any
|
|
---@param test any
|
|
local function AddOvenContextMenu(playerNum, context, worldObjects, test)
|
|
if test then return true end
|
|
|
|
local pl = getSpecificPlayer(playerNum)
|
|
|
|
local modDataHandler = ModDataHandler.GetInstance()
|
|
if not modDataHandler:getIsAnyLimbCut() then return end
|
|
local amputatedLimbs = CachedDataHandler.GetAmputatedLimbs(pl:getUsername())
|
|
|
|
local stoveObj = nil
|
|
for _, obj in pairs(worldObjects) do
|
|
if instanceof(obj, "IsoStove") then
|
|
stoveObj = obj
|
|
break
|
|
end
|
|
end
|
|
if stoveObj == nil then return end
|
|
if pl:HasTrait("Brave") or pl:getPerkLevel(Perks.Strength) > 5 then
|
|
local isTempLow = stoveObj:getCurrentTemperature() < 250
|
|
local tempTooltip = ISToolTip:new()
|
|
tempTooltip:initialise()
|
|
tempTooltip:setName("ContextMenu_Cauterize_TempTooLow_tooltip")
|
|
tempTooltip.description = getText("Tooltip_Surgery_TempTooLow")
|
|
tempTooltip:setVisible(false)
|
|
|
|
local optionMain = context:addOption(getText("ContextMenu_Cauterize"), nil)
|
|
local subMenu = context:getNew(context)
|
|
context:addSubMenu(optionMain, subMenu)
|
|
for k, _ in pairs(amputatedLimbs) do
|
|
|
|
-- We need to let the player cauterize ONLY the visible one!
|
|
local limbName = k
|
|
if modDataHandler:getIsVisible(limbName) then
|
|
local option = subMenu:addOption(getText("ContextMenu_Limb_" .. limbName), limbName, Cauterize)
|
|
option.notAvailable = isTempLow
|
|
if isTempLow then
|
|
option.toolTip = tempTooltip
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
Events.OnFillWorldObjectContextMenu.Add(AddOvenContextMenu)
|
|
|
|
|
|
-- TODO Other stuff? |