-
Posts
516 -
Joined
Posts posted by nolanri
-
-
A Suggestion to reduce the registration of spammers: After registering on pzwiki.net, and verifying email. Retract and Do not yet give any edit or post privileges. As a final step in confirming the mediawiki account. They must come to the indiestone.com forum login (or register) then go to a page on TIS forum that only logged in users can access and confirm their wiki account by entering their username in a form which activates their wiki account.
A custom extra activation step like this will mind boggle any mainstream mediawiki spam bots. And should not inconvenience normal users as most would have TIS accounts anyway. It also has the added bonus of you knowing what forum user has what wiki account. So if need be, you could also restrict activation of wiki accounts to only allow activation if the forum account has x number of posts, to make it even harder for spamming. And assuming both sites (TIS and pzwiki) are both on the same web server it would be fairly simple to implement. -
this shows what is equipped:
Spoilerfunction ArmorKeysUp(keynum)
--getPlayer():Say(tostring(keynum));
if keynum == 25 then
local player = getPlayer();
local armorstring = "Currently Equipped Armor \n";
if(player:getModData().ShieldArmor ~= nil) and (player:getSecondaryHandItem() ~= nil) and (player:getSecondaryHandItem():getType() == player:getModData().ShieldArmor) then
armorstring = armorstring .. "Shield: " .. player:getInventory():getItemFromType(player:getModData().ShieldArmor):getDisplayName() .. "\n";
end
if(player:getModData().HeadArmor ~= nil) and (player:getInventory():contains(player:getModData().HeadArmor)) then
armorstring = armorstring .. "Helmet: " .. player:getInventory():getItemFromType(player:getModData().HeadArmor):getDisplayName() .. "\n";
end
if(player:getModData().HandArmor ~= nil) and (player:getInventory():contains(player:getModData().HandArmor)) then
armorstring = armorstring .. "Hands: " .. player:getInventory():getItemFromType(player:getModData().HandArmor):getDisplayName() .. "\n";
end
if(player:getModData().ArmArmor ~= nil) and (player:getInventory():contains(player:getModData().ArmArmor)) then
armorstring = armorstring .. "Arms: " .. player:getInventory():getItemFromType(player:getModData().ArmArmor):getDisplayName() .. "\n";
end
if(player:getModData().LegArmor ~= nil) and (player:getInventory():contains(player:getModData().LegArmor)) then
armorstring = armorstring .. "Legs: " .. player:getInventory():getItemFromType(player:getModData().LegArmor):getDisplayName() .. "\n";
end
if(player:getModData().ChestArmor ~= nil) and (player:getInventory():contains(player:getModData().ChestArmor)) then
armorstring = armorstring .. "Chest: " .. player:getInventory():getItemFromType(player:getModData().ChestArmor):getDisplayName() .. "\n";
end
if(player:getModData().FootArmor ~= nil) and (player:getInventory():contains(player:getModData().FootArmor)) then
armorstring = armorstring .. "Feet: " .. player:getInventory():getItemFromType(player:getModData().FootArmor):getDisplayName() .. "\n";
end
ArmorWindow:setText(armorstring);
ArmorWindow:setVisible(true);
end
end -
here is same working version but with Hydrocraft armor_definitions.lua
unzip and paste into C:\Program Files (x86)\Steam\steamapps\workshop\content\108600\498441420\mods\Hydrocraft\media\lua\client\
-
or download from here: http://steamcommunity.com/sharedfiles/filedetails/?id=709198610
the code is up to date but there are no armor definitions for the armor in this mod now so cant be used as is.
-
14 minutes ago, Di-Crash said:
Is it possible to remove the information from the data subject? What would not "getModData().EquipedHeadArmor == 0" or "getModData().EquipedHeadArmor == 1" And what would be "getModData (). EquipedHeadArmor == true" or "getModData().EquipedHeadArmor ~= nil" How can i do this?
I want to delete information about the fact that the item was equipped, now he has a record after the unequipped "getModData().EquipedHeadArmor = 0"
10 minutes ago, Di-Crash said:Is it possible to remove the information from the data subject? What would not "getModData().EquipedHeadArmor == 0" or "getModData().EquipedHeadArmor == 1" And what would be "getModData (). EquipedHeadArmor == true" or "getModData().EquipedHeadArmor ~= nil" How can i do this?
I want to delete information about the fact that the item was equipped, now he has a record after the unequipped "getModData().EquipedHeadArmor = 0"
I dont understand what the problem with weight is you are trying to fix.
I got impatient and tried merging your timed action stuff with my stuff and changed to the new definition format. it all seems to work great for me.take a look:
-
9 minutes ago, Di-Crash said:
Cool, tomorrow I'll try to register a check through this form of the table. Now I'm looking for a solution with a change in the weight of objects.
local maxWeight = player:getInventory():getMaxWeight(); local currentWeight = player:getInventory():getCapacityWeight(); local itemWeight = itemObj:getWeight() ; if(itemWeight + currentWeight) > maxWeight then player:Say("I can\'t carry anymore"); return false; end
new loadArmor function with table format:
Spoilerfunction loadArmor(Armor)
local tempDurability;
if(Armor:getModData().Durability == nil) and (GlobalArmor[WorkingArmor]["Durability"] ~= nil) then
Armor:getModData().Durability = GlobalArmor[WorkingArmor]["Durability"] ;
end
local thetype = Armor:getType();
if(GlobalArmor[thetype]["ScratchRes"]) then Armor:getModData().ScratchRes = GlobalArmor[thetype]["ScratchRes"] end
if(GlobalArmor[thetype]["DeepWoundRes"]) then Armor:getModData().DeepWoundRes = GlobalArmor[thetype]["DeepWoundRes"] end
if(GlobalArmor[thetype]["BurnRes"]) then Armor:getModData().BurnRes = GlobalArmor[thetype]["BurnRes"] end
if(GlobalArmor[thetype]["BulletRes"]) then Armor:getModData().BulletRes = GlobalArmor[thetype]["BulletRes"] end
if(GlobalArmor[thetype]["FractureRes"]) then Armor:getModData().FractureRes = GlobalArmor[thetype]["FractureRes"] end
if(GlobalArmor[thetype]["GlassRes"]) then Armor:getModData().GlassRes = GlobalArmor[thetype]["GlassRes"] end
if(GlobalArmor[thetype]["BiteRes"]) then Armor:getModData().BiteRes = GlobalArmor[thetype]["BiteRes"] endif(GlobalArmor[thetype]["Location"]) then Armor:getModData().Location= GlobalArmor[thetype]["Location"] end
if(tempDurability ~= nil) then
GlobalArmor[WorkingArmor]["Durability"] = tempDurability;
end
end -
4 minutes ago, Hydromancerx said:
Just FYI. Sicne the game is so laggy for me now I have not played it really. And thus I have been in no modd to mod. So for now I am not modding PZ at the moment.
Is there a way you can give me power to upload changes?
-
for example. New armor_definitions.lua format:
Spoiler--Body Parts List --> Foot_L, Foot_R, ForeArm_L, ForeArm_R, Groin, Hand_L, Hand_R, Head, LowerLeg_L, LowerLeg_R, MAX, Neck, Torso_Lower, Torso_Upper, UpperArm_L, UpperArm_R, UpperLeg_L, UpperLeg_R
--Available Res Types list --> ScratchRes|DeepWoundRes|BurnRes|BulletRes|FractureRes|GlassRes|BiteResif(GlobalArmor == nil) then GlobalArmor = {} end
-- Helmets
local WorkingArmor;
WorkingArmor = "LeatherGloves";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = { Hand_L = 100, Hand_R = 100, ForeArm_L = 100, ForeArm_R = 100, UpperArm_L = 100, UpperArm_R = 100, Torso_Upper = 100, Torso_Lower = 100, Groin = 100, Head = 100, Neck = 100, LowerLeg_L = 100, LowerLeg_L = 100, LowerLeg_R = 100, LowerLeg_R = 100, Foot_L = 100, Foot_R = 100} ;
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Hand_L = 100, Hand_R = 100, ForeArm_L = 100, ForeArm_R = 100, UpperArm_L = 100, UpperArm_R = 100, Torso_Upper = 100, Torso_Lower = 100, Groin = 100, Head = 100, Neck = 100, LowerLeg_L = 100, LowerLeg_L = 100, LowerLeg_R = 100, LowerLeg_R = 100, Foot_L = 100, Foot_R = 100} ;
GlobalArmor[WorkingArmor]["BiteRes"] = { Hand_L = 100, Hand_R = 100, ForeArm_L = 100, ForeArm_R = 100, UpperArm_L = 100, UpperArm_R = 100, Torso_Upper = 100, Torso_Lower = 100, Groin = 100, Head = 100, Neck = 100, LowerLeg_L = 100, LowerLeg_L = 100, LowerLeg_R = 100, LowerLeg_R = 100, Foot_L = 100, Foot_R = 100} ;
GlobalArmor[WorkingArmor]["GlassRes"] = {Hand_L = 100, Hand_R = 100, ForeArm_L = 100, ForeArm_R = 100, UpperArm_L = 100, UpperArm_R = 100, Torso_Upper = 100, Torso_Lower = 100, Groin = 100, Head = 100, Neck = 100, LowerLeg_L = 100, LowerLeg_L = 100, LowerLeg_R = 100, LowerLeg_R = 100, Foot_L = 100, Foot_R = 100};
GlobalArmor[WorkingArmor]["BulletRes"] = {Hand_L = 100, Hand_R = 100, ForeArm_L = 100, ForeArm_R = 100, UpperArm_L = 100, UpperArm_R = 100, Torso_Upper = 100, Torso_Lower = 100, Groin = 100, Head = 100, Neck = 100, LowerLeg_L = 100, LowerLeg_L = 100, LowerLeg_R = 100, LowerLeg_R = 100, Foot_L = 100, Foot_R = 100};
GlobalArmor[WorkingArmor]["Durability"] = 1000;
GlobalArmor[WorkingArmor]["Location"] = "Hands";
WorkingArmor = "HCHardhat";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["BiteRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["GlassRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["Durability"] = 40;
GlobalArmor[WorkingArmor]["Location"] = "Head";
WorkingArmor = "WeldingMask";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Head = 25};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Head = 25};
GlobalArmor[WorkingArmor]["BiteRes"] = {Head = 25};
GlobalArmor[WorkingArmor]["GlassRes"] = {Head = 25};
GlobalArmor[WorkingArmor]["BurnRes"] = {Head = 80};
GlobalArmor[WorkingArmor]["Durability"] = 40;
GlobalArmor[WorkingArmor]["Location"] = "Head";WorkingArmor = "HCHockeymask";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Head = 25};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Head = 25};
GlobalArmor[WorkingArmor]["BiteRes"] = {Head = 25};
GlobalArmor[WorkingArmor]["GlassRes"] = {Head = 25};
GlobalArmor[WorkingArmor]["Durability"] = 20;
GlobalArmor[WorkingArmor]["Location"] = "Head";
WorkingArmor = "HCHelmfootball";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["BiteRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["GlassRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["Durability"] = 30;
GlobalArmor[WorkingArmor]["Location"] = "Head";
WorkingArmor = "HCHelmbike";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Head = 50};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Head = 50};
GlobalArmor[WorkingArmor]["BiteRes"] = {Head = 50};
GlobalArmor[WorkingArmor]["GlassRes"] = {Head = 50};
GlobalArmor[WorkingArmor]["Durability"] = 20;
GlobalArmor[WorkingArmor]["Location"] = "Head";
WorkingArmor = "HCHelmmmotorcycle";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Head = 80};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Head = 80};
GlobalArmor[WorkingArmor]["BiteRes"] = {Head = 80};
GlobalArmor[WorkingArmor]["GlassRes"] = {Head = 80};
GlobalArmor[WorkingArmor]["Durability"] = 40;
GlobalArmor[WorkingArmor]["Location"] = "Head";WorkingArmor = "HCFirefighterhelmet";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Head = 80};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Head = 80};
GlobalArmor[WorkingArmor]["BiteRes"] = {Head = 80};
GlobalArmor[WorkingArmor]["GlassRes"] = {Head = 80};
GlobalArmor[WorkingArmor]["BurnRes"] = {Head = 80};
GlobalArmor[WorkingArmor]["Durability"] = 80;
GlobalArmor[WorkingArmor]["Location"] = "Head";
WorkingArmor = "HCHelmkevlar";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["BiteRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["GlassRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["BulletRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["Durability"] = 100;
GlobalArmor[WorkingArmor]["Location"] = "Head";WorkingArmor = "HCHelmswat";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["BiteRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["GlassRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["BulletRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["Durability"] = 90;
GlobalArmor[WorkingArmor]["Location"] = "Head";
WorkingArmor = "HCHelmriot";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["BulletRes"] = {Head = 80};
GlobalArmor[WorkingArmor]["Durability"] = 80;
GlobalArmor[WorkingArmor]["Location"] = "Head";WorkingArmor = "HCHelmsamurai";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Head = 80};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Head = 80};
GlobalArmor[WorkingArmor]["BiteRes"] = {Head = 80};
GlobalArmor[WorkingArmor]["GlassRes"] = {Head = 80};
GlobalArmor[WorkingArmor]["Durability"] = 35;
GlobalArmor[WorkingArmor]["Location"] = "Head";
WorkingArmor = "HCHelmsteel";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["Durability"] = 40;
GlobalArmor[WorkingArmor]["Location"] = "Head";WorkingArmor = "HCHelmiron";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["Durability"] = 30;
GlobalArmor[WorkingArmor]["Location"] = "Head";WorkingArmor = "HCHelmbronze";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["Durability"] = 20;
GlobalArmor[WorkingArmor]["Location"] = "Head";WorkingArmor = "HCHelmcopper";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Head = 90};
GlobalArmor[WorkingArmor]["Durability"] = 10;
GlobalArmor[WorkingArmor]["Location"] = "Head";
WorkingArmor = "HCHelmcookingpot";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["BiteRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["GlassRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["Durability"] = 40;
GlobalArmor[WorkingArmor]["Location"] = "Head";
WorkingArmor = "HCHelmbucket";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["BiteRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["GlassRes"] = {Head = 60};
GlobalArmor[WorkingArmor]["Durability"] = 10;
GlobalArmor[WorkingArmor]["Location"] = "Head";
-- GlovesWorkingArmor = "HCOvenmitts";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Hand_L = 20, Hand_R = 20} ;
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Hand_L = 20, Hand_R = 20} ;
GlobalArmor[WorkingArmor]["BiteRes"] = {Hand_L = 20, Hand_R = 20} ;
GlobalArmor[WorkingArmor]["GlassRes"] = {Hand_L = 20, Hand_R = 20};
GlobalArmor[WorkingArmor]["BurnRes"] = {Hand_L = 90, Hand_R = 90};
GlobalArmor[WorkingArmor]["Durability"] = 2;
GlobalArmor[WorkingArmor]["Location"] = "Hands";WorkingArmor = "HCWorkgloves";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Hand_L = 20, Hand_R = 20} ;
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Hand_L = 20, Hand_R = 20} ;
GlobalArmor[WorkingArmor]["BiteRes"] = {Hand_L = 20, Hand_R = 20} ;
GlobalArmor[WorkingArmor]["GlassRes"] = {Hand_L = 20, Hand_R = 20};
GlobalArmor[WorkingArmor]["Durability"] = 5;
GlobalArmor[WorkingArmor]["Location"] = "Hands";WorkingArmor = "HCGlovekevlar";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["BiteRes"] = {Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["GlassRes"] = {Hand_L = 90, Hand_R = 90};
GlobalArmor[WorkingArmor]["BulletRes"] = {Hand_L = 90, Hand_R = 90};
GlobalArmor[WorkingArmor]["Durability"] = 100;
GlobalArmor[WorkingArmor]["Location"] = "Hands";WorkingArmor = "HCGloveriot";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["BiteRes"] = {Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["GlassRes"] = {Hand_L = 90, Hand_R = 90};
GlobalArmor[WorkingArmor]["BulletRes"] = {Hand_L = 90, Hand_R = 90};
GlobalArmor[WorkingArmor]["Durability"] = 80;
GlobalArmor[WorkingArmor]["Location"] = "Hands";
WorkingArmor = "HCGlovechainmail";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["BiteRes"] = {Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["GlassRes"] = {Hand_L = 90, Hand_R = 90};
GlobalArmor[WorkingArmor]["Durability"] = 45;
GlobalArmor[WorkingArmor]["Location"] = "Hands";
WorkingArmor = "HCGlovesteel";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {ForeArm_L = 90, ForeArm_R = 90, Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {ForeArm_L = 90, ForeArm_R = 90, Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["BiteRes"] = {ForeArm_L = 90, ForeArm_R = 90, Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["GlassRes"] = {ForeArm_L = 90, ForeArm_R = 90, Hand_L = 90, Hand_R = 90};
GlobalArmor[WorkingArmor]["Durability"] = 40;
GlobalArmor[WorkingArmor]["Location"] = "Hands";
WorkingArmor = "HCGloveiron";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {ForeArm_L = 90, ForeArm_R = 90, Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {ForeArm_L = 90, ForeArm_R = 90, Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["BiteRes"] = {ForeArm_L = 90, ForeArm_R = 90, Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["GlassRes"] = {ForeArm_L = 90, ForeArm_R = 90, Hand_L = 90, Hand_R = 90};
GlobalArmor[WorkingArmor]["Durability"] = 30;
GlobalArmor[WorkingArmor]["Location"] = "Hands";WorkingArmor = "HCGlovebronze";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {ForeArm_L = 90, ForeArm_R = 90, Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {ForeArm_L = 90, ForeArm_R = 90, Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["BiteRes"] = {ForeArm_L = 90, ForeArm_R = 90, Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["GlassRes"] = {ForeArm_L = 90, ForeArm_R = 90, Hand_L = 90, Hand_R = 90};
GlobalArmor[WorkingArmor]["Durability"] = 20;
GlobalArmor[WorkingArmor]["Location"] = "Hands";WorkingArmor = "HCGlovecopper";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {ForeArm_L = 90, ForeArm_R = 90, Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {ForeArm_L = 90, ForeArm_R = 90, Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["BiteRes"] = {ForeArm_L = 90, ForeArm_R = 90, Hand_L = 90, Hand_R = 90} ;
GlobalArmor[WorkingArmor]["GlassRes"] = {ForeArm_L = 90, ForeArm_R = 90, Hand_L = 90, Hand_R = 90};
GlobalArmor[WorkingArmor]["Durability"] = 10;
GlobalArmor[WorkingArmor]["Location"] = "Hands";
WorkingArmor = "HCGlovestuddedleather";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Hand_L = 30, Hand_R = 30} ;
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Hand_L = 30, Hand_R = 30} ;
GlobalArmor[WorkingArmor]["BiteRes"] = {Hand_L = 30, Hand_R = 30} ;
GlobalArmor[WorkingArmor]["GlassRes"] = {Hand_L = 30, Hand_R = 30};
GlobalArmor[WorkingArmor]["Durability"] = 20;
GlobalArmor[WorkingArmor]["Location"] = "Hands";WorkingArmor = "HCGloveleather";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Hand_L = 20, Hand_R = 20} ;
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Hand_L = 20, Hand_R = 20} ;
GlobalArmor[WorkingArmor]["BiteRes"] = {Hand_L = 20, Hand_R = 20} ;
GlobalArmor[WorkingArmor]["GlassRes"] = {Hand_L = 20, Hand_R = 20};
GlobalArmor[WorkingArmor]["Durability"] = 10;
GlobalArmor[WorkingArmor]["Location"] = "Hands";
WorkingArmor = "HCGlovecord";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Hand_L = 20, Hand_R = 20} ;
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Hand_L = 20, Hand_R = 20} ;
GlobalArmor[WorkingArmor]["BiteRes"] = {Hand_L = 20, Hand_R = 20} ;
GlobalArmor[WorkingArmor]["GlassRes"] = {Hand_L = 20, Hand_R = 20};
GlobalArmor[WorkingArmor]["Durability"] = 5;
GlobalArmor[WorkingArmor]["Location"] = "Hands";
-- Arm ArmorWorkingArmor = "HCArmarmorkevlar";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["BulletRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["BurnRes"] = {UpperArm_L = 80, UpperArm_R = 80};
GlobalArmor[WorkingArmor]["Durability"] = 100;
GlobalArmor[WorkingArmor]["Location"] = "Arms";WorkingArmor = "HCArmarmorswat";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["BulletRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["BurnRes"] = {UpperArm_L = 80, UpperArm_R = 80};
GlobalArmor[WorkingArmor]["Durability"] = 90;
GlobalArmor[WorkingArmor]["Location"] = "Arms";WorkingArmor = "HCArmarmorriot";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["BulletRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["BurnRes"] = {UpperArm_L = 80, UpperArm_R = 80};
GlobalArmor[WorkingArmor]["Durability"] = 80;
GlobalArmor[WorkingArmor]["Location"] = "Arms";
WorkingArmor = "HCArmarmorpaintball";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["Durability"] = 70;
GlobalArmor[WorkingArmor]["Location"] = "Arms";
WorkingArmor = "HCArmarmorsamurai";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 80, UpperArm_R = 80};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {UpperArm_L = 80, UpperArm_R = 80};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 80, UpperArm_R = 80};
GlobalArmor[WorkingArmor]["GlassRes"] = {UpperArm_L = 80, UpperArm_R = 80};
GlobalArmor[WorkingArmor]["Durability"] = 35;
GlobalArmor[WorkingArmor]["Location"] = "Arms";WorkingArmor = "HCArmarmorlamellar";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 80, UpperArm_R = 80};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {UpperArm_L = 80, UpperArm_R = 80};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 80, UpperArm_R = 80};
GlobalArmor[WorkingArmor]["GlassRes"] = {UpperArm_L = 80, UpperArm_R = 80};
GlobalArmor[WorkingArmor]["Durability"] = 30;
GlobalArmor[WorkingArmor]["Location"] = "Arms";
WorkingArmor = "HCArmarmorsteel";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["Durability"] = 40;
GlobalArmor[WorkingArmor]["Location"] = "Arms";
WorkingArmor = "HCArmarmoriron";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["Durability"] = 30;
GlobalArmor[WorkingArmor]["Location"] = "Arms";WorkingArmor = "HCArmarmorbronze";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["Durability"] = 20;
GlobalArmor[WorkingArmor]["Location"] = "Arms";WorkingArmor = "HCArmarmorcopper";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {UpperArm_L = 90, UpperArm_R = 90};
GlobalArmor[WorkingArmor]["Durability"] = 10;
GlobalArmor[WorkingArmor]["Location"] = "Arms";WorkingArmor = "HCArmarmorstuddedleather";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 30, UpperArm_R = 30};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {UpperArm_L = 30, UpperArm_R = 30};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 30, UpperArm_R = 30};
GlobalArmor[WorkingArmor]["GlassRes"] = {UpperArm_L = 30, UpperArm_R = 30};
GlobalArmor[WorkingArmor]["Durability"] = 20;
GlobalArmor[WorkingArmor]["Location"] = "Arms";WorkingArmor = "HCArmarmorhardenedleather";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 25, UpperArm_R = 25};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {UpperArm_L = 25, UpperArm_R = 25};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 25, UpperArm_R = 25};
GlobalArmor[WorkingArmor]["GlassRes"] = {UpperArm_L = 25, UpperArm_R = 25};
GlobalArmor[WorkingArmor]["Durability"] = 15;
GlobalArmor[WorkingArmor]["Location"] = "Arms";WorkingArmor = "HCArmarmorleather";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 20, UpperArm_R = 20};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {UpperArm_L = 20, UpperArm_R = 20};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 20, UpperArm_R = 20};
GlobalArmor[WorkingArmor]["GlassRes"] = {UpperArm_L = 20, UpperArm_R = 20};
GlobalArmor[WorkingArmor]["Durability"] = 10;
GlobalArmor[WorkingArmor]["Location"] = "Arms";
WorkingArmor = "HCArmarmorhide";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 15, UpperArm_R = 15};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {UpperArm_L = 15, UpperArm_R = 15};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 15, UpperArm_R = 15};
GlobalArmor[WorkingArmor]["GlassRes"] = {UpperArm_L = 15, UpperArm_R = 15};
GlobalArmor[WorkingArmor]["Durability"] = 5;
GlobalArmor[WorkingArmor]["Location"] = "Arms";WorkingArmor = "HCArmarmorpadded";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 15, UpperArm_R = 15};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {UpperArm_L = 15, UpperArm_R = 15};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 15, UpperArm_R = 15};
GlobalArmor[WorkingArmor]["GlassRes"] = {UpperArm_L = 15, UpperArm_R = 15};
GlobalArmor[WorkingArmor]["Durability"] = 5;
GlobalArmor[WorkingArmor]["Location"] = "Arms";WorkingArmor = "HCArmarmorbone";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 10, UpperArm_R = 10};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {UpperArm_L = 10, UpperArm_R = 10};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 10, UpperArm_R = 10};
GlobalArmor[WorkingArmor]["GlassRes"] = {UpperArm_L = 10, UpperArm_R = 10};
GlobalArmor[WorkingArmor]["Durability"] = 10;
GlobalArmor[WorkingArmor]["Location"] = "Arms";WorkingArmor = "HCArmarmorbamboo";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 10, UpperArm_R = 10};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {UpperArm_L = 10, UpperArm_R = 10};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 10, UpperArm_R = 10};
GlobalArmor[WorkingArmor]["GlassRes"] = {UpperArm_L = 10, UpperArm_R = 10};
GlobalArmor[WorkingArmor]["Durability"] = 10;
GlobalArmor[WorkingArmor]["Location"] = "Arms";WorkingArmor = "HCArmarmorlog";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 10, UpperArm_R = 10};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {UpperArm_L = 10, UpperArm_R = 10};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 10, UpperArm_R = 10};
GlobalArmor[WorkingArmor]["GlassRes"] = {UpperArm_L = 10, UpperArm_R = 10};
GlobalArmor[WorkingArmor]["Durability"] = 5;
GlobalArmor[WorkingArmor]["Location"] = "Arms";WorkingArmor = "HCArmarmortire";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 40, UpperArm_R = 40};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {UpperArm_L = 40, UpperArm_R = 40};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 40, UpperArm_R = 40};
GlobalArmor[WorkingArmor]["GlassRes"] = {UpperArm_L = 40, UpperArm_R = 40};
GlobalArmor[WorkingArmor]["Durability"] = 40;
GlobalArmor[WorkingArmor]["Location"] = "Arms";
WorkingArmor = "HCArmarmorbubblewrap";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {UpperArm_L = 25, UpperArm_R = 25};
GlobalArmor[WorkingArmor]["BiteRes"] = {UpperArm_L = 25, UpperArm_R = 25};
GlobalArmor[WorkingArmor]["Durability"] = 1;
GlobalArmor[WorkingArmor]["Location"] = "Arms";
-- Torso ArmorWorkingArmor = "HCFiresuit";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["BurnRes"] = {Head = 90, Neck = 90, Torso_Upper = 90, Torso_Lower = 90, UpperArm_L = 90, UpperArm_R = 90, ForeArm_L = 90, ForeArm_R = 90, Hand_L = 90, Hand_R = 90, Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90, LowerLeg_L = 90, LowerLeg_R = 90, Foot_L = 90, Foot_R = 90};
GlobalArmor[WorkingArmor]["Durability"] = 20;
GlobalArmor[WorkingArmor]["Location"] = "Body";WorkingArmor = "HCFirefighterjacket";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 25, Torso_Upper = 25, UpperArm_L = 25, UpperArm_R = 25};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 25, Torso_Upper = 25, UpperArm_L = 25, UpperArm_R = 25};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 25, Torso_Upper = 25, UpperArm_L = 25, UpperArm_R = 25};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 25, Torso_Upper = 25, UpperArm_L = 25, UpperArm_R = 25};
GlobalArmor[WorkingArmor]["BurnRes"] = {Neck = 80, Torso_Upper = 80, Torso_Lower = 80, UpperArm_L = 80, UpperArm_R = 80};
GlobalArmor[WorkingArmor]["Durability"] = 80;
GlobalArmor[WorkingArmor]["Location"] = "Body";WorkingArmor = "HCArmormilitaryjacket";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 25, Torso_Upper = 25};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 25, Torso_Upper = 25};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 25, Torso_Upper = 25};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 25, Torso_Upper = 25};
GlobalArmor[WorkingArmor]["Durability"] = 3;
GlobalArmor[WorkingArmor]["Location"] = "Body";
WorkingArmor = "HCArmorleatherjacket";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 20, Torso_Upper = 20};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 20, Torso_Upper = 20};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 20, Torso_Upper = 20};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 20, Torso_Upper = 20};
GlobalArmor[WorkingArmor]["Durability"] = 5;
GlobalArmor[WorkingArmor]["Location"] = "Body";WorkingArmor = "HCArmorlightjacket";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 15, Torso_Upper = 15};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 15, Torso_Upper = 15};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 15, Torso_Upper = 15};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 15, Torso_Upper = 15};
GlobalArmor[WorkingArmor]["Durability"] = 2;
GlobalArmor[WorkingArmor]["Location"] = "Body";WorkingArmor = "HCArmorkevlar";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["BulletRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["BurnRes"] = {Neck = 80, Torso_Upper = 80};
GlobalArmor[WorkingArmor]["Durability"] = 100;
GlobalArmor[WorkingArmor]["Location"] = "Body";WorkingArmor = "HCArmorswat";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["BulletRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["BurnRes"] = {Neck = 80, Torso_Upper = 80};
GlobalArmor[WorkingArmor]["Durability"] = 90;
GlobalArmor[WorkingArmor]["Location"] = "Body";
WorkingArmor = "HCArmorriot";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["BulletRes"] = {Neck = 80, Torso_Upper = 80};
GlobalArmor[WorkingArmor]["BurnRes"] = {Neck = 80, Torso_Upper = 80};
GlobalArmor[WorkingArmor]["Durability"] = 80;
GlobalArmor[WorkingArmor]["Location"] = "Body";WorkingArmor = "HCArmorpaintball";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["Durability"] = 70;
GlobalArmor[WorkingArmor]["Location"] = "Body";WorkingArmor = "HCArmorchainmail";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["Durability"] = 40;
GlobalArmor[WorkingArmor]["Location"] = "Body";WorkingArmor = "HCArmorscalemail";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["Durability"] = 35;
GlobalArmor[WorkingArmor]["Location"] = "Body";
WorkingArmor = "HCArmorsamurai";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 80, Torso_Upper = 80};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 80, Torso_Upper = 80};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 80, Torso_Upper = 80};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 80, Torso_Upper = 80};
GlobalArmor[WorkingArmor]["Durability"] = 35;
GlobalArmor[WorkingArmor]["Location"] = "Body";
WorkingArmor = "HCArmorlamellar";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 80, Torso_Upper = 80};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 80, Torso_Upper = 80};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 80, Torso_Upper = 80};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 80, Torso_Upper = 80};
GlobalArmor[WorkingArmor]["Durability"] = 30;
GlobalArmor[WorkingArmor]["Location"] = "Body";
WorkingArmor = "HCArmorchainmail";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["Durability"] = 40;
GlobalArmor[WorkingArmor]["Location"] = "Body";
WorkingArmor = "HCArmorsteel";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["Durability"] = 40;
GlobalArmor[WorkingArmor]["Location"] = "Body";WorkingArmor = "HCArmoriron";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["Durability"] = 30;
GlobalArmor[WorkingArmor]["Location"] = "Body";WorkingArmor = "HCArmorbronze";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["Durability"] = 20;
GlobalArmor[WorkingArmor]["Location"] = "Body";
WorkingArmor = "HCArmorcopper";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 90, Torso_Upper = 90};
GlobalArmor[WorkingArmor]["Durability"] = 10;
GlobalArmor[WorkingArmor]["Location"] = "Body";WorkingArmor = "HCArmorstuddedleather";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 30, Torso_Upper = 30};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 30, Torso_Upper = 30};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 30, Torso_Upper = 30};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 30, Torso_Upper = 30};
GlobalArmor[WorkingArmor]["Durability"] = 20;
GlobalArmor[WorkingArmor]["Location"] = "Body";WorkingArmor = "HCArmorhardenedleather";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 25, Torso_Upper = 25};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 25, Torso_Upper = 25};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 25, Torso_Upper = 25};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 25, Torso_Upper = 25};
GlobalArmor[WorkingArmor]["Durability"] = 15;
GlobalArmor[WorkingArmor]["Location"] = "Body";
WorkingArmor = "HCArmorleather";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 20, Torso_Upper = 20};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 20, Torso_Upper = 20};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 20, Torso_Upper = 20};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 20, Torso_Upper = 20};
GlobalArmor[WorkingArmor]["Durability"] = 10;
GlobalArmor[WorkingArmor]["Location"] = "Body";
WorkingArmor = "HCArmorhide";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 15, Torso_Upper = 15};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 15, Torso_Upper = 15};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 15, Torso_Upper = 15};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 15, Torso_Upper = 15};
GlobalArmor[WorkingArmor]["Durability"] = 5;
GlobalArmor[WorkingArmor]["Location"] = "Body";WorkingArmor = "HCArmorpadded";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 15, Torso_Upper = 15};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 15, Torso_Upper = 15};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 15, Torso_Upper = 15};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 15, Torso_Upper = 15};
GlobalArmor[WorkingArmor]["Durability"] = 5;
GlobalArmor[WorkingArmor]["Location"] = "Body";WorkingArmor = "HCArmorpadded";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 15, Torso_Upper = 15};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 15, Torso_Upper = 15};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 15, Torso_Upper = 15};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 15, Torso_Upper = 15};
GlobalArmor[WorkingArmor]["Durability"] = 5;
GlobalArmor[WorkingArmor]["Location"] = "Body";WorkingArmor = "HCArmorbone";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 10, Torso_Upper = 10};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 10, Torso_Upper = 10};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 10, Torso_Upper = 10};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 10, Torso_Upper = 10};
GlobalArmor[WorkingArmor]["Durability"] = 10;
GlobalArmor[WorkingArmor]["Location"] = "Body";WorkingArmor = "HCArmorbamboo";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 10, Torso_Upper = 10};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 10, Torso_Upper = 10};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 10, Torso_Upper = 10};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 10, Torso_Upper = 10};
GlobalArmor[WorkingArmor]["Durability"] = 10;
GlobalArmor[WorkingArmor]["Location"] = "Body";WorkingArmor = "HCArmorlog";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 10, Torso_Upper = 10};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 10, Torso_Upper = 10};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 10, Torso_Upper = 10};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 10, Torso_Upper = 10};
GlobalArmor[WorkingArmor]["Durability"] = 5;
GlobalArmor[WorkingArmor]["Location"] = "Body";WorkingArmor = "HCArmortire";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 40, Torso_Upper = 40};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 40, Torso_Upper = 40};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 40, Torso_Upper = 40};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 40, Torso_Upper = 40};
GlobalArmor[WorkingArmor]["Durability"] = 40;
GlobalArmor[WorkingArmor]["Location"] = "Body";
WorkingArmor = "HCArmorphonebooks";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 20, Torso_Upper = 20};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Neck = 20, Torso_Upper = 20};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 20, Torso_Upper = 20};
GlobalArmor[WorkingArmor]["GlassRes"] = {Neck = 20, Torso_Upper = 20};
GlobalArmor[WorkingArmor]["Durability"] = 20;
GlobalArmor[WorkingArmor]["Location"] = "Body";WorkingArmor = "HCArmorbubblewrap";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Neck = 25, Torso_Upper = 25};
GlobalArmor[WorkingArmor]["BiteRes"] = {Neck = 25, Torso_Upper = 25};
GlobalArmor[WorkingArmor]["Durability"] = 1;
GlobalArmor[WorkingArmor]["Location"] = "Body";-- Leg Armor
WorkingArmor = "HCJeans";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 20, Torso_Lower = 20, UpperLeg_L = 20, UpperLeg_R = 20};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 20, Torso_Lower = 20, UpperLeg_L = 20, UpperLeg_R = 20};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 20, Torso_Lower = 20, UpperLeg_L = 20, UpperLeg_R = 20};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 20, Torso_Lower = 20, UpperLeg_L = 20, UpperLeg_R = 20};
GlobalArmor[WorkingArmor]["Durability"] = 1;
GlobalArmor[WorkingArmor]["Location"] = "Legs";WorkingArmor = "HCLegarmorkevlar";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 50, UpperLeg_R = 50};
GlobalArmor[WorkingArmor]["Durability"] = 100;
GlobalArmor[WorkingArmor]["Location"] = "Legs";WorkingArmor = "HCLegarmorswat";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 50, UpperLeg_R = 50};
GlobalArmor[WorkingArmor]["Durability"] = 90;
GlobalArmor[WorkingArmor]["Location"] = "Legs";WorkingArmor = "HCLegarmorriot";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 50, UpperLeg_R = 50};
GlobalArmor[WorkingArmor]["Durability"] = 80;
GlobalArmor[WorkingArmor]["Location"] = "Legs";WorkingArmor = "HCLegarmorpaintball";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 50, UpperLeg_R = 50};
GlobalArmor[WorkingArmor]["Durability"] = 70;
GlobalArmor[WorkingArmor]["Location"] = "Legs";WorkingArmor = "HCLegarmorchainmail";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 50, UpperLeg_R = 50};
GlobalArmor[WorkingArmor]["Durability"] = 45;
GlobalArmor[WorkingArmor]["Location"] = "Legs";
WorkingArmor = "HCLegarmorscalemail";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 50, UpperLeg_R = 50};
GlobalArmor[WorkingArmor]["Durability"] = 35;
GlobalArmor[WorkingArmor]["Location"] = "Legs";
WorkingArmor = "HCLegarmorlamellar";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 80, Torso_Lower = 80, UpperLeg_L = 80, UpperLeg_R = 80};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 80, Torso_Lower = 80, UpperLeg_L = 80, UpperLeg_R = 80};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 80, Torso_Lower = 80, UpperLeg_L = 80, UpperLeg_R = 80};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 80, Torso_Lower = 80, UpperLeg_L = 80, UpperLeg_R = 80};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 50, UpperLeg_R = 50};
GlobalArmor[WorkingArmor]["Durability"] = 30;
GlobalArmor[WorkingArmor]["Location"] = "Legs";
WorkingArmor = "HCLegarmorsamurai";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 80, Torso_Lower = 80, UpperLeg_L = 80, UpperLeg_R = 80};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 80, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 80};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 80, Torso_Lower = 80, UpperLeg_L = 80, UpperLeg_R = 80};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 80, Torso_Lower = 80, UpperLeg_L = 80, UpperLeg_R = 80};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 50, UpperLeg_R = 50};
GlobalArmor[WorkingArmor]["Durability"] = 35;
GlobalArmor[WorkingArmor]["Location"] = "Legs";
WorkingArmor = "HCLegarmorsteel";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 50, UpperLeg_R = 50};
GlobalArmor[WorkingArmor]["Durability"] = 40;
GlobalArmor[WorkingArmor]["Location"] = "Legs";
WorkingArmor = "HCLegarmoriron";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 50, UpperLeg_R = 50};
GlobalArmor[WorkingArmor]["Durability"] = 30;
GlobalArmor[WorkingArmor]["Location"] = "Legs";WorkingArmor = "HCLegarmorbronze";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 50, UpperLeg_R = 50};
GlobalArmor[WorkingArmor]["Durability"] = 20;
GlobalArmor[WorkingArmor]["Location"] = "Legs";WorkingArmor = "HCLegarmorcopper";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 90, Torso_Lower = 90, UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 50, UpperLeg_R = 50};
GlobalArmor[WorkingArmor]["Durability"] = 10;
GlobalArmor[WorkingArmor]["Location"] = "Legs";
WorkingArmor = "HCLegarmorstuddedleather";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 30, Torso_Lower = 30, UpperLeg_L = 30, UpperLeg_R = 30};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 30, Torso_Lower = 30, UpperLeg_L = 30, UpperLeg_R = 30};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 30, Torso_Lower = 30, UpperLeg_L = 30, UpperLeg_R = 30};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 30, Torso_Lower = 30, UpperLeg_L = 30, UpperLeg_R = 30};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 50, UpperLeg_R = 50};
GlobalArmor[WorkingArmor]["Durability"] = 20;
GlobalArmor[WorkingArmor]["Location"] = "Legs";
WorkingArmor = "HCLegarmorhardenedleather";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 25, Torso_Lower = 25, UpperLeg_L = 25, UpperLeg_R = 25};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 25, Torso_Lower = 25, UpperLeg_L = 25, UpperLeg_R = 25};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 25, Torso_Lower = 25, UpperLeg_L = 25, UpperLeg_R = 25};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 25, Torso_Lower = 25, UpperLeg_L = 25, UpperLeg_R = 25};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 50, UpperLeg_R = 50};
GlobalArmor[WorkingArmor]["Durability"] = 15;
GlobalArmor[WorkingArmor]["Location"] = "Legs";
WorkingArmor = "HCLegarmorleather";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 20, Torso_Lower = 20, UpperLeg_L = 20, UpperLeg_R = 20};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 20, Torso_Lower = 20, UpperLeg_L = 20, UpperLeg_R = 20};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 20, Torso_Lower = 20, UpperLeg_L = 20, UpperLeg_R = 20};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 20, Torso_Lower = 20, UpperLeg_L = 20, UpperLeg_R = 20};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 50, UpperLeg_R = 50};
GlobalArmor[WorkingArmor]["Durability"] = 10;
GlobalArmor[WorkingArmor]["Location"] = "Legs";WorkingArmor = "HCLegarmorhide";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 15, Torso_Lower = 15, UpperLeg_L = 15, UpperLeg_R = 15};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 15, Torso_Lower = 15, UpperLeg_L = 15, UpperLeg_R = 15};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 15, Torso_Lower = 15, UpperLeg_L = 15, UpperLeg_R = 15};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 15, Torso_Lower = 15, UpperLeg_L = 15, UpperLeg_R = 15};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 60, UpperLeg_R = 60};
GlobalArmor[WorkingArmor]["Durability"] = 5;
GlobalArmor[WorkingArmor]["Location"] = "Legs";
WorkingArmor = "HCLegarmorpadded";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 15, Torso_Lower = 15, UpperLeg_L = 15, UpperLeg_R = 15};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 15, Torso_Lower = 15, UpperLeg_L = 15, UpperLeg_R = 15};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 15, Torso_Lower = 15, UpperLeg_L = 15, UpperLeg_R = 15};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 15, Torso_Lower = 15, UpperLeg_L = 15, UpperLeg_R = 15};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 70, UpperLeg_R = 70};
GlobalArmor[WorkingArmor]["Durability"] = 5;
GlobalArmor[WorkingArmor]["Location"] = "Legs";WorkingArmor = "HCLegarmorbone";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 10, Torso_Lower = 10, UpperLeg_L = 10, UpperLeg_R = 10};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 10, Torso_Lower = 10, UpperLeg_L = 10, UpperLeg_R = 10};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 10, Torso_Lower = 10, UpperLeg_L = 10, UpperLeg_R = 10};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 10, Torso_Lower = 10, UpperLeg_L = 10, UpperLeg_R = 10};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 50, UpperLeg_R = 50};
GlobalArmor[WorkingArmor]["Durability"] = 10;
GlobalArmor[WorkingArmor]["Location"] = "Legs";
WorkingArmor = "HCLegarmorlog";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 10, Torso_Lower = 10, UpperLeg_L = 10, UpperLeg_R = 10};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 10, Torso_Lower = 10, UpperLeg_L = 10, UpperLeg_R = 10};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 10, Torso_Lower = 10, UpperLeg_L = 10, UpperLeg_R = 10};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 10, Torso_Lower = 10, UpperLeg_L = 10, UpperLeg_R = 10};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 50, UpperLeg_R = 50};
GlobalArmor[WorkingArmor]["Durability"] = 5;
GlobalArmor[WorkingArmor]["Location"] = "Legs";
WorkingArmor = "HCLegarmortire";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 40, Torso_Lower = 40, UpperLeg_L = 40, UpperLeg_R = 40};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Groin = 40, Torso_Lower = 40, UpperLeg_L = 40, UpperLeg_R = 40};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 40, Torso_Lower = 40, UpperLeg_L = 40, UpperLeg_R = 40};
GlobalArmor[WorkingArmor]["GlassRes"] = {Groin = 40, Torso_Lower = 40, UpperLeg_L = 40, UpperLeg_R = 40};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 80, UpperLeg_R = 80};
GlobalArmor[WorkingArmor]["Durability"] = 40;
GlobalArmor[WorkingArmor]["Location"] = "Legs";WorkingArmor = "HCLegarmorbubblewrap";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Groin = 25, Torso_Lower = 25, UpperLeg_L = 25, UpperLeg_R = 25};
GlobalArmor[WorkingArmor]["BiteRes"] = {Groin = 25, Torso_Lower = 25, UpperLeg_L = 25, UpperLeg_R = 25};
GlobalArmor[WorkingArmor]["FractureRes"] = {UpperLeg_L = 90, UpperLeg_R = 90};
GlobalArmor[WorkingArmor]["Durability"] = 1;
GlobalArmor[WorkingArmor]["Location"] = "Legs";
-- BootsWorkingArmor = "HCBootsteel";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {LowerLeg_L = 90, LowerLeg_R = 90, Foot_L = 90, Foot_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {LowerLeg_L = 90, LowerLeg_R = 90, Foot_L = 90, Foot_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {LowerLeg_L = 90, LowerLeg_R = 90, Foot_L = 90, Foot_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {LowerLeg_L = 90, LowerLeg_R = 90, Foot_L = 90, Foot_R = 90};
GlobalArmor[WorkingArmor]["FractureRes"] = {LowerLeg_L = 50, LowerLeg_R = 50, Foot_L = 50, Foot_R = 50};
GlobalArmor[WorkingArmor]["Durability"] = 40;
GlobalArmor[WorkingArmor]["Location"] = "Feet";WorkingArmor = "HCBootleather";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Foot_L = 20, Foot_R = 20};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Foot_L = 20, Foot_R = 20};
GlobalArmor[WorkingArmor]["BiteRes"] = {Foot_L = 20, Foot_R = 20};
GlobalArmor[WorkingArmor]["GlassRes"] = {Foot_L = 20, Foot_R = 20};
GlobalArmor[WorkingArmor]["Durability"] = 10;
GlobalArmor[WorkingArmor]["Location"] = "Feet";WorkingArmor = "HCBootcombat";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Foot_L = 90, Foot_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Foot_L = 90, Foot_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Foot_L = 90, Foot_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Foot_L = 90, Foot_R = 90};
GlobalArmor[WorkingArmor]["Durability"] = 100;
GlobalArmor[WorkingArmor]["Location"] = "Feet";WorkingArmor = "HCBootriot";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Foot_L = 90, Foot_R = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Foot_L = 90, Foot_R = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Foot_L = 90, Foot_R = 90};
GlobalArmor[WorkingArmor]["GlassRes"] = {Foot_L = 90, Foot_R = 90};
GlobalArmor[WorkingArmor]["Durability"] = 70;
GlobalArmor[WorkingArmor]["Location"] = "Feet";
WorkingArmor = "HCBootconstruction";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Foot_L = 50, Foot_R = 50};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Foot_L = 50, Foot_R = 50};
GlobalArmor[WorkingArmor]["BiteRes"] = {Foot_L = 50, Foot_R = 50};
GlobalArmor[WorkingArmor]["GlassRes"] = {Foot_L = 50, Foot_R = 50};
GlobalArmor[WorkingArmor]["Durability"] = 30;
GlobalArmor[WorkingArmor]["Location"] = "Feet";WorkingArmor = "HCCleats";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Foot_L = 10, Foot_R = 10};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Foot_L = 10, Foot_R = 10};
GlobalArmor[WorkingArmor]["BiteRes"] = {Foot_L = 10, Foot_R = 10};
GlobalArmor[WorkingArmor]["GlassRes"] = {Foot_L = 10, Foot_R = 10};
GlobalArmor[WorkingArmor]["Durability"] = 10;
GlobalArmor[WorkingArmor]["Location"] = "Feet";
WorkingArmor = "HCBootcord";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Foot_L = 10, Foot_R = 10};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Foot_L = 10, Foot_R = 10};
GlobalArmor[WorkingArmor]["BiteRes"] = {Foot_L = 10, Foot_R = 10};
GlobalArmor[WorkingArmor]["GlassRes"] = {Foot_L = 10, Foot_R = 10};
GlobalArmor[WorkingArmor]["Durability"] = 5;
GlobalArmor[WorkingArmor]["Location"] = "Feet";
-- Shields
WorkingArmor = "HCShieldriot";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Hand_L = 90, ForeArm_L = 90, UpperArm_L = 90, Torso_Upper = 90, Torso_Lower = 90, Groin = 90, UpperLeg_L = 90, LowerLeg_L = 90};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Hand_L = 90, ForeArm_L = 90, UpperArm_L = 90, Torso_Upper = 90, Torso_Lower = 90, Groin = 90, UpperLeg_L = 90, LowerLeg_L = 90};
GlobalArmor[WorkingArmor]["BiteRes"] = {Hand_L = 90, ForeArm_L = 90, UpperArm_L = 90, Torso_Upper = 90, Torso_Lower = 90, Groin = 90, UpperLeg_L = 90, LowerLeg_L = 90};
GlobalArmor[WorkingArmor]["BulletRes"] = {Hand_L = 90, ForeArm_L = 90, UpperArm_L = 90, Torso_Upper = 90, Torso_Lower = 90, Groin = 90, UpperLeg_L = 90, LowerLeg_L = 90};
GlobalArmor[WorkingArmor]["Durability"] = 80;
GlobalArmor[WorkingArmor]["Location"] = "Shield";
WorkingArmor = "HCShieldsteel";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Hand_L = 80, ForeArm_L = 80, UpperArm_L = 80, Torso_Upper = 80, Torso_Lower = 80, Groin = 80};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Hand_L = 80, ForeArm_L = 80, UpperArm_L = 80, Torso_Upper = 80, Torso_Lower = 80, Groin = 80};
GlobalArmor[WorkingArmor]["BiteRes"] = {Hand_L = 80, ForeArm_L = 80, UpperArm_L = 80, Torso_Upper = 80, Torso_Lower = 80, Groin = 80};
GlobalArmor[WorkingArmor]["Durability"] = 40;
GlobalArmor[WorkingArmor]["Location"] = "Shield";
WorkingArmor = "HCShieldiron";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Hand_L = 80, ForeArm_L = 80, UpperArm_L = 80, Torso_Upper = 80, Torso_Lower = 80, Groin = 80};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Hand_L = 80, ForeArm_L = 80, UpperArm_L = 80, Torso_Upper = 80, Torso_Lower = 80, Groin = 80};
GlobalArmor[WorkingArmor]["BiteRes"] = {Hand_L = 80, ForeArm_L = 80, UpperArm_L = 80, Torso_Upper = 80, Torso_Lower = 80, Groin = 80};
GlobalArmor[WorkingArmor]["Durability"] = 30;
GlobalArmor[WorkingArmor]["Location"] = "Shield";
WorkingArmor = "HCShieldbronze";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Hand_L = 80, ForeArm_L = 80, UpperArm_L = 80, Torso_Upper = 80, Torso_Lower = 80, Groin = 80};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Hand_L = 80, ForeArm_L = 80, UpperArm_L = 80, Torso_Upper = 80, Torso_Lower = 80, Groin = 80};
GlobalArmor[WorkingArmor]["BiteRes"] = {Hand_L = 80, ForeArm_L = 80, UpperArm_L = 80, Torso_Upper = 80, Torso_Lower = 80, Groin = 80};
GlobalArmor[WorkingArmor]["Durability"] = 20;
GlobalArmor[WorkingArmor]["Location"] = "Shield";
WorkingArmor = "HCShieldcopper";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Hand_L = 80, ForeArm_L = 80, UpperArm_L = 80, Torso_Upper = 80, Torso_Lower = 80, Groin = 80};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Hand_L = 80, ForeArm_L = 80, UpperArm_L = 80, Torso_Upper = 80, Torso_Lower = 80, Groin = 80};
GlobalArmor[WorkingArmor]["BiteRes"] = {Hand_L = 80, ForeArm_L = 80, UpperArm_L = 80, Torso_Upper = 80, Torso_Lower = 80, Groin = 80};
GlobalArmor[WorkingArmor]["Durability"] = 10;
GlobalArmor[WorkingArmor]["Location"] = "Shield";
WorkingArmor = "HCShieldwood";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Hand_L = 80, ForeArm_L = 80, UpperArm_L = 80, Torso_Upper = 80, Torso_Lower = 80, Groin = 80};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Hand_L = 80, ForeArm_L = 80, UpperArm_L = 80, Torso_Upper = 80, Torso_Lower = 80, Groin = 80};
GlobalArmor[WorkingArmor]["BiteRes"] = {Hand_L = 80, ForeArm_L = 80, UpperArm_L = 80, Torso_Upper = 80, Torso_Lower = 80, Groin = 80};
GlobalArmor[WorkingArmor]["Durability"] = 5;
GlobalArmor[WorkingArmor]["Location"] = "Shield";
WorkingArmor = "HCShieldtrashcanlid";
GlobalArmor[WorkingArmor] = {};
GlobalArmor[WorkingArmor]["ScratchRes"] = {Hand_L = 80, ForeArm_L = 80, UpperArm_L = 80, Torso_Upper = 80, Torso_Lower = 80, Groin = 80};
GlobalArmor[WorkingArmor]["DeepWoundRes"] = {Hand_L = 80, ForeArm_L = 80, UpperArm_L = 80, Torso_Upper = 80, Torso_Lower = 80, Groin = 80};
GlobalArmor[WorkingArmor]["BiteRes"] = {Hand_L = 80, ForeArm_L = 80, UpperArm_L = 80, Torso_Upper = 80, Torso_Lower = 80, Groin = 80};
GlobalArmor[WorkingArmor]["Durability"] = 35;
GlobalArmor[WorkingArmor]["Location"] = "Shield";
This way, you wont need if statements for each type all over the place. And will be easy to add more armor.
-
6 minutes ago, Di-Crash said:
I wrote the code that equip and unequip armor without the participation of recipes.
Context menu, check the subject and create options:
MGContextMenu = {};
MGContextMenu.init = function(_player, context, _items)
local player = getSpecificPlayer(_player);
local clickedItems = _items;
if #clickedItems > 1 then
return;
end
for i, item in ipairs(clickedItems) do
if not instanceof(item, "InventoryItem") then
item = item.items[2];
end
if instanceof(item, "InventoryItem") then
MGContextMenu.createMenus(player, context, item);
end
end
endMGContextMenu.createMenus = function(player, context, item)
local itemType = item:getType();
if itemType == "ParamedicHelmet"
or itemType == "MICH2000HelmetUCP"
or itemType == "MICH2000HelmetMulticam"
or itemType == "IOTVUCP"
or itemType == "IOTVMulticam"
or itemType == "TacticalElbowBlack"
or itemType == "TacticalElbowOlive"
or itemType == "TacticalGlovesBlack"
or itemType == "TacticalGlovesOlive"
or itemType == "TacticalKneeBlack"
or itemType == "TacticalKneeOlive"
then
local time = 0
HeadArmor = item:getModData().EquipedHeadArmor;
ChestArmor = item:getModData().EquipedChestArmor;
ArmArmor = item:getModData().EquipedArmArmor;
HandArmor = item:getModData().EquipedHandArmor;
LegArmor = item:getModData().EquipedLegArmor;
FootArmor = item:getModData().EquipedFootArmor;
if itemType == "MICH2000HelmetMulticam" or itemType == "MICH2000HelmetUCP" or itemType == "ParamedicHelmet" then
time = 60
end
if itemType == "IOTVMulticam" or itemType == "IOTVUCP" then
time = 150
end
if itemType == "TacticalElbowOlive" or itemType == "TacticalElbowBlack" then
time = 70
end
if itemType == "TacticalGlovesOlive" or itemType == "TacticalGlovesBlack" then
time = 40
end
if itemType == "TacticalKneeOlive" or itemType == "TacticalKneeBlack" then
time = 80
end
-- if itemType == "" or itemType == "" then
-- time = 90
-- end
if (HeadArmor or ChestArmor or ArmArmor or HandArmor or LegArmor or FootArmor) ~= 1 then
context:addOption(getText("UI_Text_Equip_Armor"), item, MGContextMenu.EquipArmor, player, time);
end
if (HeadArmor or ChestArmor or ArmArmor or HandArmor or LegArmor or FootArmor) == 1 then
context:addOption(getText("UI_Text_Unequip_Armor"), item, MGContextMenu.UnequipArmor, player, time);
end
context:addOption(getText("UI_Text_Inspect_Armor"), item, MGContextMenu.InspectArmor, player, time);
end
endMGContextMenu.EquipArmor = function(item, player, time)
if luautils.haveToBeTransfered(player, item) then
ISTimedActionQueue.add(ISInventoryTransferAction:new(player, item, item:getContainer(), player:getInventory()));
end
ISTimedActionQueue.add(MGEquipArmorAction:new(player, item, time));
endMGContextMenu.UnequipArmor = function(item, player, time)
if luautils.haveToBeTransfered(player, item) then
ISTimedActionQueue.add(ISInventoryTransferAction:new(player, item, item:getContainer(), player:getInventory()));
end
ISTimedActionQueue.add(MGUnequipArmorAction:new(player, item, time));
endMGContextMenu.InspectArmor = function(item, player, time)
if luautils.haveToBeTransfered(player, item) then
ISTimedActionQueue.add(ISInventoryTransferAction:new(player, item, item:getContainer(), player:getInventory()));
end
ISTimedActionQueue.add(MGInspectArmorAction:new(player, item, time));
endEvents.OnFillInventoryObjectContextMenu.Add(MGContextMenu.init);
Time action. Equipping armor on the character:
require "TimedActions/ISBaseTimedAction"
MGEquipArmorAction = ISBaseTimedAction:derive("MGEquipArmorAction");
function MGEquipArmorAction:isValid()
return self.character:getInventory():contains(self.item);
endfunction MGEquipArmorAction:update()
self.item:setJobDelta(self:getJobDelta());
endfunction MGEquipArmorAction:start()
self.item:setJobType(getText("UI_Text_Equip_Armor"));
self.item:setJobDelta(0.0);
endfunction MGEquipArmorAction:stop()
ISBaseTimedAction.stop(self);
self.item:setJobDelta(0.0);
endfunction MGEquipArmorAction:perform()
self.item:getContainer():setDrawDirty(true);
self.item:setJobDelta(0.0);
local itemType = self.item:getType();
local player = self.character;
if itemType == "MICH2000HelmetMulticam" or itemType == "MICH2000HelmetUCP" or itemType == "ParamedicHelmet" then
local EquipedItem = self.item;
local items = player:getInventory():getItems();
for i = 0, items:size()-1 do
local CurrentArmor = items:get(i);
if CurrentArmor:getModData().EquipedHeadArmor == 1 then
CurrentArmor:getModData().EquipedHeadArmor = 0;
end
end
EquipedItem:getModData().EquipedHeadArmor = 1;
EquipOnHead(EquipedItem, player)
end
if itemType == "IOTVMulticam" or itemType == "IOTVUCP" then
local EquipedItem = self.item;
local items = player:getInventory():getItems();
for i = 0, items:size()-1 do
local CurrentArmor = items:get(i);
if CurrentArmor:getModData().EquipedChestArmor == 1 then
CurrentArmor:getModData().EquipedChestArmor = 0;
end
end
EquipedItem:getModData().EquipedChestArmor = 1;
EquipedItem:setActualWeight(EquipedItem:getEquippedWeight());
EquipOnChest(EquipedItem, player)
end
if itemType == "TacticalElbowOlive" or itemType == "TacticalElbowBlack" then
local EquipedItem = self.item;
local items = player:getInventory():getItems();
for i = 0, items:size()-1 do
local CurrentArmor = items:get(i);
if CurrentArmor:getModData().EquipedArmArmor == 1 then
CurrentArmor:getModData().EquipedArmArmor = 0;
end
end
EquipedItem:getModData().EquipedArmArmor = 1;
EquipOnArms(EquipedItem, player)
end
if itemType == "TacticalGlovesOlive" or itemType == "TacticalGlovesBlack" then
local EquipedItem = self.item;
local items = player:getInventory():getItems();
for i = 0, items:size()-1 do
local CurrentArmor = items:get(i);
if CurrentArmor:getModData().EquipedHandArmor == 1 then
CurrentArmor:getModData().EquipedHandArmor = 0;
end
end
EquipedItem:getModData().EquipedHandArmor = 1;
EquipOnHands(EquipedItem, player)
end
if itemType == "TacticalKneeOlive" or itemType == "TacticalKneeBlack" then
local EquipedItem = self.item;
local items = player:getInventory():getItems();
for i = 0, items:size()-1 do
local CurrentArmor = items:get(i);
if CurrentArmor:getModData().EquipedLegArmor == 1 then
CurrentArmor:getModData().EquipedLegArmor = 0;
end
end
EquipedItem:getModData().EquipedLegArmor = 1;
EquipOnLegs(EquipedItem, player)
end
-- if itemType == "" or itemType == "" then
-- local EquipedItem = self.item;
-- local items = player:getInventory():getItems();
-- for i = 0, items:size()-1 do
-- local CurrentArmor = items:get(i);
-- if CurrentArmor:getModData().EquipedFootArmor == 1 then
-- CurrentArmor:getModData().EquipedFootArmor = 0;
-- end
-- end
-- EquipedItem:getModData().EquipedFootArmor = 1;
-- EquipOnFeet(EquipedItem, player)
-- end
-- needed to remove from queue / start next.
ISBaseTimedAction.perform(self);
endfunction MGEquipArmorAction:new(character, item, time)
local o = {}
setmetatable(o, self)
self.__index = self
o.character = character;
o.item = item;
o.stopOnWalk = true;
o.stopOnRun = true;
o.maxTime = time;
return o
endTime action. Removing the armor from the character:
require "TimedActions/ISBaseTimedAction"
MGUnequipArmorAction = ISBaseTimedAction:derive("MGUnequipArmorAction");
function MGUnequipArmorAction:isValid()
return self.character:getInventory():contains(self.item);
endfunction MGUnequipArmorAction:update()
self.item:setJobDelta(self:getJobDelta());
endfunction MGUnequipArmorAction:start()
self.item:setJobType(getText("UI_Text_Unequip_Armor"));
self.item:setJobDelta(0.0);
endfunction MGUnequipArmorAction:stop()
ISBaseTimedAction.stop(self);
self.item:setJobDelta(0.0);
endfunction MGUnequipArmorAction:perform()
self.item:getContainer():setDrawDirty(true);
self.item:setJobDelta(0.0);
local itemType = self.item:getType();
local player = self.character;
if itemType == "MICH2000HelmetMulticam" or itemType == "MICH2000HelmetUCP" or itemType == "ParamedicHelmet" then
local EquipedItem = self.item;
EquipedItem:getModData().EquipedHeadArmor = 0;
end
if itemType == "IOTVMulticam" or itemType == "IOTVUCP" then
local EquipedItem = self.item;
EquipedItem:getModData().EquipedChestArmor = 0;
end
if itemType == "TacticalElbowOlive" or itemType == "TacticalElbowBlack" then
local EquipedItem = self.item;
EquipedItem:getModData().EquipedArmArmor = 0;
end
if itemType == "TacticalGlovesOlive" or itemType == "TacticalGlovesBlack" then
local EquipedItem = self.item;
EquipedItem:getModData().EquipedHandArmor = 0;
end
if itemType == "TacticalKneeOlive" or itemType == "TacticalKneeBlack" then
local EquipedItem = self.item;
EquipedItem:getModData().EquipedLegArmor = 0;
end
-- if itemType == "" or itemType == "" then
-- local EquipedItem = self.item;
-- EquipedItem:getModData().EquipedFootArmor = 0;
-- end
-- needed to remove from queue / start next.
ISBaseTimedAction.perform(self);
endfunction MGUnequipArmorAction:new(character, item, time)
local o = {}
setmetatable(o, self)
self.__index = self
o.character = character;
o.item = item;
o.stopOnWalk = true;
o.stopOnRun = true;
o.maxTime = time;
return o
endTime action. Activating the equipment inspection window:
require "TimedActions/ISBaseTimedAction"
MGInspectArmorAction = ISBaseTimedAction:derive("MGInspectArmorAction");
function MGInspectArmorAction:isValid()
return self.character:getInventory():contains(self.item);
endfunction MGInspectArmorAction:update()
self.item:setJobDelta(self:getJobDelta());
endfunction MGInspectArmorAction:start()
self.item:setJobType(getText("UI_Text_Inspect_Armor"));
self.item:setJobDelta(0.0);
endfunction MGInspectArmorAction:stop()
ISBaseTimedAction.stop(self);
self.item:setJobDelta(0.0);
endfunction MGInspectArmorAction:perform()
self.item:getContainer():setDrawDirty(true);
self.item:setJobDelta(0.0);
local player = self.character;
local item = self.item
ExamineArmor(item, player)
-- needed to remove from queue / start next.
ISBaseTimedAction.perform(self);
endfunction MGInspectArmorAction:new(character, item, time)
local o = {}
setmetatable(o, self)
self.__index = self
o.character = character;
o.item = item;
o.stopOnWalk = true;
o.stopOnRun = true;
o.maxTime = time;
return o
endThe code has not yet been completely completed, lacks some mechanisms, such as checking the weight of the armored armor.
ah i see, those are some nice improvements. But if your going to do that, then it will be best to add the "Location" that the armor goes on (such as head, arms, legs hands etc.) into the armor definitions. Change the armor definitions to a global table rather than just a load function with if. Add me on discord "Nolan" or on steam "nolanritchie" or skype "nolanri" and lets collaborate on these improvements,
-
1 minute ago, Di-Crash said:
Do not see any changes in the code? What changed? You watched my video in which I demostrated the fully equipped and removed armor?
extra param in healbodypart function. healbodypart function altered a fair bit aswell.
i saw your vid in your " This is a victory!!! :))) " post. but i don't understand it, as it is all russian. Ya ne govoryu per russki -
I made some changes to armor, even found and fixed a problem that i made with the recent support for survivors mod. And I tested letting zombies eat away at me with 100% block for a good while. Then ran away and took sleeping pills and slept straight for 2 days. First i did this without Hypochondriac and then did the same with a character with Hypochondriac trait. Neither time did i get sick after the 2 days of sleeping. So here is this updated version of armor.lua
Spoiler--[[
Injury Detection And Armor Based Injury Blocking
By Nolan Ritchie
]]function loadArmorToPlayer(Armor, player)
ArmorSaveBodyDamage(player);
loadArmor(Armor);
endfunction getBodyPartDisplayName(TypeIn)
BPType = tostring(TypeIn);
if(BPType == "Foot_L") then return "Left Foot";
elseif(BPType == "Foot_R") then return "Right Foot";
elseif(BPType == "ForeArm_L") then return "Left Fore Arm";
elseif(BPType == "ForeArm_R") then return "Right Fore Arm";
elseif(BPType == "Hand_L") then return "Left Hand";
elseif(BPType == "Hand_R") then return "Right Hand";
elseif(BPType == "LowerLeg_L") then return "Left Lower Leg";
elseif(BPType == "LowerLeg_R") then return "Right Lower Leg";
elseif(BPType == "Torso_Lower") then return "Lower Torso";
elseif(BPType == "Torso_Upper") then return "Upper Torso";
elseif(BPType == "UpperArm_L") then return "Left Upper Arm";
elseif(BPType == "UpperArm_R") then return "Right Upper Arm";
elseif(BPType == "UpperLeg_L") then return "Left Upper Leg";
elseif(BPType == "UpperLeg_R") then return "Right Upper Leg";
else return BPType;
endend
function ExamineArmor(items, result, player)
for i=0, items:size()-1 do
Armor = items:get(i);
end
loadArmor(Armor);
local out = "Remaining Durability: " .. tostring(Armor:getModData().Durability) .. "\n";
local BPs = player:getBodyDamage():getBodyParts();
for i=0, BPs:size()-1 do
if(Armor:getModData().ScratchRes ~= nil) and (Armor:getModData().ScratchRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().ScratchRes[tostring(BPs:get(i):getType())]).. "%" .. " chance to block Scratches on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().DeepWoundRes ~= nil) and (Armor:getModData().DeepWoundRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().DeepWoundRes[tostring(BPs:get(i):getType())]).. "%" .. " Chance to block to Deep Wounds on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().BiteRes ~= nil) and (Armor:getModData().BiteRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().BiteRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Bites on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().GlassRes ~= nil) and (Armor:getModData().GlassRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().GlassRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Glass on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().FractureRes ~= nil) and (Armor:getModData().FractureRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().FractureRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Fractures on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().BurnRes ~= nil) and (Armor:getModData().BurnRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().BurnRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Burns on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().BulletRes ~= nil) and (Armor:getModData().BulletRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().BulletRes[tostring(BPs:get(i):getType())]).. "%" .. " Chance to block to Bullets on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
end
out = Armor:getDisplayName() .. "\n" .. out;
ArmorWindow:setText(out);
ArmorWindow:setVisible(true);
--player:Say();
endfunction ArmorSaveBodyDamage(player)
player:getModData().ArmorTempBodyDamage = {};
ArmorTempBodyDamage = player:getModData().ArmorTempBodyDamage;
local BD = player:getBodyDamage();
--local InjuryTypes = {0 = "Scratch",1 = "DeepWound", 2 = "Burn", 3 = "BulletRes", 4 = "Fracture", 5 = "Glass"};
ArmorTempBodyDamage["IsInfected"] = BD:IsInfected();
local BPs = BD:getBodyParts();
for i=0, BPs:size()-1 do
ArmorTempBodyDamage[tostring(BPs:get(i):getType())] = {Splint= false, Bandage = false, Bite = false, Scratch = false, DeepWound = false, Burn = false, Bullet = false, Fracture = false, Glass = false};
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Splint"] = BPs:get(i):isSplint();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bandage"] = BPs:get(i):bandaged();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Scratch"] = BPs:get(i):scratched();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["DeepWound"] = BPs:get(i):deepWounded();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Burn"] = BPs:get(i):getBurnTime();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"] = BPs:get(i):haveBullet();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Fracture"] = BPs:get(i):getFractureTime();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"] = BPs:get(i):haveGlass();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bite"] = BPs:get(i):bitten();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["HasInjury"] = BPs:get(i):HasInjury();
end
player:getModData().ArmorBDamageSaved = true;
endfunction tryBlock(BodyPartType, InjuryType, ArmorType, player)
local Armor = player:getInventory():getItemFromType(ArmorType);
if(InjuryType == "Scratch") then
if(Armor:getModData().ScratchRes ~= nil) and (Armor:getModData().ScratchRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().ScratchRes[BodyPartType] );
end
elseif(InjuryType == "DeepWound") then
if((Armor:getModData().DeepWoundRes ~= nil) and Armor:getModData().DeepWoundRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().DeepWoundRes[BodyPartType] );
end
elseif(InjuryType == "Bite") then
if(Armor:getModData().BiteRes ~= nil) and (Armor:getModData().BiteRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().BiteRes[BodyPartType] );
end
elseif(InjuryType == "Fracture") then
if(Armor:getModData().FractureRes ~= nil) and (Armor:getModData().FractureRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().FractureRes[BodyPartType] );
end
elseif(InjuryType == "Burn") then
if(Armor:getModData().BurnRes ~= nil) and (Armor:getModData().BurnRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().BurnRes[BodyPartType] );
end
elseif(InjuryType == "Glass") then
if(Armor:getModData().GlassRes ~= nil) and (Armor:getModData().GlassRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().GlassRes[BodyPartType] );
end
elseif(InjuryType == "Bullet") then
if(Armor:getModData().BulletRes ~= nil) and (Armor:getModData().BulletRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().BulletRes[BodyPartType] );
end
endend
function EquipAsShield(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
if (player:getSecondaryHandItem() == player:getPrimaryHandItem()) then
player:setPrimaryHandItem(nil);
end
player:setSecondaryHandItem(items:get(i));
player:getModData().ShieldArmor = items:get(i):getType();
end
end
function EquipOnHead(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().HeadArmor = items:get(i):getType();
end
end
function EquipOnHands(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().HandArmor = items:get(i):getType();
end
end
function EquipOnArms(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().ArmArmor = items:get(i):getType();
end
end
function EquipOnLegs(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().LegArmor = items:get(i):getType();
end
end
function EquipOnChest(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().ChestArmor = items:get(i):getType();
end
end
function EquipOnFeet(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().FootArmor = items:get(i):getType();
end
endfunction DamageArmor(Armor, player, InjuryType)
local Damage = 1;
if(InjuryType == "Scratch") then
Damage = 1;
elseif(InjuryType == "DeepWound") then
Damage = 3;
elseif(InjuryType == "Bite") then
Damage = 2;
elseif(InjuryType == "Fracture") then
Damage = 3;
elseif(InjuryType == "Burn") then
Damage = 2;
elseif(InjuryType == "Glass") then
Damage = 2;
elseif(InjuryType == "Bullet") then
Damage = 5;
endlocal isBroken = false;
Armor:getModData().Durability = Armor:getModData().Durability - Damage;
if (Armor:getModData().Durability <= 0) then
isBroken = true;
if(Armor:getModData().onBreakTurnInto ~= nil) then
player:Say("adding broken armor" .. Armor:getModData().onBreakTurnInto);
player:getInventory():AddItem(Armor:getModData().onBreakTurnInto);
end
player:getInventory():Remove(Armor);
end
return isBroken;
endfunction wasDamagedBlocked(BodyPartType, InjuryType, player)
if(ArmorTempBodyDamage[tostring(BodyPartType)]["Bandage"] == true) or (ArmorTempBodyDamage[tostring(BodyPartType)]["Splint"] == true) then
return false;
endif(player:getSecondaryHandItem() ~= nil) then
if(player:getModData().ShieldArmor ~= nil) and (player:getSecondaryHandItem():getType() == player:getModData().ShieldArmor) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().ShieldArmor, player) == true) then
if(DamageArmor(player:getInventory():getItemFromType(player:getModData().ShieldArmor),player,InjuryType) == true) then
player:setSecondaryHandItem(nil);
end
return true;
end
end
end
if(player:getModData().HeadArmor ~= nil) and (player:getInventory():contains(player:getModData().HeadArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().HeadArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().HeadArmor),player,InjuryType);
return true;
end
end
if(player:getModData().HandArmor ~= nil) and (player:getInventory():contains(player:getModData().HandArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().HandArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().HandArmor),player,InjuryType);
return true;
end
end
if(player:getModData().ArmArmor ~= nil) and (player:getInventory():contains(player:getModData().ArmArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().ArmArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().ArmArmor),player,InjuryType);
return true;
end
end
if(player:getModData().ChestArmor ~= nil) and (player:getInventory():contains(player:getModData().ChestArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().ChestArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().ChestArmor),player,InjuryType);
return true;
end
end
if(player:getModData().LegArmor ~= nil) and (player:getInventory():contains(player:getModData().LegArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().LegArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().LegArmor),player,InjuryType);
return true;
end
end
if(player:getModData().FootArmor ~= nil) and (player:getInventory():contains(player:getModData().FootArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().FootArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().FootArmor),player,InjuryType);
return true;
end
endreturn false;
endfunction healBodyPart(bodyPart, player, BD, ArmorTempBodyDamage)
bodyPart:SetInfected(false);
bodyPart:setInfectedWound(false);
bodyPart:SetFakeInfected(false);
bodyPart:setWoundInfectionLevel(0);
if(ArmorTempBodyDamage["IsInfected"] == false) and (BD:IsInfected() == true) then
BD:setInf(false); -- remove infection if did not have before the blocked scratch
BD:setInfectionLevel(0);
BD:setInfectionGrowthRate(0);
BD:setFakeInfectionLevel(0);
end
bodyPart:RestoreToFullHealth();
player:Say("!");
sendClientCommand(player, "Armor", "Say", {saythis = "!"});
endfunction ArmorCheckForDamage(player)
local ArmorbInjuryDetected = false;
if(player:getModData().ArmorBDamageSaved ~= nil) and (player ~= nil) then
local BD = player:getBodyDamage();
--local InjuryTypes = {0 = "Scratch",1 = "DeepWound", 2 = "Burn", 3 = "BulletRes", 4 = "Fracture", 5 = "Glass"};
ArmorTempBodyDamage = player:getModData().ArmorTempBodyDamage;
local BPs = BD:getBodyParts();
for i=0, BPs:size()-1 do
if((ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bandage"] == false) and (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["HasInjury"] == false)) then
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Scratch"] ~= BPs:get(i):scratched()) and (BPs:get(i):scratched() == true) then
--player:Say("Scratch Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Scratch", player)) then
healBodyPart(BPs:get(i), player, BD, ArmorTempBodyDamage);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["DeepWound"] ~= BPs:get(i):deepWounded()) and (BPs:get(i):deepWounded() == true) and (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"] ~= true) and (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"] ~= true) then
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"]) or (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"]) then
ArmorbInjuryDetected = true;
else
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "DeepWound", player)) then
healBodyPart(BPs:get(i), player, BD, ArmorTempBodyDamage);
end
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bite"] ~= BPs:get(i):bitten()) and (BPs:get(i):bitten() == true) then
--player:Say("Bite Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Bite", player)) then
healBodyPart(BPs:get(i), player, BD, ArmorTempBodyDamage);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Burn"] ~= BPs:get(i):getBurnTime()) and (BPs:get(i):getBurnTime() ~= 0) then
--player:Say("Burn Detected on ".. tostring(BPs:get(i):getType()) );
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Burn", player)) then
healBodyPart(BPs:get(i), player, BD, ArmorTempBodyDamage);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"] ~= BPs:get(i):haveBullet()) and (BPs:get(i):haveBullet() == true) and (BPs:get(i):deepWounded() == false) then
--player:Say("Lodged Bullets Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Bullet", player)) then
healBodyPart(BPs:get(i), player, BD, ArmorTempBodyDamage);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Fracture"] ~= BPs:get(i):getFractureTime()) and (BPs:get(i):getFractureTime() ~= 0) and (BPs:get(i):isSplint() == false) then
--player:Say("Fracture Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Fracture", player)) then
healBodyPart(BPs:get(i), player, BD, ArmorTempBodyDamage);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"] ~= BPs:get(i):haveGlass()) and (BPs:get(i):haveGlass() == true) and (BPs:get(i):deepWounded() == false) then
--player:Say("Logged Glass Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Glass", player)) then
healBodyPart(BPs:get(i), player, BD, ArmorTempBodyDamage);
end
ArmorbInjuryDetected = true;
end
end
end
end
if(ArmorbInjuryDetected) then
ArmorSaveBodyDamage(player);
end
return ArmorbInjuryDetected;
endfunction ArmorupdateThePlayer(player)
ArmorCheckForDamage(player);
if(player:isLocalPlayer()) then
player:getInventory():Remove("HCEquiparmor");
end
endfunction ArmorInit()
ArmorSaveBodyDamage(getPlayer());
end
function ArmorKeysUp(keynum)
--getPlayer():Say(tostring(keynum));
if keynum == 25 then
local player = getPlayer();
local armorstring = "Currently Equipped Armor \n";
if(player:getModData().ShieldArmor ~= nil) and (player:getSecondaryHandItem() ~= nil) and (player:getSecondaryHandItem():getType() == player:getModData().ShieldArmor) then
armorstring = armorstring .. "Shield: " .. player:getInventory():getItemFromType(player:getModData().ShieldArmor):getDisplayName() .. "\n";
end
if(player:getModData().HeadArmor ~= nil) and (player:getInventory():contains(player:getModData().HeadArmor)) then
armorstring = armorstring .. "Helmet: " .. player:getInventory():getItemFromType(player:getModData().HeadArmor):getDisplayName() .. "\n";
end
if(player:getModData().HandArmor ~= nil) and (player:getInventory():contains(player:getModData().HandArmor)) then
armorstring = armorstring .. "Hands: " .. player:getInventory():getItemFromType(player:getModData().HandArmor):getDisplayName() .. "\n";
end
if(player:getModData().ArmArmor ~= nil) and (player:getInventory():contains(player:getModData().ArmArmor)) then
armorstring = armorstring .. "Arms: " .. player:getInventory():getItemFromType(player:getModData().ArmArmor):getDisplayName() .. "\n";
end
if(player:getModData().LegArmor ~= nil) and (player:getInventory():contains(player:getModData().LegArmor)) then
armorstring = armorstring .. "Legs: " .. player:getInventory():getItemFromType(player:getModData().LegArmor):getDisplayName() .. "\n";
end
if(player:getModData().ChestArmor ~= nil) and (player:getInventory():contains(player:getModData().ChestArmor)) then
armorstring = armorstring .. "Chest: " .. player:getInventory():getItemFromType(player:getModData().ChestArmor):getDisplayName() .. "\n";
end
if(player:getModData().FootArmor ~= nil) and (player:getInventory():contains(player:getModData().FootArmor)) then
armorstring = armorstring .. "Feet: " .. player:getInventory():getItemFromType(player:getModData().FootArmor):getDisplayName() .. "\n";
end
ArmorWindow:setText(armorstring);
ArmorWindow:setVisible(true);
end
endEvents.OnKeyPressed.Add(ArmorKeysUp);
Events.OnPlayerUpdate.Add(ArmorupdateThePlayer);
Events.OnGameStart.Add(ArmorInit); -
In My Garage
in News
1 minute ago, Lexx2k said:I've mentioned this already in another thread. There needs to be some mechanic in place to take care of this. E.g. if zombies can't get past vehicles, there is nothing hindering me from building a car wall around my house and then calling it a day.
Also the news update makes it appear to me as if cars are really good to go as of now. Is this just a false impression a la animation updates or can we really expect cars "in the sooner future"?
Well this problem already kind of exists. There are some fenced off areas you can climb into with stairs that zombies cannot destroy. It would likely be a lot harder to build a car wall around your base than going to one of these fenced off areas. Also it would be very hard for you to get in and out without messing up your car wall. way more troublesome than the simple sheet rope option you can do at these fenced off areas.
But still for realism sake, blocking things with cars should be an option that has usefulness. But also need to balance realism with Gameplay as always. Perhaps when zombies bang on vehicles, the vehicles could move ever so slightly so that if they are banging on them for long enough they would eventually move enough to create space in-between.
-
In My Garage
in News
it should be interesting using cars to block off zombies.
-
try letting only 1 zombie attack you and see if it can happen. Maybe something to do with being hit twice at the same time.
-
12 minutes ago, Di-Crash said:
interesting. I have a hunch. try this code:
armor.lua
Spoiler--[[
Injury Detection And Armor Based Injury Blocking
By Nolan Ritchie
]]function loadArmorToPlayer(Armor, player)
ArmorSaveBodyDamage(player);
loadArmor(Armor);
endfunction getBodyPartDisplayName(TypeIn)
BPType = tostring(TypeIn);
if(BPType == "Foot_L") then return "Left Foot";
elseif(BPType == "Foot_R") then return "Right Foot";
elseif(BPType == "ForeArm_L") then return "Left Fore Arm";
elseif(BPType == "ForeArm_R") then return "Right Fore Arm";
elseif(BPType == "Hand_L") then return "Left Hand";
elseif(BPType == "Hand_R") then return "Right Hand";
elseif(BPType == "LowerLeg_L") then return "Left Lower Leg";
elseif(BPType == "LowerLeg_R") then return "Right Lower Leg";
elseif(BPType == "Torso_Lower") then return "Lower Torso";
elseif(BPType == "Torso_Upper") then return "Upper Torso";
elseif(BPType == "UpperArm_L") then return "Left Upper Arm";
elseif(BPType == "UpperArm_R") then return "Right Upper Arm";
elseif(BPType == "UpperLeg_L") then return "Left Upper Leg";
elseif(BPType == "UpperLeg_R") then return "Right Upper Leg";
else return BPType;
endend
function ExamineArmor(items, result, player)
for i=0, items:size()-1 do
Armor = items:get(i);
end
loadArmor(Armor);
local out = "Remaining Durability: " .. tostring(Armor:getModData().Durability) .. "\n";
local BPs = player:getBodyDamage():getBodyParts();
for i=0, BPs:size()-1 do
if(Armor:getModData().ScratchRes ~= nil) and (Armor:getModData().ScratchRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().ScratchRes[tostring(BPs:get(i):getType())]).. "%" .. " chance to block Scratches on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().DeepWoundRes ~= nil) and (Armor:getModData().DeepWoundRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().DeepWoundRes[tostring(BPs:get(i):getType())]).. "%" .. " Chance to block to Deep Wounds on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().BiteRes ~= nil) and (Armor:getModData().BiteRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().BiteRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Bites on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().GlassRes ~= nil) and (Armor:getModData().GlassRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().GlassRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Glass on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().FractureRes ~= nil) and (Armor:getModData().FractureRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().FractureRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Fractures on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().BurnRes ~= nil) and (Armor:getModData().BurnRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().BurnRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Burns on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().BulletRes ~= nil) and (Armor:getModData().BulletRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().BulletRes[tostring(BPs:get(i):getType())]).. "%" .. " Chance to block to Bullets on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
end
out = Armor:getDisplayName() .. "\n" .. out;
ArmorWindow:setText(out);
ArmorWindow:setVisible(true);
--player:Say();
endfunction ArmorSaveBodyDamage(player)
player:getModData().ArmorTempBodyDamage = {};
ArmorTempBodyDamage = player:getModData().ArmorTempBodyDamage;
local BD = player:getBodyDamage();
--local InjuryTypes = {0 = "Scratch",1 = "DeepWound", 2 = "Burn", 3 = "BulletRes", 4 = "Fracture", 5 = "Glass"};
ArmorTempBodyDamage["IsInfected"] = BD:IsInfected();
local BPs = BD:getBodyParts();
for i=0, BPs:size()-1 do
ArmorTempBodyDamage[tostring(BPs:get(i):getType())] = {Splint= false, Bandage = false, Bite = false, Scratch = false, DeepWound = false, Burn = false, Bullet = false, Fracture = false, Glass = false};
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Splint"] = BPs:get(i):isSplint();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bandage"] = BPs:get(i):bandaged();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Scratch"] = BPs:get(i):scratched();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["DeepWound"] = BPs:get(i):deepWounded();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Burn"] = BPs:get(i):getBurnTime();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"] = BPs:get(i):haveBullet();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Fracture"] = BPs:get(i):getFractureTime();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"] = BPs:get(i):haveGlass();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bite"] = BPs:get(i):bitten();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["HasInjury"] = BPs:get(i):HasInjury();
end
player:getModData().ArmorBDamageSaved = true;
endfunction tryBlock(BodyPartType, InjuryType, ArmorType, player)
local Armor = player:getInventory():getItemFromType(ArmorType);
if(InjuryType == "Scratch") then
if(Armor:getModData().ScratchRes ~= nil) and (Armor:getModData().ScratchRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().ScratchRes[BodyPartType] );
end
elseif(InjuryType == "DeepWound") then
if((Armor:getModData().DeepWoundRes ~= nil) and Armor:getModData().DeepWoundRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().DeepWoundRes[BodyPartType] );
end
elseif(InjuryType == "Bite") then
if(Armor:getModData().BiteRes ~= nil) and (Armor:getModData().BiteRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().BiteRes[BodyPartType] );
end
elseif(InjuryType == "Fracture") then
if(Armor:getModData().FractureRes ~= nil) and (Armor:getModData().FractureRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().FractureRes[BodyPartType] );
end
elseif(InjuryType == "Burn") then
if(Armor:getModData().BurnRes ~= nil) and (Armor:getModData().BurnRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().BurnRes[BodyPartType] );
end
elseif(InjuryType == "Glass") then
if(Armor:getModData().GlassRes ~= nil) and (Armor:getModData().GlassRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().GlassRes[BodyPartType] );
end
elseif(InjuryType == "Bullet") then
if(Armor:getModData().BulletRes ~= nil) and (Armor:getModData().BulletRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().BulletRes[BodyPartType] );
end
endend
function EquipAsShield(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
if (player:getSecondaryHandItem() == player:getPrimaryHandItem()) then
player:setPrimaryHandItem(nil);
end
player:setSecondaryHandItem(items:get(i));
player:getModData().ShieldArmor = items:get(i):getType();
end
end
function EquipOnHead(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().HeadArmor = items:get(i):getType();
end
end
function EquipOnHands(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().HandArmor = items:get(i):getType();
end
end
function EquipOnArms(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().ArmArmor = items:get(i):getType();
end
end
function EquipOnLegs(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().LegArmor = items:get(i):getType();
end
end
function EquipOnChest(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().ChestArmor = items:get(i):getType();
end
end
function EquipOnFeet(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().FootArmor = items:get(i):getType();
end
endfunction DamageArmor(Armor, player, InjuryType)
local Damage = 1;
if(InjuryType == "Scratch") then
Damage = 1;
elseif(InjuryType == "DeepWound") then
Damage = 3;
elseif(InjuryType == "Bite") then
Damage = 2;
elseif(InjuryType == "Fracture") then
Damage = 3;
elseif(InjuryType == "Burn") then
Damage = 2;
elseif(InjuryType == "Glass") then
Damage = 2;
elseif(InjuryType == "Bullet") then
Damage = 5;
endlocal isBroken = false;
Armor:getModData().Durability = Armor:getModData().Durability - Damage;
if (Armor:getModData().Durability <= 0) then
isBroken = true;
if(Armor:getModData().onBreakTurnInto ~= nil) then
player:Say("adding broken armor" .. Armor:getModData().onBreakTurnInto);
player:getInventory():AddItem(Armor:getModData().onBreakTurnInto);
end
player:getInventory():Remove(Armor);
end
return isBroken;
endfunction wasDamagedBlocked(BodyPartType, InjuryType, player)
if(ArmorTempBodyDamage[tostring(BodyPartType)]["Bandage"] == true) or (ArmorTempBodyDamage[tostring(BodyPartType)]["Splint"] == true) then
return false;
endif(player:getSecondaryHandItem() ~= nil) then
if(player:getModData().ShieldArmor ~= nil) and (player:getSecondaryHandItem():getType() == player:getModData().ShieldArmor) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().ShieldArmor, player) == true) then
if(DamageArmor(player:getInventory():getItemFromType(player:getModData().ShieldArmor),player,InjuryType) == true) then
player:setSecondaryHandItem(nil);
end
return true;
end
end
end
if(player:getModData().HeadArmor ~= nil) and (player:getInventory():contains(player:getModData().HeadArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().HeadArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().HeadArmor),player,InjuryType);
return true;
end
end
if(player:getModData().HandArmor ~= nil) and (player:getInventory():contains(player:getModData().HandArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().HandArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().HandArmor),player,InjuryType);
return true;
end
end
if(player:getModData().ArmArmor ~= nil) and (player:getInventory():contains(player:getModData().ArmArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().ArmArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().ArmArmor),player,InjuryType);
return true;
end
end
if(player:getModData().ChestArmor ~= nil) and (player:getInventory():contains(player:getModData().ChestArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().ChestArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().ChestArmor),player,InjuryType);
return true;
end
end
if(player:getModData().LegArmor ~= nil) and (player:getInventory():contains(player:getModData().LegArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().LegArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().LegArmor),player,InjuryType);
return true;
end
end
if(player:getModData().FootArmor ~= nil) and (player:getInventory():contains(player:getModData().FootArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().FootArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().FootArmor),player,InjuryType);
return true;
end
endreturn false;
endfunction healBodyPart(bodyPart, player, BD)
bodyPart:SetInfected(false);
bodyPart:setInfectedWound(false);
bodyPart:SetFakeInfected(false);
bodyPart:setWoundInfectionLevel(0);
if(ArmorTempBodyDamage["IsInfected"] == false) and (BD:IsInfected() == true) then
BD:setInf(false); -- remove infection if did not have before the blocked scratch
BD:setInfectionLevel(0);
BD:setInfectionGrowthRate(0);
BD:setIsFakeInfected(false);
end
bodyPart:RestoreToFullHealth();
bodyPart:DamageUpdate() ;
player:Say("!");
sendClientCommand(player, "Armor", "Say", {saythis = "!"});
endfunction ArmorCheckForDamage(player)
local ArmorbInjuryDetected = false;
if(player:getModData().ArmorBDamageSaved ~= nil) and (player ~= nil) then
local BD = player:getBodyDamage();
--local InjuryTypes = {0 = "Scratch",1 = "DeepWound", 2 = "Burn", 3 = "BulletRes", 4 = "Fracture", 5 = "Glass"};
ArmorTempBodyDamage = player:getModData().ArmorTempBodyDamage;
local BPs = BD:getBodyParts();
for i=0, BPs:size()-1 do
if((ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bandage"] == false) and (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["HasInjury"] == false)) then
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Scratch"] ~= BPs:get(i):scratched()) and (BPs:get(i):scratched() == true) then
--player:Say("Scratch Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Scratch", player)) then
healBodyPart(BPs:get(i), player, BD);
else
ArmorbInjuryDetected = true;
end
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["DeepWound"] ~= BPs:get(i):deepWounded()) and (BPs:get(i):deepWounded() == true) and (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"] ~= true) and (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"] ~= true) then
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"]) or (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"]) then
ArmorbInjuryDetected = true;
else
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "DeepWound", player)) then
healBodyPart(BPs:get(i), player, BD);
else
ArmorbInjuryDetected = true;
end
end
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bite"] ~= BPs:get(i):bitten()) and (BPs:get(i):bitten() == true) then
--player:Say("Bite Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Bite", player)) then
healBodyPart(BPs:get(i), player, BD);
else
ArmorbInjuryDetected = true;
end
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Burn"] ~= BPs:get(i):getBurnTime()) and (BPs:get(i):getBurnTime() ~= 0) then
--player:Say("Burn Detected on ".. tostring(BPs:get(i):getType()) );
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Burn", player)) then
healBodyPart(BPs:get(i), player, BD);
else
ArmorbInjuryDetected = true;
end
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"] ~= BPs:get(i):haveBullet()) and (BPs:get(i):haveBullet() == true) and (BPs:get(i):deepWounded() == false) then
--player:Say("Lodged Bullets Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Bullet", player)) then
healBodyPart(BPs:get(i), player, BD);
else
ArmorbInjuryDetected = true;
end
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Fracture"] ~= BPs:get(i):getFractureTime()) and (BPs:get(i):getFractureTime() ~= 0) and (BPs:get(i):isSplint() == false) then
--player:Say("Fracture Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Fracture", player)) then
healBodyPart(BPs:get(i), player, BD);
else
ArmorbInjuryDetected = true;
end
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"] ~= BPs:get(i):haveGlass()) and (BPs:get(i):haveGlass() == true) and (BPs:get(i):deepWounded() == false) then
--player:Say("Logged Glass Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Glass", player)) then
healBodyPart(BPs:get(i), player, BD);
else
ArmorbInjuryDetected = true;
end
end
end
end
end
if(ArmorbInjuryDetected) then
ArmorSaveBodyDamage(player);
end
return ArmorbInjuryDetected;
endfunction ArmorupdateThePlayer(player)
ArmorCheckForDamage(player);
if(player:isLocalPlayer()) then
player:getInventory():Remove("HCEquiparmor");
end
endfunction ArmorInit()
ArmorSaveBodyDamage(getPlayer());
end
function ArmorKeysUp(keynum)
--getPlayer():Say(tostring(keynum));
if keynum == 25 then
local player = getPlayer();
local armorstring = "Currently Equipped Armor \n";
if(player:getModData().ShieldArmor ~= nil) and (player:getSecondaryHandItem() ~= nil) and (player:getSecondaryHandItem():getType() == player:getModData().ShieldArmor) then
armorstring = armorstring .. "Shield: " .. player:getInventory():getItemFromType(player:getModData().ShieldArmor):getDisplayName() .. "\n";
end
if(player:getModData().HeadArmor ~= nil) and (player:getInventory():contains(player:getModData().HeadArmor)) then
armorstring = armorstring .. "Helmet: " .. player:getInventory():getItemFromType(player:getModData().HeadArmor):getDisplayName() .. "\n";
end
if(player:getModData().HandArmor ~= nil) and (player:getInventory():contains(player:getModData().HandArmor)) then
armorstring = armorstring .. "Hands: " .. player:getInventory():getItemFromType(player:getModData().HandArmor):getDisplayName() .. "\n";
end
if(player:getModData().ArmArmor ~= nil) and (player:getInventory():contains(player:getModData().ArmArmor)) then
armorstring = armorstring .. "Arms: " .. player:getInventory():getItemFromType(player:getModData().ArmArmor):getDisplayName() .. "\n";
end
if(player:getModData().LegArmor ~= nil) and (player:getInventory():contains(player:getModData().LegArmor)) then
armorstring = armorstring .. "Legs: " .. player:getInventory():getItemFromType(player:getModData().LegArmor):getDisplayName() .. "\n";
end
if(player:getModData().ChestArmor ~= nil) and (player:getInventory():contains(player:getModData().ChestArmor)) then
armorstring = armorstring .. "Chest: " .. player:getInventory():getItemFromType(player:getModData().ChestArmor):getDisplayName() .. "\n";
end
if(player:getModData().FootArmor ~= nil) and (player:getInventory():contains(player:getModData().FootArmor)) then
armorstring = armorstring .. "Feet: " .. player:getInventory():getItemFromType(player:getModData().FootArmor):getDisplayName() .. "\n";
end
ArmorWindow:setText(armorstring);
ArmorWindow:setVisible(true);
end
endEvents.OnKeyPressed.Add(ArmorKeysUp);
Events.OnPlayerUpdate.Add(ArmorupdateThePlayer);
Events.OnGameStart.Add(ArmorInit); -
works for me man, i used this for test:
Spoilerif(Armor:getType() == "LeatherGloves") then
Armor:getModData().ScratchRes = { Hand_L = 100, Hand_R = 100, ForeArm_L = 100, ForeArm_R = 100, UpperArm_L = 100, UpperArm_R = 100, Torso_Upper = 100, Torso_Lower = 100, Groin = 100, Head = 100, Neck = 100, LowerLeg_L = 100, LowerLeg_L = 100, LowerLeg_R = 100, LowerLeg_R = 100, Foot_L = 100, Foot_R = 100} ;
Armor:getModData().DeepWoundRes = {Hand_L = 100, Hand_R = 100, ForeArm_L = 100, ForeArm_R = 100, UpperArm_L = 100, UpperArm_R = 100, Torso_Upper = 100, Torso_Lower = 100, Groin = 100, Head = 100, Neck = 100, LowerLeg_L = 100, LowerLeg_L = 100, LowerLeg_R = 100, LowerLeg_R = 100, Foot_L = 100, Foot_R = 100} ;
Armor:getModData().BiteRes = { Hand_L = 100, Hand_R = 100, ForeArm_L = 100, ForeArm_R = 100, UpperArm_L = 100, UpperArm_R = 100, Torso_Upper = 100, Torso_Lower = 100, Groin = 100, Head = 100, Neck = 100, LowerLeg_L = 100, LowerLeg_L = 100, LowerLeg_R = 100, LowerLeg_R = 100, Foot_L = 100, Foot_R = 100} ;
Armor:getModData().GlassRes = {Hand_L = 100, Hand_R = 100, ForeArm_L = 100, ForeArm_R = 100, UpperArm_L = 100, UpperArm_R = 100, Torso_Upper = 100, Torso_Lower = 100, Groin = 100, Head = 100, Neck = 100, LowerLeg_L = 100, LowerLeg_L = 100, LowerLeg_R = 100, LowerLeg_R = 100, Foot_L = 100, Foot_R = 100};
Armor:getModData().BulletRes = {Hand_L = 100, Hand_R = 100, ForeArm_L = 100, ForeArm_R = 100, UpperArm_L = 100, UpperArm_R = 100, Torso_Upper = 100, Torso_Lower = 100, Groin = 100, Head = 100, Neck = 100, LowerLeg_L = 100, LowerLeg_L = 100, LowerLeg_R = 100, LowerLeg_R = 100, Foot_L = 100, Foot_R = 100};
Armor:getModData().Durability = 1000;
leather gloves with 100% block everything on every body part. I let zombies attack me for 24 in game hours. did not get any scratch or bite. only PUNCHES. which lower hp but do not cause INJURY -
are you saying Injuries still happened? as in, you were bitten on a body part with 100% block bite? Note: Bandaged or bodyparts with injuries cannot be blocked. I had to remove that due to an exploitation.
-
3 minutes ago, Di-Crash said:
By the way about the attacks of a lot of zombies, it can happen so that even such armor will not save from a bite, it seems some damage slips between the frames.
zombie "Punches" do not cause injury, only loss of hp and are therefore not blocked.
-
3 minutes ago, Di-Crash said:
I think the problem is that you used an integer rather than a fractional one, I checked the command RestoreToFullHealth() in BodyDamage.class it uses this value to cure the infection. I tried to let the zombie bite myself and track the infection through the print command when it happened. I died naturally and the character did not become a zombie. This means that the path to recovery is in setInfectionLevel (0.0)
try it with setInfectionLevel (0)
that will work too. its the same thing.
the problem we are trying to solve here has to do with the Hypochondriac trait. I just happened to RE-introduce an old problem WHILE TRYING to fix the Hypochondriac trait problem.
-
18 hours ago, Di-Crash said:
I'm sure you don't have the full history of armor revisions and bug reports in mind so...
This is what it Used to be for a long time until about 1 month ago:
Spoilerfunction healBodyPart(bodyPart, player, BD)
bodyPart:SetInfected(false);
bodyPart:setInfectedWound(false);
bodyPart:SetFakeInfected(false);
bodyPart:setWoundInfectionLevel(0);
if(ArmorTempBodyDamage["IsInfected"] == false) and (BD:IsInfected() == true) then
BD:setInf(false); -- remove infection if did not have before the blocked scratch
BD:setInfectionLevel(0);
end
bodyPart:RestoreToFullHealth();
bodyPart:DamageUpdate() ;
player:Say("!");
sendClientCommand(player, "Armor", "Say", {saythis = "!"});
endWith the above there was definitely no problem of health loss after blocking. I let zombies attack me with 100% block for 24 in game hours, then waited 24 more hours to see if i got sick or lost hp and no.
BUT people then complained that character with Hemphobiac trait, would start to "get sick" like zombification sick. not same hp loss with no symptoms like before. They would get sick and slowly die. As a response to this report I thought i'd try this:Spoilerfunction healBodyPart(bodyPart, player, BD)
bodyPart:SetInfected(false);
bodyPart:setInfectedWound(false);
bodyPart:SetFakeInfected(false);
b̶o̶d̶y̶P̶a̶r̶t̶:̶s̶e̶t̶W̶o̶u̶n̶d̶I̶n̶f̶e̶c̶t̶i̶o̶n̶L̶e̶v̶e̶l̶(̶0̶)̶;̶
if(ArmorTempBodyDamage["IsInfected"] == false) and (BD:IsInfected() == true) then
BD:setInf(false); -- remove infection if did not have before the blocked scratch
̶B̶D̶:̶s̶e̶t̶I̶n̶f̶e̶c̶t̶i̶o̶n̶L̶e̶v̶e̶l̶(̶0̶)̶;̶
end
bodyPart:RestoreToFullHealth();
bodyPart:DamageUpdate() ;
player:Say("!");
sendClientCommand(player, "Armor", "Say", {saythis = "!"});
endI'm not really sure what Hemphobiac trait even does but I figured since the getting sick problem only happens to those with it,
But with the immediate above, the slow hp loss after blocking has returned. Since i'm quite sure the old slow hp loss thing is not hp loss from zombification, (because it would happen from any zombie injury block, and only 25% of zombie inflicted injuries should cause zombification.) so I figured that it must be the body part (infection) set to 0 (The line that you added) might be initiating the infection for people with hemphobiac trait.
but I looked in the bodydamage.class and i dont think that is the problem.
therefore if I had to guess, so maybe lets try this:Spoilerfunction healBodyPart(bodyPart, player, BD)
bodyPart:SetInfected(false);
bodyPart:setInfectedWound(false);
bodyPart:SetFakeInfected(false);
bodyPart:setWoundInfectionLevel(0);
if(ArmorTempBodyDamage["IsInfected"] == false) and (BD:IsInfected() == true) then
BD:setInf(false); -- remove infection if did not have before the blocked scratch
BD:setInfectionLevel(0);
BD:setInfectionGrowthRate(0);
BD:setIsFakeInfected(false);
end
bodyPart:RestoreToFullHealth();
bodyPart:DamageUpdate() ;
player:Say("!");
sendClientCommand(player, "Armor", "Say", {saythis = "!"});
endFull Armor.lua file code:
Spoiler--[[
Injury Detection And Armor Based Injury Blocking
By Nolan Ritchie
]]function loadArmorToPlayer(Armor, player)
ArmorSaveBodyDamage(player);
loadArmor(Armor);
endfunction getBodyPartDisplayName(TypeIn)
BPType = tostring(TypeIn);
if(BPType == "Foot_L") then return "Left Foot";
elseif(BPType == "Foot_R") then return "Right Foot";
elseif(BPType == "ForeArm_L") then return "Left Fore Arm";
elseif(BPType == "ForeArm_R") then return "Right Fore Arm";
elseif(BPType == "Hand_L") then return "Left Hand";
elseif(BPType == "Hand_R") then return "Right Hand";
elseif(BPType == "LowerLeg_L") then return "Left Lower Leg";
elseif(BPType == "LowerLeg_R") then return "Right Lower Leg";
elseif(BPType == "Torso_Lower") then return "Lower Torso";
elseif(BPType == "Torso_Upper") then return "Upper Torso";
elseif(BPType == "UpperArm_L") then return "Left Upper Arm";
elseif(BPType == "UpperArm_R") then return "Right Upper Arm";
elseif(BPType == "UpperLeg_L") then return "Left Upper Leg";
elseif(BPType == "UpperLeg_R") then return "Right Upper Leg";
else return BPType;
endend
function ExamineArmor(items, result, player)
for i=0, items:size()-1 do
Armor = items:get(i);
end
loadArmor(Armor);
local out = "Remaining Durability: " .. tostring(Armor:getModData().Durability) .. "\n";
local BPs = player:getBodyDamage():getBodyParts();
for i=0, BPs:size()-1 do
if(Armor:getModData().ScratchRes ~= nil) and (Armor:getModData().ScratchRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().ScratchRes[tostring(BPs:get(i):getType())]).. "%" .. " chance to block Scratches on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().DeepWoundRes ~= nil) and (Armor:getModData().DeepWoundRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().DeepWoundRes[tostring(BPs:get(i):getType())]).. "%" .. " Chance to block to Deep Wounds on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().BiteRes ~= nil) and (Armor:getModData().BiteRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().BiteRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Bites on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().GlassRes ~= nil) and (Armor:getModData().GlassRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().GlassRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Glass on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().FractureRes ~= nil) and (Armor:getModData().FractureRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().FractureRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Fractures on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().BurnRes ~= nil) and (Armor:getModData().BurnRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().BurnRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Burns on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().BulletRes ~= nil) and (Armor:getModData().BulletRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().BulletRes[tostring(BPs:get(i):getType())]).. "%" .. " Chance to block to Bullets on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
end
out = Armor:getDisplayName() .. "\n" .. out;
ArmorWindow:setText(out);
ArmorWindow:setVisible(true);
--player:Say();
endfunction ArmorSaveBodyDamage(player)
player:getModData().ArmorTempBodyDamage = {};
ArmorTempBodyDamage = player:getModData().ArmorTempBodyDamage;
local BD = player:getBodyDamage();
--local InjuryTypes = {0 = "Scratch",1 = "DeepWound", 2 = "Burn", 3 = "BulletRes", 4 = "Fracture", 5 = "Glass"};
ArmorTempBodyDamage["IsInfected"] = BD:IsInfected();
local BPs = BD:getBodyParts();
for i=0, BPs:size()-1 do
ArmorTempBodyDamage[tostring(BPs:get(i):getType())] = {Splint= false, Bandage = false, Bite = false, Scratch = false, DeepWound = false, Burn = false, Bullet = false, Fracture = false, Glass = false};
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Splint"] = BPs:get(i):isSplint();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bandage"] = BPs:get(i):bandaged();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Scratch"] = BPs:get(i):scratched();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["DeepWound"] = BPs:get(i):deepWounded();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Burn"] = BPs:get(i):getBurnTime();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"] = BPs:get(i):haveBullet();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Fracture"] = BPs:get(i):getFractureTime();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"] = BPs:get(i):haveGlass();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bite"] = BPs:get(i):bitten();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["HasInjury"] = BPs:get(i):HasInjury();
end
player:getModData().ArmorBDamageSaved = true;
endfunction tryBlock(BodyPartType, InjuryType, ArmorType, player)
local Armor = player:getInventory():getItemFromType(ArmorType);
if(InjuryType == "Scratch") then
if(Armor:getModData().ScratchRes ~= nil) and (Armor:getModData().ScratchRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().ScratchRes[BodyPartType] );
end
elseif(InjuryType == "DeepWound") then
if((Armor:getModData().DeepWoundRes ~= nil) and Armor:getModData().DeepWoundRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().DeepWoundRes[BodyPartType] );
end
elseif(InjuryType == "Bite") then
if(Armor:getModData().BiteRes ~= nil) and (Armor:getModData().BiteRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().BiteRes[BodyPartType] );
end
elseif(InjuryType == "Fracture") then
if(Armor:getModData().FractureRes ~= nil) and (Armor:getModData().FractureRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().FractureRes[BodyPartType] );
end
elseif(InjuryType == "Burn") then
if(Armor:getModData().BurnRes ~= nil) and (Armor:getModData().BurnRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().BurnRes[BodyPartType] );
end
elseif(InjuryType == "Glass") then
if(Armor:getModData().GlassRes ~= nil) and (Armor:getModData().GlassRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().GlassRes[BodyPartType] );
end
elseif(InjuryType == "Bullet") then
if(Armor:getModData().BulletRes ~= nil) and (Armor:getModData().BulletRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().BulletRes[BodyPartType] );
end
endend
function EquipAsShield(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
if (player:getSecondaryHandItem() == player:getPrimaryHandItem()) then
player:setPrimaryHandItem(nil);
end
player:setSecondaryHandItem(items:get(i));
player:getModData().ShieldArmor = items:get(i):getType();
end
end
function EquipOnHead(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().HeadArmor = items:get(i):getType();
end
end
function EquipOnHands(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().HandArmor = items:get(i):getType();
end
end
function EquipOnArms(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().ArmArmor = items:get(i):getType();
end
end
function EquipOnLegs(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().LegArmor = items:get(i):getType();
end
end
function EquipOnChest(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().ChestArmor = items:get(i):getType();
end
end
function EquipOnFeet(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().FootArmor = items:get(i):getType();
end
endfunction DamageArmor(Armor, player, InjuryType)
local Damage = 1;
if(InjuryType == "Scratch") then
Damage = 1;
elseif(InjuryType == "DeepWound") then
Damage = 3;
elseif(InjuryType == "Bite") then
Damage = 2;
elseif(InjuryType == "Fracture") then
Damage = 3;
elseif(InjuryType == "Burn") then
Damage = 2;
elseif(InjuryType == "Glass") then
Damage = 2;
elseif(InjuryType == "Bullet") then
Damage = 5;
endlocal isBroken = false;
Armor:getModData().Durability = Armor:getModData().Durability - Damage;
if (Armor:getModData().Durability <= 0) then
isBroken = true;
if(Armor:getModData().onBreakTurnInto ~= nil) then
player:Say("adding broken armor" .. Armor:getModData().onBreakTurnInto);
player:getInventory():AddItem(Armor:getModData().onBreakTurnInto);
end
player:getInventory():Remove(Armor);
end
return isBroken;
endfunction wasDamagedBlocked(BodyPartType, InjuryType, player)
if(ArmorTempBodyDamage[tostring(BodyPartType)]["Bandage"] == true) or (ArmorTempBodyDamage[tostring(BodyPartType)]["Splint"] == true) then
return false;
endif(player:getSecondaryHandItem() ~= nil) then
if(player:getModData().ShieldArmor ~= nil) and (player:getSecondaryHandItem():getType() == player:getModData().ShieldArmor) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().ShieldArmor, player) == true) then
if(DamageArmor(player:getInventory():getItemFromType(player:getModData().ShieldArmor),player,InjuryType) == true) then
player:setSecondaryHandItem(nil);
end
return true;
end
end
end
if(player:getModData().HeadArmor ~= nil) and (player:getInventory():contains(player:getModData().HeadArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().HeadArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().HeadArmor),player,InjuryType);
return true;
end
end
if(player:getModData().HandArmor ~= nil) and (player:getInventory():contains(player:getModData().HandArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().HandArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().HandArmor),player,InjuryType);
return true;
end
end
if(player:getModData().ArmArmor ~= nil) and (player:getInventory():contains(player:getModData().ArmArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().ArmArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().ArmArmor),player,InjuryType);
return true;
end
end
if(player:getModData().ChestArmor ~= nil) and (player:getInventory():contains(player:getModData().ChestArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().ChestArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().ChestArmor),player,InjuryType);
return true;
end
end
if(player:getModData().LegArmor ~= nil) and (player:getInventory():contains(player:getModData().LegArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().LegArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().LegArmor),player,InjuryType);
return true;
end
end
if(player:getModData().FootArmor ~= nil) and (player:getInventory():contains(player:getModData().FootArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().FootArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().FootArmor),player,InjuryType);
return true;
end
endreturn false;
endfunction healBodyPart(bodyPart, player, BD)
bodyPart:SetInfected(false);
bodyPart:setInfectedWound(false);
bodyPart:SetFakeInfected(false);
bodyPart:setWoundInfectionLevel(0);
if(ArmorTempBodyDamage["IsInfected"] == false) and (BD:IsInfected() == true) then
BD:setInf(false); -- remove infection if did not have before the blocked scratch
BD:setInfectionLevel(0);
BD:setInfectionGrowthRate(0);
BD:setIsFakeInfected(false);
end
bodyPart:RestoreToFullHealth();
bodyPart:DamageUpdate() ;
player:Say("!");
sendClientCommand(player, "Armor", "Say", {saythis = "!"});
endfunction ArmorCheckForDamage(player)
local ArmorbInjuryDetected = false;
if(player:getModData().ArmorBDamageSaved ~= nil) and (player ~= nil) then
local BD = player:getBodyDamage();
--local InjuryTypes = {0 = "Scratch",1 = "DeepWound", 2 = "Burn", 3 = "BulletRes", 4 = "Fracture", 5 = "Glass"};
ArmorTempBodyDamage = player:getModData().ArmorTempBodyDamage;
local BPs = BD:getBodyParts();
for i=0, BPs:size()-1 do
if((ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bandage"] == false) and (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["HasInjury"] == false)) then
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Scratch"] ~= BPs:get(i):scratched()) and (BPs:get(i):scratched() == true) then
--player:Say("Scratch Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Scratch", player)) then
healBodyPart(BPs:get(i), player, BD);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["DeepWound"] ~= BPs:get(i):deepWounded()) and (BPs:get(i):deepWounded() == true) and (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"] ~= true) and (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"] ~= true) then
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"]) or (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"]) then
ArmorbInjuryDetected = true;
else
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "DeepWound", player)) then
healBodyPart(BPs:get(i), player, BD);
end
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bite"] ~= BPs:get(i):bitten()) and (BPs:get(i):bitten() == true) then
--player:Say("Bite Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Bite", player)) then
healBodyPart(BPs:get(i), player, BD);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Burn"] ~= BPs:get(i):getBurnTime()) and (BPs:get(i):getBurnTime() ~= 0) then
--player:Say("Burn Detected on ".. tostring(BPs:get(i):getType()) );
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Burn", player)) then
healBodyPart(BPs:get(i), player, BD);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"] ~= BPs:get(i):haveBullet()) and (BPs:get(i):haveBullet() == true) and (BPs:get(i):deepWounded() == false) then
--player:Say("Lodged Bullets Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Bullet", player)) then
healBodyPart(BPs:get(i), player, BD);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Fracture"] ~= BPs:get(i):getFractureTime()) and (BPs:get(i):getFractureTime() ~= 0) and (BPs:get(i):isSplint() == false) then
--player:Say("Fracture Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Fracture", player)) then
healBodyPart(BPs:get(i), player, BD);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"] ~= BPs:get(i):haveGlass()) and (BPs:get(i):haveGlass() == true) and (BPs:get(i):deepWounded() == false) then
--player:Say("Logged Glass Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Glass", player)) then
healBodyPart(BPs:get(i), player, BD);
end
ArmorbInjuryDetected = true;
end
end
end
end
if(ArmorbInjuryDetected) then
ArmorSaveBodyDamage(player);
end
return ArmorbInjuryDetected;
endfunction ArmorupdateThePlayer(player)
ArmorCheckForDamage(player);
if(player:isLocalPlayer()) then
player:getInventory():Remove("HCEquiparmor");
end
endfunction ArmorInit()
ArmorSaveBodyDamage(getPlayer());
end
function ArmorKeysUp(keynum)
--getPlayer():Say(tostring(keynum));
if keynum == 25 then
local player = getPlayer();
local armorstring = "Currently Equipped Armor \n";
if(player:getModData().ShieldArmor ~= nil) and (player:getSecondaryHandItem() ~= nil) and (player:getSecondaryHandItem():getType() == player:getModData().ShieldArmor) then
armorstring = armorstring .. "Shield: " .. player:getInventory():getItemFromType(player:getModData().ShieldArmor):getDisplayName() .. "\n";
end
if(player:getModData().HeadArmor ~= nil) and (player:getInventory():contains(player:getModData().HeadArmor)) then
armorstring = armorstring .. "Helmet: " .. player:getInventory():getItemFromType(player:getModData().HeadArmor):getDisplayName() .. "\n";
end
if(player:getModData().HandArmor ~= nil) and (player:getInventory():contains(player:getModData().HandArmor)) then
armorstring = armorstring .. "Hands: " .. player:getInventory():getItemFromType(player:getModData().HandArmor):getDisplayName() .. "\n";
end
if(player:getModData().ArmArmor ~= nil) and (player:getInventory():contains(player:getModData().ArmArmor)) then
armorstring = armorstring .. "Arms: " .. player:getInventory():getItemFromType(player:getModData().ArmArmor):getDisplayName() .. "\n";
end
if(player:getModData().LegArmor ~= nil) and (player:getInventory():contains(player:getModData().LegArmor)) then
armorstring = armorstring .. "Legs: " .. player:getInventory():getItemFromType(player:getModData().LegArmor):getDisplayName() .. "\n";
end
if(player:getModData().ChestArmor ~= nil) and (player:getInventory():contains(player:getModData().ChestArmor)) then
armorstring = armorstring .. "Chest: " .. player:getInventory():getItemFromType(player:getModData().ChestArmor):getDisplayName() .. "\n";
end
if(player:getModData().FootArmor ~= nil) and (player:getInventory():contains(player:getModData().FootArmor)) then
armorstring = armorstring .. "Feet: " .. player:getInventory():getItemFromType(player:getModData().FootArmor):getDisplayName() .. "\n";
end
ArmorWindow:setText(armorstring);
ArmorWindow:setVisible(true);
end
endEvents.OnKeyPressed.Add(ArmorKeysUp);
Events.OnPlayerUpdate.Add(ArmorupdateThePlayer);
Events.OnGameStart.Add(ArmorInit);
This is still just my best guess, as im too lazy to actually test it right now. So Di-Crash if you would like to try and fix it all yourself please do, just make sure you also try testing the condition 24 hours after blocking many zombie attacks WITH Hemphobiac trait aslo. because that was the bug report that made me have to bother opening this code back up for edits after a long time.
-
Spoiler
--[[
Injury Detection And Armor Based Injury Blocking
By Nolan Ritchie
]]function loadArmorToPlayer(Armor, player)
ArmorSaveBodyDamage(player);
loadArmor(Armor);
endfunction getBodyPartDisplayName(TypeIn)
BPType = tostring(TypeIn);
if(BPType == "Foot_L") then return "Left Foot";
elseif(BPType == "Foot_R") then return "Right Foot";
elseif(BPType == "ForeArm_L") then return "Left Fore Arm";
elseif(BPType == "ForeArm_R") then return "Right Fore Arm";
elseif(BPType == "Hand_L") then return "Left Hand";
elseif(BPType == "Hand_R") then return "Right Hand";
elseif(BPType == "LowerLeg_L") then return "Left Lower Leg";
elseif(BPType == "LowerLeg_R") then return "Right Lower Leg";
elseif(BPType == "Torso_Lower") then return "Lower Torso";
elseif(BPType == "Torso_Upper") then return "Upper Torso";
elseif(BPType == "UpperArm_L") then return "Left Upper Arm";
elseif(BPType == "UpperArm_R") then return "Right Upper Arm";
elseif(BPType == "UpperLeg_L") then return "Left Upper Leg";
elseif(BPType == "UpperLeg_R") then return "Right Upper Leg";
else return BPType;
endend
function ExamineArmor(items, result, player)
for i=0, items:size()-1 do
Armor = items:get(i);
end
loadArmor(Armor);
local out = "Remaining Durability: " .. tostring(Armor:getModData().Durability) .. "\n";
local BPs = player:getBodyDamage():getBodyParts();
for i=0, BPs:size()-1 do
if(Armor:getModData().ScratchRes ~= nil) and (Armor:getModData().ScratchRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().ScratchRes[tostring(BPs:get(i):getType())]).. "%" .. " chance to block Scratches on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().DeepWoundRes ~= nil) and (Armor:getModData().DeepWoundRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().DeepWoundRes[tostring(BPs:get(i):getType())]).. "%" .. " Chance to block to Deep Wounds on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().BiteRes ~= nil) and (Armor:getModData().BiteRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().BiteRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Bites on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().GlassRes ~= nil) and (Armor:getModData().GlassRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().GlassRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Glass on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().FractureRes ~= nil) and (Armor:getModData().FractureRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().FractureRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Fractures on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().BurnRes ~= nil) and (Armor:getModData().BurnRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().BurnRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Burns on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().BulletRes ~= nil) and (Armor:getModData().BulletRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().BulletRes[tostring(BPs:get(i):getType())]).. "%" .. " Chance to block to Bullets on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
end
out = Armor:getDisplayName() .. "\n" .. out;
ArmorWindow:setText(out);
ArmorWindow:setVisible(true);
--player:Say();
endfunction ArmorSaveBodyDamage(player)
player:getModData().ArmorTempBodyDamage = {};
ArmorTempBodyDamage = player:getModData().ArmorTempBodyDamage;
local BD = player:getBodyDamage();
--local InjuryTypes = {0 = "Scratch",1 = "DeepWound", 2 = "Burn", 3 = "BulletRes", 4 = "Fracture", 5 = "Glass"};
ArmorTempBodyDamage["IsInfected"] = BD:IsInfected();
local BPs = BD:getBodyParts();
for i=0, BPs:size()-1 do
ArmorTempBodyDamage[tostring(BPs:get(i):getType())] = {Splint= false, Bandage = false, Bite = false, Scratch = false, DeepWound = false, Burn = false, Bullet = false, Fracture = false, Glass = false};
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Splint"] = BPs:get(i):isSplint();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bandage"] = BPs:get(i):bandaged();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Scratch"] = BPs:get(i):scratched();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["DeepWound"] = BPs:get(i):deepWounded();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Burn"] = BPs:get(i):getBurnTime();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"] = BPs:get(i):haveBullet();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Fracture"] = BPs:get(i):getFractureTime();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"] = BPs:get(i):haveGlass();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bite"] = BPs:get(i):bitten();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["HasInjury"] = BPs:get(i):HasInjury();
end
player:getModData().ArmorBDamageSaved = true;
endfunction tryBlock(BodyPartType, InjuryType, ArmorType, player)
local Armor = player:getInventory():getItemFromType(ArmorType);
if(InjuryType == "Scratch") then
if(Armor:getModData().ScratchRes ~= nil) and (Armor:getModData().ScratchRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().ScratchRes[BodyPartType] );
end
elseif(InjuryType == "DeepWound") then
if((Armor:getModData().DeepWoundRes ~= nil) and Armor:getModData().DeepWoundRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().DeepWoundRes[BodyPartType] );
end
elseif(InjuryType == "Bite") then
if(Armor:getModData().BiteRes ~= nil) and (Armor:getModData().BiteRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().BiteRes[BodyPartType] );
end
elseif(InjuryType == "Fracture") then
if(Armor:getModData().FractureRes ~= nil) and (Armor:getModData().FractureRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().FractureRes[BodyPartType] );
end
elseif(InjuryType == "Burn") then
if(Armor:getModData().BurnRes ~= nil) and (Armor:getModData().BurnRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().BurnRes[BodyPartType] );
end
elseif(InjuryType == "Glass") then
if(Armor:getModData().GlassRes ~= nil) and (Armor:getModData().GlassRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().GlassRes[BodyPartType] );
end
elseif(InjuryType == "Bullet") then
if(Armor:getModData().BulletRes ~= nil) and (Armor:getModData().BulletRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().BulletRes[BodyPartType] );
end
endend
function EquipAsShield(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
if (player:getSecondaryHandItem() == player:getPrimaryHandItem()) then
player:setPrimaryHandItem(nil);
end
player:setSecondaryHandItem(items:get(i));
player:getModData().ShieldArmor = items:get(i):getType();
end
end
function EquipOnHead(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().HeadArmor = items:get(i):getType();
end
end
function EquipOnHands(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().HandArmor = items:get(i):getType();
end
end
function EquipOnArms(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().ArmArmor = items:get(i):getType();
end
end
function EquipOnLegs(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().LegArmor = items:get(i):getType();
end
end
function EquipOnChest(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().ChestArmor = items:get(i):getType();
end
end
function EquipOnFeet(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().FootArmor = items:get(i):getType();
end
endfunction DamageArmor(Armor, player, InjuryType)
local Damage = 1;
if(InjuryType == "Scratch") then
Damage = 1;
elseif(InjuryType == "DeepWound") then
Damage = 3;
elseif(InjuryType == "Bite") then
Damage = 2;
elseif(InjuryType == "Fracture") then
Damage = 3;
elseif(InjuryType == "Burn") then
Damage = 2;
elseif(InjuryType == "Glass") then
Damage = 2;
elseif(InjuryType == "Bullet") then
Damage = 5;
endlocal isBroken = false;
Armor:getModData().Durability = Armor:getModData().Durability - Damage;
if (Armor:getModData().Durability <= 0) then
isBroken = true;
if(Armor:getModData().onBreakTurnInto ~= nil) then
player:Say("adding broken armor" .. Armor:getModData().onBreakTurnInto);
player:getInventory():AddItem(Armor:getModData().onBreakTurnInto);
end
player:getInventory():Remove(Armor);
end
return isBroken;
endfunction wasDamagedBlocked(BodyPartType, InjuryType, player)
if(ArmorTempBodyDamage[tostring(BodyPartType)]["Bandage"] == true) or (ArmorTempBodyDamage[tostring(BodyPartType)]["Splint"] == true) then
return false;
endif(player:getSecondaryHandItem() ~= nil) then
if(player:getModData().ShieldArmor ~= nil) and (player:getSecondaryHandItem():getType() == player:getModData().ShieldArmor) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().ShieldArmor, player) == true) then
if(DamageArmor(player:getInventory():getItemFromType(player:getModData().ShieldArmor),player,InjuryType) == true) then
player:setSecondaryHandItem(nil);
end
return true;
end
end
end
if(player:getModData().HeadArmor ~= nil) and (player:getInventory():contains(player:getModData().HeadArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().HeadArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().HeadArmor),player,InjuryType);
return true;
end
end
if(player:getModData().HandArmor ~= nil) and (player:getInventory():contains(player:getModData().HandArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().HandArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().HandArmor),player,InjuryType);
return true;
end
end
if(player:getModData().ArmArmor ~= nil) and (player:getInventory():contains(player:getModData().ArmArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().ArmArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().ArmArmor),player,InjuryType);
return true;
end
end
if(player:getModData().ChestArmor ~= nil) and (player:getInventory():contains(player:getModData().ChestArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().ChestArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().ChestArmor),player,InjuryType);
return true;
end
end
if(player:getModData().LegArmor ~= nil) and (player:getInventory():contains(player:getModData().LegArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().LegArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().LegArmor),player,InjuryType);
return true;
end
end
if(player:getModData().FootArmor ~= nil) and (player:getInventory():contains(player:getModData().FootArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().FootArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().FootArmor),player,InjuryType);
return true;
end
endreturn false;
endfunction healBodyPart(bodyPart, player, BD)
bodyPart:SetInfected(false);
bodyPart:setInfectedWound(false);
bodyPart:SetFakeInfected(false);
bodyPart:setWoundInfectionLevel(0);
if(ArmorTempBodyDamage["IsInfected"] == false) and (BD:IsInfected() == true) then
BD:setInf(false); -- remove infection if did not have before the blocked scratch
end
bodyPart:RestoreToFullHealth();
bodyPart:DamageUpdate() ;
player:Say("!");
sendClientCommand(player, "Armor", "Say", {saythis = "!"});
endfunction ArmorCheckForDamage(player)
local ArmorbInjuryDetected = false;
if(player:getModData().ArmorBDamageSaved ~= nil) and (player ~= nil) then
local BD = player:getBodyDamage();
--local InjuryTypes = {0 = "Scratch",1 = "DeepWound", 2 = "Burn", 3 = "BulletRes", 4 = "Fracture", 5 = "Glass"};
ArmorTempBodyDamage = player:getModData().ArmorTempBodyDamage;
local BPs = BD:getBodyParts();
for i=0, BPs:size()-1 do
if((ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bandage"] == false) and (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["HasInjury"] == false)) then
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Scratch"] ~= BPs:get(i):scratched()) and (BPs:get(i):scratched() == true) then
--player:Say("Scratch Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Scratch", player)) then
healBodyPart(BPs:get(i), player, BD);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["DeepWound"] ~= BPs:get(i):deepWounded()) and (BPs:get(i):deepWounded() == true) and (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"] ~= true) and (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"] ~= true) then
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"]) or (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"]) then
ArmorbInjuryDetected = true;
else
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "DeepWound", player)) then
healBodyPart(BPs:get(i), player, BD);
end
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bite"] ~= BPs:get(i):bitten()) and (BPs:get(i):bitten() == true) then
--player:Say("Bite Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Bite", player)) then
healBodyPart(BPs:get(i), player, BD);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Burn"] ~= BPs:get(i):getBurnTime()) and (BPs:get(i):getBurnTime() ~= 0) then
--player:Say("Burn Detected on ".. tostring(BPs:get(i):getType()) );
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Burn", player)) then
healBodyPart(BPs:get(i), player, BD);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"] ~= BPs:get(i):haveBullet()) and (BPs:get(i):haveBullet() == true) and (BPs:get(i):deepWounded() == false) then
--player:Say("Lodged Bullets Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Bullet", player)) then
healBodyPart(BPs:get(i), player, BD);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Fracture"] ~= BPs:get(i):getFractureTime()) and (BPs:get(i):getFractureTime() ~= 0) and (BPs:get(i):isSplint() == false) then
--player:Say("Fracture Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Fracture", player)) then
healBodyPart(BPs:get(i), player, BD);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"] ~= BPs:get(i):haveGlass()) and (BPs:get(i):haveGlass() == true) and (BPs:get(i):deepWounded() == false) then
--player:Say("Logged Glass Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Glass", player)) then
healBodyPart(BPs:get(i), player, BD);
end
ArmorbInjuryDetected = true;
end
end
end
end
if(ArmorbInjuryDetected) then
ArmorSaveBodyDamage(player);
end
return ArmorbInjuryDetected;
endfunction ArmorupdateThePlayer(player)
ArmorCheckForDamage(player);
if(player:isLocalPlayer()) then
player:getInventory():Remove("HCEquiparmor");
end
endfunction ArmorInit()
ArmorSaveBodyDamage(getPlayer());
end
function ArmorKeysUp(keynum)
--getPlayer():Say(tostring(keynum));
if keynum == 25 then
local player = getPlayer();
local armorstring = "Currently Equipped Armor \n";
if(player:getModData().ShieldArmor ~= nil) and (player:getSecondaryHandItem() ~= nil) and (player:getSecondaryHandItem():getType() == player:getModData().ShieldArmor) then
armorstring = armorstring .. "Shield: " .. player:getInventory():getItemFromType(player:getModData().ShieldArmor):getDisplayName() .. "\n";
end
if(player:getModData().HeadArmor ~= nil) and (player:getInventory():contains(player:getModData().HeadArmor)) then
armorstring = armorstring .. "Helmet: " .. player:getInventory():getItemFromType(player:getModData().HeadArmor):getDisplayName() .. "\n";
end
if(player:getModData().HandArmor ~= nil) and (player:getInventory():contains(player:getModData().HandArmor)) then
armorstring = armorstring .. "Hands: " .. player:getInventory():getItemFromType(player:getModData().HandArmor):getDisplayName() .. "\n";
end
if(player:getModData().ArmArmor ~= nil) and (player:getInventory():contains(player:getModData().ArmArmor)) then
armorstring = armorstring .. "Arms: " .. player:getInventory():getItemFromType(player:getModData().ArmArmor):getDisplayName() .. "\n";
end
if(player:getModData().LegArmor ~= nil) and (player:getInventory():contains(player:getModData().LegArmor)) then
armorstring = armorstring .. "Legs: " .. player:getInventory():getItemFromType(player:getModData().LegArmor):getDisplayName() .. "\n";
end
if(player:getModData().ChestArmor ~= nil) and (player:getInventory():contains(player:getModData().ChestArmor)) then
armorstring = armorstring .. "Chest: " .. player:getInventory():getItemFromType(player:getModData().ChestArmor):getDisplayName() .. "\n";
end
if(player:getModData().FootArmor ~= nil) and (player:getInventory():contains(player:getModData().FootArmor)) then
armorstring = armorstring .. "Feet: " .. player:getInventory():getItemFromType(player:getModData().FootArmor):getDisplayName() .. "\n";
end
ArmorWindow:setText(armorstring);
ArmorWindow:setVisible(true);
end
endEvents.OnKeyPressed.Add(ArmorKeysUp);
Events.OnPlayerUpdate.Add(ArmorupdateThePlayer);
Events.OnGameStart.Add(ArmorInit);
@Hydromancerx
armor code to i think re fix a problem that i re introduced trying to fix anther problem. (The dropping hp after blocks problem)
And also, now it supports putting armor on survivors in survivors mod -
2 hours ago, Blake81 said:
Well, that's far more progress than I was expecting to see in such a short time; it's not far from being ''Grand Theft Zed: Knox County'' and I'm really liking the great variety of vehicles. But, there are a few important things I see conspicuously absent from the big list:
1- Trunks
Will we be able to load stuff on our car's trunks and/or backseats? Or find stuff on them beforehand? This might be one of the most important uses they will have.
2- Keys & Bypasses
Perhaps this is the best way to prevent them from being the ''Indestructanks of Zed Squashing'', make it so we have to either find their keys (if there's a car parked outside a house or office, it would make sense to have at least a 50/50 chance to find its keys on some drawer, on in the pockets of some Zed that might be there) or have the Electrical know-how to hot-wire them, but even then, these hot-wired cars would be a bit slower to start than the ones with keys.
3- Garages WITH WORKING SHUTTERS
This is probably the 2nd most important one. What's the point of getting a car if the Zeds are just gonna head-thump it into scrap metal every time you leave it outside your base? We need to have all those still non-functional shutters everywhere working. And also, as seen on 0:39 of the video, some the garages we have right know are a wee bit too small to fit the cars inside, and that could be a problem.
4- Sirens
Can the Police Cars/Ambulances have a siren function (like they did in State of Decay )? This one might sound cosmetic, but it could be very useful, specially how sound-sensible are PZ's Zed. This could make it worth to have either of them around to use them as lures-on-wheels to remove large quantities of Zeds from a location.
I think that would be all. I saw on the new dial that the cars already have radio, headlights and what might even be a SoD-esque Door-Hits-Zed function so things are looking pretty good. What does the big red hot H do btw?
And btw, I just LOVE that BGM that plays at the start of the video. It's hands down PZ's best music.
They do have separate containers for trunks, inside the cab and even small container for glove compartment. Also trunk is only accessible from outside. while cab and glove compartment are only accessible from inside the car.
-
1 hour ago, AlexHupsch said:
So... what about the link to the multiplayer version?
uh there is no direct dl for that if i recall. because i sort of abandoned it for the time being because people don't like the fred flinstone effect, and there is nothing i can do about it. Also more than one persons reported it causing a lot of slowdown on MP servers
-
Please update armor.lua file to fix bugs!
Spoiler--[[
Injury Detection And Armor Based Injury Blocking
By Nolan Ritchie
]]function loadArmorToPlayer(Armor, player)
ArmorSaveBodyDamage(player);
loadArmor(Armor);
endfunction getBodyPartDisplayName(TypeIn)
BPType = tostring(TypeIn);
if(BPType == "Foot_L") then return "Left Foot";
elseif(BPType == "Foot_R") then return "Right Foot";
elseif(BPType == "ForeArm_L") then return "Left Fore Arm";
elseif(BPType == "ForeArm_R") then return "Right Fore Arm";
elseif(BPType == "Hand_L") then return "Left Hand";
elseif(BPType == "Hand_R") then return "Right Hand";
elseif(BPType == "LowerLeg_L") then return "Left Lower Leg";
elseif(BPType == "LowerLeg_R") then return "Right Lower Leg";
elseif(BPType == "Torso_Lower") then return "Lower Torso";
elseif(BPType == "Torso_Upper") then return "Upper Torso";
elseif(BPType == "UpperArm_L") then return "Left Upper Arm";
elseif(BPType == "UpperArm_R") then return "Right Upper Arm";
elseif(BPType == "UpperLeg_L") then return "Left Upper Leg";
elseif(BPType == "UpperLeg_R") then return "Right Upper Leg";
else return BPType;
endend
function ExamineArmor(items, result, player)
for i=0, items:size()-1 do
Armor = items:get(i);
end
loadArmor(Armor);
local out = "Remaining Durability: " .. tostring(Armor:getModData().Durability) .. "\n";
local BPs = player:getBodyDamage():getBodyParts();
for i=0, BPs:size()-1 do
if(Armor:getModData().ScratchRes ~= nil) and (Armor:getModData().ScratchRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().ScratchRes[tostring(BPs:get(i):getType())]).. "%" .. " chance to block Scratches on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().DeepWoundRes ~= nil) and (Armor:getModData().DeepWoundRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().DeepWoundRes[tostring(BPs:get(i):getType())]).. "%" .. " Chance to block to Deep Wounds on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().BiteRes ~= nil) and (Armor:getModData().BiteRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().BiteRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Bites on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().GlassRes ~= nil) and (Armor:getModData().GlassRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().GlassRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Glass on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().FractureRes ~= nil) and (Armor:getModData().FractureRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().FractureRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Fractures on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().BurnRes ~= nil) and (Armor:getModData().BurnRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().BurnRes[tostring(BPs:get(i):getType())]) .. "%".. " Chance to block to Burns on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
if(Armor:getModData().BulletRes ~= nil) and (Armor:getModData().BulletRes[tostring(BPs:get(i):getType())] ~= nil) then
out = out .. tostring(Armor:getModData().BulletRes[tostring(BPs:get(i):getType())]).. "%" .. " Chance to block to Bullets on the " .. getBodyPartDisplayName(BPs:get(i):getType()) .. "\n";
end
end
out = Armor:getDisplayName() .. "\n" .. out;
ArmorWindow:setText(out);
ArmorWindow:setVisible(true);
--player:Say();
endfunction ArmorSaveBodyDamage(player)
ArmorTempBodyDamage = {};
local BD = player:getBodyDamage();
--local InjuryTypes = {0 = "Scratch",1 = "DeepWound", 2 = "Burn", 3 = "BulletRes", 4 = "Fracture", 5 = "Glass"};
ArmorTempBodyDamage["IsInfected"] = BD:IsInfected();
local BPs = BD:getBodyParts();
for i=0, BPs:size()-1 do
ArmorTempBodyDamage[tostring(BPs:get(i):getType())] = {Splint= false, Bandage = false, Bite = false, Scratch = false, DeepWound = false, Burn = false, Bullet = false, Fracture = false, Glass = false};
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Splint"] = BPs:get(i):isSplint();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bandage"] = BPs:get(i):bandaged();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Scratch"] = BPs:get(i):scratched();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["DeepWound"] = BPs:get(i):deepWounded();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Burn"] = BPs:get(i):getBurnTime();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"] = BPs:get(i):haveBullet();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Fracture"] = BPs:get(i):getFractureTime();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"] = BPs:get(i):haveGlass();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bite"] = BPs:get(i):bitten();
ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["HasInjury"] = BPs:get(i):HasInjury();
end
ArmorBDamageSaved = true;
endfunction tryBlock(BodyPartType, InjuryType, ArmorType, player)
local Armor = player:getInventory():getItemFromType(ArmorType);
if(InjuryType == "Scratch") then
if(Armor:getModData().ScratchRes ~= nil) and (Armor:getModData().ScratchRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().ScratchRes[BodyPartType] );
end
elseif(InjuryType == "DeepWound") then
if((Armor:getModData().DeepWoundRes ~= nil) and Armor:getModData().DeepWoundRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().DeepWoundRes[BodyPartType] );
end
elseif(InjuryType == "Bite") then
if(Armor:getModData().BiteRes ~= nil) and (Armor:getModData().BiteRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().BiteRes[BodyPartType] );
end
elseif(InjuryType == "Fracture") then
if(Armor:getModData().FractureRes ~= nil) and (Armor:getModData().FractureRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().FractureRes[BodyPartType] );
end
elseif(InjuryType == "Burn") then
if(Armor:getModData().BurnRes ~= nil) and (Armor:getModData().BurnRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().BurnRes[BodyPartType] );
end
elseif(InjuryType == "Glass") then
if(Armor:getModData().GlassRes ~= nil) and (Armor:getModData().GlassRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().GlassRes[BodyPartType] );
end
elseif(InjuryType == "Bullet") then
if(Armor:getModData().BulletRes ~= nil) and (Armor:getModData().BulletRes[BodyPartType] ~= nil) then
return ( (ZombRand(100)+1) < Armor:getModData().BulletRes[BodyPartType] );
end
endend
function EquipAsShield(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
if (player:getSecondaryHandItem() == player:getPrimaryHandItem()) then
player:setPrimaryHandItem(nil);
end
player:setSecondaryHandItem(items:get(i));
player:getModData().ShieldArmor = items:get(i):getType();
end
end
function EquipOnHead(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().HeadArmor = items:get(i):getType();
end
end
function EquipOnHands(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().HandArmor = items:get(i):getType();
end
end
function EquipOnArms(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().ArmArmor = items:get(i):getType();
end
end
function EquipOnLegs(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().LegArmor = items:get(i):getType();
end
end
function EquipOnChest(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().ChestArmor = items:get(i):getType();
end
end
function EquipOnFeet(items, result, player) -- Recipe must only have one ingredient which is the armor, and be set to "keep"
for i=0, items:size()-1 do
loadArmorToPlayer(items:get(i), player);
player:getModData().FootArmor = items:get(i):getType();
end
endfunction DamageArmor(Armor, player, InjuryType)
local Damage = 1;
if(InjuryType == "Scratch") then
Damage = 1;
elseif(InjuryType == "DeepWound") then
Damage = 3;
elseif(InjuryType == "Bite") then
Damage = 2;
elseif(InjuryType == "Fracture") then
Damage = 3;
elseif(InjuryType == "Burn") then
Damage = 2;
elseif(InjuryType == "Glass") then
Damage = 2;
elseif(InjuryType == "Bullet") then
Damage = 5;
endlocal isBroken = false;
Armor:getModData().Durability = Armor:getModData().Durability - Damage;
if (Armor:getModData().Durability <= 0) then
isBroken = true;
if(Armor:getModData().onBreakTurnInto ~= nil) then
player:Say("adding broken armor" .. Armor:getModData().onBreakTurnInto);
player:getInventory():AddItem(Armor:getModData().onBreakTurnInto);
end
player:getInventory():Remove(Armor);
end
return isBroken;
endfunction wasDamagedBlocked(BodyPartType, InjuryType, player)
if(ArmorTempBodyDamage[tostring(BodyPartType)]["Bandage"] == true) or (ArmorTempBodyDamage[tostring(BodyPartType)]["Splint"] == true) then
return false;
endif(player:getSecondaryHandItem() ~= nil) then
if(player:getModData().ShieldArmor ~= nil) and (player:getSecondaryHandItem():getType() == player:getModData().ShieldArmor) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().ShieldArmor, player) == true) then
if(DamageArmor(player:getInventory():getItemFromType(player:getModData().ShieldArmor),player,InjuryType) == true) then
player:setSecondaryHandItem(nil);
end
return true;
end
end
end
if(player:getModData().HeadArmor ~= nil) and (player:getInventory():contains(player:getModData().HeadArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().HeadArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().HeadArmor),player,InjuryType);
return true;
end
end
if(player:getModData().HandArmor ~= nil) and (player:getInventory():contains(player:getModData().HandArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().HandArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().HandArmor),player,InjuryType);
return true;
end
end
if(player:getModData().ArmArmor ~= nil) and (player:getInventory():contains(player:getModData().ArmArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().ArmArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().ArmArmor),player,InjuryType);
return true;
end
end
if(player:getModData().ChestArmor ~= nil) and (player:getInventory():contains(player:getModData().ChestArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().ChestArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().ChestArmor),player,InjuryType);
return true;
end
end
if(player:getModData().LegArmor ~= nil) and (player:getInventory():contains(player:getModData().LegArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().LegArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().LegArmor),player,InjuryType);
return true;
end
end
if(player:getModData().FootArmor ~= nil) and (player:getInventory():contains(player:getModData().FootArmor)) then
if(tryBlock(BodyPartType, InjuryType, player:getModData().FootArmor, player) == true) then
DamageArmor(player:getInventory():getItemFromType(player:getModData().FootArmor),player,InjuryType);
return true;
end
endreturn false;
endfunction healBodyPart(bodyPart, player, BD)
bodyPart:SetInfected(false);
bodyPart:setInfectedWound(false);
bodyPart:SetFakeInfected(false);
if(ArmorTempBodyDamage["IsInfected"] == false) and (BD:IsInfected() == true) then
BD:setInf(false); -- remove infection if did not have before the blocked scratch
end
bodyPart:RestoreToFullHealth();
bodyPart:DamageUpdate() ;
player:Say("!");
sendClientCommand(player, "Armor", "Say", {saythis = "!"});
endfunction ArmorCheckForDamage(player)
local ArmorbInjuryDetected = false;
if(ArmorBDamageSaved ~= nil) and (player ~= nil) then
local BD = player:getBodyDamage();
--local InjuryTypes = {0 = "Scratch",1 = "DeepWound", 2 = "Burn", 3 = "BulletRes", 4 = "Fracture", 5 = "Glass"};
--ArmorTempBodyDamage["IsInfected"] = BD:IsInfected();
local BPs = BD:getBodyParts();
for i=0, BPs:size()-1 do
if((ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bandage"] == false) and (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["HasInjury"] == false)) then
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Scratch"] ~= BPs:get(i):scratched()) and (BPs:get(i):scratched() == true) then
--player:Say("Scratch Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Scratch", player)) then
healBodyPart(BPs:get(i), player, BD);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["DeepWound"] ~= BPs:get(i):deepWounded()) and (BPs:get(i):deepWounded() == true) and (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"] ~= true) and (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"] ~= true) then
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"]) or (ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"]) then
ArmorbInjuryDetected = true;
else
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "DeepWound", player)) then
healBodyPart(BPs:get(i), player, BD);
end
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bite"] ~= BPs:get(i):bitten()) and (BPs:get(i):bitten() == true) then
--player:Say("Bite Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Bite", player)) then
healBodyPart(BPs:get(i), player, BD);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Burn"] ~= BPs:get(i):getBurnTime()) and (BPs:get(i):getBurnTime() ~= 0) then
--player:Say("Burn Detected on ".. tostring(BPs:get(i):getType()) );
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Burn", player)) then
healBodyPart(BPs:get(i), player, BD);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Bullet"] ~= BPs:get(i):haveBullet()) and (BPs:get(i):haveBullet() == true) and (BPs:get(i):deepWounded() == false) then
--player:Say("Lodged Bullets Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Bullet", player)) then
healBodyPart(BPs:get(i), player, BD);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Fracture"] ~= BPs:get(i):getFractureTime()) and (BPs:get(i):getFractureTime() ~= 0) and (BPs:get(i):isSplint() == false) then
--player:Say("Fracture Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Fracture", player)) then
healBodyPart(BPs:get(i), player, BD);
end
ArmorbInjuryDetected = true;
end
if(ArmorTempBodyDamage[tostring(BPs:get(i):getType())]["Glass"] ~= BPs:get(i):haveGlass()) and (BPs:get(i):haveGlass() == true) and (BPs:get(i):deepWounded() == false) then
--player:Say("Logged Glass Detected on ".. tostring(BPs:get(i):getType()));
if(wasDamagedBlocked(tostring(BPs:get(i):getType()), "Glass", player)) then
healBodyPart(BPs:get(i), player, BD);
end
ArmorbInjuryDetected = true;
end
end
end
end
if(ArmorbInjuryDetected) then
ArmorSaveBodyDamage(player);
end
return ArmorbInjuryDetected;
endfunction ArmorupdateThePlayer(player)
ArmorCheckForDamage(player);
player:getInventory():Remove("HCEquiparmor");
endfunction ArmorInit()
ArmorSaveBodyDamage(getPlayer());
end
function ArmorKeysUp(keynum)
--getPlayer():Say(tostring(keynum));
if keynum == 25 then
local player = getPlayer();
local armorstring = "Currently Equipped Armor \n";
if(player:getModData().ShieldArmor ~= nil) and (player:getSecondaryHandItem() ~= nil) and (player:getSecondaryHandItem():getType() == player:getModData().ShieldArmor) then
armorstring = armorstring .. "Shield: " .. player:getInventory():getItemFromType(player:getModData().ShieldArmor):getDisplayName() .. "\n";
end
if(player:getModData().HeadArmor ~= nil) and (player:getInventory():contains(player:getModData().HeadArmor)) then
armorstring = armorstring .. "Helmet: " .. player:getInventory():getItemFromType(player:getModData().HeadArmor):getDisplayName() .. "\n";
end
if(player:getModData().HandArmor ~= nil) and (player:getInventory():contains(player:getModData().HandArmor)) then
armorstring = armorstring .. "Hands: " .. player:getInventory():getItemFromType(player:getModData().HandArmor):getDisplayName() .. "\n";
end
if(player:getModData().ArmArmor ~= nil) and (player:getInventory():contains(player:getModData().ArmArmor)) then
armorstring = armorstring .. "Arms: " .. player:getInventory():getItemFromType(player:getModData().ArmArmor):getDisplayName() .. "\n";
end
if(player:getModData().LegArmor ~= nil) and (player:getInventory():contains(player:getModData().LegArmor)) then
armorstring = armorstring .. "Legs: " .. player:getInventory():getItemFromType(player:getModData().LegArmor):getDisplayName() .. "\n";
end
if(player:getModData().ChestArmor ~= nil) and (player:getInventory():contains(player:getModData().ChestArmor)) then
armorstring = armorstring .. "Chest: " .. player:getInventory():getItemFromType(player:getModData().ChestArmor):getDisplayName() .. "\n";
end
if(player:getModData().FootArmor ~= nil) and (player:getInventory():contains(player:getModData().FootArmor)) then
armorstring = armorstring .. "Feet: " .. player:getInventory():getItemFromType(player:getModData().FootArmor):getDisplayName() .. "\n";
end
ArmorWindow:setText(armorstring);
ArmorWindow:setVisible(true);
end
endEvents.OnKeyPressed.Add(ArmorKeysUp);
Events.OnPlayerUpdate.Add(ArmorupdateThePlayer);
Events.OnGameStart.Add(ArmorInit);
Hydrocraft Mod
in WIP
Posted
Hydrocraft.zip
With armor fixes and added improvements. Equip recipes removed from scripts/txt files now in lua UI.