From 150e0e18d313d013913af047cde254d7e4163117 Mon Sep 17 00:00:00 2001 From: Chr1Z93 Date: Sat, 1 Jun 2024 19:24:38 +0200 Subject: [PATCH] added token script --- objects/Universal.834ad5.json | 26 +-- src/core/UniversalActionAbilityToken.ttslua | 165 ++++++++++++++++++++ 2 files changed, 178 insertions(+), 13 deletions(-) create mode 100644 src/core/UniversalActionAbilityToken.ttslua diff --git a/objects/Universal.834ad5.json b/objects/Universal.834ad5.json index 3a0e5583..175ddd21 100644 --- a/objects/Universal.834ad5.json +++ b/objects/Universal.834ad5.json @@ -89,62 +89,62 @@ "URL": "http://cloud-3.steamusercontent.com/ugc/2447222612020429879/3DE13BD6A88637B0D114B38A18F3F997AA553820/" }, { - "Name": "GuardianBackground", + "Name": "GuardianClass", "Type": 0, "URL": "http://cloud-3.steamusercontent.com/ugc/2447222612020428504/D7D156CC5F34BD9DE51E71ADFCBA8BDE76358214/" }, { - "Name": "MysticBackground", + "Name": "MysticClass", "Type": 0, "URL": "http://cloud-3.steamusercontent.com/ugc/2447222612020428733/BBF06C692394B48DFEEF8EF92D01083ABD24600D/" }, { - "Name": "NeutralBackground", + "Name": "NeutralClass", "Type": 0, "URL": "http://cloud-3.steamusercontent.com/ugc/2447222612020428918/898E79CD6752EE225ED8563EBCFFC09FF4566EE2/" }, { - "Name": "RogueBackground", + "Name": "RogueClass", "Type": 0, "URL": "http://cloud-3.steamusercontent.com/ugc/2447222612020429368/FA66064F7B6E7E065087874AA7CA97A513F6D389/" }, { - "Name": "SeekerBackground", + "Name": "SeekerClass", "Type": 0, "URL": "http://cloud-3.steamusercontent.com/ugc/2447222612020429521/AD325698441CBAAB1A03B079B04768BC5CBDD321/" }, { - "Name": "SurvivorBackground", + "Name": "SurvivorClass", "Type": 0, "URL": "http://cloud-3.steamusercontent.com/ugc/2447222612020429727/D71F981259EE9C3077FABE361DF988E05AA96F30/" }, { - "Name": "GuardianClass", + "Name": "Guardian", "Type": 0, "URL": "http://cloud-3.steamusercontent.com/ugc/2447222612020428585/3FF56E20DCD01D276BD57507B07FB549072F0877/" }, { - "Name": "MysticClass", + "Name": "Mystic", "Type": 0, "URL": "http://cloud-3.steamusercontent.com/ugc/2447222612020428836/BA2851382E66D08D0DEC95D9FD4A42CF042FDA3C/" }, { - "Name": "NeutralClass", + "Name": "Neutral", "Type": 0, "URL": "http://cloud-3.steamusercontent.com/ugc/2447222612020428998/824B0AD8AB710A86409846EA2C13DCCAF4333545/" }, { - "Name": "RogueClass", + "Name": "Rogue", "Type": 0, "URL": "http://cloud-3.steamusercontent.com/ugc/2447222612020429445/5C0508B898F8A6EB955EE0802C0827384D624885/" }, { - "Name": "SeekerClass", + "Name": "Seeker", "Type": 0, "URL": "http://cloud-3.steamusercontent.com/ugc/2447222612020429590/E6FCB23DBF28E7183C7325AFA4452D1AF9F3018D/" }, { - "Name": "SurvivorClass", + "Name": "Survivor", "Type": 0, "URL": "http://cloud-3.steamusercontent.com/ugc/2447222612020429809/A993F31CDD4D2A3E4D4BCD796375FA262A1204D5/" } @@ -160,7 +160,7 @@ "IgnoreFoW": false, "LayoutGroupSortIndex": 0, "Locked": false, - "LuaScript": "", + "LuaScript": "require(\"core/UniversalActionAbilityToken\")", "LuaScriptState": "", "MeasureMovement": false, "Name": "Custom_Tile", diff --git a/src/core/UniversalActionAbilityToken.ttslua b/src/core/UniversalActionAbilityToken.ttslua new file mode 100644 index 00000000..a0912a1a --- /dev/null +++ b/src/core/UniversalActionAbilityToken.ttslua @@ -0,0 +1,165 @@ +local class, symbol + +local listOfClasses = { + "Guardian", + "Mystic", + "Neutral", + "Rogue", + "Seeker", + "Survivor" +} + +local listOfSymbols = { + "Activate", + "Evade", + "Explore", + "Fight", + "FreeTrigger", + "Investigate", + "Parley", + "PlayItem", + "Reaction", + "Resource", + "Spell", + "Tome", + "Guardian", + "Mystic", + "Neutral", + "Rogue", + "Seeker", + "Survivor" +} + + +function onSave() + return JSON.encode({ class = class, symbol = symbol }) +end + +function onLoad(savedData) + local loadedData = JSON.decode(savedData) or {} + class = loadedData.class or "Neutral" + symbol = loadedData.symbol or "Neutral" + + updateDisplay() + addContextMenu() +end + +function updateDisplay() + local xml = { + -- background on the front + { + tag = "Image", + attributes = { + id = "ClassFront", + image = class .. "Class", + height = "200", + width = "200", + position = "0 0 0.1", + rotation = "0 180 180" + } + }, + -- circular border on the front + { + tag = "Image", + attributes = { + image = "Border", + height = "200", + width = "200", + position = "0 0 0.2", + rotation = "0 180 180" + } + }, + -- symbol on the front + { + tag = "Image", + attributes = { + id = "SymbolFront", + image = symbol, + height = "200", + width = "200", + position = "0 0 0.3", + rotation = "0 180 180" + } + }, + -- background on the back + { + tag = "Image", + attributes = { + id = "ClassBack", + image = "NeutralClass", + height = "200", + width = "200", + position = "0 0 -10.1", + rotation = "0 0 180" + } + }, + -- circular border on the back + { + tag = "Image", + attributes = { + image = "Border", + height = "200", + width = "200", + position = "0 0 -10.2", + rotation = "0 0 180" + } + }, + -- symbol on the back + { + tag = "Image", + attributes = { + id = "SymbolBack", + image = symbol, + -- update color of symbol on the back for neutral + color = (class == "Neutral") and "#000000" or "#FFFFFF", + height = "200", + width = "200", + position = "0 0 -10.3", + rotation = "0 0 180" + } + } + } + self.UI.setXmlTable(xml) + + -- update name (only show symbol name if it isn't the class name) + if isClassName(symbol) then + self.setName(class) + else + self.setName(class .. " " .. symbol) + end +end + +function addContextMenu() + self.addContextMenuItem("Change class", function(playerColor) + Player[playerColor].showOptionsDialog("Choose class", listOfClasses, class, updateClass) + end) + + self.addContextMenuItem("Change symbol", function(playerColor) + Player[playerColor].showOptionsDialog("Choose symbol", listOfSymbols, symbol, updateSymbol) + end) +end + +function updateClass(newClass) + class = newClass + updateDisplay() +end + +function updateSymbol(newSymbol) + symbol = newSymbol + updateDisplay() +end + +function updateClassAndSymbol(newClass, newSymbol) + class = newClass + symbol = newSymbol + updateDisplay() +end + +function isClassName(str) + for _, className in ipairs(listOfClasses) do + if className == str then + return true + end + end + return false +end