Jump to content

nolanri

Member
  • Posts

    516
  • Joined

Posts posted by nolanri

  1. 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.

  2. this shows what is equipped:

    Spoiler

    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        
    end

     

  3. here is same working version but with Hydrocraft armor_definitions.lua

    Armor.zip
     

    unzip and paste into C:\Program Files (x86)\Steam\steamapps\workshop\content\108600\498441420\mods\Hydrocraft\media\lua\client\

  4. 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:

    Armor.rar

  5. 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:
     

    Spoiler

    function 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"] end

        if(GlobalArmor[thetype]["Location"]) then Armor:getModData().Location= GlobalArmor[thetype]["Location"] end
        
        if(tempDurability ~= nil) then
            GlobalArmor[WorkingArmor]["Durability"] = tempDurability;
        end
    end

     

     

     

  6. 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?

  7. 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|BiteRes

    if(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";
            
    -- Gloves

        WorkingArmor = "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 Armor

        WorkingArmor = "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 Armor

        WorkingArmor = "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";
            
    -- Boots

        WorkingArmor = "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.

  8. 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:

      Hide contents

    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
    end

    MGContextMenu.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
    end

    MGContextMenu.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));
    end

    MGContextMenu.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));
    end

    MGContextMenu.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));
    end

    Events.OnFillInventoryObjectContextMenu.Add(MGContextMenu.init);

     

    Time action. Equipping armor on the character:

      Hide contents

    require "TimedActions/ISBaseTimedAction"

    MGEquipArmorAction = ISBaseTimedAction:derive("MGEquipArmorAction");

    function MGEquipArmorAction:isValid()
        return self.character:getInventory():contains(self.item);
    end

    function MGEquipArmorAction:update()
        self.item:setJobDelta(self:getJobDelta());
    end

    function MGEquipArmorAction:start()
        self.item:setJobType(getText("UI_Text_Equip_Armor"));
        self.item:setJobDelta(0.0);
    end

    function MGEquipArmorAction:stop()
        ISBaseTimedAction.stop(self);
        self.item:setJobDelta(0.0);
    end

    function 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);
    end

    function 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
    end

     

    Time action. Removing the armor from the character:

      Reveal hidden contents

    require "TimedActions/ISBaseTimedAction"

    MGUnequipArmorAction = ISBaseTimedAction:derive("MGUnequipArmorAction");

    function MGUnequipArmorAction:isValid()
        return self.character:getInventory():contains(self.item);
    end

    function MGUnequipArmorAction:update()
        self.item:setJobDelta(self:getJobDelta());
    end

    function MGUnequipArmorAction:start()
        self.item:setJobType(getText("UI_Text_Unequip_Armor"));
        self.item:setJobDelta(0.0);
    end

    function MGUnequipArmorAction:stop()
        ISBaseTimedAction.stop(self);
        self.item:setJobDelta(0.0);
    end

    function 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);
    end

    function 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
    end

     

    Time action. Activating the equipment inspection window:

      Hide contents

    require "TimedActions/ISBaseTimedAction"

    MGInspectArmorAction = ISBaseTimedAction:derive("MGInspectArmorAction");

    function MGInspectArmorAction:isValid()
        return self.character:getInventory():contains(self.item);
    end

    function MGInspectArmorAction:update()
        self.item:setJobDelta(self:getJobDelta());
    end

    function MGInspectArmorAction:start()
        self.item:setJobType(getText("UI_Text_Inspect_Armor"));
        self.item:setJobDelta(0.0);
    end

    function MGInspectArmorAction:stop()
        ISBaseTimedAction.stop(self);
        self.item:setJobDelta(0.0);
    end

    function 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);
    end

    function 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
    end

     

    The 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,

  9. 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

  10. 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);    
    end

    function 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;
        end

    end

    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();
    end

    function 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;
    end

    function 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
        end

    end
    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
    end

    function 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;
        end

        local 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;
    end

    function wasDamagedBlocked(BodyPartType, InjuryType, player)

        if(ArmorTempBodyDamage[tostring(BodyPartType)]["Bandage"] == true) or (ArmorTempBodyDamage[tostring(BodyPartType)]["Splint"] == true) then
        return false;
        end

        if(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
        end

        return false;
        
    end

    function 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 = "!"});
        
    end

    function 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;
    end

    function ArmorupdateThePlayer(player)
        
            ArmorCheckForDamage(player);
        if(player:isLocalPlayer()) then
            player:getInventory():Remove("HCEquiparmor");
        end
    end

    function 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        
    end

    Events.OnKeyPressed.Add(ArmorKeysUp);
    Events.OnPlayerUpdate.Add(ArmorupdateThePlayer);
    Events.OnGameStart.Add(ArmorInit);

     

     

  11. 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.

  12. 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);    
    end

    function 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;
        end

    end

    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();
    end

    function 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;
    end

    function 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
        end

    end
    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
    end

    function 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;
        end

        local 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;
    end

    function wasDamagedBlocked(BodyPartType, InjuryType, player)

        if(ArmorTempBodyDamage[tostring(BodyPartType)]["Bandage"] == true) or (ArmorTempBodyDamage[tostring(BodyPartType)]["Splint"] == true) then
        return false;
        end

        if(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
        end

        return false;
        
    end

    function 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 = "!"});
        
    end

    function 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;
    end

    function ArmorupdateThePlayer(player)
        
            ArmorCheckForDamage(player);
        if(player:isLocalPlayer()) then
            player:getInventory():Remove("HCEquiparmor");
        end
    end

    function 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        
    end

    Events.OnKeyPressed.Add(ArmorKeysUp);
    Events.OnPlayerUpdate.Add(ArmorupdateThePlayer);
    Events.OnGameStart.Add(ArmorInit);

     

     

  13. works for me man, i used this for test:

     

    Spoiler

    if(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

  14. 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.

  15. 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. 

  16. 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.

  17. 18 hours ago, Di-Crash said:

     

      Hide contents

    NU8SpAa.png

    ;))

     

    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:

    Spoiler

    function 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 = "!"});
        
    end

     

    With 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:

     

    Spoiler

    function 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 = "!"});
        
    end

     

    I'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:

     

    Spoiler

    function 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 = "!"});
        
    end

     

     

     

     

     

    Full Armor.lua file code:

    Spoiler

    --[[
    Injury Detection And Armor Based Injury Blocking
    By Nolan Ritchie


    ]]

    function loadArmorToPlayer(Armor, player)
        ArmorSaveBodyDamage(player);
        loadArmor(Armor);    
    end

    function 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;
        end

    end

    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();
    end

    function 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;
    end

    function 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
        end

    end
    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
    end

    function 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;
        end

        local 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;
    end

    function wasDamagedBlocked(BodyPartType, InjuryType, player)

        if(ArmorTempBodyDamage[tostring(BodyPartType)]["Bandage"] == true) or (ArmorTempBodyDamage[tostring(BodyPartType)]["Splint"] == true) then
        return false;
        end

        if(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
        end

        return false;
        
    end

    function 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 = "!"});
        
    end

    function 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;
    end

    function ArmorupdateThePlayer(player)
        
            ArmorCheckForDamage(player);
        if(player:isLocalPlayer()) then
            player:getInventory():Remove("HCEquiparmor");
        end
    end

    function 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        
    end

    Events.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.

  18. Spoiler

    --[[
    Injury Detection And Armor Based Injury Blocking
    By Nolan Ritchie


    ]]

    function loadArmorToPlayer(Armor, player)
        ArmorSaveBodyDamage(player);
        loadArmor(Armor);    
    end

    function 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;
        end

    end

    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();
    end

    function 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;
    end

    function 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
        end

    end
    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
    end

    function 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;
        end

        local 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;
    end

    function wasDamagedBlocked(BodyPartType, InjuryType, player)

        if(ArmorTempBodyDamage[tostring(BodyPartType)]["Bandage"] == true) or (ArmorTempBodyDamage[tostring(BodyPartType)]["Splint"] == true) then
        return false;
        end

        if(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
        end

        return false;
        
    end

    function 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 = "!"});
        
    end

    function 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;
    end

    function ArmorupdateThePlayer(player)
        
            ArmorCheckForDamage(player);
        if(player:isLocalPlayer()) then
            player:getInventory():Remove("HCEquiparmor");
        end
    end

    function 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        
    end

    Events.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

     

     

  19. 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.

  20. 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

  21. @Hydromancerx

     

    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);    
    end

    function 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;
        end

    end

    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();
    end

    function 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;
    end

    function 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
        end

    end
    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
    end

    function 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;
        end

        local 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;
    end

    function wasDamagedBlocked(BodyPartType, InjuryType, player)

        if(ArmorTempBodyDamage[tostring(BodyPartType)]["Bandage"] == true) or (ArmorTempBodyDamage[tostring(BodyPartType)]["Splint"] == true) then
        return false;
        end

        if(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
        end

        return false;
        
    end

    function 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 = "!"});
        
    end

    function 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;
    end

    function ArmorupdateThePlayer(player)
        ArmorCheckForDamage(player);
        player:getInventory():Remove("HCEquiparmor");
    end

    function 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        
    end

    Events.OnKeyPressed.Add(ArmorKeysUp);
    Events.OnPlayerUpdate.Add(ArmorupdateThePlayer);
    Events.OnGameStart.Add(ArmorInit);

     

     

×
×
  • Create New...