From 25dac695984117e0be4ea11fefc9e1293ed56745 Mon Sep 17 00:00:00 2001 From: NatureFreshMilk Date: Thu, 24 Jan 2019 14:13:24 +0100 Subject: [PATCH] complete mapserver objects --- mapserver_mod/mapserver/depends.txt | 1 + mapserver_mod/mapserver/digimessage.lua | 107 +++++++++++++++++ mapserver_mod/mapserver/init.lua | 9 +- .../textures/mapserver_digimessage.png | Bin 0 -> 291 bytes .../mapserver/textures/mapserver_train.png | Bin 0 -> 279 bytes mapserver_mod/mapserver/train.lua | 108 ++++++++++++++++++ 6 files changed, 224 insertions(+), 1 deletion(-) create mode 100644 mapserver_mod/mapserver/digimessage.lua create mode 100644 mapserver_mod/mapserver/textures/mapserver_digimessage.png create mode 100644 mapserver_mod/mapserver/textures/mapserver_train.png create mode 100644 mapserver_mod/mapserver/train.lua diff --git a/mapserver_mod/mapserver/depends.txt b/mapserver_mod/mapserver/depends.txt index 4ad96d5..d195b71 100644 --- a/mapserver_mod/mapserver/depends.txt +++ b/mapserver_mod/mapserver/depends.txt @@ -1 +1,2 @@ default +digiline? diff --git a/mapserver_mod/mapserver/digimessage.lua b/mapserver_mod/mapserver/digimessage.lua new file mode 100644 index 0000000..30074bc --- /dev/null +++ b/mapserver_mod/mapserver/digimessage.lua @@ -0,0 +1,107 @@ + +local update_formspec = function(meta) + local inv = meta:get_inventory() + + local active = meta:get_int("active") == 1 + local state = "Inactive" + + if active then + state = "Active" + end + + local channel = meta:get_string("channel") + local message = meta:get_string("message") + + meta:set_string("infotext", "Digimessage: Channel=" .. channel .. ", Message=" .. message .. " (" .. state .. ")") + + meta:set_string("formspec", "size[8,2;]" .. + -- col 1 + "field[0,1;8,1;channel;Channel;" .. channel .. "]" .. + + -- col 3 + "button_exit[0,2;4,1;save;Save]" .. + "button_exit[4,2;4,1;toggle;Toggle]" .. + "") + +end + + +minetest.register_node("mapserver:digimessage", { + description = "Mapserver Digiline Message", + tiles = { + "tileserver_digimessage.png", + "tileserver_digimessage.png", + "tileserver_digimessage.png", + "tileserver_digimessage.png", + "tileserver_digimessage.png", + "tileserver_digimessage.png" + }, + groups = {cracky=3,oddly_breakable_by_hand=3}, + sounds = default.node_sound_glass_defaults(), + + digiline = { + receptor = {action = function() end}, + effector = { + action = function(pos, _, channel, msg) + local meta = minetest.env:get_meta(pos) + local set_channel = meta:get_string("channel") + + if channel == set_channel and type(msg) == "string" then + meta:set_string("message", msg) + end + end + }, + }, + + can_dig = function(pos, player) + local meta = minetest.env:get_meta(pos) + local owner = meta:get_string("owner") + + return player and player:get_player_name() == owner + end, + + after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + end, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + + last_index = last_index + 5 + + meta:set_string("channel", "digimessage") + meta:set_string("message", "") + meta:set_int("active", 1) + + update_formspec(meta) + end, + + on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + local playername = sender:get_player_name() + + if playername == meta:get_string("owner") then + -- owner + if fields.save then + last_line = fields.line + meta:set_string("channel", fields.channel) + end + + if fields.toggle then + if meta:get_int("active") == 1 then + meta:set_int("active", 0) + else + meta:set_int("active", 1) + end + end + else + -- non-owner + end + + + update_formspec(meta) + end + + +}) diff --git a/mapserver_mod/mapserver/init.lua b/mapserver_mod/mapserver/init.lua index a5c6a09..86dbb41 100644 --- a/mapserver_mod/mapserver/init.lua +++ b/mapserver_mod/mapserver/init.lua @@ -3,7 +3,14 @@ mapserver = { } local MP = minetest.get_modpath("mapserver") +local has_digiline_mod = minetest.get_modpath("digiline") dofile(MP.."/poi.lua") +dofile(MP.."/train.lua") -print("[OK] Mapserver mod") +if has_digiline_mod then + dofile(MP.."/digimessage.lua") +end + + +print("[OK] Mapserver") diff --git a/mapserver_mod/mapserver/textures/mapserver_digimessage.png b/mapserver_mod/mapserver/textures/mapserver_digimessage.png new file mode 100644 index 0000000000000000000000000000000000000000..84fb0740adfbf4e61db3f653caf9c7509e9fe012 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_r*vAk26?e?RI*v(rrr+be>Ii<=Ijc$j~+2NkZ^@@F`q=~ zfeQr=ufJ4TxQQQM#y8!@RWV@h%@aV}arwfvmtR?~2B>mvh-BC-6M6Q8Z_ABKT(Pna zULPhuW%%;r*i=1_EJ49+LpymT>!v9I2_ToefAGNIgYTw`iz=YTcf6go@j%y+Mka=- XrCyA}Tibw6XJGJj^>bP0l+XkK53X?N literal 0 HcmV?d00001 diff --git a/mapserver_mod/mapserver/textures/mapserver_train.png b/mapserver_mod/mapserver/textures/mapserver_train.png new file mode 100644 index 0000000000000000000000000000000000000000..5f1a10008bdf9c330a3de8bae370630cf5f04bf6 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={W*pj^6T^Rm@;DWu&Cj&(|3p^r= z85sBugD~Uq{1qucLG}_)Usv`=oJ^dG(w14V!9bxUo-U3d9>?E?IdUCQ;OUw5IPRB1 z;=F0ge=gqpWyc}8Z5|7!`W_9K^6Y`)#Gc89f$Rz`4!+Zh|Ltz?)Hvp0HZACr^ttSp zvv;Z7VX%9>Ti?O+#mO7T*dIhWxSXnz3i`G4ZOrc&(>*&)HP-Zh$-Z@k>*-gizRT>j zk`@dMZ^oomGvf<3gAdm)-YmU&eqYXI Ww?hZTE-V1Lm%-E3&t;ucLK6VVMRL9X literal 0 HcmV?d00001 diff --git a/mapserver_mod/mapserver/train.lua b/mapserver_mod/mapserver/train.lua new file mode 100644 index 0000000..0f0a782 --- /dev/null +++ b/mapserver_mod/mapserver/train.lua @@ -0,0 +1,108 @@ + +local last_index = 0 +local last_line = "" + +local update_formspec = function(meta) + local inv = meta:get_inventory() + + local active = meta:get_int("active") == 1 + local state = "Inactive" + + if active then + state = "Active" + end + + local line = meta:get_string("line") + local station = meta:get_string("station") + local index = meta:get_string("index") + + meta:set_string("infotext", "Train: Line=" .. line .. ", Station=" .. station .. " (" .. state .. ")") + + meta:set_string("formspec", "size[8,3;]" .. + -- col 1 + "field[0,1;4,1;line;Line;" .. line .. "]" .. + "button_exit[4,1;4,1;save;Save]" .. + + -- col 2 + "field[0,2.5;4,1;station;Station;" .. station .. "]" .. + "field[4,2.5;4,1;index;Index;" .. index .. "]" .. + + -- col 3 + "button_exit[4,3;4,1;toggle;Toggle]" .. + "") + +end + + +minetest.register_node("mapserver:train", { + description = "Mapserver Train", + tiles = { + "tileserver_train.png", + "tileserver_train.png", + "tileserver_train.png", + "tileserver_train.png", + "tileserver_train.png", + "tileserver_train.png" + }, + groups = {cracky=3,oddly_breakable_by_hand=3}, + sounds = default.node_sound_glass_defaults(), + + can_dig = function(pos, player) + local meta = minetest.env:get_meta(pos) + local owner = meta:get_string("owner") + + return player and player:get_player_name() == owner + end, + + after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + end, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + + last_index = last_index + 5 + + meta:set_string("station", "") + meta:set_string("line", last_line) + meta:set_int("active", 1) + meta:set_int("index", last_index) + + update_formspec(meta) + end, + + on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + local playername = sender:get_player_name() + + if playername == meta:get_string("owner") then + -- owner + if fields.save then + last_line = fields.line + meta:set_string("line", fields.line) + meta:set_string("station", fields.station) + local index = tonumber(fields.index) + if index ~= nil then + last_index = index + meta:set_int("index", index) + end + end + + if fields.toggle then + if meta:get_int("active") == 1 then + meta:set_int("active", 0) + else + meta:set_int("active", 1) + end + end + else + -- non-owner + end + + + update_formspec(meta) + end + + +})