diff --git a/media/clothing/clothingItems/Amputation_ForeArm_L.xml b/media/clothing/clothingItems/Amputation_ForeArm_L.xml
index 1ca5f59..9850855 100644
--- a/media/clothing/clothingItems/Amputation_ForeArm_L.xml
+++ b/media/clothing/clothingItems/Amputation_ForeArm_L.xml
@@ -25,6 +25,22 @@
Amputations\Human\Forearm\skin04_hairy_b
Amputations\Human\Forearm\skin05_hairy_b
+
+
+
+ Body\MaleBody01
+ Body\MaleBody02
+ Body\MaleBody03
+ Body\MaleBody04
+ Body\MaleBody05
+
+ Body\MaleBody01a
+ Body\MaleBody02a
+ Body\MaleBody03a
+ Body\MaleBody04
+ Body\MaleBody05a
+
+
Amputations\Zombie\Forearm\z_skin01_l1
Amputations\Zombie\Forearm\z_skin01_l2
diff --git a/media/clothing/clothingItems/Amputation_ForeArm_R.xml b/media/clothing/clothingItems/Amputation_ForeArm_R.xml
index 73bf6b1..e8e4f88 100644
--- a/media/clothing/clothingItems/Amputation_ForeArm_R.xml
+++ b/media/clothing/clothingItems/Amputation_ForeArm_R.xml
@@ -23,6 +23,22 @@
Amputations\Human\Forearm\skin04_hairy_b
Amputations\Human\Forearm\skin05_hairy_b
+
+
+
+ Body\MaleBody01
+ Body\MaleBody02
+ Body\MaleBody03
+ Body\MaleBody04
+ Body\MaleBody05
+
+ Body\MaleBody01a
+ Body\MaleBody02a
+ Body\MaleBody03a
+ Body\MaleBody04
+ Body\MaleBody05a
+
+
Amputations\Zombie\Forearm\z_skin01_l1
Amputations\Zombie\Forearm\z_skin01_l2
diff --git a/media/clothing/clothingItems/Amputation_UpperArm_L.xml b/media/clothing/clothingItems/Amputation_UpperArm_L.xml
index cc0a887..82a42ed 100644
--- a/media/clothing/clothingItems/Amputation_UpperArm_L.xml
+++ b/media/clothing/clothingItems/Amputation_UpperArm_L.xml
@@ -21,4 +21,36 @@
Amputations\Human\Upperarm\skin03_hairy_b
Amputations\Human\Upperarm\skin04_hairy_b
Amputations\Human\Upperarm\skin05_hairy_b
+
+
+
+ Body\MaleBody01
+ Body\MaleBody02
+ Body\MaleBody03
+ Body\MaleBody04
+ Body\MaleBody05
+
+ Body\MaleBody01a
+ Body\MaleBody02a
+ Body\MaleBody03a
+ Body\MaleBody04
+ Body\MaleBody05a
+
+
+ Amputations\Zombie\Upperarm\z_skin01_l1
+ Amputations\Zombie\Upperarm\z_skin01_l2
+ Amputations\Zombie\Upperarm\z_skin01_l3
+
+ Amputations\Zombie\Upperarm\z_skin02_l1
+ Amputations\Zombie\Upperarm\z_skin02_l2
+ Amputations\Zombie\Upperarm\z_skin02_l3
+
+ Amputations\Zombie\Upperarm\z_skin03_l1
+ Amputations\Zombie\Upperarm\z_skin03_l2
+ Amputations\Zombie\Upperarm\z_skin03_l3
+
+ Amputations\Zombie\Upperarm\z_skin04_l1
+ Amputations\Zombie\Upperarm\z_skin04_l2
+ Amputations\Zombie\Upperarm\z_skin04_l3
+
\ No newline at end of file
diff --git a/media/clothing/clothingItems/Amputation_UpperArm_R.xml b/media/clothing/clothingItems/Amputation_UpperArm_R.xml
index 107b664..4e85bc0 100644
--- a/media/clothing/clothingItems/Amputation_UpperArm_R.xml
+++ b/media/clothing/clothingItems/Amputation_UpperArm_R.xml
@@ -22,6 +22,21 @@
Amputations\Human\Upperarm1\skin04_hairy_b
Amputations\Human\Upperarm1\skin05_hairy_b
+
+
+ Body\MaleBody01
+ Body\MaleBody02
+ Body\MaleBody03
+ Body\MaleBody04
+ Body\MaleBody05
+
+ Body\MaleBody01a
+ Body\MaleBody02a
+ Body\MaleBody03a
+ Body\MaleBody04
+ Body\MaleBody05a
+
+
Amputations\Zombie\Upperarm\z_skin01_l1
Amputations\Zombie\Upperarm\z_skin01_l2
diff --git a/media/lua/client/TOC/Admin.lua b/media/lua/client/TOC/Admin.lua
index 825c60e..e85a4ea 100644
--- a/media/lua/client/TOC/Admin.lua
+++ b/media/lua/client/TOC/Admin.lua
@@ -1,4 +1,3 @@
-
local CommandsData = require("TOC/CommandsData")
-------------------
@@ -9,21 +8,18 @@ local function AddAdminTocOptions(playerNum, context, worldobjects)
if not isAdmin() then return end
local players = {}
- for _,v in ipairs(worldobjects) do
-
- for x=v:getSquare():getX()-1,v:getSquare():getX()+1 do
- for y=v:getSquare():getY()-1,v:getSquare():getY()+1 do
- local sq = getCell():getGridSquare(x,y,v:getSquare():getZ());
+ for _, v in ipairs(worldobjects) do
+ for x = v:getSquare():getX() - 1, v:getSquare():getX() + 1 do
+ for y = v:getSquare():getY() - 1, v:getSquare():getY() + 1 do
+ local sq = getCell():getGridSquare(x, y, v:getSquare():getZ());
if sq then
- for z=0,sq:getMovingObjects():size()-1 do
+ for z = 0, sq:getMovingObjects():size() - 1 do
local o = sq:getMovingObjects():get(z)
if instanceof(o, "IsoPlayer") then
-
---@cast o IsoPlayer
local oId = o:getOnlineID()
players[oId] = o
-
end
end
end
@@ -33,7 +29,6 @@ local function AddAdminTocOptions(playerNum, context, worldobjects)
for _, pl in pairs(players) do
-
---@cast pl IsoPlayer
local clickedPlayerNum = pl:getOnlineID()
@@ -43,10 +38,9 @@ local function AddAdminTocOptions(playerNum, context, worldobjects)
context:addSubMenu(option, subMenu)
subMenu:addOption(getText("ContextMenu_Admin_ResetTOC"), nil, function()
- sendClientCommand(CommandsData.modules.TOC_RELAY, CommandsData.server.Relay.RelayExecuteInitialization, {patientNum=clickedPlayerNum} )
+ sendClientCommand(CommandsData.modules.TOC_RELAY, CommandsData.server.Relay.RelayExecuteInitialization,
+ { patientNum = clickedPlayerNum })
end)
-
end
-
end
-Events.OnFillWorldObjectContextMenu.Add(AddAdminTocOptions)
\ No newline at end of file
+Events.OnFillWorldObjectContextMenu.Add(AddAdminTocOptions)
diff --git a/media/lua/client/TOC/Controllers/ItemsController.lua b/media/lua/client/TOC/Controllers/ItemsController.lua
index 847b648..60f2ff1 100644
--- a/media/lua/client/TOC/Controllers/ItemsController.lua
+++ b/media/lua/client/TOC/Controllers/ItemsController.lua
@@ -27,9 +27,11 @@ function ItemsController.Player.GetAmputationTexturesIndex(playerObj, isCicatriz
end
if isCicatrized then
- matchedIndex = matchedIndex + (isHairy and 5 or 10) -- We add 5 is it's the texture texture, else 10
+ matchedIndex = matchedIndex + (isHairy and 5 or 10) -- We add 5 is it's the texture, else 10
end
+ TOC_DEBUG.print("isCicatrized= " .. tostring(isCicatrized))
+ TOC_DEBUG.print("Amputation Texture Index: " .. tostring(matchedIndex))
return matchedIndex - 1
end
@@ -43,7 +45,7 @@ function ItemsController.Player.RemoveClothingItem(playerObj, clothingItem)
playerObj:removeWornItem(clothingItem)
---@diagnostic disable-next-line: param-type-mismatch
- playerObj:getInventory():Remove(clothingItem) -- Umbrella is wrong, can be an InventoryItem too
+ playerObj:getInventory():Remove(clothingItem) -- Umbrella is wrong, can be an InventoryItem too
TOC_DEBUG.print("found and deleted" .. tostring(clothingItem))
-- Reset model
@@ -75,13 +77,12 @@ end
---Deletes all the old amputation items, used for resets
---@param playerObj IsoPlayer
function ItemsController.Player.DeleteAllOldAmputationItems(playerObj)
-
-- This part is a workaround for a pretty shitty implementation on the java side. Check ProsthesisHandler for more infos
local group = BodyLocations.getGroup("Human")
group:setMultiItem("TOC_Arm", false)
group:setMultiItem("TOC_ArmProst", false)
- for i=1, #StaticData.LIMBS_STR do
+ for i = 1, #StaticData.LIMBS_STR do
local limbName = StaticData.LIMBS_STR[i]
local clothItemName = StaticData.AMPUTATION_CLOTHING_ITEM_BASE .. limbName
local clothItem = playerObj:getInventory():FindAndReturn(clothItemName)
@@ -93,7 +94,6 @@ function ItemsController.Player.DeleteAllOldAmputationItems(playerObj)
group:setMultiItem("TOC_Arm", true)
group:setMultiItem("TOC_ArmProst", true)
-
end
---Spawns and equips the correct amputation item to the player.
@@ -109,7 +109,31 @@ function ItemsController.Player.SpawnAmputationItem(playerObj, limbName)
playerObj:setWornItem(clothingItem:getBodyLocation(), clothingItem)
end
+---Search through worn items and modifies a specific amputation item
+---@param playerObj IsoPlayer
+---@param limbName string
+---@param isCicatrized boolean
+function ItemsController.Player.OverrideAmputationItemVisuals(playerObj, limbName, isCicatrized)
+ local wornItems = playerObj:getWornItems()
+ local fullType = StaticData.AMPUTATION_CLOTHING_ITEM_BASE .. limbName
+ for i = 1, wornItems:size() do
+ local it = wornItems:get(i - 1)
+ if it then
+ local wornItem = wornItems:get(i - 1):getItem()
+ TOC_DEBUG.print(wornItem:getFullType())
+ if wornItem:getFullType() == fullType then
+ TOC_DEBUG.print("Found amputation item for " .. limbName)
+
+ -- change it here
+ local texId = ItemsController.Player.GetAmputationTexturesIndex(playerObj, isCicatrized)
+ wornItem:getVisual():setTextureChoice(texId)
+ playerObj:resetModelNextFrame() -- necessary to update the model
+ return
+ end
+ end
+ end
+end
--* Zombie Methods *--
---@class ItemsController.Zombie
@@ -135,16 +159,16 @@ end
function ItemsController.Zombie.GetAmputationTexturesIndex(zombie)
local x = zombie:getHumanVisual():getSkinTexture()
- -- Starting ID for zombies = 10
+ -- Starting ID for zombies = 20
-- 3 levels
local matchedIndex = tonumber(x:match("ZedBody0(%d)")) - 1
matchedIndex = matchedIndex * 3
- local level = tonumber(x:match("%d$")) - 1 -- it's from 1 to 3, but we're using it like 0 indexed arrays
+ local level = tonumber(x:match("%d$")) - 1 -- it's from 1 to 3, but we're using it like 0 indexed arrays
- local finalId = 10 + matchedIndex + level
+ local finalId = 20 + matchedIndex + level
--print("Zombie texture index: " .. tostring(finalId))
return finalId
end
-return ItemsController
\ No newline at end of file
+return ItemsController
diff --git a/media/lua/client/TOC/Controllers/LocalPlayerController.lua b/media/lua/client/TOC/Controllers/LocalPlayerController.lua
index c0ae031..7ef118f 100644
--- a/media/lua/client/TOC/Controllers/LocalPlayerController.lua
+++ b/media/lua/client/TOC/Controllers/LocalPlayerController.lua
@@ -262,6 +262,9 @@ function LocalPlayerController.UpdateAmputations()
if cicTime <= 0 then
TOC_DEBUG.print(tostring(limbName) .. " is cicatrized")
dcInst:setIsCicatrized(limbName, true)
+ -- Set visual
+ local ItemsController = require("TOC/Controllers/ItemsController")
+ ItemsController.Player.OverrideAmputationItemVisuals(pl, limbName, true)
end
end
end
@@ -304,7 +307,6 @@ function LocalPlayerController.CanItemBeEquipped(itemObj, limbName)
return true
end
-
--- Drop all items from the affected limb
---@param limbName string
function LocalPlayerController.DropItemsAfterAmputation(limbName)