fixed lua errors and code mistakes

master
orwell96 2016-05-29 22:02:51 +02:00
parent 6e34cb1955
commit c71b020927
5 changed files with 34 additions and 11 deletions

View File

@ -17,3 +17,5 @@ dofile(advtrains.modpath.."/trainhud.lua")
dofile(advtrains.modpath.."/trackplacer.lua")
dofile(advtrains.modpath.."/tracks.lua")
dofile(advtrains.modpath.."/wagons.lua")
dofile(advtrains.modpath.."/pseudoload.lua");

View File

@ -9,6 +9,9 @@ advtrains.trackdb={}
--[] may be missing if 0,0,0
--load initially
--delayed since all traintypes need to be registered
minetest.after(0, function()
for tt, _ in pairs(advtrains.all_traintypes) do
local pl_fpath=minetest.get_worldpath().."/advtrains_trackdb_"..tt
advtrains.trackdb[tt]={}
@ -59,6 +62,8 @@ for tt, _ in pairs(advtrains.all_traintypes) do
end
end
--end minetest.after
end)
function advtrains.save_trackdb()
for tt, _ in pairs(advtrains.all_traintypes) do
@ -99,8 +104,8 @@ function advtrains.get_rail_info_at(pos, traintype)
local node=minetest.get_node_or_nil(pos)
if not node then
--try raildb
local rdp=vector.round(rdp)
local dbe=advtrains.trackdb[traintype][rdp.y][rdp.x][rdp.z]
local rdp=vector.round(pos)
local dbe=(advtrains.trackdb[traintype] and advtrains.trackdb[traintype][rdp.y] and advtrains.trackdb[traintype][rdp.y][rdp.x] and advtrains.trackdb[traintype][rdp.y][rdp.x][rdp.z])
if dbe then
return true, dbe.conn1, dbe.conn2, dbe.rely1 or 0, dbe.rely2 or 0, dbe.railheight or 0
else
@ -114,9 +119,12 @@ function advtrains.get_rail_info_at(pos, traintype)
local conn1, conn2, rely1, rely2, railheight=advtrains.get_track_connections(node.name, node.param2)
--already in trackdb?
local rdp=vector.round(rdp)
if not advtrains.trackdb[traintype][rdp.y][rdp.x][rdp.z] then--TODO is this necessary?
advtrains.trackdb[rdp.y][rdp.x][rdp.z]={
local rdp=vector.round(pos)
if not (advtrains.trackdb[traintype] and advtrains.trackdb[traintype][rdp.y] and advtrains.trackdb[traintype][rdp.y][rdp.x] and advtrains.trackdb[traintype][rdp.y][rdp.x][rdp.z]) then--TODO is this necessary?
if not advtrains.trackdb[traintype] then advtrains.trackdb[traintype]={} end
if not advtrains.trackdb[traintype][rdp.y] then advtrains.trackdb[traintype][rdp.y]={} end
if not advtrains.trackdb[traintype][rdp.y][rdp.x] then advtrains.trackdb[traintype][rdp.y][rdp.x]={} end
advtrains.trackdb[traintype][rdp.y][rdp.x][rdp.z]={
conn1=conn1, conn2=conn2,
rely1=rely1, rely2=rely2,
railheight=railheight
@ -128,6 +136,9 @@ end
function advtrains.reset_trackdb_position(pos)
local rdp=vector.round(pos)
for tt, _ in pairs(advtrains.all_traintypes) do
if not advtrains.trackdb[tt] then advtrains.trackdb[tt]={} end
if not advtrains.trackdb[tt][rdp.y] then advtrains.trackdb[tt][rdp.y]={} end
if not advtrains.trackdb[tt][rdp.y][rdp.x] then advtrains.trackdb[tt][rdp.y][rdp.x]={} end
advtrains.trackdb[tt][rdp.y][rdp.x][rdp.z]=nil
advtrains.get_rail_info_at(pos, tt)--to restore it.
end

View File

@ -74,10 +74,10 @@ function advtrains.register_tracks(tracktype, def)
after_dig_node=function(pos)
advtrains.invalidate_all_paths()
advtrains.reset_trackdb_position(pos)
end
end,
after_place_node=function(pos)
advtrains.reset_trackdb_position(pos)
end
end,
}
minetest.register_node(def.nodename_prefix.."_st", advtrains.merge_tables(common_def, make_overdef("st", 0, 4), def.straight or {}))
minetest.register_node(def.nodename_prefix.."_st_45", advtrains.merge_tables(common_def, make_overdef("st_45", 1, 5), def.straight45 or {}))

View File

@ -18,6 +18,7 @@ end
advtrains.trains={}
advtrains.wagon_save={}
--load initially
advtrains.fpath=minetest.get_worldpath().."/advtrains"
@ -169,7 +170,7 @@ function advtrains.train_step(id, train, dtime)
end
--check for any trainpart entities if they have been unloaded. do this only if both front and end positions are loaded, to ensure train entities will be placed inside loaded area, and only every second.
train.check_trainpartload=train.check_trainpartload-dtime
train.check_trainpartload=(train.check_trainpartload or 0)-dtime
if train.check_trainpartload<=0 and posfront and posback and minetest.get_node_or_nil(posfront) and minetest.get_node_or_nil(posback) then
--it is better to iterate luaentites only once
local found_uids={}
@ -177,7 +178,7 @@ function advtrains.train_step(id, train, dtime)
if wagon.is_wagon and wagon.initialized and wagon.train_id==id then
if found_uids[wagon.unique_id] then
--duplicate found, delete it
wagon.object and wagon.object:remove()
if wagon.object then wagon.object:remove() end
else
found_uids[wagon.unique_id]=true
end
@ -189,13 +190,15 @@ function advtrains.train_step(id, train, dtime)
found_uids[w_id]=nil
elseif advtrains.wagon_save[w_id] then
--spawn a new and initialize it with the properties from wagon_save
local le=minetest.env:add_entity(posfront, "advtrains:"..sysname):get_luaentity()
local le=minetest.env:add_entity(posfront, advtrains.wagon_save[w_id].name):get_luaentity()
for k,v in pairs(advtrains.wagon_save[w_id]) do
le[k]=v
end
advtrains.wagon_save[w_id].name=nil
advtrains.wagon_save[w_id].object=nil
else
--what the hell...
local le=minetest.env:add_entity(posfront, "advtrains:"..sysname):get_luaentity()
local le=minetest.env:add_entity(posfront, advtrains.wagon_save[w_id].name):get_luaentity()
le.unique_id=w_id
le.train_id=id
le.pos_in_trainparts=pit

View File

@ -72,6 +72,13 @@ function wagon:on_activate(staticdata, dtime_s)
--does this object already have an ID?
if not self.unique_id then
self.unique_id=os.time()..os.clock()--should be random enough.
else
for _,wagon in pairs(minetest.luaentities) do
if wagon.is_wagon and wagon.initialized and wagon.unique_id==self.unique_id then--i am a duplicate!
self.object:remove()
return
end
end
end
--is my train still here
if not self.train_id or not self:train() then