Skip to content
Snippets Groups Projects
Commit 33c0b077 authored by dg's avatar dg
Browse files

Improve handling of activable items

git-svn-id: http://svn.net-core.org/repos/t-engine4@1141 51575b47-30f0-44d4-a5cc-537603b46e54
parent 9bf34c6a
No related branches found
No related tags found
No related merge requests found
......@@ -59,9 +59,7 @@ end
function _M:useObject(who)
if self.use_power then
if self.power >= self.use_power.power then
local co = coroutine.create(function() return self.use_power.use(self, who) end)
local ok, ret, no_power = coroutine.resume(co)
if not ok and ret then print(debug.traceback(co)) error(ret) end
local ret, no_power = self.use_power.use(self, who)
if not no_power then self.power = self.power - self.use_power.power end
return ret
else
......@@ -72,9 +70,7 @@ function _M:useObject(who)
end
end
elseif self.use_simple then
local co = coroutine.create(function() return self.use_simple.use(self, who) end)
local ok, ret = coroutine.resume(co)
if not ok and ret then print(debug.traceback(co)) error(ret) end
local ret = self.use_simple.use(self, who)
return ret
elseif self.use_talent then
if not self.use_talent.power or self.power >= self.use_talent.power then
......
......@@ -624,9 +624,10 @@ function _M:setupCommands()
local d
local titleupdator = self.player:getEncumberTitleUpdator("Inventory")
d = self.player:showEquipInven(titleupdator(), nil, function(o, inven, item)
local ud = require("mod.dialogs.UseItemDialog").new(self.player, o, item, inven, function()
local ud = require("mod.dialogs.UseItemDialog").new(self.player, o, item, inven, function(_, _, _, stop)
d:generateList()
d.title = titleupdator()
if stop then self:unregisterDialog(d) end
end)
self:registerDialog(ud)
end)
......
......@@ -519,27 +519,33 @@ function _M:playerUseItem(object, item, inven)
if game.zone.wilderness then game.logPlayer(self, "You can not use items on the world map.") return end
local use_fct = function(o, inven, item)
self.changed = true
local ret, no_id = o:use(self)
if not no_id then
o:identify(true)
end
if ret and ret == "destroy" then
if o.multicharge and o.multicharge > 1 then
o.multicharge = o.multicharge - 1
else
local _, del = self:removeObject(self:getInven(inven), item)
if del then
game.log("You have no more %s.", o:getName{no_count=true, do_color=true})
local co = coroutine.create(function()
self.changed = true
local ret, no_id = o:use(self)
print(ret,no_id)
if not no_id then
o:identify(true)
end
if ret and ret == "destroy" then
if o.multicharge and o.multicharge > 1 then
o.multicharge = o.multicharge - 1
else
game.log("You have %s.", o:getName{do_color=true})
local _, del = self:removeObject(self:getInven(inven), item)
if del then
game.log("You have no more %s.", o:getName{no_count=true, do_color=true})
else
game.log("You have %s.", o:getName{do_color=true})
end
self:sortInven(self:getInven(inven))
end
self:sortInven(self:getInven(inven))
return true
end
return true
end
self:breakStealth()
self.changed = true
self:breakStealth()
self.changed = true
end)
local ok, ret = coroutine.resume(co)
if not ok and ret then print(debug.traceback(co)) error(ret) end
return true
end
if object and item then return use_fct(object, inven, item) end
......
......@@ -63,13 +63,14 @@ function _M:use()
local act = self.list[self.sel].action
if act == "use" then self.actor:playerUseItem(self.object, self.item, self.inven, self.onuse)
local stop = false
if act == "use" then self.actor:playerUseItem(self.object, self.item, self.inven, self.onuse) stop = true
elseif act == "drop" then self.actor:doDrop(self.inven, self.item)
elseif act == "wear" then self.actor:doWear(self.inven, self.item, self.object)
elseif act == "takeoff" then self.actor:doTakeoff(self.inven, self.item, self.object)
end
self.onuse(self.inven, self.item, self.object)
self.onuse(self.inven, self.item, self.object, stop)
end
function _M:generateList()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment