diff --git a/media/clothing/clothingItems/Surgery_Left_Tourniquet.xml b/media/clothing/clothingItems/Surgery_Left_Tourniquet.xml new file mode 100644 index 0000000..54a61e2 --- /dev/null +++ b/media/clothing/clothingItems/Surgery_Left_Tourniquet.xml @@ -0,0 +1,10 @@ + + + Surgery\Tourniquet_Left + Surgery\Tourniquet_Left + afbab35d-8bd4-4d61-87c7-054651ead1bd + false + false + false + Surgery\tourniquet + \ No newline at end of file diff --git a/media/clothing/clothingItems/Surgery_Right_Tourniquet.xml b/media/clothing/clothingItems/Surgery_Right_Tourniquet.xml new file mode 100644 index 0000000..f3117b8 --- /dev/null +++ b/media/clothing/clothingItems/Surgery_Right_Tourniquet.xml @@ -0,0 +1,10 @@ + + + Surgery\Tourniquet_Right + Surgery\Tourniquet_Right + 9a5fe063-63c7-4e6f-81ca-ee77c6678e0d + false + false + false + Surgery\tourniquet + \ No newline at end of file diff --git a/media/fileGuidTable.xml b/media/fileGuidTable.xml index b91d9b6..0f1cd6d 100644 --- a/media/fileGuidTable.xml +++ b/media/fileGuidTable.xml @@ -77,6 +77,15 @@ 0405a4c0-f71b-45a8-9edc-489fc81dca39 + + media/clothing/clothingItems/Surgery_Left_Tourniquet.xml + afbab35d-8bd4-4d61-87c7-054651ead1bd + + + media/clothing/clothingItems/Surgery_Right_Tourniquet.xml + 9a5fe063-63c7-4e6f-81ca-ee77c6678e0d + + media/clothing/clothingItems/Amputation_Left_Foot.xml 45c0b872-bdf1-466f-b810-c7783171bda1 diff --git a/media/lua/client/TOC_CutLimb.lua b/media/lua/client/ActionsMethods/TOC_CutLimb.lua similarity index 85% rename from media/lua/client/TOC_CutLimb.lua rename to media/lua/client/ActionsMethods/TOC_CutLimb.lua index b1f6d8c..b90ed93 100644 --- a/media/lua/client/TOC_CutLimb.lua +++ b/media/lua/client/ActionsMethods/TOC_CutLimb.lua @@ -98,6 +98,20 @@ function TocDamagePlayerDuringAmputation(patient, part_name) body_damage_part:setBleedingTime(ZombRand(10, 20)) end +local function FindTourniquetInWornItems(patient, side) + local worn_items = patient:getWornItems() + + for i = 1, worn_items:size() - 1 do -- Maybe wornItems:size()-1 + local item = worn_items:get(i):getItem() + local item_full_type = item:getFullType() + if string.find(item_full_type, "Test_Tourniquet_" .. side) then + return item + end + end + + return nil + +end ---------------------------------------------------------------------------------- --- Main function for cutting a limb @@ -116,13 +130,9 @@ function TocCutLimb(part_name, surgeon_factor, bandage_table, painkiller_table) local limbs_data = toc_data.Limbs - - -- TODO Stop for a bit, - -- Cut Hand -> Damage in forearm -- Cut Forearm -> Damage in Upperarm -- Cut UpperArm -> Damage to torso - local body_damage = player:getBodyDamage() local body_part = body_damage:getBodyPart(TocGetBodyPartFromPartName(part_name)) local adiacent_body_part = player:getBodyDamage():getBodyPart(TocGetAdiacentBodyPartFromPartName(part_name)) @@ -135,18 +145,33 @@ function TocCutLimb(part_name, surgeon_factor, bandage_table, painkiller_table) -- The bit will be checked later since we're not sure if the player is not infected from another wound TocSetParametersForMissingLimb(body_part, false) + -- Use a tourniquet if available + local tourniquet_item = FindTourniquetInWornItems(player, TocGetSideFromPartName(part_name)) + + local base_damage_value = 100 + + if tourniquet_item ~= nil then + base_damage_value = 50 + + if part_name == "Left_UpperArm" or part_name == "Right_UpperArm" then + player:removeWornItem(tourniquet_item) + end + + end + -- Set damage, stress, and low endurance after amputation - adiacent_body_part:AddDamage(100 - surgeon_factor) - adiacent_body_part:setAdditionalPain(100 - surgeon_factor) + adiacent_body_part:AddDamage(base_damage_value - surgeon_factor) + adiacent_body_part:setAdditionalPain(base_damage_value - surgeon_factor) adiacent_body_part:setBleeding(true) - adiacent_body_part:setBleedingTime(100 - surgeon_factor) + adiacent_body_part:setBleedingTime(base_damage_value - surgeon_factor) adiacent_body_part:setDeepWounded(true) - adiacent_body_part:setDeepWoundTime(100 - surgeon_factor) + adiacent_body_part:setDeepWoundTime(base_damage_value - surgeon_factor) stats:setEndurance(surgeon_factor) - stats:setStress(100 - surgeon_factor) + stats:setStress(base_damage_value - surgeon_factor) -- Set malus for strength and fitness + -- TODO Make it more "random" with just some XP scaling down instead of a whole level, depending on the limb that we're cutting player:LoseLevel(Perks.Fitness) player:LoseLevel(Perks.Strength) @@ -161,8 +186,9 @@ function TocCutLimb(part_name, surgeon_factor, bandage_table, painkiller_table) -- If painkillers are available, use them -- TODO add painkiller support - -- Use a tourniquet if available - -- TODO add tourniquet + + + -- A check for is_cut shouldn't be necessary here since if we've got here we've already checked it out enough if limbs_data[part_name].is_cut == false then limbs_data[part_name].is_cut = true diff --git a/media/lua/client/TOC_LocalActions.lua b/media/lua/client/ActionsMethods/TOC_LocalActions.lua similarity index 85% rename from media/lua/client/TOC_LocalActions.lua rename to media/lua/client/ActionsMethods/TOC_LocalActions.lua index 1ad255e..17026a3 100644 --- a/media/lua/client/TOC_LocalActions.lua +++ b/media/lua/client/ActionsMethods/TOC_LocalActions.lua @@ -1,3 +1,10 @@ +------------------------------------------ +-------- THE ONLY CURE BUT BETTER -------- +------------------------------------------ +------------- LOCAL ACTIONS -------------- + + + function TocCutLocal(_, player, part_name) if TocGetSawInInventory(player) ~= nil then ISTimedActionQueue.add(ISCutLimb:new(player, player, part_name)) @@ -7,12 +14,10 @@ function TocCutLocal(_, player, part_name) end function TocOperateLocal(_, player, part_name, use_oven) - --local player = getPlayer(); - -- todo add a check if the player has already been amputated or somethin if use_oven then ISTimedActionQueue.add(ISOperateLimb:new(player, player, _, part_name, use_oven)); else - local kit = TocGetKitInInventory(player) -- TODO Why is it here and only for local? + local kit = TocGetKitInInventory(player) if kit ~= nil then ISTimedActionQueue.add(ISOperateLimb:new(player, player, kit, part_name, false)) else diff --git a/media/lua/client/TOC_OperateLimb.lua b/media/lua/client/ActionsMethods/TOC_OperateLimb.lua similarity index 100% rename from media/lua/client/TOC_OperateLimb.lua rename to media/lua/client/ActionsMethods/TOC_OperateLimb.lua diff --git a/media/lua/client/ActionsMethods/TOC_ProsthesisMethods.lua b/media/lua/client/ActionsMethods/TOC_ProsthesisMethods.lua new file mode 100644 index 0000000..56c4d81 --- /dev/null +++ b/media/lua/client/ActionsMethods/TOC_ProsthesisMethods.lua @@ -0,0 +1,63 @@ +------------------------------------------ +-------- THE ONLY CURE BUT BETTER -------- +------------------------------------------ +---------- PROSTHESIS FUNCTIONS ---------- + + +---Equip a prosthesis transforming a normal item into a clothing item +---@param part_name string +---@param prosthesis_base_name string +function TocEquipProsthesis(part_name, prosthesis_base_name) + local player = getPlayer() + + local toc_data = player:getModData().TOC + + local prosthesis_name = TocFindCorrectClothingProsthesis(prosthesis_base_name, part_name) + local added_prosthesis = player:getInventory():AddItem(prosthesis_name) + + if part_name ~= nil then + + if added_prosthesis ~= nil then + toc_data.Limbs[part_name].is_prosthesis_equipped = true + toc_data.Limbs[part_name].equipped_prosthesis = toc_data.Prosthesis[prosthesis_base_name][part_name] + + if player:isFemale() then + added_prosthesis:getVisual():setTextureChoice(1) + else + added_prosthesis:getVisual():setTextureChoice(0) + end + player:setWornItem(added_prosthesis:getBodyLocation(), added_prosthesis) + + + + end + end +end + + +---Unequip a prosthesis clothing item and returns it to the inventory as a normal item +---@param part_name string +function TocUnequipProsthesis(patient, part_name, equipped_prosthesis) + + + local toc_data = patient:getModData().TOC + toc_data.Limbs[part_name].is_prosthesis_equipped = false + + + local equipped_prosthesis_full_type = equipped_prosthesis:getFullType() + + + for _, prost_v in ipairs(GetProsthesisList()) do + local prosthesis_name = string.match(equipped_prosthesis_full_type, prost_v) + if prosthesis_name then + patient:getInventory():AddItem("TOC." .. prosthesis_name) + patient:setWornItem(equipped_prosthesis:getBodyLocation(), nil) + patient:getInventory():Remove(equipped_prosthesis) + toc_data.Limbs[part_name].equipped_prosthesis = nil + end + + end + + +end + diff --git a/media/lua/client/TOC_ContextMenus.lua b/media/lua/client/Interface/TOC_ContextMenus.lua similarity index 96% rename from media/lua/client/TOC_ContextMenus.lua rename to media/lua/client/Interface/TOC_ContextMenus.lua index 71bbc2a..f2bec76 100644 --- a/media/lua/client/TOC_ContextMenus.lua +++ b/media/lua/client/Interface/TOC_ContextMenus.lua @@ -1,6 +1,6 @@ -- TODO this should be moved -function TryToToResetEverythingOtherPlayer(_, patient, surgeon) +local function TryToToResetEverythingOtherPlayer(_, patient, surgeon) sendClientCommand(surgeon, "TOC", "AskToResetEverything", { patient:getOnlineID() }) end @@ -67,19 +67,11 @@ end TocContextMenus.CreateOperateWithOvenMenu = function(player, context, worldObjects, test) local player_obj = getSpecificPlayer(player) - --local clickedPlayer - - - -- TODO Add a way to move the player towards the oven - + -- TODO Let the player move towards the oven local part_data = player_obj:getModData().TOC.Limbs - local is_main_menu_already_created = false - - --local props = v:getSprite() and v:getSprite():getProperties() or nil - for _, v_stove in pairs(worldObjects) do if instanceof(v_stove, "IsoStove") and (player_obj:HasTrait("Brave") or player_obj:getPerkLevel(Perks.Strength) >= 6) then diff --git a/media/lua/client/TOC_UI.lua b/media/lua/client/Interface/TOC_UI.lua similarity index 90% rename from media/lua/client/TOC_UI.lua rename to media/lua/client/Interface/TOC_UI.lua index 38e622d..c18070a 100644 --- a/media/lua/client/TOC_UI.lua +++ b/media/lua/client/Interface/TOC_UI.lua @@ -53,7 +53,7 @@ local function GetImageName(part_name, limbs_data) elseif part_data.is_cut and not part_data.is_amputation_shown then -- Empty (like hand if forearm cut) name = "media/ui/TOC/Empty.png" elseif not part_data.is_cut and - -- TODO This doesn't work in MP on another player since we're trying to retrieve bodyDamage from another player + -- FIXME This doesn't work in MP on another player since we're trying to retrieve bodyDamage from another player getPlayer():getBodyDamage():getBodyPart(TocGetBodyPartFromPartName(part_name)):bitten() then -- Not cut but bitten name = "media/ui/TOC/" .. part_name .. "/Bite.png" else -- Not cut @@ -288,6 +288,54 @@ local function OnClickTocMainUI(button, args) end +-- Generic TOC action, used in OnClickTocDescUI +local function TryTocAction(_, part_name, action, surgeon, patient) + -- TODO at this point surgeon doesnt do anything. We'll fix this later + + -- Check if SinglePlayer + if not isServer() and not isClient() then + + if action == "Cut" then + TocCutLocal(_, surgeon, part_name) + elseif action == "Operate" then + TocOperateLocal(_, surgeon, part_name, false) + elseif action == "Equip" then + TocEquipProsthesisLocal(_, surgeon, part_name) + elseif action == "Unequip" then + TocUnequipProsthesisLocal(_, surgeon, part_name) + end + else + local ui = GetConfirmUIMP() + if not ui then + CreateTocConfirmUIMP() + ui = GetConfirmUIMP() + end + + if patient == nil then + patient = surgeon + end + + + if action == "Cut" then + AskCanCutLimb(patient, part_name) + elseif action == "Operate" then + AskCanOperateLimb(patient, part_name) + elseif action == "Equip" then + AskCanEquipProsthesis(patient, part_name) + elseif action == "Unequip" then + AskCanUnequipProsthesis(patient, part_name) + end + + ui.actionAct = action + ui.partNameAct = part_name + ui.patient = patient + + SendCommandToConfirmUIMP("Wait server") + + end +end + + local function OnClickTocDescUI(button, args) -- Gets every arg from main @@ -335,9 +383,7 @@ local function OnClickTocConfirmUIMP(button, args) -- We can't check if the player has a prosthesis right now, we need to do it later -- TODO should check if player has a prosthesis equipped before doing it - -- TODO Player is surgeon, but we don't have a confirm_ui_mp.surgeon... awful awful awful - -- TODO Workaround for now, we'd need to send data from patient before doing it since we can't access his inventory from the surgeon if confirm_ui_mp.patient == player then ISTimedActionQueue.add(ISUninstallProsthesis:new(player, confirm_ui_mp.patient, confirm_ui_mp.partNameAct)) @@ -394,8 +440,8 @@ local function CreateTocMainUI() end +-- Create a temporary desc UI with fake data (for now) local function CreateTocDescUI() - -- TODO most of this stuff is just temporary. We can probably wipe this off the face of the earth desc_ui = NewUI() desc_ui:setTitle("The only cure description"); desc_ui:isSubUIOf(main_ui) @@ -428,7 +474,7 @@ local function CreateTocDescUI() desc_ui:addEmpty() desc_ui:nextLine() - desc_ui:addButton("b1", "Operate", OnClickTocDescUI) -- TODO this is just temporary + desc_ui:addButton("b1", "Operate", OnClickTocDescUI) desc_ui:saveLayout() end @@ -540,6 +586,24 @@ function ISNewHealthPanel.onClick_TOC(button) Events.OnTick.Add(TocRefreshPlayerMenu) end + + -- Set the correct main title + -- TODO sizes of the menu are strange in MP, they're not consistent with SP + local separated_username = {} + + for v in string.gmatch(patient:getUsername(), "%u%l+") do + table.insert(separated_username, v) + end + + local main_title + if separated_username[1] == nil then + main_title = patient:getUsername() .. " - TOC" + else + main_title = separated_username[1] .. " " .. separated_username[2] .. " - TOC" + end + + main_ui:setTitle(main_title) + main_ui:toggle() main_ui:setInCenterOfScreen() diff --git a/media/lua/client/TOC_Checks.lua b/media/lua/client/TOC_Checks.lua index 187bf37..4086d77 100644 --- a/media/lua/client/TOC_Checks.lua +++ b/media/lua/client/TOC_Checks.lua @@ -45,16 +45,16 @@ end ----------------------------------------- function CheckIfItemIsAmputatedLimb(item) - -- TODO Benchmark if this is faster local item_full_type = item:getFullType() - + local check if string.find(item_full_type, "TOC.Amputation_") then - return true + check = true else - return false + check = false end + return check end diff --git a/media/lua/client/TOC_Client.lua b/media/lua/client/TOC_ClientCommands.lua similarity index 94% rename from media/lua/client/TOC_Client.lua rename to media/lua/client/TOC_ClientCommands.lua index 2e90144..42b5c41 100644 --- a/media/lua/client/TOC_Client.lua +++ b/media/lua/client/TOC_ClientCommands.lua @@ -22,7 +22,13 @@ function SendCutLimb(player, part_name, surgeon_factor, bandage_table, painkille arg["From"] = getPlayer():getOnlineID() arg["To"] = player:getOnlineID() arg["command"] = "CutLimb" - arg["toSend"] = { part_name, surgeon_factor, bandage_table, painkiller_table } + + + -- TODO Hotfix for sound, fix this later + arg["toSend"] = {part_name, surgeon_factor, bandage_table, painkiller_table, getPlayer():getOnlineID()} + + + sendClientCommand("TOC", "SendServer", arg) end @@ -100,6 +106,13 @@ end -- Patient (receive) Commands["CutLimb"] = function(arg) local arg = arg["toSend"] + local surgeon_id = arg[5] + + -- Disable the sound coming from the surgeon + getPlayerByOnlineID(surgeon_id):getEmitter():stopSoundByName("Amputation_Sound") + + + TocCutLimb(arg[1], arg[2], arg[3], arg[4]) end @@ -126,7 +139,7 @@ Commands["UnequipProsthesis"] = function(arg) local arg = arg["toSend"] - TheOnlyCure.UnequipProsthesis(arg[1], arg[2]) + TheOnlyCure.TocUnequipProsthesis(arg[1], arg[2]) end diff --git a/media/lua/client/TOC_CommonFunctions.lua b/media/lua/client/TOC_CommonFunctions.lua index fcb472e..21356ec 100644 --- a/media/lua/client/TOC_CommonFunctions.lua +++ b/media/lua/client/TOC_CommonFunctions.lua @@ -109,3 +109,13 @@ function TocGetSawInInventory(surgeon) player_inv:getItemFromType("Chainsaw") return item end + +function TocGetSideFromPartName(part_name) + + if string.find(part_name, "Left") then + return "Left" + else + return "Right" + end + +end \ No newline at end of file diff --git a/media/lua/client/TOC_Compatibility.lua b/media/lua/client/TOC_Compatibility.lua index 5edf504..ad22d43 100644 --- a/media/lua/client/TOC_Compatibility.lua +++ b/media/lua/client/TOC_Compatibility.lua @@ -22,9 +22,8 @@ local function TocReapplyAmputationClothingItem(mod_data) end - +-- Gets the old status and turns it into the new. function TocCheckCompatibilityWithOlderVersions(mod_data) - -- Gets the old status and turns it into the new. if mod_data.TOC.Limbs == nil then print("TOC: Limbs is nil, setting new mod_data") diff --git a/media/lua/client/TOC_Debug.lua b/media/lua/client/TOC_Debug.lua index 7990b16..c44c920 100644 --- a/media/lua/client/TOC_Debug.lua +++ b/media/lua/client/TOC_Debug.lua @@ -1,3 +1,8 @@ +------------------------------------------ +-------- THE ONLY CURE BUT BETTER -------- +------------------------------------------ +------------ DEBUG FUNCTIONS ------------- + -- Side functions local function TocGetAmputationFullTypeFromInventory(player, side, limb) @@ -105,9 +110,15 @@ function TocResetClothingItemBodyLocation(player, side, limb) prosthesis_item = nil -- reset it end end + ----------------------------------------------------------------------- + + + +------ TEST FUNCTIONS, DON'T USE THESE!!! --------------- + function TocTestBodyLocations() local group = BodyLocations.getGroup("Human") diff --git a/media/lua/client/TOC_HelperFunctions.lua b/media/lua/client/TOC_HelperFunctions.lua index 3c1c349..d369004 100644 --- a/media/lua/client/TOC_HelperFunctions.lua +++ b/media/lua/client/TOC_HelperFunctions.lua @@ -9,7 +9,7 @@ end -- Unequip Prosthesis -function PartNameToBodyLocationProsthesis(name) +local function PartNameToBodyLocationProsthesis(name) if name == "Right_Hand" then return "TOC_ArmRightProsthesis" end if name == "Right_LowerArm" then return "TOC_ArmRightProsthesis" end if name == "Right_UpperArm" then return "TOC_ArmRightProsthesis" end @@ -18,7 +18,7 @@ function PartNameToBodyLocationProsthesis(name) if name == "Left_UpperArm" then return "TOC_ArmLeftProsthesis" end end -function PartNameToBodyLocationAmputation(name) +local function PartNameToBodyLocationAmputation(name) if name == "Right_Hand" then return "TOC_ArmRight" end if name == "Right_LowerArm" then return "TOC_ArmRight" end if name == "Right_UpperArm" then return "TOC_ArmRight" end diff --git a/media/lua/client/TOC_Init.lua b/media/lua/client/TOC_Init.lua index 8a03387..147b180 100644 --- a/media/lua/client/TOC_Init.lua +++ b/media/lua/client/TOC_Init.lua @@ -1,3 +1,8 @@ +------------------------------------------ +-------- THE ONLY CURE BUT BETTER -------- +------------------------------------------ +------------- INIT FUNCTIONS ------------- + if not TheOnlyCure then TheOnlyCure = {} end @@ -22,8 +27,6 @@ local function TocCutLimbForTrait(player, limbs_data, part_name) limbs_data[v].is_cicatrized = true end end - --- Sub function of TocSetInitData local function TocUpdateBaseData(mod_data) -- TODO The prosthetic knife needs to be a weapon first and foremost, so other than a @@ -197,8 +200,6 @@ local function TocSetInitData(mod_data, player) end - - function TheOnlyCure.InitTheOnlyCure(_, player) local mod_data = player:getModData() @@ -211,8 +212,7 @@ function TheOnlyCure.InitTheOnlyCure(_, player) end - -function TheOnlyCure.DeclareTraits() +local function TocDeclareTraits() local amp1 = TraitFactory.addTrait("Amputee_Hand", getText("UI_trait_Amputee_Hand"), -8, getText("UI_trait_Amputee_Hand_desc"), false, false) amp1:addXPBoost(Perks.Left_Hand, 4) @@ -232,52 +232,6 @@ function TheOnlyCure.DeclareTraits() TraitFactory.setMutualExclusive("Amputee_LowerArm", "Amputee_UpperArm") end -function TryTocAction(_, part_name, action, surgeon, patient) - -- TODO add checks so that we don't show these menus if a player has already beeen operated or amputated - -- TODO at this point surgeon doesnt do anything. We'll fix this later - - -- Check if SinglePlayer - if not isServer() and not isClient() then - - if action == "Cut" then - TocCutLocal(_, surgeon, part_name) - elseif action == "Operate" then - TocOperateLocal(_, surgeon, part_name, false) - elseif action == "Equip" then - TocEquipProsthesisLocal(_, surgeon, part_name) - elseif action == "Unequip" then - TocUnequipProsthesisLocal(_, surgeon, part_name) - end - else - local ui = GetConfirmUIMP() - if not ui then - CreateTocConfirmUIMP() - ui = GetConfirmUIMP() - end - - if patient == nil then - patient = surgeon - end - - - if action == "Cut" then - AskCanCutLimb(patient, part_name) - elseif action == "Operate" then - AskCanOperateLimb(patient, part_name) - elseif action == "Equip" then - AskCanEquipProsthesis(patient, part_name) - elseif action == "Unequip" then - AskCanUnequipProsthesis(patient, part_name) - end - - ui.actionAct = action - ui.partNameAct = part_name - ui.patient = patient - - SendCommandToConfirmUIMP("Wait server") - - end -end Events.OnCreatePlayer.Add(TheOnlyCure.InitTheOnlyCure) -Events.OnGameBoot.Add(TheOnlyCure.DeclareTraits) +Events.OnGameBoot.Add(TocDeclareTraits) diff --git a/media/lua/client/TOC_ModCompatibility.lua b/media/lua/client/TOC_ModCompatibility.lua index 4010ad7..3262d42 100644 --- a/media/lua/client/TOC_ModCompatibility.lua +++ b/media/lua/client/TOC_ModCompatibility.lua @@ -26,15 +26,8 @@ local function SetCompatibilityFancyHandwork() local limbs_data = getPlayer():getModData().TOC.Limbs local can_be_held = {} - -- TODO not totally realiable TocPopulateCanBeHeldTable(can_be_held, limbs_data) - - -- for _, test in pairs(can_be_held) do - -- print(test) - -- end - --ISInventoryPaneContextMenu.transferIfNeeded(self.chr, item) - -- If we already have the item equipped if (primary and primary == item) or (secondary and secondary == item) then ISTimedActionQueue.add(ISUnequipAction:new(self.chr, item, 20)) @@ -83,7 +76,6 @@ local function SetCompatibilityFancyHandwork() local og_FHSwapHandsAction = FHSwapHandsAction.start - function FHSwapHandsAction:isValid() local limbs_data = getPlayer():getModData().TOC.Limbs local can_be_held = {} diff --git a/media/lua/client/TOC_OverridenFunctions.lua b/media/lua/client/TOC_OverridenFunctions.lua index c2e63a7..c5ebd61 100644 --- a/media/lua/client/TOC_OverridenFunctions.lua +++ b/media/lua/client/TOC_OverridenFunctions.lua @@ -17,11 +17,8 @@ function ISBaseTimedAction:adjustMaxTime(maxTime) -- MOD SUPPORT ACTIONS ---------------------- -- LIR - if TOC_ModTable.LeftIsRight then - if mod_data.LIR.is_attacking then - -- TODO we need to check if we're doing that specific action return original_max_time end end @@ -196,3 +193,30 @@ function ISInventoryPaneContextMenu.dropItem(item, player) end end + +-- Make the player unable to equip a tourniquet on an already fully amputated limb +local og_ISWearClothingIsValid = ISWearClothing.isValid +function ISWearClothing:isValid() + local base_check = og_ISWearClothingIsValid(self) + --return self.character:getInventory():contains(self.item); + + local item_full_type = self.item:getFullType() + + -- TODO Sides + local limbs_data = self.character:getModData().TOC.Limbs + + for _, side in pairs(TOC_sides) do + if string.find(item_full_type, "Test_Tourniquet_" .. side) then + if limbs_data[side .. "_UpperArm"].is_cut then + return false + end + + + end + + end + + return base_check + + +end diff --git a/media/lua/client/TOC_ProsthesisMethods.lua b/media/lua/client/TOC_ProsthesisMethods.lua deleted file mode 100644 index 8815726..0000000 --- a/media/lua/client/TOC_ProsthesisMethods.lua +++ /dev/null @@ -1,201 +0,0 @@ ------------------------------------------- --------- THE ONLY CURE BUT BETTER -------- ------------------------------------------- ----------- PROSTHESIS FUNCTIONS ---------- - - ----Equip a prosthesis transforming a normal item into a clothing item ----@param part_name string ----@param prosthesis_base_name string -function TocEquipProsthesis(part_name, prosthesis_base_name) - local player = getPlayer() - - local toc_data = player:getModData().TOC - - local prosthesis_name = TocFindCorrectClothingProsthesis(prosthesis_base_name, part_name) - local added_prosthesis = player:getInventory():AddItem(prosthesis_name) - - if part_name ~= nil then - - if added_prosthesis ~= nil then - toc_data.Limbs[part_name].is_prosthesis_equipped = true - toc_data.Limbs[part_name].equipped_prosthesis = toc_data.Prosthesis[prosthesis_base_name][part_name] - - if player:isFemale() then - added_prosthesis:getVisual():setTextureChoice(1) - else - added_prosthesis:getVisual():setTextureChoice(0) - end - player:setWornItem(added_prosthesis:getBodyLocation(), added_prosthesis) - - - - end - end -end - - ----Unequip a prosthesis clothing item and returns it to the inventory as a normal item ----@param part_name string -function TheOnlyCure.UnequipProsthesis(patient, part_name, equipped_prosthesis) - - - local toc_data = patient:getModData().TOC - toc_data.Limbs[part_name].is_prosthesis_equipped = false - - - local equipped_prosthesis_full_type = equipped_prosthesis:getFullType() - - - for _, prost_v in ipairs(GetProsthesisList()) do - local prosthesis_name = string.match(equipped_prosthesis_full_type, prost_v) - if prosthesis_name then - patient:getInventory():AddItem("TOC." .. prosthesis_name) - patient:setWornItem(equipped_prosthesis:getBodyLocation(), nil) - patient:getInventory():Remove(equipped_prosthesis) - toc_data.Limbs[part_name].equipped_prosthesis = nil - end - - end - - -end - - ---------------------------------------------------------------------------------------------- --- TEST MODULAR SYSTEM ---------------------------------------------------------------------------------------------- - -function TocModular() - - - -- Should affect comfort, so mobility (equal speed of actions) - local prost_straps = { - "leather_strap", - - "sheet_strap" - } - - -- A better base has a better resistance. During use it's gonna break sooner or later so a leather base is the best inbetween - local prost_base_forearm = { - "leather_base_forearm", -- Good resistance and speed - "wood_base_forearm", -- Shitty resistance and low speed - "metal_base_forearm" -- Really high resistance and very low speed - } - - local prost_base_hand = { - "wood_base_hand", - "metal_base_hand" - } - - - - local prost_top = { - "metal_hook", -- Decent action speed (around 0.75), good durability, restores hand - "metal_knife", -- Doesn't count as an hand, but substitute the primary attack... Gonna need a way to disable it to make LIR work (retractable) - "wooden_hook", -- Shitty action speed (around 0.3), bad durability, restores hand - "metal_hand" -- Good action speed, amazing durability, restores hand - } - - - - - local TOC_straps = { - leather_strap = { - time_modifier = 1, - durability = 1, - }, - sheet_strap = { - time_modifier = 0.3, - durability = 0.4 - } - } - - local TOC_base_lowerarm = { - leather_base = { - durability = 1, - time_modifier = 1 - }, - wood_base = { - durability = 1, - time_modifier = 1, - }, - metal_base = { - durability = 1, - time_modifier = 1, - } - } - - - local TOC_base_hand = { - wood_base = { - durability = 1, - time_modifier = 1, - }, - metal_base = { - durability = 1, - time_modifier = 1, - } - } - - - - - - local TOC_top = { - metal_hook = { - type = "Normal", -- restores functioning hand - durability = 1, - time_modifier = 1, - }, - wooden_hook = { - type = "Normal", - durability = 1, - time_modifier = 1, - }, - - metal_hand = { - type = "Normal", - durability = 1, - time_modifier = 1, - }, - - metal_knife = { - type = "Attack" - } - - - } - - - - - -- We need A LOT of recipes... or use another menu from the toc one - - -- RECIPES FOR FOREARM = 24 RECIPES in total - -- Would be 48 items in TOC_items since we need them for both sides - - - -- RECIPES FOR HAND = 8 RECIPES in total - -- Would be in total 16 items - - - - -- TOTAL = 64 ITEMS and 32 RECIPES - - -- Leather strap + leather base forearm + metal hook - - - - - - - -- Base Item that can be crafted\found - - -- Different type of hooks - - -- Addons that can be added to the base item - - - -- Equip and unequip pretty much the same - -end \ No newline at end of file diff --git a/media/lua/client/TOC_Update.lua b/media/lua/client/TOC_Update.lua index 6af44b7..6ae662f 100644 --- a/media/lua/client/TOC_Update.lua +++ b/media/lua/client/TOC_Update.lua @@ -49,9 +49,6 @@ local function TocManagePhantomPain(player, toc_data) end end - -- TODO Add phantom pain to depended parts - - end @@ -85,9 +82,9 @@ local function SetHealthStatusForBodyPart(part_data, part_name, player) -- Check for stitching - local is_stitched = false + local is_stitched = false -- TODO Implement this + - -- TODO Implement this if part_data[part_name].is_cut then --print("TOC: Check update for " .. part_name) @@ -162,8 +159,6 @@ end local function UpdatePlayerHealth(player, part_data) local body_damage = player:getBodyDamage() - - if player:HasTrait("Insensitive") then body_damage:setPainReduction(49) end for _, part_name in pairs(GetBodyParts()) do @@ -253,7 +248,7 @@ local function TocUpdateEveryOneMinute() -- Updates toc data in a global way, basically player:transmitModData but it works -- Sends only Limbs since the other stuff is mostly static if toc_data ~= nil then - -- TODO make it so that we dont send it constantly + -- FIXME Send little packets instead of the whole thing? sendClientCommand(player, 'TOC', 'ChangePlayerState', { toc_data.Limbs } ) end diff --git a/media/lua/client/TimedActions/ISCutLimb.lua b/media/lua/client/TimedActions/ISCutLimb.lua index 61687d7..16f1064 100644 --- a/media/lua/client/TimedActions/ISCutLimb.lua +++ b/media/lua/client/TimedActions/ISCutLimb.lua @@ -2,7 +2,6 @@ require "TimedActions/ISBaseTimedAction" ISCutLimb = ISBaseTimedAction:derive("ISCutLimb") --- TODO Add a check so you can't cut your arm if you don't have hands or if you only have one arm and want to cut that same arm. function ISCutLimb:isValid() return self.patientX == self.patient:getX() and self.patientY == self.patient:getY() @@ -24,7 +23,7 @@ end function ISCutLimb:stop() - self.character:getEmitter():stopSoundByName("Amputation_Sound") + self.surgeon:getEmitter():stopSoundByName("Amputation_Sound") end @@ -33,10 +32,11 @@ end function ISCutLimb:start() + -- TODO Add a check so you can't cut your arm if you don't have hands or if you only have one arm and want to cut that same arm. self:setActionAnim("SawLog") local saw_item = TocGetSawInInventory(self.surgeon) - self.sound = self.character:getEmitter():playSound("Amputation_Sound") + self.surgeon:getEmitter():playSound("Amputation_Sound") -- Return whatever object we've got in the inventory if self.surgeon:getPrimaryHandItem() then @@ -119,7 +119,7 @@ function ISCutLimb:perform() TocCutLimb(self.part_name, surgeon_factor, bandage_table, painkiller_table) end - self.character:getEmitter():stopSoundByName("Amputation_Sound") + self.surgeon:getEmitter():stopSoundByName("Amputation_Sound") self.surgeon:getXp():AddXP(Perks.Doctor, 400) ISBaseTimedAction.perform(self) @@ -131,7 +131,7 @@ function ISCutLimb:new(patient, surgeon, part_name) local o = {} - setmetatable(o, self) -- TODO what's this crap? + setmetatable(o, self) self.__index = self o.part_name = part_name o.character = surgeon -- For anim diff --git a/media/lua/client/TimedActions/ISOperateLimb.lua b/media/lua/client/TimedActions/ISOperateLimb.lua index 56d3f85..d03d4e2 100644 --- a/media/lua/client/TimedActions/ISOperateLimb.lua +++ b/media/lua/client/TimedActions/ISOperateLimb.lua @@ -23,7 +23,7 @@ end function ISOperateLimb:start() self:setActionAnim("MedicalCheck") if self.use_oven then - self.sound = self.patient:getEmitter():playSound("Burn_sound") -- TODO currently broken, but maybe that's good + self.sound = self.patient:getEmitter():playSound("Burn_sound") self:forceComplete() end end @@ -63,7 +63,6 @@ function ISOperateLimb:perform() end self.surgeon:getXp():AddXP(Perks.Doctor, 400) - -- FIXME Add a check for kit to prevent errors if self.kit and not use_oven then self.surgeon:getInventory():Remove(self.kit) end diff --git a/media/lua/client/TimedActions/ISUninstallProsthesis.lua b/media/lua/client/TimedActions/ISUninstallProsthesis.lua index e55bda7..0326a34 100644 --- a/media/lua/client/TimedActions/ISUninstallProsthesis.lua +++ b/media/lua/client/TimedActions/ISUninstallProsthesis.lua @@ -58,7 +58,7 @@ function ISUninstallProsthesis:perform() SendUnequipProsthesis(self.patient, self.part_name, self.item) else - TheOnlyCure.UnequipProsthesis(self.patient, self.part_name, self.item) + TheOnlyCure.TocUnequipProsthesis(self.patient, self.part_name, self.item) end ISBaseTimedAction.perform(self) diff --git a/media/lua/shared/NPCs/ExtraBodyLocations.lua b/media/lua/shared/NPCs/ExtraBodyLocations.lua index 2bf4b3f..dc0acaa 100644 --- a/media/lua/shared/NPCs/ExtraBodyLocations.lua +++ b/media/lua/shared/NPCs/ExtraBodyLocations.lua @@ -4,7 +4,7 @@ local function addBodyLocationBefore(new_location, move_to_location) group:getOrCreateLocation(new_location) local new_item = list:get(list:size()-1) print("TOC: Created new body location" .. new_item:getId()) - list:remove(new_item) + list:remove(new_item) -- We can't use the Index, it works if we pass the item though! local i = group:indexOf(move_to_location) list:add(i, new_item) end @@ -20,4 +20,4 @@ addBodyLocationBefore("TOC_ArmRightProsthesis", "Shoes") addBodyLocationBefore("TOC_ArmLeftProsthesis", "Shoes") addBodyLocationBefore("TOC_LegRightProsthesis", "Shoes") -addBodyLocationBefore("TOC_LegLeftProsthesis", "Shoes") \ No newline at end of file +addBodyLocationBefore("TOC_LegLeftProsthesis", "Shoes") diff --git a/media/lua/shared/translate/EN/ContextMenu_EN.txt b/media/lua/shared/translate/EN/ContextMenu_EN.txt index 5c45e30..cb34141 100644 --- a/media/lua/shared/translate/EN/ContextMenu_EN.txt +++ b/media/lua/shared/translate/EN/ContextMenu_EN.txt @@ -1,4 +1,8 @@ ContextMenu_EN = { + ContextMenu_Cut_Arm = "Cut arm", ContextMenu_Operate_Arm = "Operate arm", + + ContextMenu_TourniquetRightSwitch = "Tourniquet on Right Arm", + ContextMenu_TourniquetLeftSwitch = "Tourniquet on Left Arm", } diff --git a/media/lua/shared/translate/EN/Sandbox_EN.txt b/media/lua/shared/translate/EN/Sandbox_EN.txt index 4d7abb0..38a7342 100644 --- a/media/lua/shared/translate/EN/Sandbox_EN.txt +++ b/media/lua/shared/translate/EN/Sandbox_EN.txt @@ -6,4 +6,9 @@ Sandbox_EN = { Sandbox_TOC_CicatrizationSpeedMultiplier = "Cicatrization speed multiplier", Sandbox_TOC_CicatrizationSpeedMultiplier_tooltip = "Customize this to make the cicatrization process faster", + + Sandbox_TOC_AmputationTimeMultiplier = "Amputation Time Scaler", + Sandbox_TOC_AmputationTimeMultiplier_tooltip = "Scales the amount of time multplying added after amputation" + + } \ No newline at end of file diff --git a/media/models_X/Surgery/Tourniquet_Left.fbx b/media/models_X/Surgery/Tourniquet_Left.fbx new file mode 100644 index 0000000..d87eb83 Binary files /dev/null and b/media/models_X/Surgery/Tourniquet_Left.fbx differ diff --git a/media/models_X/Surgery/Tourniquet_Right.fbx b/media/models_X/Surgery/Tourniquet_Right.fbx new file mode 100644 index 0000000..c807f3f Binary files /dev/null and b/media/models_X/Surgery/Tourniquet_Right.fbx differ diff --git a/media/sandbox-options.txt b/media/sandbox-options.txt index 6cb0242..7e46a18 100644 --- a/media/sandbox-options.txt +++ b/media/sandbox-options.txt @@ -20,4 +20,16 @@ option TOC.CicatrizationSpeedMultiplier page = TOC, translation = TOC_CicatrizationSpeedMultiplier, +} + +option TOC.AmputationTimeMultiplier +{ + type = integer, + min = 1, + max = 10, + default = 1, + page = TOC, + translation = TOC_AmputationTimeMultiplier + + } \ No newline at end of file diff --git a/media/scripts/TOC_items.txt b/media/scripts/TOC_items.txt index 5c13ecd..b9ecf7e 100644 --- a/media/scripts/TOC_items.txt +++ b/media/scripts/TOC_items.txt @@ -441,6 +441,44 @@ item ProthesisMag3 Tooltip = Tooltip_ProthesisMag2, } + +item Surgery_Left_Tourniquet + { + Weight = 1, + Type = Clothing, + DisplayCategory = Surgery, + DisplayName = Tourniquet - Left Arm, + ClothingItem = Surgery_Left_Tourniquet, + BodyLocation = Hands, + Icon = tourniquet, + BloodLocation = Hands, + ClothingItemExtra = Surgery_Right_Tourniquet, + ClothingItemExtraOption = TourniquetRightSwitch, + clothingExtraSubmenu = TourniquetLeftSwitch, + Tooltip = Test, + CanHaveHoles = false, + } + +item Surgery_Right_Tourniquet + { + Weight = 1, + Type = Clothing, + DisplayCategory = Surgery, + DisplayName = Tourniquet - Right Arm, + ClothingItem = Surgery_Right_Tourniquet, + BodyLocation = Hands, + Icon = tourniquet, + BloodLocation = Hands, + ClothingItemExtra = Surgery_Left_Tourniquet, + ClothingItemExtraOption = TourniquetLeftSwitch, + clothingExtraSubmenu = TourniquetRightSwitch, + + + + Tooltip = Test, + CanHaveHoles = false, + } + item Amputation_Left_Foot { Weight = 1, @@ -456,4 +494,7 @@ item Amputation_Left_Foot } -} \ No newline at end of file +} + + + diff --git a/media/textures/Surgery/tourniquet.png b/media/textures/Surgery/tourniquet.png new file mode 100644 index 0000000..d15a2f9 Binary files /dev/null and b/media/textures/Surgery/tourniquet.png differ diff --git a/models_stuff/Hooks/tourniquet.blend b/models_stuff/Hooks/tourniquet.blend new file mode 100644 index 0000000..afcadb7 Binary files /dev/null and b/models_stuff/Hooks/tourniquet.blend differ diff --git a/modular_prosthesis_item.txt b/modular_prosthesis_item.txt deleted file mode 100644 index fb9c904..0000000 --- a/modular_prosthesis_item.txt +++ /dev/null @@ -1,401 +0,0 @@ - -/* LOWERARM POSSIBLE PROSTHESIS COMBINATIONS */ - - - -/* Leather strap, leather base, metal hand */ -item ProstLowerArm_LeatherStrap_LeatherBase_MetalHand - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - -/* Leather strap, Wooden base, metal hand */ -item ProstLowerArm_LeatherStrap_WoodenBase_MetalHand - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - -/* Leather strap, Metal base, metal hand */ -item ProstLowerArm_LeatherStrap_MetalBase_MetalHand - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - -/* Leather strap, leather base, Metal Hook */ -item ProstLowerArm_LeatherStrap_LeatherBase_MetalHook - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - -/* Leather strap, Wooden base, Metal Hook */ -item ProstLowerArm_LeatherStrap_WoodenBase_MetalHook - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - -/* Leather strap, Metal base, Metal Hook */ -item ProstLowerArm_LeatherStrap_MetalBase_Metalook - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - - -/* Leather strap, leather base, Metal Knife */ -item ProstLowerArm_LeatherStrap_LeatherBase_MetalKnife - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - -/* Leather strap, Wooden base, Metal Knife */ -item ProstLowerArm_LeatherStrap_WoodenBase_MetalKnife - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - -/* Leather strap, Metal base, Metal Knife */ -item ProstLowerArm_LeatherStrap_MetalBase_MetalKnife - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - - - - -/* Leather strap, leather base, Wooden Hook */ -item ProstLowerArm_LeatherStrap_LeatherBase_WoodenHook - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - -/* Leather strap, Wooden base, Wooden Hook */ -item ProstLowerArm_LeatherStrap_WoodenBase_WoodenHook - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - -/* Leather strap, Metal base, Wooden Hook */ -item ProstLowerArm_LeatherStrap_MetalBase_WoodenHook - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - - - - -/* Sheet strap, leather base, metal hand */ -item ProstLowerArm_LeatherStrap_LeatherBase_MetalHand - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - -/* Sheet strap, Wooden base, metal hand */ -item ProstLowerArm_SheetStrap_WoodenBase_MetalHand - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - -/* Sheet strap, Metal base, metal hand */ -item ProstLowerArm_SheetStrap_MetalBase_MetalHand - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - -/* Sheet strap, leather base, Metal Hook */ -item ProstLowerArm_SheetStrap_LeatherBase_MetalHook - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - -/* Sheet strap, Wooden base, Metal Hook */ -item ProstLowerArm_SheetStrap_WoodenBase_MetalHook - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - -/* Sheet strap, Metal base, Metal Hook */ -item ProstLowerArm_SheetStrap_MetalBase_Metalook - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - - -/* Sheet strap, leather base, Metal Knife */ -item ProstLowerArm_SheetStrap_LeatherBase_MetalKnife - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - -/* Sheet strap, Wooden base, Metal Knife */ -item ProstLowerArm_SheetStrap_WoodenBase_MetalKnife - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - -/* Sheet strap, Metal base, Metal Knife */ -item ProstLowerArm_SheetStrap_MetalBase_MetalKnife - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - - - - -/* Sheet strap, leather base, Wooden Hook */ -item ProstLowerArm_SheetStrap_LeatherBase_WoodenHook - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - -/* Sheet strap, Wooden base, Wooden Hook */ -item ProstLowerArm_SheetStrap_WoodenBase_WoodenHook - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - -/* Sheet strap, Metal base, Wooden Hook */ -item ProstLowerArm_SheetStrap_MetalBase_WoodenHook - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - - - - -/* HANDS POSSIBLE PROSTHESIS COMBINATIONS */ - -/* Wooden Base, Metal Hand */ -item ProstHand_WoodenBase_MetalHand - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } -/* Wooden Base, Metal Hook */ -item ProstHand_WoodenBase_MetalHook - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } -/* Wooden Base, Metal Knife */ -item ProstHand_WoodenBase_MetalKnife - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } -/* Wooden Base, Wooden Hook */ -item ProstHand_WoodenBase_WoodenHook - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } - - - - -/* Metal Base, Metal Hand */ -item ProstHand_MetalBase_MetalHand - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } -/* Metal Base, Metal Hook */ -item ProstHand_MetalBase_MetalHook - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } -/* Metal Base, Metal Knife */ -item ProstHand_MetalBase_MetalKnife - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } -/* Metal Base, Wooden Hook */ -item ProstHand_MetalBase_WoodenHook - { - Weight = 1, - Type = Normal, - DisplayCategory = Prosthesis, - DisplayName = DisplayName_WoodenHook, - Icon = woodenHook, - Tooltip = Tooltip_prosthesic_limb, - WorldStaticModel = TOC.WoodenHook, - } \ No newline at end of file