aboutsummaryrefslogtreecommitdiff
path: root/advtrains/couple.lua
diff options
context:
space:
mode:
authororwell96 <orwell@bleipb.de>2018-11-10 12:12:52 +0100
committerorwell96 <orwell@bleipb.de>2018-11-10 12:12:52 +0100
commitb872bdae82b41398d2322ee848ade2c1cc652ce0 (patch)
treed3f1cc5dc82086396df668328865614154dc4e1e /advtrains/couple.lua
parent88aee2aecb3cf070f601b3e046e66eea48f0def0 (diff)
downloadadvtrains-b872bdae82b41398d2322ee848ade2c1cc652ce0.tar.gz
advtrains-b872bdae82b41398d2322ee848ade2c1cc652ce0.tar.bz2
advtrains-b872bdae82b41398d2322ee848ade2c1cc652ce0.zip
Remove "couple locks" and apply protection to the actual coupling process, and fix permissions on that
Diffstat (limited to 'advtrains/couple.lua')
-rw-r--r--advtrains/couple.lua59
1 files changed, 4 insertions, 55 deletions
diff --git a/advtrains/couple.lua b/advtrains/couple.lua
index e092696..1b213c2 100644
--- a/advtrains/couple.lua
+++ b/advtrains/couple.lua
@@ -65,7 +65,7 @@ minetest.register_entity("advtrains:discouple", {
-- advtrains:couple
-- Couple entity
local function lockmarker(obj)
- minetest.spawn_entity(obj:get_pos(), "advtrains.lockmarker")
+ minetest.add_entity(obj:get_pos(), "advtrains:lockmarker")
obj:remove()
end
@@ -96,63 +96,12 @@ minetest.register_entity("advtrains:couple", {
local pname=clicker
if type(clicker)~="string" then pname=clicker:get_player_name() end
- if not minetest.check_player_privs(pname, "train_operator") then return end
- local train1=advtrains.trains[self.train_id_1]
- local train2=advtrains.trains[self.train_id_2]
- if not advtrains.train_ensure_init(self.train_id_1, train1) then
- atwarn("Train",self.train_id_1,"is not initialized! Operation aborted!")
- return
- end
- if not advtrains.train_ensure_init(self.train_id_2, train2) then
- atwarn("Train",self.train_id_2,"is not initialized! Operation aborted!")
- return
- end
-
- local id1, id2=self.train_id_1, self.train_id_2
- local bp1, bp2 = self.t1_is_front, self.t2_is_front
- if bp1 then
- if train1.couple_lock_front then
- lockmarker(self.object)
- return
- end
- if bp2 then
- if train2.couple_lock_front then
- lockmarker(self.object)
- return
- end
- advtrains.invert_train(id1)
- advtrains.do_connect_trains(id1, id2, clicker)
- else
- if train2.couple_lock_back then
- lockmarker(self.object)
- return
- end
- advtrains.do_connect_trains(id2, id1, clicker)
- end
+ if advtrains.safe_couple_trains(self.train_id_1, self.train_id_2, self.t1_is_front, self.t2_is_front, pname) then
+ self.object:remove()
else
- if train1.couple_lock_back then
- lockmarker(self.object)
- return
- end
- if bp2 then
- if train2.couple_lock_front then
- lockmarker(self.object)
- return
- end
- advtrains.do_connect_trains(id1, id2, clicker)
- else
- if train2.couple_lock_back then
- lockmarker(self.object)
- return
- end
- advtrains.invert_train(id2)
- advtrains.do_connect_trains(id1, id2, clicker)
- end
+ lockmarker(self.object)
end
-
- atprint("Coupled trains", id1, id2)
- self.object:remove()
end)
end,
on_step=function(self, dtime)