summaryrefslogtreecommitdiff
path: root/advtrains_train_subway
diff options
context:
space:
mode:
Diffstat (limited to 'advtrains_train_subway')
-rw-r--r--advtrains_train_subway/init.lua53
1 files changed, 25 insertions, 28 deletions
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