Working on the kamehameha

This commit is contained in:
npx 2016-03-12 23:45:44 +01:00
parent 82c1878b49
commit e976d4e192

View File

@ -1,125 +1,112 @@
--Kamehameha! --Kamehameha!
kame_velocity = 30, kame_velocity = 30
exp_radius = 4
local function round(n)
return n % 1 >= 0.5 and math.ceil(n) or math.floor(n)
end
minetest.register_entity("nssm:kamehameha", { minetest.register_entity("nssm:kamehameha", {
textures = {"kamehameha.png"}, textures = {"kamehameha.png"},
on_step = function (self, pos, node, dtime) on_step = function (self, pos, node, dtime)
local pos = self.object:getpos() local pos = self.object:getpos()
local objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2)
for k, obj in pairs(objs) do --while going around it damages entities
if obj:is_player() then local objects = minetest.env:get_objects_inside_radius(pos, 2)
return for _,obj in ipairs(objects) do
else if (obj:is_player()) then
obj:set_hp(obj:get_hp()-20) elseif (obj:get_luaentity() and obj:get_luaentity().name ~= "__builtin:item") then
--[[ obj:set_hp(obj:get_hp()-20)
if obj:get_entity_name() ~= "nssm:kamehameha" then if (obj:get_hp() <= 0) then
if obj:get_hp()<=0 then if (not obj:is_player()) and obj:get_entity_name() ~= "nssm:kamehameha" then
obj:remove() obj:remove()
end end
end end
]]--
end end
end end
local n = minetest.env:get_node(pos).name local n = minetest.env:get_node(pos).name
if n ~= "kamehameha:kame_entity" and n ~="default:stone" and n ~="default:desert_stone" then if n ~="default:stone" and n ~="default:desert_stone" then
if minetest.registered_nodes[n].groups.flammable --[[or math.random(1, 100) <= 1]] then if minetest.registered_nodes[n].groups.flammable --[[or math.random(1, 100) <= 1]] then
minetest.env:set_node(pos, {name="fire:basic_flame"}) minetest.env:set_node(pos, {name="fire:basic_flame"})
else else
minetest.env:set_node(pos, {name="air"}) minetest.env:set_node(pos, {name="air"})
local v = self.object:getvelocity() local vec = self.object:getvelocity()
local c=1 local c=3
local c2=0
--[[ --calculate how many blocks around the kamehameha need to be removed
for dx = -c*(math.abs(v.x))-c2 , c*(math.abs(v.x))+c2 do local i = round(math.abs(math.abs(vec.x)-kame_velocity)*0.01*c)
for dy= -c*(math.abs(v.y))-c2, c*(math.abs(v.y))+c2 do local j = round(math.abs(math.abs(vec.y)-kame_velocity)*0.01*c)
for dz = -c*(math.abs(v.z))-c2 , c*(math.abs(v.z))+c2 do local k = round(math.abs(math.abs(vec.z)-kame_velocity)*0.01*c)
for dx = -i,i do
for dy= -j,j do
for dz = -k,k do
local p = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} local p = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
minetest.env:remove_node(p) minetest.env:remove_node(p)
end end
end end
end end
]]--
--[[
for dx=-1,1 do
for dy=-1,1 do
for dz=-1,1 do
local p = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
minetest.env:set_node(p, {name="air"})
end
end
end
]]--
end end
elseif n == "default:stone" or n =="default:desert_stone" then else
self.hit_node(self, pos, node) self.hit_node(self, pos, node)
self.object:remove() self.object:remove()
return return
end end
--[[
for dx=-1,1 do
for dy=-1,1 do
for dz=-1,1 do
local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz}
local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
local n = minetest.env:get_node(p).name
if n ~= "kamehameha:kame_entity" and n ~="default:stone" and n ~="default:desert_stone" then
if minetest.registered_nodes[n].groups.flammable then --or math.random(1, 100) <= 1 then
minetest.env:set_node(t, {name="fire:basic_flame"})
else
minetest.env:set_node(t, {name="air"})
end
elseif n == "default:stone" or n =="default:desert_stone" then
self.hit_node(self, pos, node)
self.object:remove()
return
end
end
end
end
]]--
end, end,
hit_node = function(self, pos, node) hit_node = function(self, pos, node)
--[[ --This is the particle spawner, if it slows down your pc then comment this section
--This is the particle spawner, but it will slow your pc. If you have a powerful pc you can uncomment this section minetest.add_particlespawner(
minetest.add_particlespawner( 100, --amount
1, --amount 0.1, --time
0.1, --time {x=pos.x-3, y=pos.y-3, z=pos.z-3}, --minpos
{x=pos.x-3, y=pos.y-3, z=pos.z-3}, --minpos {x=pos.x+3, y=pos.y+3, z=pos.z+3}, --maxpos
{x=pos.x+3, y=pos.y+3, z=pos.z+3}, --maxpos {x=-0, y=-0, z=-0}, --minvel
{x=-0, y=-0, z=-0}, --minvel {x=5, y=5, z=5}, --maxvel
{x=0, y=0, z=0}, --maxvel {x=-0.5,y=5,z=-0.5}, --minacc
{x=-0.5,y=5,z=-0.5}, --minacc {x=0.5,y=5,z=0.5}, --maxacc
{x=0.5,y=5,z=0.5}, --maxacc 0.1, --minexptime
0.1, --minexptime 1, --maxexptime
1, --maxexptime 8, --minsize
8, --minsize 15, --maxsize
15, --maxsize false, --collisiondetection
false, --collisiondetection "tnt_smoke.png" --texture
"tnt_smoke.png" --texture )
)
]]-- --Damages entities around (not the player)
local objects = minetest.env:get_objects_inside_radius(pos, 4) local objects = minetest.env:get_objects_inside_radius(pos, exp_radius)
for _,obj in ipairs(objects) do for _,obj in ipairs(objects) do
if obj:is_player() or (obj:get_luaentity() and obj:get_luaentity().name ~= "__builtin:item") then if (obj:is_player()) then
elseif (obj:get_luaentity() and obj:get_luaentity().name ~= "__builtin:item") then
local obj_p = obj:getpos() local obj_p = obj:getpos()
local vec = {x=obj_p.x-pos.x, y=obj_p.y-pos.y, z=obj_p.z-pos.z} local vec = {x=obj_p.x-pos.x, y=obj_p.y-pos.y, z=obj_p.z-pos.z}
local dist = (vec.x^2+vec.y^2+vec.z^2)^0.5 local dist = (vec.x^2+vec.y^2+vec.z^2)^0.5
local damage = (80*0.5^dist)*2 local damage = 21-dist*5
obj:punch(obj, 1.0, { obj:set_hp(obj:get_hp()-damage)
full_punch_interval=1.0, if (obj:get_hp() <= 0) then
damage_groups={fleshy=damage}, if (not obj:is_player()) and obj:get_entity_name() ~= "nssm:kamehameha" then
}, vec) obj:remove()
end
end
end end
end end
minetest.sound_play("boom", {max_hear_distance = 100}) minetest.sound_play("boom", {max_hear_distance = 100})
for dx=-1,1 do
for dy=-1,1 do
for dz=-1,1 do
local p = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
minetest.env:remove_node(p)
end
end
end
--[[
for dx=-4,4 do for dx=-4,4 do
for dy=-4,4 do for dy=-4,4 do
for dz=-4,4 do for dz=-4,4 do
@ -134,6 +121,7 @@ minetest.register_entity("nssm:kamehameha", {
end end
end end
end end
]]--
end end
}) })