local dodgeStorage = 45001
local config = {
-- [itemid] -- Dodge must be a whole number out of 10000. | 1000 = 10.00% | 2 = 00.02%
[111111] = {dodgePercent = 5, slot = "head"},
[111111] = {dodgePercent = 5, slot = "necklace"},
[111111] = {dodgePercent = 5, slot = "backpack"},
[111111] = {dodgePercent = 5, slot = "armor"},
[111111] = {dodgePercent = 5, slot = "hand"}, -- weapon or shield is 'hand'
[111111] = {dodgePercent = 5, slot = "legs"},
[111111] = {dodgePercent = 5, slot = "feet"},
[111111] = {dodgePercent = 5, slot = "ring"},
[111111] = {dodgePercent = 5, slot = "ammo"}
}
-- Don't touch under here.
-- Equip ------------------------------------------------------------------------------
local dodgeOnEquip = MoveEvent()
function dodgeOnEquip.onEquip(player, item, slot, isCheck)
if not isCheck then
local itemId = item:getId()
if config[itemId] then
local newValue = player:getStorageValue(dodgeStorage) + config[slotItem].dodgePercent
player:setStorageValue(dodgeStorage, newValue)
end
end
return true
end
for itemId, _ in pairs(config) do
dodgeOnEquip:slot(config[itemId].slot)
dodgeOnEquip:id(itemId)
end
dodgeOnEquip:register()
-- DeEquip ----------------------------------------------------------------------------
local dodgeOnDeEquip = MoveEvent()
function dodgeOnDeEquip.onDeEquip(player, item, slot, isCheck)
if not isCheck then
local itemId = item:getId()
if config[itemId] then
local newValue = player:getStorageValue(dodgeStorage) - config[slotItem].dodgePercent
player:setStorageValue(dodgeStorage, newValue)
end
end
return true
end
for itemId, _ in pairs(config) do
dodgeOnDeEquip:slot(config[itemId].slot)
dodgeOnDeEquip:id(itemId)
end
dodgeOnDeEquip:register()
-- Health Change ----------------------------------------------------------------------
local dodgeHealthChange = CreatureEvent("onHealthChange_dodgeChance")
function dodgeHealthChange.onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin)
if not creature:isPlayer() then
return primaryDamage, primaryType, secondaryDamage, secondaryType
end
local storageValue = creature:getStorageValue(dodgeStorage)
local rand = math.random(10000)
if rand <= storageValue then
primaryDamage = 0
secondaryDamage = 0
creature:say("Dodged!", TALKTYPE_MONSTER_SAY)
end
return primaryDamage, primaryType, secondaryDamage, secondaryType
end
dodgeHealthChange:register()
-- Mana Change ------------------------------------------------------------------------
local dodgeManaChange = CreatureEvent("onManaChange_dodgeChance")
function dodgeManaChange.onManaChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin)
if not creature:isPlayer() then
return primaryDamage, primaryType, secondaryDamage, secondaryType
end
local storageValue = creature:getStorageValue(dodgeStorage)
local rand = math.random(10000)
if rand <= storageValue then
primaryDamage = 0
secondaryDamage = 0
creature:say("Dodged!", TALKTYPE_MONSTER_SAY)
end
return primaryDamage, primaryType, secondaryDamage, secondaryType
end
dodgeManaChange:register()
-- Login ------------------------------------------------------------------------------
local function updateDodgeStorage(playerId)
local player = Player(playerId)
if player then
local storageValue = 0
local slotItem
for i = 1, 10 do
slotItem = player:getSlotItem(i)
if slotItem then
slotItem = slotItem:getId()
if config[slotItem] then
storageValue = storageValue + config[slotItem].dodgePercent
end
end
end
player:setStorageValue(dodgeStorage, storageValue)
end
end
local loginEvent = CreatureEvent("onLogin_updateDodgeStorage")
loginEvent:type("login")
function loginEvent.onLogin(player)
player:registerEvent("onHealthChange_dodgeChance")
player:registerEvent("onManaChange_dodgeChance")
addEvent(updateDodgeStorage, 100, player:getId()) -- slight delay, cuz of login jank
return true
end
loginEvent:register()