Merge branch 'wagon_prop_formspec' of https://github.com/Montandalar/advtrains

master
Gabriel Pérez-Cerezo 2020-06-08 13:50:08 +02:00
commit d61c2145a0
4 changed files with 57 additions and 24 deletions

View File

@ -101,7 +101,9 @@ advtrains.register_wagon(name, prototype, description, inventory_image)
get_inventory_formspec = function(self, player_name, inventory_name)
return "<a formspec>"
end,
^- Function that should return the formspec to be displayed when <player> requests to open the wagon's inventory
^- Function that should return the formspec to be displayed when <player> requests to open the wagon's inventory.
^- advtrains.standard_inventory_formspec can be used for ordinary wagons with inventories to show
^- both the inventory grid and a 'Wagon properties' button.
^- Use "list["..inventory_name..";<list_name>;<X>,<Y>;<W>,<H>;<Start>]" to display a wagon's inventory list.
custom_on_step = function(self, dtime) end

View File

@ -777,7 +777,8 @@ function wagon:show_wagon_properties(pname)
]]
local data = advtrains.wagons[self.id]
local form="size[5,5]"
form = form .. "field[0.5,1;4,1;whitelist;Allow these players to drive your wagon:;"..(data.whitelist or "").."]"
form = form .. "field[0.5,1;4,1;whitelist;Allow these players to access your wagon:;"..(data.whitelist or "").."]"
form = form .. "field[0.5,2;4,1;roadnumber;Wagon road number:;"..(data.roadnumber or "").."]"
--seat groups access lists were here
form=form.."button_exit[0.5,3;4,1;save;"..attrans("Save wagon properties").."]"
minetest.show_formspec(pname, "advtrains_prop_"..self.id, form)
@ -810,21 +811,23 @@ function wagon:show_bordcom(pname)
form=form.."field[7.5,3.25;3,1;routingcode;"..attrans("Routingcode")..";"..(minetest.formspec_escape(train.routingcode or "")).."]"
--row 5 : train overview and autocoupling
if train.velocity==0 then
form=form.."label[0.5,4.5;Train overview /coupling control:]"
form=form.."label[0.5,4;Train overview /coupling control:]"
linhei=5
local pre_own, pre_wl, owns_any = nil, nil, minetest.check_player_privs(pname, "train_admin")
for i, tpid in ipairs(train.trainparts) do
local ent = advtrains.wagons[tpid]
if ent then
local roadnumber = ent.roadnumber or ""
form = form .. string.format("button[%d,%d;%d,%d;%s;%s]", i, linhei, 1, 0.2, "wgprp"..i, roadnumber)
local ename = ent.type
form = form .. "item_image["..i..","..linhei..";1,1;"..ename.."]"
form = form .. "item_image["..i..","..(linhei+0.5)..";1,1;"..ename.."]"
if i~=1 then
if checklock(pname, ent.owner, pre_own, ent.whitelist, pre_wl) then
form = form .. "image_button["..(i-0.5)..","..(linhei+1)..";1,1;advtrains_discouple.png;dcpl_"..i..";]"
form = form .. "image_button["..(i-0.5)..","..(linhei+1.5)..";1,1;advtrains_discouple.png;dcpl_"..i..";]"
end
end
if i == data.pos_in_trainparts then
form = form .. "box["..(i-0.1)..","..(linhei-0.1)..";1,1;green]"
form = form .. "box["..(i-0.1)..","..(linhei+0.4)..";1,1;green]"
end
pre_own = ent.owner
pre_wl = ent.whitelist
@ -916,6 +919,13 @@ function wagon:handle_bordcom_fields(pname, formname, fields)
for i, tpid in ipairs(train.trainparts) do
if fields["dcpl_"..i] then
advtrains.safe_decouple_wagon(tpid, pname)
elseif fields["wgprp"..i] then
for _,wagon in pairs(minetest.luaentities) do
if wagon.is_wagon and wagon.initialized and wagon.id==tpid then
wagon:show_wagon_properties(pname)
return
end
end
end
end
--check cpl_eid_front and _back of train
@ -1000,6 +1010,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
if fields.whitelist then
data.whitelist = fields.whitelist
end
if fields.roadnumber then
data.roadnumber = fields.roadnumber
end
end
end
uid=string.match(formname, "^advtrains_bordcom_(.+)$")
@ -1010,6 +1023,19 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
end
end
end
uid=string.match(formname, "^advtrains_inv_(.+)$")
if uid then
local pname=player:get_player_name()
local data = advtrains.wagons[uid]
if fields.prop and data.owner==pname then
for _,wagon in pairs(minetest.luaentities) do
if wagon.is_wagon and wagon.initialized and wagon.id==uid then
wagon:show_wagon_properties(pname)
--wagon:handle_bordcom_fields(player:get_player_name(), formname, fields)
end
end
end
end
end)
end)
function wagon:seating_from_key_helper(pname, fields, no)
@ -1026,12 +1052,15 @@ function wagon:seating_from_key_helper(pname, fields, no)
end
end
if fields.inv and self.has_inventory and self.get_inventory_formspec then
minetest.close_formspec(pname, "advtrains_seating_"..self.id)
minetest.show_formspec(player:get_player_name(), "advtrains_inv_"..self.id, self:get_inventory_formspec(player:get_player_name(), make_inv_name(self.id)))
end
if fields.prop and data.owner==pname then
minetest.close_formspec(pname, "advtrains_seating_"..self.id)
self:show_wagon_properties(pname)
end
if fields.bordcom and self.seat_groups[sgr].driving_ctrl_access and advtrains.check_driving_couple_protection(pname, data.owner, data.whitelist) then
minetest.close_formspec(pname, "advtrains_seating_"..self.id)
self:show_bordcom(pname)
end
if fields.dcwarn then
@ -1176,6 +1205,23 @@ function advtrains.get_wagon_prototype(data)
return wt, advtrains.wagon_prototypes[wt]
end
function advtrains.standard_inventory_formspec(self, pname, invname)
--[[minetest.chat_send_player(pname, string.format("self=%s, pname=%s, invname=%s", self, pname, invname))
for k,v in pairs(self) do
minetest.chat_send_player(pname, string.format("%s=%s", k,v))
end
minetest.chat_send_player(pname, string.format("***%s***", self.object:get_pos()))--]]
local data = advtrains.wagons[self.id]
local r = "size[8,11]"..
"list["..invname..";box;0,0;8,3;]"
if data.owner==pname then
r = r .. "button_exit[0,9;4,1;prop;"..attrans("Wagon properties").."]"
end
r = r .. "list[current_player;main;0,5;8,4;]"..
"listring[]"
return r
end
function advtrains.register_wagon(sysname_p, prototype, desc, inv_img, nincreative)
local sysname = sysname_p
if not string.match(sysname, ":") then

