diff --git a/src/core/GameKeyHandler.ttslua b/src/core/GameKeyHandler.ttslua index 1c52ec55..1cf866e8 100644 --- a/src/core/GameKeyHandler.ttslua +++ b/src/core/GameKeyHandler.ttslua @@ -5,6 +5,7 @@ local navigationOverlayApi = require("core/NavigationOverlayApi") local optionPanelApi = require("core/OptionPanelApi") local playermatApi = require("playermat/PlayermatApi") local searchLib = require("util/SearchLib") +local tokenChecker = require("core/token/TokenChecker") local victoryDisplayApi = require("core/VictoryDisplayApi") function onLoad() @@ -265,7 +266,7 @@ function removeOneUse(playerColor, hoveredObject) for _, obj in ipairs(searchLib.onObject(hoveredObject, "isTileOrToken")) do if not obj.locked and obj.memo ~= "resourceCounter" then -- check for matching object, otherwise use the first hit - if obj.memo == searchForType then + if obj.memo and obj.memo == searchForType then targetObject = obj break elseif not targetObject then @@ -275,6 +276,15 @@ function removeOneUse(playerColor, hoveredObject) end end + -- release sealed token if card has one and no uses + if tokenChecker.isChaosToken(targetObject) and hoveredObject.hasTag("CardThatSeals") then + local func = hoveredObject.getVar("releaseOneToken") -- check if function exists + if func ~= nil then + hoveredObject.call("releaseOneToken", playerColor) + return + end + end + -- error handling if not targetObject then broadcastToColor("No tokens found!", playerColor, "Yellow") diff --git a/src/core/Global.ttslua b/src/core/Global.ttslua index 2ce84b52..b591245a 100644 --- a/src/core/Global.ttslua +++ b/src/core/Global.ttslua @@ -424,7 +424,7 @@ function returnAndRedraw(_, tokenGUID) -- perform the actual token replacing trackChaosToken(tokenName, mat.getGUID(), true) - params = {token = returnedToken, fromBag = true} + local params = {token = returnedToken, fromBag = true} returnChaosTokenToBag(params) chaosTokens[indexOfReturnedToken] = drawChaosToken({ diff --git a/src/playercards/CardsThatSealTokens.ttslua b/src/playercards/CardsThatSealTokens.ttslua index 92d780a3..c379e8bc 100644 --- a/src/playercards/CardsThatSealTokens.ttslua +++ b/src/playercards/CardsThatSealTokens.ttslua @@ -86,7 +86,6 @@ local guidReferenceApi = require("core/GUIDReferenceApi") local playermatApi = require("playermat/PlayermatApi") local tokenArrangerApi = require("accessories/TokenArrangerApi") -local MAX_SEALED = MAX_SEALED or nil local sealedTokens = {} local ID_URL_MAP = {} local tokensInBag = {} @@ -116,7 +115,6 @@ end -- builds the context menu function generateContextMenu() - self.addContextMenuItem("Release one token", releaseOneToken) -- conditional release options @@ -200,7 +198,7 @@ end -- seals the named token on this card function sealToken(name, playerColor) - if #sealedTokens == MAX_SEALED then + if #sealedTokens >= MAX_SEALED then printToColor("Cannot seal any more tokens on this card", playerColor, "Red") return end @@ -220,10 +218,14 @@ function sealToken(name, playerColor) if name == "Bless" or name == "Curse" then blessCurseManagerApi.sealedToken(name, guid) end - --destroy XML on just covered token + -- destroy XML on just covered token if #sealedTokens > 1 then local coveredToken = getObjectFromGUID(sealedTokens[#sealedTokens - 1]) - coveredToken.UI.setXml("") + if coveredToken ~= nil then + coveredToken.UI.setXml("") + else + table.remove(sealedTokens, #sealedTokens - 1) + end end updateStackSize() end @@ -253,16 +255,13 @@ function releaseMultipleTokens(playerColor) end if #sealedTokens < SHOW_MULTI_RELEASE then local numRemoved = #sealedTokens - for i = 1, numRemoved do - putTokenAway(table.remove(sealedTokens)) - end - printToColor("Releasing " .. numRemoved .. " tokens", playerColor) else - for i = 1, SHOW_MULTI_RELEASE do - putTokenAway(table.remove(sealedTokens)) - end - printToColor("Releasing " .. SHOW_MULTI_RELEASE .. " tokens", playerColor) + local numRemoved = SHOW_MULTI_RELEASE end + for i = 1, numRemoved do + putTokenAway(table.remove(sealedTokens)) + end + printToColor("Releasing " .. numRemoved .. " tokens", playerColor) end -- releases all sealed tokens