goddess mode: some safety

This commit is contained in:
cora 2020-10-12 18:02:13 +02:00
parent e4f986e99d
commit be24da49e3

View File

@ -20,25 +20,94 @@ local tprangepy=50
local tprangeny=60 local tprangeny=60
local karange=10 local karange=10
local function gettarget(epos) local function get_target(epos)
--local mpos=minetest.localplayer:get_pos()
math.randomseed(os.time()) math.randomseed(os.time())
local angle=math.random(90,270) local angle=math.random(110,250)
local tg={x=0,y=0,z=0} local tg={x=0,y=0,z=0}
tg.x=( karange + 2 ) * math.sin(angle) tg.x=( karange + 2 ) * math.sin(angle)
tg.z=( karange + 2 ) * math.cos(angle) tg.z=( karange + 2 ) * math.cos(angle)
return vector.add(epos,tg) local t=vector.add(epos,tg)
if (checklava(t) or checkgravel(t)) then
return get_target(epos)
elseif checkair(t) then
return t
else
amautotool(t)
end
return t
end
local function checkair(pos)
local n=get_node_or_nil(pos)
if n==nil or n['name'] == 'air' then return true end
return false
end
local function checklava(pos)
local n=minetest.find_node_near(pos, 2, {'mcl_core:lava_source','mcl_core:lava_flowing'}, true)
if n == nil then return false end
return true
end
local function checkgravel(pos)
local n=minetest.find_node_near(pos, 1, {'mcl_core:gravel','mcl_core:sand'}, true)
if n == nil then return false end
return true
end
local function check_tool(stack, node_groups, old_best_time)
local toolcaps = stack:get_tool_capabilities()
if not toolcaps then return end
local best_time = old_best_time
for group, groupdef in pairs(toolcaps.groupcaps) do
local level = node_groups[group]
if level then
local this_time = groupdef.times[level]
if this_time < best_time then
best_time = this_time
end
end
end
return best_time < old_best_time, best_time
end
local function amautotool(pos)
local player = minetest.localplayer
local inventory = minetest.get_inventory("current_player")
local node=minetest.get_node_or_nil(pos)
local node_groups = minetest.get_node_def(node.name).groups
local new_index = player:get_wield_index()
local is_better, best_time = false, math.huge
is_better, best_time = check_tool(player:get_wielded_item(), node_groups, best_time)
is_better, best_time = check_tool(inventory.hand[1], node_groups, best_time)
for index, stack in pairs(inventory.main) do
is_better, best_time = check_tool(stack, node_groups, best_time)
if is_better then
new_index = index - 1
end
end
player:set_wield_index(new_index)
end
local function dhfree()
if not minetest.localplayer then return end
local n=vector.add(minetest.localplayer:get_pos(),{x=0,y=2,z=0})
if n==nil or n['name'] == 'air' then return end
amautotool(n)
minetest.dig_node(n)
--minetest.dig_node(vector.add(ppos,{x=0,y=1,z=0}))
end end
local function rro() -- reverse restraining order local function rro() -- reverse restraining order
for k, v in ipairs(minetest.localplayer.get_nearby_objects(karange+5)) do for k, v in ipairs(minetest.localplayer.get_nearby_objects(karange+5)) do
if (v:is_player() and v:get_name() ~= minetest.localplayer:get_name()) then if (v:is_player() and v:get_name() ~= minetest.localplayer:get_name()) then
-- if (v:is_player() and v:get_name() == "antigone" then
local pos = v:get_pos() local pos = v:get_pos()
pos.y = pos.y - 1 pos.y = pos.y - 1
local mpos=minetest.localplayer:get_pos() local mpos=minetest.localplayer:get_pos()
local distance=vector.distance(mpos,pos) local distance=vector.distance(mpos,pos)
if distance < karange then mwarp(gettarget(pos)) minetest.after(0.2,function() autofly.aim(pos) end) end if distance < karange then
return mwarp(get_target(pos))
minetest.after(0.2,function() autofly.aim(pos) end)
minetest.after(0.1,function() dhfree() end)
return
end
end end
end end
end end
@ -48,7 +117,7 @@ minetest.register_globalstep(function()
rro() rro()
end end
end) end)
minetest.register_chatcommand("dhf", { description = "", func = dhfree })
-- REG cheats on DF -- REG cheats on DF