feat(ui): 직업별 덱 미리보기 추가

This commit is contained in:
2026-06-14 19:27:40 +09:00
parent 6f436ef3eb
commit 15bc17b351
3 changed files with 886 additions and 9 deletions

View File

@@ -120,6 +120,27 @@
"Attributes": [],
"Name": "MageSelectHandler"
},
{
"Type": "any",
"DefaultValue": "nil",
"SyncDirection": 0,
"Attributes": [],
"Name": "WarriorDeckHandler"
},
{
"Type": "any",
"DefaultValue": "nil",
"SyncDirection": 0,
"Attributes": [],
"Name": "ThiefDeckHandler"
},
{
"Type": "any",
"DefaultValue": "nil",
"SyncDirection": 0,
"Attributes": [],
"Name": "MageDeckHandler"
},
{
"Type": "any",
"DefaultValue": "nil",
@@ -246,6 +267,27 @@
"Attributes": [],
"Name": "CodexCards"
},
{
"Type": "boolean",
"DefaultValue": "false",
"SyncDirection": 0,
"Attributes": [],
"Name": "ClassDeckMode"
},
{
"Type": "any",
"DefaultValue": "nil",
"SyncDirection": 0,
"Attributes": [],
"Name": "ClassDeckCards"
},
{
"Type": "string",
"DefaultValue": "\"\"",
"SyncDirection": 0,
"Attributes": [],
"Name": "ClassDeckTitle"
},
{
"Type": "any",
"DefaultValue": "nil",
@@ -892,7 +934,7 @@
"Name": null
},
"Arguments": [],
"Code": "local buttonEntity = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/MainMenu/NewGameButton\")\nif buttonEntity ~= nil and buttonEntity.ButtonComponent ~= nil then\n\tif self.NewGameHandler ~= nil then\n\t\tbuttonEntity:DisconnectEvent(ButtonClickEvent, self.NewGameHandler)\n\t\tself.NewGameHandler = nil\n\tend\n\tself.NewGameHandler = buttonEntity:ConnectEvent(ButtonClickEvent, function() self:ShowCharacterSelect() end)\nend\nlocal warrior = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/WarriorButton\")\nif warrior ~= nil and warrior.ButtonComponent ~= nil then\n\tif self.WarriorSelectHandler ~= nil then\n\t\twarrior:DisconnectEvent(ButtonClickEvent, self.WarriorSelectHandler)\n\t\tself.WarriorSelectHandler = nil\n\tend\n\tself.WarriorSelectHandler = warrior:ConnectEvent(ButtonClickEvent, function() self:SelectClass(\"warrior\") end)\nend\nlocal thief = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/ThiefButton\")\nif thief ~= nil and thief.ButtonComponent ~= nil then\n\tif self.ThiefSelectHandler ~= nil then\n\t\tthief:DisconnectEvent(ButtonClickEvent, self.ThiefSelectHandler)\n\t\tself.ThiefSelectHandler = nil\n\tend\n\tself.ThiefSelectHandler = thief:ConnectEvent(ButtonClickEvent, function() self:SelectClass(\"bandit\") end)\nend\nlocal mage = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/MageButton\")\nif mage ~= nil and mage.ButtonComponent ~= nil then\n\tif self.MageSelectHandler ~= nil then\n\t\tmage:DisconnectEvent(ButtonClickEvent, self.MageSelectHandler)\n\t\tself.MageSelectHandler = nil\n\tend\n\tself.MageSelectHandler = mage:ConnectEvent(ButtonClickEvent, function() self:SelectClass(\"magician\") end)\nend\nlocal start = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/StartButton\")\nif start ~= nil and start.ButtonComponent ~= nil then\n\tif self.StartGameHandler ~= nil then\n\t\tstart:DisconnectEvent(ButtonClickEvent, self.StartGameHandler)\n\t\tself.StartGameHandler = nil\n\tend\n\tself.StartGameHandler = start:ConnectEvent(ButtonClickEvent, function() self:StartNewGame() end)\nend\nlocal ascMinus = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/MainMenu/AscMinus\")\nif ascMinus ~= nil and ascMinus.ButtonComponent ~= nil then\n\tif self.AscMinusHandler ~= nil then\n\t\tascMinus:DisconnectEvent(ButtonClickEvent, self.AscMinusHandler)\n\t\tself.AscMinusHandler = nil\n\tend\n\tself.AscMinusHandler = ascMinus:ConnectEvent(ButtonClickEvent, function() self:AdjustAscension(-1) end)\nend\nlocal ascPlus = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/MainMenu/AscPlus\")\nif ascPlus ~= nil and ascPlus.ButtonComponent ~= nil then\n\tif self.AscPlusHandler ~= nil then\n\t\tascPlus:DisconnectEvent(ButtonClickEvent, self.AscPlusHandler)\n\t\tself.AscPlusHandler = nil\n\tend\n\tself.AscPlusHandler = ascPlus:ConnectEvent(ButtonClickEvent, function() self:AdjustAscension(1) end)\nend",
"Code": "local buttonEntity = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/MainMenu/NewGameButton\")\nif buttonEntity ~= nil and buttonEntity.ButtonComponent ~= nil then\n\tif self.NewGameHandler ~= nil then\n\t\tbuttonEntity:DisconnectEvent(ButtonClickEvent, self.NewGameHandler)\n\t\tself.NewGameHandler = nil\n\tend\n\tself.NewGameHandler = buttonEntity:ConnectEvent(ButtonClickEvent, function() self:ShowCharacterSelect() end)\nend\nlocal warrior = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/WarriorButton\")\nif warrior ~= nil and warrior.ButtonComponent ~= nil then\n\tif self.WarriorSelectHandler ~= nil then\n\t\twarrior:DisconnectEvent(ButtonClickEvent, self.WarriorSelectHandler)\n\t\tself.WarriorSelectHandler = nil\n\tend\n\tself.WarriorSelectHandler = warrior:ConnectEvent(ButtonClickEvent, function() self:SelectClass(\"warrior\") end)\nend\nlocal thief = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/ThiefButton\")\nif thief ~= nil and thief.ButtonComponent ~= nil then\n\tif self.ThiefSelectHandler ~= nil then\n\t\tthief:DisconnectEvent(ButtonClickEvent, self.ThiefSelectHandler)\n\t\tself.ThiefSelectHandler = nil\n\tend\n\tself.ThiefSelectHandler = thief:ConnectEvent(ButtonClickEvent, function() self:SelectClass(\"bandit\") end)\nend\nlocal mage = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/MageButton\")\nif mage ~= nil and mage.ButtonComponent ~= nil then\n\tif self.MageSelectHandler ~= nil then\n\t\tmage:DisconnectEvent(ButtonClickEvent, self.MageSelectHandler)\n\t\tself.MageSelectHandler = nil\n\tend\n\tself.MageSelectHandler = mage:ConnectEvent(ButtonClickEvent, function() self:SelectClass(\"magician\") end)\nend\nlocal warriorDeck = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/WarriorDeckButton\")\nif warriorDeck ~= nil and warriorDeck.ButtonComponent ~= nil then\n\tif self.WarriorDeckHandler ~= nil then\n\t\twarriorDeck:DisconnectEvent(ButtonClickEvent, self.WarriorDeckHandler)\n\t\tself.WarriorDeckHandler = nil\n\tend\n\tself.WarriorDeckHandler = warriorDeck:ConnectEvent(ButtonClickEvent, function() self:OpenClassDeck(\"warrior\") end)\nend\nlocal thiefDeck = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/ThiefDeckButton\")\nif thiefDeck ~= nil and thiefDeck.ButtonComponent ~= nil then\n\tif self.ThiefDeckHandler ~= nil then\n\t\tthiefDeck:DisconnectEvent(ButtonClickEvent, self.ThiefDeckHandler)\n\t\tself.ThiefDeckHandler = nil\n\tend\n\tself.ThiefDeckHandler = thiefDeck:ConnectEvent(ButtonClickEvent, function() self:OpenClassDeck(\"bandit\") end)\nend\nlocal mageDeck = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/MageDeckButton\")\nif mageDeck ~= nil and mageDeck.ButtonComponent ~= nil then\n\tif self.MageDeckHandler ~= nil then\n\t\tmageDeck:DisconnectEvent(ButtonClickEvent, self.MageDeckHandler)\n\t\tself.MageDeckHandler = nil\n\tend\n\tself.MageDeckHandler = mageDeck:ConnectEvent(ButtonClickEvent, function() self:OpenClassDeck(\"magician\") end)\nend\nlocal allDeckClose = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/DeckAllHud/Close\")\nif allDeckClose ~= nil and allDeckClose.ButtonComponent ~= nil then\n\tif self.AllDeckCloseHandler ~= nil then\n\t\tallDeckClose:DisconnectEvent(ButtonClickEvent, self.AllDeckCloseHandler)\n\t\tself.AllDeckCloseHandler = nil\n\tend\n\tself.AllDeckCloseHandler = allDeckClose:ConnectEvent(ButtonClickEvent, function() self:CloseAllDeck() end)\nend\nlocal start = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/StartButton\")\nif start ~= nil and start.ButtonComponent ~= nil then\n\tif self.StartGameHandler ~= nil then\n\t\tstart:DisconnectEvent(ButtonClickEvent, self.StartGameHandler)\n\t\tself.StartGameHandler = nil\n\tend\n\tself.StartGameHandler = start:ConnectEvent(ButtonClickEvent, function() self:StartNewGame() end)\nend\nlocal ascMinus = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/MainMenu/AscMinus\")\nif ascMinus ~= nil and ascMinus.ButtonComponent ~= nil then\n\tif self.AscMinusHandler ~= nil then\n\t\tascMinus:DisconnectEvent(ButtonClickEvent, self.AscMinusHandler)\n\t\tself.AscMinusHandler = nil\n\tend\n\tself.AscMinusHandler = ascMinus:ConnectEvent(ButtonClickEvent, function() self:AdjustAscension(-1) end)\nend\nlocal ascPlus = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/MainMenu/AscPlus\")\nif ascPlus ~= nil and ascPlus.ButtonComponent ~= nil then\n\tif self.AscPlusHandler ~= nil then\n\t\tascPlus:DisconnectEvent(ButtonClickEvent, self.AscPlusHandler)\n\t\tself.AscPlusHandler = nil\n\tend\n\tself.AscPlusHandler = ascPlus:ConnectEvent(ButtonClickEvent, function() self:AdjustAscension(1) end)\nend",
"Scope": 2,
"ExecSpace": 6,
"Attributes": [],
@@ -990,7 +1032,7 @@
"Name": null
},
"Arguments": [],
"Code": "self.CodexMode = true\nlocal list = {}\nfor id, c in pairs(self.Cards) do\n\tif c.curse ~= true then\n\t\ttable.insert(list, id)\n\tend\nend\ntable.sort(list)\nself.CodexCards = list\nlocal close = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/DeckAllHud/Close\")\nif close ~= nil and close.ButtonComponent ~= nil then\n\tif self.AllDeckCloseHandler ~= nil then\n\t\tclose:DisconnectEvent(ButtonClickEvent, self.AllDeckCloseHandler)\n\tend\n\tself.AllDeckCloseHandler = close:ConnectEvent(ButtonClickEvent, function() self:CloseAllDeck() end)\nend\nself:SetEntityEnabled(\"/ui/DefaultGroup/LobbyHud\", false)\nlocal hud = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/DeckAllHud\")\nif hud ~= nil then\n\thud.Enable = true\nend\nself:RenderAllDeck()",
"Code": "self.CodexMode = true\nself.ClassDeckMode = false\nlocal list = {}\nfor id, c in pairs(self.Cards) do\n\tif c.curse ~= true then\n\t\ttable.insert(list, id)\n\tend\nend\ntable.sort(list)\nself.CodexCards = list\nlocal close = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/DeckAllHud/Close\")\nif close ~= nil and close.ButtonComponent ~= nil then\n\tif self.AllDeckCloseHandler ~= nil then\n\t\tclose:DisconnectEvent(ButtonClickEvent, self.AllDeckCloseHandler)\n\tend\n\tself.AllDeckCloseHandler = close:ConnectEvent(ButtonClickEvent, function() self:CloseAllDeck() end)\nend\nself:SetEntityEnabled(\"/ui/DefaultGroup/LobbyHud\", false)\nlocal hud = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/DeckAllHud\")\nif hud ~= nil then\n\thud.Enable = true\nend\nself:RenderAllDeck()",
"Scope": 2,
"ExecSpace": 6,
"Attributes": [],
@@ -1695,6 +1737,29 @@
"Attributes": [],
"Name": "ApplyInspectCardVisual"
},
{
"Return": {
"Type": "void",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [
{
"Type": "string",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": "className"
}
],
"Code": "self.CodexMode = false\nself.ClassDeckMode = true\nself.ClassDeckCards = {}\nself.ClassDeckTitle = \"직업 덱\"\nlocal allowed = {}\nif className == \"warrior\" then\n\tallowed[\"warrior\"] = true\n\tallowed[\"fighter\"] = true\n\tallowed[\"page\"] = true\n\tallowed[\"spearman\"] = true\n\tself.ClassDeckTitle = \"전사 전체 덱\"\nelseif className == \"magician\" then\n\tallowed[\"magician\"] = true\n\tallowed[\"firepoison\"] = true\n\tallowed[\"icelightning\"] = true\n\tallowed[\"cleric\"] = true\n\tself.ClassDeckTitle = \"마법사 전체 덱\"\nelse\n\tallowed[\"bandit\"] = true\n\tallowed[\"shiv\"] = true\n\tallowed[\"poisoner\"] = true\n\tallowed[\"trickster\"] = true\n\tself.ClassDeckTitle = \"도적 전체 덱\"\nend\nfor id, c in pairs(self.Cards) do\n\tif c ~= nil and c.curse ~= true and allowed[c.class] == true then\n\t\ttable.insert(self.ClassDeckCards, id)\n\tend\nend\ntable.sort(self.ClassDeckCards, function(a, b)\n\tlocal ca = self.Cards[a]\n\tlocal cb = self.Cards[b]\n\tlocal na = a\n\tlocal nb = b\n\tif ca ~= nil and ca.name ~= nil then na = ca.name end\n\tif cb ~= nil and cb.name ~= nil then nb = cb.name end\n\tif na == nb then return a < b end\n\treturn na < nb\nend)\nself.DeckAllOpen = true\nself:RenderAllDeck()\nlocal hud = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/DeckAllHud\")\nif hud ~= nil then\n\thud.Enable = true\nend",
"Scope": 2,
"ExecSpace": 6,
"Attributes": [],
"Name": "OpenClassDeck"
},
{
"Return": {
"Type": "void",
@@ -1704,7 +1769,7 @@
"Name": null
},
"Arguments": [],
"Code": "local inspectHud = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/DeckInspectHud\")\nif inspectHud ~= nil then\n\tinspectHud.Enable = false\nend\nself.DeckInspectKind = \"\"\nself.DeckAllOpen = true\nself:RenderAllDeck()\nlocal hud = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/DeckAllHud\")\nif hud ~= nil then\n\thud.Enable = true\nend",
"Code": "local inspectHud = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/DeckInspectHud\")\nif inspectHud ~= nil then\n\tinspectHud.Enable = false\nend\nself.DeckInspectKind = \"\"\nself.ClassDeckMode = false\nself.DeckAllOpen = true\nself:RenderAllDeck()\nlocal hud = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/DeckAllHud\")\nif hud ~= nil then\n\thud.Enable = true\nend",
"Scope": 2,
"ExecSpace": 6,
"Attributes": [],
@@ -1719,7 +1784,7 @@
"Name": null
},
"Arguments": [],
"Code": "self.DeckAllOpen = false\nlocal hud = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/DeckAllHud\")\nif hud ~= nil then\n\thud.Enable = false\nend\nif self.CodexMode == true then\n\tself.CodexMode = false\n\tself:ShowLobby()\nend",
"Code": "self.DeckAllOpen = false\nlocal hud = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/DeckAllHud\")\nif hud ~= nil then\n\thud.Enable = false\nend\nif self.ClassDeckMode == true then\n\tself.ClassDeckMode = false\n\tself.ClassDeckCards = {}\n\tself.ClassDeckTitle = \"\"\nend\nif self.CodexMode == true then\n\tself.CodexMode = false\n\tself:ShowLobby()\nend",
"Scope": 2,
"ExecSpace": 6,
"Attributes": [],
@@ -1734,7 +1799,7 @@
"Name": null
},
"Arguments": [],
"Code": "local pile = self.RunDeck or {}\nlocal title = \"모든 덱\"\nif self.CodexMode == true then\n\tpile = self.CodexCards or {}\n\ttitle = \"카드 도감\"\nend\nlocal count = #pile\nself:SetText(\"/ui/DefaultGroup/DeckAllHud/Title\", title .. \" (\" .. tostring(count) .. \")\")\nlocal empty = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/DeckAllHud/Empty\")\nif empty ~= nil then\n\tempty.Enable = count <= 0\nend\nfor i = 1, 120 do\n\tlocal e = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/DeckAllHud/Grid/Card\" .. tostring(i))\n\tif e ~= nil then\n\t\tlocal cardId = pile[i]\n\t\tif cardId == nil then\n\t\t\te.Enable = false\n\t\telse\n\t\t\te.Enable = true\n\t\t\tself:ApplyAllDeckCardVisual(i, cardId)\n\t\tend\n\tend\nend",
"Code": "local pile = self.RunDeck or {}\nlocal title = \"모든 덱\"\nif self.ClassDeckMode == true then\n\tpile = self.ClassDeckCards or {}\n\ttitle = self.ClassDeckTitle\nelseif self.CodexMode == true then\n\tpile = self.CodexCards or {}\n\ttitle = \"카드 도감\"\nend\nlocal count = #pile\nself:SetText(\"/ui/DefaultGroup/DeckAllHud/Title\", title .. \" (\" .. tostring(count) .. \")\")\nlocal empty = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/DeckAllHud/Empty\")\nif empty ~= nil then\n\tempty.Enable = count <= 0\nend\nfor i = 1, 120 do\n\tlocal e = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/DeckAllHud/Grid/Card\" .. tostring(i))\n\tif e ~= nil then\n\t\tlocal cardId = pile[i]\n\t\tif cardId == nil then\n\t\t\te.Enable = false\n\t\telse\n\t\t\te.Enable = true\n\t\t\tself:ApplyAllDeckCardVisual(i, cardId)\n\t\tend\n\tend\nend",
"Scope": 2,
"ExecSpace": 6,
"Attributes": [],

