From fab6cc11a88bcf99645fee36eb91e1a71314c5b4 Mon Sep 17 00:00:00 2001 From: orwell96 Date: Tue, 22 Jan 2019 12:42:55 +0100 Subject: [PATCH] Fix "subway train" item --- advtrains_train_subway/init.lua | 53 ++++++++++++++++----------------- 1 file 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