diff options
Diffstat (limited to 'misc')
0 files changed, 0 insertions, 0 deletions
-- stoprail.lua
-- adds "stop rail". Recognized by lzb. (part of behavior is implemented there)
local function to_int(n)
--- Disallow floating-point numbers
local k = tonumber(n)
if k then
return math.floor(k)
end
end
local function updatemeta(pos)
local meta = minetest.get_meta(pos)
local pe = advtrains.encode_pos(pos)
local stdata = advtrains.lines.stops[pe]
if not stdata then
meta:set_string("infotext", "Error")
end
meta:set_string("infotext", "Stn. "..stdata.stn.." T. "..stdata.track)
end
local door_dropdown = {L=1, R=2, C=3}
local door_dropdown_rev = {Right="R", Left="L", Closed="C"}
local function show_stoprailform(pos, player)
local pe = advtrains.encode_pos(pos)
local pname = player:get_player_name()
if minetest.is_protected(pos, pname) then
minetest.chat_send_player(pname, "Position is protected!")
return
end
local stdata = advtrains.lines.stops[pe]
if not stdata then
advtrains.lines.stops[pe] = {
stn="", track="", doors="R", wait=10, ars={default=true}, ddelay=1,speed="M"
}
stdata = advtrains.lines.stops[pe]
end
local stn = advtrains.lines.stations[stdata.stn]
local stnname = stn and stn.name or ""
if not stdata.ddelay then
stdata.ddelay = 1
end
if not stdata.speed then
stdata.speed = "M"
end
local form = "size[8,7]"
form = form.."style[stn,ars;font=mono]"
form = form.."field[0.8,0.8;2,1;stn;"..attrans("Station Code")..";"..minetest.formspec_escape(stdata.stn).."]"
form = form.."field[2.8,0.8;5,1;stnname;"..attrans("Station Name")..";"..minetest.formspec_escape(stnname).."]"
form = form.."field[0.80,2.0;1.75,1;ddelay;"..attrans("Door Delay")..";"..minetest.formspec_escape(stdata.ddelay).."]"
form = form.."field[2.55,2.0;1.75,1;speed;"..attrans("Dep. Speed")..";"..minetest.formspec_escape(stdata.speed).."]"
form = form.."field[4.30,2.0;1.75,1;track;"..attrans("Track")..";"..minetest.formspec_escape(stdata.track).."]"
form = form.."field[6.05,2.0;1.75,1;wait;"..attrans("Stop Time")..";"..stdata.wait.."]"
form = form.."label[0.5,2.6;"..attrans("Door Side").."]"
form = form.."dropdown[0.51,3.0;2;doors;Left,Right,Closed;"..door_dropdown[stdata.doors].."]"
form = form.."checkbox[3.00,2.7;reverse;"..attrans("Reverse train")..";"..(stdata.reverse and "true" or "false").."]"
form = form.."checkbox[3.00,3.1;kick;"..attrans("Kick out passengers")..";"..(stdata.kick and "true" or "false").."]"
form = form.."textarea[0.8,4.2;7,2;ars;Trains stopping here (ARS rules);"..advtrains.interlocking.ars_to_text(stdata.ars).."]"
form = form.."button[0.5,6;7,1;save;"..attrans("Save").."]"
minetest.show_formspec(pname, "at_lines_stop_"..pe, form)
end
local tmp_checkboxes = {}
minetest.register_on_player_receive_fields(function(player, formname, fields)
local pname = player:get_player_name()
local pe = string.match(formname, "^at_lines_stop_(............)$")
local pos = advtrains.decode_pos(pe)
if pos then
if minetest.is_protected(pos, pname) then
minetest.chat_send_player(pname, "Position is protected!")
return
end
local stdata = advtrains.lines.stops[pe]
if not tmp_checkboxes[pe] then
tmp_checkboxes[pe] = {}
end
if fields.kick then -- handle checkboxes due to MT's weird handling
tmp_checkboxes[pe].kick = (fields.kick == "true")
end
if fields.reverse then
tmp_checkboxes[pe].reverse = (fields.reverse == "true")
end
if fields.save then
if fields.stn and stdata.stn ~= fields.stn and fields.stn ~= "" then
local stn = advtrains.lines.stations[fields.stn]
if stn then
if (stn.owner == pname or minetest.check_player_privs(pname, "train_admin")) then
stdata.stn = fields.stn
else
minetest.chat_send_player(pname, "Station code '"..fields.stn.."' does already exist and is owned by "..stn.owner)
show_stoprailform(pos,player)
return
end
else
advtrains.lines.stations[fields.stn] = {name = fields.stnname, owner = pname}
stdata.stn = fields.stn
end
end
local stn = advtrains.lines.stations[stdata.stn]