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)