From e8dbafb19d9865e15a14f55b70e7709c61ce88bd Mon Sep 17 00:00:00 2001 From: CAtlas0784 Date: Sat, 31 Oct 2026 21:40:22 +0700 Subject: [PATCH] feat: support Currency Wars damage reports, King Pom-Pom metadata and CW commands --- .gitignore | 4 ++++ js/app.js | 10 +++++++--- js/avatars-data.js | 14 ++++++++++++++ js/command-assistant.mjs | 1 + 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 14f186c..a0b32be 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,7 @@ config.local.json config.local.js .env .env.local + +# Python +__pycache__/ +*.py[cod] diff --git a/js/app.js b/js/app.js index 8b61ad6..300da41 100644 --- a/js/app.js +++ b/js/app.js @@ -1484,7 +1484,7 @@ function renderMiniBattleSummary() { const elemColor = ELEMENT_COLORS[meta.element] || '#38bdf8'; const pct = getAvatarDamagePercent(av, report.team_total_damage || 0, hasAvatarDamage); const iconUrl = getAvatarIconUrl(av.avatar_id); - const rankStr = av.rank !== undefined ? `E${av.rank}` : ''; + const rankStr = report.is_currency_wars ? (av.rank ? `${av.rank}★` : '1★') : (av.rank !== undefined ? `E${av.rank}` : ''); const lvlStr = av.level ? `Lv.${av.level}` : ''; const metaSub = [lvlStr, rankStr, translatePath(meta.path)].filter(Boolean).join(' • '); @@ -9230,6 +9230,7 @@ function renderEmptyDamageAnalyst() { function orderBattleReportAvatars(avatars) { if (!Array.isArray(avatars) || avatars.length < 2) return avatars || []; + if (analystState.currentReport?.is_currency_wars || avatars.length > 4) return avatars; const lineup = state.statusData?.lineups; if (!lineup) return avatars; @@ -9309,7 +9310,10 @@ function renderDamageAnalyst() { } } - const colors = ['#ef4444', '#38bdf8', '#34d399', '#fbbf24', '#c084fc', '#ec4899']; + const colors = [ + '#ef4444', '#38bdf8', '#34d399', '#fbbf24', '#c084fc', '#ec4899', + '#f97316', '#14b8a6', '#a855f7', '#06b6d4', '#eab308', '#f43f5e' + ]; // Team Share Bar if (el.analystShareBarContainer) { @@ -9394,7 +9398,7 @@ function renderDamageAnalyst() {
${info.name} - Lv.${a.level || 80} E${a.rank !== undefined ? a.rank : 0} + Lv.${a.level || 80} ${report.is_currency_wars ? `${a.rank || 1}★` : `E${a.rank !== undefined ? a.rank : 0}`}
${translatePath(info.path)} • ${translateElement(info.element)} diff --git a/js/avatars-data.js b/js/avatars-data.js index e02c1bf..1413ce6 100644 --- a/js/avatars-data.js +++ b/js/avatars-data.js @@ -2079,6 +2079,20 @@ export const AVATAR_METADATA = { "element": "Lightning", "rarity": 5, "hasExRank": false + }, + "6042": { + "names": { + "th": "King Pom-Pom", + "en": "King Pom-Pom", + "zh-CN": "帕姆大王", + "zh-TW": "帕姆大王", + "ja": "パム大王", + "ko": "폼폼 대왕" + }, + "path": "Elation", + "element": "Physical", + "rarity": 5, + "hasExRank": false } }; diff --git a/js/command-assistant.mjs b/js/command-assistant.mjs index 94cf5de..beb63b9 100644 --- a/js/command-assistant.mjs +++ b/js/command-assistant.mjs @@ -16,6 +16,7 @@ export const COMMANDS = [ spec('/cw help', 'แสดงวิธีใช้คำสั่ง CW'), spec('/cw status', 'ดูเงิน HP เลเวล และสถานะรอบ CW'), spec('/cw list', 'แสดงรายการ ID ของ CW', [arg('category', 'เลือกชนิดข้อมูล', ['role','equip','orb','consumable','forge'])]), ...['gold','hp','exp'].map(p => spec('/cw '+p, p === 'exp' ? 'เพิ่ม EXP ในรอบ CW' : 'ตั้งค่า '+p+' ในรอบ CW', [arg(p === 'exp' ? 'gain' : 'total', p === 'hp' ? 'HP 1 ถึงเพดานของรอบปัจจุบัน' : 'จำนวนเต็มไม่ติดลบ (เป็นยอดรวม ยกเว้น exp ที่เป็นจำนวนเพิ่ม)', ['1','10','100','1000'])])), + ...['tbpower','tb','trailblaze'].map(p => spec('/cw '+p, 'ตั้งค่าพลังบุกเบิก (Trailblaze Power / เหรียญร้านรถไฟ) ในรอบ CW', [arg('total', 'จำนวนพลังบุกเบิก เช่น 10, 50, 100', ['10','50','100','500'])])), spec('/cw role', 'เพิ่มตัวละคร CW (ใช้ได้ใน Preparation)', [arg('roleID', 'เลือก Role ID ของ CW', 'cw_roles'), arg('star', 'ดาวที่มีข้อมูลรองรับสำหรับ Role นี้', 'cw_stars'), quantity()]), ...['equip','orb','consumable','forge'].map(p => spec('/cw '+p, 'เพิ่ม '+p+' ในรอบ CW (Preparation)', [arg('itemID', 'เลือก ID จากข้อมูล CW ของ Client', 'cw_'+p), quantity()])), ];