Index: scripts/globals/utils.lua =================================================================== --- scripts/globals/utils.lua (revision 3776) +++ scripts/globals/utils.lua (working copy) @@ -151,6 +151,16 @@ if(resist < 0.5) then resist = 0.5; end + + if(target:getObjType() == TYPE_PC) then + if(target:getEquipID(SLOT_HEAD) == 14646 and (math.random(100) <= 5)) then -- Nocturnus Helm + target:addHP(dmg); + if(dmg > 0) then + target:messageBasic(24,0,dmg); + end + dmg = 0; + end + end return dmg * resist; end; Index: src/map/battleutils.cpp =================================================================== --- src/map/battleutils.cpp (revision 3776) +++ src/map/battleutils.cpp (working copy) @@ -484,23 +484,46 @@ { // check for special damage reducing gear CItemArmor* PArmor = (CItemWeapon*)PChar->getStorage(LOC_INVENTORY)->GetItem(PChar->equip[SLOT_BACK]); - + CItemArmor* PHead = (CItemWeapon*)PChar->getStorage(LOC_INVENTORY)->GetItem(PChar->equip[SLOT_HEAD]); + uint32 originalDamage = damage; if(PArmor != NULL) { switch(PArmor->getID()) { - //shadow mantle 10% chance to annual damage + // Shadow Mantle 10% chance to annual damage case 13658: - if (rand()%100 > 10) return originalDamage; - damage = 0; + if (rand()%100 > 10) + { + damage = 0; + } break; + default: + break; + } + } + if(PHead != NULL) + { + switch(PHead->getID()) + { + // Nocturnus Helm 5% chance to absorb damage + case 11501: + if (rand()%100 <= 5) + { + PChar->addHP(damage); + charutils::UpdateHealth((CCharEntity*)PChar); + PChar->loc.zone->PushPacket(PChar,CHAR_INRANGE_SELF, new CMessageBasicPacket(PChar,PChar,0,damage, 263)); + damage = 0; + } + break; + default: - return originalDamage; + break; } } + return damage; }