diff --git a/media/lua/client/TOC/Zombies/ZombiesAmputation.lua b/media/lua/client/TOC/Zombies/ZombiesAmputation.lua index cf165cf..2b87d75 100644 --- a/media/lua/client/TOC/Zombies/ZombiesAmputation.lua +++ b/media/lua/client/TOC/Zombies/ZombiesAmputation.lua @@ -1,146 +1,149 @@ -local ItemsController = require("TOC/Controllers/ItemsController") -local StaticData = require("TOC/StaticData") -local CommandsData = require("TOC/CommandsData") -------------------------------- +-- todo activate after some more testing ----@param item InventoryItem -local function PredicateAmputationItems(item) - return item:getType():contains("Amputation_") -end + +-- local ItemsController = require("TOC/Controllers/ItemsController") +-- local StaticData = require("TOC/StaticData") +-- local CommandsData = require("TOC/CommandsData") +-- ------------------------------- + +-- ---@param item InventoryItem +-- local function PredicateAmputationItems(item) +-- return item:getType():contains("Amputation_") +-- end -local function PredicateAmputationItemLeft(item) - return item:getType():contains("Amputation_") and item:getType():contains("_L") -end +-- local function PredicateAmputationItemLeft(item) +-- return item:getType():contains("Amputation_") and item:getType():contains("_L") +-- end -local function PredicateAmputationItemRight(item) - return item:getType():contains("Amputation_") and item:getType():contains("_R") -end +-- local function PredicateAmputationItemRight(item) +-- return item:getType():contains("Amputation_") and item:getType():contains("_R") +-- end ----@param zombie IsoZombie|IsoGameCharacter|IsoMovingObject|IsoObject ----@return integer trueID -local function GetZombieID(zombie) +-- ---@param zombie IsoZombie|IsoGameCharacter|IsoMovingObject|IsoObject +-- ---@return integer trueID +-- local function GetZombieID(zombie) - -- Big love to Chuck and Sir Doggy Jvla for this code ----@diagnostic disable-next-line: param-type-mismatch - local pID = zombie:getPersistentOutfitID() - local bits = string.split(string.reverse(Long.toUnsignedString(pID, 2)), "") - while #bits < 16 do bits[#bits+1] = 0 end +-- -- Big love to Chuck and Sir Doggy Jvla for this code +-- ---@diagnostic disable-next-line: param-type-mismatch +-- local pID = zombie:getPersistentOutfitID() +-- local bits = string.split(string.reverse(Long.toUnsignedString(pID, 2)), "") +-- while #bits < 16 do bits[#bits+1] = 0 end - -- trueID - bits[16] = 0 - local trueID = Long.parseUnsignedLong(string.reverse(table.concat(bits, "")), 2) +-- -- trueID +-- bits[16] = 0 +-- local trueID = Long.parseUnsignedLong(string.reverse(table.concat(bits, "")), 2) - return trueID -end +-- return trueID +-- end ----@param zombie IsoZombie -local function SpawnAmputation(zombie, side) - local index = ZombRand(1, #StaticData.PARTS_STR) - local limb = StaticData.PARTS_STR[index] .. "_" .. side - local amputationFullType = StaticData.AMPUTATION_CLOTHING_ITEM_BASE .. limb +-- ---@param zombie IsoZombie +-- local function SpawnAmputation(zombie, side) +-- local index = ZombRand(1, #StaticData.PARTS_STR) +-- local limb = StaticData.PARTS_STR[index] .. "_" .. side +-- local amputationFullType = StaticData.AMPUTATION_CLOTHING_ITEM_BASE .. limb - ItemsController.Zombie.SpawnAmputationItem(zombie, amputationFullType) +-- ItemsController.Zombie.SpawnAmputationItem(zombie, amputationFullType) - -- Add reference and transmit it to server - local pID = GetZombieID(zombie) - local zombieKey = CommandsData.GetZombieKey() - local zombiesMD = ModData.getOrCreate(zombieKey) - if zombiesMD[pID] == nil then zombiesMD[pID] = {} end - zombiesMD[pID][side] = amputationFullType - ModData.add(zombieKey, zombiesMD) - ModData.transmit(zombieKey) -end +-- -- Add reference and transmit it to server +-- local pID = GetZombieID(zombie) +-- local zombieKey = CommandsData.GetZombieKey() +-- local zombiesMD = ModData.getOrCreate(zombieKey) +-- if zombiesMD[pID] == nil then zombiesMD[pID] = {} end +-- zombiesMD[pID][side] = amputationFullType +-- ModData.add(zombieKey, zombiesMD) +-- ModData.transmit(zombieKey) +-- end -------------------------------- +-- ------------------------------- ----@param player IsoGameCharacter ----@param zombie IsoZombie ----@param handWeapon HandWeapon -function HandleZombiesAmputations(player, zombie, handWeapon, damage) - if not instanceof(zombie, "IsoZombie") or not instanceof(player, "IsoPlayer") then return end - if player ~= getPlayer() then return end +-- ---@param player IsoGameCharacter +-- ---@param zombie IsoZombie +-- ---@param handWeapon HandWeapon +-- function HandleZombiesAmputations(player, zombie, handWeapon, damage) +-- if not instanceof(zombie, "IsoZombie") or not instanceof(player, "IsoPlayer") then return end +-- if player ~= getPlayer() then return end - -- TODO Check type of weapon. No hands, only knifes or such +-- -- TODO Check type of weapon. No hands, only knifes or such - if damage < 3 or ZombRand(0,100) < 25 then return end +-- if damage < 3 or ZombRand(0,100) < 25 then return end - TOC_DEBUG.print(handWeapon:getName()) +-- TOC_DEBUG.print(handWeapon:getName()) - local zombieInv = zombie:getInventory() +-- local zombieInv = zombie:getInventory() - -- Check left or right - local leftItem = zombieInv:containsEval(PredicateAmputationItemLeft) +-- -- Check left or right +-- local leftItem = zombieInv:containsEval(PredicateAmputationItemLeft) - if not leftItem then - SpawnAmputation(zombie, "L") - return - end +-- if not leftItem then +-- SpawnAmputation(zombie, "L") +-- return +-- end - local rightItem = zombieInv:containsEval(PredicateAmputationItemRight) - if not rightItem then - SpawnAmputation(zombie, "R") - return - end -end +-- local rightItem = zombieInv:containsEval(PredicateAmputationItemRight) +-- if not rightItem then +-- SpawnAmputation(zombie, "R") +-- return +-- end +-- end -Events.OnWeaponHitCharacter.Add(HandleZombiesAmputations) +-- Events.OnWeaponHitCharacter.Add(HandleZombiesAmputations) ------------------------------ +-- ----------------------------- -local localOnlyZombiesMD +-- local localOnlyZombiesMD -local function SetupZombiesModData() - local zombieKey = CommandsData.GetZombieKey() - localOnlyZombiesMD = ModData.getOrCreate(zombieKey) +-- local function SetupZombiesModData() +-- local zombieKey = CommandsData.GetZombieKey() +-- localOnlyZombiesMD = ModData.getOrCreate(zombieKey) -end +-- end -Events.OnInitGlobalModData.Add(SetupZombiesModData) +-- Events.OnInitGlobalModData.Add(SetupZombiesModData) ----@param zombie IsoZombie -local function ReapplyAmputation(zombie) - local pID = GetZombieID(zombie) +-- ---@param zombie IsoZombie +-- local function ReapplyAmputation(zombie) +-- local pID = GetZombieID(zombie) - if localOnlyZombiesMD[pID] ~= nil then - -- check if zombie has amputation - local zombiesAmpData = localOnlyZombiesMD[pID] - local zombieInv = zombie:getInventory() - local foundItem = zombieInv:containsEvalRecurse(PredicateAmputationItems) +-- if localOnlyZombiesMD[pID] ~= nil then +-- -- check if zombie has amputation +-- local zombiesAmpData = localOnlyZombiesMD[pID] +-- local zombieInv = zombie:getInventory() +-- local foundItem = zombieInv:containsEvalRecurse(PredicateAmputationItems) - if foundItem then - return - else - local leftAmp = zombiesAmpData['L'] - if leftAmp then - ItemsController.Zombie.SpawnAmputationItem(zombie, leftAmp) - end +-- if foundItem then +-- return +-- else +-- local leftAmp = zombiesAmpData['L'] +-- if leftAmp then +-- ItemsController.Zombie.SpawnAmputationItem(zombie, leftAmp) +-- end - local rightAmp = zombiesAmpData['R'] - if rightAmp then - ItemsController.Zombie.SpawnAmputationItem(zombie, rightAmp) - end +-- local rightAmp = zombiesAmpData['R'] +-- if rightAmp then +-- ItemsController.Zombie.SpawnAmputationItem(zombie, rightAmp) +-- end - -- Removes reference, local only - localOnlyZombiesMD[pID] = nil - end - end -end +-- -- Removes reference, local only +-- localOnlyZombiesMD[pID] = nil +-- end +-- end +-- end -Events.OnZombieUpdate.Add(ReapplyAmputation) +-- Events.OnZombieUpdate.Add(ReapplyAmputation)