implement import/export settings

This commit is contained in:
prateau 2024-09-21 19:37:08 +02:00
parent 35cd615363
commit 9f04d7d423
12 changed files with 53 additions and 13 deletions

View File

@ -16,6 +16,8 @@
"exportSlotSelect": "Wähle einen Slot zum Exportieren.", "exportSlotSelect": "Wähle einen Slot zum Exportieren.",
"importRunHistory": "Laufhistorie importieren", "importRunHistory": "Laufhistorie importieren",
"exportRunHistory": "Laufhistorie exportieren", "exportRunHistory": "Laufhistorie exportieren",
"importSettings": "Einstellungen importieren",
"exportSettings": "Einstellungen exportieren",
"importData": "Daten importieren", "importData": "Daten importieren",
"exportData": "Daten exportieren", "exportData": "Daten exportieren",
"consentPreferences": "Einwilligungspräferenzen", "consentPreferences": "Einwilligungspräferenzen",

View File

@ -16,6 +16,8 @@
"exportSlotSelect": "Select a slot to export from.", "exportSlotSelect": "Select a slot to export from.",
"importRunHistory": "Import Run History", "importRunHistory": "Import Run History",
"exportRunHistory": "Export Run History", "exportRunHistory": "Export Run History",
"importSettings": "Import Settings",
"exportSettings": "Export Settings",
"importData": "Import Data", "importData": "Import Data",
"exportData": "Export Data", "exportData": "Export Data",
"consentPreferences": "Consent Preferences", "consentPreferences": "Consent Preferences",

View File

@ -16,6 +16,8 @@
"exportSlotSelect": "Selecciona una ranura para exportar.", "exportSlotSelect": "Selecciona una ranura para exportar.",
"importRunHistory":"Importar Historial de partida", "importRunHistory":"Importar Historial de partida",
"exportRunHistory":"Exportar Historial de partida", "exportRunHistory":"Exportar Historial de partida",
"importSettings": "Importar Configuraciones",
"exportSettings": "Exportar Configuraciones",
"importData": "Importar Datos", "importData": "Importar Datos",
"exportData": "Exportar Datos", "exportData": "Exportar Datos",
"consentPreferences": "Consentimiento de datos", "consentPreferences": "Consentimiento de datos",

View File

@ -18,6 +18,8 @@
"exportData": "Exporter données", "exportData": "Exporter données",
"importRunHistory":"Importer historique", "importRunHistory":"Importer historique",
"exportRunHistory":"Exporter historique", "exportRunHistory":"Exporter historique",
"importSettings": "Importer paramètres",
"exportSettings": "Exporter paramètres",
"consentPreferences": "Gérer les cookies", "consentPreferences": "Gérer les cookies",
"linkDiscord": "Lier à Discord", "linkDiscord": "Lier à Discord",
"unlinkDiscord": "Délier Discord", "unlinkDiscord": "Délier Discord",

View File

@ -16,6 +16,8 @@
"exportSlotSelect": "Seleziona uno slot da cui esportare.", "exportSlotSelect": "Seleziona uno slot da cui esportare.",
"importRunHistory":"Importa run precedenti", "importRunHistory":"Importa run precedenti",
"exportRunHistory":"Esporta run precedenti", "exportRunHistory":"Esporta run precedenti",
"importSettings": "Importa impostazioni",
"exportSettings": "Esporta impostazioni",
"importData": "Importa dati", "importData": "Importa dati",
"exportData": "Esporta dati", "exportData": "Esporta dati",
"consentPreferences": "Consenti preferenze", "consentPreferences": "Consenti preferenze",

View File

@ -16,6 +16,8 @@
"exportSlotSelect": "エクスポート元の スロットを 選んでください", "exportSlotSelect": "エクスポート元の スロットを 選んでください",
"importRunHistory": "ラン歴をインポート", "importRunHistory": "ラン歴をインポート",
"exportRunHistory": "ラン歴をエクスポート", "exportRunHistory": "ラン歴をエクスポート",
"importSettings": "Import Settings",
"exportSettings": "Export Settings",
"importData": "データをインポート", "importData": "データをインポート",
"exportData": "データをエクスポート", "exportData": "データをエクスポート",
"consentPreferences": "同意設定", "consentPreferences": "同意設定",

View File

