mirror of
https://github.com/appgurueu/modlib.git
synced 2024-08-19 21:04:13 +02:00
Updates via shellscript
This commit is contained in:
parent
648bfba2f5
commit
240bec2a41
169
init.lua
169
init.lua
@ -30,6 +30,7 @@ MT=mt
|
|||||||
-- MT extension
|
-- MT extension
|
||||||
-- TODO add formspec queues and event system + sync handler
|
-- TODO add formspec queues and event system + sync handler
|
||||||
-- TODO add chatcommand helper
|
-- TODO add chatcommand helper
|
||||||
|
-- TODO add easy (ingame?) config editor forcing restart ?
|
||||||
|
|
||||||
mt_ext = {
|
mt_ext = {
|
||||||
delta_times={},
|
delta_times={},
|
||||||
@ -75,7 +76,28 @@ mt_ext = {
|
|||||||
end,
|
end,
|
||||||
get_color_int=function(color)
|
get_color_int=function(color)
|
||||||
return color.b + (color.g*256) + (color.r*256*256)
|
return color.b + (color.g*256) + (color.r*256*256)
|
||||||
end
|
end,
|
||||||
|
check_player_privs=function(playername, privtable)
|
||||||
|
local privs=minetest.get_player_privs(playername)
|
||||||
|
local missing_privs={}
|
||||||
|
local to_lose_privs={}
|
||||||
|
for priv, expected_value in pairs(privtable) do
|
||||||
|
local actual_value=privs[priv]
|
||||||
|
if expected_value then
|
||||||
|
if not actual_value then
|
||||||
|
table.insert(missing_privs, priv)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if actual_value then
|
||||||
|
table.insert(to_lose_privs, priv)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return missing_privs, to_lose_privs
|
||||||
|
end,
|
||||||
|
-- TODO dream a littl'
|
||||||
|
--register_chatcommand=function() end,
|
||||||
|
--chat_send_all=function() end
|
||||||
}
|
}
|
||||||
|
|
||||||
minetest.register_globalstep(function(dtime)
|
minetest.register_globalstep(function(dtime)
|
||||||
@ -149,6 +171,10 @@ player_ext = {
|
|||||||
end
|
end
|
||||||
return sender_color
|
return sender_color
|
||||||
end,
|
end,
|
||||||
|
get_color_table=function(player)
|
||||||
|
local sender_color=player:get_properties().nametag_color
|
||||||
|
return sender_color or {r=255, g=255, b=255}
|
||||||
|
end,
|
||||||
get_color_int=function(player)
|
get_color_int=function(player)
|
||||||
local sender_color=player:get_properties().nametag_color
|
local sender_color=player:get_properties().nametag_color
|
||||||
if sender_color then
|
if sender_color then
|
||||||
@ -273,6 +299,14 @@ table_ext= {
|
|||||||
return dst
|
return dst
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
append=function(t1, t2)
|
||||||
|
local l=#t1
|
||||||
|
for k, v in ipairs(t2) do
|
||||||
|
t1[l+k]=v
|
||||||
|
end
|
||||||
|
return t1
|
||||||
|
end,
|
||||||
|
|
||||||
keys = function(t)
|
keys = function(t)
|
||||||
local keys = {}
|
local keys = {}
|
||||||
for key, _ in pairs(t) do
|
for key, _ in pairs(t) do
|
||||||
@ -297,6 +331,14 @@ table_ext= {
|
|||||||
return flipped
|
return flipped
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
set = function(table)
|
||||||
|
local flipped = {}
|
||||||
|
for _, val in pairs(table) do
|
||||||
|
flipped[val] = true
|
||||||
|
end
|
||||||
|
return flipped
|
||||||
|
end,
|
||||||
|
|
||||||
unique = function(table)
|
unique = function(table)
|
||||||
local lookup = {}
|
local lookup = {}
|
||||||
for val in ipairs(table) do
|
for val in ipairs(table) do
|
||||||
@ -353,10 +395,16 @@ number_ext={
|
|||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- TODO probably set metatables ?
|
||||||
-- String helpers - split & trim at end & begin
|
-- String helpers - split & trim at end & begin
|
||||||
string_ext={
|
string_ext={
|
||||||
|
starts_with=function(str, start)
|
||||||
|
return str:sub(1, start:len()) == start
|
||||||
|
end,
|
||||||
|
ends_with=function(str, suffix)
|
||||||
|
return str:sub(str:len()-suffix:len()+1) == suffix
|
||||||
|
end,
|
||||||
trim=function(str, to_remove)
|
trim=function(str, to_remove)
|
||||||
|
|
||||||
local j=1
|
local j=1
|
||||||
for i=1, string.len(str) do
|
for i=1, string.len(str) do
|
||||||
if str:sub(i,i) ~= to_remove then
|
if str:sub(i,i) ~= to_remove then
|
||||||
@ -377,7 +425,6 @@ string_ext={
|
|||||||
end,
|
end,
|
||||||
|
|
||||||
trim_begin=function(str, to_remove)
|
trim_begin=function(str, to_remove)
|
||||||
|
|
||||||
local j=1
|
local j=1
|
||||||
for i=1, string.len(str) do
|
for i=1, string.len(str) do
|
||||||
if str:sub(i,i) ~= to_remove then
|
if str:sub(i,i) ~= to_remove then
|
||||||
@ -390,6 +437,7 @@ string_ext={
|
|||||||
end,
|
end,
|
||||||
|
|
||||||
split=function(str, delim, limit)
|
split=function(str, delim, limit)
|
||||||
|
if not limit then return string_ext.split_without_limit(str, delim) end
|
||||||
local parts={}
|
local parts={}
|
||||||
local occurences=1
|
local occurences=1
|
||||||
local last_index=1
|
local last_index=1
|
||||||
@ -404,6 +452,19 @@ string_ext={
|
|||||||
return parts
|
return parts
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
split_without_limit=function(str, delim)
|
||||||
|
local parts={}
|
||||||
|
local last_index=1
|
||||||
|
local index=string.find(str, delim)
|
||||||
|
while index do
|
||||||
|
table.insert(parts, string.sub(str, last_index, index-1))
|
||||||
|
last_index=index+string.len(delim)
|
||||||
|
index=string.find(str, delim, index+string.len(delim))
|
||||||
|
end
|
||||||
|
table.insert(parts, string.sub(str, last_index))
|
||||||
|
return parts
|
||||||
|
end,
|
||||||
|
|
||||||
hashtag=string.byte("#"),
|
hashtag=string.byte("#"),
|
||||||
zero=string.byte("0"),
|
zero=string.byte("0"),
|
||||||
nine=string.byte("9"),
|
nine=string.byte("9"),
|
||||||
@ -411,7 +472,7 @@ string_ext={
|
|||||||
letter_f=string.byte("F"),
|
letter_f=string.byte("F"),
|
||||||
|
|
||||||
is_hexadecimal=function(byte)
|
is_hexadecimal=function(byte)
|
||||||
return (byte >= string_ext.zero and byte <= string_ext.nine) or (byte >= string_ext.letter_a and byte <= string_ext.letter_f)
|
return (byte >= zero and byte <= string_ext.nine) or (byte >= string_ext.letter_a and byte <= string_ext.letter_f)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
magic_chars={"%", "(", ")", ".", "+", "-", "*", "?", "[", "^", "$"--[[,":"]]},
|
magic_chars={"%", "(", ")", ".", "+", "-", "*", "?", "[", "^", "$"--[[,":"]]},
|
||||||
@ -442,6 +503,26 @@ string_ext={
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
return string.char(256-math.pow(2, 8-i-1)+number)..result --256 = math.pow(2, 8)
|
return string.char(256-math.pow(2, 8-i-1)+number)..result --256 = math.pow(2, 8)
|
||||||
|
end,
|
||||||
|
|
||||||
|
handle_ifndefs=function(code, vars)
|
||||||
|
local finalcode={}
|
||||||
|
local endif
|
||||||
|
local after_endif=-1
|
||||||
|
local ifndef_pos, after_ifndef=string.find(code, "%-%-IFNDEF")
|
||||||
|
while ifndef_pos do
|
||||||
|
table.insert(finalcode, string.sub(code, after_endif+2, ifndef_pos-1))
|
||||||
|
local linebreak=string.find(code, "\n", after_ifndef+1)
|
||||||
|
local varname=string.sub(code, after_ifndef+2, linebreak-1)
|
||||||
|
endif, after_endif=string.find(code, "%-%-ENDIF", linebreak+1)
|
||||||
|
if not endif then break end
|
||||||
|
if vars[varname] then
|
||||||
|
table.insert(finalcode, string.sub(code, linebreak+1, endif-1))
|
||||||
|
end
|
||||||
|
ifndef_pos, after_ifndef=string.find(code, "%-%-IFNDEF", after_endif+1)
|
||||||
|
end
|
||||||
|
table.insert(finalcode, string.sub(code, after_endif+2))
|
||||||
|
return table.concat(finalcode, "")
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -469,6 +550,7 @@ threading_ext={
|
|||||||
|
|
||||||
-- File helpers - reading, writing, appending, exists, create_if_not_exists
|
-- File helpers - reading, writing, appending, exists, create_if_not_exists
|
||||||
file_ext={
|
file_ext={
|
||||||
|
|
||||||
read=function(filename)
|
read=function(filename)
|
||||||
local file=io.open(filename,"r")
|
local file=io.open(filename,"r")
|
||||||
if file==nil then
|
if file==nil then
|
||||||
@ -506,13 +588,60 @@ file_ext={
|
|||||||
end,
|
end,
|
||||||
create_if_not_exists=function(filename, content)
|
create_if_not_exists=function(filename, content)
|
||||||
if not file_ext.exists(filename) then
|
if not file_ext.exists(filename) then
|
||||||
file_ext.write(filename, content)
|
file_ext.write(filename, content or "")
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
return false
|
return false
|
||||||
end,
|
end,
|
||||||
create_if_not_exists_from_file=function(filename, src_filename)
|
create_if_not_exists_from_file=function(filename, src_filename)
|
||||||
return file_ext.create_if_not_exists(filename, file_ext.read(src_filename))
|
return file_ext.create_if_not_exists(filename, file_ext.read(src_filename))
|
||||||
|
end,
|
||||||
|
|
||||||
|
-- Process Bridge Helpers
|
||||||
|
process_bridges={},
|
||||||
|
|
||||||
|
process_bridge_build=function(name, input, output, logs)
|
||||||
|
if not input or not output or not logs then
|
||||||
|
minetest.mkdir(minetest.get_worldpath().."/bridges/"..name)
|
||||||
|
end
|
||||||
|
input=input or minetest.get_worldpath().."/bridges/"..name.."/input.txt"
|
||||||
|
output=output or minetest.get_worldpath().."/bridges/"..name.."/output.txt"
|
||||||
|
logs=logs or minetest.get_worldpath().."/bridges/"..name.."/logs.txt"
|
||||||
|
-- Clear input
|
||||||
|
file_ext.write(input, "")
|
||||||
|
-- Clear output
|
||||||
|
file_ext.write(output, "")
|
||||||
|
-- Create logs if not exists
|
||||||
|
file_ext.create_if_not_exists(logs, "")
|
||||||
|
file_ext.process_bridges[name]={input=input, output=output, logs=logs, output_file=io.open(output,"a")}
|
||||||
|
end,
|
||||||
|
process_bridge_listen=function(name, line_consumer, step)
|
||||||
|
local bridge=file_ext.process_bridges[name]
|
||||||
|
mt_ext.register_globalstep(step or 0.1, function(dtime)
|
||||||
|
local content=io.open(bridge.input, "r")
|
||||||
|
local line=content:read()
|
||||||
|
while line do
|
||||||
|
line_consumer(line)
|
||||||
|
line=content:read()
|
||||||
|
end
|
||||||
|
file_ext.write(bridge.input, "")
|
||||||
|
end)
|
||||||
|
end,
|
||||||
|
process_bridge_serve=function(name, step)
|
||||||
|
local bridge=file_ext.process_bridges[name]
|
||||||
|
mt_ext.register_globalstep(step or 0.1, function(dtime)
|
||||||
|
bridge.output_file:close()
|
||||||
|
file_ext.process_bridges[name].output_file=io.open(bridge.output,"a")
|
||||||
|
end)
|
||||||
|
end,
|
||||||
|
process_bridge_write=function(name, message)
|
||||||
|
local bridge=file_ext.process_bridges[name]
|
||||||
|
bridge.output_file:write(message.."\n")
|
||||||
|
--file_ext.append(bridge.input, message)
|
||||||
|
end,
|
||||||
|
process_bridge_start=function(name, command)
|
||||||
|
local bridge=file_ext.process_bridges[name]
|
||||||
|
os.execute(string.format(command, bridge.output, bridge.input, bridge.logs))
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -553,6 +682,12 @@ function extend_mod(modname, filename)
|
|||||||
file:close()
|
file:close()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function extend_mod_string(modname, string)
|
||||||
|
local class="setfenv(1,setmetatable("..modname..", {__index=_G, __call=_G}))\n"..string.."\n"
|
||||||
|
local fnc=assert(loadstring(class))
|
||||||
|
fnc()
|
||||||
|
end
|
||||||
|
|
||||||
-- Data helpers - load data, save data...
|
-- Data helpers - load data, save data...
|
||||||
minetest.mkdir(minetest.get_worldpath().."/data")
|
minetest.mkdir(minetest.get_worldpath().."/data")
|
||||||
data={
|
data={
|
||||||
@ -637,6 +772,30 @@ conf={
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if constraints.required_children then
|
||||||
|
for k,v_constraints in pairs(constraints.required_children) do
|
||||||
|
local v=value[k]
|
||||||
|
if v then
|
||||||
|
local possible_errors=conf.check_constraints(v, v_constraints)
|
||||||
|
if possible_errors then
|
||||||
|
return possible_errors
|
||||||
|
end
|
||||||
|
else
|
||||||
|
return "Table entry missing : Expected key "..minetest.write_json(k).." to be present in table "..minetest.write_json(value)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if constraints.possible_children then
|
||||||
|
for k,v_constraints in pairs(constraints.possible_children) do
|
||||||
|
local v=value[k]
|
||||||
|
if v then
|
||||||
|
local possible_errors=conf.check_constraints(v, v_constraints)
|
||||||
|
if possible_errors then
|
||||||
|
return possible_errors
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
if constraints.keys then
|
if constraints.keys then
|
||||||
for k,_ in pairs(value) do
|
for k,_ in pairs(value) do
|
||||||
local possible_errors=conf.check_constraints(k, constraints.keys)
|
local possible_errors=conf.check_constraints(k, constraints.keys)
|
||||||
|
Loading…
Reference in New Issue
Block a user