Compare commits

...

5 Commits

Author SHA1 Message Date
Och Noe 1e4d9e80c1 version number change forgotten 2021-09-23 14:45:24 +02:00
Och Noe 30b17c555a added '?' for the viewing direction to wp_shift, by Maverick2797 2021-09-23 14:42:37 +02:00
Och Noe 274bc7abbf countdown for .bounce - by Mavarick2797 2021-07-21 15:19:37 +02:00
Och Noe 01e27c7757 'wp_export' added 2021-07-20 20:30:14 +02:00
Och Noe e735475a10 - ".bounce" added
- small bugfix for rounding
2021-07-03 04:16:10 +02:00
1 changed files with 157 additions and 31 deletions

188
init.lua
View File

@ -4,7 +4,7 @@
local mod_name = minetest.get_current_modname()
local mod_version = "2.8"
local mod_version = "2.15"
local function log(level, message)
minetest.log(level, ('[%s] %s'):format(mod_name, message))
@ -20,6 +20,7 @@ local mod_storage = minetest.get_mod_storage()
local search_delta_default = 10
local daydelay_default = 5
local bouncedelay_default = 10
--
--
@ -150,7 +151,7 @@ local function stack_pop()
end
local function stack_use()
wp_stack = load_waypoints_stack()
local wp_stack = load_waypoints_stack()
count = 0
if nil ~= wp_stack then count = #wp_stack end
if count<1 then
@ -162,7 +163,7 @@ local function stack_use()
end
local function stack_exch()
wp_stack = load_waypoints_stack()
local wp_stack = load_waypoints_stack()
count = 0
if nil ~= wp_stack then count = #wp_stack end
if count<2 then
@ -178,7 +179,7 @@ end
local function stack_show()
wp_stack = load_waypoints_stack()
local wp_stack = load_waypoints_stack()
count = 0
if nil ~= wp_stack then count = #wp_stack end
if count<1 then
@ -248,48 +249,56 @@ end
-- new shift with more than one possible shift coordinate
-- only the last value for one coordinate is used
local function position_shift2(p)
-- viewing direction (?) added by Maverick2797 on 2021-09-23
local function position_shift2(p)
if not p then return end
param = p:split(" ")
shift = {}
local player = minetest.localplayer
local param = p:split(" ")
local shift = {}
shift.x = 0
shift.y = 0
shift.z = 0
vp = 1
while (vp+1 <= #param )
do
direction = param[vp]
d = ""
if direction == "x" or direction == "X" then d = "x" end
if direction == "y" or direction == "Y" then d = "y" end
if direction == "z" or direction == "Z" then d = "z" end
if d ~= "" then
distance = tonumber(param[vp+1])
if not distance then
distance = 0
end
local vp = 1
while (vp+1 <= #param ) do
local direction = param[vp]
local distance = tonumber(param[vp+1])
if not distance then
distance = 0
end
local d = ""
if direction == "x" or direction == "X" then d = "x" end
if direction == "y" or direction == "Y" then d = "y" end
if direction == "z" or direction == "Z" then d = "z" end
if direction == "?" then
--tp according to facing angle
local yaw = player:get_last_look_horizontal()
local pitch = player:get_last_look_vertical()
shift.x = distance*math.cos(yaw)*math.cos(pitch)
shift.z = distance*math.sin(yaw)*math.cos(pitch)
shift.y = distance*math.sin(pitch)
elseif d ~= "" then
shift[direction] = distance
end
vp = vp+2
end
if shift.x == 0 and shift.y == 0 and shift.z == 0 then
return
end
here = minetest.localplayer:get_pos()
local here = player:get_pos()
here.x = here.x+shift.x
here.y = here.y+shift.y
here.z = here.z+shift.z
-- here.y = here.y - 1 -- correction
minetest.run_server_chatcommand('teleport', tostring_point(here))
end
@ -320,7 +329,7 @@ end
local function teleport_day_back(x,y,z)
minetest.run_server_chatcommand('teleport',
string.format("%d %d %d",x,y+1,z)
string.format("%f %f %f",x,y+1,z)
)
return
end
@ -377,6 +386,100 @@ local function teleport_day(params)
end
local function teleport_bounce(params)
if not params or
params == ""
then
-- no parameter - return
minetest.display_chat_message("no waypoint given")
return
end
local bouncedelay = mod_storage:get_string('bouncedelay')
bouncedelay = (bouncedelay and tonumber(minetest.deserialize(bouncedelay))) or
bouncedelay_default
local sdp = string.find(params,"setdelay",1,false)
if sdp and sdp == 1 then
local newtime = tonumber(params:sub(10,16))
if newtime and newtime>0 then
mod_storage:set_string('bouncedelay', minetest.serialize(newtime))
minetest.display_chat_message("delay saved")
else
minetest.display_chat_message("delay: "..bouncedelay)
end
return
end
local bouncepos = params
local bouncetarget = waypoints[bouncepos]
if not bouncetarget then
minetest.display_chat_message("unknown waypoint")
return
end
local pstr = tostring_point(bouncetarget)
local point = minetest.localplayer:get_pos()
-- from Maverick2897 with some small changes
local player = minetest.localplayer
local hud_id = player:hud_add({
hud_elem_type = "text",
position = {x=0.0,y=0.8},
size = {x=-20,y=-20},
alignment = {x=1,y=0},
offset = {x=8,y=0},
number = 0xffffff,
})
for i=bouncedelay,1,-1 do
minetest.after(bouncedelay-i,
function()
local text = ""
if i == 1 then
text = "Returning Now"
else
text = "Returning in "..i.."s\nTarget Pos: "..bouncepos.." ("..pstr..")\nReturn Pos: "..tostring_point(point)
end
player:hud_change(hud_id,"text",text)
end)
end
minetest.after(bouncedelay,function()player:hud_remove(hud_id)end)
--
minetest.after(bouncedelay,teleport_day_back,point.x,point.y,point.z)
minetest.display_chat_message("position "..pstr)
minetest.run_server_chatcommand('teleport', pstr)
return
end
local function wp_export(param)
local wpl = load_waypoints()
if not wpl then return end
local list = ""
for k,p in pairsByKeys(wpl,lc_cmp) do
if param == "" or string.find(k,param,1,true) then
local line = "("..p.x..","..p.y..","..p.y..") name = "..k.."\n"
list = list .. line
end
end
minetest.display_chat_message(list)
minetest.show_formspec("cs_waypoints:export",
"size[15,12]" ..
"label[3.5,0;Waypoint List]"..
"textarea[0.3,1;15,11;note;;".. list .."]"..
"button_exit[4.5,11.2;1.4,1;e;Close]")
return
end
--
--
-- chat commands
@ -614,3 +717,26 @@ minetest.register_chatcommand('day', {
func = teleport_day,
}
)
-- bounce name idea by Maverick2797 on 2021-05-20
-- jump to a waypoint and 'bounce' back to the start point after a delay
minetest.register_chatcommand('bounce', {
params = '[<waypoint>|setdelay [<number>]]',
description = 'teleports to the given waypoint and returns after a few seconds ',
func = teleport_bounce,
}
)
minetest.register_chatcommand('wp_export', {
params = '[<name part>]',
description = 'Export all waypoints as list',
func = wp_export,
}
)
log('action', 'CSM cs_waypoints '..mod_version..' loaded')
minetest.display_chat_message("CSM cs_waypoints "..mod_version.." loaded")