From fab6cc11a88bcf99645fee36eb91e1a71314c5b4 Mon Sep 17 00:00:00 2001
From: orwell96 <orwell@bleipb.de>
Date: Tue, 22 Jan 2019 12:42:55 +0100
Subject: Fix "subway train" item

---
 advtrains_train_subway/init.lua | 53 +++++++++++++++++++----------------------
 1 file changed, 25 insertions(+), 28 deletions(-)

(limited to 'advtrains_train_subway')

diff --git a/advtrains_train_subway/init.lua b/advtrains_train_subway/init.lua
index 233f5dc..a63b5b5 100644
--- a/advtrains_train_subway/init.lua
+++ b/advtrains_train_subway/init.lua
@@ -142,44 +142,41 @@ minetest.register_craftitem(":advtrains:subway_train", {
 				if not pointed_thing.type == "node" then
 					return
 				end
-				
+				local pname = placer:get_player_name()
 
 				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, {default=true})) then
+					atprint("no track here, not placing.")
+					return itemstack
+				end
+				if not minetest.check_player_privs(placer, {train_operator = true }) then
+					minetest.chat_send_player(pname, "You don't have the train_operator privilege.")
+					return itemstack
+				end
+				if not minetest.check_player_privs(placer, {train_admin = true }) and minetest.is_protected(pointed_thing.under, placer:get_player_name()) then
+					return itemstack
+				end
+				local tconns=advtrains.get_track_connections(node.name, node.param2)
+				local yaw = placer:get_look_horizontal()
+				local plconnid = advtrains.yawToClosestConn(yaw, tconns)
 				
-				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())
+				local prevpos = advtrains.get_adjacent_rail(pointed_thing.under, tconns, plconnid, {default=true})
+				if not prevpos then
+					minetest.chat_send_player(pname, "The track you are trying to place the wagon on is not long enough!")
 					return
 				end
 				
-				local tconns=advtrains.get_track_connections(node.name, node.param2)
-				local yaw = placer:get_look_horizontal() + (math.pi/2)
-				local plconnid = advtrains.yawToClosestConn(yaw, tconns)
+				local wid1 = advtrains.create_wagon("advtrains:subway_wagon", pname)
+				local wid2 = advtrains.create_wagon("advtrains:subway_wagon", pname)
+				local wid3 = advtrains.create_wagon("advtrains:subway_wagon", pname)
 				
-				local prevpos = advtrains.get_adjacent_rail(pointed_thing.under, tconns, plconnid, advtrains.all_tracktypes)
-				if not prevpos then return end
-				local id=advtrains.create_new_train_at(pointed_thing.under, prevpos)
+				local id=advtrains.create_new_train_at(pointed_thing.under, plconnid, 0, {wid1, wid2, wid3})
 				
-				for i=1,3 do
-					local ob=minetest.add_entity(pointed_thing.under, "advtrains:subway_wagon")
-					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
-				minetest.after(1,function()
-				advtrains.trains[id].tarvelocity=2
-				advtrains.trains[id].velocity=2
-				advtrains.trains[id].movedir=1
-				end)
-				if not minetest.settings:get_bool("creative_mode") then
+				minetest.after(2, function() advtrains.trains[id].tarvelocity = 2 end)
+				
+				if not advtrains.is_creative(pname) then
 					itemstack:take_item()
 				end
 				return itemstack
-- 
cgit v1.2.3