minerdream/minerdream/experiments.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 )