Added NormalArm

This commit is contained in:
ZioPao
2023-11-16 01:02:23 +01:00
parent f7bd45420b
commit 26f7867320
25 changed files with 194 additions and 96 deletions

View File

@@ -1,10 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<clothingItem>
<m_MaleModel>Prost_Left_LowerArm_Base_Hook_Male</m_MaleModel>
<m_FemaleModel>Prost_Left_LowerArm_Base_Hook_Female</m_FemaleModel>
<m_GUID>129ee688-d4bb-4297-8eb2-f88974001217</m_GUID>
<m_Static>false</m_Static>
<m_AllowRandomTint>false</m_AllowRandomTint>
<textureChoices>Prosthesis\metal_hook_male</textureChoices>
<textureChoices>Prosthesis\metal_hook_female</textureChoices>
</clothingItem>

View File

@@ -0,0 +1,10 @@
<?xml version='1.0' encoding='UTF-8'?>
<clothingItem>
<m_MaleModel>Prosthesis\normalArm_L_M</m_MaleModel>
<m_FemaleModel>Prosthesis\normalArm_L_F</m_FemaleModel>
<m_GUID>689318c7-5045-4876-a7e1-360de4aedf89</m_GUID>
<m_Static>false</m_Static>
<m_AllowRandomTint>false</m_AllowRandomTint>
<textureChoices>Prosthesis\hookArmTest</textureChoices>
</clothingItem>

View File

@@ -0,0 +1,10 @@
<?xml version='1.0' encoding='UTF-8'?>
<clothingItem>
<m_MaleModel>Prosthesis\normalArm_R_M</m_MaleModel>
<m_FemaleModel>Prosthesis\normalArm_R_F</m_FemaleModel>
<m_GUID>0e24eb76-4745-46af-9147-ba21e0ebbb2e</m_GUID>
<m_Static>false</m_Static>
<m_AllowRandomTint>false</m_AllowRandomTint>
<textureChoices>Prosthesis\hookArmTest</textureChoices>
</clothingItem>

View File

@@ -1,10 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<clothingItem>
<m_MaleModel>Prost_Right_LowerArm_Base_Hook_Male</m_MaleModel>
<m_FemaleModel>Prost_Right_LowerArm_Base_Hook_Female</m_FemaleModel>
<m_GUID>1eb56768-d7ef-46e4-ac07-91d0e43d15fb</m_GUID>
<m_Static>false</m_Static>
<m_AllowRandomTint>false</m_AllowRandomTint>
<textureChoices>Prosthesis\metal_hook_male</textureChoices>
<textureChoices>Prosthesis\metal_hook_female</textureChoices>
</clothingItem>

View File

@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<clothingItem>
<m_MaleModel>Surgery\Tourniquet_Left</m_MaleModel>
<m_FemaleModel>Surgery\Tourniquet_Left</m_FemaleModel>
<m_GUID>afbab35d-8bd4-4d61-87c7-054651ead1bd</m_GUID>
<m_Static>false</m_Static>
<m_AllowRandomHue>false</m_AllowRandomHue>
<m_AllowRandomTint>false</m_AllowRandomTint>
<textureChoices>Surgery\tourniquet</textureChoices>
</clothingItem>

View File

@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<clothingItem>
<m_MaleModel>Surgery\Tourniquet_Right</m_MaleModel>
<m_FemaleModel>Surgery\Tourniquet_Right</m_FemaleModel>
<m_GUID>9a5fe063-63c7-4e6f-81ca-ee77c6678e0d</m_GUID>
<m_Static>false</m_Static>
<m_AllowRandomHue>false</m_AllowRandomHue>
<m_AllowRandomTint>false</m_AllowRandomTint>
<textureChoices>Surgery\tourniquet</textureChoices>
</clothingItem>

View File

