diff --git a/unpacked.yaml b/unpacked.yaml
index c90ebc04a..22a809d76 100644
--- a/unpacked.yaml
+++ b/unpacked.yaml
@@ -485,7 +485,6 @@ ObjectStates:
- !include 'unpacked/Custom_Token Chaos Bag Stat Tracker 766620.yaml'
- !include 'unpacked/Bag All Player Cards 15bb07.yaml'
- !include 'unpacked/Bag Random Basic Weaknesses 770c4e.yaml'
-- !include 'unpacked/Custom_Tile AdamDB Deck Importer 32027a.yaml'
- !include 'unpacked/Custom_Model_Bag Bless tokens afa06b.yaml'
- !include 'unpacked/Custom_Model_Bag Curse tokens bd0253.yaml'
- !include 'unpacked/Custom_Tile 666973.yaml'
diff --git a/unpacked/Bag Random Basic Weaknesses 770c4e.yaml b/unpacked/Bag Random Basic Weaknesses 770c4e.yaml
index 0d0802b49..cf9ff23f4 100644
--- a/unpacked/Bag Random Basic Weaknesses 770c4e.yaml
+++ b/unpacked/Bag Random Basic Weaknesses 770c4e.yaml
@@ -79,9 +79,9 @@ Snap: true
Sticky: true
Tooltip: true
Transform:
- posX: -52.38
- posY: 1.44
- posZ: -68.18
+ posX: -50.78
+ posY: 1.19
+ posZ: -67.57
rotX: 0.02
rotY: 270.0
rotZ: 0.02
diff --git a/unpacked/Checker_white Configuration 03804b.ttslua b/unpacked/Checker_white Configuration 03804b.ttslua
index 03453c1b0..697e04e68 100644
--- a/unpacked/Checker_white Configuration 03804b.ttslua
+++ b/unpacked/Checker_white Configuration 03804b.ttslua
@@ -161,3 +161,16 @@ configuration = {
},
debug_deck_id = nil,
}
+
+
+function onObjectRotate(object, spin, flip, player_color, old_spin, old_flip)
+ if flip == 0 then
+ configuration.api_uri = "https://arkhamdb.adamgoldsmith.name/api/public"
+ getObjectFromGUID("a28140").UI.setXml('Adam')
+ else
+ configuration.api_uri = "https://arkhamdb.com/api/public"
+ getObjectFromGUID("a28140").UI.setXml('')
+ end
+
+ print("Set URL to " .. configuration.api_uri)
+end
diff --git a/unpacked/Checker_white Configuration 03804b.yaml b/unpacked/Checker_white Configuration 03804b.yaml
index 9eede711b..e355ad2e1 100644
--- a/unpacked/Checker_white Configuration 03804b.yaml
+++ b/unpacked/Checker_white Configuration 03804b.yaml
@@ -3,7 +3,7 @@ ColorDiffuse:
b: 1.0
g: 1.0
r: 1.0
-Description: ''
+Description: 'Flip to change between ArkhamDB/AdamDB'
DragSelectable: true
GMNotes: ''
GUID: 03804b
@@ -13,7 +13,7 @@ Hands: false
HideWhenFaceDown: false
IgnoreFoW: false
LayoutGroupSortIndex: 0
-Locked: true
+Locked: false
LuaScript: !include 'Checker_white Configuration 03804b.ttslua'
LuaScriptState: ''
MeasureMovement: false
diff --git a/unpacked/Custom_Tile AdamDB Deck Importer 32027a.ttslua b/unpacked/Custom_Tile AdamDB Deck Importer 32027a.ttslua
deleted file mode 100644
index 557f173b3..000000000
--- a/unpacked/Custom_Tile AdamDB Deck Importer 32027a.ttslua
+++ /dev/null
@@ -1,434 +0,0 @@
---[[ Lua code. See documentation: https://api.tabletopsimulator.com/ --]]
-
---[[ The onLoad event is called after the game save finishes loading. --]]
-function onLoad()
- init()
- -- Setup...
- publicDeckURL="https://arkhamdb.adamgoldsmith.name/api/public/decklist/"
- privateDeckURL="https://arkhamdb.adamgoldsmith.name/api/public/deck/"
- cardURL="https://arkhamdb.adamgoldsmith.name/api/public/card/"
- tabooListURL="https://arkhamdb.adamgoldsmith.name/api/public/taboos/"
- subnameCards={{name="Randolph Carter",xp=0},{name="Dream Diary",xp=3},{name="Relic of Ages",xp=0},{name="The Necronomicon",xp=0},{name="Archaic Glyphs",xp=3},{name="Strange Solution",xp=4},{name="Forbidden Tome",xp=3},{name="Relic of Ages",xp=0}, {name="Ancient Stone",xp=4}, {"Dream Diary",xp=0},{name="Empower Self",xp=2}}
- extraPermanents={["Duke"]=true,["Sophie"]=true,["Gate Box"]=true,["Dark Insight"]=true}
- multiClassCards={{name=".45 Thompson",xp=3},{name="Scroll of Secrets",xp=3},{name="Tennessee Sour Mash",xp=3},{name="Enchanted Blade",xp=3},{name="Grisly Totem",xp=3}}
- returningCards={{name="On Your Own"}}
- advancedSignatures={{name="Daisy's Tote Bag"},{name="The Necronomicon"},{name="On the Lam"},{name="Hospital Debts"},{name="Dark Memory"},{name="Heirloom of Hyperborea"}}
- bondedCardsOneThree={{name="Hallowed Mirror",bondedName="Soothing Melody",bondedCode=05314},{name="Occult Lexicon",bondedName="Blood-Rite",bondedCode=05317},{name="The Hungering Blade",bondedName="Bloodlust",bondedCode=06019},{name="Nightmare Bauble",bondedName="Dream Parasite",bondedCode=06331},{name="Miss Doyle",bondedName="Hope",bondedCode=06031,bondedNameSecond="Zeal",bondedCodeSecond=06032,bondedNameThird="Augur",bondedCodeThird=06033}}
- bondedCardsBoolean = {{name="Gate Box",bondedName="Dream-Gate",bondedCode="06015a",bondCount=1},{name="Crystallizer of Dreams",bondedName="Guardian of the Crystallizer",bondedCode=06025,bondCount=2},{name="Dream Diary",bondedName="Essence of the Dream",bondedCode=06113,bondCount=1},{name="Empty Vessel",bondedName="Wish Eater",bondedCode=06277,bondCount=1},{name="Segment of Onyx",bondedName="Pendant of the Queen",bondedCode=06022,bondCount=1},{name="Stargazing",bondedName="The Stars Are Right",bondedCode=06028,bondCount=2},{name="Summoned Hound",bondedName="Unbound Beast",bondedCode=06283,bondCount=2}}
- privateDeck = true
-
- makeText()
- makeButton()
- makeCheckboxPP()
- self.UI.setXml('Adam')
-
- all_cards_bag = getObjectFromGUID("15bb07")
- weaknesses_bag = getObjectFromGUID("770c4e")
-
- -- Get current taboolist
- tabooList = {}
- WebRequest.get(tabooListURL, self, 'tabooListCallback')
-end
-
-function init()
- cardList = {}
- doneSlots = 0
- totalCards = 0
- tabooID = 0
-end
-
--- Previously this was "spawnZone"
-function get_deck()
- if deckID == nil then
- broadcastToAll("Deck ID required", {0.5,0.5,0.5})
- return 1
- end
-
- deckPos = self.positionToWorld({0.285,1.5,0.48})
- permPos = self.positionToWorld({-0.285,1.5,0.48})
-
- -- Get deck from ArkhamDB..
- local deckURL
- if privateDeck then deckURL = privateDeckURL
- else deckURL = publicDeckURL
- end
-
- WebRequest.get(deckURL .. deckID, self, 'deckReadCallback')
-end
-
-function deckReadCallback(req)
- -- Result check..
- if req.is_done and not req.is_error
- then
- if string.find(req.text, "")
- then
- broadcastToAll("Private deck "..deckID.." is not shared", {0.5,0.5,0.5})
- return
- end
- JsonDeckRes = JSON.decode(req.text)
- else
- print (req.error)
- return
- end
- if (JsonDeckRes == nil)
- then
- broadcastToAll("Deck not found!", {0.5,0.5,0.5})
- return
- else
- print("Found decklist: "..JsonDeckRes.name)
- end
- -- Count number of cards in decklist
- numSlots=0
- for cardid,number in
- pairs(JsonDeckRes.slots)
- do
- numSlots = numSlots + 1
- end
-
- -- Check for taboos
- tabooID = JsonDeckRes.taboo_id
- if tabooID
- then
- print("Using List of Taboos from "..tabooList[tabooID].date..".")
- end
-
- -- Save card id, number in table and request card info from ArkhamDB
- for cardID,number in pairs(JsonDeckRes.slots)
- do
- local row = {}
- row.cardName = ""
- row.cardCount = number
- cardList[cardID] = row
- WebRequest.get(cardURL .. cardID, self, 'cardReadCallback')
- totalCards = totalCards + number
- end
-end
-
-function cardReadCallback(req)
- -- Result check..
- if req.is_done and not req.is_error
- then
- -- Find unicode before using JSON.decode since it doesnt handle hex UTF-16
- local tmpText = string.gsub(req.text,"\\u(%w%w%w%w)", convertHexToDec)
- JsonCardRes = JSON.decode(tmpText)
- else
- print(req.error)
- return
- end
-
- -- Update card name in table
- if(JsonCardRes.xp == nil or JsonCardRes.xp == 0)
- then
- cardList[JsonCardRes.code].cardName = JsonCardRes.real_name
- else
- cardList[JsonCardRes.code].cardName = JsonCardRes.real_name .. " (" .. JsonCardRes.xp .. ")"
- end
-
- -- Make Subname blank if it does not exist
- if (JsonCardRes.subname == nil and (JsonCardRes.subtype_name ~= "Basic Weakness" and JsonCardRes.subtype_name ~= "Weakness"))
- then
- cardList[JsonCardRes.code].subName = JsonCardRes.subname
- end
-
- -- Check for subname
- for k,v in pairs(subnameCards) do
- if (v.name == JsonCardRes.real_name and (v.xp == JsonCardRes.xp or JsonCardRes.xp == nil))
- then
- cardList[JsonCardRes.code].subName = JsonCardRes.subname
- end
- end
-
- -- Check for multiclass
- for k,v in pairs(multiClassCards) do
- if (v.name == JsonCardRes.real_name and (v.xp == JsonCardRes.xp or JsonCardRes.xp == nil))
- then
- cardList[JsonCardRes.code].subName = JsonCardRes.faction_name
- end
- end
-
- -- Check for returning cards (cards with the same name/level but different and from a new set)
- for k,v in pairs(returningCards) do
- if (v.name == JsonCardRes.real_name and JsonCardRes.pack_name == "Return to the Forgotten Age")
- then
- cardList[JsonCardRes.code].subName = "Permanent"
- end
- end
-
- -- Check for advanced signature cards (this happens after subname check, so it should be fine)
- for k,v in pairs(advancedSignatures) do
- if (v.name == JsonCardRes.real_name) then
- --The Necronomicon is a whole can of worms, so handle it separately
- if (JsonCardRes.real_name == "The Necronomicon") then
- if (JsonCardRes.pack_name == "Read or Die") then
- cardList[JsonCardRes.code].subName = "John Dee Translation (Advanced)"
- elseif (JsonCardRes.pack_name == "The Miskatonic Museum") then
- cardList[JsonCardRes.code].subName = "Olaus Wormius Translation"
- elseif (JsonCardRes.pack_name == "Harvey Walters") then
- cardList[JsonCardRes.code].subName = "Petrus de Dacia Translation"
- else
- cardList[JsonCardRes.code].subName = "John Dee Translation"
- end
- elseif (JsonCardRes.pack_name == "Read or Die" or JsonCardRes.pack_name == "All or Nothing" or JsonCardRes.pack_name == "Bad Blood") then
- if (v.name == "Heirloom of Hyperborea") then
- cardList[JsonCardRes.code].subName = "Artifact from Another Life (Advanced)"
- else
- cardList[JsonCardRes.code].subName = "Advanced"
- end
- else
- if (cardList[JsonCardRes.code].subName == nil) then
- if (v.name == "Heirloom of Hyperborea") then
- cardList[JsonCardRes.code].subName = "Artifact from Another Life"
- else
- cardList[JsonCardRes.code].subName = "Signature"
- end
- end
- end
- end
- end
-
- -- Check if card is permanent (always)
- if (JsonCardRes.permanent == true or extraPermanents[JsonCardRes.real_name]) then
- cardList[JsonCardRes.code].permanent = true
- else
- cardList[JsonCardRes.code].permanent = false
- end
-
- -- Check for '1:3' bonding cards, which always brings in 3 bonded cards, where the original card is limit 1 per deck.
- for k,v in pairs(bondedCardsOneThree) do
- if (v.name == JsonCardRes.real_name)
- then
-
- -- Check for Miss Doyle, who has a special exception since her 3 cards are different
- if (v.name == "Miss Doyle")
- then
- local row = {}
- local rowSecond = {}
- local rowThird = {}
- row.cardName = v.bondedName
- rowSecond.cardName = v.bondedNameSecond
- rowThird.cardName = v.bondedNameThird
- row.cardCount = 1
- rowSecond.cardCount = 1
- rowThird.cardCount = 1
- row.permanent = true
- rowSecond.permanent = true
- rowThird.permanent = true
- cardList[v.bondedCode] = row
- cardList[v.bondedCodeSecond] = rowSecond
- cardList[v.bondedCodeThird] = rowThird
- else
- local row = {}
- row.cardName = v.bondedName
- row.cardCount = 3
- row.permanent = true
- cardList[v.bondedCode] = row
- end
- end
- end
-
- -- Check for more complicated bonding cards
- for k,v in pairs(bondedCardsBoolean) do
- if (v.name == JsonCardRes.real_name and cardList[v.bondedCode] == nil)
- then
- local row = {}
- row.cardName = v.bondedName
- row.cardCount = v.bondCount
- row.permanent = true
- cardList[v.bondedCode] = row
- end
- end
-
-
- -- Check for Taboos (add " (Taboo)" to card name)
- if tabooID then
- for k,v in pairs(tabooList[tabooID].cards) do
- if v.code == JsonCardRes.code
- then
- cardList[JsonCardRes.code].cardName = cardList[JsonCardRes.code].cardName .. " (Taboo)"
- end
- end
- end
-
- -- Update number of processed slots, if complete, start building the deck
- doneSlots = doneSlots + 1
- if (doneSlots == numSlots)
- then
- createDeck()
- end
-end
-
-function createDeck()
- for k,v in pairs(cardList) do
- searchForCard(v.cardName, v.subName, v.cardCount, v.permanent)
- end
-end
-
-function searchForCard(cardName, subName, cardCount, permanent)
- if cardName == 'Random Basic Weakness' then
- -- pull a weakness card instead
- weaknesses_bag.shuffle()
- local taken = weaknesses_bag.takeObject({
- position = deckPos,
- rotation = self.getRotation() + Vector(0, 0, 180),
- index = 0,
- smooth = false,
- params = { cardName, cardCount, false }
- })
- -- just special case the one permanent for now
- if taken.getName() == 'Indebted' then
- taken.setPosition(permPos)
- taken.setRotation(self.getRotation())
- end
- broadcastToAll("Drew random basic weakness: " .. taken.getName())
- return
- end
-
- allCards = all_cards_bag.getObjects()
- for k,v in pairs(allCards) do
- if (v.nickname == cardName)
- then
- if(subName == nil or v.description == subName)
- then
- all_cards_bag.takeObject({
- position = {0, 1.5, 0},
- callback = 'cardTaken',
- callback_owner=self,
- index = v.index,
- smooth = false,
- params = { cardName, cardCount, permanent, v.guid }
- })
- print('Added '.. cardCount .. ' of ' .. cardName)
- return
- end
- end
- end
- broadcastToAll("Card not found: "..cardName, {0.5,0.5,0.5})
-end
-
-function cardTaken(card, params)
- -- Check destination deck (permanent?)
- local destPos
- local rotation = self.getRotation()
- if (params[3] == true) then -- permanent card
- destPos = permPos
- else
- destPos = deckPos
- rotation = rotation + Vector(0, 0, 180) -- Flip non-permanents facedown
- end
-
- if (card.getName() == params[1]) then
- for i=1, params[2] do
- local cloneParams = {}
- cloneParams.position=destPos
- card.clone(cloneParams).setRotation(rotation)
- end
- all_cards_bag.putObject(card)
- else
- print('Wrong card: ' .. card.getName())
- all_cards_bag.putObject(card)
- end
-end
-
-function tabooListCallback(req)
- -- Result check..
- if req.is_done and not req.is_error
- then
- -- Find unicode before using JSON.decode since it doesnt handle hex UTF-16
- local tmpText = string.gsub(req.text,"\\u(%w%w%w%w)", convertHexToDec)
- JsonTabooRes = JSON.decode(tmpText)
- else
- print(req.error)
- return
- end
- for k,v in pairs(JsonTabooRes) do
- local row = {}
- row.date = v.date_start
- row.cards = JSON.decode(v.cards)
- tabooList[v.id] = row
- end
-end
-
-function makeText()
- -- Create textbox
- local input_parameters = {}
- input_parameters.input_function = "inputTyped"
- input_parameters.function_owner = self
- input_parameters.position = {0.33,0.1,-0.255}
- input_parameters.width = 2200
- input_parameters.scale = {0.1,0.1,0.1}
- input_parameters.height = 500
- input_parameters.font_size = 450
- input_parameters.tooltip = "*****PLEASE USE AN UNPUBLISHED DECK IF JUST FOR TTS TO AVOID FLOODING ARKHAMDB PUBLISHED DECK LISTS!*****\nInput deck ID from ArkhamDB URL of the deck\nExample: For the URL 'https://arkhamdb.adamgoldsmith.name/decklist/view/101/knowledge-overwhelming-solo-deck-1.0', you should input '101'"
- input_parameters.alignment = 3 -- (1 = Automatic, 2 = Left, 3 = Center, 4 = Right, 5 = Justified) –Optional
- input_parameters.value=""
- input_parameters.color = {0.9,0.7,0.5}
- input_parameters.validation = 2
- self.createInput(input_parameters)
-end
-
-function inputTyped(objectInputTyped, playerColorTyped, input_value, selected)
- deckID = input_value
-end
-
-function makeButton()
- -- Create Button
- local button_parameters = {}
- button_parameters.click_function = "buttonClicked"
- button_parameters.function_owner = self
- button_parameters.position = {0,0.05,-0.1}
- button_parameters.width = 300
- button_parameters.height = 100
- button_parameters.tooltip = "Click to build your deck!"
- button_parameters.scale = {1,1,0.6}
- self.createButton(button_parameters)
-end
-
-function buttonClicked()
- -- Reset
- init()
-
- get_deck()
-end
-
-function makeCheckboxPP()
- -- Create Private/Published checkbox
- local checkbox_parameters = {}
- checkbox_parameters.click_function = "checkboxPPClicked"
- checkbox_parameters.function_owner = self
- checkbox_parameters.position = {-0.33,0.1,-0.255}
- checkbox_parameters.width = 2100
- checkbox_parameters.height = 500
- checkbox_parameters.tooltip = "Click to toggle Private/Published deck ID"
- checkbox_parameters.label = "Private"
- checkbox_parameters.font_size = 350
- checkbox_parameters.scale = {0.1,0.1,0.1}
- checkbox_parameters.color = {0.9,0.7,0.5}
- checkbox_parameters.hover_color = {0.4,0.6,0.8}
- self.createButton(checkbox_parameters)
-end
-
-function checkboxPPClicked()
- buttons = self.getButtons()
- for k,v in pairs(buttons) do
- if (v.label == "Private") then
- local button_parameters = {}
- button_parameters.label = "Published"
- button_parameters.index = v.index
- self.editButton(button_parameters)
- privateDeck = false
- else
- if (v.label == "Published") then
- local button_parameters = {}
- button_parameters.label = "Private"
- button_parameters.index = v.index
- self.editButton(button_parameters)
- privateDeck = true
- end
- end
- end
-end
-
--- Function to convert utf-16 hex to actual character since JSON.decode doesn't seem to handle utf-16 hex very well..
-function convertHexToDec(a)
- return string.char(tonumber(a,16))
-end
diff --git a/unpacked/Custom_Tile AdamDB Deck Importer 32027a.yaml b/unpacked/Custom_Tile AdamDB Deck Importer 32027a.yaml
deleted file mode 100644
index 3a8a00aaf..000000000
--- a/unpacked/Custom_Tile AdamDB Deck Importer 32027a.yaml
+++ /dev/null
@@ -1,45 +0,0 @@
-Autoraise: true
-ColorDiffuse:
- b: 1.0
- g: 1.0
- r: 1.0
-CustomImage:
- CustomTile:
- Stackable: false
- Stretch: true
- Thickness: 0.1
- Type: 3
- ImageScalar: 1.0
- ImageSecondaryURL: ''
- ImageURL: https://i.imgur.com/7jvVCBV.jpg
- WidthScale: 0.0
-Description: ''
-DragSelectable: true
-GMNotes: ''
-GUID: 32027a
-Grid: false
-GridProjection: false
-Hands: false
-HideWhenFaceDown: false
-IgnoreFoW: false
-LayoutGroupSortIndex: 0
-Locked: true
-LuaScript: !include 'Custom_Tile AdamDB Deck Importer 32027a.ttslua'
-LuaScriptState: ''
-MeasureMovement: false
-Name: Custom_Tile
-Nickname: AdamDB Deck Importer
-Snap: false
-Sticky: true
-Tooltip: false
-Transform:
- posX: -60.0
- posY: 1.2
- posZ: -55
- rotX: 0.0
- rotY: 270.0
- rotZ: 0.0
- scaleX: 6.59
- scaleY: 1.0
- scaleZ: 6.59
-XmlUI: ''