From 540b6296b23b2ca755f6c74487bd6a1159e16dba Mon Sep 17 00:00:00 2001 From: dscarpac Date: Fri, 14 Jun 2024 16:14:55 -0500 Subject: [PATCH 1/9] first draft --- .../ClaypoolsFurs.c1f999.json | 2 +- .../CustomModifications.d2252d.json | 2 +- .../FalseCovenant2.3442f5.json | 2 +- .../HeavyFurs.275450.json | 2 +- .../WendyAdams.15e40d.json | 2 +- .../WendyAdams.fc1d17.json | 2 +- .../WendyAdamsParallelBack.4232d9.json | 2 +- src/chaosbag/BlessCurseManager.ttslua | 5 +- src/chaosbag/BlessCurseManagerApi.ttslua | 17 +- src/chaosbag/ChaosBagApi.ttslua | 4 +- src/core/Global.ttslua | 152 ++++++++++++++++-- src/playercards/cards/ClaypoolsFurs.ttslua | 55 +++++++ .../cards/CustomModifications.ttslua | 55 +++++++ src/playercards/cards/FalseCovenant.ttslua | 58 +++++++ src/playercards/cards/HeavyFurs.ttslua | 55 +++++++ src/playercards/cards/NkosiMabati3.ttslua | 81 +--------- src/playercards/cards/WendyAdams.ttslua | 54 +++++++ 17 files changed, 444 insertions(+), 106 deletions(-) create mode 100644 src/playercards/cards/ClaypoolsFurs.ttslua create mode 100644 src/playercards/cards/CustomModifications.ttslua create mode 100644 src/playercards/cards/FalseCovenant.ttslua create mode 100644 src/playercards/cards/HeavyFurs.ttslua create mode 100644 src/playercards/cards/WendyAdams.ttslua diff --git a/objects/AllPlayerCards.15bb07/ClaypoolsFurs.c1f999.json b/objects/AllPlayerCards.15bb07/ClaypoolsFurs.c1f999.json index 2bfed266..95d6ef9e 100644 --- a/objects/AllPlayerCards.15bb07/ClaypoolsFurs.c1f999.json +++ b/objects/AllPlayerCards.15bb07/ClaypoolsFurs.c1f999.json @@ -33,7 +33,7 @@ "IgnoreFoW": false, "LayoutGroupSortIndex": 0, "Locked": false, - "LuaScript": "", + "LuaScript": "require(\"playercards/cards/ClaypoolsFurs\")", "LuaScriptState": "", "MeasureMovement": false, "Name": "Card", diff --git a/objects/AllPlayerCards.15bb07/CustomModifications.d2252d.json b/objects/AllPlayerCards.15bb07/CustomModifications.d2252d.json index 7757f481..663156d6 100644 --- a/objects/AllPlayerCards.15bb07/CustomModifications.d2252d.json +++ b/objects/AllPlayerCards.15bb07/CustomModifications.d2252d.json @@ -33,7 +33,7 @@ "IgnoreFoW": false, "LayoutGroupSortIndex": 0, "Locked": false, - "LuaScript": "", + "LuaScript": "require(\"playercards/cards/CustomModifications\")", "LuaScriptState": "", "MeasureMovement": false, "Name": "Card", diff --git a/objects/AllPlayerCards.15bb07/FalseCovenant2.3442f5.json b/objects/AllPlayerCards.15bb07/FalseCovenant2.3442f5.json index 48af3d18..85180e6d 100644 --- a/objects/AllPlayerCards.15bb07/FalseCovenant2.3442f5.json +++ b/objects/AllPlayerCards.15bb07/FalseCovenant2.3442f5.json @@ -33,7 +33,7 @@ "IgnoreFoW": false, "LayoutGroupSortIndex": 0, "Locked": false, - "LuaScript": "", + "LuaScript": "require(\"playercards/cards/FalseCovenant\")", "LuaScriptState": "", "MeasureMovement": false, "Name": "Card", diff --git a/objects/AllPlayerCards.15bb07/HeavyFurs.275450.json b/objects/AllPlayerCards.15bb07/HeavyFurs.275450.json index a21e2de2..903e23b8 100644 --- a/objects/AllPlayerCards.15bb07/HeavyFurs.275450.json +++ b/objects/AllPlayerCards.15bb07/HeavyFurs.275450.json @@ -33,7 +33,7 @@ "IgnoreFoW": false, "LayoutGroupSortIndex": 0, "Locked": false, - "LuaScript": "", + "LuaScript": "require(\"playercards/cards/HeavyFurs\")", "LuaScriptState": "", "MeasureMovement": false, "Name": "Card", diff --git a/objects/AllPlayerCards.15bb07/WendyAdams.15e40d.json b/objects/AllPlayerCards.15bb07/WendyAdams.15e40d.json index eaada6de..f9049ba9 100644 --- a/objects/AllPlayerCards.15bb07/WendyAdams.15e40d.json +++ b/objects/AllPlayerCards.15bb07/WendyAdams.15e40d.json @@ -33,7 +33,7 @@ "IgnoreFoW": false, "LayoutGroupSortIndex": 0, "Locked": false, - "LuaScript": "", + "LuaScript": "require(\"playercards/cards/WendyAdams\")", "LuaScriptState": "", "MeasureMovement": false, "Name": "Card", diff --git a/objects/AllPlayerCards.15bb07/WendyAdams.fc1d17.json b/objects/AllPlayerCards.15bb07/WendyAdams.fc1d17.json index 08b4bc57..fbb739dd 100644 --- a/objects/AllPlayerCards.15bb07/WendyAdams.fc1d17.json +++ b/objects/AllPlayerCards.15bb07/WendyAdams.fc1d17.json @@ -33,7 +33,7 @@ "IgnoreFoW": false, "LayoutGroupSortIndex": 0, "Locked": false, - "LuaScript": "", + "LuaScript": "require(\"playercards/cards/WendyAdams\")", "LuaScriptState": "", "MeasureMovement": false, "Name": "Card", diff --git a/objects/AllPlayerCards.15bb07/WendyAdamsParallelBack.4232d9.json b/objects/AllPlayerCards.15bb07/WendyAdamsParallelBack.4232d9.json index e71f4c56..9dac60ed 100644 --- a/objects/AllPlayerCards.15bb07/WendyAdamsParallelBack.4232d9.json +++ b/objects/AllPlayerCards.15bb07/WendyAdamsParallelBack.4232d9.json @@ -33,7 +33,7 @@ "IgnoreFoW": false, "LayoutGroupSortIndex": 0, "Locked": false, - "LuaScript": "", + "LuaScript": "require(\"playercards/cards/WendyAdams\")", "LuaScriptState": "", "MeasureMovement": false, "Name": "Card", diff --git a/src/chaosbag/BlessCurseManager.ttslua b/src/chaosbag/BlessCurseManager.ttslua index db8ca1bc..a9d40ac9 100644 --- a/src/chaosbag/BlessCurseManager.ttslua +++ b/src/chaosbag/BlessCurseManager.ttslua @@ -236,7 +236,10 @@ function releasedToken(param) break end end - updateDisplayAndBroadcast(param.type) + log(param) + if not param.fromDrawn or param.fromDrawn == false then + updateDisplayAndBroadcast(param.type) + end end -- removes a token (called by cards that seal bless/curse tokens) diff --git a/src/chaosbag/BlessCurseManagerApi.ttslua b/src/chaosbag/BlessCurseManagerApi.ttslua index fa347b86..901678f9 100644 --- a/src/chaosbag/BlessCurseManagerApi.ttslua +++ b/src/chaosbag/BlessCurseManagerApi.ttslua @@ -24,8 +24,9 @@ do -- updates the internal count (called by cards that seal bless/curse tokens) ---@param type string Type of chaos token ("Bless" or "Curse") ---@param guid string GUID of the token - BlessCurseManagerApi.releasedToken = function(type, guid) - getManager().call("releasedToken", { type = type, guid = guid }) + ---@param fromDrawn? boolean Whether or not token was just drawn from the chaos bag + BlessCurseManagerApi.releasedToken = function(type, guid, fromDrawn) + getManager().call("releasedToken", { type = type, guid = guid, fromDrawn = fromDrawn }) end -- updates the internal count (called by cards that seal bless/curse tokens) @@ -54,5 +55,17 @@ do getManager().call("addMenuOptions", { playerColor = playerColor, hoveredObject = hoveredObject }) end + -- adds bless / curse to the chaos bag + -- @param type string Type of chaos token ("Bless" or "Curse") + BlessCurseManagerApi.addToken = function(type) + getManager().call("addToken", type) + end + + -- removes bless / curse from the chaos bag + -- @param type string Type of chaos token ("Bless" or "Curse") + BlessCurseManagerApi.removeToken = function(type) + getManager().call("removeToken", type) + end + return BlessCurseManagerApi end diff --git a/src/chaosbag/ChaosBagApi.ttslua b/src/chaosbag/ChaosBagApi.ttslua index cf333a8e..b7883f1f 100644 --- a/src/chaosbag/ChaosBagApi.ttslua +++ b/src/chaosbag/ChaosBagApi.ttslua @@ -71,9 +71,9 @@ do ---@param drawAdditional boolean Controls whether additional tokens should be drawn ---@param tokenType? string Name of token (e.g. "Bless") to be drawn from the bag ---@param guidToBeResolved? string GUID of the sealed token to be resolved instead of drawing a token from the bag - ---@param returnedToken? tts__Object Token to be replaced with newly drawn token + ---@param takeParameters? table Position and rotation of the location where the new token should be drawn to, usually to replace a returned token ChaosBagApi.drawChaosToken = function(mat, drawAdditional, tokenType, guidToBeResolved, returnedToken) - return Global.call("drawChaosToken", {mat = mat, drawAdditional = drawAdditional, tokenType = tokenType, guidToBeResolved = guidToBeResolved, returnedToken = returnedToken}) + return Global.call("drawChaosToken", {mat = mat, drawAdditional = drawAdditional, tokenType = tokenType, guidToBeResolved = guidToBeResolved, takeParameters = takeParameters}) end -- returns a Table List of chaos token ids in the current chaos bag diff --git a/src/core/Global.ttslua b/src/core/Global.ttslua index 0fbc4564..df108d1c 100644 --- a/src/core/Global.ttslua +++ b/src/core/Global.ttslua @@ -271,7 +271,7 @@ function returnChaosTokenToBag(token) chaosBag.putObject(token) tokenArrangerApi.layout() if name == "Bless" or name == "Curse" then - blessCurseManagerApi.releasedToken(name, guid) + blessCurseManagerApi.releasedToken(name, guid, true) end end @@ -283,6 +283,130 @@ function getTokenIndex(token) end end +function makeButtonsToRedraw(player, tokenList, id) + -- passed from Nkosi, usually, bypassing XML buttons + if type(player) == "table" then + tokenList = player.tokenList + id = player.id + end + + local tokensInPlay = getChaosTokensinPlay() + if #tokensInPlay == 0 then + broadcastToAll("No tokens found in play area", "Red") + return + end + local chaosbag = findChaosBag() + local matchingTokensInPlay = {} + -- determine if only some tokens are able to be returned to the bag + if id == "ineligible" then + -- create list of tokens that should not get an XML button + for _, token in ipairs(tokensInPlay) do + if string.find(tokenList, token.getName(), 1, true) == nil then + matchingTokensInPlay[#matchingTokensInPlay + 1] = token + end + end + if #matchingTokensInPlay == 0 then + broadcastToAll("No eligible token found in play area", "Red") + return + end + elseif id == "all" then + -- for any cards that can replace any tokens + matchingTokensInPlay = tokensInPlay + else + -- cards that dictate only some tokens are eligible for replacement + for _, token in ipairs(tokensInPlay) do + if string.find(tokenList, token.getName()) then + matchingTokensInPlay[#matchingTokensInPlay + 1] = token + end + end + + if #matchingTokensInPlay == 0 then + broadcastToAll("No eligible token found in play area", "Red") + return + end + end + + if #matchingTokensInPlay > 1 then + for _, token in ipairs(matchingTokensInPlay) do + -- draw XML to return token to bag + token.UI.setXmlTable({ + { + tag = "VerticalLayout", + attributes = { + height = 275, + width = 275, + spacing = 0, + padding = "0 0 20 25", + scale = "0.4 0.4 1", + rotation = "0 0 180", + position = "0 0 -15", + color = "rgba(0,0,0,0.7)", + onClick = "Global/returnAndRedraw(" .. token.getGUID() .. ")", + id = id + }, + children = { + { + tag = "Text", + attributes = { + fontSize = "100", + font = "font_teutonic-arkham", + color = "#ffffff", + text = "Redraw" + } + }, + { + tag = "Text", + attributes = { + fontSize = "125", + font = "font_arkhamicons", + color = "#ffffff", + text = "u" + } + } + } + } + }) + end + -- no need to make buttons if there is only one eligible token to return and redraw + else + returnAndRedraw(_, matchingTokensInPlay[1].getGUID(), id) + end +end + +function returnAndRedraw(_, tokenGUID, id) + local indexOfReturnedToken + local takeParameters = {} + local returnedToken = getObjectFromGUID(tokenGUID) + local matColor = playmatApi.getMatColorByPosition(returnedToken.getPosition()) + local mat = guidReferenceApi.getObjectByOwnerAndType(matColor, "Playermat") + + trackChaosToken(returnedToken.getName(), mat.getGUID(), true) + indexOfReturnedToken = getTokenIndex(returnedToken) + takeParameters.position = returnedToken.getPosition() + + if #chaosTokens > indexOfReturnedToken then + takeParameters.rotation = mat.getRotation() + Vector(0, 0, -8) + else + takeParameters.rotation = returnedToken.getRotation() + end + + returnChaosTokenToBag(returnedToken) + if string.find("all|eligible|ineligible|falseCovenant", id) then + token = drawChaosToken({mat = mat, drawAdditional = true, takeParameters = takeParameters}) + else + token = drawChaosToken({mat = mat, drawAdditional = true, takeParameters = takeParameters, tokenType = id}) + end + + chaosTokens[indexOfReturnedToken] = token + if id == "falseCovenant" then + blessCurseManagerApi.removeToken("Curse") + end + -- remove XML from tokens in play + for _, token in ipairs(getChaosTokensinPlay()) do + token.UI.setXml("") + end +end + -- Checks to see if the chaos bag can be manipulated. If a player is searching the bag when tokens -- are drawn or replaced a TTS bug can cause those tokens to vanish. Any functions which change the -- contents of the bag should check this method before doing so. @@ -329,34 +453,28 @@ function drawChaosToken(params) end chaosTokensLastMatGUID = matGUID - + -- if we have left clicked and have no tokens OR if we have right clicked if params.drawAdditional or #chaosTokens == 0 then local chaosBag = findChaosBag() if #chaosBag.getObjects() == 0 then return end - chaosBag.shuffle() local indexOfReturnedToken local takeParameters = {} -- add the token to the list, compute new position based on list length - if params.returnedToken then - trackChaosToken(params.returnedToken.getName(), matGUID, true) - indexOfReturnedToken = getTokenIndex(params.returnedToken) - takeParameters.position = params.returnedToken.getPosition() - if #chaosTokens > indexOfReturnedToken then - takeParameters.rotation = params.mat.getRotation() + Vector(0, 0, -8) - else - takeParameters.rotation = params.returnedToken.getRotation() - end - returnChaosTokenToBag(params.returnedToken) + if params.takeParameters then + takeParameters.position = params.takeParameters.position + takeParameters.rotation = params.takeParameters.rotation else tokenOffset[1] = tokenOffset[1] + (0.17 * #chaosTokens) takeParameters.position = params.mat.positionToWorld(tokenOffset) takeParameters.rotation = params.mat.getRotation() end + chaosBag.shuffle() local token + if params.guidToBeResolved then -- resolve a sealed token from a card token = getObjectFromGUID(params.guidToBeResolved) @@ -378,7 +496,7 @@ function drawChaosToken(params) end token = chaosBag.takeObject(takeParameters) end - + -- get data for token description local name = token.getName() local tokenData = mythosAreaApi.returnTokenData().tokenData or {} @@ -386,9 +504,9 @@ function drawChaosToken(params) token.setDescription(specificData.description or "") trackChaosToken(name, matGUID) - if params.returnedToken then - chaosTokens[indexOfReturnedToken] = token - else + if params.takeParameters then + return token + else chaosTokens[#chaosTokens + 1] = token end else diff --git a/src/playercards/cards/ClaypoolsFurs.ttslua b/src/playercards/cards/ClaypoolsFurs.ttslua new file mode 100644 index 00000000..bd646734 --- /dev/null +++ b/src/playercards/cards/ClaypoolsFurs.ttslua @@ -0,0 +1,55 @@ +local turnOnCFHelper + +function onSave() + return JSON.encode(turnOnCFHelper) +end + +function onLoad(savedData) + self.addContextMenuItem("Enable Helper", makeXMLButton) + + if savedData ~= "" then + turnOnCFHelper = JSON.decode(savedData) + if turnOnCFHelper == true then + makeXMLButton() + self.clearContextMenu() + self.addContextMenuItem("Clear Helper", deleteButton) + end + end +end + +function makeXMLButton() + turnOnCFHelper = true + self.clearContextMenu() + self.addContextMenuItem("Clear Helper", deleteButton) + + tokenList = "Frost" + self.UI.setXmlTable({ + { + tag = "Button", + attributes = { + height = 450, + width = 1400, + rotation = "0 0 180", + scale = "0.1 0.1 1", + position = "0 -55 -22", + padding = "50 50 50 50", + font = "font_teutonic-arkham", + fontSize = 250, + onClick = "Global/makeButtonsToRedraw(".. tokenList ..")", + id = "eligible", + color = "#77674DE6", + textColor = "White" + }, + value = "Redraw Token" + } + } + ) +end + +-- Delete button +function deleteButton() + self.clearContextMenu() + self.addContextMenuItem("Enable Helper", makeXMLButton) + self.UI.setXml("") + turnOnCFHelper = false +end \ No newline at end of file diff --git a/src/playercards/cards/CustomModifications.ttslua b/src/playercards/cards/CustomModifications.ttslua new file mode 100644 index 00000000..8d0f8341 --- /dev/null +++ b/src/playercards/cards/CustomModifications.ttslua @@ -0,0 +1,55 @@ +local turnOnCMHelper + +function onSave() + return JSON.encode(turnOnCMHelper) +end + +function onLoad(savedData) + self.addContextMenuItem("Enable Helper", makeXMLButton) + + if savedData ~= "" then + turnOnCMHelper = JSON.decode(savedData) + if turnOnCMHelper == true then + makeXMLButton() + self.clearContextMenu() + self.addContextMenuItem("Clear Helper", deleteButton) + end + end +end + +function makeXMLButton() + turnOnCMHelper = true + self.clearContextMenu() + self.addContextMenuItem("Clear Helper", deleteButton) + + tokenList = "Auto-fail" + self.UI.setXmlTable({ + { + tag = "Button", + attributes = { + height = 450, + width = 1400, + rotation = "0 0 180", + scale = "0.1 0.1 1", + position = "0 -55 -22", + padding = "50 50 50 50", + font = "font_teutonic-arkham", + fontSize = 250, + onClick = "Global/makeButtonsToRedraw(".. tokenList ..")", + id = "ineligible", + color = "#77674DE6", + textColor = "White" + }, + value = "Redraw Token" + } + } + ) +end + +-- Delete button +function deleteButton() + self.clearContextMenu() + self.addContextMenuItem("Enable Helper", makeXMLButton) + self.UI.setXml("") + turnOnCMHelper = false +end diff --git a/src/playercards/cards/FalseCovenant.ttslua b/src/playercards/cards/FalseCovenant.ttslua new file mode 100644 index 00000000..8a2b32f4 --- /dev/null +++ b/src/playercards/cards/FalseCovenant.ttslua @@ -0,0 +1,58 @@ +local turnOnFCHelper + +function onSave() + return JSON.encode(turnOnFCHelper) +end + +function onLoad(savedData) + self.addContextMenuItem("Enable Helper", makeXMLButton) + + if savedData ~= "" then + turnOnFCHelper = JSON.decode(savedData) + if turnOnFCHelper == true then + makeXMLButton() + self.clearContextMenu() + self.addContextMenuItem("Clear Helper", deleteButton) + end + end +end + +function makeXMLButton() + turnOnFCHelper = true + self.clearContextMenu() + self.addContextMenuItem("Clear Helper", deleteButton) + + tokenList = "Curse" + self.UI.setXmlTable({ + { + tag = "Button", + attributes = { + height = 450, + width = 1400, + rotation = "0 0 180", + scale = "0.1 0.1 1", + position = "0 -55 -22", + padding = "50 50 50 50", + font = "font_teutonic-arkham", + fontSize = 300, + onClick = "Global/makeButtonsToRedraw(".. tokenList ..")", + id = "falseCovenant", + color = "#633A84E6", + textColor = "White", + iconWidth = "400", + iconAlignment = "Right", + icon = "token-curse" + }, + value = "Cancel" + } + } + ) +end + +-- Delete button +function deleteButton() + self.clearContextMenu() + self.addContextMenuItem("Enable Helper", makeXMLButton) + self.UI.setXml("") + turnOnFCHelper = false +end diff --git a/src/playercards/cards/HeavyFurs.ttslua b/src/playercards/cards/HeavyFurs.ttslua new file mode 100644 index 00000000..aa021de3 --- /dev/null +++ b/src/playercards/cards/HeavyFurs.ttslua @@ -0,0 +1,55 @@ +local turnOnHFHelper + +function onSave() + return JSON.encode(turnOnHFHelper) +end + +function onLoad(savedData) + self.addContextMenuItem("Enable Helper", makeXMLButton) + + if savedData ~= "" then + turnOnHFHelper = JSON.decode(savedData) + if turnOnHFHelper == true then + makeXMLButton() + self.clearContextMenu() + self.addContextMenuItem("Clear Helper", deleteButton) + end + end +end + +function makeXMLButton() + turnOnHFHelper = true + self.clearContextMenu() + self.addContextMenuItem("Clear Helper", deleteButton) + + tokenList = "Skull|Tablet|Elder Thing|Cultist|Frost|Custom Token|Elder Sign|Bless|Curse" + self.UI.setXmlTable({ + { + tag = "Button", + attributes = { + height = 450, + width = 1400, + rotation = "0 0 180", + scale = "0.1 0.1 1", + position = "0 -55 -22", + padding = "50 50 50 50", + font = "font_teutonic-arkham", + fontSize = 250, + onClick = "Global/makeButtonsToRedraw(".. tokenList ..")", + id = "eligible", + color = "#77674DE6", + textColor = "White" + }, + value = "Redraw Token" + } + } + ) +end + +-- Delete button +function deleteButton() + self.clearContextMenu() + self.addContextMenuItem("Enable Helper", makeXMLButton) + self.UI.setXml("") + turnOnHFHelper = false +end \ No newline at end of file diff --git a/src/playercards/cards/NkosiMabati3.ttslua b/src/playercards/cards/NkosiMabati3.ttslua index a0066c4b..0ab916ff 100644 --- a/src/playercards/cards/NkosiMabati3.ttslua +++ b/src/playercards/cards/NkosiMabati3.ttslua @@ -15,8 +15,6 @@ local tokenColor = { [""] = "#77674DE6" } -local sigil - function onSave() return JSON.encode(sigil) end @@ -52,7 +50,7 @@ function makeXMLButton() iconWidth = "400", iconAlignment = "Right", onClick = "resolveSigil", - id = sigil, + id = eligible, icon = iconName, color = tokenColor[sigil], textColor = "White" @@ -109,77 +107,6 @@ function resolveSigil() return end - local matchingSymbolsInPlay = {} - - for _, token in ipairs(tokensInPlay) do - if (token.getName() == "Cultist" - or token.getName() == "Tablet" - or token.getName() == "Elder Thing") - and token.getName() ~= sigil then - matchingSymbolsInPlay[#matchingSymbolsInPlay + 1] = token - end - end - - if #matchingSymbolsInPlay == 0 then - broadcastToAll("No eligible symbol token found in play area", "Red") - return - elseif #matchingSymbolsInPlay > 1 then - for _, token in ipairs(matchingSymbolsInPlay) do - -- draw XML to return token to bag - token.UI.setXmlTable({ - { - tag = "VerticalLayout", - attributes = { - height = 275, - width = 275, - spacing = 0, - padding = "0 0 20 25", - scale = "0.4 0.4 1", - rotation = "0 0 180", - position = "0 0 -15", - color = "rgba(0,0,0,0.7)", - onClick = self.getGUID() .. "/drawSigil(" .. token.getGUID() .. ")" - }, - children = { - { - tag = "Text", - attributes = { - fontSize = "100", - font = "font_teutonic-arkham", - color = "#ffffff", - text = "Nkosi" - } - }, - { - tag = "Text", - attributes = { - fontSize = "125", - font = "font_arkhamicons", - color = "#ffffff", - text = "u" - } - } - } - } - }) - end - else - drawSigil(_, matchingSymbolsInPlay[1].getGUID()) - end -end - -function drawSigil(player, tokenGUID) - local returnedToken = getObjectFromGUID(tokenGUID) - local matColor = playmatApi.getMatColorByPosition(returnedToken.getPosition()) - local mat = guidReferenceApi.getObjectByOwnerAndType(matColor, "Playermat") - chaosBagApi.drawChaosToken(mat, true, sigil, _, returnedToken) - - -- remove XML from tokens in play - for _, token in ipairs(chaosBagApi.getTokensInPlay()) do - if token.getName() == "Cultist" - or token.getName() == "Tablet" - or token.getName() == "Elder Thing" then - token.UI.setXml("") - end - end -end + params = { tokenList = "Tablet|Elder Thing|Cultist", id = sigil} + Global.call("makeButtonsToRedraw", params) +end \ No newline at end of file diff --git a/src/playercards/cards/WendyAdams.ttslua b/src/playercards/cards/WendyAdams.ttslua new file mode 100644 index 00000000..94e25bba --- /dev/null +++ b/src/playercards/cards/WendyAdams.ttslua @@ -0,0 +1,54 @@ +local turnOnWAHelper + +function onSave() + return JSON.encode(turnOnWAHelper) +end + +function onLoad(savedData) + self.addContextMenuItem("Enable Helper", makeXMLButton) + + if savedData ~= "" then + turnOnWAHelper = JSON.decode(savedData) + if turnOnWAHelper == true then + makeXMLButton() + self.clearContextMenu() + self.addContextMenuItem("Clear Helper", deleteButton) + end + end +end + +function makeXMLButton() + turnOnWAHelper = true + self.clearContextMenu() + self.addContextMenuItem("Clear Helper", deleteButton) + + self.UI.setXmlTable({ + { + tag = "Button", + attributes = { + height = 320, + width = 1100, + rotation = "0 0 90", + scale = "0.1 0.1 1", + position = "70 -70 -22", + padding = "50 50 50 50", + font = "font_teutonic-arkham", + fontSize = 200, + onClick = "Global/makeButtonsToRedraw()", + id = "all", + color = "#77674DE6", + textColor = "White" + }, + value = "Redraw Token" + } + } + ) +end + +-- Delete button +function deleteButton() + self.clearContextMenu() + self.addContextMenuItem("Enable Helper", makeXMLButton) + self.UI.setXml("") + turnOnHFHelper = false +end \ No newline at end of file From 2fcfda2bfeeb26487e0592a7b77a71df4f30e6e3 Mon Sep 17 00:00:00 2001 From: dscarpac Date: Sun, 23 Jun 2024 12:40:43 -0500 Subject: [PATCH 2/9] updates with redraw require file --- src/chaosbag/BlessCurseManager.ttslua | 4 +- src/chaosbag/BlessCurseManagerApi.ttslua | 6 +- src/core/Global.ttslua | 61 ++++++++++------- src/playercards/CardsThatRedrawTokens.ttslua | 61 +++++++++++++++++ src/playercards/cards/ClaypoolsFurs.ttslua | 59 ++--------------- .../cards/CustomModifications.ttslua | 59 ++--------------- src/playercards/cards/FalseCovenant.ttslua | 65 +++---------------- src/playercards/cards/HeavyFurs.ttslua | 59 ++--------------- src/playercards/cards/NkosiMabati3.ttslua | 10 ++- src/playercards/cards/WendyAdams.ttslua | 62 +++--------------- 10 files changed, 148 insertions(+), 298 deletions(-) create mode 100644 src/playercards/CardsThatRedrawTokens.ttslua diff --git a/src/chaosbag/BlessCurseManager.ttslua b/src/chaosbag/BlessCurseManager.ttslua index a9d40ac9..0d8f50eb 100644 --- a/src/chaosbag/BlessCurseManager.ttslua +++ b/src/chaosbag/BlessCurseManager.ttslua @@ -236,8 +236,8 @@ function releasedToken(param) break end end - log(param) - if not param.fromDrawn or param.fromDrawn == false then + + if not param.fromBag then updateDisplayAndBroadcast(param.type) end end diff --git a/src/chaosbag/BlessCurseManagerApi.ttslua b/src/chaosbag/BlessCurseManagerApi.ttslua index 901678f9..2aa76532 100644 --- a/src/chaosbag/BlessCurseManagerApi.ttslua +++ b/src/chaosbag/BlessCurseManagerApi.ttslua @@ -24,9 +24,9 @@ do -- updates the internal count (called by cards that seal bless/curse tokens) ---@param type string Type of chaos token ("Bless" or "Curse") ---@param guid string GUID of the token - ---@param fromDrawn? boolean Whether or not token was just drawn from the chaos bag - BlessCurseManagerApi.releasedToken = function(type, guid, fromDrawn) - getManager().call("releasedToken", { type = type, guid = guid, fromDrawn = fromDrawn }) + ---@param fromBag? boolean Whether or not token was just drawn from the chaos bag + BlessCurseManagerApi.releasedToken = function(type, guid, fromBag) + getManager().call("releasedToken", { type = type, guid = guid, fromBag = fromBag }) end -- updates the internal count (called by cards that seal bless/curse tokens) diff --git a/src/core/Global.ttslua b/src/core/Global.ttslua index df108d1c..47237d07 100644 --- a/src/core/Global.ttslua +++ b/src/core/Global.ttslua @@ -261,6 +261,7 @@ function returnChaosTokens() if token ~= nil then chaosBag.putObject(token) end end chaosTokens = {} + isTokenXMLActive = false end -- returns a single chaos token to the bag and calls respective functions @@ -283,11 +284,17 @@ function getTokenIndex(token) end end -function makeButtonsToRedraw(player, tokenList, id) - -- passed from Nkosi, usually, bypassing XML buttons - if type(player) == "table" then - tokenList = player.tokenList - id = player.id +function activeRedrawEffect(originParams) + triggeringCard = originParams.triggeringCard + redrawEligibilty = originParams.redrawEligibilty + redrawnTokenType = originParams.redrawnTokenType + tokenList = originParams.tokenList +end + +function makeButtonsToRedraw() + if isTokenXMLActive == true then + broadcastToAll("Clear already active buttons first, then try again", "Red") + return end local tokensInPlay = getChaosTokensinPlay() @@ -295,35 +302,32 @@ function makeButtonsToRedraw(player, tokenList, id) broadcastToAll("No tokens found in play area", "Red") return end + local chaosbag = findChaosBag() local matchingTokensInPlay = {} -- determine if only some tokens are able to be returned to the bag - if id == "ineligible" then + if redrawEligibilty == "ineligible" then -- create list of tokens that should not get an XML button for _, token in ipairs(tokensInPlay) do if string.find(tokenList, token.getName(), 1, true) == nil then matchingTokensInPlay[#matchingTokensInPlay + 1] = token end end - if #matchingTokensInPlay == 0 then - broadcastToAll("No eligible token found in play area", "Red") - return - end - elseif id == "all" then - -- for any cards that can replace any tokens - matchingTokensInPlay = tokensInPlay - else + elseif redrawEligibilty == "eligible" then -- cards that dictate only some tokens are eligible for replacement for _, token in ipairs(tokensInPlay) do if string.find(tokenList, token.getName()) then matchingTokensInPlay[#matchingTokensInPlay + 1] = token end end + else + -- for any cards that can replace any tokens + matchingTokensInPlay = tokensInPlay + end - if #matchingTokensInPlay == 0 then - broadcastToAll("No eligible token found in play area", "Red") - return - end + if #matchingTokensInPlay == 0 then + broadcastToAll("No eligible token found in play area", "Red") + return end if #matchingTokensInPlay > 1 then @@ -342,7 +346,6 @@ function makeButtonsToRedraw(player, tokenList, id) position = "0 0 -15", color = "rgba(0,0,0,0.7)", onClick = "Global/returnAndRedraw(" .. token.getGUID() .. ")", - id = id }, children = { { @@ -367,19 +370,21 @@ function makeButtonsToRedraw(player, tokenList, id) } }) end + isTokenXMLActive = true -- no need to make buttons if there is only one eligible token to return and redraw else - returnAndRedraw(_, matchingTokensInPlay[1].getGUID(), id) + returnAndRedraw(_, matchingTokensInPlay[1].getGUID()) end end -function returnAndRedraw(_, tokenGUID, id) +function returnAndRedraw(_, tokenGUID) local indexOfReturnedToken local takeParameters = {} local returnedToken = getObjectFromGUID(tokenGUID) local matColor = playmatApi.getMatColorByPosition(returnedToken.getPosition()) local mat = guidReferenceApi.getObjectByOwnerAndType(matColor, "Playermat") + isTokenXMLActive = false trackChaosToken(returnedToken.getName(), mat.getGUID(), true) indexOfReturnedToken = getTokenIndex(returnedToken) takeParameters.position = returnedToken.getPosition() @@ -391,20 +396,26 @@ function returnAndRedraw(_, tokenGUID, id) end returnChaosTokenToBag(returnedToken) - if string.find("all|eligible|ineligible|falseCovenant", id) then - token = drawChaosToken({mat = mat, drawAdditional = true, takeParameters = takeParameters}) + if redrawnTokenType == "random" then + token = drawChaosToken({mat = mat, drawAdditional = true, takeParameters = takeParameters}) else - token = drawChaosToken({mat = mat, drawAdditional = true, takeParameters = takeParameters, tokenType = id}) + token = drawChaosToken({mat = mat, drawAdditional = true, takeParameters = takeParameters, tokenType = redrawnTokenType}) end chaosTokens[indexOfReturnedToken] = token - if id == "falseCovenant" then + if triggeringCard == "FalseCovenant" then blessCurseManagerApi.removeToken("Curse") end -- remove XML from tokens in play for _, token in ipairs(getChaosTokensinPlay()) do token.UI.setXml("") end + + triggeringCard = nil + redrawEligibilty = nil + redrawnTokenType = nil + tokenList = nil + end -- Checks to see if the chaos bag can be manipulated. If a player is searching the bag when tokens diff --git a/src/playercards/CardsThatRedrawTokens.ttslua b/src/playercards/CardsThatRedrawTokens.ttslua new file mode 100644 index 00000000..bbaf3a24 --- /dev/null +++ b/src/playercards/CardsThatRedrawTokens.ttslua @@ -0,0 +1,61 @@ +local turnOnHelper + +function onSave() + return JSON.encode(turnOnHelper) +end + +function onLoad(savedData) + self.addContextMenuItem("Enable Helper", makeXMLButton) + + if savedData and savedData ~= "" then + turnOnHelper = JSON.decode(savedData) + if turnOnHelper == true then + makeXMLButton() + self.clearContextMenu() + self.addContextMenuItem("Clear Helper", deleteButton) + end + end +end + +function makeXMLButton() + turnOnHelper = true + self.clearContextMenu() + self.addContextMenuItem("Clear Helper", deleteButton) + log(color) + local xmlTable = {{ + tag = "Button", + attributes = { + height = 450, + width = 1400, + rotation = rotation or "0 0 180", + scale = "0.1 0.1 1", + position = position or "0 -55 -22", + padding = "50 50 50 50", + font = "font_teutonic-arkham", + fontSize = fontSize or 250, + onClick = "triggerXMLTokenLabelCreation()", + color = color or "#77674DE6", + textColor = "White" + }, + value = value or "Redraw Token" + }} + if icon then + xmlTable[1].attributes.iconWidth = "400" + xmlTable[1].attributes.iconAlignment = "Right" + xmlTable[1].attributes.icon = icon + end + self.UI.setXmlTable(xmlTable) +end + +function triggerXMLTokenLabelCreation() + Global.call("activeRedrawEffect", originParams) + Global.call("makeButtonsToRedraw") +end + +-- Delete button +function deleteButton() + self.clearContextMenu() + self.addContextMenuItem("Enable Helper", makeXMLButton) + self.UI.setXml("") + turnOnHelper = false +end \ No newline at end of file diff --git a/src/playercards/cards/ClaypoolsFurs.ttslua b/src/playercards/cards/ClaypoolsFurs.ttslua index bd646734..c3ee26f9 100644 --- a/src/playercards/cards/ClaypoolsFurs.ttslua +++ b/src/playercards/cards/ClaypoolsFurs.ttslua @@ -1,55 +1,8 @@ -local turnOnCFHelper - -function onSave() - return JSON.encode(turnOnCFHelper) -end - -function onLoad(savedData) - self.addContextMenuItem("Enable Helper", makeXMLButton) - - if savedData ~= "" then - turnOnCFHelper = JSON.decode(savedData) - if turnOnCFHelper == true then - makeXMLButton() - self.clearContextMenu() - self.addContextMenuItem("Clear Helper", deleteButton) - end - end -end - -function makeXMLButton() - turnOnCFHelper = true - self.clearContextMenu() - self.addContextMenuItem("Clear Helper", deleteButton) - +originParams = { + triggeringCard = "ClaypoolsFurs", + redrawEligibilty = "eligible", + redrawnTokenType = "random", tokenList = "Frost" - self.UI.setXmlTable({ - { - tag = "Button", - attributes = { - height = 450, - width = 1400, - rotation = "0 0 180", - scale = "0.1 0.1 1", - position = "0 -55 -22", - padding = "50 50 50 50", - font = "font_teutonic-arkham", - fontSize = 250, - onClick = "Global/makeButtonsToRedraw(".. tokenList ..")", - id = "eligible", - color = "#77674DE6", - textColor = "White" - }, - value = "Redraw Token" - } - } - ) -end +} --- Delete button -function deleteButton() - self.clearContextMenu() - self.addContextMenuItem("Enable Helper", makeXMLButton) - self.UI.setXml("") - turnOnCFHelper = false -end \ No newline at end of file +require("playercards/CardsThatRedrawTokens") \ No newline at end of file diff --git a/src/playercards/cards/CustomModifications.ttslua b/src/playercards/cards/CustomModifications.ttslua index 8d0f8341..b4f083b4 100644 --- a/src/playercards/cards/CustomModifications.ttslua +++ b/src/playercards/cards/CustomModifications.ttslua @@ -1,55 +1,8 @@ -local turnOnCMHelper - -function onSave() - return JSON.encode(turnOnCMHelper) -end - -function onLoad(savedData) - self.addContextMenuItem("Enable Helper", makeXMLButton) - - if savedData ~= "" then - turnOnCMHelper = JSON.decode(savedData) - if turnOnCMHelper == true then - makeXMLButton() - self.clearContextMenu() - self.addContextMenuItem("Clear Helper", deleteButton) - end - end -end - -function makeXMLButton() - turnOnCMHelper = true - self.clearContextMenu() - self.addContextMenuItem("Clear Helper", deleteButton) - +originParams = { + triggeringCard = "CustomModifications", + redrawEligibilty = "ineligible", + redrawnTokenType = "random", tokenList = "Auto-fail" - self.UI.setXmlTable({ - { - tag = "Button", - attributes = { - height = 450, - width = 1400, - rotation = "0 0 180", - scale = "0.1 0.1 1", - position = "0 -55 -22", - padding = "50 50 50 50", - font = "font_teutonic-arkham", - fontSize = 250, - onClick = "Global/makeButtonsToRedraw(".. tokenList ..")", - id = "ineligible", - color = "#77674DE6", - textColor = "White" - }, - value = "Redraw Token" - } - } - ) -end +} --- Delete button -function deleteButton() - self.clearContextMenu() - self.addContextMenuItem("Enable Helper", makeXMLButton) - self.UI.setXml("") - turnOnCMHelper = false -end +require("playercards/CardsThatRedrawTokens") \ No newline at end of file diff --git a/src/playercards/cards/FalseCovenant.ttslua b/src/playercards/cards/FalseCovenant.ttslua index 8a2b32f4..ef761e2b 100644 --- a/src/playercards/cards/FalseCovenant.ttslua +++ b/src/playercards/cards/FalseCovenant.ttslua @@ -1,58 +1,13 @@ -local turnOnFCHelper - -function onSave() - return JSON.encode(turnOnFCHelper) -end - -function onLoad(savedData) - self.addContextMenuItem("Enable Helper", makeXMLButton) - - if savedData ~= "" then - turnOnFCHelper = JSON.decode(savedData) - if turnOnFCHelper == true then - makeXMLButton() - self.clearContextMenu() - self.addContextMenuItem("Clear Helper", deleteButton) - end - end -end - -function makeXMLButton() - turnOnFCHelper = true - self.clearContextMenu() - self.addContextMenuItem("Clear Helper", deleteButton) +value = "Cancel" +icon = "token-curse" +color = "#633A84E6" +fontSize = 300 +originParams = { + triggeringCard = "FalseCovenant", + redrawEligibilty = "eligible", + redrawnTokenType = "random", tokenList = "Curse" - self.UI.setXmlTable({ - { - tag = "Button", - attributes = { - height = 450, - width = 1400, - rotation = "0 0 180", - scale = "0.1 0.1 1", - position = "0 -55 -22", - padding = "50 50 50 50", - font = "font_teutonic-arkham", - fontSize = 300, - onClick = "Global/makeButtonsToRedraw(".. tokenList ..")", - id = "falseCovenant", - color = "#633A84E6", - textColor = "White", - iconWidth = "400", - iconAlignment = "Right", - icon = "token-curse" - }, - value = "Cancel" - } - } - ) -end +} --- Delete button -function deleteButton() - self.clearContextMenu() - self.addContextMenuItem("Enable Helper", makeXMLButton) - self.UI.setXml("") - turnOnFCHelper = false -end +require("playercards/CardsThatRedrawTokens") \ No newline at end of file diff --git a/src/playercards/cards/HeavyFurs.ttslua b/src/playercards/cards/HeavyFurs.ttslua index aa021de3..eb453604 100644 --- a/src/playercards/cards/HeavyFurs.ttslua +++ b/src/playercards/cards/HeavyFurs.ttslua @@ -1,55 +1,8 @@ -local turnOnHFHelper - -function onSave() - return JSON.encode(turnOnHFHelper) -end - -function onLoad(savedData) - self.addContextMenuItem("Enable Helper", makeXMLButton) - - if savedData ~= "" then - turnOnHFHelper = JSON.decode(savedData) - if turnOnHFHelper == true then - makeXMLButton() - self.clearContextMenu() - self.addContextMenuItem("Clear Helper", deleteButton) - end - end -end - -function makeXMLButton() - turnOnHFHelper = true - self.clearContextMenu() - self.addContextMenuItem("Clear Helper", deleteButton) - +originParams = { + triggeringCard = "HeavyFurs", + redrawEligibilty = "eligible", + redrawnTokenType = "random", tokenList = "Skull|Tablet|Elder Thing|Cultist|Frost|Custom Token|Elder Sign|Bless|Curse" - self.UI.setXmlTable({ - { - tag = "Button", - attributes = { - height = 450, - width = 1400, - rotation = "0 0 180", - scale = "0.1 0.1 1", - position = "0 -55 -22", - padding = "50 50 50 50", - font = "font_teutonic-arkham", - fontSize = 250, - onClick = "Global/makeButtonsToRedraw(".. tokenList ..")", - id = "eligible", - color = "#77674DE6", - textColor = "White" - }, - value = "Redraw Token" - } - } - ) -end +} --- Delete button -function deleteButton() - self.clearContextMenu() - self.addContextMenuItem("Enable Helper", makeXMLButton) - self.UI.setXml("") - turnOnHFHelper = false -end \ No newline at end of file +require("playercards/CardsThatRedrawTokens") \ No newline at end of file diff --git a/src/playercards/cards/NkosiMabati3.ttslua b/src/playercards/cards/NkosiMabati3.ttslua index 0ab916ff..e8395a91 100644 --- a/src/playercards/cards/NkosiMabati3.ttslua +++ b/src/playercards/cards/NkosiMabati3.ttslua @@ -107,6 +107,12 @@ function resolveSigil() return end - params = { tokenList = "Tablet|Elder Thing|Cultist", id = sigil} - Global.call("makeButtonsToRedraw", params) + originParams = { + triggeringCard = "Nkosi", + redrawEligibilty = "eligible", + redrawnTokenType = sigil, + tokenList = "Tablet|Elder Thing|Cultist" + } + Global.call("activeRedrawEffect", originParams) + Global.call("makeButtonsToRedraw") end \ No newline at end of file diff --git a/src/playercards/cards/WendyAdams.ttslua b/src/playercards/cards/WendyAdams.ttslua index 94e25bba..651ae6e5 100644 --- a/src/playercards/cards/WendyAdams.ttslua +++ b/src/playercards/cards/WendyAdams.ttslua @@ -1,54 +1,12 @@ -local turnOnWAHelper +position = "70 -70 -22" +fontSize = 200 +rotation = "0 0 90" -function onSave() - return JSON.encode(turnOnWAHelper) -end +originParams = { + triggeringCard = "Wendy", + redrawEligibilty = "all", + redrawnTokenType = "random", + tokenList = "all" +} -function onLoad(savedData) - self.addContextMenuItem("Enable Helper", makeXMLButton) - - if savedData ~= "" then - turnOnWAHelper = JSON.decode(savedData) - if turnOnWAHelper == true then - makeXMLButton() - self.clearContextMenu() - self.addContextMenuItem("Clear Helper", deleteButton) - end - end -end - -function makeXMLButton() - turnOnWAHelper = true - self.clearContextMenu() - self.addContextMenuItem("Clear Helper", deleteButton) - - self.UI.setXmlTable({ - { - tag = "Button", - attributes = { - height = 320, - width = 1100, - rotation = "0 0 90", - scale = "0.1 0.1 1", - position = "70 -70 -22", - padding = "50 50 50 50", - font = "font_teutonic-arkham", - fontSize = 200, - onClick = "Global/makeButtonsToRedraw()", - id = "all", - color = "#77674DE6", - textColor = "White" - }, - value = "Redraw Token" - } - } - ) -end - --- Delete button -function deleteButton() - self.clearContextMenu() - self.addContextMenuItem("Enable Helper", makeXMLButton) - self.UI.setXml("") - turnOnHFHelper = false -end \ No newline at end of file +require("playercards/CardsThatRedrawTokens") \ No newline at end of file From 99605b049adf31e43bd1075dd215aecd5069dbf0 Mon Sep 17 00:00:00 2001 From: dscarpac Date: Sun, 23 Jun 2024 16:38:55 -0500 Subject: [PATCH 3/9] added color for Claypool --- src/playercards/cards/ClaypoolsFurs.ttslua | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/playercards/cards/ClaypoolsFurs.ttslua b/src/playercards/cards/ClaypoolsFurs.ttslua index c3ee26f9..06712be3 100644 --- a/src/playercards/cards/ClaypoolsFurs.ttslua +++ b/src/playercards/cards/ClaypoolsFurs.ttslua @@ -1,3 +1,8 @@ +value = "Cancel" +icon = "token-frost" +color = "#404450E6" +fontSize = 300 + originParams = { triggeringCard = "ClaypoolsFurs", redrawEligibilty = "eligible", From 0f347b757467e612910812e36ab1e41af2a09925 Mon Sep 17 00:00:00 2001 From: dscarpac Date: Sun, 23 Jun 2024 16:56:21 -0500 Subject: [PATCH 4/9] collapsed originParams into table in Global --- src/core/Global.ttslua | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/core/Global.ttslua b/src/core/Global.ttslua index 47237d07..345d9389 100644 --- a/src/core/Global.ttslua +++ b/src/core/Global.ttslua @@ -285,14 +285,11 @@ function getTokenIndex(token) end function activeRedrawEffect(originParams) - triggeringCard = originParams.triggeringCard - redrawEligibilty = originParams.redrawEligibilty - redrawnTokenType = originParams.redrawnTokenType - tokenList = originParams.tokenList + dataFromLastReplacementEffect = originParams end function makeButtonsToRedraw() - if isTokenXMLActive == true then + if isTokenXMLActive == true then broadcastToAll("Clear already active buttons first, then try again", "Red") return end @@ -306,17 +303,17 @@ function makeButtonsToRedraw() local chaosbag = findChaosBag() local matchingTokensInPlay = {} -- determine if only some tokens are able to be returned to the bag - if redrawEligibilty == "ineligible" then + if dataFromLastReplacementEffect.redrawEligibilty == "ineligible" then -- create list of tokens that should not get an XML button for _, token in ipairs(tokensInPlay) do - if string.find(tokenList, token.getName(), 1, true) == nil then + if string.find(dataFromLastReplacementEffect.tokenList, token.getName(), 1, true) == nil then matchingTokensInPlay[#matchingTokensInPlay + 1] = token end end - elseif redrawEligibilty == "eligible" then + elseif dataFromLastReplacementEffect.redrawEligibilty == "eligible" then -- cards that dictate only some tokens are eligible for replacement for _, token in ipairs(tokensInPlay) do - if string.find(tokenList, token.getName()) then + if string.find(dataFromLastReplacementEffect.tokenList, token.getName()) then matchingTokensInPlay[#matchingTokensInPlay + 1] = token end end @@ -396,10 +393,10 @@ function returnAndRedraw(_, tokenGUID) end returnChaosTokenToBag(returnedToken) - if redrawnTokenType == "random" then + if dataFromLastReplacementEffect.redrawnTokenType == "random" then token = drawChaosToken({mat = mat, drawAdditional = true, takeParameters = takeParameters}) else - token = drawChaosToken({mat = mat, drawAdditional = true, takeParameters = takeParameters, tokenType = redrawnTokenType}) + token = drawChaosToken({mat = mat, drawAdditional = true, takeParameters = takeParameters, tokenType = dataFromLastReplacementEffect.redrawnTokenType}) end chaosTokens[indexOfReturnedToken] = token @@ -411,10 +408,7 @@ function returnAndRedraw(_, tokenGUID) token.UI.setXml("") end - triggeringCard = nil - redrawEligibilty = nil - redrawnTokenType = nil - tokenList = nil + dataFromLastReplacementEffect = {} end From 7f836ed2d53057af66f3c80f52fdad637b97e7e1 Mon Sep 17 00:00:00 2001 From: dscarpac Date: Mon, 24 Jun 2024 10:04:09 -0500 Subject: [PATCH 5/9] some updates --- src/core/Global.ttslua | 22 ++++++++-------- src/playercards/CardsThatRedrawTokens.ttslua | 25 ++++++++----------- src/playercards/cards/ClaypoolsFurs.ttslua | 12 +++++---- .../cards/CustomModifications.ttslua | 4 ++- src/playercards/cards/FalseCovenant.ttslua | 12 +++++---- src/playercards/cards/HeavyFurs.ttslua | 12 ++++++++- src/playercards/cards/NkosiMabati3.ttslua | 8 +++--- src/playercards/cards/WendyAdams.ttslua | 9 ++++--- 8 files changed, 59 insertions(+), 45 deletions(-) diff --git a/src/core/Global.ttslua b/src/core/Global.ttslua index 345d9389..dba529ec 100644 --- a/src/core/Global.ttslua +++ b/src/core/Global.ttslua @@ -286,6 +286,7 @@ end function activeRedrawEffect(originParams) dataFromLastReplacementEffect = originParams + makeButtonsToRedraw() end function makeButtonsToRedraw() @@ -294,8 +295,7 @@ function makeButtonsToRedraw() return end - local tokensInPlay = getChaosTokensinPlay() - if #tokensInPlay == 0 then + if #chaosTokens == 0 then broadcastToAll("No tokens found in play area", "Red") return end @@ -305,21 +305,21 @@ function makeButtonsToRedraw() -- determine if only some tokens are able to be returned to the bag if dataFromLastReplacementEffect.redrawEligibilty == "ineligible" then -- create list of tokens that should not get an XML button - for _, token in ipairs(tokensInPlay) do - if string.find(dataFromLastReplacementEffect.tokenList, token.getName(), 1, true) == nil then + for _, token in ipairs(chaosTokens) do + if not dataFromLastReplacementEffect.tokenList[getReadableTokenName(token.getName())] then matchingTokensInPlay[#matchingTokensInPlay + 1] = token end end elseif dataFromLastReplacementEffect.redrawEligibilty == "eligible" then -- cards that dictate only some tokens are eligible for replacement - for _, token in ipairs(tokensInPlay) do - if string.find(dataFromLastReplacementEffect.tokenList, token.getName()) then + for _, token in ipairs(chaosTokens) do + if dataFromLastReplacementEffect.tokenList[getReadableTokenName(token.getName())] then matchingTokensInPlay[#matchingTokensInPlay + 1] = token end end else -- for any cards that can replace any tokens - matchingTokensInPlay = tokensInPlay + matchingTokensInPlay = chaosTokens end if #matchingTokensInPlay == 0 then @@ -375,7 +375,6 @@ function makeButtonsToRedraw() end function returnAndRedraw(_, tokenGUID) - local indexOfReturnedToken local takeParameters = {} local returnedToken = getObjectFromGUID(tokenGUID) local matColor = playmatApi.getMatColorByPosition(returnedToken.getPosition()) @@ -383,7 +382,7 @@ function returnAndRedraw(_, tokenGUID) isTokenXMLActive = false trackChaosToken(returnedToken.getName(), mat.getGUID(), true) - indexOfReturnedToken = getTokenIndex(returnedToken) + local indexOfReturnedToken = getTokenIndex(returnedToken) takeParameters.position = returnedToken.getPosition() if #chaosTokens > indexOfReturnedToken then @@ -400,7 +399,7 @@ function returnAndRedraw(_, tokenGUID) end chaosTokens[indexOfReturnedToken] = token - if triggeringCard == "FalseCovenant" then + if dataFromLastReplacementEffect.triggeringCard == "FalseCovenant" then blessCurseManagerApi.removeToken("Curse") end -- remove XML from tokens in play @@ -463,8 +462,8 @@ function drawChaosToken(params) if params.drawAdditional or #chaosTokens == 0 then local chaosBag = findChaosBag() if #chaosBag.getObjects() == 0 then return end + chaosBag.shuffle() - local indexOfReturnedToken local takeParameters = {} -- add the token to the list, compute new position based on list length @@ -477,7 +476,6 @@ function drawChaosToken(params) takeParameters.rotation = params.mat.getRotation() end - chaosBag.shuffle() local token if params.guidToBeResolved then diff --git a/src/playercards/CardsThatRedrawTokens.ttslua b/src/playercards/CardsThatRedrawTokens.ttslua index bbaf3a24..d2306f0a 100644 --- a/src/playercards/CardsThatRedrawTokens.ttslua +++ b/src/playercards/CardsThatRedrawTokens.ttslua @@ -11,8 +11,6 @@ function onLoad(savedData) turnOnHelper = JSON.decode(savedData) if turnOnHelper == true then makeXMLButton() - self.clearContextMenu() - self.addContextMenuItem("Clear Helper", deleteButton) end end end @@ -21,35 +19,34 @@ function makeXMLButton() turnOnHelper = true self.clearContextMenu() self.addContextMenuItem("Clear Helper", deleteButton) - log(color) local xmlTable = {{ tag = "Button", attributes = { - height = 450, - width = 1400, - rotation = rotation or "0 0 180", + height = buttonHeight or 450, + width = buttonWidth or 1400, + rotation = buttonRotation or "0 0 180", scale = "0.1 0.1 1", - position = position or "0 -55 -22", + position = buttonPosition or "0 -55 -22", padding = "50 50 50 50", font = "font_teutonic-arkham", - fontSize = fontSize or 250, + fontSize = buttonFontSize or 250, onClick = "triggerXMLTokenLabelCreation()", - color = color or "#77674DE6", + color = buttonColor or "#77674DE6", textColor = "White" }, - value = value or "Redraw Token" + value = buttonValue or "Redraw Token" }} - if icon then + if buttonIcon then xmlTable[1].attributes.iconWidth = "400" xmlTable[1].attributes.iconAlignment = "Right" - xmlTable[1].attributes.icon = icon + xmlTable[1].attributes.icon = buttonIcon end self.UI.setXmlTable(xmlTable) end function triggerXMLTokenLabelCreation() - Global.call("activeRedrawEffect", originParams) - Global.call("makeButtonsToRedraw") + -- needs to be its own function in order to pass originParams as a table + Global.call("activeRedrawEffect", originParams) end -- Delete button diff --git a/src/playercards/cards/ClaypoolsFurs.ttslua b/src/playercards/cards/ClaypoolsFurs.ttslua index 06712be3..099dfde1 100644 --- a/src/playercards/cards/ClaypoolsFurs.ttslua +++ b/src/playercards/cards/ClaypoolsFurs.ttslua @@ -1,13 +1,15 @@ -value = "Cancel" -icon = "token-frost" -color = "#404450E6" -fontSize = 300 +buttonValue = "Cancel" +buttonIcon = "token-frost" +buttonColor = "#404450E6" +buttonFontSize = 300 originParams = { triggeringCard = "ClaypoolsFurs", redrawEligibilty = "eligible", redrawnTokenType = "random", - tokenList = "Frost" + tokenList = { + ["Frost"] = true + } } require("playercards/CardsThatRedrawTokens") \ No newline at end of file diff --git a/src/playercards/cards/CustomModifications.ttslua b/src/playercards/cards/CustomModifications.ttslua index b4f083b4..c7669281 100644 --- a/src/playercards/cards/CustomModifications.ttslua +++ b/src/playercards/cards/CustomModifications.ttslua @@ -2,7 +2,9 @@ originParams = { triggeringCard = "CustomModifications", redrawEligibilty = "ineligible", redrawnTokenType = "random", - tokenList = "Auto-fail" + tokenList = { + ["Auto-fail"] = true + } } require("playercards/CardsThatRedrawTokens") \ No newline at end of file diff --git a/src/playercards/cards/FalseCovenant.ttslua b/src/playercards/cards/FalseCovenant.ttslua index ef761e2b..4661e073 100644 --- a/src/playercards/cards/FalseCovenant.ttslua +++ b/src/playercards/cards/FalseCovenant.ttslua @@ -1,13 +1,15 @@ -value = "Cancel" -icon = "token-curse" -color = "#633A84E6" -fontSize = 300 +buttonValue = "Cancel" +buttonIcon = "token-curse" +buttonColor = "#633A84E6" +buttonFontSize = 300 originParams = { triggeringCard = "FalseCovenant", redrawEligibilty = "eligible", redrawnTokenType = "random", - tokenList = "Curse" + tokenList = { + ["Curse"] = true + } } require("playercards/CardsThatRedrawTokens") \ No newline at end of file diff --git a/src/playercards/cards/HeavyFurs.ttslua b/src/playercards/cards/HeavyFurs.ttslua index eb453604..fba8bb92 100644 --- a/src/playercards/cards/HeavyFurs.ttslua +++ b/src/playercards/cards/HeavyFurs.ttslua @@ -2,7 +2,17 @@ originParams = { triggeringCard = "HeavyFurs", redrawEligibilty = "eligible", redrawnTokenType = "random", - tokenList = "Skull|Tablet|Elder Thing|Cultist|Frost|Custom Token|Elder Sign|Bless|Curse" + tokenList = { + ["Skull"] = true, + ["Tablet"] = true, + ["Elder Thing"] = true, + ["Cultist"] = true, + ["Frost"] = true, + ["Custom Token"] = true, + ["Elder Sign"] = true, + ["Bless"] = true, + ["Curse"] = true + } } require("playercards/CardsThatRedrawTokens") \ No newline at end of file diff --git a/src/playercards/cards/NkosiMabati3.ttslua b/src/playercards/cards/NkosiMabati3.ttslua index e8395a91..c8052956 100644 --- a/src/playercards/cards/NkosiMabati3.ttslua +++ b/src/playercards/cards/NkosiMabati3.ttslua @@ -50,7 +50,6 @@ function makeXMLButton() iconWidth = "400", iconAlignment = "Right", onClick = "resolveSigil", - id = eligible, icon = iconName, color = tokenColor[sigil], textColor = "White" @@ -111,8 +110,11 @@ function resolveSigil() triggeringCard = "Nkosi", redrawEligibilty = "eligible", redrawnTokenType = sigil, - tokenList = "Tablet|Elder Thing|Cultist" + tokenList = { + ["Tablet"] = true, + ["Elder Thing"] = true, + ["Cultist"] = true + } } Global.call("activeRedrawEffect", originParams) - Global.call("makeButtonsToRedraw") end \ No newline at end of file diff --git a/src/playercards/cards/WendyAdams.ttslua b/src/playercards/cards/WendyAdams.ttslua index 651ae6e5..9e72f098 100644 --- a/src/playercards/cards/WendyAdams.ttslua +++ b/src/playercards/cards/WendyAdams.ttslua @@ -1,12 +1,13 @@ -position = "70 -70 -22" -fontSize = 200 -rotation = "0 0 90" +buttonHeight = "320" +buttonWidth = "1100" +buttonPosition = "70 -70 -22" +buttonFontSize = 200 +buttonRotation = "0 0 90" originParams = { triggeringCard = "Wendy", redrawEligibilty = "all", redrawnTokenType = "random", - tokenList = "all" } require("playercards/CardsThatRedrawTokens") \ No newline at end of file From ed791439647be55f1f3b4127bb469429e0aa6012 Mon Sep 17 00:00:00 2001 From: dscarpac Date: Mon, 24 Jun 2024 13:48:29 -0500 Subject: [PATCH 6/9] more updates --- src/core/Global.ttslua | 50 ++++++++++--------- src/playercards/CardsThatRedrawTokens.ttslua | 1 + src/playercards/cards/ClaypoolsFurs.ttslua | 3 +- .../cards/CustomModifications.ttslua | 4 +- src/playercards/cards/FalseCovenant.ttslua | 3 +- src/playercards/cards/HeavyFurs.ttslua | 5 +- src/playercards/cards/NkosiMabati3.ttslua | 3 +- src/playercards/cards/WendyAdams.ttslua | 3 +- 8 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/core/Global.ttslua b/src/core/Global.ttslua index dba529ec..940aaffa 100644 --- a/src/core/Global.ttslua +++ b/src/core/Global.ttslua @@ -285,7 +285,7 @@ function getTokenIndex(token) end function activeRedrawEffect(originParams) - dataFromLastReplacementEffect = originParams + redrawData = originParams makeButtonsToRedraw() end @@ -302,24 +302,19 @@ function makeButtonsToRedraw() local chaosbag = findChaosBag() local matchingTokensInPlay = {} + -- determine if only some tokens are able to be returned to the bag - if dataFromLastReplacementEffect.redrawEligibilty == "ineligible" then - -- create list of tokens that should not get an XML button - for _, token in ipairs(chaosTokens) do - if not dataFromLastReplacementEffect.tokenList[getReadableTokenName(token.getName())] then - matchingTokensInPlay[#matchingTokensInPlay + 1] = token - end + for _, token in ipairs(chaosTokens) do + local tokenName = getReadableTokenName(token.getName()) + -- nil handling + redrawData.VALID_TOKENS = redrawData.VALID_TOKENS or {} + redrawData.INVALID_TOKENS = redrawData.INVALID_TOKENS or {} + + -- allow valid tokens or not invalid tokens, also allow any token if both lists empty + if (redrawData.VALID_TOKENS[tokenName] and #redrawData.INVALID_TOKENS == 0) ~= nil or (isTableEmpty(redrawData.VALID_TOKENS) and not redrawData.INVALID_TOKENS[tokenName]) or + (isTableEmpty(redrawData.VALID_TOKENS) and isTableEmpty(redrawData.INVALID_TOKENS)) then + table.insert(matchingTokensInPlay, token) end - elseif dataFromLastReplacementEffect.redrawEligibilty == "eligible" then - -- cards that dictate only some tokens are eligible for replacement - for _, token in ipairs(chaosTokens) do - if dataFromLastReplacementEffect.tokenList[getReadableTokenName(token.getName())] then - matchingTokensInPlay[#matchingTokensInPlay + 1] = token - end - end - else - -- for any cards that can replace any tokens - matchingTokensInPlay = chaosTokens end if #matchingTokensInPlay == 0 then @@ -392,14 +387,14 @@ function returnAndRedraw(_, tokenGUID) end returnChaosTokenToBag(returnedToken) - if dataFromLastReplacementEffect.redrawnTokenType == "random" then + if redrawData.redrawnTokenType == "random" then token = drawChaosToken({mat = mat, drawAdditional = true, takeParameters = takeParameters}) else - token = drawChaosToken({mat = mat, drawAdditional = true, takeParameters = takeParameters, tokenType = dataFromLastReplacementEffect.redrawnTokenType}) + token = drawChaosToken({mat = mat, drawAdditional = true, takeParameters = takeParameters, tokenType = redrawData.redrawnTokenType}) end chaosTokens[indexOfReturnedToken] = token - if dataFromLastReplacementEffect.triggeringCard == "FalseCovenant" then + if redrawData.triggeringCard == "FalseCovenant" then blessCurseManagerApi.removeToken("Curse") end -- remove XML from tokens in play @@ -407,8 +402,7 @@ function returnAndRedraw(_, tokenGUID) token.UI.setXml("") end - dataFromLastReplacementEffect = {} - + redrawData = {} end -- Checks to see if the chaos bag can be manipulated. If a player is searching the bag when tokens @@ -509,8 +503,8 @@ function drawChaosToken(params) if params.takeParameters then return token - else - chaosTokens[#chaosTokens + 1] = token + else + table.insert(chaosTokens, token) end else returnChaosTokens() @@ -1818,3 +1812,11 @@ function removeValueFromTable(t, val) end end end + +function isTableEmpty(tbl) + if next(tbl) == nil then + return true + else + return false + end +end diff --git a/src/playercards/CardsThatRedrawTokens.ttslua b/src/playercards/CardsThatRedrawTokens.ttslua index d2306f0a..d6f0d901 100644 --- a/src/playercards/CardsThatRedrawTokens.ttslua +++ b/src/playercards/CardsThatRedrawTokens.ttslua @@ -46,6 +46,7 @@ end function triggerXMLTokenLabelCreation() -- needs to be its own function in order to pass originParams as a table + log(originParams) Global.call("activeRedrawEffect", originParams) end diff --git a/src/playercards/cards/ClaypoolsFurs.ttslua b/src/playercards/cards/ClaypoolsFurs.ttslua index 099dfde1..fa6ce4a3 100644 --- a/src/playercards/cards/ClaypoolsFurs.ttslua +++ b/src/playercards/cards/ClaypoolsFurs.ttslua @@ -5,9 +5,8 @@ buttonFontSize = 300 originParams = { triggeringCard = "ClaypoolsFurs", - redrawEligibilty = "eligible", redrawnTokenType = "random", - tokenList = { + VALID_TOKENS = { ["Frost"] = true } } diff --git a/src/playercards/cards/CustomModifications.ttslua b/src/playercards/cards/CustomModifications.ttslua index c7669281..3f567da5 100644 --- a/src/playercards/cards/CustomModifications.ttslua +++ b/src/playercards/cards/CustomModifications.ttslua @@ -1,8 +1,8 @@ originParams = { triggeringCard = "CustomModifications", - redrawEligibilty = "ineligible", redrawnTokenType = "random", - tokenList = { + VALID_TOKENS = {}, + INVALID_TOKENS = { ["Auto-fail"] = true } } diff --git a/src/playercards/cards/FalseCovenant.ttslua b/src/playercards/cards/FalseCovenant.ttslua index 4661e073..5c000239 100644 --- a/src/playercards/cards/FalseCovenant.ttslua +++ b/src/playercards/cards/FalseCovenant.ttslua @@ -5,9 +5,8 @@ buttonFontSize = 300 originParams = { triggeringCard = "FalseCovenant", - redrawEligibilty = "eligible", redrawnTokenType = "random", - tokenList = { + VALID_TOKENS = { ["Curse"] = true } } diff --git a/src/playercards/cards/HeavyFurs.ttslua b/src/playercards/cards/HeavyFurs.ttslua index fba8bb92..52b3b0c8 100644 --- a/src/playercards/cards/HeavyFurs.ttslua +++ b/src/playercards/cards/HeavyFurs.ttslua @@ -1,8 +1,7 @@ originParams = { triggeringCard = "HeavyFurs", - redrawEligibilty = "eligible", redrawnTokenType = "random", - tokenList = { + VALID_TOKENS = { ["Skull"] = true, ["Tablet"] = true, ["Elder Thing"] = true, @@ -12,7 +11,7 @@ originParams = { ["Elder Sign"] = true, ["Bless"] = true, ["Curse"] = true - } + }, } require("playercards/CardsThatRedrawTokens") \ No newline at end of file diff --git a/src/playercards/cards/NkosiMabati3.ttslua b/src/playercards/cards/NkosiMabati3.ttslua index c8052956..7b87637b 100644 --- a/src/playercards/cards/NkosiMabati3.ttslua +++ b/src/playercards/cards/NkosiMabati3.ttslua @@ -108,9 +108,8 @@ function resolveSigil() originParams = { triggeringCard = "Nkosi", - redrawEligibilty = "eligible", redrawnTokenType = sigil, - tokenList = { + VALID_TOKENS = { ["Tablet"] = true, ["Elder Thing"] = true, ["Cultist"] = true diff --git a/src/playercards/cards/WendyAdams.ttslua b/src/playercards/cards/WendyAdams.ttslua index 9e72f098..d02210ad 100644 --- a/src/playercards/cards/WendyAdams.ttslua +++ b/src/playercards/cards/WendyAdams.ttslua @@ -6,8 +6,9 @@ buttonRotation = "0 0 90" originParams = { triggeringCard = "Wendy", - redrawEligibilty = "all", redrawnTokenType = "random", + VALID_TOKENS = {}, + INVALID_TOKENS = {} } require("playercards/CardsThatRedrawTokens") \ No newline at end of file From 956e35f5e3b6a8cfb81cd7b78e45473ef95fea01 Mon Sep 17 00:00:00 2001 From: dscarpac Date: Mon, 24 Jun 2024 15:52:27 -0500 Subject: [PATCH 7/9] more fixes --- src/core/Global.ttslua | 15 ++++++++------- src/playercards/CardsThatRedrawTokens.ttslua | 1 - src/playercards/cards/WendyAdams.ttslua | 2 -- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/core/Global.ttslua b/src/core/Global.ttslua index 940aaffa..fe38cbca 100644 --- a/src/core/Global.ttslua +++ b/src/core/Global.ttslua @@ -300,18 +300,19 @@ function makeButtonsToRedraw() return end - local chaosbag = findChaosBag() local matchingTokensInPlay = {} + -- nil handling + redrawData.VALID_TOKENS = redrawData.VALID_TOKENS or {} + redrawData.INVALID_TOKENS = redrawData.INVALID_TOKENS or {} + -- determine if only some tokens are able to be returned to the bag for _, token in ipairs(chaosTokens) do local tokenName = getReadableTokenName(token.getName()) - -- nil handling - redrawData.VALID_TOKENS = redrawData.VALID_TOKENS or {} - redrawData.INVALID_TOKENS = redrawData.INVALID_TOKENS or {} + -- allow valid tokens or not invalid tokens, also allow any token if both lists empty - if (redrawData.VALID_TOKENS[tokenName] and #redrawData.INVALID_TOKENS == 0) ~= nil or (isTableEmpty(redrawData.VALID_TOKENS) and not redrawData.INVALID_TOKENS[tokenName]) or + if (redrawData.VALID_TOKENS[tokenName] ~= nil and isTableEmpty(redrawData.INVALID_TOKENS)) or (isTableEmpty(redrawData.VALID_TOKENS) and not redrawData.INVALID_TOKENS[tokenName]) or (isTableEmpty(redrawData.VALID_TOKENS) and isTableEmpty(redrawData.INVALID_TOKENS)) then table.insert(matchingTokensInPlay, token) end @@ -388,9 +389,9 @@ function returnAndRedraw(_, tokenGUID) returnChaosTokenToBag(returnedToken) if redrawData.redrawnTokenType == "random" then - token = drawChaosToken({mat = mat, drawAdditional = true, takeParameters = takeParameters}) + chaosTokens[indexOfReturnedToken] = drawChaosToken({mat = mat, drawAdditional = true, takeParameters = takeParameters}) else - token = drawChaosToken({mat = mat, drawAdditional = true, takeParameters = takeParameters, tokenType = redrawData.redrawnTokenType}) + chaosTokens[indexOfReturnedToken] = drawChaosToken({mat = mat, drawAdditional = true, takeParameters = takeParameters, tokenType = redrawData.redrawnTokenType}) end chaosTokens[indexOfReturnedToken] = token diff --git a/src/playercards/CardsThatRedrawTokens.ttslua b/src/playercards/CardsThatRedrawTokens.ttslua index d6f0d901..d2306f0a 100644 --- a/src/playercards/CardsThatRedrawTokens.ttslua +++ b/src/playercards/CardsThatRedrawTokens.ttslua @@ -46,7 +46,6 @@ end function triggerXMLTokenLabelCreation() -- needs to be its own function in order to pass originParams as a table - log(originParams) Global.call("activeRedrawEffect", originParams) end diff --git a/src/playercards/cards/WendyAdams.ttslua b/src/playercards/cards/WendyAdams.ttslua index d02210ad..bebaf623 100644 --- a/src/playercards/cards/WendyAdams.ttslua +++ b/src/playercards/cards/WendyAdams.ttslua @@ -7,8 +7,6 @@ buttonRotation = "0 0 90" originParams = { triggeringCard = "Wendy", redrawnTokenType = "random", - VALID_TOKENS = {}, - INVALID_TOKENS = {} } require("playercards/CardsThatRedrawTokens") \ No newline at end of file From a1155fe04129a27fafcf01643e768e2604e212c5 Mon Sep 17 00:00:00 2001 From: dscarpac Date: Mon, 24 Jun 2024 19:09:54 -0500 Subject: [PATCH 8/9] added comments to redraw library --- src/chaosbag/BlessCurseManagerApi.ttslua | 4 +- src/chaosbag/ChaosBagApi.ttslua | 2 +- src/core/Global.ttslua | 10 ++-- src/playercards/CardsThatRedrawTokens.ttslua | 59 ++++++++++++++++++++ 4 files changed, 68 insertions(+), 7 deletions(-) diff --git a/src/chaosbag/BlessCurseManagerApi.ttslua b/src/chaosbag/BlessCurseManagerApi.ttslua index 2aa76532..00290284 100644 --- a/src/chaosbag/BlessCurseManagerApi.ttslua +++ b/src/chaosbag/BlessCurseManagerApi.ttslua @@ -56,13 +56,13 @@ do end -- adds bless / curse to the chaos bag - -- @param type string Type of chaos token ("Bless" or "Curse") + ---@param type string Type of chaos token ("Bless" or "Curse") BlessCurseManagerApi.addToken = function(type) getManager().call("addToken", type) end -- removes bless / curse from the chaos bag - -- @param type string Type of chaos token ("Bless" or "Curse") + ---@param type string Type of chaos token ("Bless" or "Curse") BlessCurseManagerApi.removeToken = function(type) getManager().call("removeToken", type) end diff --git a/src/chaosbag/ChaosBagApi.ttslua b/src/chaosbag/ChaosBagApi.ttslua index b7883f1f..4e4eba0e 100644 --- a/src/chaosbag/ChaosBagApi.ttslua +++ b/src/chaosbag/ChaosBagApi.ttslua @@ -72,7 +72,7 @@ do ---@param tokenType? string Name of token (e.g. "Bless") to be drawn from the bag ---@param guidToBeResolved? string GUID of the sealed token to be resolved instead of drawing a token from the bag ---@param takeParameters? table Position and rotation of the location where the new token should be drawn to, usually to replace a returned token - ChaosBagApi.drawChaosToken = function(mat, drawAdditional, tokenType, guidToBeResolved, returnedToken) + ChaosBagApi.drawChaosToken = function(mat, drawAdditional, tokenType, guidToBeResolved) return Global.call("drawChaosToken", {mat = mat, drawAdditional = drawAdditional, tokenType = tokenType, guidToBeResolved = guidToBeResolved, takeParameters = takeParameters}) end diff --git a/src/core/Global.ttslua b/src/core/Global.ttslua index fe38cbca..f31135cb 100644 --- a/src/core/Global.ttslua +++ b/src/core/Global.ttslua @@ -370,6 +370,7 @@ function makeButtonsToRedraw() end end +-- returns a chaos token to the chaos bag and redraws another, always called by an XML button through makeButtonsToRedraw() above function returnAndRedraw(_, tokenGUID) local takeParameters = {} local returnedToken = getObjectFromGUID(tokenGUID) @@ -388,11 +389,11 @@ function returnAndRedraw(_, tokenGUID) end returnChaosTokenToBag(returnedToken) - if redrawData.redrawnTokenType == "random" then - chaosTokens[indexOfReturnedToken] = drawChaosToken({mat = mat, drawAdditional = true, takeParameters = takeParameters}) - else - chaosTokens[indexOfReturnedToken] = drawChaosToken({mat = mat, drawAdditional = true, takeParameters = takeParameters, tokenType = redrawData.redrawnTokenType}) + local params = { mat = mat, drawAdditional = true, takeParameters = takeParameters } + if redrawData.redrawnTokenType ~= "random" then + params.tokenType = redrawData.redrawnTokenType end + chaosTokens[indexOfReturnedToken] = drawChaosToken(params) chaosTokens[indexOfReturnedToken] = token if redrawData.triggeringCard == "FalseCovenant" then @@ -506,6 +507,7 @@ function drawChaosToken(params) return token else table.insert(chaosTokens, token) + return token end else returnChaosTokens() diff --git a/src/playercards/CardsThatRedrawTokens.ttslua b/src/playercards/CardsThatRedrawTokens.ttslua index d2306f0a..33a037ef 100644 --- a/src/playercards/CardsThatRedrawTokens.ttslua +++ b/src/playercards/CardsThatRedrawTokens.ttslua @@ -1,3 +1,62 @@ +--[[ Library for cards that return and redraw tokens +This file is used to add an XML button to a card, turned on via context menu. +Valid options modify the appearance of the XML button, as well as the +behavior of the return and redraw function. Set options before requiring this file. + +originParams{} --@type table + - includes parameters for the return and redraw functions. Typically set VALID_TOKENS + or INVALID_TOKENS, not both. If there are no restrictions on which tokens can be redrawn + (e.g. Wendy Adams), do not include either parameter. + * VALID_TOKENS --@type table + - keyed table which lists all tokens that can be redrawn by the card + - example usage: "False Covenant" + > VALID_TOKENS = { + > ["Curse"] = true + > } + + * INVALID_TOKENS --@type table + - keyed table which lists all tokens that cannot be redrawn by the card + - example usage: "Custom Ammunition" + > INVALID_TOKENS = { + > ["Auto-fail"] = true + > } + + * redrawnTokenType --@type string ("random" or name of token) + - determines which kind of token is drawn from the bag. Typically "random" + but could be a set token name (e.g. Nkosi Mabati) + + * triggeringCard --@type string (name of card button is on) + - allows for the name of the card to be passed onto Global for any special handling + +The following parameters modify the appearence of the XML button and are not listed as part of a table. + - buttonHeight (default is 450) + - buttonWidth (default is 1400) + - buttonPosition (default is "0 -55 -22") + - buttonFontSize (default is 250) + - buttonRotation (change if button is placed on an investigator cards) + - buttonValue (to change the label of the button, default is "Redraw Token") + - buttonIcon (to add an icon to the right) + - buttonColor (default is "#77674DE6") + +---------------------------------------------------------- +EXAMPLE: Claypool's Furs +This card can only redraw the Frost token, and is replaced with a random token from the bag. +As a nice reminder the XML button takes on the Frost color and icon with the text "Cancel". +> buttonValue = "Cancel" +> buttonIcon = "token-frost" +> buttonColor = "#404450E6" +> buttonFontSize = 300 + +> originParams = { +> triggeringCard = "ClaypoolsFurs", +> redrawnTokenType = "random", +> VALID_TOKENS = { +> ["Frost"] = true +> } +> } + +require("playercards/CardsThatRedrawTokens") +----------------------------------------------------------]] local turnOnHelper function onSave() From 7054c5a394e507ed032028f4712751a134a8e323 Mon Sep 17 00:00:00 2001 From: dscarpac Date: Mon, 24 Jun 2024 23:22:05 -0500 Subject: [PATCH 9/9] fixes to allow mod to build --- src/core/Global.ttslua | 3 +-- src/playercards/CardsThatRedrawTokens.ttslua | 25 ++++++++++---------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/core/Global.ttslua b/src/core/Global.ttslua index f31135cb..0a0063b0 100644 --- a/src/core/Global.ttslua +++ b/src/core/Global.ttslua @@ -394,8 +394,7 @@ function returnAndRedraw(_, tokenGUID) params.tokenType = redrawData.redrawnTokenType end chaosTokens[indexOfReturnedToken] = drawChaosToken(params) - - chaosTokens[indexOfReturnedToken] = token + if redrawData.triggeringCard == "FalseCovenant" then blessCurseManagerApi.removeToken("Curse") end diff --git a/src/playercards/CardsThatRedrawTokens.ttslua b/src/playercards/CardsThatRedrawTokens.ttslua index 33a037ef..5d1bcb4a 100644 --- a/src/playercards/CardsThatRedrawTokens.ttslua +++ b/src/playercards/CardsThatRedrawTokens.ttslua @@ -42,20 +42,19 @@ The following parameters modify the appearence of the XML button and are not lis EXAMPLE: Claypool's Furs This card can only redraw the Frost token, and is replaced with a random token from the bag. As a nice reminder the XML button takes on the Frost color and icon with the text "Cancel". -> buttonValue = "Cancel" -> buttonIcon = "token-frost" -> buttonColor = "#404450E6" -> buttonFontSize = 300 + > buttonValue = "Cancel" + > buttonIcon = "token-frost" + > buttonColor = "#404450E6" + > buttonFontSize = 300 -> originParams = { -> triggeringCard = "ClaypoolsFurs", -> redrawnTokenType = "random", -> VALID_TOKENS = { -> ["Frost"] = true -> } -> } - -require("playercards/CardsThatRedrawTokens") + > originParams = { + > triggeringCard = "ClaypoolsFurs", + > redrawnTokenType = "random", + > VALID_TOKENS = { + > ["Frost"] = true + > } + > } + > require... ----------------------------------------------------------]] local turnOnHelper