minetest-mod-rocket_launcher/init.lua

64 lines
1.8 KiB
Lua

local rocket_radius = tonumber(minetest.settings:get("rocket_launcher_radius")) or 3
minetest.register_craftitem("rocket_launcher:launcher", {
description = "Rocket Launcher",
inventory_image = "rocket_launcher.png",
on_use = function(itemstack, user, pointed_thing)
if not minetest.check_player_privs(user:get_player_name(), {creative = true}) then itemstack:take_item()
end
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_horizontal()
if pos and dir then
pos.y = pos.y + 1.5
local obj = minetest.add_entity(pos, "rocket_launcher:rocket")
if obj then
obj:setvelocity({x=dir.x * 30, y=dir.y * 30, z=dir.z * 30})
obj:setyaw(yaw)
end
end
return itemstack
end,
})
local rocket = {
armor_groups = {immortal = true},
physical = false,
timer = 0,
visual = "mesh",
mesh = 'rocket.obj',
visual_size = {x=0.7, y=0.7,},
textures = {'rocket.png'},
lastpos = {},
pointable = false,
collisionbox = {-0.25,-0.25,-0.25,0.25,0.25,0.25},
--selectionbox = {-0.25,-0.25,-0.25,0.25,0.25,0.25},
collide_with_objects = false,
}
rocket.on_step = function(self, dtime)
self.timer = self.timer + dtime
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.2 then
local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y-1, z = pos.z}, 1)
for k, obj in pairs(objs) do
if not obj then goto nodes end
if obj:is_player() then
tnt.boom(pos,{radius=rocket_raduis})
self.object:remove()
end
end
end
::nodes::
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
tnt.boom(self.lastpos,{radius=rocket_radius})
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
minetest.register_entity("rocket_launcher:rocket", rocket)