fix: match exact lineup, remove teleport tab and warp button, overhaul character build modal with offline/online interactive controls and 23 new character portraits
No files matched your search
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 27 KiB |
@@ -541,31 +541,42 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.eidolon-pip {
|
.eidolon-pip {
|
||||||
width: 25px;
|
width: 28px;
|
||||||
height: 25px;
|
height: 28px;
|
||||||
border-radius: 4px;
|
border-radius: 6px;
|
||||||
border: 1px solid var(--border-color);
|
border: 1.5px solid rgba(255, 255, 255, 0.2);
|
||||||
background: transparent;
|
background: rgba(255, 255, 255, 0.05);
|
||||||
color: var(--text-muted);
|
color: #cbd5e1;
|
||||||
font-size: 0.75rem;
|
font-size: 0.8rem;
|
||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
transition: var(--transition);
|
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.eidolon-pip:hover {
|
.eidolon-pip:hover {
|
||||||
border-color: var(--accent-cyan);
|
border-color: var(--accent-cyan);
|
||||||
color: var(--text-main);
|
background: rgba(56, 189, 248, 0.15);
|
||||||
|
color: #fff;
|
||||||
|
transform: translateY(-2px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.eidolon-pip.active {
|
.eidolon-pip.active {
|
||||||
background: linear-gradient(135deg, #0284c7, #38bdf8);
|
background: linear-gradient(135deg, #0284c7, #38bdf8);
|
||||||
border-color: #38bdf8;
|
border-color: #38bdf8;
|
||||||
color: #0b0d14;
|
color: #0b0d14;
|
||||||
box-shadow: 0 0 10px rgba(56, 189, 248, 0.6);
|
box-shadow: 0 0 12px rgba(56, 189, 248, 0.6);
|
||||||
|
font-weight: 900;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-eidolon-pip {
|
||||||
|
width: 38px;
|
||||||
|
height: 38px;
|
||||||
|
font-size: 0.95rem;
|
||||||
|
border-radius: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ==========================================================================
|
/* ==========================================================================
|
||||||
|
|||||||
@@ -53,7 +53,6 @@
|
|||||||
<button class="tab-btn" data-tab="tab-equipment">🗡️ กรวยแสง & รีลิกส์ (Equipment)</button>
|
<button class="tab-btn" data-tab="tab-equipment">🗡️ กรวยแสง & รีลิกส์ (Equipment)</button>
|
||||||
<button class="tab-btn" data-tab="tab-persistent" id="tab-btn-persistent">💾 จัดการเซฟ GaC (Persistent)</button>
|
<button class="tab-btn" data-tab="tab-persistent" id="tab-btn-persistent">💾 จัดการเซฟ GaC (Persistent)</button>
|
||||||
<button class="tab-btn" data-tab="tab-exrank">⚡ Ex-Rank (สกิลพิเศษ)</button>
|
<button class="tab-btn" data-tab="tab-exrank">⚡ Ex-Rank (สกิลพิเศษ)</button>
|
||||||
<button class="tab-btn" data-tab="tab-teleport">🚀 วาร์ปฉาก (Teleport)</button>
|
|
||||||
<button class="tab-btn" data-tab="tab-json">📝 จัดการไฟล์ JSON</button>
|
<button class="tab-btn" data-tab="tab-json">📝 จัดการไฟล์ JSON</button>
|
||||||
<button class="tab-btn" data-tab="tab-settings">⚙️ ตั้งค่า & ข้อมูลโหมด</button>
|
<button class="tab-btn" data-tab="tab-settings">⚙️ ตั้งค่า & ข้อมูลโหมด</button>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -130,9 +129,6 @@
|
|||||||
<button class="btn btn-gold" id="btn-quick-max-all">
|
<button class="btn btn-gold" id="btn-quick-max-all">
|
||||||
⭐ ปรับเลเวล 80 & ปลด E6 ตัวละครทั้งหมด (Max All)
|
⭐ ปรับเลเวล 80 & ปลด E6 ตัวละครทั้งหมด (Max All)
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-primary" id="btn-quick-warp-express">
|
|
||||||
🚂 วาร์ปกลับห้องรับรองรถไฟ Astral Express ทันที
|
|
||||||
</button>
|
|
||||||
<button class="btn btn-secondary" id="btn-quick-sync-persistent">
|
<button class="btn btn-secondary" id="btn-quick-sync-persistent">
|
||||||
💾 ซิงค์ข้อมูล Persistent / เซฟล่าสุด
|
💾 ซิงค์ข้อมูล Persistent / เซฟล่าสุด
|
||||||
</button>
|
</button>
|
||||||
@@ -303,63 +299,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- 6. Teleport Tab -->
|
<!-- 6. JSON Management Tab -->
|
||||||
<section id="tab-teleport" class="tab-content">
|
|
||||||
<div class="grid-2">
|
|
||||||
<!-- Presets -->
|
|
||||||
<div class="card">
|
|
||||||
<div class="card-title">📍 จุดวาร์ปปลอดภัยยอดนิยม (Safe Presets)</div>
|
|
||||||
<p class="card-subtitle">คลิกจุดวาร์ปเพื่อย้ายฉากของผู้เล่นในไฟล์เซฟได้ทันที</p>
|
|
||||||
<div id="teleport-presets-list" style="display: flex; flex-direction: column; gap: 0.6rem;">
|
|
||||||
<!-- Rendered by JS -->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Custom Coordinate Warp -->
|
|
||||||
<div class="card">
|
|
||||||
<div class="card-title">🎯 กำหนดพิกัดวาร์ปเอง (Custom Teleport)</div>
|
|
||||||
<p class="card-subtitle">ใส่ PlaneID, FloorID และ EntryID ตามต้องการ</p>
|
|
||||||
|
|
||||||
<form id="form-custom-teleport">
|
|
||||||
<div class="grid-2" style="gap: 0.75rem;">
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="form-label">Plane ID</label>
|
|
||||||
<input type="number" id="tp-plane" class="form-input" required placeholder="20001">
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="form-label">Floor ID</label>
|
|
||||||
<input type="number" id="tp-floor" class="form-input" required placeholder="20001001">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="form-label">Entry ID</label>
|
|
||||||
<input type="number" id="tp-entry" class="form-input" required placeholder="2000101">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid-3" style="gap: 0.75rem;">
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="form-label">X</label>
|
|
||||||
<input type="number" id="tp-x" class="form-input" placeholder="0">
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="form-label">Y</label>
|
|
||||||
<input type="number" id="tp-y" class="form-input" placeholder="0">
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="form-label">Z</label>
|
|
||||||
<input type="number" id="tp-z" class="form-input" placeholder="0">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<button type="submit" class="btn btn-primary" style="width: 100%; margin-top: 0.5rem;">
|
|
||||||
🚀 ยืนยันการวาร์ป (Execute Teleport)
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- 7. JSON Management Tab -->
|
|
||||||
<section id="tab-json" class="tab-content">
|
<section id="tab-json" class="tab-content">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-title" style="flex-wrap: wrap; gap: 0.75rem;">
|
<div class="card-title" style="flex-wrap: wrap; gap: 0.75rem;">
|
||||||
@@ -467,27 +407,53 @@
|
|||||||
|
|
||||||
<div class="grid-2" style="gap: 1rem; margin-bottom: 1rem;">
|
<div class="grid-2" style="gap: 1rem; margin-bottom: 1rem;">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="form-label">ระดับเลเวล (Level 1-80)</label>
|
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.35rem;">
|
||||||
|
<label class="form-label" style="margin: 0;">ระดับเลเวล (Level 1-80)</label>
|
||||||
|
<div style="display: flex; gap: 0.25rem;">
|
||||||
|
<button type="button" class="btn btn-sm btn-secondary btn-lvl-preset" data-lvl="1" style="padding: 0.15rem 0.45rem; font-size: 0.75rem;">1</button>
|
||||||
|
<button type="button" class="btn btn-sm btn-secondary btn-lvl-preset" data-lvl="20" style="padding: 0.15rem 0.45rem; font-size: 0.75rem;">20</button>
|
||||||
|
<button type="button" class="btn btn-sm btn-secondary btn-lvl-preset" data-lvl="60" style="padding: 0.15rem 0.45rem; font-size: 0.75rem;">60</button>
|
||||||
|
<button type="button" class="btn btn-sm btn-secondary btn-lvl-preset" data-lvl="70" style="padding: 0.15rem 0.45rem; font-size: 0.75rem;">70</button>
|
||||||
|
<button type="button" class="btn btn-sm btn-primary btn-lvl-preset" data-lvl="80" style="padding: 0.15rem 0.45rem; font-size: 0.75rem;">80</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<input type="number" id="modal-char-level" class="form-input" min="1" max="80" value="80">
|
<input type="number" id="modal-char-level" class="form-input" min="1" max="80" value="80">
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="form-label">การเลื่อนขั้น (Ascension 0-6)</label>
|
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.35rem;">
|
||||||
|
<label class="form-label" style="margin: 0;">การเลื่อนขั้น (Ascension 0-6)</label>
|
||||||
|
<div style="display: flex; gap: 0.25rem;">
|
||||||
|
<button type="button" class="btn btn-sm btn-secondary btn-prom-preset" data-prom="0" style="padding: 0.15rem 0.45rem; font-size: 0.75rem;">0</button>
|
||||||
|
<button type="button" class="btn btn-sm btn-secondary btn-prom-preset" data-prom="3" style="padding: 0.15rem 0.45rem; font-size: 0.75rem;">3</button>
|
||||||
|
<button type="button" class="btn btn-sm btn-primary btn-prom-preset" data-prom="6" style="padding: 0.15rem 0.45rem; font-size: 0.75rem;">6</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<input type="number" id="modal-char-promotion" class="form-input" min="0" max="6" value="6">
|
<input type="number" id="modal-char-promotion" class="form-input" min="0" max="6" value="6">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="form-label">Eidolon (E0 - E6)</label>
|
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.35rem;">
|
||||||
<div class="eidolon-buttons" id="modal-char-eidolon-btns" style="margin-top: 0.35rem;">
|
<label class="form-label" style="margin: 0;">Eidolon (E0 - E6)</label>
|
||||||
|
<div style="display: flex; gap: 0.4rem;">
|
||||||
|
<button type="button" class="btn btn-sm btn-secondary" id="btn-modal-quick-e0" style="padding: 0.2rem 0.6rem; font-size: 0.75rem;">
|
||||||
|
E0 (รีเซ็ต)
|
||||||
|
</button>
|
||||||
|
<button type="button" class="btn btn-sm btn-gold" id="btn-modal-quick-e6" style="padding: 0.2rem 0.6rem; font-size: 0.75rem;">
|
||||||
|
⭐ ปลด E6 เต็ม
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="eidolon-buttons" id="modal-char-eidolon-btns" style="margin-top: 0.5rem; gap: 0.5rem;">
|
||||||
<!-- Injected pips -->
|
<!-- Injected pips -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style="display: flex; gap: 0.75rem; margin-top: 1.5rem; justify-content: flex-end;">
|
<div style="display: flex; gap: 0.75rem; margin-top: 1.5rem; justify-content: flex-end; flex-wrap: wrap;">
|
||||||
<button class="btn btn-gold" id="btn-modal-max-skills">
|
<button type="button" class="btn btn-gold" id="btn-modal-max-skills">
|
||||||
⭐ อัพสกิล & Traces ทั้งหมด (10/10)
|
⭐ อัพสกิล & Traces ทั้งหมด (10/10)
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-success" id="btn-modal-save-avatar">
|
<button type="button" class="btn btn-success" id="btn-modal-save-avatar">
|
||||||
💾 บันทึกตัวละคร
|
💾 บันทึกตัวละคร
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -534,6 +534,144 @@ export const AVATAR_METADATA = {
|
|||||||
path: "Remembrance",
|
path: "Remembrance",
|
||||||
element: "Wind",
|
element: "Wind",
|
||||||
rarity: 5
|
rarity: 5
|
||||||
|
},
|
||||||
|
1014: {
|
||||||
|
names: { en: "Saber", th: "Saber (เซเบอร์)", "zh-CN": "阿尔托莉雅·潘德拉贡 (塞巴)", "zh-TW": "阿爾托莉雅·潘德拉貢", ja: "セイバー", ko: "세이버", ru: "Сэйбер" },
|
||||||
|
path: "Destruction",
|
||||||
|
element: "Wind",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1015: {
|
||||||
|
names: { en: "Archer", th: "Archer (อาร์เชอร์)", "zh-CN": "卫宫士郎 (红A/阿茶)", "zh-TW": "衛宮士郎 (紅A)", ja: "アーチャー", ko: "아처", ru: "Арчер" },
|
||||||
|
path: "Hunt",
|
||||||
|
element: "Quantum",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1321: {
|
||||||
|
names: { en: "Dahlia", th: "Dahlia (ดาเลีย)", "zh-CN": "达莉亚", "zh-TW": "達莉亞", ja: "ダリア", ko: "달리아", ru: "Далия" },
|
||||||
|
path: "Nihility",
|
||||||
|
element: "Fire",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1406: {
|
||||||
|
names: { en: "Cipher", th: "Cipher (ไซเฟอร์)", "zh-CN": "赛弗", "zh-TW": "賽弗", ja: "サイファー", ko: "사이퍼", ru: "Сайфер" },
|
||||||
|
path: "Nihility",
|
||||||
|
element: "Quantum",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1412: {
|
||||||
|
names: { en: "Cerydra", th: "Cerydra (เซอรีดรา)", "zh-CN": "塞利德拉", "zh-TW": "塞利德拉", ja: "セリドラ", ko: "세리드라", ru: "Серидра" },
|
||||||
|
path: "Harmony",
|
||||||
|
element: "Wind",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1413: {
|
||||||
|
names: { en: "Evernight", th: "Evernight (เอเวอร์ไนท์)", "zh-CN": "永夜", "zh-TW": "永夜", ja: "エバーナイト", ko: "에버나이트", ru: "Эвернайт" },
|
||||||
|
path: "Remembrance",
|
||||||
|
element: "Ice",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1414: {
|
||||||
|
names: { en: "Dan Heng • Permeating Thunder", th: "Dan Heng PT (ดันเฮงร่างใหม่)", "zh-CN": "丹恒·行者", "zh-TW": "丹恆·行者", ja: "丹恒・行者", ko: "단항·행자", ru: "Дань Хэн • Странник" },
|
||||||
|
path: "Preservation",
|
||||||
|
element: "Physical",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1415: {
|
||||||
|
names: { en: "Cyrene", th: "Cyrene (ซีรีน)", "zh-CN": "赛琳", "zh-TW": "賽琳", ja: "サイリーン", ko: "키레네", ru: "Кирена" },
|
||||||
|
path: "Remembrance",
|
||||||
|
element: "Ice",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1501: {
|
||||||
|
names: { en: "Sparxie", th: "Sparxie (สปาร์กซี่)", "zh-CN": "斯帕克茜", "zh-TW": "斯帕克茜", ja: "スパーキー", ko: "스팍시", ru: "Спаркси" },
|
||||||
|
path: "Elation",
|
||||||
|
element: "Fire",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1502: {
|
||||||
|
names: { en: "Yaoguang", th: "Yaoguang (เย่ากวง)", "zh-CN": "瑶光", "zh-TW": "瑤光", ja: "瑤光", ko: "요광", ru: "Яогуан" },
|
||||||
|
path: "Elation",
|
||||||
|
element: "Physical",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1503: {
|
||||||
|
names: { en: "Pearl", th: "Pearl (เพิร์ล)", "zh-CN": "佩尔 (Pearl)", "zh-TW": "佩爾", ja: "パール", ko: "펄", ru: "Перл" },
|
||||||
|
path: "Elation",
|
||||||
|
element: "Ice",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1504: {
|
||||||
|
names: { en: "Ashveil", th: "Ashveil (แอชเวล)", "zh-CN": "灰纱", "zh-TW": "灰紗", ja: "アッシュヴェイル", ko: "애쉬베일", ru: "Эшвейл" },
|
||||||
|
path: "Hunt",
|
||||||
|
element: "Lightning",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1505: {
|
||||||
|
names: { en: "Evanescia", th: "Evanescia (เอวาเนสเซีย)", "zh-CN": "埃瓦内西亚", "zh-TW": "埃瓦內西亞", ja: "エヴァネシア", ko: "에바네시아", ru: "Эванесия" },
|
||||||
|
path: "Elation",
|
||||||
|
element: "Physical",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1506: {
|
||||||
|
names: { en: "Silver Wolf Lv.999", th: "Silver Wolf Lv.999 (ซิลเวอร์วูล์ฟ Lv.999)", "zh-CN": "银狼 Lv.999", "zh-TW": "銀狼 Lv.999", ja: "銀狼 Lv.999", ko: "은랑 Lv.999", ru: "Серебряный Волк Lv.999" },
|
||||||
|
path: "Elation",
|
||||||
|
element: "Imaginary",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1507: {
|
||||||
|
names: { en: "Mortenax Blade", th: "Mortenax Blade (มอร์เทแนกซ์ เบลด)", "zh-CN": "摩天之刃", "zh-TW": "摩天之刃", ja: "摩天の刃", ko: "모르테낙스 블레이드", ru: "Мортенакс Блейд" },
|
||||||
|
path: "Nihility",
|
||||||
|
element: "Fire",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1508: {
|
||||||
|
names: { en: "Tohsaka Rin", th: "Tohsaka Rin (โทซากะ ริน)", "zh-CN": "远坂凛", "zh-TW": "遠坂凜", ja: "遠坂凛", ko: "토오사카 린", ru: "Рин Тосака" },
|
||||||
|
path: "Erudition",
|
||||||
|
element: "Quantum",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1509: {
|
||||||
|
names: { en: "Gilgamesh", th: "Gilgamesh (กิลกาเมช)", "zh-CN": "吉尔伽美什 (金闪闪)", "zh-TW": "吉爾伽美什", ja: "ギルガメッシュ", ko: "길가메시", ru: "Гильгамеш" },
|
||||||
|
path: "Destruction",
|
||||||
|
element: "Lightning",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1510: {
|
||||||
|
names: { en: "Himeko Nova", th: "Himeko Nova (ฮิเมโกะ โนวา)", "zh-CN": "姬子·新星", "zh-TW": "姬子·新星", ja: "姫子・ノヴァ", ko: "히메코 노바", ru: "Химеко Нова" },
|
||||||
|
path: "Erudition",
|
||||||
|
element: "Fire",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1511: {
|
||||||
|
names: { en: "Nihilux", th: "Nihilux (นิฮิลักซ์)", "zh-CN": "虚无之神·尼希卢克斯", "zh-TW": "虛無之神·尼希盧克斯", ja: "ニヒラックス", ko: "니힐룩스", ru: "Нихилюкс" },
|
||||||
|
path: "Elation",
|
||||||
|
element: "Quantum",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1512: {
|
||||||
|
names: { en: "Robin • Summeretto", th: "Robin • Summeretto (โรบิน ซัมเมอร์)", "zh-CN": "知更鸟·夏日", "zh-TW": "知更鳥·夏日", ja: "ロビン・サマー", ko: "로빈·서머", ru: "Зарянка • Лето" },
|
||||||
|
path: "Remembrance",
|
||||||
|
element: "Wind",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
1513: {
|
||||||
|
names: { en: "Aventurine • Waveflair", th: "Aventurine • Waveflair (อเวนทูรีน คลื่นทะเล)", "zh-CN": "砂金·夏日浪潮", "zh-TW": "砂金·夏日浪潮", ja: "アベンチュリン・サマー", ko: "어벤츄린·웨이브", ru: "Авантюрин • Волна" },
|
||||||
|
path: "Elation",
|
||||||
|
element: "Quantum",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
8009: {
|
||||||
|
names: { en: "Trailblazer (Elation ♂)", th: "ผู้บุกเบิก (ปีติ ♂)", "zh-CN": "开拓者 (欢愉 ♂)", "zh-TW": "開拓者 (歡愉 ♂)", ja: "開拓者 (愉悦 ♂)", ko: "개척자 (환락 ♂)", ru: "Первопроходец (Радость ♂)" },
|
||||||
|
path: "Elation",
|
||||||
|
element: "Lightning",
|
||||||
|
rarity: 5
|
||||||
|
},
|
||||||
|
8010: {
|
||||||
|
names: { en: "Trailblazer (Elation ♀)", th: "ผู้บุกเบิก (ปีติ ♀)", "zh-CN": "开拓者 (欢愉 ♀)", "zh-TW": "開拓者 (歡愉 ♀)", ja: "開拓者 (愉悦 ♀)", ko: "개척자 (환락 ♀)", ru: "Первопроходец (Радость ♀)" },
|
||||||
|
path: "Elation",
|
||||||
|
element: "Lightning",
|
||||||
|
rarity: 5
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -119,7 +119,8 @@ export const TRANSLATIONS = {
|
|||||||
Preservation: "อนุรักษ์",
|
Preservation: "อนุรักษ์",
|
||||||
Abundance: "เฟื่องฟู",
|
Abundance: "เฟื่องฟู",
|
||||||
Remembrance: "ความทรงจำ",
|
Remembrance: "ความทรงจำ",
|
||||||
Unknown: "ไม่ระบุ"
|
Unknown: "ไม่ระบุ",
|
||||||
|
Elation: "ปีติ (Elation)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -215,7 +216,8 @@ export const TRANSLATIONS = {
|
|||||||
Preservation: "Preservation",
|
Preservation: "Preservation",
|
||||||
Abundance: "Abundance",
|
Abundance: "Abundance",
|
||||||
Remembrance: "Remembrance",
|
Remembrance: "Remembrance",
|
||||||
Unknown: "Unknown"
|
Unknown: "Unknown",
|
||||||
|
Elation: "Elation"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -311,7 +313,8 @@ export const TRANSLATIONS = {
|
|||||||
Preservation: "存护",
|
Preservation: "存护",
|
||||||
Abundance: "丰饶",
|
Abundance: "丰饶",
|
||||||
Remembrance: "记忆",
|
Remembrance: "记忆",
|
||||||
Unknown: "未知"
|
Unknown: "未知",
|
||||||
|
Elation: "欢愉"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -407,7 +410,8 @@ export const TRANSLATIONS = {
|
|||||||
Preservation: "存護",
|
Preservation: "存護",
|
||||||
Abundance: "豐饒",
|
Abundance: "豐饒",
|
||||||
Remembrance: "記憶",
|
Remembrance: "記憶",
|
||||||
Unknown: "未知"
|
Unknown: "未知",
|
||||||
|
Elation: "歡愉"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -503,7 +507,8 @@ export const TRANSLATIONS = {
|
|||||||
Preservation: "存護",
|
Preservation: "存護",
|
||||||
Abundance: "豊穣",
|
Abundance: "豊穣",
|
||||||
Remembrance: "記憶",
|
Remembrance: "記憶",
|
||||||
Unknown: "不明"
|
Unknown: "不明",
|
||||||
|
Elation: "愉悦"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -599,7 +604,8 @@ export const TRANSLATIONS = {
|
|||||||
Preservation: "보존",
|
Preservation: "보존",
|
||||||
Abundance: "풍요",
|
Abundance: "풍요",
|
||||||
Remembrance: "기억",
|
Remembrance: "기억",
|
||||||
Unknown: "알 수 없음"
|
Unknown: "알 수 없음",
|
||||||
|
Elation: "환락"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -695,7 +701,8 @@ export const TRANSLATIONS = {
|
|||||||
Preservation: "Bảo Hộ",
|
Preservation: "Bảo Hộ",
|
||||||
Abundance: "Trù Phú",
|
Abundance: "Trù Phú",
|
||||||
Remembrance: "Ký Ức",
|
Remembrance: "Ký Ức",
|
||||||
Unknown: "Không xác định"
|
Unknown: "Không xác định",
|
||||||
|
Elation: "Vui Vẻ"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -791,7 +798,8 @@ export const TRANSLATIONS = {
|
|||||||
Preservation: "Pelestarian",
|
Preservation: "Pelestarian",
|
||||||
Abundance: "Kelimpahan",
|
Abundance: "Kelimpahan",
|
||||||
Remembrance: "Ingatan",
|
Remembrance: "Ingatan",
|
||||||
Unknown: "Tidak Diketahui"
|
Unknown: "Tidak Diketahui",
|
||||||
|
Elation: "Kegembiraan"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -887,7 +895,8 @@ export const TRANSLATIONS = {
|
|||||||
Preservation: "Conservación",
|
Preservation: "Conservación",
|
||||||
Abundance: "Abundancia",
|
Abundance: "Abundancia",
|
||||||
Remembrance: "Reminiscencia",
|
Remembrance: "Reminiscencia",
|
||||||
Unknown: "Desconocido"
|
Unknown: "Desconocido",
|
||||||
|
Elation: "Exultación"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -983,7 +992,8 @@ export const TRANSLATIONS = {
|
|||||||
Preservation: "Préservation",
|
Preservation: "Préservation",
|
||||||
Abundance: "Abondance",
|
Abundance: "Abondance",
|
||||||
Remembrance: "Souvenir",
|
Remembrance: "Souvenir",
|
||||||
Unknown: "Inconnu"
|
Unknown: "Inconnu",
|
||||||
|
Elation: "Allégresse"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -1079,7 +1089,8 @@ export const TRANSLATIONS = {
|
|||||||
Preservation: "Bewahrung",
|
Preservation: "Bewahrung",
|
||||||
Abundance: "Überfluss",
|
Abundance: "Überfluss",
|
||||||
Remembrance: "Erinnerung",
|
Remembrance: "Erinnerung",
|
||||||
Unknown: "Unbekannt"
|
Unknown: "Unbekannt",
|
||||||
|
Elation: "Frohsinn"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -1175,7 +1186,8 @@ export const TRANSLATIONS = {
|
|||||||
Preservation: "Сохранение",
|
Preservation: "Сохранение",
|
||||||
Abundance: "Изобилие",
|
Abundance: "Изобилие",
|
||||||
Remembrance: "Память",
|
Remembrance: "Память",
|
||||||
Unknown: "Неизвестно"
|
Unknown: "Неизвестно",
|
||||||
|
Elation: "Радость"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -1271,7 +1283,8 @@ export const TRANSLATIONS = {
|
|||||||
Preservation: "Preservação",
|
Preservation: "Preservação",
|
||||||
Abundance: "Abundância",
|
Abundance: "Abundância",
|
||||||
Remembrance: "Recordação",
|
Remembrance: "Recordação",
|
||||||
Unknown: "Desconhecido"
|
Unknown: "Desconhecido",
|
||||||
|
Elation: "Alegria"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,128 +0,0 @@
|
|||||||
import { getCurrentLanguage } from './i18n.js';
|
|
||||||
|
|
||||||
export const PRESET_TELEPORTS = [
|
|
||||||
{
|
|
||||||
names: {
|
|
||||||
th: "Astral Express - ขบวนรถไฟแอสทรัล (ห้องรับรอง)",
|
|
||||||
en: "Astral Express - Parlor Car",
|
|
||||||
"zh-CN": "星穹列车 - 观景车厢",
|
|
||||||
"zh-TW": "星穹列車 - 觀景車廂",
|
|
||||||
ja: "星穹列車 - 客室",
|
|
||||||
ko: "은하열차 - 객실",
|
|
||||||
ru: "Звёздный экспресс - Общий вагон"
|
|
||||||
},
|
|
||||||
plane_id: 20001,
|
|
||||||
floor_id: 20001001,
|
|
||||||
entry_id: 2000101,
|
|
||||||
x: 0,
|
|
||||||
y: 0,
|
|
||||||
z: 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
names: {
|
|
||||||
th: "สถานีอวกาศ Herta - โซนควบคุมหลัก (Master Control Zone)",
|
|
||||||
en: "Herta Space Station - Master Control Zone",
|
|
||||||
"zh-CN": "空间站「黑塔」 - 主控舱段",
|
|
||||||
"zh-TW": "太空站「黑塔」 - 主控艙段",
|
|
||||||
ja: "宇宙ステーション「ヘルタ」 - 主制御部分",
|
|
||||||
ko: "우주정거장 「헤르타」 - 메인 컨트롤 구역",
|
|
||||||
ru: "Космическая станция «Герта» - Главная контрольная зона"
|
|
||||||
},
|
|
||||||
plane_id: 10001,
|
|
||||||
floor_id: 10001001,
|
|
||||||
entry_id: 1000101,
|
|
||||||
x: 0,
|
|
||||||
y: 0,
|
|
||||||
z: 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
names: {
|
|
||||||
th: "Jarilo-VI (Belobog) - เขตการปกครอง (Administrative District)",
|
|
||||||
en: "Jarilo-VI - Administrative District",
|
|
||||||
"zh-CN": "雅利洛-VI - 行政区",
|
|
||||||
"zh-TW": "雅利洛-VI - 行政區",
|
|
||||||
ja: "ヤリーロ-VI - 行政区",
|
|
||||||
ko: "야릴로-VI - 행정구역",
|
|
||||||
ru: "Ярило-VI - Административный район"
|
|
||||||
},
|
|
||||||
plane_id: 10101,
|
|
||||||
floor_id: 10101001,
|
|
||||||
entry_id: 1010101,
|
|
||||||
x: 10250,
|
|
||||||
y: 51,
|
|
||||||
z: 32670
|
|
||||||
},
|
|
||||||
{
|
|
||||||
names: {
|
|
||||||
th: "Jarilo-VI (Underworld) - เมือง Boulder (Boulder Town)",
|
|
||||||
en: "Jarilo-VI - Boulder Town",
|
|
||||||
"zh-CN": "雅利洛-VI - 磐岩镇",
|
|
||||||
"zh-TW": "雅利洛-VI - 磐岩鎮",
|
|
||||||
ja: "ヤリーロ-VI - ボルダータウン",
|
|
||||||
ko: "야릴로-VI - 볼더 타운",
|
|
||||||
ru: "Ярило-VI - Камнеград"
|
|
||||||
},
|
|
||||||
plane_id: 10102,
|
|
||||||
floor_id: 10102001,
|
|
||||||
entry_id: 1010201,
|
|
||||||
x: -20560,
|
|
||||||
y: -286,
|
|
||||||
z: 57320
|
|
||||||
},
|
|
||||||
{
|
|
||||||
names: {
|
|
||||||
th: "Xianzhou Luofu - ท่าเรือเรือบินดาวกลาง (Central Starskiff Haven)",
|
|
||||||
en: "Xianzhou Luofu - Central Starskiff Haven",
|
|
||||||
"zh-CN": "仙舟「罗浮」 - 星槎海中枢",
|
|
||||||
"zh-TW": "仙舟「羅浮」 - 星槎海中樞",
|
|
||||||
ja: "仙舟「羅浮」 - 星槎海中枢",
|
|
||||||
ko: "선주 「나부」 - 별뗏목 바다 중추",
|
|
||||||
ru: "Сяньчжоу: Лофу - Центральная гавань Приюта звёздных яликов"
|
|
||||||
},
|
|
||||||
plane_id: 10202,
|
|
||||||
floor_id: 10202001,
|
|
||||||
entry_id: 1020201,
|
|
||||||
x: 8320,
|
|
||||||
y: -3486,
|
|
||||||
z: -25080
|
|
||||||
},
|
|
||||||
{
|
|
||||||
names: {
|
|
||||||
th: "Penacony - The Reverie (Dreamscape Hotel)",
|
|
||||||
en: "Penacony - The Reverie (Dreamscape)",
|
|
||||||
"zh-CN": "匹诺康尼 - 「白日梦」酒店-梦境",
|
|
||||||
"zh-TW": "匹諾康尼 - 「白日夢」飯店-夢境",
|
|
||||||
ja: "ピノコニー - 「レバリー」ホテル-夢境",
|
|
||||||
ko: "페나코니 - 「레버리」 호텔-꿈속",
|
|
||||||
ru: "Пенакония - Отель «Грёзы» (Мир грёз)"
|
|
||||||
},
|
|
||||||
plane_id: 10301,
|
|
||||||
floor_id: 10301001,
|
|
||||||
entry_id: 1030101,
|
|
||||||
x: 0,
|
|
||||||
y: 0,
|
|
||||||
z: 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
names: {
|
|
||||||
th: "Penacony - ชั่วโมงทอง (Golden Hour)",
|
|
||||||
en: "Penacony - Golden Hour",
|
|
||||||
"zh-CN": "匹诺康尼 - 黄金的时刻",
|
|
||||||
"zh-TW": "匹諾康尼 - 黃金的時刻",
|
|
||||||
ja: "ピノコニー - 黄金の刻",
|
|
||||||
ko: "페나코니 - 황금의 순간",
|
|
||||||
ru: "Пенакония - Золотой миг"
|
|
||||||
},
|
|
||||||
plane_id: 10302,
|
|
||||||
floor_id: 10302001,
|
|
||||||
entry_id: 1030201,
|
|
||||||
x: -3556,
|
|
||||||
y: 1539,
|
|
||||||
z: -378220
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
export function getTeleportName(preset, langOverride = null) {
|
|
||||||
const lang = langOverride || getCurrentLanguage();
|
|
||||||
return preset.names?.[lang] || preset.names?.en || preset.names?.th || "Teleport Point";
|
|
||||||
}
|
|
||||||
@@ -8,7 +8,10 @@ const ids = [
|
|||||||
1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112,
|
1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112,
|
||||||
1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1217, 1218, 1220, 1221, 1222, 1223, 1225,
|
1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1217, 1218, 1220, 1221, 1222, 1223, 1225,
|
||||||
1005, 1006, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1312, 1313, 1314, 1315, 1317,
|
1005, 1006, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1312, 1313, 1314, 1315, 1317,
|
||||||
1401, 1402, 1403, 1404, 1405, 1407, 1408, 1409, 1410
|
1401, 1402, 1403, 1404, 1405, 1407, 1408, 1409, 1410,
|
||||||
|
1014, 1015, 1321, 1406, 1412, 1413, 1414, 1415,
|
||||||
|
1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513,
|
||||||
|
8009, 8010
|
||||||
];
|
];
|
||||||
|
|
||||||
const targetDir = path.join(__dirname, '..', 'assets', 'avatars');
|
const targetDir = path.join(__dirname, '..', 'assets', 'avatars');
|
||||||
@@ -53,12 +56,20 @@ async function processId(id) {
|
|||||||
ok = await fetchUrl(rawUrl, dest);
|
ok = await fetchUrl(rawUrl, dest);
|
||||||
if (ok) return { id, status: 'ok (raw)' };
|
if (ok) return { id, status: 'ok (raw)' };
|
||||||
|
|
||||||
// Fallbacks for trailblazer female variants if not directly mapped
|
// Fallbacks for special & collab variants
|
||||||
if ([8004, 8006, 8008].includes(id) && fs.existsSync(path.join(targetDir, '8002.png'))) {
|
if (id === 1506 && fs.existsSync(path.join(targetDir, '1006.png'))) {
|
||||||
|
fs.copyFileSync(path.join(targetDir, '1006.png'), dest);
|
||||||
|
return { id, status: 'fallback 1006 (Silver Wolf)' };
|
||||||
|
}
|
||||||
|
if (id === 1511 && fs.existsSync(path.join(targetDir, '1308.png'))) {
|
||||||
|
fs.copyFileSync(path.join(targetDir, '1308.png'), dest);
|
||||||
|
return { id, status: 'fallback 1308 (Acheron)' };
|
||||||
|
}
|
||||||
|
if ([8004, 8006, 8008, 8010].includes(id) && fs.existsSync(path.join(targetDir, '8002.png'))) {
|
||||||
fs.copyFileSync(path.join(targetDir, '8002.png'), dest);
|
fs.copyFileSync(path.join(targetDir, '8002.png'), dest);
|
||||||
return { id, status: 'fallback 8002' };
|
return { id, status: 'fallback 8002' };
|
||||||
}
|
}
|
||||||
if ([8003, 8005, 8007].includes(id) && fs.existsSync(path.join(targetDir, '8001.png'))) {
|
if ([8003, 8005, 8007, 8009].includes(id) && fs.existsSync(path.join(targetDir, '8001.png'))) {
|
||||||
fs.copyFileSync(path.join(targetDir, '8001.png'), dest);
|
fs.copyFileSync(path.join(targetDir, '8001.png'), dest);
|
||||||
return { id, status: 'fallback 8001' };
|
return { id, status: 'fallback 8001' };
|
||||||
}
|
}
|
||||||
|
|||||||