View File

@@ -2314,9 +2314,9 @@ function upsertUi() {
],
}));
const classCards = [
{ key: 'Warrior', label: '\uC804\uC0AC', desc: '\uAC15\uD55C \uACF5\uACA9\uACFC \uBC29\uC5B4', x: -360, enabled: true, tint: { r: 0.74, g: 0.32, b: 0.28, a: 1 } },
{ key: 'Thief', label: '\uB3C4\uC801', desc: '\uB3C5\u00B7\uB2E8\uAC80\u00B7\uB4DC\uB85C\uC6B0', x: 0, enabled: true, tint: { r: 0.26, g: 0.5, b: 0.34, a: 1 } },
{ key: 'Mage', label: '\uB9C8\uBC95\uC0AC', desc: '\uB9C8\uBC95 \uC6D0\uAC70\uB9AC \uB51C\uB7EC', x: 360, enabled: true, tint: { r: 0.3, g: 0.4, b: 0.75, a: 1 } },
{ key: 'Warrior', classId: 'warrior', label: '\uC804\uC0AC', desc: '\uAC15\uD55C \uACF5\uACA9\uACFC \uBC29\uC5B4', x: -360, enabled: true, tint: { r: 0.74, g: 0.32, b: 0.28, a: 1 } },
{ key: 'Thief', classId: 'bandit', label: '\uB3C4\uC801', desc: '\uB3C5\u00B7\uB2E8\uAC80\u00B7\uB4DC\uB85C\uC6B0', x: 0, enabled: true, tint: { r: 0.26, g: 0.5, b: 0.34, a: 1 } },
{ key: 'Mage', classId: 'magician', label: '\uB9C8\uBC95\uC0AC', desc: '\uB9C8\uBC95 \uC6D0\uAC70\uB9AC \uB51C\uB7EC', x: 360, enabled: true, tint: { r: 0.3, g: 0.4, b: 0.75, a: 1 } },
];
for (let i = 0; i < classCards.length; i++) {
const cls = classCards[i];
@@ -2398,6 +2398,20 @@ function upsertUi() {
],
}));
}
select.push(entity({
id: guid('menu', 170 + i),
path: `/ui/DefaultGroup/CharacterSelectHud/${cls.key}DeckButton`,
modelId: 'uibutton',
entryId: 'UIButton',
componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.ButtonComponent,MOD.Core.TextComponent',
displayOrder: 18 + i,
components: [
transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: 160, y: 46 }, pos: { x: cls.x, y: -160 }, align: ALIGN_CENTER }),
sprite({ color: { r: 0.11, g: 0.13, b: 0.16, a: 1 }, type: 1, raycast: true }),
button({ enabled: cls.enabled }),
text({ value: '\uB371 \uBCF4\uAE30', fontSize: 20, bold: true, color: GOLD, alignment: 0 }),
],
}));
}
select.push(entity({
id: guid('menu', 180),
@@ -2707,6 +2721,9 @@ function writeCodeblocks() {
prop('any', 'WarriorSelectHandler'),
prop('any', 'ThiefSelectHandler'),
prop('any', 'MageSelectHandler'),
prop('any', 'WarriorDeckHandler'),
prop('any', 'ThiefDeckHandler'),
prop('any', 'MageDeckHandler'),
prop('any', 'AscMinusHandler'),
prop('any', 'AscPlusHandler'),
prop('any', 'JobOpts'),
@@ -2725,6 +2742,9 @@ function writeCodeblocks() {
prop('number', 'LobbyTpTries', '0'),
prop('boolean', 'CodexMode', 'false'),
prop('any', 'CodexCards'),
prop('boolean', 'ClassDeckMode', 'false'),
prop('any', 'ClassDeckCards'),
prop('string', 'ClassDeckTitle', '""'),
prop('any', 'SoulUnlocks'),
prop('any', 'SoulShopDef'),
prop('boolean', 'SoulShopBound', 'false'),
@@ -2919,6 +2939,38 @@ if mage ~= nil and mage.ButtonComponent ~= nil then
end
self.MageSelectHandler = mage:ConnectEvent(ButtonClickEvent, function() self:SelectClass("magician") end)
end
local warriorDeck = _EntityService:GetEntityByPath("/ui/DefaultGroup/CharacterSelectHud/WarriorDeckButton")
if warriorDeck ~= nil and warriorDeck.ButtonComponent ~= nil then
if self.WarriorDeckHandler ~= nil then
warriorDeck:DisconnectEvent(ButtonClickEvent, self.WarriorDeckHandler)
self.WarriorDeckHandler = nil
end
self.WarriorDeckHandler = warriorDeck:ConnectEvent(ButtonClickEvent, function() self:OpenClassDeck("warrior") end)
end
local thiefDeck = _EntityService:GetEntityByPath("/ui/DefaultGroup/CharacterSelectHud/ThiefDeckButton")
if thiefDeck ~= nil and thiefDeck.ButtonComponent ~= nil then
if self.ThiefDeckHandler ~= nil then
thiefDeck:DisconnectEvent(ButtonClickEvent, self.ThiefDeckHandler)
self.ThiefDeckHandler = nil
end
self.ThiefDeckHandler = thiefDeck:ConnectEvent(ButtonClickEvent, function() self:OpenClassDeck("bandit") end)
end
local mageDeck = _EntityService:GetEntityByPath("/ui/DefaultGroup/CharacterSelectHud/MageDeckButton")
if mageDeck ~= nil and mageDeck.ButtonComponent ~= nil then
if self.MageDeckHandler ~= nil then
mageDeck:DisconnectEvent(ButtonClickEvent, self.MageDeckHandler)
self.MageDeckHandler = nil
end
self.MageDeckHandler = mageDeck:ConnectEvent(ButtonClickEvent, function() self:OpenClassDeck("magician") end)
end
local allDeckClose = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckAllHud/Close")
if allDeckClose ~= nil and allDeckClose.ButtonComponent ~= nil then
if self.AllDeckCloseHandler ~= nil then
allDeckClose:DisconnectEvent(ButtonClickEvent, self.AllDeckCloseHandler)
self.AllDeckCloseHandler = nil
end
self.AllDeckCloseHandler = allDeckClose:ConnectEvent(ButtonClickEvent, function() self:CloseAllDeck() end)
end
local start = _EntityService:GetEntityByPath("/ui/DefaultGroup/CharacterSelectHud/StartButton")
if start ~= nil and start.ButtonComponent ~= nil then
if self.StartGameHandler ~= nil then
@@ -2997,6 +3049,7 @@ bindClick("/ui/DefaultGroup/LobbyHud/AscPlus", function() self:AdjustAscension(1
bindClick("/ui/DefaultGroup/BoardHud/Close", function() self:CloseBoard() end)
bindClick("/ui/DefaultGroup/SoulShopHud/Close", function() self:CloseSoulShop() end)`),
method('ShowCodex', `self.CodexMode = true
self.ClassDeckMode = false
local list = {}
for id, c in pairs(self.Cards) do
if c.curse ~= true then
@@ -3707,11 +3760,57 @@ end`, [
{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' },
{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'cardId' },
]),
method('OpenClassDeck', `self.CodexMode = false
self.ClassDeckMode = true
self.ClassDeckCards = {}
self.ClassDeckTitle = "직업 덱"
local allowed = {}
if className == "warrior" then
allowed["warrior"] = true
allowed["fighter"] = true
allowed["page"] = true
allowed["spearman"] = true
self.ClassDeckTitle = "전사 전체 덱"
elseif className == "magician" then
allowed["magician"] = true
allowed["firepoison"] = true
allowed["icelightning"] = true
allowed["cleric"] = true
self.ClassDeckTitle = "마법사 전체 덱"
else
allowed["bandit"] = true
allowed["shiv"] = true
allowed["poisoner"] = true
allowed["trickster"] = true
self.ClassDeckTitle = "도적 전체 덱"
end
for id, c in pairs(self.Cards) do
if c ~= nil and c.curse ~= true and allowed[c.class] == true then
table.insert(self.ClassDeckCards, id)
end
end
table.sort(self.ClassDeckCards, function(a, b)
local ca = self.Cards[a]
local cb = self.Cards[b]
local na = a
local nb = b
if ca ~= nil and ca.name ~= nil then na = ca.name end
if cb ~= nil and cb.name ~= nil then nb = cb.name end
if na == nb then return a < b end
return na < nb
end)
self.DeckAllOpen = true
self:RenderAllDeck()
local hud = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckAllHud")
if hud ~= nil then
hud.Enable = true
end`, [{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'className' }]),
method('OpenAllDeck', `local inspectHud = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckInspectHud")
if inspectHud ~= nil then
inspectHud.Enable = false
end
self.DeckInspectKind = ""
self.ClassDeckMode = false
self.DeckAllOpen = true
self:RenderAllDeck()
local hud = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckAllHud")
@@ -3723,13 +3822,21 @@ local hud = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckAllHud")
if hud ~= nil then
hud.Enable = false
end
if self.ClassDeckMode == true then
self.ClassDeckMode = false
self.ClassDeckCards = {}
self.ClassDeckTitle = ""
end
if self.CodexMode == true then
self.CodexMode = false
self:ShowLobby()
end`),
method('RenderAllDeck', `local pile = self.RunDeck or {}
local title = "모든 덱"
if self.CodexMode == true then
if self.ClassDeckMode == true then
pile = self.ClassDeckCards or {}
title = self.ClassDeckTitle
elseif self.CodexMode == true then
pile = self.CodexCards or {}
title = "카드 도감"
end

View File

@@ -233949,6 +233949,241 @@
"@version": 1
}
},
{
"id": "0e0000aa-0000-4000-8000-00000e0000aa",
"path": "/ui/DefaultGroup/CharacterSelectHud/WarriorDeckButton",
"componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.ButtonComponent,MOD.Core.TextComponent",
"jsonString": {
"name": "WarriorDeckButton",
"path": "/ui/DefaultGroup/CharacterSelectHud/WarriorDeckButton",
"nameEditable": true,
"enable": true,
"visible": true,
"localize": true,
"displayOrder": 18,
"pathConstraints": "////",
"revision": 1,
"origin": {
"type": "Model",
"entry_id": "UIButton",
"sub_entity_id": null,
"root_entity_id": null,
"replaced_model_id": null
},
"modelId": "uibutton",
"@components": [
{
"@type": "MOD.Core.UITransformComponent",
"ActivePlatform": 255,
"AlignmentOption": 0,
"AnchorsMax": {
"x": 0.5,
"y": 0.5
},
"AnchorsMin": {
"x": 0.5,
"y": 0.5
},
"MobileOnly": false,
"OffsetMax": {
"x": -280,
"y": -137
},
"OffsetMin": {
"x": -440,
"y": -183
},
"Pivot": {
"x": 0.5,
"y": 0.5
},
"RectSize": {
"x": 160,
"y": 46
},
"UIMode": 1,
"UIScale": {
"x": 1,
"y": 1,
"z": 1
},
"UIVersion": 2,
"anchoredPosition": {
"x": -360,
"y": -160
},
"Position": {
"x": -360,
"y": -160,
"z": 0
},
"QuaternionRotation": {
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"Scale": {
"x": 1,
"y": 1,
"z": 1
},
"Enable": true
},
{
"@type": "MOD.Core.SpriteGUIRendererComponent",
"AnimClipPlayType": 0,
"EndFrameIndex": 2147483647,
"ImageRUID": {
"DataId": ""
},
"LocalPosition": {
"x": 0,
"y": 0
},
"LocalScale": {
"x": 1,
"y": 1
},
"OverrideSorting": false,
"PlayRate": 1,
"PreserveSprite": 0,
"StartFrameIndex": 0,
"Color": {
"r": 0.11,
"g": 0.13,
"b": 0.16,
"a": 1
},
"DropShadow": false,
"DropShadowAngle": 30,
"DropShadowColor": {
"r": 0,
"g": 0,
"b": 0,
"a": 0.72
},
"DropShadowDistance": 32,
"FillAmount": 1,
"FillCenter": true,
"FillClockWise": true,
"FillMethod": 0,
"FillOrigin": 0,
"FlipX": false,
"FlipY": false,
"FrameColumn": 1,
"FrameRate": 0,
"FrameRow": 1,
"Outline": false,
"OutlineColor": {
"r": 0,
"g": 0,
"b": 0,
"a": 1
},
"OutlineWidth": 3,
"RaycastTarget": true,
"Type": 1,
"Enable": true
},
{
"@type": "MOD.Core.ButtonComponent",
"Colors": {
"NormalColor": {
"r": 1,
"g": 1,
"b": 1,
"a": 1
},
"HighlightedColor": {
"r": 0.9607843,
"g": 0.9607843,
"b": 0.9607843,
"a": 1
},
"PressedColor": {
"r": 0.784313738,
"g": 0.784313738,
"b": 0.784313738,
"a": 1
},
"SelectedColor": {
"r": 0.9607843,
"g": 0.9607843,
"b": 0.9607843,
"a": 1
},
"DisabledColor": {
"r": 0.784313738,
"g": 0.784313738,
"b": 0.784313738,
"a": 0.5019608
},
"ColorMultiplier": 1,
"FadeDuration": 0.1
},
"ImageRUIDs": {
"HighlightedSprite": null,
"PressedSprite": null,
"SelectedSprite": null,
"DisabledSprite": null
},
"KeyCode": 0,
"OverrideSorting": false,
"Transition": 1,
"Enable": true
},
{
"@type": "MOD.Core.TextComponent",
"Alignment": 0,
"Bold": true,
"DropShadow": false,
"DropShadowAngle": 30,
"DropShadowColor": {
"r": 0,
"g": 0,
"b": 0,
"a": 0.72
},
"DropShadowDistance": 32,
"Font": 0,
"FontColor": {
"r": 0.94,
"g": 0.74,
"b": 0.26,
"a": 1
},
"FontSize": 20,
"MaxSize": 20,
"MinSize": 8,
"OutlineColor": {
"r": 0.08,
"g": 0.08,
"b": 0.08,
"a": 1
},
"OutlineDistance": {
"x": 1,
"y": -1
},
"OutlineWidth": 1,
"Overflow": 0,
"OverrideSorting": false,
"Padding": {
"left": 0,
"right": 0,
"top": 0,
"bottom": 0
},
"SizeFit": false,
"Text": "덱 보기",
"UseOutLine": true,
"Enable": true
}
],
"@version": 1
}
},
{
"id": "0e00006f-0000-4000-8000-00000e00006f",
"path": "/ui/DefaultGroup/CharacterSelectHud/ThiefButton",
@@ -234654,6 +234889,241 @@
"@version": 1
}
},
{
"id": "0e0000ab-0000-4000-8000-00000e0000ab",
"path": "/ui/DefaultGroup/CharacterSelectHud/ThiefDeckButton",
"componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.ButtonComponent,MOD.Core.TextComponent",
"jsonString": {
"name": "ThiefDeckButton",
"path": "/ui/DefaultGroup/CharacterSelectHud/ThiefDeckButton",
"nameEditable": true,
"enable": true,
"visible": true,
"localize": true,
"displayOrder": 19,
"pathConstraints": "////",
"revision": 1,
"origin": {
"type": "Model",
"entry_id": "UIButton",
"sub_entity_id": null,
"root_entity_id": null,
"replaced_model_id": null
},
"modelId": "uibutton",
"@components": [
{
"@type": "MOD.Core.UITransformComponent",
"ActivePlatform": 255,
"AlignmentOption": 0,
"AnchorsMax": {
"x": 0.5,
"y": 0.5
},
"AnchorsMin": {
"x": 0.5,
"y": 0.5
},
"MobileOnly": false,
"OffsetMax": {
"x": 80,
"y": -137
},
"OffsetMin": {
"x": -80,
"y": -183
},
"Pivot": {
"x": 0.5,
"y": 0.5
},
"RectSize": {
"x": 160,
"y": 46
},
"UIMode": 1,
"UIScale": {
"x": 1,
"y": 1,
"z": 1
},
"UIVersion": 2,
"anchoredPosition": {
"x": 0,
"y": -160
},
"Position": {
"x": 0,
"y": -160,
"z": 0
},
"QuaternionRotation": {
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"Scale": {
"x": 1,
"y": 1,
"z": 1
},
"Enable": true
},
{
"@type": "MOD.Core.SpriteGUIRendererComponent",
"AnimClipPlayType": 0,
"EndFrameIndex": 2147483647,
"ImageRUID": {
"DataId": ""
},
"LocalPosition": {
"x": 0,
"y": 0
},
"LocalScale": {
"x": 1,
"y": 1
},
"OverrideSorting": false,
"PlayRate": 1,
"PreserveSprite": 0,
"StartFrameIndex": 0,
"Color": {
"r": 0.11,
"g": 0.13,
"b": 0.16,
"a": 1
},
"DropShadow": false,
"DropShadowAngle": 30,
"DropShadowColor": {
"r": 0,
"g": 0,
"b": 0,
"a": 0.72
},
"DropShadowDistance": 32,
"FillAmount": 1,
"FillCenter": true,
"FillClockWise": true,
"FillMethod": 0,
"FillOrigin": 0,
"FlipX": false,
"FlipY": false,
"FrameColumn": 1,
"FrameRate": 0,
"FrameRow": 1,
"Outline": false,
"OutlineColor": {
"r": 0,
"g": 0,
"b": 0,
"a": 1
},
"OutlineWidth": 3,
"RaycastTarget": true,
"Type": 1,
"Enable": true
},
{
"@type": "MOD.Core.ButtonComponent",
"Colors": {
"NormalColor": {
"r": 1,
"g": 1,
"b": 1,
"a": 1
},
"HighlightedColor": {
"r": 0.9607843,
"g": 0.9607843,
"b": 0.9607843,
"a": 1
},
"PressedColor": {
"r": 0.784313738,
"g": 0.784313738,
"b": 0.784313738,
"a": 1
},
"SelectedColor": {
"r": 0.9607843,
"g": 0.9607843,
"b": 0.9607843,
"a": 1
},
"DisabledColor": {
"r": 0.784313738,
"g": 0.784313738,
"b": 0.784313738,
"a": 0.5019608
},
"ColorMultiplier": 1,
"FadeDuration": 0.1
},
"ImageRUIDs": {
"HighlightedSprite": null,
"PressedSprite": null,
"SelectedSprite": null,
"DisabledSprite": null
},
"KeyCode": 0,
"OverrideSorting": false,
"Transition": 1,
"Enable": true
},
{
"@type": "MOD.Core.TextComponent",
"Alignment": 0,
"Bold": true,
"DropShadow": false,
"DropShadowAngle": 30,
"DropShadowColor": {
"r": 0,
"g": 0,
"b": 0,
"a": 0.72
},
"DropShadowDistance": 32,
"Font": 0,
"FontColor": {
"r": 0.94,
"g": 0.74,
"b": 0.26,
"a": 1
},
"FontSize": 20,
"MaxSize": 20,
"MinSize": 8,
"OutlineColor": {
"r": 0.08,
"g": 0.08,
"b": 0.08,
"a": 1
},
"OutlineDistance": {
"x": 1,
"y": -1
},
"OutlineWidth": 1,
"Overflow": 0,
"OverrideSorting": false,
"Padding": {
"left": 0,
"right": 0,
"top": 0,
"bottom": 0
},
"SizeFit": false,
"Text": "덱 보기",
"UseOutLine": true,
"Enable": true
}
],
"@version": 1
}
},
{
"id": "0e000070-0000-4000-8000-00000e000070",
"path": "/ui/DefaultGroup/CharacterSelectHud/MageButton",
@@ -235359,6 +235829,241 @@
"@version": 1
}
},
{
"id": "0e0000ac-0000-4000-8000-00000e0000ac",
"path": "/ui/DefaultGroup/CharacterSelectHud/MageDeckButton",
"componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.ButtonComponent,MOD.Core.TextComponent",
"jsonString": {
"name": "MageDeckButton",
"path": "/ui/DefaultGroup/CharacterSelectHud/MageDeckButton",
"nameEditable": true,
"enable": true,
"visible": true,
"localize": true,
"displayOrder": 20,
"pathConstraints": "////",
"revision": 1,
"origin": {
"type": "Model",
"entry_id": "UIButton",
"sub_entity_id": null,
"root_entity_id": null,
"replaced_model_id": null
},
"modelId": "uibutton",
"@components": [
{
"@type": "MOD.Core.UITransformComponent",
"ActivePlatform": 255,
"AlignmentOption": 0,
"AnchorsMax": {
"x": 0.5,
"y": 0.5
},
"AnchorsMin": {
"x": 0.5,
"y": 0.5
},
"MobileOnly": false,
"OffsetMax": {
"x": 440,
"y": -137
},
"OffsetMin": {
"x": 280,
"y": -183
},
"Pivot": {
"x": 0.5,
"y": 0.5
},
"RectSize": {
"x": 160,
"y": 46
},
"UIMode": 1,
"UIScale": {
"x": 1,
"y": 1,
"z": 1
},
"UIVersion": 2,
"anchoredPosition": {
"x": 360,
"y": -160
},
"Position": {
"x": 360,
"y": -160,
"z": 0
},
"QuaternionRotation": {
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"Scale": {
"x": 1,
"y": 1,
"z": 1
},
"Enable": true
},
{
"@type": "MOD.Core.SpriteGUIRendererComponent",
"AnimClipPlayType": 0,
"EndFrameIndex": 2147483647,
"ImageRUID": {
"DataId": ""
},
"LocalPosition": {
"x": 0,
"y": 0
},
"LocalScale": {
"x": 1,
"y": 1
},
"OverrideSorting": false,
"PlayRate": 1,
"PreserveSprite": 0,
"StartFrameIndex": 0,
"Color": {
"r": 0.11,
"g": 0.13,
"b": 0.16,
"a": 1
},
"DropShadow": false,
"DropShadowAngle": 30,
"DropShadowColor": {
"r": 0,
"g": 0,
"b": 0,
"a": 0.72
},
"DropShadowDistance": 32,
"FillAmount": 1,
"FillCenter": true,
"FillClockWise": true,
"FillMethod": 0,
"FillOrigin": 0,
"FlipX": false,
"FlipY": false,
"FrameColumn": 1,
"FrameRate": 0,
"FrameRow": 1,
"Outline": false,
"OutlineColor": {
"r": 0,
"g": 0,
"b": 0,
"a": 1
},
"OutlineWidth": 3,
"RaycastTarget": true,
"Type": 1,
"Enable": true
},
{
"@type": "MOD.Core.ButtonComponent",
"Colors": {
"NormalColor": {
"r": 1,
"g": 1,
"b": 1,
"a": 1
},
"HighlightedColor": {
"r": 0.9607843,
"g": 0.9607843,
"b": 0.9607843,
"a": 1
},
"PressedColor": {
"r": 0.784313738,
"g": 0.784313738,
"b": 0.784313738,
"a": 1
},
"SelectedColor": {
"r": 0.9607843,
"g": 0.9607843,
"b": 0.9607843,
"a": 1
},
"DisabledColor": {
"r": 0.784313738,
"g": 0.784313738,
"b": 0.784313738,
"a": 0.5019608
},
"ColorMultiplier": 1,
"FadeDuration": 0.1
},
"ImageRUIDs": {
"HighlightedSprite": null,
"PressedSprite": null,
"SelectedSprite": null,
"DisabledSprite": null
},
"KeyCode": 0,
"OverrideSorting": false,
"Transition": 1,
"Enable": true
},
{
"@type": "MOD.Core.TextComponent",
"Alignment": 0,
"Bold": true,
"DropShadow": false,
"DropShadowAngle": 30,
"DropShadowColor": {
"r": 0,
"g": 0,
"b": 0,
"a": 0.72
},
"DropShadowDistance": 32,
"Font": 0,
"FontColor": {
"r": 0.94,
"g": 0.74,
"b": 0.26,
"a": 1
},
"FontSize": 20,
"MaxSize": 20,
"MinSize": 8,
"OutlineColor": {
"r": 0.08,
"g": 0.08,
"b": 0.08,
"a": 1
},
"OutlineDistance": {
"x": 1,
"y": -1
},
"OutlineWidth": 1,
"Overflow": 0,
"OverrideSorting": false,
"Padding": {
"left": 0,
"right": 0,
"top": 0,
"bottom": 0
},
"SizeFit": false,
"Text": "덱 보기",
"UseOutLine": true,
"Enable": true
}
],
"@version": 1
}
},
{
"id": "0e0000b4-0000-4000-8000-00000e0000b4",
"path": "/ui/DefaultGroup/CharacterSelectHud/StartButton",