I Have Problem With Fireball script -Bug
This Bug is when i say skill Double times
fireball this first fireball is disappears and this second ball is create

And Second Bug When you dead you can say skill and ball is create on this place where you dead

Can Who Fix This ??
And Add Delay 30 sec
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
addhook("say","sayskill")
function sayskill(id, txt)
if(string.sub(txt,1,5)=="skill") then
shootFireball(id)
end
end
rpiconst = 180 / math.pi
imagepath = "sys/lua/fbmod/fireball.png" -- path to image
speed = 25 --speed of fireball
dmg = 100 --damage it does
function initArray(m,v)
local array = {}
for i = 1, m do
array[i]=v
end
return array
end
fireball = {x = 0,y = 0,dir = 0,fid = 0,exists=0,rot = 0}
fireballs = initArray(32,fireball) -- each person can only have 1 fireball atm.
function shootFireball(id)
if(fireballs[id].exists ~= 0) then
freeimage(fireballs[id].fid)
end
fireballs[id] = {x = player(id,"x"),y = player(id,"y"),dir =toRad(player(id,"rot")),fid = 0,exists = 1,rot = player(id,"rot")}
drawFireball(id)
end
function toRad(deg) -- from degrees to radian
return (deg / rpiconst)
end
function collision(xpos,ypos,id)
if((xpos > player(id,"x") - 30) and (xpos < player(id,"x") + 30)) then
if((ypos > player(id,"y") - 30) and (ypos < player(id,"y") + 30)) then
--msg("collision!")
return true
end
end
return false
end
function updateFireball(id) --update position, check for bounds
fireballs[id].y = fireballs[id].y - (math.cos(fireballs[id].dir)*speed)
fireballs[id].x = fireballs[id].x + (math.sin(fireballs[id].dir)*speed)
local xpos = fireballs[id].x -- tired of typing the long thing ;P
local ypos = fireballs[id].y -- ditto
for i,v in ipairs(player(0,"table")) do -- collision
if(i ~= id) then
if(collision(xpos,ypos,i)) then
parse("sethealth "..i.." "..(player(i,"health")-dmg))
end
end
end
if(fireballs[id].x > (map("xsize")*32) or fireballs[id].x < 0 or fireballs[id].y > (map("ysize")*32) or fireballs[id].y < 0) then --check for map boundaries
fireballs[id].exists = 0
freeimage(fireballs[id].fid)
else
imagepos(fireballs[id].fid,fireballs[id].x,fireballs[id].y,fireballs[id].rot)
end
end
function drawFireball(id) -- draw and rotate.
fireballs[id].fid=image(imagepath,fireballs[id].x,fireballs[id].y,1)
imagepos(fireballs[id].fid,fireballs[id].x,fireballs[id].y,fireballs[id].rot)
end
addhook("ms100","my_ms100")
function my_ms100()
for i,v in ipairs(fireballs) do
if(v.exists==0) then
return
end
updateFireball(i)
end
end