aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authororwell96 <orwell@bleipb.de>2018-10-17 21:02:43 +0200
committerorwell96 <orwell@bleipb.de>2018-10-17 21:06:13 +0200
commitb03e402c718e8bc39d8aa57c5fe67c5722708c37 (patch)
treed61f49db100a3003d5280dff4309ac368123e0e2
parenta71041b66b0518625083560a4acb7f38bbc18148 (diff)
downloadadvtrains-b03e402c718e8bc39d8aa57c5fe67c5722708c37.tar.gz
advtrains-b03e402c718e8bc39d8aa57c5fe67c5722708c37.tar.bz2
advtrains-b03e402c718e8bc39d8aa57c5fe67c5722708c37.zip
Fix node database ATC rail bug
After successfully registering newly-placed ATC rails in the nodedb, the rail's after_place_node() callback (local apn_func()) immediately cleared it again by passing a "node" object that was actually a player object and thus had no "name" or "param2" to ndb.update(), which it handled how it should not in this situation. Since those ndb.update calls were unnecessary anyways, I removed them completely.
-rw-r--r--advtrains/atc.lua4
-rw-r--r--advtrains/nodedb.lua7
-rw-r--r--advtrains_luaautomation/active_common.lua1
3 files changed, 7 insertions, 5 deletions
diff --git a/advtrains/atc.lua b/advtrains/atc.lua
index 10321d9..465a0ec 100644
--- a/advtrains/atc.lua
+++ b/advtrains/atc.lua
@@ -71,8 +71,8 @@ end
--nodes
local idxtrans={static=1, mesecon=2, digiline=3}
-local apn_func=function(pos, node)
- advtrains.ndb.update(pos, node)
+local apn_func=function(pos)
+ -- FIX for long-persisting ndb bug: there's no node in parameter 2 of this function!
local meta=minetest.get_meta(pos)
if meta then
meta:set_string("infotext", attrans("ATC controller, unconfigured."))
diff --git a/advtrains/nodedb.lua b/advtrains/nodedb.lua
index 592e730..ad58b37 100644
--- a/advtrains/nodedb.lua
+++ b/advtrains/nodedb.lua
@@ -151,10 +151,13 @@ function ndb.update(pos, pnode)
nid=#ndb_nodeids+1
ndb_nodeids[nid]=node.name
end
- ndbset(pos.x, pos.y, pos.z, (nid * 4) + (l2b(node.param2 or 0)) )
- --atprint("nodedb: updating node", pos, "stored nid",nid,"assigned",ndb_nodeids[nid],"resulting cid",ndb_nodes[hash])
+ local resid = (nid * 4) + (l2b(node.param2 or 0))
+ ndbset(pos.x, pos.y, pos.z, resid )
+ --atdebug("nodedb: updating node", pos, "stored nid",nid,"assigned",ndb_nodeids[nid],"resulting cid",resid)
+ advtrains.invalidate_all_paths(pos)
else
--at this position there is no longer a node that needs to be tracked.
+ --atdebug("nodedb: updating node", pos, "cleared")
ndbset(pos.x, pos.y, pos.z, nil)
end
end
diff --git a/advtrains_luaautomation/active_common.lua b/advtrains_luaautomation/active_common.lua
index 62dc83c..d996dbf 100644
--- a/advtrains_luaautomation/active_common.lua
+++ b/advtrains_luaautomation/active_common.lua
@@ -12,7 +12,6 @@ function ac.save()
end
function ac.after_place_node(pos, player)
- advtrains.ndb.update(pos)
local meta=minetest.get_meta(pos)
meta:set_string("formspec", ac.getform(pos, meta))
meta:set_string("infotext", "LuaAutomation component, unconfigured.")