1local combat = createCombatObject()
2-- Define o tipo de dano azul (energia) e os efeitos visuais
3setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
4setCombatParam(combat, COMBAT_PARAM_EFFECT, 100)
5setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 0)
6
7-- Define a fórmula de dano para causar 100 de dano (constante)
8-- Fórmula: dano mínimo = (level * 0) - 100 e dano máximo = (level * 0) - 100
9setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, -100, 0, -100)
10
11-- Cria a área de efeito 5x5 com o centro marcado como "2"
12local area = createCombatArea({
13 {1, 1, 1, 1, 1},
14 {1, 1, 1, 1, 1},
15 {1, 1, 2, 1, 1},
16 {1, 1, 1, 1, 1},
17 {1, 1, 1, 1, 1}
18})
19setCombatArea(combat, area)
20
21-- Função para manter o efeito visual reaplicando-o a cada 'interval' ms
22local function persistEffect(pos, effectId, interval, stopFlag)
23 if not stopFlag.value then
24 doSendMagicEffect(pos, effectId)
25 addEvent(persistEffect, interval, pos, effectId, interval, stopFlag)
26 end
27end
28
29function onCastSpell(creature, var)
30 local casterPos = getCreaturePosition(creature)
31
32 -- Troca o looktype para 43 no início da conjuração
33 doCreatureChangeOutfit(creature, {lookType = 43})
34
35 -- Calcula a posição central onde a área 5x5 será aplicada
36 local areaPos = {x = casterPos.x + 4, y = casterPos.y + 4, z = casterPos.z}
37 -- Cria o objeto Variant que une a posição do conjurador com a área 5x5
38 local variant = Variant(casterPos, area)
39
40 -- Cria a condição de slow (60% de redução de velocidade)
41 local slowCondition = createConditionObject(CONDITION_HASTE)
42 setConditionParam(slowCondition, CONDITION_PARAM_SPEEDPERCENT, -60)
43 -- Define a duração para cobrir toda a conjuração (por exemplo, 3000ms)
44 setConditionParam(slowCondition, CONDITION_PARAM_TICKS, 3000)
45
46 -- Aplica a condição slow e o efeito 85 aos alvos presentes na área (exceto o conjurador)
47 for dx = -2, 2 do
48 for dy = -2, 2 do
49 local pos = {x = areaPos.x + dx, y = areaPos.y + dy, z = areaPos.z}
50 local target = getTopCreature(pos)
51 if target and target.uid ~= creature.uid then
52 doAddCondition(target, slowCondition)
53 doSendMagicEffect(getCreaturePosition(target), 85)
54 end
55 end
56 end
57
58 local stopFlag = {value = false}
59
60 -- Inicia o efeito 102 na área, reaplicando-o a cada 600ms
61 persistEffect(areaPos, 96, 1000, stopFlag)
62
63 -- Aguarda 2 segundos para que o efeito 102 permaneça visível
64 addEvent(function()
65 stopFlag.value = true -- Para o loop do efeito 102
66
67 local damageIntervals = {0, 300, 600, 900} -- intervalos após os 2 segundos
68 local damageEffects = {94, 237, 237, 237} -- efeitos a serem exibidos com cada dano
69 local effectOffsets = {
70 {x = 0, y = -3}, -- desloca o effect 97
71 {x = -3, y = -3}, -- desloca o effect 98
72 {x = -3, y = -3}, -- desloca o effect 103
73 {x = -3, y = -3} -- desloca o effect 99
74 }
75
76 for i, delay in ipairs(damageIntervals) do
77 addEvent(function()
78 local effectPos = {
79 x = areaPos.x + effectOffsets[i].x,
80 y = areaPos.y + effectOffsets[i].y,
81 z = areaPos.z
82 }
83 doSendMagicEffect(effectPos, damageEffects[i])
84 doCombat(creature, combat, variant)
85 end, delay)
86 end
87
88 -- Após o último efeito, troca o looktype para 45 no final da conjuração
89 addEvent(function()
90 doCreatureChangeOutfit(creature, {lookType = 81})
91 end, 1000)
92 end, 1000)
93
94 return true
95end
96