local criticalDefaultChance = 5
local criticalDefaultDamage = 2
local weaponTypeToSkillType = {
[WEAPON_SWORD] = function(p) return p:getEffectiveSkillLevel(SKILL_SWORD) end,
[WEAPON_AXE] = function(p) return p:getEffectiveSkillLevel(SKILL_AXE) end,
[WEAPON_CLUB] = function(p) return p:getEffectiveSkillLevel(SKILL_CLUB) end,
[WEAPON_AMMO] = function(p) return p:getEffectiveSkillLevel(SKILL_DISTANCE) end,
[WEAPON_DISTANCE] = function(p) return p:getEffectiveSkillLevel(SKILL_DISTANCE) end,
[WEAPON_WAND] = function(p) return p:getMagicLevel() end
}
function getSkillByYouWeapon(player)
local skillValue = 0
local weapon = player:getSlotItem(CONST_SLOT_LEFT)
if weapon and ItemType(weapon:getId()):getWeaponType() > 0 then
skillValue = weaponTypeToSkillType[ItemType(weapon:getId()):getWeaponType()] and weaponTypeToSkillType[ItemType(weapon:getId()):getWeaponType()](player) or 0
else
weapon = player:getSlotItem(CONST_SLOT_RIGHT)
if weapon and ItemType(weapon:getId()):getWeaponType() > 0 then
skillValue = weaponTypeToSkillType[ItemType(weapon:getId()):getWeaponType()] and weaponTypeToSkillType[ItemType(weapon:getId()):getWeaponType()](player) or 0
end
end
return skillValue
end
local function onChange(creature, attacker, damage, origin)
local skill = getSkillByYouWeapon(attacker)
if math.random(100 + skill) <= (criticalDefaultChance + (skill / 2)) then
if origin == ORIGIN_MELEE then
creature:say("SKULLBASH!", TALKTYPE_MONSTER_SAY)
elseif origin == ORIGIN_RANGED then
creature:say("HEADSHOT!", TALKTYPE_MONSTER_SAY)
end
damage = damage * criticalDefaultDamage
end
return damage
end
function onHealthChange(creature, attacker, pD, pT, sD, sT, origin)
if isPlayer(attacker) then
pD = onChange(creature, attacker, pD, origin)
end
return pD, pT, sD, sT
end
function onManaChange(creature, attacker, manaChange, origin)
if isPlayer(attacker) then
manaChange = onChange(creature, attacker, manaChange, origin)
end
return manaChange
end