@ -16,6 +16,8 @@
"exportSlotSelect": "내보낼 슬롯을 골라주세요.", "exportSlotSelect": "내보낼 슬롯을 골라주세요.",
"importRunHistory":"플레이 이력 불러오기", "importRunHistory":"플레이 이력 불러오기",
"exportRunHistory":"플레이 이력 내보내기", "exportRunHistory":"플레이 이력 내보내기",
"importSettings": "설정 불러오기",
"exportSettings": "설정 내보내기",
"importData": "데이터 불러오기", "importData": "데이터 불러오기",
"exportData": "데이터 내보내기", "exportData": "데이터 내보내기",
"consentPreferences": "쿠키 설정 동의", "consentPreferences": "쿠키 설정 동의",

View File

@ -16,6 +16,8 @@
"exportSlotSelect": "Selecione um slot para exportar.", "exportSlotSelect": "Selecione um slot para exportar.",
"importRunHistory": "Importar Histórico de Jogos", "importRunHistory": "Importar Histórico de Jogos",
"exportRunHistory": "Exportar Histórico de Jogos", "exportRunHistory": "Exportar Histórico de Jogos",
"importSettings": "Importar configurações",
"exportSettings": "Exportar configurações",
"importData": "Importar dados", "importData": "Importar dados",
"exportData": "Exportar dados", "exportData": "Exportar dados",
"consentPreferences": "Opções de Privacidade", "consentPreferences": "Opções de Privacidade",

View File

@ -16,6 +16,8 @@
"exportSlotSelect": "选择要导出的存档位。", "exportSlotSelect": "选择要导出的存档位。",
"importRunHistory":"导入历史记录", "importRunHistory":"导入历史记录",
"exportRunHistory":"导出历史记录", "exportRunHistory":"导出历史记录",
"importSettings": "导入设置",
"exportSettings": "导出设置",
"importData": "导入数据", "importData": "导入数据",
"exportData": "导出数据", "exportData": "导出数据",
"consentPreferences": "同意偏好", "consentPreferences": "同意偏好",

View File

@ -16,6 +16,8 @@
"exportSlotSelect": "選擇要導出的存檔位。", "exportSlotSelect": "選擇要導出的存檔位。",
"importRunHistory":"導入歷史記錄", "importRunHistory":"導入歷史記錄",
"exportRunHistory":"導出歷史記錄", "exportRunHistory":"導出歷史記錄",
"importSettings": "導入設置",
"exportSettings": "導出設置",
"importData": "導入數據", "importData": "導入數據",
"exportData": "導出數據", "exportData": "導出數據",
"consentPreferences": "同意偏好", "consentPreferences": "同意偏好",

View File

