First commit

This commit is contained in:
2025-02-26 13:42:34 +01:00
commit f465c9072c
2467 changed files with 426214 additions and 0 deletions

View File

@@ -0,0 +1,230 @@
function healingFormula(level, maglevel, base, variation, value_min, value_max)
local value = 3 * maglevel + (2 * level)
if value_min ~= nil and value <= value_min then
value = value_min
end
if value_max ~= nil and value >= value_max then
value = value_max
end
local min = value * (base - variation) / 100
local max = value * (base + variation) / 100
return min, max
end
function damageFormula(level, maglevel, base, variation)
local value = 3 * maglevel + (2 * level)
local min = value * (base - variation) / 100
local max = value * (base + variation) / 100
return min, max
end
function computeFormula(level, maglevel, base, variation)
local damage = base
if variation > 0 then
damage = math.random(-variation, variation) + damage
end
local level_formula = 2 * level
local magic_formula = 3 * maglevel + level_formula
return magic_formula * damage / 100
end
---------------------------------------------------------------------------------------
AREA_WAVE3 = {
{1, 1, 1},
{1, 1, 1},
{0, 3, 0}
}
AREA_WAVE4 = {
{1, 1, 1, 1, 1},
{0, 1, 1, 1, 0},
{0, 1, 1, 1, 0},
{0, 0, 3, 0, 0}
}
AREA_WAVE6 = {
{0, 0, 0, 0, 0},
{0, 1, 3, 1, 0},
{0, 0, 0, 0, 0}
}
AREA_SQUAREWAVE5 = {
{1, 1, 1},
{1, 1, 1},
{1, 1, 1},
{0, 1, 0},
{0, 3, 0}
}
AREA_SQUAREWAVE6 = {
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0}
}
AREA_SQUAREWAVE7 = {
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0}
}
--Diagonal waves
AREADIAGONAL_WAVE4 = {
{0, 0, 0, 0, 1, 0},
{0, 0, 0, 1, 1, 0},
{0, 0, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 0},
{1, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 3}
}
AREADIAGONAL_SQUAREWAVE5 = {
{1, 1, 1, 0, 0},
{1, 1, 1, 0, 0},
{1, 1, 1, 0, 0},
{0, 0, 0, 1, 0},
{0, 0, 0, 0, 3}
}
AREADIAGONAL_WAVE6 = {
{0, 0, 1},
{0, 3, 0},
{1, 0, 0}
}
--Beams
AREA_BEAM1 = {
{3}
}
AREA_BEAM5 = {
{1},
{1},
{1},
{1},
{3}
}
AREA_BEAM7 = {
{1},
{1},
{1},
{1},
{1},
{1},
{3}
}
AREA_BEAM8 = {
{1},
{1},
{1},
{1},
{1},
{1},
{1},
{3}
}
--Diagonal Beams
AREADIAGONAL_BEAM5 = {
{1, 0, 0, 0, 0},
{0, 1, 0, 0, 0},
{0, 0, 1, 0, 0},
{0, 0, 0, 1, 0},
{0, 0, 0, 0, 3}
}
AREADIAGONAL_BEAM7 = {
{1, 0, 0, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0, 0},
{0, 0, 1, 0, 0, 0, 0},
{0, 0, 0, 1, 0, 0, 0},
{0, 0, 0, 0, 1, 0, 0},
{0, 0, 0, 0, 0, 1, 0},
{0, 0, 0, 0, 0, 0, 3}
}
--Circles
AREA_CIRCLE2X2 = {
{0, 1, 1, 1, 0},
{1, 1, 1, 1, 1},
{1, 1, 3, 1, 1},
{1, 1, 1, 1, 1},
{0, 1, 1, 1, 0}
}
AREA_CIRCLE3X3 = {
{0, 0, 1, 1, 1, 0, 0},
{0, 1, 1, 1, 1, 1, 0},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 3, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
{0, 1, 1, 1, 1, 1, 0},
{0, 0, 1, 1, 1, 0, 0}
}
-- Crosses
AREA_CROSS1X1 = {
{0, 1, 0},
{1, 3, 1},
{0, 1, 0}
}
AREA_CIRCLE5X5 = {
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}
}
--Squares
AREA_SQUARE1X1 = {
{1, 1, 1},
{1, 3, 1},
{1, 1, 1}
}
-- Walls
AREA_WALLFIELD = {
{1, 1, 3, 1, 1}
}
AREADIAGONAL_WALLFIELD = {
{0, 0, 0, 0, 1},
{0, 0, 0, 1, 1},
{0, 1, 3, 1, 0},
{1, 1, 0, 0, 0},
{1, 0, 0, 0, 0},
}

View File

@@ -0,0 +1,29 @@
local humanBodies = {
4240, 4241, 4247, 4248
}
function onCastSpell(creature, variant)
local position = Variant.getPosition(variant)
local tile = Tile(position)
if tile then
local corpse = tile:getTopDownItem()
if corpse then
local itemType = corpse:getType()
if not table.contains(humanBodies, itemType:getId()) then
if itemType:isCorpse() and itemType:isMovable() then
local monster = Game.createMonster("Skeleton", position)
if monster then
corpse:remove()
monster:setMaster(creature)
position:sendMagicEffect(CONST_ME_MAGIC_BLUE)
return true
end
end
end
end
end
creature:getPosition():sendMagicEffect(CONST_ME_POFF)
creature:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
return false
end

View File

