other players can see settings but not edit them

master
ac-minetest 2021-02-03 21:30:36 +01:00
parent f6859f6381
commit 53d7efbc96
6 changed files with 42 additions and 14 deletions

View File

@ -12,6 +12,8 @@ enviro.skyboxes = {
};
local space_start = 1100;
local exclusion_height = 6666; -- above all players without privs die and get teleported to spawn
local ENABLE_SPACE_EFFECTS = false -- enable damage outside protected areas
local enviro_update_form = function (pos)
@ -113,7 +115,7 @@ minetest.register_node("basic_machines:enviro", {
local players = minetest.get_connected_players();
for _,player in pairs(players) do
local pos1 = player:getpos();
local pos1 = player:get_pos();
local dist = math.sqrt((pos1.x-pos.x)^2 + (pos1.y-pos.y)^2 + (pos1.z-pos.z)^2 );
if dist<=r then
@ -231,7 +233,7 @@ end
enviro_adjust_physics = function(player) -- adjust players physics/skybox 1 second after various events
minetest.after(1, function()
if player then
local pos = player:getpos(); if not pos then return end
local pos = player:get_pos(); if not pos then return end
if pos.y > space_start then -- is player in space or not?
player:set_physics_override({speed=1,jump=0.5,gravity=0.1}) -- value set for extreme test space spawn
local skybox = enviro.skyboxes["space"];
@ -264,6 +266,9 @@ end
local stimer = 0
local enviro_space = {};
local exclusion_zone = {};
local moderator = {};
minetest.register_globalstep(function(dtime)
stimer = stimer + dtime;
if stimer >= 5 then
@ -271,8 +276,23 @@ minetest.register_globalstep(function(dtime)
local players = minetest.get_connected_players();
for _,player in pairs(players) do
local name = player:get_player_name();
local pos = player:getpos();
local inspace=0; if pos.y>space_start then inspace = 1 end
local pos = player:get_pos();
local inspace=0;
if pos.y>space_start then
inspace = 1
if pos.y > exclusion_height then
local exclude = exclusion_zone[name];
if exclude == nil then
exclusion_zone[name] = not minetest.get_player_privs(name).include;
exclude = exclusion_zone[name]
end
if exclude then
minetest.chat_send_all("exclusion zone alert: " .. name .. " " .. pos.x .. " " .. pos.y .. " " .. pos.z )
minetest.log("exclusion zone alert: " .. name .. " " .. pos.x .. " " .. pos.y .. " " .. pos.z )
player:set_pos({x=0,y=-100,z=0})
end
end
end
local inspace0=enviro_space[name];
if inspace~=inspace0 then -- only adjust player enviroment ONLY if change occured ( earth->space or space->earth !)
enviro_space[name] = inspace;
@ -286,7 +306,7 @@ minetest.register_globalstep(function(dtime)
local hp = player:get_hp();
if hp>0 then
minetest.chat_send_player(name,"WARNING: you entered DEADLY RADIATION ZONE");
minetest.chat_send_player(name,"WARNING: you entered DEADLY RADIATION ZONE.");
local privs = minetest.get_player_privs(name)
if not privs.kick then player:set_hp(hp-15) end
end
@ -364,7 +384,7 @@ minetest.register_on_punchplayer( -- bring gravity closer to normal with each pu
function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage)
if player:get_physics_override() == nil then return end
local pos = player:getpos(); if pos.y>= space_start then return end
local pos = player:get_pos(); if pos.y>= space_start then return end
local gravity = player:get_physics_override().gravity;
if gravity<1 then
@ -375,6 +395,9 @@ minetest.register_on_punchplayer( -- bring gravity closer to normal with each pu
)
minetest.register_privilege("include", {
description = "allow player to move in exclusion zone",
})
-- RECIPE: extremely expensive

BIN
mesecons_lamp.zip Normal file

Binary file not shown.

View File

@ -13,12 +13,13 @@ basic_machines.max_range = 10 -- machines normal range of operation
basic_machines.machines_operations = 10 -- 1 coal will provide 10 mover basic operations ( moving dirt 1 block distance)
basic_machines.machines_TTL = 16 -- time to live for signals, how many hops before signal dissipates
basic_machines.version = "09/26/2019a";
basic_machines.version = "03/02/2021a";
basic_machines.clockgen = 1; -- if 0 all background continuously running activity (clockgen/keypad) repeating is disabled
-- how hard it is to move blocks, default factor 1, note fuel cost is this multiplied by distance and divided by machine_operations..
basic_machines.hardness = {
["default:stone"]=4,["default:tree"]=2,["default:jungletree"]=2,["default:pine_tree"]=2,["default:aspen_tree"]=2,["default:acacia_tree"]=2,
["default:stone"]=3,["default:tree"]=1,["default:jungletree"]=1,["default:pine_tree"]=1,["default:aspen_tree"]=1,["default:acacia_tree"]=1, ["default:bush_leaves"] = 0.1,["default:leaves"] = 0.1, ["default:jungleleaves"] = 0.1,
["gloopblocks:pumice_cooled"]=2,["default:cloud"] = 999999,
["default:lava_source"]=5950,["default:water_source"]=5950,["default:obsidian"]=20,["bedrock2:bedrock"]=999999};
--move machines for free
basic_machines.hardness["basic_machines:mover"]=0.;
@ -319,8 +320,8 @@ minetest.register_node("basic_machines:mover", {
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
local privs = minetest.get_player_privs(player:get_player_name());
local cant_build = minetest.is_protected(pos,player:get_player_name());
if not privs.privs and cant_build then return end -- only ppl sharing protection can setup
--local cant_build = minetest.is_protected(pos,player:get_player_name());
--if not privs.privs and cant_build then return end -- only ppl sharing protection can setup
local form = get_mover_form(pos,player)
minetest.show_formspec(player:get_player_name(), "basic_machines:mover_"..minetest.pos_to_string(pos), form)
@ -2158,7 +2159,10 @@ minetest.register_on_player_receive_fields(function(player,formname,fields)
local name = player:get_player_name(); if name==nil then return end
local meta = minetest.get_meta(pos)
local privs = minetest.get_player_privs(name);
if (minetest.is_protected(pos,name) and not privs.privs) or not fields then return end -- only builder can interact
if not fields then return end
local can_edit = (not minetest.is_protected(pos,name)) or privs.privs
if not can_edit and not fields.tabs then return end
if fields.help == "help" then

1
plans.txt Normal file
View File

@ -0,0 +1 @@
grinder: creates dust_0, must be mixed with extractor chemical to get dust_33

View File

@ -32,7 +32,7 @@ end
minetest.register_on_chat_message(function(name, message)
local player = minetest.get_player_by_name(name);
if not player then return end
local pos = player:getpos();
local pos = player:get_pos();
local r = 20;local p = {x=round(pos.x/r+0.5)*r,y=round(pos.y/r+0.5)*r+1,z=round(pos.z/r+0.5)*r}
--minetest.chat_send_all(minetest.pos_to_string(p))
if minetest.get_node(p).name == "basic_machines:distributor" then -- attempt to activate distributor at special grid location: coordinates of the form 20*i

View File

@ -25,8 +25,8 @@ local battery_update_meta = function(pos)
"image[1.5,0.5;0.5,0.5;basic_machine_generator.png]"..
"image[1.5,1;0.5,0.5;power_cell.png]"..
"label[2,0.5;Power: 10]"..
"label[2,1;Capacity: 30]"..
"label[2,0.5;Power: " .. maxpower .. "]"..
"label[2,1;Capacity: " .. capacity .. "]"..
"button_exit[4.1,7.4;2,0.5;OK;close]"..
"listring["..list_name..";fuel]"..