diff --git a/index.html b/index.html
index 65993d6..0558600 100644
--- a/index.html
+++ b/index.html
@@ -134,14 +134,64 @@
-
⚡ ดำเนินการด่วน
-
ส่งคำสั่งไปยังเซิร์ฟเวอร์ทันที
-
-
@@ -599,8 +649,8 @@
-
- 140/140
+
+ 70/140
diff --git a/js/app.js b/js/app.js
index 390f211..6392a66 100644
--- a/js/app.js
+++ b/js/app.js
@@ -46,8 +46,12 @@ const el = {
lineupContainer: document.getElementById('lineup-container'),
toggleCreativeMode: document.getElementById('toggle-creative-mode'),
badgeCreativeMode: document.getElementById('badge-creative-mode'),
- btnQuickMaxAll: document.getElementById('btn-quick-max-all'),
- btnQuickSyncPersistent: document.getElementById('btn-quick-sync-persistent'),
+ btnQuickEnergy50: document.getElementById('btn-quick-energy-50'),
+ btnQuickEnergy100: document.getElementById('btn-quick-energy-100'),
+ btnQuickUnlockAllAvatars: document.getElementById('btn-quick-unlock-all-avatars'),
+ btnQuickAddAllLcs: document.getElementById('btn-quick-add-all-lcs'),
+ btnQuickTeleportTrain: document.getElementById('btn-quick-teleport-train'),
+ btnQuickClearLineup: document.getElementById('btn-quick-clear-lineup'),
// Avatars
avatarsGrid: document.getElementById('avatars-grid'),
@@ -1112,9 +1116,10 @@ function openAvatarDetailModal(avatarItem) {
el.checkTraceStats.checked = (anchorSkills['9'] ?? skills[`${aid}201`] ?? 1) > 0;
}
- // Ultimate Energy
+ // Ultimate Energy (Default 50% as standard in Star Rail)
const maxSp = av?.sp_max ?? 140;
- const currentSp = av?.sp_value ?? maxSp;
+ const defaultStartingSp = Math.floor(maxSp * 0.5);
+ const currentSp = (av?.sp_value !== undefined && av?.sp_value !== null) ? av.sp_value : defaultStartingSp;
if (el.rangeCharEnergy && el.valCharEnergy) {
el.rangeCharEnergy.max = maxSp;
el.rangeCharEnergy.value = currentSp;
@@ -1233,10 +1238,11 @@ async function maxAllBuildForCurrentAvatar() {
// Skills & Traces
maxSkillsForAvatar();
- // Energy 100%
+ // Energy (Default 50% standard starting energy)
if (el.rangeCharEnergy && el.valCharEnergy) {
- el.rangeCharEnergy.value = el.rangeCharEnergy.max;
- el.valCharEnergy.textContent = `${el.rangeCharEnergy.max}/${el.rangeCharEnergy.max}`;
+ const half = Math.floor(parseInt(el.rangeCharEnergy.max, 10) * 0.5);
+ el.rangeCharEnergy.value = half;
+ el.valCharEnergy.textContent = `${half}/${el.rangeCharEnergy.max}`;
}
// Lightcone
@@ -1266,6 +1272,10 @@ async function saveAvatarDetails() {
target.rank = rank;
}
+ const maxSp = parseInt(el.rangeCharEnergy?.max, 10) || 140;
+ const defaultSp = Math.floor(maxSp * 0.5);
+ const currentSp = el.rangeCharEnergy ? parseInt(el.rangeCharEnergy.value, 10) : defaultSp;
+
if (!state.fullFreesrData) {
state.fullFreesrData = { avatars: {}, lightcones: [], relics: [] };
}
@@ -1279,8 +1289,8 @@ async function saveAvatarDetails() {
level,
promotion,
techniques: [],
- sp_value: parseInt(el.rangeCharEnergy?.value, 10) || 140,
- sp_max: parseInt(el.rangeCharEnergy?.max, 10) || 140,
+ sp_value: currentSp,
+ sp_max: maxSp,
data: {
rank,
skills: {},
@@ -1294,9 +1304,8 @@ async function saveAvatarDetails() {
av.promotion = promotion;
av.data = av.data || {};
av.data.rank = rank;
- if (el.rangeCharEnergy) {
- av.sp_value = parseInt(el.rangeCharEnergy.value, 10) || av.sp_max || 140;
- }
+ av.sp_max = maxSp;
+ av.sp_value = currentSp;
// Extract skills values
const basicVal = parseInt(el.rangeSkillBasic?.value, 10) || 6;
@@ -1393,6 +1402,262 @@ async function saveAvatarDetails() {
}
}
+// ============================================================================
+// Quick Action Functions
+// ============================================================================
+
+// 1. Quick Set Team Energy (50% or 100%)
+async function quickSetTeamEnergy(ratio = 0.5) {
+ try {
+ state.statusData = state.statusData || {};
+ const lineups = state.statusData.lineups || DEFAULT_LINEUP;
+ if (!state.fullFreesrData) {
+ state.fullFreesrData = { avatars: {}, lightcones: [], relics: [] };
+ }
+ state.fullFreesrData.avatars = state.fullFreesrData.avatars || {};
+
+ const lineupIds = Object.values(lineups).filter(id => id && id > 0);
+ if (lineupIds.length === 0) {
+ showToast(t('slotEmpty') || 'ไม่มีตัวละครในทีม', 'warning');
+ return;
+ }
+
+ lineupIds.forEach(aid => {
+ if (!state.fullFreesrData.avatars[aid]) {
+ state.fullFreesrData.avatars[aid] = {
+ owner_uid: 0,
+ avatar_id: aid,
+ level: 80,
+ promotion: 6,
+ techniques: [],
+ sp_max: 140,
+ sp_value: 70,
+ data: { rank: 6, skills: {} }
+ };
+ }
+ const av = state.fullFreesrData.avatars[aid];
+ const maxSp = av.sp_max || 140;
+ av.sp_max = maxSp;
+ av.sp_value = Math.floor(maxSp * ratio);
+ });
+
+ if (state.isConnected) {
+ await saveFreesrChangesToServer();
+ }
+
+ if (ratio === 0.5) {
+ showToast(t('toastEnergy50') || 'ตั้งค่าพลังงานทีม 50% (มาตรฐานเกม) เรียบร้อยแล้ว', 'success');
+ } else {
+ showToast(t('toastEnergy100') || 'ตั้งค่าพลังงานทีม 100% (อัลติพร้อมใช้) เรียบร้อยแล้ว', 'success');
+ }
+ } catch (err) {
+ showToast(err.message, 'error');
+ }
+}
+
+// 2. Quick Unlock All 70+ Avatars
+async function quickUnlockAllAvatars() {
+ try {
+ if (!state.fullFreesrData) {
+ state.fullFreesrData = { avatars: {}, lightcones: [], relics: [] };
+ }
+ state.fullFreesrData.avatars = state.fullFreesrData.avatars || {};
+
+ const allIds = Object.keys(AVATAR_METADATA).map(id => parseInt(id, 10));
+ allIds.forEach(aid => {
+ if (!state.fullFreesrData.avatars[aid]) {
+ state.fullFreesrData.avatars[aid] = {
+ owner_uid: 0,
+ avatar_id: aid,
+ level: 80,
+ promotion: 6,
+ techniques: [],
+ sp_max: 140,
+ sp_value: 70, // 50% standard starting energy
+ data: {
+ rank: 6,
+ skills: {
+ [`${aid}001`]: 6,
+ [`${aid}002`]: 10,
+ [`${aid}003`]: 10,
+ [`${aid}004`]: 10,
+ [`${aid}007`]: 1,
+ [`${aid}101`]: 1,
+ [`${aid}102`]: 1,
+ [`${aid}103`]: 1,
+ [`${aid}201`]: 1
+ },
+ skills_by_anchor_type: {
+ "1": 6, "2": 10, "3": 10, "4": 10, "5": 1, "6": 1, "7": 1, "8": 1, "9": 1
+ }
+ }
+ };
+ } else {
+ const av = state.fullFreesrData.avatars[aid];
+ av.level = 80;
+ av.promotion = 6;
+ av.data = av.data || {};
+ av.data.rank = 6;
+ if (!av.sp_value) av.sp_value = 70;
+ }
+ });
+
+ initAvatarsList();
+ state.avatarsList.forEach(a => {
+ a.level = 80;
+ a.promotion = 6;
+ a.rank = 6;
+ });
+
+ if (state.isConnected) {
+ if (state.serverMode === 'gac') {
+ await apiCall('/api/avatar/max_all', 'POST', {}).catch(() => {});
+ await saveFreesrChangesToServer().catch(() => {});
+ } else {
+ await saveFreesrChangesToServer();
+ }
+ }
+
+ renderAvatarsGrid();
+ if (el.statAvatars) el.statAvatars.textContent = Object.keys(state.fullFreesrData.avatars).length;
+ showToast(t('toastUnlockedAll') || 'ปลดล็อกตัวละครครบทุกตัว (70+ ตัว E6) เรียบร้อยแล้ว', 'success');
+ } catch (err) {
+ showToast(err.message, 'error');
+ }
+}
+
+// 3. Quick Add All 5-Star Signature Light Cones
+async function quickAddAll5StarLightcones() {
+ try {
+ if (!state.fullFreesrData) {
+ state.fullFreesrData = { avatars: {}, lightcones: [], relics: [] };
+ }
+ state.fullFreesrData.lightcones = state.fullFreesrData.lightcones || [];
+
+ const existingLcIds = new Set(state.fullFreesrData.lightcones.map(lc => lc.item_id));
+ let nextUniqueId = 1000;
+ state.fullFreesrData.lightcones.forEach(lc => {
+ if (lc.unique_id >= nextUniqueId) nextUniqueId = lc.unique_id + 1;
+ });
+
+ let addedCount = 0;
+ for (const idStr in LIGHTCONE_METADATA) {
+ const meta = LIGHTCONE_METADATA[idStr];
+ const itemId = parseInt(idStr, 10);
+ if (meta.rarity === 5 && !existingLcIds.has(itemId)) {
+ state.fullFreesrData.lightcones.push({
+ unique_id: nextUniqueId++,
+ item_id: itemId,
+ level: 80,
+ promotion: 6,
+ rank: 5,
+ equip_avatar: 0
+ });
+ existingLcIds.add(itemId);
+ addedCount++;
+ }
+ }
+
+ if (state.isConnected) {
+ await saveFreesrChangesToServer();
+ }
+ loadEquipment();
+ showToast(t('toastAddedAllLcs') || `เพิ่มกรวยแสง 5 ดาวทั้งหมด (${addedCount} ชิ้น) เข้าคลังแล้ว`, 'success');
+ } catch (err) {
+ showToast(err.message, 'error');
+ }
+}
+
+// 4. Quick Teleport to Astral Express Parlor Car
+async function quickTeleportAstralExpress() {
+ const trainLoc = {
+ plane_id: 20001,
+ floor_id: 20001001,
+ entry_id: 2000101,
+ x: 0,
+ y: 0,
+ z: 0,
+ rot_y: 0
+ };
+ try {
+ if (state.fullFreesrData) {
+ state.fullFreesrData.scene = {
+ plane_id: trainLoc.plane_id,
+ floor_id: trainLoc.floor_id,
+ entry_id: trainLoc.entry_id
+ };
+ state.fullFreesrData.position = {
+ x: trainLoc.x,
+ y: trainLoc.y,
+ z: trainLoc.z,
+ rot_y: trainLoc.rot_y
+ };
+ }
+
+ if (state.isConnected) {
+ if (state.serverMode === 'gac') {
+ await apiCall('/api/teleport', 'POST', trainLoc).catch(async () => {
+ await apiCall('/api/persistent', 'POST', {
+ scene: { plane_id: trainLoc.plane_id, floor_id: trainLoc.floor_id, entry_id: trainLoc.entry_id },
+ position: { x: trainLoc.x, y: trainLoc.y, z: trainLoc.z, rot_y: trainLoc.rot_y }
+ });
+ });
+ } else {
+ await saveFreesrChangesToServer();
+ }
+ }
+
+ if (el.lblPlaneId) el.lblPlaneId.textContent = trainLoc.plane_id;
+ if (el.lblFloorId) el.lblFloorId.textContent = trainLoc.floor_id;
+ if (el.lblCoordinates) el.lblCoordinates.textContent = `X: ${trainLoc.x}, Y: ${trainLoc.y}, Z: ${trainLoc.z}`;
+ showToast(t('toastTeleportedTrain') || 'วาร์ปกลับสู่ Astral Express Parlor Car เรียบร้อยแล้ว', 'success');
+ } catch (err) {
+ showToast(err.message, 'error');
+ }
+}
+
+// 5. Quick Clear Lineup Slots
+async function quickClearLineup() {
+ try {
+ state.statusData = state.statusData || {};
+ let currentLineup = state.statusData.lineups || DEFAULT_LINEUP;
+ if (Array.isArray(currentLineup)) {
+ const mapped = {};
+ currentLineup.forEach((id, idx) => { mapped[idx] = id; });
+ currentLineup = mapped;
+ }
+
+ const cleared = {};
+ Object.keys(currentLineup).forEach(k => {
+ cleared[k] = 0;
+ });
+ if (!state.creativeMode) {
+ cleared[0] = 0; cleared[1] = 0; cleared[2] = 0; cleared[3] = 0;
+ }
+
+ state.statusData.lineups = cleared;
+ if (state.fullFreesrData) {
+ state.fullFreesrData.lineups = cleared;
+ if (state.fullFreesrData.battle_config) {
+ state.fullFreesrData.battle_config.custom_battle_lineup = cleared;
+ }
+ }
+
+ if (state.isConnected) {
+ if (state.serverMode === 'gac') {
+ await apiCall('/api/persistent', 'POST', { lineups: cleared });
+ } else {
+ await saveFreesrChangesToServer();
+ }
+ }
+
+ renderLineup(cleared);
+ showToast(t('toastLineupCleared') || 'ล้างตัวละครในทีมเรียบร้อยแล้ว', 'info');
+ } catch (err) {
+ showToast(err.message, 'error');
+ }
+}
+
// Max all avatars
async function maxAllAvatars() {
if (!confirm(t('confirmMaxAll'))) return;
@@ -2101,18 +2366,13 @@ function setupEvents() {
}
// Quick Action Buttons on Dashboard
- el.btnQuickMaxAll.addEventListener('click', maxAllAvatars);
- el.btnMaxAllAvatars.addEventListener('click', maxAllAvatars);
-
- el.btnQuickSyncPersistent.addEventListener('click', async () => {
- try {
- await apiCall('/api/persistent');
- showToast('ซิงค์ข้อมูล Persistent เรียบร้อย', 'success');
- refreshStatus();
- } catch (err) {
- showToast(`Sync failed: ${err.message}`, 'error');
- }
- });
+ el.btnQuickEnergy50?.addEventListener('click', () => quickSetTeamEnergy(0.5));
+ el.btnQuickEnergy100?.addEventListener('click', () => quickSetTeamEnergy(1.0));
+ el.btnQuickUnlockAllAvatars?.addEventListener('click', quickUnlockAllAvatars);
+ el.btnQuickAddAllLcs?.addEventListener('click', quickAddAll5StarLightcones);
+ el.btnQuickTeleportTrain?.addEventListener('click', quickTeleportAstralExpress);
+ el.btnQuickClearLineup?.addEventListener('click', quickClearLineup);
+ el.btnMaxAllAvatars?.addEventListener('click', maxAllAvatars);
// Persistent Form Submit
el.formPersistentChars.addEventListener('submit', async (e) => {
diff --git a/js/i18n.js b/js/i18n.js
index 1b0c802..dab6cdf 100644
--- a/js/i18n.js
+++ b/js/i18n.js
@@ -26,6 +26,25 @@ export const TRANSLATIONS = {
"lblCreativeMode": "โหมดสร้างสรรค์",
"badgeCreative": "โหมดสร้างสรรค์",
"toastSlotRemoved": "ลบ Slot {slot} เรียบร้อยแล้ว",
+ "quickActionsBadge": "คำสั่งด่วน",
+ "qaEnergy50Title": "พลังงานทีม 50%",
+ "qaEnergy50Desc": "ค่าเริ่มต้นมาตรฐานเมื่อเข้าสู้",
+ "qaEnergy100Title": "พลังงานทีม 100%",
+ "qaEnergy100Desc": "พร้อมกดท่าไม้ตายทันที",
+ "qaUnlockAllTitle": "ปลดล็อกตัวละครครบทุกตัว",
+ "qaUnlockAllDesc": "เพิ่มครบ 70+ ตัว E6 เต็มคลัง",
+ "qaAddLcsTitle": "เพิ่มกรวยแสง 5★ ทั้งหมด",
+ "qaAddLcsDesc": "กรวยแสงประจำตัว S5 เข้าคลัง",
+ "qaTeleportTitle": "วาร์ปกลับรถไฟ Astral Express",
+ "qaTeleportDesc": "กลับสู่ Parlor Car จุดปลอดภัย",
+ "qaClearLineupTitle": "ล้างตัวละครในทีม",
+ "qaClearLineupDesc": "เคลียร์ทุกช่องเพื่อจัดทีมใหม่",
+ "toastEnergy50": "ตั้งค่าพลังงานทีม 50% (มาตรฐานเกม) เรียบร้อยแล้ว",
+ "toastEnergy100": "ตั้งค่าพลังงานทีม 100% (อัลติพร้อมใช้) เรียบร้อยแล้ว",
+ "toastUnlockedAll": "ปลดล็อกตัวละครครบทุกตัว (70+ ตัว E6) เรียบร้อยแล้ว",
+ "toastAddedAllLcs": "เพิ่มกรวยแสง 5 ดาวประจำตัวละครทั้งหมดเข้าคลังแล้ว",
+ "toastTeleportedTrain": "วาร์ปตัวละครกลับสู่ Astral Express Parlor Car เรียบร้อยแล้ว",
+ "toastLineupCleared": "ล้างตัวละครในทีมเรียบร้อยแล้ว",
"modalAddLcTitle": "🗡️ เพิ่มกรวยแสงลง FreeSR",
"modalAddRelicTitle": "🛡️ เพิ่มรีลิกส์ลง FreeSR",
"lblSelectLc": "เลือกกรวยแสง",
@@ -224,6 +243,25 @@ export const TRANSLATIONS = {
"lblCreativeMode": "Creative Mode",
"badgeCreative": "Creative",
"toastSlotRemoved": "Removed Slot {slot}",
+ "quickActionsBadge": "Quick Tools",
+ "qaEnergy50Title": "Team Energy 50%",
+ "qaEnergy50Desc": "Standard starting battle energy",
+ "qaEnergy100Title": "Team Energy 100%",
+ "qaEnergy100Desc": "Instant Ultimate ready",
+ "qaUnlockAllTitle": "Unlock All Avatars",
+ "qaUnlockAllDesc": "Add all 70+ characters at E6",
+ "qaAddLcsTitle": "Add All 5★ Light Cones",
+ "qaAddLcsDesc": "All signature S5 light cones to inventory",
+ "qaTeleportTitle": "Teleport to Astral Express",
+ "qaTeleportDesc": "Return to Parlor Car safe hub",
+ "qaClearLineupTitle": "Clear Team Lineup",
+ "qaClearLineupDesc": "Empty all slots to rebuild team",
+ "toastEnergy50": "Team energy set to 50% (standard)",
+ "toastEnergy100": "Team energy set to 100% (instant burst)",
+ "toastUnlockedAll": "Unlocked all 70+ characters at E6",
+ "toastAddedAllLcs": "Added all 5★ signature light cones to inventory",
+ "toastTeleportedTrain": "Teleported to Astral Express Parlor Car",
+ "toastLineupCleared": "Lineup cleared successfully",
"modalAddLcTitle": "🗡️ Add Light Cone to FreeSR",
"modalAddRelicTitle": "🛡️ Add Relic to FreeSR",
"lblSelectLc": "Select Light Cone",
@@ -422,6 +460,25 @@ export const TRANSLATIONS = {
"lblCreativeMode": "创造模式",
"badgeCreative": "创造模式",
"toastSlotRemoved": "已移除槽位 {slot}",
+ "quickActionsBadge": "快捷指令",
+ "qaEnergy50Title": "全队能量 50%",
+ "qaEnergy50Desc": "进战标准初始能量",
+ "qaEnergy100Title": "全队能量 100%",
+ "qaEnergy100Desc": "立即释放终结技",
+ "qaUnlockAllTitle": "解锁全角色",
+ "qaUnlockAllDesc": "添加全部 70+ 角色满魂",
+ "qaAddLcsTitle": "添加全部五星光锥",
+ "qaAddLcsDesc": "专武叠影5阶入库",
+ "qaTeleportTitle": "传送至星穹列车",
+ "qaTeleportDesc": "返回车厢安全区",
+ "qaClearLineupTitle": "清空编队",
+ "qaClearLineupDesc": "重置全部槽位重新配队",
+ "toastEnergy50": "已将全队能量设为 50%",
+ "toastEnergy100": "已将全队能量设为 100%",
+ "toastUnlockedAll": "已解锁全部角色(满魂)",
+ "toastAddedAllLcs": "已添加全部五星光锥至背包",
+ "toastTeleportedTrain": "已传送至星穹列车观景车厢",
+ "toastLineupCleared": "已清空编队角色",
"modalAddLcTitle": "🗡️ 添加光锥至 FreeSR",
"modalAddRelicTitle": "🛡️ 添加遗器至 FreeSR",
"lblSelectLc": "选择光锥",
@@ -620,6 +677,25 @@ export const TRANSLATIONS = {
"lblCreativeMode": "創造模式",
"badgeCreative": "創造模式",
"toastSlotRemoved": "已移除槽位 {slot}",
+ "quickActionsBadge": "快捷指令",
+ "qaEnergy50Title": "全隊能量 50%",
+ "qaEnergy50Desc": "進戰標準初始能量",
+ "qaEnergy100Title": "全隊能量 100%",
+ "qaEnergy100Desc": "立即施放終結技",
+ "qaUnlockAllTitle": "解鎖全角色",
+ "qaUnlockAllDesc": "新增全部 70+ 角色滿魂",
+ "qaAddLcsTitle": "新增全部五星光錐",
+ "qaAddLcsDesc": "專武疊影5階入庫",
+ "qaTeleportTitle": "傳送至星穹列車",
+ "qaTeleportDesc": "返回車廂安全區",
+ "qaClearLineupTitle": "清空隊伍",
+ "qaClearLineupDesc": "重設全部槽位重新組隊",
+ "toastEnergy50": "已將全隊能量設為 50%",
+ "toastEnergy100": "已將全隊能量設為 100%",
+ "toastUnlockedAll": "已解鎖全部角色(滿魂)",
+ "toastAddedAllLcs": "已新增全部五星光錐至背包",
+ "toastTeleportedTrain": "已傳送至星穹列車觀景車廂",
+ "toastLineupCleared": "已清空隊伍角色",
"modalAddLcTitle": "🗡️ 新增光錐至 FreeSR",
"modalAddRelicTitle": "🛡️ 新增遺器至 FreeSR",
"lblSelectLc": "選擇光錐",
@@ -818,6 +894,25 @@ export const TRANSLATIONS = {
"lblCreativeMode": "クリエイティブモード",
"badgeCreative": "クリエイティブ",
"toastSlotRemoved": "スロット {slot} を削除しました",
+ "quickActionsBadge": "クイックツール",
+ "qaEnergy50Title": "チームEP 50%",
+ "qaEnergy50Desc": "戦闘開始時の標準EP",
+ "qaEnergy100Title": "チームEP 100%",
+ "qaEnergy100Desc": "必殺技即時発動可能",
+ "qaUnlockAllTitle": "全キャラ解放",
+ "qaUnlockAllDesc": "70体以上の全キャラを完凸で追加",
+ "qaAddLcsTitle": "全★5光円錐を追加",
+ "qaAddLcsDesc": "モチーフ光円錐(重畳5)を倉庫に追加",
+ "qaTeleportTitle": "星穹列車へテレポート",
+ "qaTeleportDesc": "安全エリアの客車へ帰還",
+ "qaClearLineupTitle": "編成をクリア",
+ "qaClearLineupDesc": "全スロットをリセットして再編成",
+ "toastEnergy50": "チームEPを50%に設定しました",
+ "toastEnergy100": "チームEPを100%に設定しました",
+ "toastUnlockedAll": "全キャラ(完凸)を解放しました",
+ "toastAddedAllLcs": "全★5光円錐を追加しました",
+ "toastTeleportedTrain": "星穹列車の客車へテレポートしました",
+ "toastLineupCleared": "編成をクリアしました",
"modalAddLcTitle": "🗡️ FreeSRに光円錐を追加",
"modalAddRelicTitle": "🛡️ FreeSRに遺物を追加",
"lblSelectLc": "光円錐を選択",
@@ -1016,6 +1111,25 @@ export const TRANSLATIONS = {
"lblCreativeMode": "크리에이티브 모드",
"badgeCreative": "크리에이티브",
"toastSlotRemoved": "슬롯 {slot}이(가) 삭제되었습니다",
+ "quickActionsBadge": "빠른 작업",
+ "qaEnergy50Title": "파티 에너지 50%",
+ "qaEnergy50Desc": "전투 진입 기본 표준 에너지",
+ "qaEnergy100Title": "파티 에너지 100%",
+ "qaEnergy100Desc": "필살기 즉시 사용 가능",
+ "qaUnlockAllTitle": "전체 캐릭터 해금",
+ "qaUnlockAllDesc": "70명 이상의 모든 캐릭터 풀돌 추가",
+ "qaAddLcsTitle": "모든 5★ 광추 추가",
+ "qaAddLcsDesc": "전용 광추 5중첩 가방 추가",
+ "qaTeleportTitle": "은하열차로 워프",
+ "qaTeleportDesc": "안전 구역인 객차로 귀환",
+ "qaClearLineupTitle": "파티 비우기",
+ "qaClearLineupDesc": "모든 슬롯 초기화 후 재편성",
+ "toastEnergy50": "파티 에너지를 50%로 설정했습니다",
+ "toastEnergy100": "파티 에너지를 100%로 설정했습니다",
+ "toastUnlockedAll": "모든 캐릭터(풀돌)를 해금했습니다",
+ "toastAddedAllLcs": "모든 5★ 광추를 추가했습니다",
+ "toastTeleportedTrain": "은하열차 객차로 워프했습니다",
+ "toastLineupCleared": "파티를 초기화했습니다",
"modalAddLcTitle": "🗡️ FreeSR에 광추 추가",
"modalAddRelicTitle": "🛡️ FreeSR에 유물 추가",
"lblSelectLc": "광추 선택",
@@ -1214,6 +1328,25 @@ export const TRANSLATIONS = {
"lblCreativeMode": "Chế độ sáng tạo",
"badgeCreative": "Sáng tạo",
"toastSlotRemoved": "Đã xóa vị trí {slot}",
+ "quickActionsBadge": "Lệnh Nhanh",
+ "qaEnergy50Title": "Năng lượng đội 50%",
+ "qaEnergy50Desc": "Năng lượng khởi đầu tiêu chuẩn",
+ "qaEnergy100Title": "Năng lượng đội 100%",
+ "qaEnergy100Desc": "Sẵn sàng dùng Tuyệt Kỹ ngay",
+ "qaUnlockAllTitle": "Mở khóa toàn bộ nhân vật",
+ "qaUnlockAllDesc": "Thêm đầy đủ hơn 70 nhân vật Tinh Hồn 6",
+ "qaAddLcsTitle": "Thêm toàn bộ Nón 5★",
+ "qaAddLcsDesc": "Nón trấn Tích Tầng 5 vào kho",
+ "qaTeleportTitle": "Dịch chuyển về Đội Tàu Astral",
+ "qaTeleportDesc": "Trở về Toa Tàu an toàn",
+ "qaClearLineupTitle": "Xóa đội hình",
+ "qaClearLineupDesc": "Dọn sạch vị trí để xếp đội mới",
+ "toastEnergy50": "Đã đặt năng lượng đội về 50%",
+ "toastEnergy100": "Đã sạc đầy 100% năng lượng đội",
+ "toastUnlockedAll": "Đã mở khóa toàn bộ nhân vật Tinh Hồn 6",
+ "toastAddedAllLcs": "Đã thêm toàn bộ Nón Ánh Sáng 5 sao",
+ "toastTeleportedTrain": "Đã dịch chuyển về Toa Tàu Astral",
+ "toastLineupCleared": "Đã xóa sạch đội hình",
"modalAddLcTitle": "🗡️ Thêm Nón Ánh Sáng vào FreeSR",
"modalAddRelicTitle": "🛡️ Thêm Di Vật vào FreeSR",
"lblSelectLc": "Chọn Nón Ánh Sáng",
@@ -1412,6 +1545,25 @@ export const TRANSLATIONS = {
"lblCreativeMode": "Mode Kreatif",
"badgeCreative": "Kreatif",
"toastSlotRemoved": "Slot {slot} berhasil dihapus",
+ "quickActionsBadge": "Tindakan Cepat",
+ "qaEnergy50Title": "Energi Tim 50%",
+ "qaEnergy50Desc": "Energi awal standar saat masuk battle",
+ "qaEnergy100Title": "Energi Tim 100%",
+ "qaEnergy100Desc": "Ultimate langsung siap pakai",
+ "qaUnlockAllTitle": "Buka Semua Karakter",
+ "qaUnlockAllDesc": "Tambah 70+ karakter E6 ke tas",
+ "qaAddLcsTitle": "Tambah Semua Light Cone 5★",
+ "qaAddLcsDesc": "Light Cone signature S5 ke inventaris",
+ "qaTeleportTitle": "Teleport ke Astral Express",
+ "qaTeleportDesc": "Kembali ke Parlor Car zona aman",
+ "qaClearLineupTitle": "Kosongkan Tim",
+ "qaClearLineupDesc": "Kosongkan semua slot untuk susun ulang",
+ "toastEnergy50": "Energi tim diatur ke 50%",
+ "toastEnergy100": "Energi tim diatur ke 100%",
+ "toastUnlockedAll": "Berhasil membuka semua karakter (E6)",
+ "toastAddedAllLcs": "Berhasil menambahkan semua Light Cone 5★",
+ "toastTeleportedTrain": "Teleportasi ke Parlor Car berhasil",
+ "toastLineupCleared": "Susunan tim berhasil dikosongkan",
"modalAddLcTitle": "🗡️ Tambah Light Cone ke FreeSR",
"modalAddRelicTitle": "🛡️ Tambah Relic ke FreeSR",
"lblSelectLc": "Pilih Light Cone",
@@ -1610,6 +1762,25 @@ export const TRANSLATIONS = {
"lblCreativeMode": "Modo creativo",
"badgeCreative": "Creativo",
"toastSlotRemoved": "Posición {slot} eliminada",
+ "quickActionsBadge": "Herramientas Rápidas",
+ "qaEnergy50Title": "Energía de equipo 50%",
+ "qaEnergy50Desc": "Energía inicial estándar en batalla",
+ "qaEnergy100Title": "Energía de equipo 100%",
+ "qaEnergy100Desc": "Habilidad definitiva lista al instante",
+ "qaUnlockAllTitle": "Desbloquear todos los personajes",
+ "qaUnlockAllDesc": "Añadir más de 70 personajes con E6",
+ "qaAddLcsTitle": "Añadir todos los conos de luz 5★",
+ "qaAddLcsDesc": "Conos de luz distintivos S5 al inventario",
+ "qaTeleportTitle": "Teletransporte al Expreso Astral",
+ "qaTeleportDesc": "Volver al vagón panorámico (zona segura)",
+ "qaClearLineupTitle": "Vaciar equipo",
+ "qaClearLineupDesc": "Limpiar casillas para formar nuevo equipo",
+ "toastEnergy50": "Energía del equipo ajustada al 50%",
+ "toastEnergy100": "Energía del equipo ajustada al 100%",
+ "toastUnlockedAll": "Todos los personajes desbloqueados (E6)",
+ "toastAddedAllLcs": "Todos los conos de 5★ añadidos",
+ "toastTeleportedTrain": "Teletransportado al Expreso Astral",
+ "toastLineupCleared": "Equipo vaciado correctamente",
"modalAddLcTitle": "🗡️ Añadir cono de luz a FreeSR",
"modalAddRelicTitle": "🛡️ Añadir reliquia a FreeSR",
"lblSelectLc": "Seleccionar cono de luz",
@@ -1808,6 +1979,25 @@ export const TRANSLATIONS = {
"lblCreativeMode": "Mode créatif",
"badgeCreative": "Créatif",
"toastSlotRemoved": "Emplacement {slot} supprimé",
+ "quickActionsBadge": "Outils Rapides",
+ "qaEnergy50Title": "Énergie d'équipe 50%",
+ "qaEnergy50Desc": "Énergie de départ standard en combat",
+ "qaEnergy100Title": "Énergie d'équipe 100%",
+ "qaEnergy100Desc": "Ultime prêt instantanément",
+ "qaUnlockAllTitle": "Débloquer tous les personnages",
+ "qaUnlockAllDesc": "Ajouter 70+ personnages au rang E6",
+ "qaAddLcsTitle": "Ajouter tous les cônes 5★",
+ "qaAddLcsDesc": "Cônes signatures S5 à l'inventaire",
+ "qaTeleportTitle": "Téléportation à l'Astral Express",
+ "qaTeleportDesc": "Retourner au wagon-salon (zone sûre)",
+ "qaClearLineupTitle": "Vider l'équipe",
+ "qaClearLineupDesc": "Effacer les emplacements pour recomposer",
+ "toastEnergy50": "Énergie d'équipe réglée à 50%",
+ "toastEnergy100": "Énergie d'équipe réglée à 100%",
+ "toastUnlockedAll": "Tous les personnages débloqués (E6)",
+ "toastAddedAllLcs": "Tous les cônes de lumière 5★ ajoutés",
+ "toastTeleportedTrain": "Téléporté au wagon-salon de l'Astral Express",
+ "toastLineupCleared": "Équipe réinitialisée",
"modalAddLcTitle": "🗡️ Ajouter cône de lumière à FreeSR",
"modalAddRelicTitle": "🛡️ Ajouter relique à FreeSR",
"lblSelectLc": "Sélectionner cône de lumière",
@@ -2006,6 +2196,25 @@ export const TRANSLATIONS = {
"lblCreativeMode": "Kreativmodus",
"badgeCreative": "Kreativ",
"toastSlotRemoved": "Platz {slot} entfernt",
+ "quickActionsBadge": "Schnellbefehle",
+ "qaEnergy50Title": "Team-Energie 50%",
+ "qaEnergy50Desc": "Standard-Startenergie im Kampf",
+ "qaEnergy100Title": "Team-Energie 100%",
+ "qaEnergy100Desc": "Ultimate sofort einsatzbereit",
+ "qaUnlockAllTitle": "Alle Figuren freischalten",
+ "qaUnlockAllDesc": "Alle 70+ Figuren auf E6 hinzufügen",
+ "qaAddLcsTitle": "Alle 5★-Lichtkegel hinzufügen",
+ "qaAddLcsDesc": "Signatur-Lichtkegel (S5) ins Inventar",
+ "qaTeleportTitle": "Zum Astralexpress teleportieren",
+ "qaTeleportDesc": "Zurück zum Parlor Car (Sicherheitszone)",
+ "qaClearLineupTitle": "Team leeren",
+ "qaClearLineupDesc": "Alle Plätze leeren für neues Team",
+ "toastEnergy50": "Team-Energie auf 50% gesetzt",
+ "toastEnergy100": "Team-Energie auf 100% gesetzt",
+ "toastUnlockedAll": "Alle Figuren auf E6 freigeschaltet",
+ "toastAddedAllLcs": "Alle 5★-Lichtkegel hinzugefügt",
+ "toastTeleportedTrain": "Zum Astralexpress teleportiert",
+ "toastLineupCleared": "Team-Plätze geleert",
"modalAddLcTitle": "🗡️ Lichtkegel zu FreeSR hinzufügen",
"modalAddRelicTitle": "🛡️ Relikt zu FreeSR hinzufügen",
"lblSelectLc": "Lichtkegel auswählen",
@@ -2204,6 +2413,25 @@ export const TRANSLATIONS = {
"lblCreativeMode": "Творческий режим",
"badgeCreative": "Творческий",
"toastSlotRemoved": "Слот {slot} удален",
+ "quickActionsBadge": "Быстрые команды",
+ "qaEnergy50Title": "Энергия отряда 50%",
+ "qaEnergy50Desc": "Стандартная начальная энергия",
+ "qaEnergy100Title": "Энергия отряда 100%",
+ "qaEnergy100Desc": "Сверхспособность сразу готова",
+ "qaUnlockAllTitle": "Разблокировать всех героев",
+ "qaUnlockAllDesc": "Добавить 70+ героев с Эйдолонами 6",
+ "qaAddLcsTitle": "Добавить все 5★ конусы",
+ "qaAddLcsDesc": "Сигнатурные конусы (Н5) в инвентарь",
+ "qaTeleportTitle": "Телепорт на Звёздный экспресс",
+ "qaTeleportDesc": "Возврат в общий вагон",
+ "qaClearLineupTitle": "Очистить отряд",
+ "qaClearLineupDesc": "Сбросить слоты для нового состава",
+ "toastEnergy50": "Энергия отряда установлена на 50%",
+ "toastEnergy100": "Энергия отряда установлена на 100%",
+ "toastUnlockedAll": "Все персонажи разблокированы (Э6)",
+ "toastAddedAllLcs": "Все 5★ световые конусы добавлены",
+ "toastTeleportedTrain": "Телепортирован в общий вагон экспресса",
+ "toastLineupCleared": "Слоты отряда очищены",
"modalAddLcTitle": "🗡️ Добавить световой конус в FreeSR",
"modalAddRelicTitle": "🛡️ Добавить реликвию в FreeSR",
"lblSelectLc": "Выберите световой конус",
@@ -2402,6 +2630,25 @@ export const TRANSLATIONS = {
"lblCreativeMode": "Modo Criativo",
"badgeCreative": "Criativo",
"toastSlotRemoved": "Espaço {slot} removido",
+ "quickActionsBadge": "Ações Rápidas",
+ "qaEnergy50Title": "Energia da Equipe 50%",
+ "qaEnergy50Desc": "Energia inicial padrão de batalha",
+ "qaEnergy100Title": "Energia da Equipe 100%",
+ "qaEnergy100Desc": "Perícia Suprema pronta na hora",
+ "qaUnlockAllTitle": "Desbloquear Todos os Personagens",
+ "qaUnlockAllDesc": "Adicionar todos os 70+ personagens E6",
+ "qaAddLcsTitle": "Adicionar Todos os Cones 5★",
+ "qaAddLcsDesc": "Cones de Luz assinatura S5 ao inventário",
+ "qaTeleportTitle": "Teleporte para o Expresso Astral",
+ "qaTeleportDesc": "Retornar ao Vagão Panorâmico seguro",
+ "qaClearLineupTitle": "Limpar Equipe",
+ "qaClearLineupDesc": "Esvaziar espaços para nova formação",
+ "toastEnergy50": "Energia da equipe definida em 50%",
+ "toastEnergy100": "Energia da equipe definida em 100%",
+ "toastUnlockedAll": "Todos os personagens desbloqueados (E6)",
+ "toastAddedAllLcs": "Todos os Cones de Luz 5★ adicionados",
+ "toastTeleportedTrain": "Teleportado para o Expresso Astral",
+ "toastLineupCleared": "Equipe limpa com sucesso",
"modalAddLcTitle": "🗡️ Adicionar Cone de Luz ao FreeSR",
"modalAddRelicTitle": "🛡️ Adicionar Relíquia ao FreeSR",
"lblSelectLc": "Selecionar Cone de Luz",