View File

@ -90,12 +90,7 @@ advtrains.register_wagon("wagon_tank", {
collisionbox = {-1.0,-0.5,-1.0, 1.0,2.5,1.0},
drops={"default:steelblock 4"},
has_inventory = true,
get_inventory_formspec = function(self, pname, invname)
return "size[8,11]"..
"list["..invname..";box;0,0;8,3;]"..
"list[current_player;main;0,5;8,4;]"..
"listring[]"
end,
get_inventory_formspec = advtrains.standard_inventory_formspec,
inventory_list_sizes = {
box=8*3,
},
@ -111,12 +106,7 @@ advtrains.register_wagon("wagon_wood", {
collisionbox = {-1.0,-0.5,-1.0, 1.0,2.5,1.0},
drops={"default:steelblock 4"},
has_inventory = true,
get_inventory_formspec = function(self, pname, invname)
return "size[8,11]"..
"list["..invname..";box;0,0;8,3;]"..
"list[current_player;main;0,5;8,4;]"..
"listring[]"
end,
get_inventory_formspec = advtrains.standard_inventory_formspec,
inventory_list_sizes = {
box=8*3,
},

View File

@ -216,12 +216,7 @@ advtrains.register_wagon("wagon_box", {
collisionbox = {-1.0,-0.5,-1.0, 1.0,2.5,1.0},
drops={"default:steelblock 1"},
has_inventory = true,
get_inventory_formspec = function(self, pname, invname)
return "size[8,11]"..
"list["..invname..";box;0,0;8,3;]"..
"list[current_player;main;0,5;8,4;]"..
"listring[]"
end,
get_inventory_formspec = advtrains.standard_inventory_formspec,
inventory_list_sizes = {
box=8*3,
},