@@ -28,12 +28,20 @@
<files> <files>
<path>media/clothing/clothingItems/Prost_Hook_L.xml</path> <path>media/clothing/clothingItems/Prost_HookArm_L.xml</path>
<guid>05338f5e-e984-49c2-be79-81af9ae8e818</guid> <guid>05338f5e-e984-49c2-be79-81af9ae8e818</guid>
</files> </files>
<files> <files>
<path>media/clothing/clothingItems/Prost_Hook_R.xml</path> <path>media/clothing/clothingItems/Prost_HookArm_R.xml</path>
<guid>8ee7e1bc-2c21-428e-a15d-760d98df973d</guid> <guid>8ee7e1bc-2c21-428e-a15d-760d98df973d</guid>
</files> </files>
<files>
<path>media/clothing/clothingItems/Prost_NormalArm_L.xml</path>
<guid>689318c7-5045-4876-a7e1-360de4aedf89</guid>
</files>
<files>
<path>media/clothing/clothingItems/Prost_NormalArm_R.xml</path>
<guid>0e24eb76-4745-46af-9147-ba21e0ebbb2e</guid>
</files>
</fileGuidTable> </fileGuidTable>

View File

@@ -125,7 +125,7 @@ function ItemsHandler.Zombie.SpawnAmputationItem(zombie)
-- TODO Check body location of item and deletes potential amputation to apply -- TODO Check body location of item and deletes potential amputation to apply
local clothingName = itemVisual:getClothingItemName() local clothingName = itemVisual:getClothingItemName()
print(clothingName) --print(clothingName)
if clothingName and luautils.stringStarts(clothingName, StaticData.AMPUTATION_CLOTHING_ITEM_BASE) then if clothingName and luautils.stringStarts(clothingName, StaticData.AMPUTATION_CLOTHING_ITEM_BASE) then
TOC_DEBUG.print("added " .. clothingName .. " to ignoredLimbs") TOC_DEBUG.print("added " .. clothingName .. " to ignoredLimbs")

View File

