diff --git a/game/engine/Store.lua b/game/engine/Store.lua index 1f9eab62a2d9ad263fa652b7cdf355d3c21e2cc9..b4fa75a1f562eada1688a06341e1da3bdea50e17 100644 --- a/game/engine/Store.lua +++ b/game/engine/Store.lua @@ -19,6 +19,7 @@ require "engine.class" local Entity = require "engine.Entity" +local Dialog = require "engine.Dialog" local Inventory = require "engine.interface.ActorInventory" local ShowStore = require "engine.dialogs.ShowStore" local GetQuantity = require "engine.dialogs.GetQuantity" @@ -75,7 +76,7 @@ function _M:interact(who) local d; d = ShowStore.new("Store: "..self.name, store, inven, nil, nil, function(what, o, item) if what == "buy" then if o:getNumber() > 1 then - local q = GetQuantity.new(nil, nil, function(qty) self:doBuy(who, o, item, qty) print(d) d:updateStore() end) + local q = GetQuantity.new(nil, nil, function(qty) self:doBuy(who, o, item, qty, d) end) q.qty = o:getNumber() game:registerDialog(q) else @@ -84,7 +85,7 @@ function _M:interact(who) else if o:getNumber() > 1 then local q - q = GetQuantity.new(nil, nil, function(qty) self:doSell(who, o, item, qty) d:updateStore() end) + q = GetQuantity.new(nil, nil, function(qty) self:doSell(who, o, item, qty, d) end) q.qty = o:getNumber() game:registerDialog(q) else @@ -97,37 +98,43 @@ function _M:interact(who) game:registerDialog(d) end -function _M:doBuy(who, o, item, nb) +function _M:doBuy(who, o, item, nb, store_dialog) local max_nb = o:getNumber() nb = math.min(nb, max_nb) nb = self:onBuy(who, o, item, nb) if nb then - local store, inven = self:getInven("INVEN"), who:getInven("INVEN") - for i = 1, nb do - local o = self:removeObject(store, item) - who:addObject(inven, o) - end - self:sortInven(store) - who:sortInven(inven) - self.changed = true - who.changed = true + Dialog:yesnoPopup("Buy", ("Buy %d %s"):format(nb, o:getName{do_color=true, no_count=true}), function(ok) if ok then + local store, inven = self:getInven("INVEN"), who:getInven("INVEN") + for i = 1, nb do + local o = self:removeObject(store, item) + who:addObject(inven, o) + end + self:sortInven(store) + who:sortInven(inven) + self.changed = true + who.changed = true + if store_dialog then store_dialog:updateStore() end + end end) end end -function _M:doSell(who, o, item, nb) +function _M:doSell(who, o, item, nb, store_dialog) local max_nb = o:getNumber() nb = math.min(nb, max_nb) nb = self:onSell(who, o, item, nb) if nb then - local store, inven = self:getInven("INVEN"), who:getInven("INVEN") - for i = 1, nb do - local o = who:removeObject(inven, item) - self:addObject(store, o) - end - self:sortInven(store) - who:sortInven(inven) - self.changed = true - who.changed = true + Dialog:yesnoPopup("Sell", ("Sell %d %s"):format(nb, o:getName{do_color=true, no_count=true}), function(ok) if ok then + local store, inven = self:getInven("INVEN"), who:getInven("INVEN") + for i = 1, nb do + local o = who:removeObject(inven, item) + self:addObject(store, o) + end + self:sortInven(store) + who:sortInven(inven) + self.changed = true + who.changed = true + if store_dialog then store_dialog:updateStore() end + end end) end end