226 lines
5.1 KiB
Lua
226 lines
5.1 KiB
Lua
|
|
-- tools
|
|
|
|
minetest.register_tool(":nssm:ice_sword", {
|
|
description = "Ice Sword",
|
|
inventory_image = "ice_sword.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 0.4,
|
|
max_drop_level = 1,
|
|
groupcaps = {
|
|
snappy = {times = {[1] = 0.4, [2] = 0.3, [3] = 0.2}, uses = 300, maxlevel = 1},
|
|
fleshy = {times = {[2] = 0.7, [3] = 0.3}, uses = 300, maxlevel = 1}
|
|
},
|
|
damage_groups = {fleshy = 12},
|
|
},
|
|
|
|
on_drop = function(itemstack, dropper, pos)
|
|
|
|
local objects = minetest.get_objects_inside_radius(pos, 10)
|
|
local flag = 0
|
|
local vec = dropper:get_look_dir()
|
|
local pos = dropper:get_pos()
|
|
|
|
for i = 1, 4 do
|
|
pos = vector.add(pos, vec)
|
|
end
|
|
|
|
local pname = dropper:get_player_name()
|
|
local player_inv = minetest.get_inventory({type = "player", name = pname})
|
|
local found = 0
|
|
|
|
for i = 1, 32 do
|
|
|
|
local items = player_inv:get_stack("main", i)
|
|
local n = items:get_name()
|
|
|
|
if n == "nssm:life_energy" then
|
|
found = i
|
|
break
|
|
end
|
|
end
|
|
|
|
if found == 0 then
|
|
minetest.chat_send_player(pname, "You haven't got any Life Energy!")
|
|
return
|
|
else
|
|
|
|
local items = player_inv:get_stack("main", found)
|
|
|
|
items:take_item()
|
|
|
|
player_inv:set_stack("main", found, items)
|
|
|
|
for dx = -1, 1 do
|
|
for dz = -1, 1 do
|
|
|
|
local pos = {x = pos.x + dx, y = pos.y - 1, z = pos.z + dz}
|
|
|
|
if not minetest.is_protected(pos, "")
|
|
or not minetest.get_item_group(
|
|
minetest.get_node(pos).name, "unbreakable") == 1 then
|
|
|
|
minetest.set_node(pos, {name = "default:ice"})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
})
|
|
|
|
minetest.register_tool(":nssm:earth_warhammer", {
|
|
description = "Earth Warhammer",
|
|
inventory_image = "earth_warhammer.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 0.4,
|
|
max_drop_level = 1,
|
|
groupcaps = {
|
|
snappy = {times = {[1] = 0.4, [2] = 0.3, [3] = 0.2}, uses = 300, maxlevel = 1},
|
|
fleshy = {times = {[2] = 0.7, [3] = 0.3}, uses = 300, maxlevel = 1}
|
|
},
|
|
damage_groups = {fleshy = 12},
|
|
},
|
|
|
|
on_drop = function(itemstack, dropper, pos)
|
|
|
|
local objects = minetest.env:get_objects_inside_radius(pos, 10)
|
|
local flag = 0
|
|
|
|
for _,obj in ipairs(objects) do
|
|
|
|
local part = 0
|
|
|
|
if flag == 0 then
|
|
|
|
local pname = dropper:get_player_name()
|
|
local player_inv = minetest.get_inventory({type = "player", name = pname})
|
|
|
|
if player_inv:is_empty("main") then
|
|
-- minetest.chat_send_all("Inventory empty")
|
|
else
|
|
local found = 0
|
|
|
|
for i = 1, 32 do
|
|
|
|
local items = player_inv:get_stack("main", i)
|
|
local n = items:get_name()
|
|
|
|
if n == "nssm:energy_globe" then
|
|
found = i
|
|
break
|
|
end
|
|
end
|
|
|
|
if found == 0 then
|
|
minetest.chat_send_player(pname, "You haven't got any Energy Globe!")
|
|
return
|
|
else
|
|
local pos = obj:get_pos()
|
|
|
|
pos.y = pos.y - 3
|
|
|
|
if obj:is_player() then
|
|
|
|
if obj:get_player_name() ~= dropper:get_player_name() then
|
|
|
|
part = 1
|
|
obj:set_pos(pos)
|
|
-- flag = 1
|
|
|
|
local items = player_inv:get_stack("main", found)
|
|
|
|
items:take_item()
|
|
|
|
player_inv:set_stack("main", found, items)
|
|
end
|
|
else
|
|
if obj:get_luaentity().health then
|
|
obj:get_luaentity().old_y = pos.y
|
|
obj:set_pos(pos)
|
|
part = 1
|
|
-- flag = 1
|
|
|
|
local items = player_inv:get_stack("main", found)
|
|
|
|
items:take_item()
|
|
|
|
player_inv:set_stack("main", found, items)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
})
|
|
|
|
minetest.register_tool(":nssm:earth_sword", {
|
|
description = "Earth Sword",
|
|
inventory_image = "earth_sword.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 0.4,
|
|
max_drop_level = 1,
|
|
groupcaps = {
|
|
snappy = {times = {[1] = 0.4, [2] = 0.3, [3] = 0.2}, uses = 300, maxlevel = 1},
|
|
fleshy = {times = {[2] = 0.7, [3] = 0.3}, uses = 300, maxlevel = 1}
|
|
},
|
|
damage_groups = {fleshy = 12},
|
|
},
|
|
|
|
on_drop = function(itemstack, dropper, pos)
|
|
|
|
local objects = minetest.get_objects_inside_radius(pos, 10)
|
|
local flag = 0
|
|
local vec = dropper:get_look_dir()
|
|
local pos = dropper:get_pos()
|
|
-- vec.y = 0
|
|
|
|
for i = 1, 6 do
|
|
pos = vector.add(pos, vec)
|
|
end
|
|
|
|
local pname = dropper:get_player_name()
|
|
local player_inv = minetest.get_inventory({type = "player", name = pname})
|
|
local found = 0
|
|
|
|
for i = 1, 32 do
|
|
|
|
local items = player_inv:get_stack("main", i)
|
|
local n = items:get_name()
|
|
|
|
if n == "nssm:energy_globe" then
|
|
found = i
|
|
break
|
|
end
|
|
end
|
|
|
|
if found == 0 then
|
|
minetest.chat_send_player(pname, "You haven't got any Energy Globe!")
|
|
return
|
|
else
|
|
local items = player_inv:get_stack("main", found)
|
|
|
|
items:take_item()
|
|
|
|
player_inv:set_stack("main", found, items)
|
|
|
|
for dx = -1, 1 do
|
|
for dy = -12, 3 do
|
|
for dz = -1, 1 do
|
|
|
|
local pos = {x = pos.x + dx, y = pos.y + dy, z = pos.z + dz}
|
|
|
|
if not minetest.is_protected(pos, "")
|
|
or not minetest.get_item_group(
|
|
minetest.get_node(pos).name, "unbreakable") == 1 then
|
|
|
|
minetest.set_node(pos, {name = "air"})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
})
|
|
|