@@ -58,8 +58,14 @@ end
---Check if the player has an infected (as in, zombie infection) body part ---Check if the player has an infected (as in, zombie infection) body part
---@param character IsoGameCharacter ---@param character IsoGameCharacter
function PlayerHandler.CheckInfection(character) ---@param damageType string
-- This fucking event barely works. Bleeding seems to be the only thing that triggers it ---@param damageAmount number
function PlayerHandler.CheckInfection(character, damageType, damageAmount)
-- TODO This fucking event barely works. Bleeding seems to be the only thing that triggers it. use this to trigger something else and then do not let it keep going
-- TOC_DEBUG.print("Player got hit!")
-- TOC_DEBUG.print(damageType)
if character ~= getPlayer() then return end if character ~= getPlayer() then return end
local bd = character:getBodyDamage() local bd = character:getBodyDamage()
local modDataHandler = ModDataHandler.GetInstance() local modDataHandler = ModDataHandler.GetInstance()
@@ -171,34 +177,30 @@ function ISEquipWeaponAction:isValid()
-- TODO Cache this! -- TODO Cache this!
local isPrimaryHandValid = not modDataHandler:getIsCut(primaryHand) or modDataHandler:getIsProstEquipped(prostTopR) local isPrimaryHandValid = not modDataHandler:getIsCut(primaryHand) or modDataHandler:getIsProstEquipped(prostTopR)
local isSecondaryHandValid = not modDataHandler:getIsCut(secondaryHand) or modDataHandler:getIsProstEquipped(prostTopL) local isSecondaryHandValid = not modDataHandler:getIsCut(secondaryHand) or modDataHandler:getIsProstEquipped(prostTopL)
-- Check prosthesis before anything else. If we have them, then we're gucci
--if modDataHandler:getIsProstEquipped(StaticData.PROSTHESES_GROUPS.top)
TOC_DEBUG.print("isPrimaryHandValid: " .. tostring(isPrimaryHandValid))
TOC_DEBUG.print("isSecondaryHandValid: " .. tostring(isSecondaryHandValid))
--TOC_DEBUG.print("isPrimaryHandValid: " .. tostring(isPrimaryHandValid))
--TOC_DEBUG.print("isSecondaryHandValid: " .. tostring(isSecondaryHandValid))
-- Both hands are cut off -- Both hands are cut off
if not isPrimaryHandValid and not isSecondaryHandValid then if not isPrimaryHandValid and not isSecondaryHandValid then
TOC_DEBUG.print("Both hands invalid") --TOC_DEBUG.print("Both hands invalid")
isValid = false isValid = false
end end
-- Equip primary and no right hand (with no prost) -- Equip primary and no right hand (with no prost)
if self.jobType:contains(equipPrimaryText) and not isPrimaryHandValid then if self.jobType:contains(equipPrimaryText) and not isPrimaryHandValid then
TOC_DEBUG.print("Equip primary, no right hand, not valid") --TOC_DEBUG.print("Equip primary, no right hand, not valid")
isValid = false isValid = false
end end
-- Equip secondary and no left hand (with no prost) -- Equip secondary and no left hand (with no prost)
if self.jobType:contains(equipSecondaryText) and not isSecondaryHandValid then if self.jobType:contains(equipSecondaryText) and not isSecondaryHandValid then
TOC_DEBUG.print("Equip secondary, no left hand, not valid") --TOC_DEBUG.print("Equip secondary, no left hand, not valid")
isValid = false isValid = false
end end
end end
TOC_DEBUG.print("isValid to return -> " .. tostring(isValid)) --TOC_DEBUG.print("isValid to return -> " .. tostring(isValid))
--print("_________________________________") --print("_________________________________")
return isValid return isValid
end end
@@ -274,13 +276,13 @@ function ISEquipWeaponAction:performWithAmputation(modDataHandler)
local isFirstValid = not modDataHandler:getIsCut(hand) or modDataHandler:getIsProstEquipped(prostGroup) local isFirstValid = not modDataHandler:getIsCut(hand) or modDataHandler:getIsProstEquipped(prostGroup)
local isSecondValid = not modDataHandler:getIsCut(otherHand) or modDataHandler:getIsProstEquipped(otherProstGroup) local isSecondValid = not modDataHandler:getIsCut(otherHand) or modDataHandler:getIsProstEquipped(otherProstGroup)
TOC_DEBUG.print("First Hand: " .. tostring(hand)) -- TOC_DEBUG.print("First Hand: " .. tostring(hand))
TOC_DEBUG.print("Prost Group: " .. tostring(prostGroup)) -- TOC_DEBUG.print("Prost Group: " .. tostring(prostGroup))
TOC_DEBUG.print("Other Hand: " .. tostring(otherHand)) -- TOC_DEBUG.print("Other Hand: " .. tostring(otherHand))
TOC_DEBUG.print("Other Prost Group: " .. tostring(otherProstGroup)) -- TOC_DEBUG.print("Other Prost Group: " .. tostring(otherProstGroup))
TOC_DEBUG.print("isPrimaryHandValid: " .. tostring(isFirstValid)) -- TOC_DEBUG.print("isPrimaryHandValid: " .. tostring(isFirstValid))
TOC_DEBUG.print("isSecondaryHandValid: " .. tostring(isSecondValid)) -- TOC_DEBUG.print("isSecondaryHandValid: " .. tostring(isSecondValid))
if isFirstValid then if isFirstValid then

View File

