2019-01-09 12:16:30 -08:00
was.gui = function ( name , msg )
2019-01-08 13:56:48 -08:00
2019-01-09 12:16:30 -08:00
was.user [ name ] . inserttext = was.user [ name ] . inserttext or " true "
was.user [ name ] . lines = was.user [ name ] . lines or " off "
was.user [ name ] . bg = was.user [ name ] . bg or " true "
was.user [ name ] . console = was.user [ name ] . console or " false "
2019-01-14 13:47:16 -08:00
2019-01-08 13:56:48 -08:00
local funcs = " "
2019-01-15 04:47:15 -08:00
local funcs2cho = { }
2019-01-08 13:56:48 -08:00
local symbs = " SYMBOLS, "
local tx = 17
local console = " "
if was.user [ name ] . console == " true " then
tx = 11
console = " label[10.6,1.3; " .. minetest.colorize ( " #00FF00 " , was.user [ name ] . console_text or " " ) .. " ] "
end
for f , v in pairs ( was.symbols ) do
symbs = symbs .. f .. " , "
end
2019-01-09 05:58:12 -08:00
for _ , v in pairs ( was.function_list ) do
if minetest.check_player_privs ( name , was.privs [ v ] ) then
funcs = funcs .. v .. " , "
2019-01-15 04:47:15 -08:00
table.insert ( funcs2cho , v )
2019-01-08 13:56:48 -08:00
end
end
2019-01-12 01:35:39 -08:00
--funcs=funcs:sub(0,funcs:len()-1)
2019-01-08 13:56:48 -08:00
symbs = symbs : sub ( 0 , symbs : len ( ) - 1 )
local gui = " size[20,12.1] "
.. ( was.user [ name ] . bg == " true " and " background[-0.5,-0.2;22,13;was_guibg.png] " or " " )
.. console
2019-01-09 12:16:30 -08:00
.. " textarea[0,1.3; " .. tx .. " ,13;text;; " .. ( was.user [ name ] . text or " " ) .. " ] "
2019-01-08 13:56:48 -08:00
.. " label[0,0.6; " .. minetest.colorize ( " #00FF00 " , ( msg or " " ) ) .. " ] "
.. " button[-0.2,-0.2;1.3,1;run;Run] "
.. " button[0.8,-0.2;1.3,1;save;Save] "
.. " button[1.8,-0.2;1.5,1;lines;Lines " .. was.user [ name ] . lines .. " ] "
.. " button[3.1,-0.2;1.5,1;storage;Storage] "
.. " field[4.6,0.1;3,1;pupos;; " .. ( was.user [ name ] . punchpos or " " ) .. " ] "
.. " dropdown[16.5,0.4;4,12;slist; " .. symbs .. " ;] "
.. " textlist[16.5,1;4,12;list; " .. funcs .. " ] "
2019-01-12 01:35:39 -08:00
.. " button[8.2,-0.2;1.9,1;stopt;Stop timer] "
.. " field[10.1,0.1;3,1;channel;; " .. ( was.user [ name ] . channel or " " ) .. " ] "
2019-01-08 13:56:48 -08:00
.. " checkbox[16.6,-0.4;inserttext;Insert text; " .. was.user [ name ] . inserttext .. " ] "
.. " checkbox[7.2,-0.2;bg;; " .. was.user [ name ] . bg .. " ] "
.. " checkbox[7.7,-0.2;console;; " .. was.user [ name ] . console .. " ] "
.. " tooltip[pupos;Press Enter and punch on a node to return the position, or punch it again to get its name, Press Enter to move the text to the textarea] "
.. " tooltip[bg;Background] "
.. " tooltip[console;Console] "
2019-01-15 04:47:15 -08:00
.. " tooltip[channel;Channel (Press save to change)] "
2019-01-08 13:56:48 -08:00
was.user [ name ] . punchpos = nil
2019-01-15 04:47:15 -08:00
was.user [ name ] . funcs = funcs2cho
2019-01-08 13:56:48 -08:00
minetest.after ( 0.1 , function ( gui , name )
return minetest.show_formspec ( name , " was.gui " , gui )
end , gui , name )
end
minetest.register_on_player_receive_fields ( function ( user , form , pressed )
if form == " was.gui " then
local name = user : get_player_name ( )
if ( pressed.quit and not pressed.key_enter ) or not was.user [ name ] then
if was.user [ name ] then
was.user [ name ] . text = nil
2019-01-15 04:47:15 -08:00
was.user [ name ] . funcs = nil
2019-01-12 01:35:39 -08:00
was.user [ name ] . channel = nil
2019-01-16 08:47:28 -08:00
was.user [ name ] . id = nil
was.user [ name ] . gui = nil
2019-01-08 13:56:48 -08:00
end
return
end
if pressed.storage and was.user [ name ] . nodepos then
local gui = " size[10,9] "
.. " list[nodemeta: " .. was.user [ name ] . nodepos.x .. " , " .. was.user [ name ] . nodepos.y .. " , " .. was.user [ name ] . nodepos.z .. " ;storage;0,0;10,5;] "
.. " list[current_player;main;1,5.2;8,4;] "
.. " listring[current_player;main] "
.. " listring[nodemeta: " .. was.user [ name ] . nodepos.x .. " , " .. was.user [ name ] . nodepos.y .. " , " .. was.user [ name ] . nodepos.z .. " ;storage] "
minetest.after ( 0.1 , function ( gui , name )
return minetest.show_formspec ( name , " was.guistorage " , gui )
end , gui , name )
return
end
was.user [ name ] . text = pressed.text
if was.user [ name ] . text : find ( " %[ " ) or was.user [ name ] . text : find ( " %] " ) then
was.user [ name ] . text = was.user [ name ] . text : gsub ( " %[ " , " " )
was.user [ name ] . text = was.user [ name ] . text : gsub ( " %] " , " " )
minetest.close_formspec ( name , form )
was.gui ( name , " Unallowed characters removed " )
return
end
if pressed.lines then
if was.user [ name ] . lines == " on " then
was.user [ name ] . text = was.gui_delnumbers ( was.user [ name ] . text )
was.user [ name ] . lines = " off "
else
was.user [ name ] . text = was.gui_addnumbers ( was.user [ name ] . text )
was.user [ name ] . lines = " on "
end
was.gui ( name )
elseif was.user [ name ] . lines == " on " then
was.user [ name ] . text = was.gui_delnumbers ( was.user [ name ] . text )
was.user [ name ] . lines = " off "
elseif pressed.inserttext then
was.user [ name ] . inserttext = pressed.inserttext
elseif pressed.bg then
was.user [ name ] . bg = pressed.bg
was.gui ( name )
return
elseif pressed.console then
was.user [ name ] . console = pressed.console
was.gui ( name )
return
2019-01-12 01:35:39 -08:00
elseif pressed.stopt and was.user [ name ] . nodepos then
minetest.get_node_timer ( was.user [ name ] . nodepos ) : stop ( )
2019-01-08 13:56:48 -08:00
end
if pressed.list and pressed.list ~= " IMV " then
local n = pressed.list : gsub ( " CHG: " , " " )
2019-01-15 04:47:15 -08:00
local f = was.user [ name ] . funcs [ tonumber ( n ) ]
2019-01-08 13:56:48 -08:00
local info = was.info [ f ] or " "
if was.privs [ f ] then
info = info .. " | Privs: " .. minetest.privs_to_string ( was.privs [ f ] )
end
if was.user [ name ] . inserttext == " true " and f then
was.user [ name ] . text = was.user [ name ] . text .. f .. ( was.functions [ f ] and " () " or " " )
end
minetest.close_formspec ( name , form )
was.gui ( name , info )
elseif pressed.slist and pressed.slist ~= " SYMBOLS " then
if was.user [ name ] . inserttext == " true " then
was.user [ name ] . text = was.user [ name ] . text .. pressed.slist
end
was.gui ( name , was.info [ pressed.slist ] or " " )
elseif pressed.save then
2019-01-12 01:35:39 -08:00
if was.user [ name ] . nodepos and minetest.get_item_group ( minetest.get_node ( was.user [ name ] . nodepos ) . name , " was_unit " ) == 1 then
2019-01-08 13:56:48 -08:00
local meta = minetest.get_meta ( was.user [ name ] . nodepos )
meta : set_string ( " text " , minetest.serialize ( was.user [ name ] . text ) )
2019-01-12 01:35:39 -08:00
meta : set_string ( " channel " , pressed.channel )
was.user [ name ] . channel = pressed.channel
2019-01-08 13:56:48 -08:00
was.gui ( name , " Text saved successful " )
2019-01-12 13:36:40 -08:00
return
2019-01-08 13:56:48 -08:00
end
elseif pressed.pupos and pressed.key_enter then
if pressed.pupos == " " then
was.user [ name ] . punchpos = " "
minetest.close_formspec ( name , form )
minetest.chat_send_player ( name , " Punch a node, then come back here " )
elseif pressed.pupos ~= " " then
was.user [ name ] . text = was.user [ name ] . text .. pressed.pupos
was.gui ( name )
end
elseif pressed.run then
2019-01-12 01:35:39 -08:00
local msg = was.compiler ( was.user [ name ] . text , {
2019-01-13 01:14:10 -08:00
save = was.storage ,
type = " node " ,
2019-01-12 01:35:39 -08:00
user = name ,
pos = was.user [ name ] . nodepos ,
print = true ,
2019-01-12 13:36:40 -08:00
event = { type = " gui_run " }
2019-01-12 01:35:39 -08:00
} )
2019-01-13 01:14:10 -08:00
if msg and msg ~= " " then
2019-01-08 13:56:48 -08:00
was.user [ name ] . text = was.gui_addnumbers ( was.user [ name ] . text )
was.user [ name ] . lines = " on "
was.userdata . name = name
2019-01-16 09:23:34 -08:00
was.userdata . print = true
was.userdata . id = was.user [ name ] . id
2019-01-08 13:56:48 -08:00
was.functions [ " print " ] ( { msg } )
2019-01-16 09:23:34 -08:00
return
2019-01-08 13:56:48 -08:00
end
was.gui ( name , msg )
2019-01-12 13:36:40 -08:00
return
2019-01-08 13:56:48 -08:00
end
2019-01-15 04:47:15 -08:00
elseif form == " was.channel " then
local name = user : get_player_name ( )
if was.user [ name ] then
local m = minetest.get_meta ( was.user [ name ] )
if pressed.channel == m : get_string ( " channelto " ) or pressed.channelto == m : get_string ( " channel " ) then
return
end
if pressed.channel then
m : set_string ( " channel " , pressed.channel )
end
if pressed.channelto then
m : set_string ( " channelto " , pressed.channelto )
end
2019-01-18 13:23:50 -08:00
if pressed.radius then
local nu = tonumber ( pressed.radius )
if nu then
if nu > 10 then
nu = 10
elseif nu < 0 then
nu = 0
end
m : set_int ( " radius " , nu )
end
end
2019-01-15 04:47:15 -08:00
end
was.user [ name ] = nil
2019-01-08 13:56:48 -08:00
end
end )
2019-01-13 01:14:10 -08:00
minetest.after ( 0.2 , function ( )
for f , v in pairs ( was.functions ) do
table.insert ( was.function_list , f )
end
table.sort ( was.function_list , function ( a , b ) return a < b end )
end )
was.gui_addnumbers = function ( text )
text = text .. " \n "
for i = 1 , text : len ( ) , 1 do
if text : sub ( i , i ) ~= " \n " then
text = text : sub ( i , text : len ( ) )
break
end
end
local t = " "
for i , v in ipairs ( text.split ( text , " \n " ) ) do
t = t .. i .. " " .. v .. " \n "
end
return t
end
was.gui_delnumbers = function ( text )
for i = 1 , text : len ( ) , 1 do
if text : sub ( i , i ) ~= " \n " then
text = text : sub ( i , text : len ( ) )
break
end
end
local t = " "
for i , v in ipairs ( text.split ( text , " \n " ) ) do
for ii = 1 , v : len ( ) , 1 do
local s = string.sub ( v , ii , ii )
if not was.num ( s ) then
ii = ( s == " " and ii + 1 ) or ii
t = t .. string.sub ( v , ii , v : len ( ) ) .. " \n "
break
end
end
end
return t
end
2019-01-08 13:56:48 -08:00
minetest.register_on_punchnode ( function ( pos , node , puncher , pointed_thing )
local name = puncher : get_player_name ( )
if was.user [ name ] and was.user [ name ] . punchpos then
if was.user [ name ] . punchpos == " " or was.user [ name ] . punchpos : find ( " : " ) then
was.user [ name ] . punchpos = pos.x .. " " .. pos.y .. " " .. pos.z
minetest.chat_send_player ( name , " Position " .. was.user [ name ] . punchpos )
else
was.user [ name ] . punchpos = minetest.get_node ( pos ) . name
minetest.chat_send_player ( name , " Name " .. was.user [ name ] . punchpos )
end
end
end )
minetest.register_on_leaveplayer ( function ( player )
local name = player : get_player_name ( )
if was.user [ name ] then
was.user [ name ] = nil
end
end )