+
+
+
+
+
⚙️ ตั้งค่าการเชื่อมต่อ API Gateway
+
กำหนด Endpoint และโหมดของเซิร์ฟเวอร์ที่ต้องการสั่งการ
-
+
+
+
+
+
🖼️ การแสดงผลการ์ด Showcase
+
ปรับแต่งความสวยงามและรายละเอียดในหน้าการ์ดแสดงผล Build
+
+
+
+
+
+
แสดงจำนวน Roll ของซับสเตตัสรีลิกส์
+
แสดงแท็กจำนวนครั้งที่สุ่มลงสเตตัสย่อย (Sub-stat Roll Counts)
+
+
+
+
+
+
+
+
เอฟเฟกต์แสงเรืองตามธาตุ (Element Aura Glow)
+
เปลี่ยนสีพื้นหลังและการเรืองแสงของการ์ดตามธาตุของตัวละครนั้นๆ
+
+
+
+
+
+
+
+
+
🧹 จัดการข้อมูลแคช & รีเซ็ตระบบ
+
ล้างข้อมูลชั่วคราวในเบราว์เซอร์หรือคืนค่าเครื่องมือเป็นค่าเริ่มต้น
+
+
+
+ สถานะหน่วยความจำ LocalStorage:
+ ตรวจวัด...
+
+
+
+
+
+
+
+
+
+
diff --git a/js/app.js b/js/app.js
index 9b51daf..dbfd649 100644
--- a/js/app.js
+++ b/js/app.js
@@ -6,7 +6,7 @@ import { SUPPORTED_LANGUAGES, TRANSLATIONS, getCurrentLanguage, setLanguage, t,
const state = {
serverMode: localStorage.getItem('gac_srtool_mode') || 'gac', // 'gac' | 'firefly' | 'robin'
apiUrl: localStorage.getItem('gac_srtool_api_url') || 'http://localhost:21000',
- pingIntervalSec: parseInt(localStorage.getItem('gac_srtool_ping_interval') || '10', 10),
+ pingIntervalSec: 10,
isConnected: false,
statusData: null,
avatarsList: [],
@@ -16,7 +16,12 @@ const state = {
activeTab: 'tab-dashboard',
selectedLineupSlot: null,
selectedAvatarDetail: null,
- creativeMode: localStorage.getItem('gac_srtool_creative_mode') === 'true'
+ creativeMode: localStorage.getItem('gac_srtool_creative_mode') === 'true' || localStorage.getItem('gac_srtool_default_creative') === 'true',
+ defaultEnergy: parseInt(localStorage.getItem('gac_srtool_default_energy') || '50', 10),
+ autoSync: localStorage.getItem('gac_srtool_auto_sync') !== 'false',
+ defaultCreative: localStorage.getItem('gac_srtool_default_creative') === 'true',
+ showcaseRolls: localStorage.getItem('gac_srtool_showcase_rolls') !== 'false',
+ showcaseAura: localStorage.getItem('gac_srtool_showcase_aura') !== 'false'
};
// UI Elements Map
@@ -117,7 +122,14 @@ const el = {
// Settings
formSettings: document.getElementById('form-settings'),
settingApiUrl: document.getElementById('setting-api-url'),
- settingPingInterval: document.getElementById('setting-ping-interval'),
+ btnTestConnection: document.getElementById('btn-test-connection'),
+ pingLatencyBadge: document.getElementById('ping-latency-badge'),
+ settingAutoSync: document.getElementById('setting-auto-sync'),
+ settingDefaultCreative: document.getElementById('setting-default-creative'),
+ settingShowcaseRolls: document.getElementById('setting-showcase-rolls'),
+ settingShowcaseAura: document.getElementById('setting-showcase-aura'),
+ lblCacheUsage: document.getElementById('lbl-cache-usage'),
+ btnClearBrowserCache: document.getElementById('btn-clear-browser-cache'),
btnResetSettings: document.getElementById('btn-reset-settings'),
// Character Detail Modal
@@ -1830,6 +1842,10 @@ function renderShowcaseCard(avatarId) {
6: { name: "สร้อย", stat: meta.path === 'Preservation' || meta.path === 'Harmony' ? "ERR 19.4%" : "ATK 43.2%" }
};
+ const showRolls = localStorage.getItem('gac_srtool_showcase_rolls') !== 'false';
+ const showAura = localStorage.getItem('gac_srtool_showcase_aura') !== 'false';
+ const rollBadge = (rolls) => showRolls ? `
+${rolls}` : '';
+
let relicsHtml = '';
for (let slot = 1; slot <= 6; slot++) {
const equipped = avatarRelics.find(r => (r.relic_id % 10 === slot));
@@ -1850,10 +1866,10 @@ function renderShowcaseCard(avatarId) {
${slotInfo.stat}