diff options
Diffstat (limited to 'callbuttons.lua')
| -rw-r--r-- | callbuttons.lua | 96 |
1 files changed, 55 insertions, 41 deletions
diff --git a/callbuttons.lua b/callbuttons.lua index 7e19de6..84ccf12 100644 --- a/callbuttons.lua +++ b/callbuttons.lua @@ -1,5 +1,7 @@ celevator.callbutton = {} +local S = core.get_translator("celevator") + local function makebuttontex(dir,upon,downon,inventory) local tex = "[combine:64x64".. ":0,0=celevator_cabinet_sides.png".. @@ -42,52 +44,57 @@ local function makebuttontex(dir,upon,downon,inventory) return(tex) end +local upname = S("Elevator Up Call Button") +local dnname = S("Elevator Down Call Button") +local bothname = S("Elevator Up and Down Call Buttons") +local onname = S("Elevator Call Button (on state - you hacker you!)") + local validstates = { - {"up",false,false,"Up"}, - {"up",true,false,"Up"}, - {"down",false,false,"Down"}, - {"down",false,true,"Down"}, - {"both",false,false,"Up and Down"}, - {"both",true,false,"Up and Down"}, - {"both",false,true,"Up and Down"}, - {"both",true,true,"Up and Down"}, + {"up",false,false,upname}, + {"up",true,false,onname}, + {"down",false,false,dnname}, + {"down",false,true,onname}, + {"both",false,false,bothname}, + {"both",true,false,onname}, + {"both",false,true,onname}, + {"both",true,true,onname}, } function celevator.callbutton.setlight(pos,dir,newstate) local node = celevator.get_node(pos) - if minetest.get_item_group(node.name,"_celevator_callbutton") ~= 1 then return end + if core.get_item_group(node.name,"_celevator_callbutton") ~= 1 then return end if dir == "up" then - if minetest.get_item_group(node.name,"_celevator_callbutton_has_up") ~= 1 then return end - local lit = minetest.get_item_group(node.name,"_celevator_callbutton_up_lit") == 1 + if core.get_item_group(node.name,"_celevator_callbutton_has_up") ~= 1 then return end + local lit = core.get_item_group(node.name,"_celevator_callbutton_up_lit") == 1 if lit == newstate then return end local newname = "celevator:callbutton_" - if minetest.get_item_group(node.name,"_celevator_callbutton_has_down") == 1 then + if core.get_item_group(node.name,"_celevator_callbutton_has_down") == 1 then newname = newname.."both" else newname = newname.."up" end if newstate then newname = newname.."_upon" end - if minetest.get_item_group(node.name,"_celevator_callbutton_down_lit") == 1 then + if core.get_item_group(node.name,"_celevator_callbutton_down_lit") == 1 then newname = newname.."_downon" end node.name = newname - minetest.swap_node(pos,node) + core.swap_node(pos,node) elseif dir == "down" then - if minetest.get_item_group(node.name,"_celevator_callbutton_has_down") ~= 1 then return end - local lit = minetest.get_item_group(node.name,"_celevator_callbutton_down_lit") == 1 + if core.get_item_group(node.name,"_celevator_callbutton_has_down") ~= 1 then return end + local lit = core.get_item_group(node.name,"_celevator_callbutton_down_lit") == 1 if lit == newstate then return end local newname = "celevator:callbutton_" - if minetest.get_item_group(node.name,"_celevator_callbutton_has_up") == 1 then + if core.get_item_group(node.name,"_celevator_callbutton_has_up") == 1 then newname = newname.."both" else newname = newname.."down" end - if minetest.get_item_group(node.name,"_celevator_callbutton_up_lit") == 1 then + if core.get_item_group(node.name,"_celevator_callbutton_up_lit") == 1 then newname = newname.."_upon" end if newstate then newname = newname.."_downon" end node.name = newname - minetest.swap_node(pos,node) + core.swap_node(pos,node) end end @@ -97,13 +104,13 @@ local function disambiguatedir(pos,player) local lookdir = player:get_look_dir() local distance = vector.distance(eyepos,pos) local endpos = vector.add(eyepos,vector.multiply(lookdir,distance+1)) - local ray = minetest.raycast(eyepos,endpos,true,false) + local ray = core.raycast(eyepos,endpos,true,false) local pointed,button,hitpos repeat pointed = ray:next() if pointed and pointed.type == "node" then - local node = minetest.get_node(pointed.under) - if node.name and (minetest.get_item_group(node.name,"_celevator_callbutton") == 1) then + local node = core.get_node(pointed.under) + if node.name and (core.get_item_group(node.name,"_celevator_callbutton") == 1) then button = pointed.under hitpos = vector.subtract(pointed.intersection_point,button) end @@ -134,8 +141,8 @@ for _,state in ipairs(validstates) do light = light + 5 end local idle = not (state[2] or state[3]) - local description = string.format("Elevator %s Call Button%s%s",state[4],(state[1] == "both" and "s" or ""),(idle and "" or " (on state, you hacker you!)")) - minetest.register_node(nname,{ + local description = state[4] + core.register_node(nname,{ description = description, groups = { dig_immediate = 2, @@ -167,45 +174,52 @@ for _,state in ipairs(validstates) do }, }, after_place_node = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec","formspec_version[7]size[8,5]field[0.5,0.5;7,1;carid;Car ID;]field[0.5,2;7,1;landing;Landing Number;]button[3,3.5;2,1;save;Save]") + local meta = core.get_meta(pos) + local idmsg = S("Car ID") + local landingmsg = S("Landing Number") + local savemsg = S("Save") + local fs = "formspec_version[7]size[8,5]" + fs = fs.."field[0.5,0.5;7,1;carid;"..idmsg..";]" + fs = fs.."field[0.5,2;7,1;landing;"..landingmsg..";]" + fs = fs.."button[3,3.5;2,1;save;"..savemsg.."]" + meta:set_string("formspec",fs) end, on_receive_fields = function(pos,_,fields) if tonumber(fields.carid) and tonumber(fields.landing) then local carid = tonumber(fields.carid) - local carinfo = minetest.deserialize(celevator.storage:get_string(string.format("car%d",carid))) + local carinfo = core.deserialize(celevator.storage:get_string(string.format("car%d",carid))) if not carinfo then return end table.insert(carinfo.callbuttons,{pos=pos,landing=tonumber(fields.landing)}) - celevator.storage:set_string(string.format("car%d",carid),minetest.serialize(carinfo)) - local meta = minetest.get_meta(pos) + celevator.storage:set_string(string.format("car%d",carid),core.serialize(carinfo)) + local meta = core.get_meta(pos) meta:set_int("carid",carid) meta:set_int("landing",tonumber(fields.landing)) meta:set_string("formspec","") end end, on_destruct = function(pos) - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) local carid = meta:get_int("carid") if carid == 0 then return end - local carinfo = minetest.deserialize(celevator.storage:get_string(string.format("car%d",carid))) + local carinfo = core.deserialize(celevator.storage:get_string(string.format("car%d",carid))) if not carinfo then return end for i,button in pairs(carinfo.callbuttons) do if vector.equals(pos,button.pos) then table.remove(carinfo.callbuttons,i) - celevator.storage:set_string(string.format("car%d",carid),minetest.serialize(carinfo)) + celevator.storage:set_string(string.format("car%d",carid),core.serialize(carinfo)) end end end, on_rightclick = function(pos,_,clicker) - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) local carid = meta:get_int("carid") if carid == 0 then return end - local carinfo = minetest.deserialize(celevator.storage:get_string(string.format("car%d",carid))) + local carinfo = core.deserialize(celevator.storage:get_string(string.format("car%d",carid))) if not carinfo then return end local controllerpos = carinfo.controllerpos or carinfo.dispatcherpos local isdispatcher = carinfo.dispatcherpos if not controllerpos then return end - local controllermeta = minetest.get_meta(controllerpos) + local controllermeta = core.get_meta(controllerpos) if controllermeta:get_int("carid") ~= carid then return end local landing = meta:get_int("landing") if state[1] == "up" then @@ -240,24 +254,24 @@ for _,state in ipairs(validstates) do }) end -minetest.register_abm({ +core.register_abm({ label = "Check call buttons for missing/replaced controllers", nodenames = {"group:_celevator_callbutton",}, interval = 15, chance = 1, action = function(pos) - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) local carid = meta:get_int("carid") if not (carid and carid > 0) then return end --Not set up yet - local carinfo = minetest.deserialize(celevator.storage:get_string("car"..carid)) + local carinfo = core.deserialize(celevator.storage:get_string("car"..carid)) if not carinfo then - meta:set_string("infotext","Error reading car information!\nPlease remove and replace this node.") + meta:set_string("infotext",S("Error reading car information!\nPlease remove and replace this node.")) return end local iscontroller = (carinfo.controllerpos and celevator.controller.iscontroller(carinfo.controllerpos)) local isdispatcher = (carinfo.dispatcherpos and celevator.dispatcher.isdispatcher(carinfo.dispatcherpos)) if not (iscontroller or isdispatcher) then - meta:set_string("infotext","Controller/dispatcher is missing!\nPlease remove and replace this node.") + meta:set_string("infotext",S("Controller/dispatcher is missing!\nPlease remove and replace this node.")) return end local metacarid = 0 @@ -267,7 +281,7 @@ minetest.register_abm({ metacarid = celevator.get_meta(carinfo.dispatcherpos):get_int("carid") end if metacarid ~= carid then - meta:set_string("infotext","Controller/dispatcher found but with incorrect ID!\nPlease remove and replace this node.") + meta:set_string("infotext",S("Controller/dispatcher found but with incorrect ID!\nPlease remove and replace this node.")) end end, }) |
