3 ws
.registered_globalhacks
= {}
6 ws
.lp
= minetest
.localplayer
12 function ws
.s(name
,value
)
14 return ws
.c
.settings
:get(name
)
16 ws
.c
.settings
:set(name
,value
)
17 return ws
.c
.settings
:get(name
)
22 return minetest
.display_chat_message(msg
)
25 function ws
.globalhacktemplate(setting
,func
,funcstart
,funcstop
)
26 funcstart
= funcstart
or function() end
27 funcstop
= funcstop
or function() end
29 if not minetest
.localplayer
then return end
30 if minetest
.settings
:get_bool(setting
) then
31 if nextact
[setting
] and nextact
[setting
] > os
.clock() then return end
32 nextact
[setting
] = os
.clock() + 0.1
33 if not ghwason
[setting
] then
35 ws
.dcm(setting
.. " activated")
36 ghwason
[setting
] = true
41 elseif ghwason
[setting
] then
42 ghwason
[setting
] = false
44 ws
.dcm(setting
.. " deactivated")
49 function ws
.register_globalhack(func
)
50 table.insert(ws
.registered_globalhacks
,func
)
53 function ws
.register_globalhacktemplate(name
,category
,setting
,func
,funcstart
,funcstop
)
54 ws
.register_globalhack(ws
.globalhacktemplate(setting
,func
,funcstart
,funcstop
))
55 minetest
.register_cheat(name
,category
,setting
)
58 ws
.rg
=ws
.register_globalhacktemplate
60 function ws
.step_globalhacks()
61 for i
, v
in ipairs(ws
.registered_globalhacks
) do
66 minetest
.register_globalstep(ws
.step_globalhacks
)
68 function ws
.get_reachable_positions(range
)
71 for x
= -range
,range
,1 do
72 for y
= -range
,range
,1 do
73 for z
= -range
,range
,1 do
74 table.insert(rt
,vector
.new(x
,y
,z
))
81 function ws
.do_area(radius
,func
,plane
)
82 for k
,v
in pairs(ws
.get_reachable_positions(range
)) do
83 if not plane
or v
.y
== ws
.lp
:get_pos().y
-1 then
90 function ws
.display_wp(pos
,name
)
91 table.insert(ws
.displayed_wps
,minetest
.localplayer
:hud_add({
92 hud_elem_type
= 'waypoint',
100 function ws
.clear_wps()
101 for k
,v
in pairs(ws
.displayed_wps
) do
103 table.remove(ws
.displayed_wps
,k
)
107 function ws
.register_chatcommand_alias(old
, ...)
108 local def
= assert(minetest
.registered_chatcommands
[old
])
110 for i
= 1, select('#', ...) do
111 minetest
.register_chatcommand(select(i
, ...), table.copy(def
))
115 function ws
.round2(num
, numDecimalPlaces
)
116 return tonumber(string.format("%." .. (numDecimalPlaces
or 0) .. "f", num
))
119 function ws
.pos_to_string(pos
)
120 if type(pos
) == 'table' then
121 pos
= minetest
.pos_to_string(vector
.round(pos
))
123 if type(pos
) == 'string' then
128 function ws
.string_to_pos(pos
)
129 if type(pos
) == 'string' then
130 pos
= minetest
.string_to_pos(pos
)
132 if type(pos
) == 'table' then
133 return vector
.round(pos
)
137 function ws
.on_connect(func
)
138 if not minetest
.localplayer
then minetest
.after(0,function() ws
.on_connect(func
) end) return end
139 if func
then func() end
142 ws
.on_connect(function()
143 ws
.lp
=minetest
.localplayer