diff options
Diffstat (limited to 'advtrains/init.lua')
-rw-r--r-- | advtrains/init.lua | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/advtrains/init.lua b/advtrains/init.lua index 96352df..a7fbc3f 100644 --- a/advtrains/init.lua +++ b/advtrains/init.lua @@ -22,9 +22,6 @@ Copyright (C) 2016-2020 Moritz Blei (orwell96) and contributors local lot = os.clock() minetest.log("action", "[advtrains] Loading...") --- There is no need to support 0.4.x anymore given that the compatitability with it is already broken by 1bb1d825f46af3562554c12fba35a31b9f7973ff -attrans = minetest.get_translator ("advtrains") - --advtrains advtrains = {trains={}, player_to_train_mapping={}} @@ -48,6 +45,9 @@ advtrains.IGNORE_WORLD = false local NO_SAVE = false -- Do not save any data to advtrains save files +advtrains.TRAIN_MAX_WAGONS = 20 +-- Limit on the maximum number of wagons that may be in a train + -- ========================================================================== -- Use a global slowdown factor to slow down train movements. Now a setting @@ -178,7 +178,7 @@ function assertt(var, typ) end end -dofile(advtrains.modpath.."/helpers.lua"); +dofile(advtrains.modpath.."/helpers.lua") --dofile(advtrains.modpath.."/debugitems.lua"); advtrains.meseconrules = @@ -198,6 +198,12 @@ advtrains.meseconrules = advtrains.fpath=minetest.get_worldpath().."/advtrains" +advtrains.poconvert = dofile(advtrains.modpath.."/poconvert.lua") +advtrains.poconvert.from_flat("advtrains") +attrans = minetest.get_translator("advtrains") + +advtrains.speed = dofile(advtrains.modpath.."/speed.lua") + dofile(advtrains.modpath.."/path.lua") dofile(advtrains.modpath.."/trainlogic.lua") dofile(advtrains.modpath.."/trainhud.lua") @@ -227,7 +233,6 @@ end dofile(advtrains.modpath.."/lzb.lua") - --load/save -- backup variables, used if someone should accidentally delete a sub-mod @@ -467,8 +472,8 @@ advtrains.avt_save = function(remove_players_from_wagons) "trainparts", "recently_collided_with_env", "atc_brake_target", "atc_wait_finish", "atc_command", "atc_delay", "door_open", "text_outside", "text_inside", "line", "routingcode", - "il_sections", "speed_restriction", "is_shunt", - "points_split", "autocouple", "ars_disable", + "il_sections", "speed_restriction", "speed_restrictions_t", "is_shunt", + "points_split", "autocouple", "atc_wait_autocouple", "ars_disable", }) --then save it tmp_trains[id]=v @@ -569,11 +574,13 @@ advtrains.mainloop_runcnt=0 advtrains.global_slowdown = 1 local t = 0 +local within_mainstep = false minetest.register_globalstep(function(dtime_mt) if no_action then -- the advtrains globalstep is skipped by command. Return immediately return end + within_mainstep = true advtrains.mainloop_runcnt=advtrains.mainloop_runcnt+1 --atprint("Running the main loop, runcnt",advtrains.mainloop_runcnt) @@ -586,6 +593,7 @@ minetest.register_globalstep(function(dtime_mt) if GENERATE_ATRICIFIAL_LAG then dtime = HOW_MANY_LAG if os.clock()<t then + within_mainstep = false return end @@ -616,7 +624,7 @@ minetest.register_globalstep(function(dtime_mt) if advtrains.lines then advtrains.lines.step(dtime) end - + --trigger a save when necessary save_timer=save_timer-dtime if save_timer<=0 then @@ -626,6 +634,9 @@ minetest.register_globalstep(function(dtime_mt) save_timer = advtrains.SAVE_INTERVAL atprintbm("saving", t) end + + within_mainstep = false + end) --if something goes wrong in these functions, there is no help. no pcall here. @@ -678,7 +689,13 @@ function advtrains.save(remove_players_from_wagons) --TODO very simple yet hacky workaround for the "green signals" bug advtrains.invalidate_all_paths() end -minetest.register_on_shutdown(advtrains.save) +minetest.register_on_shutdown(function() + if within_mainstep then + atwarn("Crash during advtrains main step - skipping the shutdown save operation to not save inconsistent data!") + else + advtrains.save() + end +end) -- This chat command provides a solution to the problem known on the LinuxWorks server -- There are many players that joined a single time, got on a train and then left forever @@ -741,6 +758,16 @@ minetest.register_chatcommand("at_disable_step", end, }) +minetest.register_chatcommand("at_status", + { + params = "", + description = "Print advtrains status info", + privs = {train_operator = true}, + func = function(name, param) + return true, advtrains.print_concat_table({"Advtrains Status: no_action",no_action,"slowdown",advtrains.global_slowdown,"(log",math.log(advtrains.global_slowdown),")"}) + end, +}) + advtrains.is_no_action = function() return no_action end |