diff options
author | orwell96 <mono96.mml@gmail.com> | 2017-04-05 13:57:09 +0200 |
---|---|---|
committer | orwell96 <mono96.mml@gmail.com> | 2017-04-29 14:53:00 +0200 |
commit | f42b01c74bdc7e91d3def03125a0e24e6a3bb0d4 (patch) | |
tree | 58a7230e725eb15cf49eedb80254ae0fa88433d1 /advtrains/advtrains/wagons.lua | |
parent | 337db2a573ccaa1672e713855022e96106679803 (diff) | |
download | advtrains-f42b01c74bdc7e91d3def03125a0e24e6a3bb0d4.tar.gz advtrains-f42b01c74bdc7e91d3def03125a0e24e6a3bb0d4.tar.bz2 advtrains-f42b01c74bdc7e91d3def03125a0e24e6a3bb0d4.zip |
Add pcall wrapper to prevent server crashes when advtrains throws an error
Instead, read save files again and restore state before the crash
Rebased to latest commit
Diffstat (limited to 'advtrains/advtrains/wagons.lua')
-rw-r--r-- | advtrains/advtrains/wagons.lua | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/advtrains/advtrains/wagons.lua b/advtrains/advtrains/wagons.lua index 15a0ec7..2ceea86 100644 --- a/advtrains/advtrains/wagons.lua +++ b/advtrains/advtrains/wagons.lua @@ -50,6 +50,7 @@ function wagon:on_activate(sd_uid, dtime_s) end
function wagon:get_staticdata()
+return advtrains.pcall(function()
if not self:ensure_init() then return end
atprint("[wagon "..((self.unique_id and self.unique_id~="" and self.unique_id) or "no-id").."]: saving to wagon_save")
--serialize inventory, if it has one
@@ -63,6 +64,7 @@ function wagon:get_staticdata() advtrains.wagon_save[self.unique_id].name=nil
advtrains.wagon_save[self.unique_id].object=nil
return self.unique_id
+end)
end
--returns: uid of wagon
function wagon:init_new_instance(train_id, properties)
@@ -147,6 +149,7 @@ end -- Remove the wagon
function wagon:on_punch(puncher, time_from_last_punch, tool_capabilities, direction)
+return advtrains.pcall(function()
if not self:ensure_init() then return end
if not puncher or not puncher:is_player() then
return
@@ -177,6 +180,7 @@ function wagon:on_punch(puncher, time_from_last_punch, tool_capabilities, direct inv:add_item("main", item)
end
end
+end)
end
function wagon:destroy()
--some rules:
@@ -211,6 +215,8 @@ end function wagon:on_step(dtime)
+return advtrains.pcall(function()
+
if not self:ensure_init() then return end
local t=os.clock()
@@ -465,6 +471,7 @@ function wagon:on_step(dtime) self.old_acceleration_vector=accelerationvec
self.old_yaw=yaw
atprintbm("wagon step", t)
+end)
end
function advtrains.get_real_path_index(train, pit)
@@ -485,6 +492,8 @@ function advtrains.get_real_path_index(train, pit) end
function wagon:on_rightclick(clicker)
+return advtrains.pcall(function()
+
if not self:ensure_init() then return end
if not clicker or not clicker:is_player() then
return
@@ -564,6 +573,7 @@ function wagon:on_rightclick(clicker) self:show_get_on_form(pname)
end
end
+end)
end
function wagon:get_on(clicker, seatno)
@@ -708,6 +718,8 @@ function wagon:show_wagon_properties(pname) minetest.show_formspec(pname, "advtrains_prop_"..self.unique_id, form)
end
minetest.register_on_player_receive_fields(function(player, formname, fields)
+return advtrains.pcall(function()
+
local uid=string.match(formname, "^advtrains_geton_(.+)$")
if uid then
for _,wagon in pairs(minetest.luaentities) do
@@ -780,6 +792,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end
end
end)
+end)
function wagon:seating_from_key_helper(pname, fields, no)
local sgr=self.seats[no].group
for _,access in ipairs(self.seat_groups[sgr].access_to) do
@@ -841,6 +854,7 @@ function advtrains.register_wagon(sysname, prototype, desc, inv_img) stack_max = 1,
on_place = function(itemstack, placer, pointed_thing)
+ return advtrains.pcall(function()
if not pointed_thing.type == "node" then
return
end
@@ -876,6 +890,7 @@ function advtrains.register_wagon(sysname, prototype, desc, inv_img) end
return itemstack
+ end)
end,
})
end
|