Full Distribution

This commit is contained in:
rasanpedromujica
2019-01-16 17:16:38 -05:00
commit 009a571331
1258 changed files with 185603 additions and 0 deletions

220
data/spells/lib/spells.lua Normal file
View File

@@ -0,0 +1,220 @@
function healingFormula(level, maglevel, base, variation)
local value = 2 * level + (3 * maglevel)
local min = value - math.random(variation) + base / 100
local max = value + math.random(variation) + base / 100
return min, max
end
function damageFormula(level, maglevel, base, variation)
local value = 2 * level + (3 * maglevel)
local min = value - math.random(variation) + base / 100
local max = value + math.random(variation) + base / 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,8 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
combat:setParameter(COMBAT_PARAM_DISPEL, CONDITION_POISON)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
function onCastSpell(creature, variant)
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 = 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,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_ENERGY)
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,22 @@
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)
local base = 70
local variation = 30
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_EXPLOSIONHIT)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)
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,23 @@
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)
local base = 250
local variation = 0
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, 2130)
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_DISPEL, CONDITION_POISON)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
function onCastSpell(creature, variant)
return combat:execute(creature, variant)
end

View File

@@ -0,0 +1,22 @@
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
combat:setParameter(COMBAT_PARAM_BLOCKARMOR, true)
combat:setParameter(COMBAT_PARAM_BLOCKSHIELD, false)
combat:setParameter(COMBAT_PARAM_USECHARGES, true)
combat:setArea(createCombatArea(AREA_SQUARE1X1))
function onGetFormulaValues(player, skill, attack, fightMode)
local base = 80
local variation = 20
local formula = 3 * player:getMagicLevel() + (2 * player:getLevel())
local damage = formula * base / 100
damage = damage * attack / 25
return -damage - variation, -damage + variation
end
combat:setCallback(CALLBACK_PARAM_SKILLVALUE, "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,22 @@
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)
local base = 40
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,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,22 @@
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)
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)
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,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,22 @@
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)
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,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, (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

425
data/spells/spells.xml Normal file
View File

@@ -0,0 +1,425 @@
<?xml version="1.0" encoding="UTF-8"?>
<spells>
<!-- Sorcerer Spells -->
<instant name="Force Strike" words="exori mort" lvl="16" mana="20" prem="1" cooldown="1000" range="3" direction="1" blockwalls="1" needlearn="0" script="spells/force strike.lua">
<vocation name="Sorcerer" />
<vocation name="Master Sorcerer" />
</instant>
<instant name="Fire Wave" words="exevo flam hur" lvl="18" 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" lvl="23" 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" lvl="29" mana="110" 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" lvl="38" 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" lvl="60" mana="1200" selftarget="1" prem="1" needlearn="0" script="spells/ultimate explosion.lua">
<vocation name="Sorcerer" />
<vocation name="Master Sorcerer" />
</instant>
<!-- Druid Spells -->
<instant name="Food" words="exevo pan" lvl="14" mana="120" soul="1" aggressive="0" needlearn="0" script="spells/food.lua">
<vocation name="Druid" />
<vocation name="Elder Druid" />
</instant>
<instant name="Heal Friend" words="exura sio" lvl="18" mana="70" prem="1" 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" lvl="30" mana="500" prem="1" 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" lvl="36" mana="150" prem="1" 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" lvl="50" mana="600" prem="1" aggressive="1" needlearn="0" script="spells/poison storm.lua">
<vocation name="Druid" />
<vocation name="Elder Druid" />
</instant>
<!-- Knight Spells -->
<instant name="Challenge" words="exeta res" lvl="20" mana="30" prem="1" aggressive="0" needlearn="0" script="spells/challenge.lua">
<vocation name="Elite Knight" />
</instant>
<instant name="Berserk" words="exori" lvl="35" manapercent="4" prem="1" needweapon="1" needlearn="0" script="spells/berserk.lua">
<vocation name="Knight" />
<vocation name="Elite Knight" />
</instant>
<!-- Other -->
<instant name="Find Person" words="exiva" lvl="8" 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" lvl="8" 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" lvl="9" 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" lvl="9" mana="20" prem="1" 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" lvl="10" 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" lvl="11" 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" lvl="12" mana="50" prem="1" 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" lvl="12" mana="20" prem="1" 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="Great Light" words="utevo gran lux" lvl="13" 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" lvl="14" mana="50" aggressive="0" selftarget="1" needlearn="0" script="spells/magic shield.lua">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</instant>
<instant name="Flame Strike" words="exori flam" lvl="14" mana="20" prem="1" 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" lvl="14" mana="60" prem="1" 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" lvl="20" mana="160" 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" lvl="20" mana="100" prem="1" 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" lvl="23" 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" lvl="25" 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" lvl="26" mana="200" prem="1" 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" lvl="26" mana="140" prem="1" 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" lvl="35" mana="440" aggressive="0" selftarget="1" needlearn="0" script="spells/invisible.lua">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</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="Firebomb" 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="Energybomb" id="3151" 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="3" maglv="7" needtarget="1" blocktype="solid" script="runes/soulfire.lua" />
<rune name="Envenom" id="3179" allowfaruse="1" charges="1" maglv="4" needtarget="1" blocktype="solid" script="runes/envenom.lua" />
<rune name="Fireball" id="3189" allowfaruse="1" charges="5" maglv="4" needtarget="0" blocktype="solid" script="runes/fireball.lua" />
<rune name="Great Fireball" id="3191" allowfaruse="1" charges="4" maglv="4" blocktype="solid" script="runes/great fireball.lua" />
<rune name="Light Magic Missile" id="3174" allowfaruse="1" charges="10" maglv="0" needtarget="1" blocktype="solid" script="runes/light magic missile.lua" />
<rune name="Heavy Magic Missile" id="3198" allowfaruse="1" charges="10" maglv="3" 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="1" 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="3" maglv="9" blocktype="all" script="runes/magic wall.lua" />
<rune name="Wild Growth" id="3156" allowfaruse="1" charges="2" maglv="8" blocktype="all" script="runes/wild growth.lua">
<vocation name="Druid" />
<vocation name="Elder Druid" showInDescription="0" />
</rune>
<rune name="Paralyze" id="3165" allowfaruse="1" charges="1" maglv="18" mana="1400" needtarget="1" blocktype="solid" script="runes/paralyze.lua">
<vocation name="Druid" />
<vocation name="Elder Druid" showInDescription="0" />
</rune>
<!-- Conjure Spells -->
<conjure name="Conjure Arrow" words="exevo con" lvl="13" mana="100" soul="1" conjureId="3447" conjureCount="10" needlearn="0" function="conjureItem">
<vocation name="Paladin" />
<vocation name="Royal Paladin" />
</conjure>
<conjure name="Conjure Poison Arrow" words="exevo con pox" lvl="16" mana="130" soul="2" conjureId="3448" conjureCount="7" needlearn="0" function="conjureItem">
<vocation name="Paladin" />
<vocation name="Royal Paladin" />
</conjure>
<conjure name="Conjure Explosive Arrow" words="exevo con flam" lvl="25" mana="290" soul="3" conjureId="3449" conjureCount="8" needlearn="0" function="conjureItem">
<vocation name="Paladin" />
<vocation name="Royal Paladin" />
</conjure>
<conjure name="Conjure Bolt" words="exevo con mort" lvl="17" mana="140" soul="2" prem="1" conjureId="3446" conjureCount="5" needlearn="0" function="conjureItem">
<vocation name="Paladin" />
<vocation name="Royal Paladin" />
</conjure>
<conjure name="Conjure Power Bolt" words="exevo con vis" lvl="59" mana="800" soul="4" prem="1" conjureId="3450" conjureCount="10" needlearn="0" function="conjureItem">
<vocation name="Royal Paladin" />
</conjure>
<conjure name="Enchant Staff" words="exeta vis" lvl="41" mana="80" prem="1" conjureId="3321" reagentId="3289" needlearn="0" function="conjureItem">
<vocation name="Master Sorcerer" />
</conjure>
<conjure name="Poison Field" words="adevo grav pox" lvl="14" mana="200" soul="1" 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" lvl="15" mana="120" soul="1" reagentId="3147" conjureId="3174" conjureCount="5" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Druid" />
<vocation name="Master Sorcerer" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Heavy Magic Missile" words="adori gran" lvl="25" mana="280" soul="2" reagentId="3147" conjureId="3198" conjureCount="5" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Master Sorcerer" />
<vocation name="Druid" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Fire Field" words="adevo grav flam" lvl="15" mana="240" soul="1" 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" lvl="17" mana="160" soul="2" prem="1" reagentId="3147" conjureId="3189" conjureCount="2" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Master Sorcerer" />
</conjure>
<conjure name="Envenom" words="adevo res pox" lvl="21" mana="400" soul="2" reagentId="3147" conjureId="3179" conjureCount="1" needlearn="0" function="conjureRune">
<vocation name="Druid" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Energy Field" words="adevo grav vis" lvl="18" mana="320" soul="2" 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" lvl="23" mana="480" soul="3" reagentId="3147" conjureId="3191" conjureCount="2" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Master Sorcerer" />
</conjure>
<conjure name="Poison Bomb" words="adevo mas pox" lvl="25" mana="520" soul="2" prem="1" reagentId="3147" conjureId="3173" conjureCount="2" needlearn="0" function="conjureRune">
<vocation name="Druid" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Firebomb" words="adevo mas flam" lvl="27" mana="600" soul="4" 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" lvl="27" mana="600" soul="3" prem="1" reagentId="3147" conjureId="3195" conjureCount="3" 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" lvl="29" mana="640" soul="3" 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" lvl="31" mana="720" soul="4" reagentId="3147" conjureId="3200" conjureCount="6" 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" lvl="33" mana="780" soul="4" 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="Energybomb" words="adevo mas vis" lvl="37" mana="880" soul="5" prem="1" reagentId="3147" conjureId="3151" conjureCount="2" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Master Sorcerer" />
</conjure>
<conjure name="Energy Wall" words="adevo mas grav vis" lvl="41" mana="1000" soul="5" 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" lvl="45" mana="880" soul="5" 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" lvl="15" mana="200" soul="1" 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" lvl="15" mana="240" soul="2" 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" lvl="24" mana="400" soul="3" 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" lvl="16" mana="200" soul="3" 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" lvl="27" mana="600" soul="5" prem="1" reagentId="3147" conjureId="3203" conjureCount="1" 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" lvl="27" mana="600" soul="2" 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" lvl="17" mana="120" soul="2" 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" lvl="21" mana="200" soul="3" prem="1" 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" lvl="32" mana="750" soul="5" prem="1" reagentId="3147" conjureId="3180" conjureCount="3" needlearn="0" function="conjureRune">
<vocation name="Sorcerer" />
<vocation name="Master Sorcerer" />
</conjure>
<conjure name="Wild Growth" words="exevo grav vita" lvl="27" mana="220" soul="5" prem="1" reagentId="3147" conjureId="3156" conjureCount="2" needlearn="0" function="conjureRune">
<vocation name="Druid" />
<vocation name="Elder Druid" />
</conjure>
<conjure name="Paralyze" words="adana ani" lvl="54" mana="1400" soul="3" prem="1" 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>