Handling WoundCleaning
This commit is contained in:
@@ -1,3 +1,6 @@
|
|||||||
|
local StaticData = require("TOC/StaticData")
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
local CommonMethods = {}
|
local CommonMethods = {}
|
||||||
|
|
||||||
---@param val number
|
---@param val number
|
||||||
@@ -9,6 +12,11 @@ function CommonMethods.Normalize(val, min, max)
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function CommonMethods.GetLimbNameFromBodyPart(bodyPart)
|
||||||
|
local bodyPartTypeStr = BodyPartType.ToString(bodyPart:getType())
|
||||||
|
return StaticData.LIMBS_IND_STR[bodyPartTypeStr]
|
||||||
|
end
|
||||||
|
|
||||||
---Returns the side for a certain limb or prosthesis
|
---Returns the side for a certain limb or prosthesis
|
||||||
---@param name string
|
---@param name string
|
||||||
---@return string "L" or "R"
|
---@return string "L" or "R"
|
||||||
|
|||||||
@@ -62,8 +62,9 @@ function ModDataHandler:setup(key)
|
|||||||
|
|
||||||
---@type partData
|
---@type partData
|
||||||
local defaultParams = {
|
local defaultParams = {
|
||||||
isCut = false, isInfected = false, isOperated = false, isCicatrized = false,
|
isCut = false, isInfected = false, isOperated = false, isCicatrized = false, isCauterized = false,
|
||||||
isCauterized = false, isVisible = false
|
woundDirtyness = -1, cicatrizationTime = -1,
|
||||||
|
isVisible = false
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Initialize limbs
|
-- Initialize limbs
|
||||||
@@ -138,6 +139,14 @@ function ModDataHandler:setIsCauterized(limbName, isCauterized)
|
|||||||
self.tocData.limbs[limbName].isCauterized = isCauterized
|
self.tocData.limbs[limbName].isCauterized = isCauterized
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---Set woundDirtyness
|
||||||
|
---@param limbName string
|
||||||
|
---@param woundDirtyness number
|
||||||
|
function ModDataHandler:setWoundDirtyness(limbName, woundDirtyness)
|
||||||
|
self.tocData.limbs[limbName].woundDirtyness = woundDirtyness
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
---Set cicatrizationTime
|
---Set cicatrizationTime
|
||||||
---@param limbName string
|
---@param limbName string
|
||||||
---@param cicatrizationTime number
|
---@param cicatrizationTime number
|
||||||
@@ -206,6 +215,14 @@ function ModDataHandler:getIsCauterized(limbName)
|
|||||||
return self.tocData.limbs[limbName].isCauterized
|
return self.tocData.limbs[limbName].isCauterized
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---Get woundDirtyness
|
||||||
|
---@param limbName string
|
||||||
|
---@return number
|
||||||
|
function ModDataHandler:getWoundDirtyness(limbName)
|
||||||
|
return self.tocData.limbs[limbName].woundDirtyness
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
---Get cicatrizationTime
|
---Get cicatrizationTime
|
||||||
---@param limbName string
|
---@param limbName string
|
||||||
---@return number
|
---@return number
|
||||||
@@ -241,8 +258,10 @@ function ModDataHandler:setCutLimb(limbName, isOperated, isCicatrized, isCauteri
|
|||||||
cicatrizationTime = StaticData.LIMBS_CICATRIZATION_TIME_IND_NUM[limbName] - surgeonFactor
|
cicatrizationTime = StaticData.LIMBS_CICATRIZATION_TIME_IND_NUM[limbName] - surgeonFactor
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- TODO Set WoundDirtyness here! For now it's just 0
|
||||||
|
|
||||||
---@type partData
|
---@type partData
|
||||||
local params = {isCut = true, isInfected = false, isOperated = isOperated, isCicatrized = isCicatrized, isCauterized = isCauterized, isVisible = true}
|
local params = {isCut = true, isInfected = false, isOperated = isOperated, isCicatrized = isCicatrized, isCauterized = isCauterized, woundDirtyness = 0, isVisible = true}
|
||||||
self:setLimbParams(limbName, params, cicatrizationTime)
|
self:setLimbParams(limbName, params, cicatrizationTime)
|
||||||
|
|
||||||
for i=1, #StaticData.LIMBS_DEPENDENCIES_IND_STR[limbName] do
|
for i=1, #StaticData.LIMBS_DEPENDENCIES_IND_STR[limbName] do
|
||||||
@@ -271,6 +290,7 @@ function ModDataHandler:setLimbParams(limbName, ampStatus, cicatrizationTime)
|
|||||||
if ampStatus.isOperated ~= nil then limbData.isOperated = ampStatus.isOperated end
|
if ampStatus.isOperated ~= nil then limbData.isOperated = ampStatus.isOperated end
|
||||||
if ampStatus.isCicatrized ~= nil then limbData.isCicatrized = ampStatus.isCicatrized end
|
if ampStatus.isCicatrized ~= nil then limbData.isCicatrized = ampStatus.isCicatrized end
|
||||||
if ampStatus.isCauterized ~= nil then limbData.isCauterized = ampStatus.isCauterized end
|
if ampStatus.isCauterized ~= nil then limbData.isCauterized = ampStatus.isCauterized end
|
||||||
|
if ampStatus.woundDirtyness ~= nil then limbData.woundDirtyness = ampStatus.woundDirtyness end
|
||||||
if ampStatus.isVisible ~= nil then limbData.isVisible = ampStatus.isVisible end
|
if ampStatus.isVisible ~= nil then limbData.isVisible = ampStatus.isVisible end
|
||||||
|
|
||||||
if cicatrizationTime ~= nil then limbData.cicatrizationTime = cicatrizationTime end
|
if cicatrizationTime ~= nil then limbData.cicatrizationTime = cicatrizationTime end
|
||||||
|
|||||||
@@ -210,6 +210,8 @@ function PlayerHandler.UpdateCicatrization()
|
|||||||
end
|
end
|
||||||
|
|
||||||
local pl = PlayerHandler.playerObj
|
local pl = PlayerHandler.playerObj
|
||||||
|
local bd = pl:getBodyDamage()
|
||||||
|
local visual = pl:getHumanVisual()
|
||||||
local amputatedLimbs = CachedDataHandler.GetAmputatedLimbs(pl:getUsername())
|
local amputatedLimbs = CachedDataHandler.GetAmputatedLimbs(pl:getUsername())
|
||||||
local needsUpdate = false
|
local needsUpdate = false
|
||||||
|
|
||||||
@@ -222,6 +224,24 @@ function PlayerHandler.UpdateCicatrization()
|
|||||||
local cicTime = modDataHandler:getCicatrizationTime(limbName)
|
local cicTime = modDataHandler:getCicatrizationTime(limbName)
|
||||||
TOC_DEBUG.print("updating cicatrization for " .. tostring(limbName))
|
TOC_DEBUG.print("updating cicatrization for " .. tostring(limbName))
|
||||||
|
|
||||||
|
-- TODO Check if bandaged, sutured, whatever
|
||||||
|
|
||||||
|
-- TODO Clean
|
||||||
|
|
||||||
|
-- TODO Check dirtyness of zone and add to it
|
||||||
|
|
||||||
|
--local bptEnum = StaticData.BODYLOCS_IND_BPT[limbName]
|
||||||
|
|
||||||
|
-- TODO Workaround
|
||||||
|
local bbptEnum = BloodBodyPartType[limbName]
|
||||||
|
--local bodyPart = bd:getBodyPart(bptEnum)
|
||||||
|
|
||||||
|
local dirtyness = visual:getDirt(bbptEnum) + visual:getBlood(bbptEnum) + modDataHandler:getWoundDirtyness(limbName)
|
||||||
|
modDataHandler:setWoundDirtyness(limbName, dirtyness)
|
||||||
|
|
||||||
|
TOC_DEBUG.print("dirtyness for this zone: " .. tostring(dirtyness))
|
||||||
|
|
||||||
|
|
||||||
cicTime = cicTime - SandboxVars.TOC.CicatrizationSpeed
|
cicTime = cicTime - SandboxVars.TOC.CicatrizationSpeed
|
||||||
modDataHandler:setCicatrizationTime(limbName, cicTime)
|
modDataHandler:setCicatrizationTime(limbName, cicTime)
|
||||||
TOC_DEBUG.print("new cicatrization time: " .. tostring(cicTime))
|
TOC_DEBUG.print("new cicatrization time: " .. tostring(cicTime))
|
||||||
|
|||||||
102
media/lua/client/TOC/TimedActions/CleanWoundAction.lua
Normal file
102
media/lua/client/TOC/TimedActions/CleanWoundAction.lua
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
local ModDataHandler = require("TOC/Handlers/ModDataHandler")
|
||||||
|
local CommonMethods = require("TOC/CommonMethods")
|
||||||
|
----
|
||||||
|
|
||||||
|
---@class CleanWoundAction : ISBaseTimedAction
|
||||||
|
local CleanWoundAction = ISBaseTimedAction:derive("CleanWoundAction")
|
||||||
|
|
||||||
|
function CleanWoundAction:isValid()
|
||||||
|
if ISHealthPanel.DidPatientMove(self.character, self.otherPlayer, self.bandagedPlayerX, self.bandagedPlayerY) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
function CleanWoundAction:waitToStart()
|
||||||
|
if self.character == self.otherPlayer then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
self.character:faceThisObject(self.otherPlayer)
|
||||||
|
return self.character:shouldBeTurning()
|
||||||
|
end
|
||||||
|
|
||||||
|
function CleanWoundAction:update()
|
||||||
|
if self.character ~= self.otherPlayer then
|
||||||
|
self.character:faceThisObject(self.otherPlayer)
|
||||||
|
end
|
||||||
|
local jobType = getText("ContextMenu_CleanWound")
|
||||||
|
ISHealthPanel.setBodyPartActionForPlayer(self.otherPlayer, self.bodyPart, self, jobType, { cleanBurn = true })
|
||||||
|
self.character:setMetabolicTarget(Metabolics.LightDomestic)
|
||||||
|
end
|
||||||
|
|
||||||
|
function CleanWoundAction:start()
|
||||||
|
if self.character == self.otherPlayer then
|
||||||
|
self:setActionAnim(CharacterActionAnims.Bandage)
|
||||||
|
self:setAnimVariable("BandageType", ISHealthPanel.getBandageType(self.bodyPart))
|
||||||
|
self.character:reportEvent("EventBandage")
|
||||||
|
else
|
||||||
|
self:setActionAnim("Loot")
|
||||||
|
self.character:SetVariable("LootPosition", "Mid")
|
||||||
|
self.character:reportEvent("EventLootItem")
|
||||||
|
end
|
||||||
|
self:setOverrideHandModels(nil, nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
function CleanWoundAction:stop()
|
||||||
|
ISHealthPanel.setBodyPartActionForPlayer(self.otherPlayer, self.bodyPart, nil, nil, nil)
|
||||||
|
ISBaseTimedAction.stop(self)
|
||||||
|
end
|
||||||
|
|
||||||
|
function CleanWoundAction:perform()
|
||||||
|
-- needed to remove from queue / start next.
|
||||||
|
ISBaseTimedAction.perform(self)
|
||||||
|
|
||||||
|
if self.character:HasTrait("Hemophobic") then
|
||||||
|
self.character:getStats():setPanic(self.character:getStats():getPanic() + 50)
|
||||||
|
end
|
||||||
|
|
||||||
|
self.character:getXp():AddXP(Perks.Doctor, 10)
|
||||||
|
local addPain = (60 - (self.doctorLevel * 1))
|
||||||
|
self.bodyPart:setAdditionalPain(self.bodyPart:getAdditionalPain() + addPain)
|
||||||
|
--self.bodyPart:setNeedBurnWash(false)
|
||||||
|
self.bandage:Use()
|
||||||
|
|
||||||
|
if isClient() then
|
||||||
|
local limbName = CommonMethods.GetLimbNameFromBodyPart(self.bodyPart)
|
||||||
|
|
||||||
|
-- TODO CHeck if correct in MP
|
||||||
|
local modDataHandler = ModDataHandler.GetInstance(self.character:getUsername())
|
||||||
|
|
||||||
|
modDataHandler:setWoundDirtyness(limbName, 0)
|
||||||
|
--sendCleanBurn(self.character, self.otherPlayer, self.bodyPart, self.bandage)
|
||||||
|
end
|
||||||
|
|
||||||
|
ISHealthPanel.setBodyPartActionForPlayer(self.otherPlayer, self.bodyPart, nil, nil, nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
---@return CleanWoundAction
|
||||||
|
function CleanWoundAction:new(doctor, otherPlayer, bandage, bodyPart)
|
||||||
|
local o = {}
|
||||||
|
setmetatable(o, self)
|
||||||
|
self.__index = self
|
||||||
|
o.character = doctor
|
||||||
|
o.otherPlayer = otherPlayer
|
||||||
|
o.doctorLevel = doctor:getPerkLevel(Perks.Doctor)
|
||||||
|
o.bodyPart = bodyPart
|
||||||
|
o.bandage = bandage
|
||||||
|
o.stopOnWalk = true
|
||||||
|
o.stopOnRun = true
|
||||||
|
o.bandagedPlayerX = otherPlayer:getX()
|
||||||
|
o.bandagedPlayerY = otherPlayer:getY()
|
||||||
|
o.maxTime = 250 - (o.doctorLevel * 6)
|
||||||
|
if doctor:isTimedActionInstant() then
|
||||||
|
o.maxTime = 1
|
||||||
|
end
|
||||||
|
if doctor:getAccessLevel() ~= "None" then
|
||||||
|
o.doctorLevel = 10
|
||||||
|
end
|
||||||
|
return o
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
return CleanWoundAction
|
||||||
@@ -2,6 +2,7 @@ local StaticData = require("TOC/StaticData")
|
|||||||
local ModDataHandler = require("TOC/Handlers/ModDataHandler")
|
local ModDataHandler = require("TOC/Handlers/ModDataHandler")
|
||||||
local CachedDataHandler = require("TOC/Handlers/CachedDataHandler")
|
local CachedDataHandler = require("TOC/Handlers/CachedDataHandler")
|
||||||
local CutLimbHandler = require("TOC/UI/CutLimbInteractions")
|
local CutLimbHandler = require("TOC/UI/CutLimbInteractions")
|
||||||
|
local WoundCleaningHandler = require("TOC/UI/WoundCleaningInteraction")
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
-- We're overriding ISHealthPanel to add custom textures to the body panel.
|
-- We're overriding ISHealthPanel to add custom textures to the body panel.
|
||||||
@@ -36,11 +37,14 @@ function ISHealthPanel:doBodyPartContextMenu(bodyPart, x, y)
|
|||||||
|
|
||||||
-- To not recreate it but reuse the one that has been created in the original method
|
-- To not recreate it but reuse the one that has been created in the original method
|
||||||
local context = getPlayerContextMenu(playerNum)
|
local context = getPlayerContextMenu(playerNum)
|
||||||
|
|
||||||
local cutLimbHandler = CutLimbHandler:new(self, bodyPart)
|
local cutLimbHandler = CutLimbHandler:new(self, bodyPart)
|
||||||
|
|
||||||
self:checkItems({cutLimbHandler})
|
self:checkItems({cutLimbHandler})
|
||||||
|
|
||||||
cutLimbHandler:addToMenu(context)
|
cutLimbHandler:addToMenu(context)
|
||||||
|
|
||||||
|
local woundCleaningHandler = WoundCleaningHandler:new(self, bodyPart, self.character:getUsername())
|
||||||
|
self:checkItems({woundCleaningHandler})
|
||||||
|
woundCleaningHandler:addToMenu(context)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@@ -183,14 +187,12 @@ function ISHealthBodyPartListBox:doDrawItem(y, item, alt)
|
|||||||
if limbName then
|
if limbName then
|
||||||
local modDataHandler = ModDataHandler.GetInstance(username)
|
local modDataHandler = ModDataHandler.GetInstance(username)
|
||||||
if modDataHandler:getIsCut(limbName) and modDataHandler:getIsVisible(limbName) then
|
if modDataHandler:getIsCut(limbName) and modDataHandler:getIsVisible(limbName) then
|
||||||
|
|
||||||
if modDataHandler:getIsCicatrized(limbName) then
|
if modDataHandler:getIsCicatrized(limbName) then
|
||||||
if modDataHandler:getIsCauterized(limbName) then
|
if modDataHandler:getIsCauterized(limbName) then
|
||||||
self:drawText("- " .. getText("IGUI_HealthPanel_Cauterized"), x, y, 0.58, 0.75, 0.28, 1, UIFont.Small)
|
self:drawText("- " .. getText("IGUI_HealthPanel_Cauterized"), x, y, 0.58, 0.75, 0.28, 1, UIFont.Small)
|
||||||
else
|
else
|
||||||
self:drawText("- " .. getText("IGUI_HealthPanel_Cicatrized"), x, y, 0.28, 0.89, 0.28, 1, UIFont.Small)
|
self:drawText("- " .. getText("IGUI_HealthPanel_Cicatrized"), x, y, 0.28, 0.89, 0.28, 1, UIFont.Small)
|
||||||
end
|
end
|
||||||
|
|
||||||
else
|
else
|
||||||
local cicaTime = modDataHandler:getCicatrizationTime(limbName)
|
local cicaTime = modDataHandler:getCicatrizationTime(limbName)
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
local CachedDataHandler = require("TOC/Handlers/CachedDataHandler")
|
local CachedDataHandler = require("TOC/Handlers/CachedDataHandler")
|
||||||
local StaticData = require("TOC/StaticData")
|
|
||||||
local ModDataHandler = require("TOC/Handlers/ModDataHandler")
|
local ModDataHandler = require("TOC/Handlers/ModDataHandler")
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- TODO Surgery Kits
|
-- TODO Surgery Kits
|
||||||
|
|
||||||
local function AddInventorySurgeryMenu(playerNum, context, items)
|
local function AddInventorySurgeryMenu(playerNum, context, items)
|
||||||
|
|||||||
80
media/lua/client/TOC/UI/WoundCleaningInteraction.lua
Normal file
80
media/lua/client/TOC/UI/WoundCleaningInteraction.lua
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
|
||||||
|
local BaseHandler = require("TOC/UI/HealthPanelBaseHandler")
|
||||||
|
local CommonMethods = require("TOC/CommonMethods")
|
||||||
|
local ModDataHandler = require("TOC/Handlers/ModDataHandler")
|
||||||
|
|
||||||
|
local CleanWoundAction = require("TOC/TimedActions/CleanWoundAction")
|
||||||
|
-------------------------
|
||||||
|
---@class WoundCleaningHandler : BaseHandler
|
||||||
|
---@field username string
|
||||||
|
---@field limbName string
|
||||||
|
local WoundCleaningHandler = BaseHandler:derive("WoundCleaningHandler")
|
||||||
|
|
||||||
|
---comment
|
||||||
|
---@param panel any
|
||||||
|
---@param bodyPart any
|
||||||
|
---@param username string
|
||||||
|
---@return table
|
||||||
|
function WoundCleaningHandler:new(panel, bodyPart, username)
|
||||||
|
local o = BaseHandler.new(self, panel, bodyPart)
|
||||||
|
o.items.ITEMS = {}
|
||||||
|
o.username = username
|
||||||
|
|
||||||
|
o.limbName = CommonMethods.GetLimbNameFromBodyPart(bodyPart)
|
||||||
|
|
||||||
|
|
||||||
|
return o
|
||||||
|
end
|
||||||
|
|
||||||
|
function WoundCleaningHandler:checkItem(item)
|
||||||
|
if item:getBandagePower() >= 2 then
|
||||||
|
self:addItem(self.items.ITEMS, item)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function WoundCleaningHandler:addToMenu(context)
|
||||||
|
local types = self:getAllItemTypes(self.items.ITEMS)
|
||||||
|
if #types > 0 and self:isValid() then
|
||||||
|
local option = context:addOption("Clean Wound", nil)
|
||||||
|
local subMenu = context:getNew(context)
|
||||||
|
context:addSubMenu(option, subMenu)
|
||||||
|
for i=1,#types do
|
||||||
|
local item = self:getItemOfType(self.items.ITEMS, types[i])
|
||||||
|
subMenu:addOption(item:getName(), self, self.onMenuOptionSelected, item:getFullType())
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function WoundCleaningHandler:dropItems(items)
|
||||||
|
local types = self:getAllItemTypes(items)
|
||||||
|
if #self.items.ITEMS > 0 and #types == 1 and self:isInjured() and self.bodyPart:isNeedBurnWash() then
|
||||||
|
-- FIXME: A bandage can be used to clean a burn or bandage it
|
||||||
|
self:onMenuOptionSelected(types[1])
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
function WoundCleaningHandler:isValid()
|
||||||
|
-- TODO Check if cut and not cicatrized and dirty
|
||||||
|
|
||||||
|
-- todo get username
|
||||||
|
if self.limbName == nil then return false end
|
||||||
|
|
||||||
|
local modDataHandler = ModDataHandler.GetInstance(self.username)
|
||||||
|
|
||||||
|
--and modDataHandler:getWoundDirtyness(self.limbName) > 0.1
|
||||||
|
|
||||||
|
return modDataHandler:getIsCut(self.limbName) and not modDataHandler:getIsCicatrized(self.limbName)
|
||||||
|
--return self:getItemOfType(self.items.ITEMS, itemType)
|
||||||
|
end
|
||||||
|
|
||||||
|
function WoundCleaningHandler:perform(previousAction, itemType)
|
||||||
|
local item = self:getItemOfType(self.items.ITEMS, itemType)
|
||||||
|
previousAction = self:toPlayerInventory(item, previousAction)
|
||||||
|
local action = CleanWoundAction :new(self:getDoctor(), self:getPatient(), item, self.bodyPart)
|
||||||
|
ISTimedActionQueue.addAfter(previousAction, action)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
return WoundCleaningHandler
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
---@alias partData { isCut : boolean?, isInfected : boolean?, isOperated : boolean?, isCicatrized : boolean?, isCauterized : boolean?, isVisible : boolean?, cicatrizationTime : number }
|
---@alias partData { isCut : boolean?, isInfected : boolean?, isOperated : boolean?, isCicatrized : boolean?, isCauterized : boolean?, isVisible : boolean?, woundDirtyness : number, cicatrizationTime : number }
|
||||||
---@alias limbsTable {Hand_L : partData, ForeArm_L : partData, UpperArm_L : partData, Hand_R : partData, ForeArm_R : partData, UpperArm_R : partData }
|
---@alias limbsTable {Hand_L : partData, ForeArm_L : partData, UpperArm_L : partData, Hand_R : partData, ForeArm_R : partData, UpperArm_R : partData }
|
||||||
---@alias prosthesisData {isProstEquipped : boolean, prostFactor : number }
|
---@alias prosthesisData {isProstEquipped : boolean, prostFactor : number }
|
||||||
---@alias prosthesesTable {Top_L : prosthesisData, Top_R : prosthesisData } -- TODO add Bottom_L and Bottom_R
|
---@alias prosthesesTable {Top_L : prosthesisData, Top_R : prosthesisData } -- TODO add Bottom_L and Bottom_R
|
||||||
|
|||||||
@@ -18,5 +18,7 @@ ContextMenu_EN = {
|
|||||||
ContextMenu_InstallProstRight = "Install prosthesis on right arm",
|
ContextMenu_InstallProstRight = "Install prosthesis on right arm",
|
||||||
ContextMenu_InstallProstLeft = "Install prosthesis on left arm",
|
ContextMenu_InstallProstLeft = "Install prosthesis on left arm",
|
||||||
|
|
||||||
|
ContextMenu_CleanWound = "Clean Wound",
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user