store radius and max_shares in global

This commit is contained in:
tenplus1 2025-01-25 15:09:20 +00:00
commit e4ea32efa3
4 changed files with 37 additions and 51 deletions

View file

@ -106,14 +106,10 @@ minetest.register_abm({
end end
}) })
-- get protection radius (max 30)
local r = tonumber(minetest.settings:get("protector_radius")) or 5
if r > 30 then r = 30 end
-- show protection areas of nearby protectors owned by you (thanks agaran) -- show protection areas of nearby protectors owned by you (thanks agaran)
local r = protector.radius
minetest.register_chatcommand("protector_show_area", { minetest.register_chatcommand("protector_show_area", {
params = "", params = "",
description = S("Show protected areas of your nearby protectors"), description = S("Show protected areas of your nearby protectors"),

View file

@ -2,11 +2,7 @@
-- translation and protector radius -- translation and protector radius
local S = minetest.get_translator("protector") local S = minetest.get_translator("protector")
local radius = (tonumber(minetest.settings:get("protector_radius")) or 5) local radius = protector.radius
-- radius limiter (minetest cannot handle node volume of more than 4096000)
if radius > 30 then radius = 30 end
-- hud settings -- hud settings
@ -19,9 +15,10 @@ if hud_interval > 0 then
minetest.register_globalstep(function(dtime) minetest.register_globalstep(function(dtime)
-- every 5 seconds
hud_timer = hud_timer + dtime hud_timer = hud_timer + dtime
if hud_timer < hud_interval then return end if hud_timer < hud_interval then return end
hud_timer = 0 hud_timer = 0
for _, player in pairs(minetest.get_connected_players()) do for _, player in pairs(minetest.get_connected_players()) do

View file

@ -25,7 +25,21 @@ local S = minetest.get_translator("protector")
-- global table -- global table
protector = {mod = "redo"} protector = {
mod = "redo",
max_shares = 12,
radius = tonumber(minetest.settings:get("protector_radius")) or 5
}
-- radius limiter (minetest cannot handle node volume of more than 4096000)
if protector.radius > 30 then protector.radius = 30 end
-- playerfactions check
local factions_available = minetest.global_exists("factions")
if factions_available then protector.max_shares = 8 end
-- localize math -- localize math
@ -33,9 +47,6 @@ local math_floor, math_pi = math.floor, math.pi
-- settings -- settings
local factions_available = minetest.global_exists("factions")
local protector_max_share_count = 12
local protector_radius = tonumber(minetest.settings:get("protector_radius")) or 5
local protector_flip = minetest.settings:get_bool("protector_flip") or false local protector_flip = minetest.settings:get_bool("protector_flip") or false
local protector_hurt = tonumber(minetest.settings:get("protector_hurt")) or 0 local protector_hurt = tonumber(minetest.settings:get("protector_hurt")) or 0
local protector_spawn = tonumber(minetest.settings:get("protector_spawn") local protector_spawn = tonumber(minetest.settings:get("protector_spawn")
@ -44,10 +55,6 @@ local protector_show = tonumber(minetest.settings:get("protector_show_interval")
local protector_recipe = minetest.settings:get_bool("protector_recipe") ~= false local protector_recipe = minetest.settings:get_bool("protector_recipe") ~= false
local protector_msg = minetest.settings:get_bool("protector_msg") ~= false local protector_msg = minetest.settings:get_bool("protector_msg") ~= false
-- radius limiter (minetest cannot handle node volume of more than 4096000)
if protector_radius > 30 then protector_radius = 30 end
-- get static spawn position -- get static spawn position
local statspawn = minetest.string_to_pos(minetest.settings:get("static_spawnpoint")) local statspawn = minetest.string_to_pos(minetest.settings:get("static_spawnpoint"))
@ -126,7 +133,7 @@ local function add_member(meta, name)
local list = get_member_list(meta) local list = get_member_list(meta)
if #list >= protector_max_share_count then return end if #list >= protector.max_shares then return end
table.insert(list, name) table.insert(list, name)
@ -163,7 +170,6 @@ local function protector_formspec(meta)
.. "field_close_on_enter[protector_add_member;false]" .. "field_close_on_enter[protector_add_member;false]"
local members = get_member_list(meta) local members = get_member_list(meta)
local npp = protector_max_share_count -- max users added to protector list
local i = 0 local i = 0
local checkbox_faction = false local checkbox_faction = false
@ -192,13 +198,11 @@ local function protector_formspec(meta)
.. F(S("Allow faction access")) .. F(S("Allow faction access"))
.. ";" .. (meta:get_int("faction_members") == 1 and .. ";" .. (meta:get_int("faction_members") == 1 and
"true" or "false") .. "]" "true" or "false") .. "]"
if npp > 8 then npp = 8 end
end end
for n = 1, #members do for n = 1, #members do
if i < npp then if i < protector.max_shares then
-- show username -- show username
formspec = formspec .. "button[" .. (i % 4 * 2) formspec = formspec .. "button[" .. (i % 4 * 2)
@ -214,7 +218,7 @@ local function protector_formspec(meta)
i = i + 1 i = i + 1
end end
if i < npp then if i < protector.max_shares then
-- user name entry field -- user name entry field
formspec = formspec .. "field[" .. (i % 4 * 2 + 1 / 3) .. "," formspec = formspec .. "field[" .. (i % 4 * 2 + 1 / 3) .. ","
@ -392,7 +396,7 @@ function minetest.is_protected(pos, digger)
digger = digger or "" -- nil check digger = digger or "" -- nil check
-- is area protected against digger? -- is area protected against digger?
if not protector.can_dig(protector_radius, pos, digger, false, 1) then if not protector.can_dig(protector.radius, pos, digger, false, 1) then
return true return true
end end
@ -410,7 +414,7 @@ local function check_overlap(itemstack, placer, pointed_thing)
local name = placer:get_player_name() local name = placer:get_player_name()
-- make sure protector doesn't overlap onto protected spawn area -- make sure protector doesn't overlap onto protected spawn area
if inside_spawn(pos, protector_spawn + protector_radius) then if inside_spawn(pos, protector_spawn + protector.radius) then
minetest.chat_send_player(name, minetest.chat_send_player(name,
S("Spawn @1 has been protected up to a @2 block radius.", S("Spawn @1 has been protected up to a @2 block radius.",
@ -420,7 +424,7 @@ local function check_overlap(itemstack, placer, pointed_thing)
end end
-- make sure protector doesn't overlap any other player's area -- make sure protector doesn't overlap any other player's area
if not protector.can_dig(protector_radius * 2, pos, name, true, 3) then if not protector.can_dig(protector.radius * 2, pos, name, true, 3) then
minetest.chat_send_player(name, minetest.chat_send_player(name,
S("Overlaps into above players protected area")) S("Overlaps into above players protected area"))
@ -493,7 +497,7 @@ minetest.register_node("protector:protect", {
if pointed_thing.type ~= "node" then return end if pointed_thing.type ~= "node" then return end
protector.can_dig(protector_radius, pointed_thing.under, protector.can_dig(protector.radius, pointed_thing.under,
user:get_player_name(), false, 2) user:get_player_name(), false, 2)
end, end,
@ -591,7 +595,7 @@ minetest.register_node("protector:protect2", {
if pointed_thing.type ~= "node" then return end if pointed_thing.type ~= "node" then return end
protector.can_dig(protector_radius, pointed_thing.under, protector.can_dig(protector.radius, pointed_thing.under,
user:get_player_name(), false, 2) user:get_player_name(), false, 2)
end, end,
@ -726,7 +730,7 @@ minetest.register_entity("protector:display", {
-- Display-zone node, Do NOT place the display as a node, -- Display-zone node, Do NOT place the display as a node,
-- it is made to be used as an entity (see above) -- it is made to be used as an entity (see above)
local x = protector_radius local x = protector.radius
minetest.register_node("protector:display_node", { minetest.register_node("protector:display_node", {
tiles = {"protector_display.png"}, tiles = {"protector_display.png"},

View file

@ -5,11 +5,7 @@ local S = minetest.get_translator("protector")
-- get protection radius -- get protection radius
local r = tonumber(minetest.settings:get("protector_radius")) or 5 local r = protector.radius
-- radius limiter (minetest cannot handle node volume of more than 4096000)
if r > 30 then r = 30 end
-- protector placement tool -- protector placement tool
@ -43,18 +39,12 @@ minetest.register_craftitem("protector:tool", {
local pit = user:get_look_vertical() local pit = user:get_look_vertical()
-- set placement coords -- set placement coords
if pit > 1.2 then if pit > 1.2 then vec.y = -gap -- up
vec.y = -gap -- up elseif pit < -1.2 then vec.y = gap -- down
elseif pit < -1.2 then elseif dir == 0 then vec.z = gap -- north
vec.y = gap -- down elseif dir == 1 then vec.x = gap -- east
elseif dir == 0 then elseif dir == 2 then vec.z = -gap -- south
vec.z = gap -- north elseif dir == 3 then vec.x = -gap -- west
elseif dir == 1 then
vec.x = gap -- east
elseif dir == 2 then
vec.z = -gap -- south
elseif dir == 3 then
vec.x = -gap -- west
end end
-- new position -- new position
@ -151,8 +141,7 @@ minetest.register_craftitem("protector:tool", {
end end
minetest.chat_send_player(name, minetest.chat_send_player(name,
S("Protector placed at") .. S("Protector placed at") .. " " .. minetest.pos_to_string(pos))
" " .. minetest.pos_to_string(pos))
end end
}) })