200 lines
8.1 KiB
Lua
200 lines
8.1 KiB
Lua
|
|
|
|
|
|
--------projectile ring wand------
|
|
|
|
minetest.register_tool("minerdream:magic_wand2", {
|
|
description = "".. core.colorize("#BFFFFF", "magic wand2 (testing)\n")..core.colorize("#A0A0A0", "tier: 2 (uncommon)\n")..core.colorize("#A0A0A0", "projectile speed: 15\n")..core.colorize("#A0A0A0", "projectile gravity: 10\n")..core.colorize("#A0A0A0", "ranged damage: 2\n")..core.colorize("#A0A0A0", "mana usage: 5"),
|
|
inventory_image = "minerdream_magic_test.png",
|
|
wield_scale = {x=0.9,y=0.9,z=0.9},
|
|
on_use = function(itemstack, placer, pointed_thing)
|
|
if mana.subtract(placer:get_player_name(), 5) then
|
|
local dir = placer:get_look_dir();
|
|
local playerpos = placer:getpos();
|
|
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.4+dir.y,z=playerpos.z+0+dir.z}, "minerdream:magicring")
|
|
local vec = {x=20,y=0,z=0}
|
|
obj:setvelocity(vec)
|
|
local acc = {x=dir.x*0,y=dir.y*0,z=dir.z*0}
|
|
obj:setacceleration(acc)
|
|
-----------------------
|
|
local dir = placer:get_look_dir();
|
|
local playerpos = placer:getpos();
|
|
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.4+dir.y,z=playerpos.z+0+dir.z}, "minerdream:magicring")
|
|
local vec = {x=-20,y=0,z=0}
|
|
obj:setvelocity(vec)
|
|
local acc = {x=dir.x*0,y=dir.y*0,z=dir.z*0}
|
|
obj:setacceleration(acc)
|
|
-----------------------
|
|
local dir = placer:get_look_dir();
|
|
local playerpos = placer:getpos();
|
|
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.4+dir.y,z=playerpos.z+0+dir.z}, "minerdream:magicring")
|
|
local vec = {x=0,y=0,z=20}
|
|
obj:setvelocity(vec)
|
|
local acc = {x=dir.x*0,y=dir.y*0,z=dir.z*0}
|
|
obj:setacceleration(acc)
|
|
-----------------------
|
|
local dir = placer:get_look_dir();
|
|
local playerpos = placer:getpos();
|
|
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.4+dir.y,z=playerpos.z+0+dir.z}, "minerdream:magicring")
|
|
local vec = {x=0,y=0,z=-20}
|
|
obj:setvelocity(vec)
|
|
local acc = {x=dir.x*0,y=dir.y*0,z=dir.z*0}
|
|
obj:setacceleration(acc)
|
|
-----------------------
|
|
local dir = placer:get_look_dir();
|
|
local playerpos = placer:getpos();
|
|
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.4+dir.y,z=playerpos.z+0+dir.z}, "minerdream:magicring")
|
|
local vec = {x=14,y=0,z=14}
|
|
obj:setvelocity(vec)
|
|
local acc = {x=dir.x*0,y=dir.y*0,z=dir.z*0}
|
|
obj:setacceleration(acc)
|
|
-----------------------
|
|
local dir = placer:get_look_dir();
|
|
local playerpos = placer:getpos();
|
|
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.4+dir.y,z=playerpos.z+0+dir.z}, "minerdream:magicring")
|
|
local vec = {x=-14,y=0,z=14}
|
|
obj:setvelocity(vec)
|
|
local acc = {x=dir.x*0,y=dir.y*0,z=dir.z*0}
|
|
obj:setacceleration(acc)
|
|
-----------------------
|
|
local dir = placer:get_look_dir();
|
|
local playerpos = placer:getpos();
|
|
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.4+dir.y,z=playerpos.z+0+dir.z}, "minerdream:magicring")
|
|
local vec = {x=14,y=0,z=-14}
|
|
obj:setvelocity(vec)
|
|
local acc = {x=dir.x*0,y=dir.y*0,z=dir.z*0}
|
|
obj:setacceleration(acc)
|
|
-----------------------
|
|
local dir = placer:get_look_dir();
|
|
local playerpos = placer:getpos();
|
|
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.4+dir.y,z=playerpos.z+0+dir.z}, "minerdream:magicring")
|
|
local vec = {x=-14,y=0,z=-14}
|
|
obj:setvelocity(vec)
|
|
local acc = {x=dir.x*0,y=dir.y*0,z=dir.z*0}
|
|
obj:setacceleration(acc)
|
|
-----------------------
|
|
local dir = placer:get_look_dir();
|
|
local playerpos = placer:getpos();
|
|
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.4+dir.y,z=playerpos.z+0+dir.z}, "minerdream:magicring")
|
|
local vec = {x=18,y=0,z=6}
|
|
obj:setvelocity(vec)
|
|
local acc = {x=dir.x*0,y=dir.y*0,z=dir.z*0}
|
|
obj:setacceleration(acc)
|
|
-----------------------
|
|
local dir = placer:get_look_dir();
|
|
local playerpos = placer:getpos();
|
|
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.4+dir.y,z=playerpos.z+0+dir.z}, "minerdream:magicring")
|
|
local vec = {x=6,y=0,z=18}
|
|
obj:setvelocity(vec)
|
|
local acc = {x=dir.x*0,y=dir.y*0,z=dir.z*0}
|
|
obj:setacceleration(acc)
|
|
-----------------------
|
|
local dir = placer:get_look_dir();
|
|
local playerpos = placer:getpos();
|
|
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.4+dir.y,z=playerpos.z+0+dir.z}, "minerdream:magicring")
|
|
local vec = {x=-18,y=0,z=6}
|
|
obj:setvelocity(vec)
|
|
local acc = {x=dir.x*0,y=dir.y*0,z=dir.z*0}
|
|
obj:setacceleration(acc)
|
|
-----------------------
|
|
local dir = placer:get_look_dir();
|
|
local playerpos = placer:getpos();
|
|
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.4+dir.y,z=playerpos.z+0+dir.z}, "minerdream:magicring")
|
|
local vec = {x=-6,y=0,z=18}
|
|
obj:setvelocity(vec)
|
|
local acc = {x=dir.x*0,y=dir.y*0,z=dir.z*0}
|
|
obj:setacceleration(acc)
|
|
-----------------------
|
|
local dir = placer:get_look_dir();
|
|
local playerpos = placer:getpos();
|
|
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.4+dir.y,z=playerpos.z+0+dir.z}, "minerdream:magicring")
|
|
local vec = {x=18,y=0,z=-6}
|
|
obj:setvelocity(vec)
|
|
local acc = {x=dir.x*0,y=dir.y*0,z=dir.z*0}
|
|
obj:setacceleration(acc)
|
|
-----------------------
|
|
local dir = placer:get_look_dir();
|
|
local playerpos = placer:getpos();
|
|
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.4+dir.y,z=playerpos.z+0+dir.z}, "minerdream:magicring")
|
|
local vec = {x=6,y=0,z=-18}
|
|
obj:setvelocity(vec)
|
|
local acc = {x=dir.x*0,y=dir.y*0,z=dir.z*0}
|
|
obj:setacceleration(acc)
|
|
-----------------------
|
|
local dir = placer:get_look_dir();
|
|
local playerpos = placer:getpos();
|
|
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.4+dir.y,z=playerpos.z+0+dir.z}, "minerdream:magicring")
|
|
local vec = {x=-18,y=0,z=-6}
|
|
obj:setvelocity(vec)
|
|
local acc = {x=dir.x*0,y=dir.y*0,z=dir.z*0}
|
|
obj:setacceleration(acc)
|
|
-----------------------
|
|
local dir = placer:get_look_dir();
|
|
local playerpos = placer:getpos();
|
|
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.4+dir.y,z=playerpos.z+0+dir.z}, "minerdream:magicring")
|
|
local vec = {x=-6,y=0,z=-18}
|
|
obj:setvelocity(vec)
|
|
local acc = {x=dir.x*0,y=dir.y*0,z=dir.z*0}
|
|
obj:setacceleration(acc)
|
|
end
|
|
return itemstack
|
|
end,
|
|
})
|
|
|
|
local minerdream_magicring = {
|
|
physical = false,
|
|
timer = 0,
|
|
visual = "sprite",
|
|
visual_size = {x=1.5, y=1.5,},
|
|
textures = {'minerdream_magic_ring.png'},
|
|
lastpos= {},
|
|
collisionbox = {0, 0, 0, 0, 0, 0},
|
|
}
|
|
minerdream_magicring.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.15 then
|
|
local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.5)
|
|
for k, obj in pairs(objs) do
|
|
if obj:get_luaentity() ~= nil then
|
|
if obj:get_luaentity().name ~= "minerdream:magicring" and obj:get_luaentity().name ~= "__builtin:item" then
|
|
local damage = 2
|
|
obj:punch(self.object, 1.0, {
|
|
full_punch_interval = 1.0,
|
|
damage_groups= {fleshy = damage},
|
|
}, nil)
|
|
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
|
|
|
|
end
|
|
else
|
|
local damage = 2
|
|
obj:punch(self.object, 1.0, {
|
|
full_punch_interval = 1.0,
|
|
damage_groups= {fleshy = damage},
|
|
}, nil)
|
|
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
|
|
|
|
end
|
|
end
|
|
end
|
|
|
|
if self.lastpos.x ~= nil then
|
|
if minetest.registered_nodes[node.name].walkable then
|
|
if not minetest.setting_getbool("creative_mode") then
|
|
minetest.add_item(self.lastpos, "")
|
|
end
|
|
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
|
|
self.object:remove()
|
|
end
|
|
end
|
|
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
|
|
end
|
|
|
|
|
|
minetest.register_entity("minerdream:magicring", minerdream_magicring )
|
|
|
|
|
|
|