@@ -0,0 +1,9 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
combat:setParameter(COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
function onCastSpell(creature, variant)
creature:removeCondition(CONDITION_POISON)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,29 @@
local fieldIds = {
2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125,
2126, 2127, 2131, 2132, 2133, 2134, 2135
}
function onCastSpell(creature, variant, isHotkey)
local position = Variant.getPosition(variant)
local tile = Tile(position)
local field = tile and tile:getItemByType(ITEM_TYPE_MAGICFIELD)
if field and table.contains(fieldIds, field:getId()) then
field:remove()
position:sendMagicEffect(CONST_ME_POFF)
return true
end
for _, id in ipairs(fieldIds) do
field = tile and tile:getItemById(id)
if field then
field:remove()
position:sendMagicEffect(CONST_ME_POFF)
return true
end
end
creature:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
creature:getPosition():sendMagicEffect(CONST_ME_POFF)
return false
end

View File

@@ -0,0 +1,26 @@
local dead_human = {
4240, 4241, 4242, 4247, 4248
}
local removalLimit = 10
function onCastSpell(creature, variant)
local position = variant:getPosition()
local tile = Tile(position)
if tile then
local items = tile:getItems()
if items then
for i, item in ipairs(items) do
if item:getType():isMovable() and item:getActionId() == 0 and not table.contains(dead_human, item:getId()) then
item:remove()
end
if i == removalLimit then
break
end
end
end
end
position:sendMagicEffect(CONST_ME_POFF)
return true
end

View File

@@ -0,0 +1,9 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)
combat:setParameter(COMBAT_PARAM_MAGICEFFECT, CONST_ME_ENERGYHIT)
combat:setParameter(COMBAT_PARAM_CREATEITEM, 2122)
function onCastSpell(creature, variant, isHotkey)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,10 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)
combat:setParameter(COMBAT_PARAM_MAGICEFFECT, CONST_ME_ENERGYHIT)
combat:setParameter(COMBAT_PARAM_CREATEITEM, 2122)
combat:setArea(createCombatArea(AREA_WALLFIELD, AREADIAGONAL_WALLFIELD))
function onCastSpell(creature, variant, isHotkey)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,10 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)
combat:setParameter(COMBAT_PARAM_MAGICEFFECT, CONST_ME_ENERGYHIT)
combat:setParameter(COMBAT_PARAM_CREATEITEM, 2122)
combat:setArea(createCombatArea(AREA_SQUARE1X1))
function onCastSpell(creature, variant, isHotkey)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,18 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HITBYPOISON)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)
function onTargetCreature(creature, target)
local player = Player(creature)
local condition = Condition(CONDITION_POISON)
condition:setTiming(computeFormula(player:getLevel(), player:getMagicLevel(), 70, 20))
target:addCondition(condition)
end
combat:setCallback(CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,23 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONAREA)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
combat:setParameter(COMBAT_PARAM_BLOCKARMOR, true)
combat:setArea(createCombatArea(AREA_CROSS1X1))
function onGetFormulaValues(player, level, maglevel)
local base = 60
local variation = 40
local formula = 3 * maglevel + (2 * level)
local min = (formula * (base - variation)) / 100
local max = (formula * (base + variation)) / 100
return -min, -max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant, isHotkey)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,9 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
combat:setParameter(COMBAT_PARAM_MAGICEFFECT, CONST_ME_HITBYFIRE)
combat:setParameter(COMBAT_PARAM_CREATEITEM, 2118)
function onCastSpell(creature, variant, isHotkey)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,10 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
combat:setParameter(COMBAT_PARAM_MAGICEFFECT, CONST_ME_HITBYFIRE)
combat:setParameter(COMBAT_PARAM_CREATEITEM, 2118)
combat:setArea(createCombatArea(AREA_WALLFIELD, AREADIAGONAL_WALLFIELD))
function onCastSpell(creature, variant, isHotkey)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,22 @@
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:setArea(createCombatArea(AREA_CIRCLE2X2))
function onGetFormulaValues(player, level, maglevel)
local base = 20
local variation = 10
local formula = 3 * maglevel + (2 * level)
local min = (formula * (base - variation)) / 100
local max = (formula * (base + variation)) / 100
return -min, -max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant, isHotkey)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,10 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
combat:setParameter(COMBAT_PARAM_MAGICEFFECT, CONST_ME_HITBYFIRE)
combat:setParameter(COMBAT_PARAM_CREATEITEM, 2118)
combat:setArea(createCombatArea(AREA_SQUARE1X1))
function onCastSpell(creature, variant, isHotkey)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,22 @@
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:setArea(createCombatArea(AREA_CIRCLE3X3))
function onGetFormulaValues(player, level, maglevel)
local base = 50
local variation = 15
local formula = 3 * maglevel + (2 * level)
local min = (formula * (base - variation)) / 100
local max = (formula * (base + variation)) / 100
return -min, -max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant, isHotkey)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,21 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONHIT)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
function onGetFormulaValues(player, level, maglevel)
local base = 30
local variation = 10
local formula = 3 * maglevel + (2 * level)
local min = (formula * (base - variation)) / 100
local max = (formula * (base + variation)) / 100
return -min, -max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant, isHotkey)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,15 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
combat:setParameter(COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
function onGetFormulaValues(player, level, maglevel)
return healingFormula(level, maglevel, 70, 30, 100)
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,21 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONHIT)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
function onGetFormulaValues(player, level, maglevel)
local base = 15
local variation = 5
local formula = 3 * maglevel + (2 * level)
local min = (formula * (base - variation)) / 100
local max = (formula * (base + variation)) / 100
return -min, -max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant, isHotkey)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,7 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)
combat:setParameter(COMBAT_PARAM_CREATEITEM, 2128)
function onCastSpell(creature, variant, isHotkey)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,16 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED)
local condition = Condition(CONDITION_PARALYZE)
condition:setParameter(CONDITION_PARAM_TICKS, 10000)
condition:setSpeedDelta(-101)
combat:setCondition(condition)
function onCastSpell(creature, variant, isHotkey)
if not combat:execute(creature, variant) then
return false
end
creature:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
return true
end

