Use dirty flag when saving data

master
rubenwardy 2018-11-20 23:38:07 +00:00
parent 03f6014fe8
commit 98a0f4bdd3
5 changed files with 25 additions and 2 deletions

View File

@ -12,6 +12,8 @@ end
function banking.add_account(acc)
assert(not banking._account_by_owner[acc.owner])
banking.dirty = true
banking._accounts[#banking._accounts + 1] = acc
banking._account_by_owner[acc.owner] = acc
return acc
@ -56,6 +58,8 @@ function banking.transfer(actor, from, to, amount, reason)
to_acc:deposit(amount, from_acc, reason)
banking.dirty = true
adt:post(actor, from_company and from_company.name,
"Transfers " .. amount .. " to " .. to_acc.owner)
return true

View File

@ -25,6 +25,8 @@ function company.create(obj)
return false
end
company.dirty = true
for _, func in pairs(company.registered_on_creates) do
func(obj)
end

View File

@ -28,7 +28,6 @@ ChatCmdBuilder.new("company", function(cmd)
if company.create(comp) then
adt:post(name, comp.name, "Registered company")
company.save()
return true, "Registered company"
else
return false, "Unable to register company, an unknown error occured"

View File

@ -22,7 +22,7 @@ ChatCmdBuilder.new("shop", function(cmd)
end
if shop.register_shop(sname, obj) then
shop.save()
shop.dirty = true
return true, "Registered shop"
else
return false, "Unable to register shop, a shop of that name already exists"

View File

@ -9,6 +9,7 @@ function lib_utils.make_saveload(tab, storage, itemarraykey, registername, class
tab.__saves = tab.__saves or {}
tab.__loads = tab.__loads or {}
tab.dirty = false
table.insert(tab.__saves, function()
local res = _.map(tab[itemarraykey], function(item)
@ -27,15 +28,32 @@ function lib_utils.make_saveload(tab, storage, itemarraykey, registername, class
end)
end)
if not tab.save then
local function step()
if tab.dirty then
tab.save()
end
minetest.after(20, step)
end
minetest.after(math.random(5,13), step)
minetest.register_on_shutdown(function() tab.save() end)
end
tab.save = function()
for _, func in pairs(tab.__saves) do
func()
end
tab.dirty = false
end
tab.load = function()
for _, func in pairs(tab.__loads) do
func()
end
tab.dirty = false
end
end