[mp-advtrains] Update to Git commit 74c8784 & remove patch:

https://github.com/orwell96/advtrains/tree/74c8784
master
AntumDeluge 2017-05-27 15:39:42 -07:00
parent 5d4c99e558
commit a43e66573f
12 changed files with 156 additions and 109 deletions

View File

@ -138,7 +138,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m
* shields
* technic_armor
* wieldview
* [advtrains][] ([LGPL][lic.lgpl2.1] / [CC BY-NC-SA][lic.ccbyncsa3.0]) -- version: [da884af Git][ver.advtrains] *2017-05-12* ([patched][patch.advtrains]) **UPDATE**
* [advtrains][] ([LGPL][lic.lgpl2.1] / [CC BY-NC-SA][lic.ccbyncsa3.0]) -- version: [74c8784 Git][ver.advtrains] *2017-05-22*
* [animalmaterials][animals_modpack] (part of animals_modpack) ([CC0][lic.cc0] / [CC BY-SA][lic.ccbysa3.0]) -- version: [0.1.3 (d952d27 Git)][ver.animalmaterials] *2014-09-10*
* mp-animalmaterials/
* animal_resources
@ -435,7 +435,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m
[ver.3d_armor]: https://github.com/stujones11/minetest-3d_armor/tree/793c748
[ver.adv_spawning]: https://github.com/sapier/adv_spawning/tree/ec41aa9
[ver.advtrains]: https://github.com/orwell96/advtrains/tree/da884af
[ver.advtrains]: https://github.com/orwell96/advtrains/tree/74c8784
[ver.airtanks]: https://github.com/minetest-mods/airtanks/tree/fc01ffb
[ver.animalmaterials]: https://github.com/sapier/animalmaterials/tree/d952d27
[ver.animals_modpack]: https://github.com/sapier/animals_modpack/tree/b9d0172

View File

@ -1,2 +1,3 @@
default
mesecons?
mesecons?
digtron?

View File

@ -0,0 +1,25 @@
--digtron.lua
--make tracks placeable by digtrons by overriding the place function.
local old_item_place = digtron.item_place_node
digtron.item_place_node = function(itemstack, placer, place_to, param2)
if minetest.get_item_group(itemstack:get_name(), "advtrains_trackplacer")>0 then
return advtrains.pcall(function()
local def = minetest.registered_items[itemstack:get_name()]
if not def then return itemstack, false end
local pointed_thing = {}
pointed_thing.type = "node"
pointed_thing.above = {x=place_to.x, y=place_to.y, z=place_to.z}
pointed_thing.under = {x=place_to.x, y=place_to.y - 1, z=place_to.z}
--call the on_rightclick callback
local success
itemstack, success = def.on_place(itemstack, placer, pointed_thing)
return itemstack, success
end)
else
return old_item_place(itemstack, placer, place_to, param2)
end
end

View File

@ -170,12 +170,6 @@ function advtrains.minAngleDiffRad(r1, r2)
return try3
end
end
function advtrains.dumppath(path)
if not path then atprint("dumppath: no path(nil)") return end
local min=advtrains.minN(path)
local max=advtrains.maxN(path)
for i=min, max do atprint("["..i.."] "..(path[i] and minetest.pos_to_string(path[i]) or "nil")) end
end
function advtrains.merge_tables(a, ...)
local new={}

View File

@ -43,7 +43,8 @@ advtrains.modpath = minetest.get_modpath("advtrains")
function advtrains.print_concat_table(a)
local str=""
local stra=""
for i=1,10 do
local t
for i=1,20 do
t=a[i]
if t==nil then
stra=stra.."nil "
@ -70,23 +71,20 @@ function advtrains.print_concat_table(a)
end
return str
end
atprint=function() end
if minetest.setting_getbool("advtrains_debug") then
atprint=function(t, ...)
local context=advtrains.atprint_context_tid
if not context then context="" end
--if context~="4527" then return end
local text=advtrains.print_concat_table({t, ...})
minetest.log("action", "[advtrains]"..context..">"..text)
minetest.chat_send_all("[advtrains]"..context..">"..text)
end
atlog=function(t, ...)
local context=advtrains.atprint_context_tid
if not context then return end
local text=advtrains.print_concat_table({t, ...})
minetest.log("action", text)
end
atwarn=function(t, ...)
local text=advtrains.print_concat_table({t, ...})
minetest.log("warning", "[advtrains]"..text)
minetest.chat_send_all("[advtrains] -!- "..text)
end
sid=function(id) return string.sub(id, -4) end
sid=function(id) return string.sub(id, -6) end
dofile(advtrains.modpath.."/helpers.lua");
--dofile(advtrains.modpath.."/debugitems.lua");
@ -106,6 +104,7 @@ advtrains.meseconrules =
{x=0, y=-1, z=-1},
{x=0, y=-2, z=0}}
dofile(advtrains.modpath.."/trainlogic.lua")
dofile(advtrains.modpath.."/trainhud.lua")
dofile(advtrains.modpath.."/trackplacer.lua")
@ -122,6 +121,9 @@ dofile(advtrains.modpath.."/misc_nodes.lua")
dofile(advtrains.modpath.."/crafting.lua")
dofile(advtrains.modpath.."/craft_items.lua")
if digtron then
dofile(advtrains.modpath.."/digtron.lua")
end
--load/save
@ -309,7 +311,7 @@ function advtrains.load()
end
init_load=true
no_action=false
atprint("[load_all]Loaded advtrains save files")
atlog("[load_all]Loaded advtrains save files")
end
--## MAIN SAVE ROUTINE ##
@ -324,6 +326,6 @@ function advtrains.save()
if atlatc then
atlatc.save()
end
atprint("[save_all]Saved advtrains save files")
atlog("[save_all]Saved advtrains save files")
end
minetest.register_on_shutdown(advtrains.save)