@@ -58,7 +58,6 @@ function ProsthesisHandler.CheckIfEquippable(bodyLocation)
end end
-- No acceptable cut limbs -- No acceptable cut limbs
getPlayer():Say("I can't equip this")
return false return false
end end
------------------------- -------------------------
@@ -70,23 +69,23 @@ end
------------------------- -------------------------
--* Overrides *-- --* Overrides *--
---@diagnostic disable-next-line: duplicate-set-field -- ---@diagnostic disable-next-line: duplicate-set-field
function ISWearClothing:isValid() -- function ISWearClothing:isValid()
TOC_DEBUG.print("ISWearClothing:isValid") -- TOC_DEBUG.print("ISWearClothing:isValid")
local bodyLocation = self.item:getBodyLocation() -- local bodyLocation = self.item:getBodyLocation()
if not string.contains(bodyLocation, bodyLocArmProst) then -- if not string.contains(bodyLocation, bodyLocArmProst) then
return true -- return true
else -- else
return ProsthesisHandler.CheckIfEquippable(bodyLocation) -- return ProsthesisHandler.CheckIfEquippable(bodyLocation)
end -- end
end -- end
local og_ISClothingExtraAction_isValid = ISClothingExtraAction.isValid local og_ISClothingExtraAction_isValid = ISClothingExtraAction.isValid
---@diagnostic disable-next-line: duplicate-set-field ---@diagnostic disable-next-line: duplicate-set-field
function ISClothingExtraAction:isValid() function ISClothingExtraAction:isValid()
--the item that we gets is the OG one, so if we're coming from the left one and wanna switch to the right one we're still gonna get the Left bodylocation --the item that we gets is the OG one, so if we're coming from the left one and wanna switch to the right one we're still gonna get the Left bodylocation
-- TODO Figure out why it runs 2 times -- TODO isValid can be run multiple times, for some reason.
local testItem = InventoryItemFactory.CreateItem(self.extra) local testItem = InventoryItemFactory.CreateItem(self.extra)
local bodyLocation = testItem:getBodyLocation() local bodyLocation = testItem:getBodyLocation()
local isEquippable = og_ISClothingExtraAction_isValid(self) local isEquippable = og_ISClothingExtraAction_isValid(self)
@@ -99,11 +98,17 @@ function ISClothingExtraAction:isValid()
return isEquippable return isEquippable
end end
local og_ISClothingExtraAction_stop = ISClothingExtraAction.stop
function ISClothingExtraAction:stop()
og_ISClothingExtraAction_stop(self)
if ProsthesisHandler.CheckIfProst(self.item) then
getPlayer():Say(getText("UI_Say_CantEquip"))
end
end
local og_ISClothingExtraAction_perform = ISClothingExtraAction.perform local og_ISClothingExtraAction_perform = ISClothingExtraAction.perform
function ISClothingExtraAction:perform() function ISClothingExtraAction:perform()
og_ISClothingExtraAction_perform(self)
if ProsthesisHandler.CheckIfProst(self.item) then if ProsthesisHandler.CheckIfProst(self.item) then
local group = ProsthesisHandler.GetGroup(self.item) local group = ProsthesisHandler.GetGroup(self.item)
TOC_DEBUG.print("applying prosthesis stuff for " .. group) TOC_DEBUG.print("applying prosthesis stuff for " .. group)
@@ -111,6 +116,8 @@ function ISClothingExtraAction:perform()
modDataHandler:setIsProstEquipped(group, true) modDataHandler:setIsProstEquipped(group, true)
modDataHandler:apply() modDataHandler:apply()
end end
og_ISClothingExtraAction_perform(self)
end end

View File

