aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--advtrains/trainlogic.lua6
-rw-r--r--advtrains_train_subway/init.lua49
2 files changed, 51 insertions, 4 deletions
diff --git a/advtrains/trainlogic.lua b/advtrains/trainlogic.lua
index 228c3a0..ea7ea60 100644
--- a/advtrains/trainlogic.lua
+++ b/advtrains/trainlogic.lua
@@ -167,8 +167,7 @@ function advtrains.train_step_a(id, train, dtime)
atprint("last_pos", advtrains.round_vector_floor_y(train.last_pos), "not loaded and not in ndb, waiting")
return nil
elseif node_ok==false then
- atwarn("Unable to restore train ",id,": No rail at train's position")
- advtrains.trains[id]=nil
+ atprint("Unable to restore train ",id,": No rail at train's position")
return false
end
@@ -186,8 +185,7 @@ function advtrains.train_step_a(id, train, dtime)
atprint("last_pos_prev", advtrains.round_vector_floor_y(train.last_pos_prev), "not loaded and not in ndb, waiting")
return nil
elseif prevnode_ok==false then
- atwarn("Unable to restore train ",id,": No rail at train's position")
- advtrains.trains[id]=nil
+ atprint("Unable to restore train ",id,": No rail at train's position")
return false
end
diff --git a/advtrains_train_subway/init.lua b/advtrains_train_subway/init.lua
index 8864e92..5f48a3c 100644
--- a/advtrains_train_subway/init.lua
+++ b/advtrains_train_subway/init.lua
@@ -88,3 +88,52 @@ minetest.register_craft({
{'default:steelblock', 'default:steelblock', 'default:steelblock'},
},
})
+
+minetest.register_craftitem(":advtrains:subway_train", {
+ description = "Subway train, will drive forward when placed",
+ inventory_image = "advtrains_subway_wagon_inv.png",
+ wield_image = "advtrains_subway_wagon_inv.png",
+
+ on_place = function(itemstack, placer, pointed_thing)
+ return advtrains.pcall(function()
+ if not pointed_thing.type == "node" then
+ return
+ end
+
+
+ local node=minetest.get_node_or_nil(pointed_thing.under)
+ if not node then atprint("[advtrains]Ignore at placer position") return itemstack end
+ local nodename=node.name
+ if(not advtrains.is_track_and_drives_on(nodename, prototype.drives_on)) then
+ atprint("no track here, not placing.")
+ return itemstack
+ end
+ if not minetest.check_player_privs(placer, {train_place = true }) and minetest.is_protected(pointed_thing.under, placer:get_player_name()) then
+ minetest.record_protection_violation(pointed_thing.under, placer:get_player_name())
+ return
+ end
+ local conn1=advtrains.get_track_connections(node.name, node.param2)
+ local id=advtrains.create_new_train_at(pointed_thing.under, advtrains.dirCoordSet(pointed_thing.under, conn1))
+
+ for i=1,3 do
+ local ob=minetest.add_entity(pointed_thing.under, "advtrains:"..sysname)
+ if not ob then
+ atprint("couldn't add_entity, aborting")
+ end
+ local le=ob:get_luaentity()
+
+ le.owner=placer:get_player_name()
+
+ local wagon_uid=le:init_new_instance(id, {})
+
+ advtrains.add_wagon_to_train(le, id)
+ end
+ advtrains.trains[id].velocity=2
+ if not minetest.settings:get_bool("creative_mode") then
+ itemstack:take_item()
+ end
+ return itemstack
+
+ end)
+ end,
+ })