1SPELL_ID = 00
2local min = 0
3local max = 0
4
5-- =============== COMBAT VARS ===============
6-- Areas/Combat for 100ms
7local combat1_Brush = createCombatObject()
8setCombatParam(combat1_Brush, COMBAT_PARAM_EFFECT, CONST_ME_POFF)
9setCombatParam(combat1_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
10setCombatArea(combat1_Brush,createCombatArea({{1, 0, 1},
11{0, 2, 0},
12{1, 0, 1}}))
13function getDmg_Brush(cid, level, maglevel)
14
15 return -min, -max
16end
17setCombatCallback(combat1_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush")
18
19-- Areas/Combat for 0ms
20local combat0_Brush = createCombatObject()
21setCombatParam(combat0_Brush, COMBAT_PARAM_EFFECT, CONST_ME_POFF)
22setCombatParam(combat0_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
23setCombatArea(combat0_Brush,createCombatArea({{1, 0, 0, 0, 1},
24{0, 0, 0, 0, 0},
25{0, 0, 2, 0, 0},
26{0, 0, 0, 0, 0},
27{1, 0, 0, 0, 1}}))
28function getDmg_Brush(cid, level, maglevel)
29
30 return -min, -max
31end
32setCombatCallback(combat0_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush")
33
34-- Areas/Combat for 200ms
35local combat2_Brush = createCombatObject()
36setCombatParam(combat2_Brush, COMBAT_PARAM_EFFECT, CONST_ME_POFF)
37setCombatParam(combat2_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
38setCombatArea(combat2_Brush,createCombatArea({{3}}))
39function getDmg_Brush(cid, level, maglevel)
40
41 return -min, -max
42end
43setCombatCallback(combat2_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush")
44
45-- Areas/Combat for 400ms
46local combat4_Brush_2 = createCombatObject()
47setCombatParam(combat4_Brush_2, COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONAREA)
48setCombatParam(combat4_Brush_2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
49setCombatArea(combat4_Brush_2,createCombatArea({{1, 1, 1},
50{1, 3, 1},
51{1, 1, 1}}))
52function getDmg_Brush_2(cid, level, maglevel)
53
54 return -min, -max
55end
56setCombatCallback(combat4_Brush_2, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush_2")
57
58-- =============== CORE FUNCTIONS ===============
59local function RunPart(c,cid,var,dirList,dirEmitPos) -- Part
60 if (isCreature(cid)) then
61 doCombat(cid, c, var)
62 if (dirList ~= nil) then -- Emit distance effects
63 local i = 2;
64 while (i < #dirList) do
65 doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x-dirList[i],y=dirEmitPos.y-dirList[i+1],z=dirEmitPos.z},dirList[1])
66 i = i + 2
67 end
68 end
69 end
70end
71function checkSpell36(cid)
72 local GUN_ID = cid:getStorageValue(_SYSTEM.INVENTARIO[04].UID_01)
73 local CHECK_SLOT_01 = cid:getStorageValue(_SYSTEM.INVENTARIO[04].UID_04)
74 local CHECK_SLOT_02 = cid:getStorageValue(_SYSTEM.INVENTARIO[04].UID_05)
75 local CHECK_SLOT_03 = cid:getStorageValue(_SYSTEM.INVENTARIO[04].UID_06)
76 SPELL_ID = 36
77
78 if GUN_ID > 0 then
79 if CHECK_SLOT_01 == SPELL_ID then
80 cid:sendCancelMessage("@SpellCooldown 01")
81 return true
82 elseif CHECK_SLOT_02 == SPELL_ID then
83 cid:sendCancelMessage("@SpellCooldown 02")
84 return true
85 elseif CHECK_SLOT_03 == SPELL_ID then
86 cid:sendCancelMessage("@SpellCooldown 03")
87 return true
88 else
89 return false
90 end
91 else
92 return false
93 end
94end
95function onCastSpell(cid, var)
96 if checkSpell36(cid) or cid:getGroup():getAccess() then
97 local startPos = getCreaturePosition(cid)
98 local GUN_ID = cid:getStorageValue(_SYSTEM.INVENTARIO[04].UID_01)
99 local starGun = cid:getStorageValue(_SYSTEM.INVENTARIO[04].UID_03)
100 local levelGun = cid:getStorageValue(_SYSTEM.INVENTARIO[04].UID_07)
101 min = onDamage(cid, GUN_ID, levelGun, starGun, "SKILL_MIN", SPELL_ID)
102 max = min
103 addEvent(RunPart,100,combat1_Brush,cid.uid,var)
104 RunPart(combat0_Brush,cid,var)
105 addEvent(RunPart,200,combat2_Brush,cid.uid,var)
106 addEvent(RunPart,400,combat4_Brush_2,cid.uid,var)
107 return true
108 else
109 cid:getPosition():sendMagicEffect(03)
110 return false
111 end
112end