@@ -15,7 +15,6 @@ local function CheckIfSaw(itemType)
return itemType:contains(StaticData.SAWS_TYPES_IND_STR.saw) or itemType:contains(StaticData.SAWS_TYPES_IND_STR.gardenSaw) return itemType:contains(StaticData.SAWS_TYPES_IND_STR.saw) or itemType:contains(StaticData.SAWS_TYPES_IND_STR.gardenSaw)
end end
---Return a compatible bandage ---Return a compatible bandage
---@param player IsoPlayer ---@param player IsoPlayer
---@return InventoryItem? ---@return InventoryItem?
@@ -78,13 +77,13 @@ local function AddInvAmputationOptions(player, context, sawItem, stitchesItem, b
-- Set the correct text option -- Set the correct text option
if stitchesItem and bandageItem then if stitchesItem and bandageItem then
TOC_DEBUG.print("stitches and bandage") --TOC_DEBUG.print("stitches and bandage")
text = textAmpStitchBandage text = textAmpStitchBandage
elseif not bandageItem and stitchesItem then elseif not bandageItem and stitchesItem then
TOC_DEBUG.print("only stitches") --TOC_DEBUG.print("only stitches")
text = textAmpStitch text = textAmpStitch
elseif not stitchesItem and bandageItem then elseif not stitchesItem and bandageItem then
TOC_DEBUG.print("only bandages") --TOC_DEBUG.print("only bandages")
text = textAmpBandage text = textAmpBandage
else else
text = textAmp text = textAmp
@@ -99,7 +98,7 @@ local function AddInvAmputationOptions(player, context, sawItem, stitchesItem, b
local limbName = StaticData.LIMBS_STR[i] local limbName = StaticData.LIMBS_STR[i]
if not ModDataHandler.GetInstance():getIsCut(limbName) then if not ModDataHandler.GetInstance():getIsCut(limbName) then
local limbTranslatedName = getText("ContextMenu_Limb_" .. limbName) local limbTranslatedName = getText("ContextMenu_Limb_" .. limbName)
subMenu:addOption(limbTranslatedName, player, PerformAction, player, limbName, sawItem, stitchesItem, bandageItem) -- TODO Should be patient, not surgeon subMenu:addOption(limbTranslatedName, player, PerformAction, player, limbName, sawItem, stitchesItem, bandageItem)
end end
end end
end end
@@ -125,18 +124,13 @@ local function AddInventoryAmputationMenu(playerNum, context, items)
if CheckIfSaw(itemType) then if CheckIfSaw(itemType) then
local player = getSpecificPlayer(playerNum) local player = getSpecificPlayer(playerNum)
local sawItem = item local sawItem = item
--AddInvAmputationOptions(player, context, sawItem)
local stitchesItem = GetStitchesItem(player) local stitchesItem = GetStitchesItem(player)
local bandageItem = GetBandageItem(player) local bandageItem = GetBandageItem(player)
TOC_DEBUG.print("Stitches item: " .. tostring(stitchesItem)) TOC_DEBUG.print("Stitches item: " .. tostring(stitchesItem))
TOC_DEBUG.print("Bandage item: " .. tostring(bandageItem)) TOC_DEBUG.print("Bandage item: " .. tostring(bandageItem))
--if bandageItem then
AddInvAmputationOptions(player, context, sawItem, stitchesItem, bandageItem) AddInvAmputationOptions(player, context, sawItem, stitchesItem, bandageItem)
--end
-- TODO Add stitches option and mixes -- TODO Add stitches option and mixes
end end

View File

@@ -8,7 +8,17 @@ local ItemsHandler = require("TOC/Handlers/ItemsHandler")
------------------- -------------------
local function test(zombie, character, bodyPartType, handWeapon) local function test(zombie, character, bodyPartType, handWeapon)
ItemsHandler.Zombie.SpawnAmputationItem(zombie) --ItemsHandler.Zombie.SpawnAmputationItem(zombie)
end end
Events.OnHitZombie.Add(test) Events.OnHitZombie.Add(test)
-- local function test2(zombie, player, handWeapon, damage)
-- if not instanceof(zombie, "IsoZombie") then return end
-- print(zombie)
-- end
-- Events.OnWeaponHitCharacter.Add(test2)

View File

@@ -11,8 +11,9 @@ require("TOC/Debug")
-- Location IDs must match BodyLocation= and CanBeEquipped= values in items.txt. -- Location IDs must match BodyLocation= and CanBeEquipped= values in items.txt.
local group = BodyLocations.getGroup("Human") local group = BodyLocations.getGroup("Human")
-- TODO Breaks if both arms are cut with one prost!!!
group:getOrCreateLocation("TOC_Arm_R") group:getOrCreateLocation("TOC_Arm_R")
group:getOrCreateLocation("TOC_ArmProst_R")
group:getOrCreateLocation("TOC_Arm_L") group:getOrCreateLocation("TOC_Arm_L")
group:getOrCreateLocation("TOC_ArmProst_R")
group:getOrCreateLocation("TOC_ArmProst_L") group:getOrCreateLocation("TOC_ArmProst_L")

View File

@@ -0,0 +1,7 @@
ItemName_EN = {
ItemName_TOC.Prost_NormalArm_L = "Prosthetic Arm",
ItemName_TOC.Prost_NormalArm_R = "Prosthetic Arm",
ItemName_TOC.Prost_HookArm_L = "Prosthetic Arm - Hook",
ItemName_TOC.Prost_HookArm_R = "Prosthetic Arm - Hook",
}

View File

@@ -9,5 +9,8 @@ UI_EN = {
UI_trait_Amputee_UpperArm_desc = "", UI_trait_Amputee_UpperArm_desc = "",
UI_trait_Insensitive = "Insensitive", UI_trait_Insensitive = "Insensitive",
UI_trait_Insensitive_desc = "" UI_trait_Insensitive_desc = "",
UI_Say_CantEquip = "I can't equip it like this..."
} }

Binary file not shown.

Binary file not shown.

View File

@@ -124,7 +124,7 @@ module TOC
{ {
Type = Clothing, Type = Clothing,
DisplayCategory = Prosthesis, DisplayCategory = Prosthesis,
DisplayName = Hook Arm Test Left, DisplayName = ProstArmHook,
ClothingItem = Prost_Hook_L, ClothingItem = Prost_Hook_L,
ClothingItemExtra = Prost_Hook_R, ClothingItemExtra = Prost_Hook_R,
ClothingItemExtraOption = InstallProstRight, ClothingItemExtraOption = InstallProstRight,
@@ -144,7 +144,7 @@ module TOC
{ {
Type = Clothing, Type = Clothing,
DisplayCategory = Prosthesis, DisplayCategory = Prosthesis,
DisplayName = Hook Arm Test Right, DisplayName = ProstArmHook,
ClothingItem = Prost_Hook_R, ClothingItem = Prost_Hook_R,
ClothingItemExtra = Prost_Hook_L, ClothingItemExtra = Prost_Hook_L,
ClothingItemExtraOption = InstallProstLeft, ClothingItemExtraOption = InstallProstLeft,

View File

@@ -1,4 +0,0 @@
module TOC
{
}

View File

@@ -0,0 +1,90 @@
module TOC
{
imports
{
Base
}
/****************** TOP ******************/
item Prost_HookArm_L
{
Type = Clothing,
DisplayCategory = Prosthesis,
DisplayName = ProstArmHook,
ClothingItem = Prost_HookArm_L,
ClothingItemExtra = Prost_HookArm_R,
ClothingItemExtraOption = InstallProstRight,
clothingExtraSubmenu = InstallProstLeft,
BodyLocation = TOC_ArmProst_L,
Weight = 0,
CombatSpeedModifier = 0.7,
BloodLocation = UpperArms;UpperBody,
Insulation = 1.0,
WindResistance = 1.0,
WaterResistance = 1.0,
Icon = genericAmputation,
CanHaveHoles = false,
}
item Prost_HookArm_R
{
Type = Clothing,
DisplayCategory = Prosthesis,
DisplayName = ProstArmHook,
ClothingItem = Prost_HookArm_R,
ClothingItemExtra = Prost_HookArm_L,
ClothingItemExtraOption = InstallProstLeft,
clothingExtraSubmenu = InstallProstRight,
BodyLocation = TOC_ArmProst_R,
Weight = 0,
CombatSpeedModifier = 0.7,
BloodLocation = UpperArms;UpperBody,
Insulation = 1.0,
WindResistance = 1.0,
WaterResistance = 1.0,
Icon = genericAmputation,
CanHaveHoles = false,
}
item Prost_NormalArm_L
{
Type = Clothing,
DisplayCategory = Prosthesis,
DisplayName = ProstArmHook,
ClothingItem = Prost_NormalArm_L,
ClothingItemExtra = Prost_NormalArm_R,
ClothingItemExtraOption = InstallProstRight,
clothingExtraSubmenu = InstallProstLeft,
BodyLocation = TOC_ArmProst_L,
Weight = 0,
CombatSpeedModifier = 0.7,
BloodLocation = UpperArms;UpperBody,
Insulation = 1.0,
WindResistance = 1.0,
WaterResistance = 1.0,
Icon = genericAmputation,
CanHaveHoles = false,
}
item Prost_NormalArm_R
{
Type = Clothing,
DisplayCategory = Prosthesis,
DisplayName = ProstArmHook,
ClothingItem = Prost_NormalArm_R,
ClothingItemExtra = Prost_NormalArm_L,
ClothingItemExtraOption = InstallProstLeft,
clothingExtraSubmenu = InstallProstRight,
BodyLocation = TOC_ArmProst_R,
Weight = 0,
CombatSpeedModifier = 0.7,
BloodLocation = UpperArms;UpperBody,
Insulation = 1.0,
WindResistance = 1.0,
WaterResistance = 1.0,
Icon = genericAmputation,
CanHaveHoles = false,
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB