local combatHandler = {
[COMBAT_HEALING] = {
color = TEXTCOLOR_RED,
format = '%s%d',
effect = CONST_ME_DRAWBLOOD,
origin = ORIGIN_SPELL,
selfOnly = true
},
[COMBAT_MANADRAIN] = {
color = TEXTCOLOR_LIGHTBLUE,
format = '%s%d',
effect = CONST_ME_SOUND_BLUE,
origin = ORIGIN_SPELL,
selfOnly = true
}
}
local function executeHandler(handler, player, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin)
local requiredOrigin = handler.origin or -1
if requiredOrigin ~= -1 and origin ~= requiredOrigin then
return
end
local selfDamageOnly = handler.selfOnly or false
if selfDamageOnly and player ~= attacker then
return
end
local color = handler.color
local textFormat = handler.format
local magicEffect = handler.effect
local playerPos = player:getPosition()
local dmg = primaryDamage + secondaryDamage
local animatedText = textFormat:format((dmg > 0 and "+" or ""), dmg)
Game.sendAnimatedText(animatedText, playerPos, color)
if magicEffect then
playerPos:sendMagicEffect(magicEffect)
end
end
local healthChangeEvent = CreatureEvent("PlayerHealthChange")
healthChangeEvent:type("healthchange")
function healthChangeEvent.onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin)
local player = Player(creature)
local handler = combatHandler[primaryType or secondaryType]
if player and handler then
executeHandler(handler, player, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin)
end
return primaryDamage, primaryType, secondaryDamage, secondaryType, origin
end
healthChangeEvent:register()
local manaChangeEvent = CreatureEvent("PlayerManaChange")
manaChangeEvent:type("manachange")
function manaChangeEvent.onManaChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin)
local player = Player(creature)
local handler = combatHandler[primaryType or secondaryType]
if player and handler then
executeHandler(handler, player, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin)
end
return primaryDamage, primaryType, secondaryDamage, secondaryType, origin
end
manaChangeEvent:register()
local loginEvent = CreatureEvent("RegisterPlayerStatsChangeEvents")
function loginEvent.onLogin(player)
player:registerEvent("PlayerHealthChange")
player:registerEvent("PlayerManaChange")
return true
end
loginEvent:register()