View File

@@ -0,0 +1,10 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON)
combat:setParameter(COMBAT_PARAM_CREATEITEM, 2121)
combat:setArea(createCombatArea(AREA_SQUARE1X1))
function onCastSpell(creature, variant, isHotkey)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,9 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON)
combat:setParameter(COMBAT_PARAM_CREATEITEM, 2121)
function onCastSpell(creature, variant, isHotkey)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,10 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON)
combat:setParameter(COMBAT_PARAM_CREATEITEM, 2121)
combat:setArea(createCombatArea(AREA_WALLFIELD, AREADIAGONAL_WALLFIELD))
function onCastSpell(creature, variant, isHotkey)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,18 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
function onTargetCreature(creature, target)
local player = Player(creature)
local condition = Condition(CONDITION_FIRE)
condition:setTiming(computeFormula(player:getLevel(), player:getMagicLevel(), 120, 20))
target:addCondition(condition)
end
combat:setCallback(CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,21 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_DEATH)
function onGetFormulaValues(player, level, maglevel)
local base = 150
local variation = 20
local formula = 3 * maglevel + (2 * level)
local min = (formula * (base - variation)) / 100
local max = (formula * (base + variation)) / 100
return -min, -max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant, isHotkey)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,16 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
combat:setParameter(COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
combat:setParameter(COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
function onGetFormulaValues(player, level, maglevel)
return healingFormula(level, maglevel, 250, 0, 100)
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant, isHotkey)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,8 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
function onCastSpell(creature, variant)
creature:removeCondition(CONDITION_POISON)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,21 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
combat:setArea(createCombatArea(AREA_SQUARE1X1))
function onGetFormulaValues(player, level, maglevel)
local base = 80
local variation = 20
local formula = 4 * level
local min = (formula * (base - variation)) / 100
local max = (formula * (base + variation)) / 100
return -min, -max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,8 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
combat:setParameter(COMBAT_PARAM_DISPEL, CONDITION_INVISIBLE)
combat:setArea(createCombatArea(AREA_CIRCLE3X3))
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,13 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
combat:setArea(createCombatArea(AREA_SQUARE1X1))
function onTargetCreature(creature, target)
return doChallengeCreature(creature, target)
end
combat:setCallback(CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,21 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONHIT)
combat:setArea(createCombatArea(AREA_BEAM5, AREADIAGONAL_BEAM5))
function onGetFormulaValues(player, level, maglevel)
local base = 60
local variation = 20
local formula = 3 * maglevel + (2 * level)
local min = (formula * (base - variation)) / 100
local max = (formula * (base + variation)) / 100
return -min, -max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,20 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_TELEPORT)
function onGetFormulaValues(player, level, maglevel)
local base = 45
local variation = 10
local formula = 3 * maglevel + (2 * level)
local min = (formula * (base - variation)) / 100
local max = (formula * (base + variation)) / 100
return -min, -max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,21 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_TELEPORT)
combat:setArea(createCombatArea(AREA_SQUAREWAVE5))
function onGetFormulaValues(player, level, maglevel)
local base = 150
local variation = 50
local formula = 3 * maglevel + (2 * level)
local min = (formula * (base - variation)) / 100
local max = (formula * (base + variation)) / 100
return -min, -max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,21 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
combat:setArea(createCombatArea(AREA_WAVE4, AREADIAGONAL_WAVE4))
function onGetFormulaValues(player, level, maglevel)
local base = 30
local variation = 10
local formula = 3 * maglevel + (2 * level)
local min = (formula * (base - variation)) / 100
local max = (formula * (base + variation)) / 100
return -min, -max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,20 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
function onGetFormulaValues(player, level, maglevel)
local base = 45
local variation = 10
local formula = 3 * maglevel + (2 * level)
local min = (formula * (base - variation)) / 100
local max = (formula * (base + variation)) / 100
return -min, -max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,9 @@
local food = {
3577, 3582, 3585, 3592, 3602
}
function onCastSpell(creature, variant)
creature:addItem(food[math.random(#food)])
creature:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
return true
end

View File

@@ -0,0 +1,20 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
function onGetFormulaValues(player, level, maglevel)
local base = 45
local variation = 10
local formula = 3 * maglevel + (2 * level)
local min = (formula * (base - variation)) / 100
local max = (formula * (base + variation)) / 100
return -min, -max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,21 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
combat:setArea(createCombatArea(AREA_BEAM8))
function onGetFormulaValues(player, level, maglevel)
local base = 120
local variation = 80
local formula = 3 * maglevel + (2 * level)
local min = (formula * (base - variation)) / 100
local max = (formula * (base + variation)) / 100
return -min, -max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,13 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
local condition = Condition(CONDITION_LIGHT)
condition:setParameter(CONDITION_PARAM_LIGHT_LEVEL, 8)
condition:setParameter(CONDITION_PARAM_LIGHT_COLOR, 215)
condition:setParameter(CONDITION_PARAM_TICKS, (11 * 60 + 35) * 1000)
combat:setCondition(condition)
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,12 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
local condition = Condition(CONDITION_HASTE)
condition:setParameter(CONDITION_PARAM_TICKS, 30000)
condition:setSpeedDelta(30)
combat:setCondition(condition)
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,23 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN)
combat:setParameter(COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
function onGetFormulaValues(player, level, maglevel)
local base = 120
local variation = 40
local formula = 3 * maglevel + (2 * level)
local min = (formula * (base - variation)) / 100
local max = (formula * (base + variation)) / 100
return min, max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant)
creature:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,15 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
combat:setParameter(COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
function onGetFormulaValues(player, level, maglevel)
return healingFormula(level, maglevel, 40, 20, 100)
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,11 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
local condition = Condition(CONDITION_INVISIBLE)
condition:setParameter(CONDITION_PARAM_TICKS, 200000)
combat:setCondition(condition)
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,15 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
combat:setParameter(COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
function onGetFormulaValues(player, level, maglevel)
return healingFormula(level, maglevel, 20, 10, 100)
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,13 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
local condition = Condition(CONDITION_LIGHT)
condition:setParameter(CONDITION_PARAM_LIGHT_LEVEL, 6)
condition:setParameter(CONDITION_PARAM_LIGHT_COLOR, 215)
condition:setParameter(CONDITION_PARAM_TICKS, (6 * 60 + 10) * 1000)
combat:setCondition(condition)
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,23 @@
local ropeSpots = {
386, 421
}
function onCastSpell(creature, variant)
local position = creature:getPosition()
position:sendMagicEffect(CONST_ME_POFF)
local tile = Tile(position)
if table.contains(ropeSpots, tile:getGround():getId()) then
tile = Tile(position:moveUpstairs())
if tile then
creature:teleportTo(position)
position:sendMagicEffect(CONST_ME_TELEPORT)
else
creature:sendCancelMessage(RETURNVALUE_NOTENOUGHROOM)
end
else
creature:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
return false
end
return true
end

View File

@@ -0,0 +1,11 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
local condition = Condition(CONDITION_MANASHIELD)
condition:setParameter(CONDITION_PARAM_TICKS, 200000)
combat:setCondition(condition)
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,34 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
combat:setParameter(COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
combat:setArea(createCombatArea(AREA_CIRCLE3X3))
local healMonsters = true
function onTargetCreature(creature, target)
if not healMonsters then
local master = target:getMaster()
if target:isMonster() and not master or master and master:isMonster() then
return true
end
end
local player = creature:getPlayer()
local base = 200
local variation = 40
local value = math.random(-variation, variation) + base
local formula = 3 * player:getMagicLevel() + (2 * player:getLevel())
local total = formula * value / 100
doTargetCombatHealth(0, target, COMBAT_HEALING, total, total, CONST_ME_NONE)
return true
end
combat:setCallback(CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,18 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS)
combat:setArea(createCombatArea(AREA_CIRCLE5X5))
function onTargetCreature(creature, target)
local player = Player(creature)
local condition = Condition(CONDITION_POISON)
condition:setTiming(computeFormula(player:getLevel(), player:getMagicLevel(), 200, 50))
target:addCondition(condition)
end
combat:setCallback(CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,20 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS)
function onGetFormulaValues(player, level, maglevel)
local base = 45
local variation = 10
local formula = 3 * maglevel + (2 * level)
local min = (formula * (base - variation)) / 100
local max = (formula * (base + variation)) / 100
return -min, -max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,21 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS)
combat:setArea(createCombatArea(AREA_SQUAREWAVE5))
function onGetFormulaValues(player, level, maglevel)
local base = 150
local variation = 50
local formula = 3 * maglevel + (2 * level)
local min = (formula * (base - variation)) / 100
local max = (formula * (base + variation)) / 100
return -min, -max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,12 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
local condition = Condition(CONDITION_HASTE)
condition:setParameter(CONDITION_PARAM_TICKS, 20000)
condition:setSpeedDelta(70)
combat:setCondition(condition)
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,23 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
combat:setParameter(COMBAT_PARAM_BLOCKARMOR, 1)
combat:setParameter(COMBAT_PARAM_BLOCKSHIELD, 1)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONAREA)
combat:setArea(createCombatArea(AREA_CIRCLE5X5))
function onGetFormulaValues(player, level, maglevel)
local base = 250
local variation = 50
local formula = 3 * maglevel + (2 * level)
local min = (formula * (base - variation)) / 100
local max = (formula * (base + variation)) / 100
return -min, -max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,15 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
combat:setParameter(COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
function onGetFormulaValues(player, level, maglevel)
return healingFormula(level, maglevel, 250, 50, 100)
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,13 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
local condition = Condition(CONDITION_LIGHT)
condition:setParameter(CONDITION_PARAM_LIGHT_LEVEL, 9)
condition:setParameter(CONDITION_PARAM_LIGHT_COLOR, 215)
condition:setParameter(CONDITION_PARAM_TICKS, (60 * 33 + 10) * 1000)
combat:setCondition(condition)
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,34 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS)
combat:setArea(createCombatArea(AREA_CIRCLE5X5))
local humanBodies = {
4240, 4241, 4247, 4248
}
function onCastSpell(creature, variant)
local position = Variant.getPosition(variant)
local tile = Tile(position)
if tile then
local corpse = tile:getTopDownItem()
if corpse then
local itemType = corpse:getType()
if not table.contains(humanBodies, itemType:getId()) then
if itemType:isCorpse() and itemType:isMovable() then
local monster = Game.createMonster("Skeleton", position)
if monster then
corpse:remove()
monster:setMaster(creature)
position:sendMagicEffect(CONST_ME_MAGIC_BLUE)
return true
end
end
end
end
end
creature:getPosition():sendMagicEffect(CONST_ME_POFF)
creature:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
return false
end

View File

@@ -0,0 +1,7 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)
combat:setParameter(COMBAT_PARAM_CREATEITEM, 2130)
function onCastSpell(creature, variant, isHotkey)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,461 @@
<?xml version="1.0" encoding="UTF-8"?>
<spells>
<!-- Sorcerer Spells -->
<instant name="Force Strike" words="exori mort" maglv="2" mana="20" prem="0" cooldown="1000" range="3" direction="1" blockwalls="1" needlearn="0" script="spells/force strike.lua">
<vocation name="Sorcerer" />
<vocation name="Master Sorcerer" />
<vocation name="Druid" />
<vocation name="Elder Druid" />
</instant>
<instant name="Fire Wave" words="exevo flam hur" maglv="7" mana="80" direction="1" needlearn="0" script="spells/fire wave.lua">
<vocation name="Sorcerer" />
<vocation name="Master Sorcerer" />
</instant>
<instant name="Energy Beam" words="exevo vis lux" maglv="10" mana="100" direction="1" needlearn="0" script="spells/energy beam.lua">
<vocation name="Sorcerer" />
<vocation name="Master Sorcerer" />
</instant>
<instant name="Great Energy Beam" words="exevo gran vis lux" maglv="14" mana="200" direction="1" needlearn="0" script="spells/great energy beam.lua">
<vocation name="Sorcerer" />
<vocation name="Master Sorcerer" />
</instant>
<instant name="Energy Wave" words="exevo mort hur" maglv="20" mana="250" direction="1" needlearn="0" script="spells/energy wave.lua">
<vocation name="Sorcerer" />
<vocation name="Master Sorcerer" />
</instant>
<instant name="Ultimate Explosion" words="exevo gran mas vis" maglv="40" mana="800" selftarget="1" prem="0" needlearn="0" script="spells/ultimate explosion.lua">
<vocation name="Sorcerer" />
<vocation name="Master Sorcerer" />
</instant>
<!-- Druid Spells -->
<instant name="Heal Friend" words="exura sio" maglv="7" mana="70" prem="0" aggressive="0" blockwalls="1" needtarget="1" playernameparam="1" params="1" needlearn="0" script="spells/heal friend.lua">
<vocation name="Druid" />
<vocation name="Elder Druid" />
</instant>
<instant name="Undead Legion" words="exana mas mort" maglv="15" mana="400" prem="0" aggressive="1" needlearn="0" script="spells/undead legion.lua">
<vocation name="Druid" />
<vocation name="Elder Druid" />
</instant>
<instant name="Mass Healing" words="exura gran mas res" maglv="19" mana="120" prem="0" aggressive="0" needlearn="0" script="spells/mass healing.lua">
<vocation name="Druid" />
<vocation name="Elder Druid" />
</instant>
<instant name="Poison Storm" words="exevo gran mas pox" maglv="28" mana="400" prem="0" aggressive="1" needlearn="0" script="spells/poison storm.lua">
<vocation name="Druid" />
<vocation name="Elder Druid" />
</instant>
<instant name="Poison Wave" words="exevo pox hur" maglv="20" mana="250" direction="1" needlearn="0" script="spells/poison wave.lua">
<vocation name="Druid" />
<vocation name="Elder Druid" />
</instant>
<instant name="Wild Growth" words="exevo grav vita" maglv="13" mana="150" prem="0" cooldown="1000" range="3" direction="1" blocktype="all" needlearn="0" script="spells/wild growth.lua">
<vocation name="Druid" />
<vocation name="Elder Druid" />
</instant>
<!-- Knight Spells -->
<instant name="Challenge" words="exeta res" maglv="4" mana="30" prem="0" aggressive="0" needlearn="0" script="spells/challenge.lua">
<vocation name="Elite Knight" />
</instant>
<instant name="Berserk" words="exori" maglv="5" mana="150" prem="0" needweapon="1" needlearn="0" script="spells/berserk.lua">
<vocation name="Knight" />
<vocation name="Elite Knight" />
</instant>
<!-- Other -->
<instant name="Food" words="exevo pan" maglv="0" mana="30" soul="0" aggressive="0" needlearn="0" script="spells/food.lua">
<vocation name="Druid" />
<vocation name="Elder Druid" />
<vocation name="Paladin" />
<vocation name="Royal Paladin" />
</instant>
<instant name="Find Person" words="exiva" maglv="0" mana="20" aggressive="0" playernameparam="1" params="1" needlearn="0" function="searchPlayer">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Paladin" />
<vocation name="Knight" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
<vocation name="Royal Paladin" />
<vocation name="Elite Knight" />
</instant>
<instant name="Light" words="utevo lux" maglv="0" mana="20" aggressive="0" selftarget="1" needlearn="0" script="spells/light.lua">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Paladin" />
<vocation name="Knight" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
<vocation name="Royal Paladin" />
<vocation name="Elite Knight" />
</instant>
<instant name="Light Healing" words="exura" maglv="1" mana="25" aggressive="0" selftarget="1" needlearn="0" script="spells/light healing.lua">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Paladin" />
<vocation name="Knight" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
<vocation name="Royal Paladin" />
<vocation name="Elite Knight" />
</instant>
<instant name="Magic Rope" words="exani tera" maglv="1" mana="20" prem="0" aggressive="0" selftarget="1" needlearn="0" script="spells/magic rope.lua">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Paladin" />
<vocation name="Knight" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
<vocation name="Royal Paladin" />
<vocation name="Elite Knight" />
</instant>
<instant name="Antidote" words="exana pox" maglv="2" mana="30" aggressive="0" selftarget="1" needlearn="0" script="spells/antidote.lua">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Paladin" />
<vocation name="Knight" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
<vocation name="Royal Paladin" />
<vocation name="Elite Knight" />
</instant>
<instant name="Intense Healing" words="exura gran" maglv="2" mana="40" aggressive="0" selftarget="1" needlearn="0" script="spells/intense healing.lua">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Paladin" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
<vocation name="Royal Paladin" />
</instant>
<instant name="Levitate" words="exani hur" maglv="3" mana="50" prem="0" aggressive="0" params="1" needlearn="0" function="Levitate">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Paladin" />
<vocation name="Knight" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
<vocation name="Royal Paladin" />
<vocation name="Elite Knight" />
</instant>
<instant name="Energy Strike" words="exori vis" maglv="4" mana="20" prem="0" cooldown="1000" range="3" direction="1" blockwalls="1" needlearn="0" script="spells/energy strike.lua">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</instant>
<instant name="Poison Strike" words="exori pox" maglv="2" mana="20" prem="0" cooldown="1000" range="3" direction="1" blockwalls="1" needlearn="0" script="spells/poison strike.lua">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</instant>
<instant name="Great Light" words="utevo gran lux" maglv="3" mana="60" aggressive="0" selftarget="1" needlearn="0" script="spells/great light.lua">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Paladin" />
<vocation name="Knight" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
<vocation name="Royal Paladin" />
<vocation name="Elite Knight" />
</instant>
<instant name="Magic Shield" words="utamo vita" maglv="4" mana="50" aggressive="0" selftarget="1" needlearn="0" script="spells/magic shield.lua">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Paladin" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
<vocation name="Royal Paladin" />
</instant>
<instant name="Flame Strike" words="exori flam" maglv="3" mana="20" prem="0" cooldown="1000" range="3" direction="1" blockwalls="1" needlearn="0" script="spells/flame strike.lua">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</instant>
<instant name="Haste" words="utani hur" maglv="4" mana="60" prem="0" aggressive="0" selftarget="1" needlearn="0" script="spells/haste.lua">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Paladin" />
<vocation name="Knight" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
<vocation name="Royal Paladin" />
<vocation name="Elite Knight" />
</instant>
<instant name="Ultimate Healing" words="exura vita" maglv="8" mana="80" aggressive="0" selftarget="1" needlearn="0" script="spells/ultimate healing.lua">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
<vocation name="Paladin" />
<vocation name="Royal Paladin" />
</instant>
<instant name="Strong Haste" words="utani gran hur" maglv="8" mana="100" prem="0" aggressive="0" selftarget="1" needlearn="0" script="spells/strong haste.lua">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</instant>
<instant name="Creature Illusion" words="utevo res ina" maglv="10" mana="100" aggressive="0" params="1" needlearn="0" function="Illusion">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</instant>
<instant name="Summon Creature" words="utevo res" maglv="16" params="1" needlearn="0" function="summonMonster">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</instant>
<instant name="Cancel Invisibility" words="exana ina" maglv="12" mana="250" prem="0" aggressive="0" selftarget="1" needlearn="0" script="spells/cancel invisibility.lua">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</instant>
<instant name="Ultimate Light" words="utevo vis lux" maglv="12" mana="140" prem="0" aggressive="0" selftarget="1" needlearn="0" script="spells/ultimate light.lua">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</instant>
<instant name="Invisible" words="utana vid" maglv="15" mana="210" aggressive="0" selftarget="1" needlearn="0" script="spells/invisible.lua">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
<vocation name="Paladin" />
<vocation name="Royal Paladin" />
</instant>
<!-- Attack Rune Spells -->
<rune name="Poison Field" id="3172" allowfaruse="1" charges="3" maglv="0" blocktype="solid" script="runes/poison field.lua" />
<rune name="Poison Bomb" id="3173" allowfaruse="1" charges="2" maglv="4" blocktype="solid" script="runes/poison bomb.lua" />
<rune name="Poison Wall" id="3176" allowfaruse="1" charges="4" maglv="5" blocktype="solid" script="runes/poison wall.lua" />
<rune name="Fire Field" id="3188" allowfaruse="1" charges="3" maglv="1" blocktype="solid" script="runes/fire field.lua" />
<rune name="Fire Bomb" id="3192" allowfaruse="1" charges="2" maglv="5" blocktype="solid" script="runes/firebomb.lua" />
<rune name="Fire Wall" id="3190" allowfaruse="1" charges="4" maglv="6" blocktype="solid" script="runes/fire wall.lua" />
<rune name="Energy Field" id="3164" allowfaruse="1" charges="3" maglv="3" blocktype="solid" script="runes/energy field.lua" />
<rune name="Energy Bomb" id="3149" allowfaruse="1" charges="2" maglv="10" blocktype="solid" script="runes/energybomb.lua" />
<rune name="Energy Wall" id="3166" allowfaruse="1" charges="4" maglv="9" blocktype="solid" script="runes/energy wall.lua" />
<rune name="Soulfire" id="3195" allowfaruse="1" charges="2" maglv="7" needtarget="1" blocktype="solid" script="runes/soulfire.lua" />
<rune name="Envenom" id="3179" allowfaruse="1" charges="3" maglv="4" needtarget="1" blocktype="solid" script="runes/envenom.lua" />
<rune name="Fireball" id="3189" allowfaruse="1" charges="3" maglv="2" needtarget="0" blocktype="solid" script="runes/fireball.lua" />
<rune name="Great Fireball" id="3191" allowfaruse="1" charges="2" maglv="4" blocktype="solid" script="runes/great fireball.lua" />
<rune name="Light Magic Missile" id="3174" allowfaruse="1" charges="5" maglv="0" needtarget="1" blocktype="solid" script="runes/light magic missile.lua" />
<rune name="Heavy Magic Missile" id="3198" allowfaruse="1" charges="5" maglv="1" needtarget="1" blocktype="solid" script="runes/heavy magic missile.lua" />
<rune name="Explosion" id="3200" allowfaruse="1" charges="6" maglv="6" blocktype="solid" script="runes/explosion.lua" />
<rune name="Sudden Death" id="3155" allowfaruse="1" charges="1" maglv="15" needtarget="1" blocktype="solid" script="runes/sudden death.lua" />
<!-- Healing Rune Spells -->
<rune name="Antidote Rune" id="3153" allowfaruse="1" charges="1" maglv="0" aggressive="0" needtarget="1" blocktype="solid" script="runes/cure poison.lua" />
<rune name="Intense Healing Rune" id="3152" allowfaruse="1" charges="1" maglv="1" aggressive="0" needtarget="1" blocktype="solid" script="runes/intense healing.lua" />
<rune name="Ultimate Healing Rune" id="3160" allowfaruse="1" charges="1" maglv="4" aggressive="0" needtarget="1" blocktype="solid" script="runes/ultimate healing.lua" />
<rune name="Convince Creature" id="3177" allowfaruse="1" charges="1" maglv="5" needtarget="1" blocktype="solid" function="convince" />
<!-- Support Rune Spells -->
<rune name="Animate Dead" id="3203" allowfaruse="1" charges="2" maglv="4" script="runes/animate dead.lua" />
<rune name="Disintegrate" id="3197" allowfaruse="0" charges="3" maglv="4" blocking="false" range="1" script="runes/disintegrate.lua" />
<rune name="Destroy Field" id="3148" allowfaruse="1" charges="3" maglv="3" aggressive="0" range="5" script="runes/destroy field.lua" />
<rune name="Chameleon" id="3178" allowfaruse="1" charges="1" maglv="4" aggressive="0" selftarget="1" blocktype="solid" function="chameleon" />
<rune name="Magic Wall" id="3180" allowfaruse="1" charges="4" maglv="9" blocktype="all" script="runes/magic wall.lua" />
<rune name="Paralyze" id="3165" allowfaruse="1" charges="1" maglv="18" mana="900" needtarget="1" blocktype="solid" script="runes/paralyze.lua">
<vocation name="Druid" />
<vocation name="Elder Druid" showInDescription="0" />
</rune>
<!-- Conjure Spells -->
<conjure name="Conjure Blank Rune" words="adori blank" maglv="10" mana="10" soul="10" conjureId="3147" conjureCount="1" needlearn="0" function="conjureItem">
<vocation name="Paladin" />
<vocation name="Royal Paladin" />
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Conjure Arrow" words="exevo con" maglv="2" mana="40" soul="0" conjureId="3447" conjureCount="15" needlearn="0" function="conjureItem">
<vocation name="Paladin" />
<vocation name="Royal Paladin" />
</conjure>
<conjure name="Conjure Poison Arrow" words="exevo con pox" maglv="5" mana="70" soul="0" conjureId="3448" conjureCount="5" needlearn="0" function="conjureItem">
<vocation name="Paladin" />
<vocation name="Royal Paladin" />
</conjure>
<conjure name="Conjure Explosive Arrow" words="exevo con flam" maglv="10" mana="120" soul="0" conjureId="3449" conjureCount="8" needlearn="0" function="conjureItem">
<vocation name="Paladin" />
<vocation name="Royal Paladin" />
</conjure>
<conjure name="Conjure Bolt" words="exevo con mort" maglv="6" mana="70" soul="0" prem="0" conjureId="3446" conjureCount="10" needlearn="0" function="conjureItem">
<vocation name="Paladin" />
<vocation name="Royal Paladin" />
</conjure>
<conjure name="Conjure Power Bolt" words="exevo con vis" maglv="14" mana="200" soul="0" prem="0" conjureId="3450" conjureCount="2" needlearn="0" function="conjureItem">
<vocation name="Royal Paladin" />
</conjure>
<conjure name="Conjure Infernal Bolt" words="exevo con mort flam" maglv="16" mana="180" soul="0" prem="0" conjureId="6528" conjureCount="1" needlearn="0" function="conjureItem">
<vocation name="Royal Paladin" />
</conjure>
<conjure name="Enchant Staff" words="exeta vis" maglv="22" mana="80" prem="0" conjureId="3321" reagentId="3289" needlearn="0" function="conjureItem">
<vocation name="Master Sorcerer" />
</conjure>
<conjure name="Poison Field" words="adevo grav pox" maglv="2" mana="50" soul="0" reagentId="3147" conjureId="3172" conjureCount="3" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Light Magic Missile" words="adori" maglv="1" mana="40" soul="0" reagentId="3147" conjureId="3174" conjureCount="5" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
<vocation name="Paladin" />
<vocation name="Royal Paladin" />
</conjure>
<conjure name="Heavy Magic Missile" words="adori gran" maglv="3" mana="70" soul="0" reagentId="3147" conjureId="3198" conjureCount="5" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Master Sorcerer" />
<vocation name="Druid" />
<vocation name="Elder Druid" />
<vocation name="Paladin" />
<vocation name="Royal Paladin" />
</conjure>
<conjure name="Fire Field" words="adevo grav flam" maglv="3" mana="60" soul="0" reagentId="3147" conjureId="3188" conjureCount="3" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Fireball" words="adori flam" maglv="5" mana="60" soul="0" prem="0" reagentId="3147" conjureId="3189" conjureCount="3" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Master Sorcerer" />
<vocation name="Paladin" />
<vocation name="Royal Paladin" />
<vocation name="Druid" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Envenom" words="adevo res pox" maglv="7" mana="100" soul="0" reagentId="3147" conjureId="3179" conjureCount="3" needlearn="0" function="conjureRune">
<vocation name="Druid" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Energy Field" words="adevo grav vis" maglv="5" mana="80" soul="0" reagentId="3147" conjureId="3164" conjureCount="3" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Great Fireball" words="adori gran flam" maglv="9" mana="120" soul="0" reagentId="3147" conjureId="3191" conjureCount="2" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Poison Bomb" words="adevo mas pox" maglv="8" mana="130" soul="0" prem="0" reagentId="3147" conjureId="3173" conjureCount="2" needlearn="0" function="conjureRune">
<vocation name="Druid" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Fire Bomb" words="adevo mas flam" maglv="9" mana="150" soul="0" reagentId="3147" conjureId="3192" conjureCount="2" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Soulfire" words="adevo res flam" maglv="13" mana="150" soul="0" prem="0" reagentId="3147" conjureId="3195" conjureCount="2" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Poison Wall" words="adevo mas grav pox" maglv="11" mana="160" soul="0" reagentId="3147" conjureId="3176" conjureCount="4" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Explosion" words="adevo mas hur" maglv="12" mana="180" soul="0" reagentId="3147" conjureId="3200" conjureCount="3" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Fire Wall" words="adevo mas grav flam" maglv="13" mana="200" soul="0" reagentId="3147" conjureId="3190" conjureCount="4" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Energy Bomb" words="adevo mas vis" maglv="18" mana="220" soul="0" prem="0" reagentId="3147" conjureId="3149" conjureCount="2" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Master Sorcerer" />
</conjure>
<conjure name="Energy Wall" words="adevo mas grav vis" maglv="18" mana="250" soul="0" reagentId="3147" conjureId="3166" conjureCount="4" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Sudden Death" words="adori vita vis" maglv="25" mana="220" soul="0" reagentId="3147" conjureId="3155" conjureCount="1" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Master Sorcerer" />
</conjure>
<conjure name="Antidote Rune" words="adana pox" maglv="5" mana="50" soul="0" reagentId="3147" conjureId="3153" conjureCount="1" needlearn="0" function="conjureRune">
<vocation name="Druid" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Intense Healing Rune" words="adura gran" maglv="4" mana="60" soul="0" reagentId="3147" conjureId="3152" conjureCount="1" needlearn="0" function="conjureRune">
<vocation name="Druid" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Ultimate Healing Rune" words="adura vita" maglv="11" mana="100" soul="0" reagentId="3147" conjureId="3160" conjureCount="1" needlearn="0" function="conjureRune">
<vocation name="Druid" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Convince Creature" words="adeta sio" maglv="10" mana="100" soul="0" reagentId="3147" conjureId="3177" conjureCount="1" needlearn="0" function="conjureRune">
<vocation name="Druid" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Animate Dead" words="adana mort" maglv="7" mana="300" soul="0" prem="0" reagentId="3147" conjureId="3203" conjureCount="2" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Chameleon" words="adevo ina" maglv="11" mana="150" soul="0" reagentId="3147" conjureId="3178" conjureCount="1" needlearn="0" function="conjureRune">
<vocation name="Druid" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Destroy Field" words="adito grav" maglv="6" mana="60" soul="0" reagentId="3147" conjureId="3148" conjureCount="3" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Paladin" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
<vocation name="Royal Paladin" />
</conjure>
<conjure name="Desintegrate" words="adito tera" maglv="8" mana="100" soul="0" prem="0" reagentId="3147" conjureId="3197" blocking="false" conjureCount="3" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Paladin" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
<vocation name="Royal Paladin" />
</conjure>
<conjure name="Magic Wall" words="adevo grav tera" maglv="14" mana="250" soul="0" prem="0" reagentId="3147" conjureId="3180" conjureCount="4" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Master Sorcerer" />
</conjure>
<conjure name="Paralyze" words="adana ani" maglv="35" mana="600" soul="0" prem="0" reagentId="3147" conjureId="3165" conjureCount="1" needlearn="0" function="conjureRune">
<vocation name="Druid" />
<vocation name="Elder Druid" />
</conjure>
<!-- House Spells -->
<instant name="House Guest List" words="aleta sio" selftarget="1" aggressive="0" function="editHouseGuest" />
<instant name="House Subowner List" words="aleta som" selftarget="1" aggressive="0" function="editHouseSubOwner" />
<instant name="House Door List" words="aleta grav" selftarget="1" aggressive="0" function="editHouseDoor" />
<instant name="House Kick" words="alana sio" params="1" aggressive="0" function="houseKick" />
</spells>