View File

@ -52,40 +52,38 @@ local function ndbset(x,y,z,v)
end
local path=minetest.get_worldpath().."/advtrains_ndb2"
--load
--nodeids get loaded by advtrains init.lua and passed here
function ndb.load_data(data)
ndb_nodeids = data and data.nodeids or {}
end
local path=minetest.get_worldpath().."/advtrains_ndb2"
local file, err = io.open(path, "r")
if not file then
atprint("load ndb failed: ", err or "Unknown Error")
else
local cnt=0
local hst_z=file:read(2)
local hst_y=file:read(2)
local hst_x=file:read(2)
local cid=file:read(2)
while hst_z and hst_y and hst_x and cid and #hst_z==2 and #hst_y==2 and #hst_x==2 and #cid==2 do
ndbset(bytes_to_int(hst_x), bytes_to_int(hst_y), bytes_to_int(hst_z), bytes_to_int(cid))
cnt=cnt+1
hst_z=file:read(2)
hst_y=file:read(2)
hst_x=file:read(2)
cid=file:read(2)
local file, err = io.open(path, "r")
if not file then
atwarn("Couldn't load the node database: ", err or "Unknown Error")
else
local cnt=0
local hst_z=file:read(2)
local hst_y=file:read(2)
local hst_x=file:read(2)
local cid=file:read(2)
while hst_z and hst_y and hst_x and cid and #hst_z==2 and #hst_y==2 and #hst_x==2 and #cid==2 do
ndbset(bytes_to_int(hst_x), bytes_to_int(hst_y), bytes_to_int(hst_z), bytes_to_int(cid))
cnt=cnt+1
hst_z=file:read(2)
hst_y=file:read(2)
hst_x=file:read(2)
cid=file:read(2)
end
atlog("nodedb: read", cnt, "nodes.")
file:close()
end
atprint("nodedb: read", cnt, "nodes.")
file:close()
end
--save
function ndb.save_data()
local file, err = io.open(path, "w")
if not file then
atprint("save ndb failed: ", err or "Unknown Error")
atwarn("Couldn't save the node database: ", err or "Unknown Error")
else
for y, ny in pairs(ndb_nodes) do
for x, nx in pairs(ny) do
@ -197,57 +195,45 @@ function advtrains.get_rail_info_at(pos, drives_on)
return true, conn1, conn2, rely1, rely2, railheight
end
ndb.run_lbm = function(pos, nodep)
return advtrains.pcall(function()
local node=nodep
if not node then
node=minetest.get_node_or_nil(pos)
if not node then
--this is defintely not loaded
return nil
ndb.run_lbm = function(pos, node)
return advtrains.pcall(function()
local cid=ndbget(pos.x, pos.y, pos.z)
if cid then
--if in database, detect changes and apply.
local nodeid = ndb_nodeids[u14b(cid)]
local param2 = l2b(cid)
if not nodeid then
--something went wrong
atwarn("Node Database corruption, couldn't determine node to set at", pos)
ndb.update(pos, node)
else
if (nodeid~=node.name or param2~=node.param2) then
atprint("nodedb: lbm replaced", pos, "with nodeid", nodeid, "param2", param2, "cid is", cid)
minetest.swap_node(pos, {name=nodeid, param2 = param2})
local ndef=minetest.registered_nodes[nodeid]
if ndef and ndef.on_updated_from_nodedb then
ndef.on_updated_from_nodedb(pos, node)
end
return true
end
local cid=ndbget(pos.x, pos.y, pos.z)
if cid then
--if in database, detect changes and apply.
local nodeid = ndb_nodeids[u14b(cid)]
local param2 = l2b(cid)
if not nodeid then
--something went wrong
atprint("nodedb: lbm nid not found", pos, "with nid", u14b(cid), "param2", param2, "cid is", cid)
ndb.update(pos, node)
else
if (nodeid~=node.name or param2~=node.param2) then
local ori_ndef=minetest.registered_nodes[node.name]
if ori_ndef and ori_ndef.groups.save_in_nodedb then --check if this node has been worldedited, and don't replace then
atprint("nodedb: lbm replaced", pos, "with nodeid", nodeid, "param2", param2, "cid is", cid)
minetest.swap_node(pos, {name=nodeid, param2 = param2})
local ndef=minetest.registered_nodes[nodeid]
if ndef and ndef.on_updated_from_nodedb then
ndef.on_updated_from_nodedb(pos, node)
end
return true
else
ndb.clear(pos)
end
end
end
else
--if not in database, take it.
atprint("nodedb: ", pos, "not in database")
ndb.update(pos, node)
end
return false
end)
end
end
else
--if not in database, take it.
atlog("Node Database:", pos, "was not found in the database, have you used worldedit?")
ndb.update(pos, node)
end
return false
end)
end
minetest.register_abm({
minetest.register_lbm({
name = "advtrains:nodedb_on_load_update",
nodenames = {"group:save_in_nodedb"},
run_at_every_load = true,
run_on_every_load = true,
action = ndb.run_lbm,
interval=10,
interval=30,
chance=1,
})
@ -258,8 +244,20 @@ ndb.restore_all = function()
for y, ny in pairs(ndb_nodes) do
for x, nx in pairs(ny) do
for z, _ in pairs(nx) do
if ndb.run_lbm({x=x, y=y, z=z}) then
cnt=cnt+1
local pos={x=x, y=y, z=z}
local node=minetest.get_node_or_nil(pos)
if node then
local ori_ndef=minetest.registered_nodes[node.name]
local ndbnode=ndb.get_node(pos)
if ori_ndef and ori_ndef.groups.save_in_nodedb then --check if this node has been worldedited, and don't replace then
if (ndbnode.name~=node.name or ndbnode.param2~=node.param2) then
minetest.swap_node(pos, ndbnode)
atwarn("Replaced",node.name,"@",pos,"with",ndbnode.name)
end
else
ndb.clear(pos)
atwarn("Found ghost node (former",ndbnode.name,") @",pos,"deleting")
end
end
end
end
@ -283,3 +281,22 @@ end
advtrains.ndb=ndb
local ptime=0
minetest.register_chatcommand("at_restore_ndb",
{
params = "", -- Short parameter description
description = "Write node db back to map", -- Full description
privs = {train_operator=true, worldedit=true}, -- Require the "privs" privilege to run
func = function(name, param)
return advtrains.pcall(function()
if not minetest.check_player_privs(name, {server=true}) and os.time() < ptime+30 then
return false, "Please wait at least 30s from the previous execution of /at_restore_ndb!"
end
ndb.restore_all()
ptime=os.time()
return true
end)
end,
})

View File

@ -1,3 +0,0 @@
# Whether to print debug information on advtrains to chat and debug.txt
# Ob Debuginformationen in die Chatkonsole und debug.txt ausgegeben werden sollen
advtrains_debug (Print advtrains debug messages) bool false

View File

@ -27,7 +27,6 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red",
inventory_image="advtrains_retrosignal_inv.png",
drop="advtrains:retrosignal_off",
description=attrans("Lampless Signal (@1)", attrans(r..rotation)),
on_rightclick=switchfunc,
sunlight_propagates=true,
groups = {
cracky=3,
@ -62,7 +61,6 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red",
inventory_image="advtrains_signal_inv.png",
drop="advtrains:signal_off",
description=attrans("Signal (@1)", attrans(r..rotation)),
on_rightclick=switchfunc,
groups = {
cracky=3,
not_blocking_trains=1,

View File

@ -185,19 +185,19 @@ function tp.register_track_placer(nnprefix, imgprefix, dispname)
description = dispname,
inventory_image = imgprefix.."_placer.png",
wield_image = imgprefix.."_placer.png",
groups={},
groups={advtrains_trackplacer=1},
on_place = function(itemstack, placer, pointed_thing)
return advtrains.pcall(function()
local name = placer:get_player_name()
if not name then
return itemstack
return itemstack, false
end
if pointed_thing.type=="node" then
local pos=pointed_thing.above
local upos=vector.subtract(pointed_thing.above, {x=0, y=1, z=0})
if advtrains.is_protected(pos,name) then
minetest.record_protection_violation(pos, name)
return itemstack
return itemstack, false
end
if minetest.registered_nodes[minetest.get_node(pos).name] and minetest.registered_nodes[minetest.get_node(pos).name].buildable_to
and minetest.registered_nodes[minetest.get_node(upos).name] and minetest.registered_nodes[minetest.get_node(upos).name].walkable then
@ -207,7 +207,7 @@ function tp.register_track_placer(nnprefix, imgprefix, dispname)
end
end
end
return itemstack
return itemstack, true
end)
end,
})

View File

@ -154,7 +154,7 @@ ap.t_30deg_straightonly={
},
slopenodes={},
rotation={"", "_30", "_45", "_60"},
increativeinv={st},
increativeinv={"st"},
}
ap.t_30deg_straightonly_noplacer={
regstep=1,
@ -179,7 +179,7 @@ ap.t_30deg_straightonly_noplacer={
},
slopenodes={},
rotation={"", "_30", "_45", "_60"},
increativeinv={st},
increativeinv={"st"},
}
ap.t_45deg={
regstep=2,
@ -310,7 +310,7 @@ function advtrains.register_tracks(tracktype, def, preset)
},
mesecons=mesecontbl,
luaautomation=luaautomation,
drop = increativeinv and def.nodename_prefix.."_"..suffix..rotation or (drop_slope and def.nodename_prefix.."_slopeplacer" or def.nodename_prefix.."_placer"),
drop = (drop_slope and def.nodename_prefix.."_slopeplacer" or def.nodename_prefix.."_placer"),
}
end
local function cycle_conns(conns, rotid)

