Merge branch 'main' into new-downloads-repo
This commit is contained in:
commit
63bbb637d0
@ -231,7 +231,7 @@
|
||||
0,
|
||||
0
|
||||
],
|
||||
"SaveName": "Arkham SCE - 3.9.2",
|
||||
"SaveName": "Arkham SCE - 4.0.0",
|
||||
"Sky": "Sky_Museum",
|
||||
"SkyURL": "https://i.imgur.com/GkQqaOF.jpg",
|
||||
"SnapPoints_path": "SnapPoints.json",
|
||||
|
@ -33,7 +33,7 @@
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScript": "require(\"playercards/cards/DreamEnhancingSerum\")",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
|
@ -22,7 +22,7 @@
|
||||
"ImageURL": "https://steamusercontent-a.akamaihd.net/ugc/1704036721123215146/E44A3B99EACF310E49E94977151A03C9A3DC7F17/",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "Displays the hand size (total or by title for \"Dream Enhancing Serum\" - hover over it to see the regular count).\n\nAllows you to randomly discard a card from your hand.",
|
||||
"Description": "Displays your hand size. For Dream-Enhacing Serum, use the helper on that card.",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "450688",
|
||||
|
@ -85,7 +85,7 @@
|
||||
},
|
||||
"tooltip": "None",
|
||||
"value": [
|
||||
"Arkham Horror LCG SCE 3.9.2 - 08/17/2024"
|
||||
"Arkham Horror LCG SCE 4.0.0 - ??/??/2024"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -124,7 +124,7 @@
|
||||
},
|
||||
"tooltip": "None",
|
||||
"value": [
|
||||
"Minor release notes (3.9.2)\n- Added player specific option panel (search for the gear icon on your mat)!\n- Added 'Ready Cards' button to Play Area (mainly to ready enemies)\n- Added a button to the Mythos Area to copy the scenario reference card for each\nplayermat with an investigator\n- Added the 'Card Back Enhancer'! This new tool can update cards/decks with outdated\nplayer or scenario card backs by dropping them on it (located near the Deck Importer)\n- Improved custom card handling for PlayerCard Panel\n(with a new metadata field this can also detect signatures)\n- Updated the Deck Instruction Generator! Now it outputs to the Notebook.\n- Updated counters and Search Assistant to work with number typing while hovering them\n- Myriad of Bugfixes (for example the removal of the additional upkeep resource for parallel Jenny)\n\nMinor release notes (3.9.1)\n- Added Parallel Jenny!\n- Re-Added Learn to Play PDF to table\n- Fixed bug with \"Remove one Use\" gamekey\n- Updated clue replenishing to locations via hotkey (Numpad 8)\n- Updated Deck Importer (arkham.build support and better RBW drawing)\n- Updated Search Assistant to properly handle a revealed top card (looking at Norman)\n\nMain release notes (3.9.0) - highlights only\n- updated note card for patch notes (bless Marum for his awesome tool!)\n- automated discarding for Patrice\n- confirmation dialog for discard hotkey (e.g. for locations)\n- helpers for cards that redraw tokens and Kohaku\n- displaying of token count for cards that seal tokens\n- new action / ability tokens (replacing the old ones)\n- option to enable all card helpers (e.g. Heavy Furs)\n- option to load class-colored playermat backgrounds\n- coloring for player names in broadcasts\n- right-click option for RBW button on Player Card Panel to specify trait(s)"
|
||||
""
|
||||
]
|
||||
}
|
||||
],
|
||||
|
@ -11,25 +11,18 @@ function onLoad()
|
||||
buttonParameters.hover_color = "White"
|
||||
buttonParameters.label = 0
|
||||
buttonParameters.click_function = "none"
|
||||
buttonParameters.position = Vector(0, 0.11, -0.2)
|
||||
buttonParameters.position = Vector(0, 0.11, 0)
|
||||
buttonParameters.height = 0
|
||||
buttonParameters.width = 0
|
||||
buttonParameters.font_size = 1000
|
||||
buttonParameters.font_color = "White"
|
||||
self.createButton(buttonParameters)
|
||||
|
||||
-- index 1: button to toggle "DES"
|
||||
buttonParameters.label = "DES: ✗"
|
||||
buttonParameters.position.z = 0.6
|
||||
buttonParameters.font_size = 200
|
||||
self.createButton(buttonParameters)
|
||||
|
||||
-- make sure this part executes after the playermats are loaded
|
||||
Wait.time(function()
|
||||
updateColors()
|
||||
|
||||
-- start loop to update card count
|
||||
playermatApi.checkForDES(matColor)
|
||||
Wait.time(updateValue, 1, -1)
|
||||
end, 1)
|
||||
end
|
||||
@ -37,19 +30,6 @@ end
|
||||
-- updates colors when object is dropped somewhere
|
||||
function onDrop() updateColors() end
|
||||
|
||||
-- disables DES counting while hovered
|
||||
function onObjectHover(hoverColor, object)
|
||||
if hoverColor ~= handColor then return end
|
||||
|
||||
if object == self then
|
||||
hovering = true
|
||||
playermatApi.checkForDES(matColor)
|
||||
updateValue()
|
||||
else
|
||||
hovering = false
|
||||
end
|
||||
end
|
||||
|
||||
-- updates the matcolor and handcolor variable
|
||||
function updateColors()
|
||||
matColor = playermatApi.getMatColorByPosition(self.getPosition())
|
||||
@ -57,7 +37,7 @@ function updateColors()
|
||||
self.setName(handColor .. " Hand Helper")
|
||||
end
|
||||
|
||||
-- count cards in hand (by name for DES)
|
||||
-- count cards in hand
|
||||
function updateValue()
|
||||
-- update colors if handColor doesn't own a handzone
|
||||
if Player[handColor].getHandCount() == 0 then
|
||||
@ -70,40 +50,18 @@ function updateValue()
|
||||
-- if there is still no handzone, then end here
|
||||
if Player[handColor].getHandCount() == 0 then return end
|
||||
|
||||
-- get state of "Dream-Enhancing Serum" from playermat
|
||||
local hasDES = playermatApi.hasDES(matColor)
|
||||
|
||||
-- default to regular count if hovered
|
||||
if hovering then
|
||||
hasDES = false
|
||||
end
|
||||
|
||||
self.editButton({ index = 1, label = "DES: " .. (hasDES and "✓" or "✗") })
|
||||
|
||||
-- count cards in hand
|
||||
local hand = Player[handColor].getHandObjects()
|
||||
local size = 0
|
||||
|
||||
if hasDES then
|
||||
local cardHash = {}
|
||||
for _, obj in pairs(hand) do
|
||||
if obj.type == "Card" then
|
||||
local name = obj.getName()
|
||||
local title = string.match(name, '(.+)(%s%(%d+%))') or name
|
||||
cardHash[title] = true
|
||||
end
|
||||
end
|
||||
for _, title in pairs(cardHash) do
|
||||
|
||||
for _, obj in pairs(hand) do
|
||||
if obj.type == "Card" then
|
||||
size = size + 1
|
||||
end
|
||||
else
|
||||
for _, obj in pairs(hand) do
|
||||
if obj.type == "Card" then
|
||||
size = size + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- update button label and color
|
||||
self.editButton({ index = 0, font_color = hasDES and "Green" or "White", label = size })
|
||||
self.editButton({ index = 0, font_color = "White", label = size })
|
||||
end
|
||||
|
@ -50,7 +50,8 @@ function triggerUpkeepMultihanded(playerColor)
|
||||
local colors = Player.getAvailableColors()
|
||||
for _, handColor in ipairs(colors) do
|
||||
local matColor = playermatApi.getMatColor(handColor)
|
||||
if playermatApi.returnInvestigatorId(matColor) ~= "00000" and Player[handColor].seated == false then
|
||||
local data = playermatApi.getActiveInvestigatorData(matColor)
|
||||
if data.id ~= "00000" and Player[handColor].seated == false then
|
||||
playermatApi.doUpkeepFromHotkey(matColor, playerColor)
|
||||
end
|
||||
end
|
||||
|
@ -40,8 +40,8 @@ local bagSearchers = {}
|
||||
local hideTitleSplashWaitFunctionId = nil
|
||||
|
||||
-- online functionality related variables
|
||||
local MOD_VERSION = "3.9.2"
|
||||
local SOURCE_REPO = "https://github.com/Chr1Z93/SCED-downloads/releases/latest/download/"
|
||||
local MOD_VERSION = "4.0.0"
|
||||
local SOURCE_REPO = 'https://raw.githubusercontent.com/chr1z93/loadable-objects/main'
|
||||
local library, requestObj, modMeta
|
||||
local acknowledgedUpgradeVersions = {}
|
||||
local contentToShow = "campaign"
|
||||
|
@ -560,12 +560,12 @@ function readyCards(player, clickType)
|
||||
end
|
||||
end
|
||||
|
||||
local cardString = " cards "
|
||||
local cardString = " cards"
|
||||
if count == 1 then
|
||||
cardString = " card "
|
||||
cardString = " card"
|
||||
end
|
||||
|
||||
broadcastToAll("Readied " .. count .. cardString .. " in Play Area")
|
||||
broadcastToAll("Play Area: Readied " .. count .. cardString)
|
||||
end
|
||||
|
||||
---------------------------------------------------------
|
||||
|
130
src/playercards/cards/DreamEnhancingSerum.ttslua
Normal file
130
src/playercards/cards/DreamEnhancingSerum.ttslua
Normal file
@ -0,0 +1,130 @@
|
||||
require("playercards/CardsWithHelper")
|
||||
local playermatApi = require("playermat/PlayermatApi")
|
||||
local matColor, handColor, loopId
|
||||
|
||||
-- intentionally global
|
||||
hasXML = true
|
||||
isHelperEnabled = false
|
||||
|
||||
function updateSave()
|
||||
self.script_state = JSON.encode({ isHelperEnabled = isHelperEnabled, loopId = loopId })
|
||||
end
|
||||
|
||||
function onLoad(savedData)
|
||||
if savedData and savedData ~= "" then
|
||||
local loadedData = JSON.decode(savedData)
|
||||
isHelperEnabled = loadedData.isHelperEnabled
|
||||
loopId = loadedData.loopId
|
||||
end
|
||||
updateColors()
|
||||
createHelperXML()
|
||||
syncDisplayWithOptionPanel()
|
||||
end
|
||||
|
||||
function initialize()
|
||||
updateValue()
|
||||
loopId = Wait.time(updateValue, 2, -1)
|
||||
end
|
||||
|
||||
function shutOff()
|
||||
if loopId then
|
||||
Wait.stop(loopId)
|
||||
loopId = nil
|
||||
end
|
||||
end
|
||||
|
||||
function createHelperXML()
|
||||
local xmlTable = { {
|
||||
tag = "VerticalLayout",
|
||||
attributes = {
|
||||
active = "false",
|
||||
id = "Helper",
|
||||
height = 1200,
|
||||
width = 1200,
|
||||
rotation = "0 0 180",
|
||||
scale = "0.1 0.1 1",
|
||||
position = "0 -55 -22",
|
||||
padding = "30 30 30 30",
|
||||
color = "#3D3C3AE6",
|
||||
},
|
||||
children = { {
|
||||
tag = "Panel",
|
||||
attributes = {
|
||||
preferredHeight="300"
|
||||
},
|
||||
children = { {
|
||||
tag = "Text",
|
||||
attributes = {
|
||||
text = "DES count:",
|
||||
color = "White",
|
||||
font = "font_teutonic-arkham",
|
||||
fontsize = "200"
|
||||
}
|
||||
}}
|
||||
},
|
||||
{
|
||||
tag = "Panel",
|
||||
attributes = {
|
||||
preferredHeight="900"
|
||||
},
|
||||
children = { {
|
||||
tag = "Text",
|
||||
attributes = {
|
||||
id = "Count",
|
||||
fontSize = "700",
|
||||
scale = "2.2 2.2 1",
|
||||
color = "Green",
|
||||
font = "font_teutonic-arkham",
|
||||
text = 0
|
||||
}
|
||||
}}
|
||||
}
|
||||
}
|
||||
} }
|
||||
self.UI.setXmlTable(xmlTable)
|
||||
end
|
||||
|
||||
------------------------
|
||||
-- counting functions
|
||||
------------------------
|
||||
|
||||
function onDrop()
|
||||
updateColors()
|
||||
end
|
||||
|
||||
-- updates the matcolor and handcolor variable
|
||||
function updateColors()
|
||||
matColor = playermatApi.getMatColorByPosition(self.getPosition())
|
||||
handColor = playermatApi.getPlayerColor(matColor)
|
||||
end
|
||||
|
||||
function updateValue()
|
||||
-- update colors if handColor doesn't own a handzone
|
||||
if Player[handColor].getHandCount() == 0 then
|
||||
updateColors()
|
||||
end
|
||||
|
||||
-- if one of the colors is undefined, then end here
|
||||
if matColor == nil or handColor == nil then return end
|
||||
|
||||
-- if there is still no handzone, then end here
|
||||
if Player[handColor].getHandCount() == 0 then return end
|
||||
|
||||
-- count cards in hand
|
||||
local hand = Player[handColor].getHandObjects()
|
||||
|
||||
local cardHash = {}
|
||||
for _, obj in pairs(hand) do
|
||||
if obj.type == "Card" then
|
||||
local name = obj.getName()
|
||||
local title = string.match(name, '(.+)(%s%(%d+%))') or name
|
||||
cardHash[title] = true
|
||||
end
|
||||
end
|
||||
|
||||
local size = 0
|
||||
for _, title in pairs(cardHash) do
|
||||
size = size + 1
|
||||
end
|
||||
self.UI.setAttribute("Count", "text", size)
|
||||
end
|
@ -2,20 +2,11 @@ require("playercards/CardsWithHelper")
|
||||
local playermatApi = require("playermat/PlayermatApi")
|
||||
|
||||
-- intentionally global
|
||||
hasXML = false
|
||||
hasXML = true
|
||||
isHelperEnabled = false
|
||||
|
||||
local modValue, loopId
|
||||
|
||||
local buttonParameters = {
|
||||
click_function = "shutOff",
|
||||
function_owner = self,
|
||||
position = { 0.88, 0.5, -1.33 },
|
||||
font_size = 150,
|
||||
width = 175,
|
||||
height = 175
|
||||
}
|
||||
|
||||
function updateSave()
|
||||
self.script_state = JSON.encode({
|
||||
isHelperEnabled = isHelperEnabled,
|
||||
@ -37,14 +28,13 @@ function onLoad(savedData)
|
||||
modValue = 4
|
||||
end
|
||||
|
||||
createHelperXML()
|
||||
syncDisplayWithOptionPanel()
|
||||
end
|
||||
|
||||
function initialize()
|
||||
self.clearButtons()
|
||||
self.createButton(buttonParameters)
|
||||
updateButton()
|
||||
loopId = Wait.time(updateButton, 2, -1)
|
||||
updateValue()
|
||||
loopId = Wait.time(updateValue, 2, -1)
|
||||
end
|
||||
|
||||
function shutOff()
|
||||
@ -55,9 +45,37 @@ function shutOff()
|
||||
end
|
||||
end
|
||||
|
||||
function updateButton()
|
||||
function createHelperXML()
|
||||
local xmlTable = { {
|
||||
tag = "Panel",
|
||||
attributes = {
|
||||
active = "false",
|
||||
id = "Helper",
|
||||
height = 155,
|
||||
width = 155,
|
||||
rotation = "0 0 180",
|
||||
scale = "0.18 0.18 1",
|
||||
position = "-89 109 -22",
|
||||
padding = "10 10 10 10",
|
||||
color = "#134201E6",
|
||||
},
|
||||
children = { {
|
||||
tag = "Text",
|
||||
attributes = {
|
||||
id = "Count",
|
||||
text = "0",
|
||||
color = "White",
|
||||
font = "font_teutonic-arkham",
|
||||
fontsize = "135"
|
||||
}
|
||||
}}
|
||||
} }
|
||||
self.UI.setXmlTable(xmlTable)
|
||||
end
|
||||
|
||||
function updateValue()
|
||||
local matColor = playermatApi.getMatColorByPosition(self.getPosition())
|
||||
local resources = playermatApi.getCounterValue(matColor, "ResourceCounter")
|
||||
local count = tostring(math.floor(resources / modValue))
|
||||
self.editButton({ index = 0, label = count })
|
||||
self.UI.setAttribute("Count", "text", count)
|
||||
end
|
||||
|
@ -136,7 +136,6 @@ local defaultSlotData = {
|
||||
}
|
||||
|
||||
local activeInvestigatorData = {}
|
||||
local hasDES = false
|
||||
local isClassTextureEnabled = true
|
||||
local isDrawButtonVisible = false
|
||||
local optionPanelVisibility = ""
|
||||
@ -339,7 +338,6 @@ function doUpkeep(_, clickedByColor, isRightClick)
|
||||
updateMessageColor(clickedByColor)
|
||||
|
||||
-- unexhaust cards in play zone, flip action tokens and find Forced Learning / Dream-Enhancing Serum
|
||||
checkForDES()
|
||||
local forcedLearning = false
|
||||
local rot = self.getRotation()
|
||||
for _, obj in ipairs(searchAroundSelf()) do
|
||||
@ -653,23 +651,6 @@ function concatenateListOfStrings(list)
|
||||
return cardList
|
||||
end
|
||||
|
||||
-- checks if DES is present
|
||||
function checkForDES()
|
||||
hasDES = false
|
||||
for _, obj in ipairs(searchAroundSelf()) do
|
||||
if obj.type == "Card" then
|
||||
local cardMetadata = JSON.decode(obj.getGMNotes()) or {}
|
||||
|
||||
-- position is used to exclude deck / discard
|
||||
local cardPos = self.positionToLocal(obj.getPosition())
|
||||
if cardMetadata.id == "06159" and cardPos.x > -1 then
|
||||
hasDES = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------
|
||||
-- XML creation and modifying
|
||||
---------------------------------------------------------
|
||||
@ -1568,5 +1549,3 @@ end
|
||||
function getActiveInvestigatorData() return activeInvestigatorData end
|
||||
|
||||
function setActiveInvestigatorData(newData) activeInvestigatorData = newData end
|
||||
|
||||
function getDES() return hasDES end
|
||||
|
@ -48,23 +48,6 @@ do
|
||||
end
|
||||
end
|
||||
|
||||
-- Instructs a playermat to check for DES
|
||||
---@param matColor string Color of the playermat - White, Orange, Green, Red or All
|
||||
PlayermatApi.checkForDES = function(matColor)
|
||||
for _, mat in pairs(getMatForColor(matColor)) do
|
||||
mat.call("checkForDES")
|
||||
end
|
||||
end
|
||||
|
||||
-- Returns if there is the card "Dream-Enhancing Serum" on the requested playermat
|
||||
---@param matColor string Color of the playermat - White, Orange, Green or Red (does not support "All")
|
||||
---@return boolean: whether DES is present on the playermat
|
||||
PlayermatApi.hasDES = function(matColor)
|
||||
for _, mat in pairs(getMatForColor(matColor)) do
|
||||
return mat.call("getDES")
|
||||
end
|
||||
end
|
||||
|
||||
-- gets the slot data for the playermat
|
||||
---@param matColor string Color of the playermat - White, Orange, Green or Red (does not support "All")
|
||||
PlayermatApi.getSlotData = function(matColor)
|
||||
|
Loading…
x
Reference in New Issue
Block a user