Add vase_radar command

This commit is contained in:
Wuzzy 2024-01-10 14:57:21 +01:00
parent a10d97e603
commit b22dc35568

View File

@ -1,14 +1,19 @@
local S = minetest.get_translator("sf_loot")
local EDITOR = minetest.settings:get_bool("sf_editor", false) or minetest.settings:get_bool("creative_mode", false)
-- If enabled, shows vases near you
local VASE_RADAR = false
-- CHEAT: If enabled, shows vases near you
local vase_radar = false
local VASE_RADAR_UPDATE_TIMER = 1.0
local vase_drop = nil
if not EDITOR then
vase_drop = ""
end
-- Vase radar timer
local vtimer = 0
minetest.register_node("sf_loot:vase", {
description = S("Vase"),
tiles = {
@ -34,6 +39,7 @@ minetest.register_node("sf_loot:vase", {
},
groups = { editor_breakable = 1, loot_node = 1 },
on_destruct = function(pos)
vtimer = VASE_RADAR_UPDATE_TIMER
if EDITOR then
return
end
@ -54,40 +60,63 @@ minetest.register_node("sf_loot:vase", {
drop = vase_drop,
})
if VASE_RADAR then
local vtimer = 0
local waypoints = {}
minetest.register_globalstep(function(dtime)
vtimer = vtimer + dtime
if vtimer < 1 then
return
local waypoints = {}
minetest.register_globalstep(function(dtime)
if not vase_radar then
return
end
vtimer = vtimer + dtime
if vtimer <= VASE_RADAR_UPDATE_TIMER then
return
end
vtimer = 0
local players = minetest.get_connected_players()
local areasize = vector.new(30, 30, 30)
for p=1, #players do
local player = players[p]
local pname = player:get_player_name()
if not waypoints[pname] then
waypoints[pname] = {}
end
vtimer = 0
local players = minetest.get_connected_players()
local areasize = vector.new(30, 30, 30)
for p=1, #players do
local player = players[p]
local pname = player:get_player_name()
if not waypoints[pname] then
waypoints[pname] = {}
end
for w=1, #waypoints[pname] do
player:hud_remove(waypoints[pname][w])
end
local ppos = vector.round(players[p]:get_pos())
local vases = minetest.find_nodes_in_area(vector.subtract(ppos, areasize), vector.add(ppos, areasize), "sf_loot:vase")
for v=1, #vases do
local vnode = minetest.get_node(vases[v])
local id = players[p]:hud_add({
hud_elem_type = "waypoint",
name = S("Vase (@1)", vnode.param2),
precision = 1,
text = S("m"),
number = 0xFF8080,
world_pos = vases[v],
})
table.insert(waypoints[pname], id)
end
for w=1, #waypoints[pname] do
player:hud_remove(waypoints[pname][w])
end
end)
end
local ppos = vector.round(players[p]:get_pos())
local vases = minetest.find_nodes_in_area(vector.subtract(ppos, areasize), vector.add(ppos, areasize), "sf_loot:vase")
for v=1, #vases do
local vnode = minetest.get_node(vases[v])
local id = players[p]:hud_add({
hud_elem_type = "waypoint",
name = S("Vase (@1)", vnode.param2),
precision = 1,
text = S("m"),
number = 0xFF8080,
world_pos = vases[v],
})
table.insert(waypoints[pname], id)
end
end
end)
minetest.register_chatcommand("vase_radar", {
description = S("Toggles the vase radar which shows vases near you"),
privs = { server = true },
func = function(name)
local player = minetest.get_player_by_name(name)
if not player or not player:is_player() then
return false, S("No player.")
end
vase_radar = not vase_radar
if vase_radar then
vtimer = VASE_RADAR_UPDATE_TIMER
return true, S("Vase radar enabled.")
else
if waypoints[name] then
for w=1, #waypoints[name] do
player:hud_remove(waypoints[name][w])
end
end
return false, S("Vase radar disabled.")
end
end,
})