@ -13,7 +13,7 @@ import { GameModes, getGameMode } from "../game-mode";
import { BattleType } from "../battle"; import { BattleType } from "../battle";
import TrainerData from "./trainer-data"; import TrainerData from "./trainer-data";
import { trainerConfigs } from "../data/trainer-config"; import { trainerConfigs } from "../data/trainer-config";
import { SettingKeys, resetSettings, setSetting } from "./settings/settings"; import { Setting, SettingKeys, resetSettings, setSetting, settingIndex } from "./settings/settings";
import { achvs } from "./achv"; import { achvs } from "./achv";
import EggData from "./egg-data"; import EggData from "./egg-data";
import { Egg } from "../data/egg"; import { Egg } from "../data/egg";
@ -63,16 +63,12 @@ export const defaultStarterSpecies: Species[] = [
const saveKey = "x0i2O7WRiANTqPmZ"; // Temporary; secure encryption is not yet necessary const saveKey = "x0i2O7WRiANTqPmZ"; // Temporary; secure encryption is not yet necessary
export function getDataTypeKey(dataType: GameDataType, slotId: integer = 0): string { export function getDataTypeKey(dataType: GameDataType, slotId: integer = 0, username?: string): string {
switch (dataType) { switch (dataType) {
case GameDataType.SYSTEM: case GameDataType.SYSTEM:
return "data"; return `data_${username}`;
case GameDataType.SESSION: case GameDataType.SESSION:
let ret = "sessionData"; return `sessionData${slotId || ""}_${username}`;
if (slotId) {
ret += slotId;
}
return ret;
case GameDataType.SETTINGS: case GameDataType.SETTINGS:
return "settings"; return "settings";
case GameDataType.TUTORIALS: case GameDataType.TUTORIALS:
@ -80,7 +76,7 @@ export function getDataTypeKey(dataType: GameDataType, slotId: integer = 0): str
case GameDataType.SEEN_DIALOGUES: case GameDataType.SEEN_DIALOGUES:
return "seenDialogues"; return "seenDialogues";
case GameDataType.RUN_HISTORY: case GameDataType.RUN_HISTORY:
return "runHistoryData"; return `runHistoryData_${username}`;
} }
} }
@ -1339,7 +1335,7 @@ export class GameData {
public tryExportData(dataType: GameDataType, slotId: integer = 0): Promise<boolean> { public tryExportData(dataType: GameDataType, slotId: integer = 0): Promise<boolean> {
return new Promise<boolean>(resolve => { return new Promise<boolean>(resolve => {
const dataKey: string = `${getDataTypeKey(dataType, slotId)}_${loggedInUser?.username}`; const dataKey: string = getDataTypeKey(dataType, slotId, loggedInUser?.username);
const handleData = (dataStr: string) => { const handleData = (dataStr: string) => {
switch (dataType) { switch (dataType) {
case GameDataType.SYSTEM: case GameDataType.SYSTEM:
@ -1370,7 +1366,8 @@ export class GameData {
} else { } else {
const data = localStorage.getItem(dataKey); const data = localStorage.getItem(dataKey);
if (data) { if (data) {
handleData(decrypt(data, bypassLogin)); const decryptedData = (dataType === GameDataType.SETTINGS) ? data : decrypt(data, bypassLogin);
handleData(decryptedData);
} }
resolve(!!data); resolve(!!data);
} }
@ -1378,7 +1375,7 @@ export class GameData {
} }
public importData(dataType: GameDataType, slotId: integer = 0): void { public importData(dataType: GameDataType, slotId: integer = 0): void {
const dataKey = `${getDataTypeKey(dataType, slotId)}_${loggedInUser?.username}`; const dataKey = getDataTypeKey(dataType, slotId, loggedInUser?.username);
let saveFile: any = document.getElementById("saveFile"); let saveFile: any = document.getElementById("saveFile");
if (saveFile) { if (saveFile) {
@ -1421,6 +1418,12 @@ export class GameData {
}); });
break; break;
case GameDataType.SETTINGS: case GameDataType.SETTINGS:
valid = Object.entries(JSON.parse(dataStr))
.every(([k, v]: [string, number]) => {
const index: number = settingIndex(k);
return index === -1 || Setting[index].options.length > v;
});
break;
case GameDataType.TUTORIALS: case GameDataType.TUTORIALS:
valid = true; valid = true;
break; break;
@ -1438,7 +1441,8 @@ export class GameData {
this.scene.ui.showText(`Your ${dataName} data will be overridden and the page will reload. Proceed?`, null, () => { this.scene.ui.showText(`Your ${dataName} data will be overridden and the page will reload. Proceed?`, null, () => {
this.scene.ui.setOverlayMode(Mode.CONFIRM, () => { this.scene.ui.setOverlayMode(Mode.CONFIRM, () => {
localStorage.setItem(dataKey, encrypt(dataStr, bypassLogin)); const encryptedData = (dataType === GameDataType.SETTINGS) ? dataStr : encrypt(dataStr, bypassLogin);
localStorage.setItem(dataKey, encryptedData);
if (!bypassLogin && dataType < GameDataType.SETTINGS) { if (!bypassLogin && dataType < GameDataType.SETTINGS) {
updateUserInfo().then(success => { updateUserInfo().then(success => {

View File

@ -244,6 +244,22 @@ export default class MenuUiHandler extends MessageUiHandler {
}, },
keepOpen: true keepOpen: true
}); });
manageDataOptions.push({
label: i18next.t("menuUiHandler:importSettings"),
handler: () => {
this.scene.gameData.importData(GameDataType.SETTINGS);
return true;
},
keepOpen: true
});
manageDataOptions.push({
label: i18next.t("menuUiHandler:exportSettings"),
handler: () => {
this.scene.gameData.tryExportData(GameDataType.SETTINGS);
return true;
},
keepOpen: true
});
if (Utils.isLocal || Utils.isBeta) { if (Utils.isLocal || Utils.isBeta) {
manageDataOptions.push({ manageDataOptions.push({
label: i18next.t("menuUiHandler:importData"), label: i18next.t("menuUiHandler:importData"),