Skip to content

Combat

Combat Class

The Combat class handles damage dealing, healing, and combat effects.

Constructor

Combat()

Parameters

setParameter(key, value)

KeyValuesDescription
COMBAT_PARAM_TYPECOMBAT_*Damage type
COMBAT_PARAM_EFFECTCONST_ME_*Magic effect
COMBAT_PARAM_DISTANCEEFFECTCONST_ANI_*Distance effect
COMBAT_PARAM_BLOCKSHIELDbooleanBlocked by shield
COMBAT_PARAM_BLOCKARMORbooleanBlocked by armor
COMBAT_PARAM_TARGETCASTERORTOPMOSTbooleanTarget caster
COMBAT_PARAM_CREATEITEMitemIdCreate item
COMBAT_PARAM_AGGRESSIVEbooleanIs aggressive
COMBAT_PARAM_DISPELCONDITION_*Dispel condition
COMBAT_PARAM_USECHARGESbooleanUse charges
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)

Combat Types

ConstantDescription
COMBAT_NONENo damage
COMBAT_PHYSICALDAMAGEPhysical
COMBAT_ENERGYDAMAGEEnergy
COMBAT_EARTHDAMAGEEarth/Poison
COMBAT_FIREDAMAGEFire
COMBAT_UNDEFINEDDAMAGEUndefined
COMBAT_LIFEDRAINLife drain
COMBAT_MANADRAINMana drain
COMBAT_HEALINGHealing
COMBAT_DROWNDAMAGEDrown
COMBAT_ICEDAMAGEIce
COMBAT_HOLYDAMAGEHoly
COMBAT_DEATHDAMAGEDeath

Damage Formula

setFormula(type, mina, minb, maxa, maxb, minl, maxl, minm, maxm, minc, maxc)

Formula TypeDescription
COMBAT_FORMULA_UNDEFINEDUndefined
COMBAT_FORMULA_LEVELMAGICLevel + Magic Level based
COMBAT_FORMULA_SKILLSkill based
COMBAT_FORMULA_DAMAGEFixed damage range
-- Level + Magic based formula
combat:setFormula(COMBAT_FORMULA_LEVELMAGIC,
0, 0, -- min a, b (multipliers)
0, 0, -- max a, b (multipliers)
5, 10) -- min damage, max damage base
-- Fixed damage
combat:setFormula(COMBAT_FORMULA_DAMAGE,
0, -50, -- min = -50
0, -100) -- max = -100

Combat Area

setArea(area)

local area = createCombatArea({
{0, 0, 1, 0, 0},
{0, 1, 1, 1, 0},
{1, 1, 3, 1, 1}, -- 3 = center
{0, 1, 1, 1, 0},
{0, 0, 1, 0, 0}
})
combat:setArea(area)

Area values:

  • 0 = No effect
  • 1 = Effect area
  • 2 = Alternative area
  • 3 = Center point

Conditions

addCondition(condition)

setCondition(condition)

local condition = Condition(CONDITION_FIRE)
condition:setParameter(CONDITION_PARAM_TICKS, 10000)
condition:setParameter(CONDITION_PARAM_MINVALUE, 10)
condition:setParameter(CONDITION_PARAM_MAXVALUE, 20)
combat:addCondition(condition)

Callbacks

setCallback(key, function)

CallbackParameters
CALLBACK_PARAM_LEVELMAGICVALUE(player, level, maglevel)
CALLBACK_PARAM_SKILLVALUE(player, skill, attack, factor)
CALLBACK_PARAM_TARGETTILE(creature, tile)
CALLBACK_PARAM_TARGETCREATURE(creature, target)
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, function(player, level, maglevel)
local min = (level / 5) + (maglevel * 2)
local max = (level / 5) + (maglevel * 3)
return -min, -max
end)

Execution

execute(creature, variant)

function spell.onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

Examples

Fire Attack Spell

local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
local area = createCombatArea({
{1, 1, 1},
{1, 3, 1},
{1, 1, 1}
})
combat:setArea(area)
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, function(player, level, maglevel)
local min = (level / 5) + (maglevel * 1.5) + 10
local max = (level / 5) + (maglevel * 2.5) + 20
return -min, -max
end)
local spell = Spell(SPELL_INSTANT)
function spell.onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

Healing Spell

local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, function(player, level, maglevel)
local min = (level / 5) + (maglevel * 3) + 20
local max = (level / 5) + (maglevel * 5) + 40
return min, max -- Positive for healing
end)

Condition Spell (Paralyze)

local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED)
local condition = Condition(CONDITION_PARALYZE)
condition:setParameter(CONDITION_PARAM_TICKS, 20000)
condition:setParameter(CONDITION_PARAM_SPEED, -40)
combat:addCondition(condition)