From 8a42b25f9de3eda77395400fa357aebe6ae69535 Mon Sep 17 00:00:00 2001 From: Pao Date: Wed, 8 Mar 2023 15:07:23 +0100 Subject: [PATCH] - Readded toc compat by dhert - Fixed checkmymodtable --- media/lua/client/TOC_Init.lua | 71 +------- media/lua/client/TOC_ModCompatibility.lua | 212 ++++++---------------- 2 files changed, 57 insertions(+), 226 deletions(-) diff --git a/media/lua/client/TOC_Init.lua b/media/lua/client/TOC_Init.lua index 064353a..4eaf17e 100644 --- a/media/lua/client/TOC_Init.lua +++ b/media/lua/client/TOC_Init.lua @@ -4,7 +4,7 @@ ------------- INIT FUNCTIONS ------------- --[[ Original code and idea by: Mr. Bounty -Rewritten by: Pao +Rewritten and maintained by: Pao --]] @@ -74,26 +74,6 @@ end TOC.SetInitData = function(modData, player) print("TOC: Creating mod_data.TOC") - -------- - -- NEW NAMING SCHEME - - ---- Amputations - - -- Amputation_Left_Hand - -- Amputation_Right_UpperArm - - - ---- Prosthesis to equip - -- Prost_Left_Hand_MetalHook - -- Prost_Right_Forearm_WoodenHook - - --- Objects - -- Prost_Object_WoddenHook - - -- TODO this is gonna become a mess really fast, i fucked up. - -- TODO Move prosthesis to something more easily accessible - -- TODO Acceptable prosthesis need to be moved to something more accessible - modData.TOC = {} -- Limbs @@ -111,49 +91,6 @@ TOC.SetInitData = function(modData, player) isOtherBodypartInfected = false } - - -- TODO Move this to the global TOC thing - -- Prosthetics - modData.TOC.prosthesis = { - WoodenHook = { - Right_Hand = {}, - Right_LowerArm = {}, - Right_UpperArm = {}, - - Left_Hand = {}, - Left_LowerArm = {}, - Left_UpperArm = {}, - }, - MetalHook = { - Right_Hand = {}, - Right_LowerArm = {}, - Right_UpperArm = {}, - - Left_Hand = {}, - Left_LowerArm = {}, - Left_UpperArm = {}, - }, - MetalHand = { - Right_Hand = {}, - Right_LowerArm = {}, - Right_UpperArm = {}, - - Left_Hand = {}, - Left_LowerArm = {}, - Left_UpperArm = {}, - }, - - - - Accepted_Prosthesis = {} - - } - - -- TODO Move this to the global TOC thing - -- Generic (future uses) - modData.TOC.generic = {} - - for _, side in pairs(TOC.sideNames) do for _, limb in pairs(TOC.limbNames) do local partName = side .. "_" .. limb @@ -194,7 +131,7 @@ end ------------------------------------------------------------------------------------ -- Rewrite 2 Electirc Bogaloo -local function InitializeJustCutItOff() +local function InitializeTheOnlyCure() if not TOC then TOC = {} @@ -241,9 +178,9 @@ local function InitializeJustCutItOff() -- Mod Checker CheckMyModTable = CheckMyModTable or {} - CheckMyModTable["TOC"] = 2915572347 + CheckMyModTable["Amputation"] = 2703664356 -- TODO should we change the ID with the update or not? end -Events.OnGameBoot.Add(InitializeJustCutItOff) \ No newline at end of file +Events.OnGameBoot.Add(InitializeTheOnlyCure) \ No newline at end of file diff --git a/media/lua/client/TOC_ModCompatibility.lua b/media/lua/client/TOC_ModCompatibility.lua index cc49c9d..3a602af 100644 --- a/media/lua/client/TOC_ModCompatibility.lua +++ b/media/lua/client/TOC_ModCompatibility.lua @@ -3,176 +3,70 @@ ------------------------------------------ ------------------------------------------ --- Compatibility for various mods +-- Compatibility Handler by Dhert ------------------------------------------ -local function SetCompatibilityFancyHandwork() - local og_ISHotbar_equipItem = ISHotbar.equipItem - function ISHotbar:equipItem(item) - local mod = isFHModKeyDown() - local primary = self.chr:getPrimaryHandItem() - local secondary = self.chr:getSecondaryHandItem() - local equip = true - - local limbsData = getPlayer():getModData().TOC.limbs - local canBeHeld = TOC_Common.GetCanBeHeldTable(limbsData) - - - -- 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)) - equip = false - end - - -- If we didn't just do something - if equip then - -- Handle holding big objects - if primary and isForceDropHeavyItem(primary) then - ISTimedActionQueue.add(ISUnequipAction:new(self.chr, primary, 50)) - ----- treat "equip" as if we have something equipped from here down - equip = false - end - if mod then - --print("TOC: Fancy Handwork modifier") - -- If we still have something equipped in secondary, unequip - if secondary and equip and canBeHeld["Left"] then - ISTimedActionQueue.add(ISUnequipAction:new(self.chr, secondary, 20)) - end - - if canBeHeld["Left"] then - ISTimedActionQueue.add(ISEquipWeaponAction:new(self.chr, item, 20, false, item:isTwoHandWeapon())) - elseif canBeHeld["Right"] then - ISTimedActionQueue.add(ISEquipWeaponAction:new(self.chr, item, 20, true, item:isTwoHandWeapon())) - - end - else - -- If we still have something equipped in primary, unequip - if primary and equip and canBeHeld["Right"] then - ISTimedActionQueue.add(ISUnequipAction:new(self.chr, primary, 20)) - end - -- Equip Primary - if canBeHeld["Right"] then - ISTimedActionQueue.add(ISEquipWeaponAction:new(self.chr, item, 20, true, item:isTwoHandWeapon())) - elseif canBeHeld["Left"] then - ISTimedActionQueue.add(ISEquipWeaponAction:new(self.chr, item, 20, false, item:isTwoHandWeapon())) - - end - end - end - - self.chr:getInventory():setDrawDirty(true) - getPlayerData(self.chr:getPlayerNum()).playerInventory:refreshBackpacks() - end - - local og_FHSwapHandsAction = FHSwapHandsAction.start +-- TODO Connect this with TOC logic instead of hardcoding it here +local parts = { + "Right_Hand", + "Left_Hand", + "Right_LowerArm", + "Left_LowerArm" +} +-- TODO Connect this with TOC logic instead of hardcoding it here +local vars = { + "isCut", + "isProsthesisEquipped" +} - function FHSwapHandsAction:isValid() - local limbsData = getPlayer():getModData().TOC.limbs - local canBeHeld = TOC_Common.GetCanBeHeldTable(limbsData) - - return (canBeHeld["Right"] and canBeHeld["Left"]) and(((self.character:getPrimaryHandItem() or self.character:getSecondaryHandItem()) ~= nil)) - end +local TOC_Compat = {} +-- Raw access, must pass valid part +--- @param player +--- @param part string +--- @return boolean +TOC_Compat.hasArmPart = function(player, part) + if not player or not part then return false end + local data = (player:getModData().TOC and player:getModData().TOC.Limbs) or nil + return not data or not data[part] or (data[part][vars[1]] and data[part][vars[2]]) or not data[part][vars[1]] end -local function SetCompatibilityFancyHandWorkAndSwapIt() - - SetCompatibilityFancyHandwork() - - -- Override equip Item once again with the necessary changes - function ISHotbar:equipItem(item) - local mod = isFHModKeyDown() - local primary = self.chr:getPrimaryHandItem() - local secondary = self.chr:getSecondaryHandItem() - local equip = true - - local limbsData = getPlayer():getModData().TOC.limbs - local canBeHeld = TOC_Common.GetCanBeHeldTable(limbsData) - - -- 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)) - equip = false - end - - -- If we didn't just do something - if equip then - -- Handle holding big objects - if primary and isForceDropHeavyItem(primary) then - ISTimedActionQueue.add(ISUnequipAction:new(self.chr, primary, 50)) - ----- treat "equip" as if we have something equipped from here down - equip = false - end - if mod then - --print("TOC: Fancy Handwork modifier") - -- If we still have something equipped in secondary, unequip - if secondary and equip and canBeHeld["Left"] then - ISTimedActionQueue.add(ISUnequipAction:new(self.chr, secondary, 20)) - end - - if canBeHeld["Left"] then - ISTimedActionQueue.add(ISEquipWeaponAction:new(self.chr, item, 20, false, item:isTwoHandWeapon())) - elseif canBeHeld["Right"] then - ISTimedActionQueue.add(ISEquipWeaponAction:new(self.chr, item, 20, true, item:isTwoHandWeapon())) - - end - else - -- If we still have something equipped in primary, unequip - if primary and equip and canBeHeld["Right"] then - ISTimedActionQueue.add(ISUnequipAction:new(self.chr, primary, 20)) - end - -- Equip Primary - if canBeHeld["Right"] then - ISTimedActionQueue.add(ISEquipWeaponAction:new(self.chr, item, 20, true, item:isTwoHandWeapon())) - elseif canBeHeld["Left"] then - ISTimedActionQueue.add(ISEquipWeaponAction:new(self.chr, item, 20, false, item:isTwoHandWeapon())) - - end - end - - -- Swap It part - local i_slotinuse = item:getAttachedSlot() - local slot = self.availableSlot[i_slotinuse] - local slotIndexID = "swap_Hotbar"..i_slotinuse - if slot and SwapItConfig.config[slotIndexID] == true then - if primary and not self:isInHotbar(primary) and self:canBeAttached(slot, primary) then - self:removeItem(item, false)--false = don't run animation - self:attachItem(primary, slot.def.attachments[primary:getAttachmentType()], i_slotinuse, slot.def, true) - end - end - - end - - self.chr:getInventory():setDrawDirty(true) - getPlayerData(self.chr:getPlayerNum()).playerInventory:refreshBackpacks() - end - - +-- Raw access, must pass valid parts. Will check for 2 parts (arm and hand) +--- @param player +--- @param part string +--- @param part2 string +--- @return boolean +TOC_Compat.hasArm = function(player, part, part2) + if not player or not part then return false end + local data = (player:getModData().TOC and player:getModData().TOC.Limbs) or nil + return not data or (not data[part] or (data[part][vars[1]] and data[part][vars[2]]) or not data[part][vars[1]]) or (not data[part] or (data[part2][vars[1]] and data[part2][vars[2]]) or not data[part2][vars[1]]) end --------------------------------------------------------- - -local function CheckModCompatibility() - local activatedMods = getActivatedMods() - print("TOC: Checking mods") - - if activatedMods:contains("FancyHandwork") then - - if activatedMods:contains("SwapIt") then - require "SwapIt Main" - print("TOC: Overriding FancyHandwork and SwapIt methods") - SetCompatibilityFancyHandWorkAndSwapIt() - else - print("TOC: Overriding FancyHandwork methods") - require "TimedActions/FHSwapHandsAction" - SetCompatibilityFancyHandwork() - end - end +-- Check if hand is available +--- @param player +--- @param left boolean -- optional +--- @return boolean +TOC_Compat.hasHand = function(player, left) + return TOC_Compat.hasArm(player, ((left and parts[2]) or parts[1]), ((left and parts[4]) or parts[3])) end -print("TOC: Starting CheckModCompatibility") -Events.OnGameStart.Add(CheckModCompatibility) +-- Check if both hands are available +--- @param player +--- @return boolean +TOC_Compat.hasBothHands = function(player) + return TOC_Compat.hasArm(player, parts[1], parts[3]) and TOC_Compat.hasArm(player, parts[2], parts[4]) +end +-- This returns a number for the hands that you have +----- 11 == both hands +----- 10 == left hand +----- 01 (1) == right hand +----- 00 (0) == no hands +--- @param player +--- @return integer +TOC_Compat.getHands = function(player) + return ((TOC_Compat.hasArm(player, parts[1], parts[3]) and 1) or 0) + ((TOC_Compat.hasArm(player, parts[2], parts[4]) and 10) or 0) +end \ No newline at end of file