View File

@ -193,6 +193,9 @@ function advtrains.train_step_a(id, train, dtime)
train.path_dist[-1]=vector.distance(train.last_pos, train.last_pos_prev)
train.path_extent_min=-1
train.path_extent_max=0
train.min_index_on_track=-1
train.max_index_on_track=0
--[[
Bugfix for trains randomly ignoring ATC rails:
- Paths have been invalidated. 1 gets executed and ensures an initial path
@ -355,7 +358,7 @@ function advtrains.train_step_a(id, train, dtime)
local path_pregen_keep=20
local offtrack_keep=4
local gen_front_keep= path_pregen_keep
local gen_back_keep= - train.trainlen - path_pregen_keep
local gen_back_keep= math.floor(- train.trainlen - path_pregen_keep)
local delete_min=math.min(train.max_index_on_track - offtrack_keep, math.floor(train.index)+gen_back_keep)
local delete_max=math.max(train.min_index_on_track + offtrack_keep, math.floor(train.index)+gen_front_keep)
@ -482,11 +485,14 @@ function advtrains.pathpredict(id, train, regular)
local maxn=train.path_extent_max or 0
while maxn < gen_front do--pregenerate
atprint("maxn conway for ",maxn,train.path[maxn],maxn-1,train.path[maxn-1])
local conway=advtrains.conway(train.path[maxn], train.path[maxn-1], train.drives_on)
local conway
if train.max_index_on_track == maxn then
atprint("maxn conway for ",maxn,train.path[maxn],maxn-1,train.path[maxn-1])
conway=advtrains.conway(train.path[maxn], train.path[maxn-1], train.drives_on)
end
if conway then
train.path[maxn+1]=conway
train.max_index_on_track=maxn
train.max_index_on_track=maxn+1
else
--do as if nothing has happened and preceed with path
--but do not update max_index_on_track
@ -500,11 +506,14 @@ function advtrains.pathpredict(id, train, regular)
local minn=train.path_extent_min or -1
while minn > gen_back do
atprint("minn conway for ",minn,train.path[minn],minn+1,train.path[minn+1])
local conway=advtrains.conway(train.path[minn], train.path[minn+1], train.drives_on)
local conway
if train.min_index_on_track == minn then
atprint("minn conway for ",minn,train.path[minn],minn+1,train.path[minn+1])
conway=advtrains.conway(train.path[minn], train.path[minn+1], train.drives_on)
end
if conway then
train.path[minn-1]=conway
train.min_index_on_track=minn
train.min_index_on_track=minn-1
else
--do as if nothing has happened and preceed with path
--but do not update min_index_on_track

View File

@ -17,6 +17,10 @@ function r.fire_event(pos, evtdata)
local arrowconn = railtbl.arrowconn
if not arrowconn then
atwarn("LuaAutomation ATC interface rail at",ph,": Incomplete Data! Please visit position and click 'Save'!")
return
end
--prepare ingame API for ATC. Regenerate each time since pos needs to be known
--If no train, then return false.