From 1c1f3df89bd0462fa519d44f2f22342d78e6344b Mon Sep 17 00:00:00 2001 From: mengyxu Date: Tue, 27 May 2025 10:25:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=BC=BA=E5=AD=98=E6=A1=A3=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=EF=BC=8C=E7=B3=BB=E7=BB=9F=E8=AE=BE=E7=BD=AE=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=B8=B8=E6=88=8F=E5=8A=A0=E9=80=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/i18n/zh/index.ts | 31 ++++---- src/config/i18n/zh/setting.ts | 1 + src/store/action.ts | 6 +- src/store/mutation.ts | 3 + src/store/state.ts | 7 ++ src/tool/archive.ts | 58 ++++++++------ src/views/archive.vue | 77 +++++++++++-------- .../backpack/equip-menu/fusion/equip.vue | 1 + .../backpack/equip-menu/fusion/fusion.vue | 2 +- src/views/backpack/equip-menu/reforge.vue | 3 +- src/views/backpack/equip-menu/strengthen.vue | 5 +- src/views/save-game.vue | 7 +- src/views/setting.vue | 13 +++- src/views/version/update-log.vue | 7 ++ 14 files changed, 140 insertions(+), 81 deletions(-) diff --git a/src/config/i18n/zh/index.ts b/src/config/i18n/zh/index.ts index a46fa90..ed9982c 100644 --- a/src/config/i18n/zh/index.ts +++ b/src/config/i18n/zh/index.ts @@ -92,8 +92,9 @@ export default class Zh { desc: [ '融合说明', '消耗同名太古装备可进行装备融合', - '未融合的太古作为材料可以添加或重置一星融合属性', - '一星或二星太古做材料可以给同星且融合属性类型相同的太古升星', + '一星太古可消耗任意材料重置融合属性类型', + '一星以上太古可消耗同星切融合属性类型相同的材料升星,最多升为三星', + '融合属性品质为一星:神话,二星:远古,三星:太古', ], confirm: ['融合后作为材料的装备将会消失,确认要融合吗?', '确定', '算了'], empty: '无融合属性', @@ -174,17 +175,21 @@ export default class Zh { addPoints = '左键加+1,右键+10'; subtractPoints = '左键-1,右键-10'; - saveGame = ['保存游戏(Ctrl+S)', '每5分钟会自动保存游戏一次', '游戏进度已经保存了。']; - archive = ['存档管理(A)', '导入存档前请将存档内容粘贴到输入框内']; - copyArchive = ['复制存档', '已经复制存档了,建议保存到备忘录', '复制存档失败', '复制旧存档']; - pasteArchive = ['粘贴存档', '粘贴存档内容到输入框成功', '粘贴失败']; - cleanArchive = ['删除存档']; - uploadArchive = '上传存档'; - downArchive = '下载存档'; - importArchive = ['导入', '导入存档成功,继续游戏吧!', '导入存档失败', '存档版本已过期,无法导入!']; - experiential = ['导入体验存档成功,体验时间${0}分钟。', '体验存档无法保存!', '体验时间已过,自动读取本地存档。']; - - music = ['播放或禁音背景音乐(M)']; + archive = { + empty: '未读取到存档!', + error: '存档坏了!', + load: '读取存档成功', + menu: ['存档管理(A)', '导入存档前请将存档内容粘贴到输入框内'], + copy: ['复制存档', '已经复制存档了,建议保存到备忘录', '复制存档失败', '复制旧存档'], + paste: ['粘贴存档', '粘贴存档内容到输入框成功', '粘贴失败'], + clean: ['删除存档'], + upload: '上传存档', + down: '下载存档', + import: ['导入', '导入存档成功,继续游戏吧!', '导入存档失败', '存档版本已过期,无法导入!'], + experiential: ['导入体验存档成功,体验时间${0}分钟。', '体验存档无法保存!', '体验时间已过,自动读取本地存档。'], + save: ['保存游戏(Ctrl+S)', '每5分钟会自动保存游戏一次', '游戏进度已经保存了。', '保存游戏失败!'], + check: ['存档已更新,保存游戏10分钟内无法回档!'], + }; illustrated = ['装备图鉴(I)']; diff --git a/src/config/i18n/zh/setting.ts b/src/config/i18n/zh/setting.ts index a4edd74..0daeaa6 100644 --- a/src/config/i18n/zh/setting.ts +++ b/src/config/i18n/zh/setting.ts @@ -2,3 +2,4 @@ export const title = '系统设置(ESC)'; export const action = ['保存设置', '取消']; export const music = ['背景音乐', '完全关闭', '最小音量', '正常音量']; export const battle = ['战斗日志', '显示', '隐藏']; +export const speed = ['游戏加速', '正常', '倍']; diff --git a/src/store/action.ts b/src/store/action.ts index 5e9ab42..c012e6f 100644 --- a/src/store/action.ts +++ b/src/store/action.ts @@ -70,8 +70,9 @@ export const saveGame = ({ state, commit }) => { if (state.experiential) { commit('set_sys_info', { msg: t('experiential.1'), type: 'warning' }); } else { - saveArchive(state); - commit('set_sys_info', { msg: t('saveGame.2'), type: 'win' }); + saveArchive(state).then((msg) => { + commit('set_sys_info', msg); + }); } }; @@ -90,6 +91,7 @@ const loadArchive = (commit, data) => { } else if (data == 'undfind') { commit('set_sys_info', { msg: t('loadError'), type: 'warning' }); } else { + commit('set_archive_flag', data.flag); commit('set_experiential', data.experiential); commit('set_player_equips', data.equips); commit('set_player_layer', data.layer || 1); diff --git a/src/store/mutation.ts b/src/store/mutation.ts index b29883f..843b416 100644 --- a/src/store/mutation.ts +++ b/src/store/mutation.ts @@ -127,3 +127,6 @@ export const add_player_curhp = (state, hp) => { export const set_experiential = (state, data) => { state.experiential = data || false; }; +export const set_archive_flag = (state, data) => { + data && (state.archiveFlag = data); +}; diff --git a/src/store/state.ts b/src/store/state.ts index d5dbfe4..56a1b97 100644 --- a/src/store/state.ts +++ b/src/store/state.ts @@ -1,4 +1,5 @@ import { i18n, Player, Points, BaseAttribute } from '@/config'; +import { uuid } from '@/tool'; const { t } = i18n; @@ -7,7 +8,13 @@ export default { { type: 'win', msg: t('welcome.0') }, { type: 'win', msg: t('welcome.1') }, ], + archiveFlag: { + id: uuid(), + seq: 0, + time: 0, + }, battleLog: 1, //是否显示战斗日志 + speed: 1, //游戏加速 mobile: window.innerWidth < 768, curMenu: null, equipTip: { diff --git a/src/tool/archive.ts b/src/tool/archive.ts index dacda1a..73adf76 100644 --- a/src/tool/archive.ts +++ b/src/tool/archive.ts @@ -1,8 +1,10 @@ import { Equip, Player, Points } from '@/config'; import { getFromStore, insertToStore, store_name_archive } from './IndexedDB'; import { uuid } from './random'; +import { createt } from '@/config/i18n'; export const archive_version = '1.0'; const archive_version_strengthen = '1.0_flag'; +const at = createt('archive.'); export class GameArchive { version: String; @@ -14,41 +16,51 @@ export class GameArchive { autoSell: string[]; shop: any[]; points: Points; + flag; - constructor(player: Player, grid: any[], autoSell: any[], shop: any[], points: Points) { + constructor(state) { this.version = archive_version; + const player = state.playerAttribute; this.equips = [player.weapon, player.armor, player.ring, player.neck, player.jewelry, player.pants, player.shoes, player.bracers]; this.lv = player.lv; this.layer = player.layer; this.coins = player.coins; - this.grid = grid; - this.autoSell = autoSell; - this.shop = shop; - this.points = points; + this.grid = state.grid; + this.autoSell = state.autoSell; + this.shop = state.shop; + this.points = state.points; + this.flag = state.archiveFlag; } } -export const saveArchive = (state) => { - const archive = new GameArchive(state.playerAttribute, state.grid, state.autoSell, state.shop, state.points); - getFromStore(store_name_archive, archive_version_strengthen).then((flag: any) => { - const time = new Date().getTime(); - if (!flag || !flag.time || flag.time + 10 * 60 * 1000 < time) { - flag = { version: archive_version_strengthen, time: time }; - } - const equips = new Array(); - Array.prototype.push.apply(equips, archive.equips); - Array.prototype.push.apply(equips, archive.grid); - equips.forEach((equip) => { - if (!equip) return; - if (equip.strengthenLv > 0 && !equip.id) { - equip.id = uuid(); +export const checkArchive = (flag) => { + return new Promise((resolve, reject) => { + getArchive().then((rsp: any) => { + const flago = rsp && rsp.flag; + const time = new Date().getTime(); + if (flago && flago.id == flag.id && flag.seq < flago.seq && flago.time + 10 * 60 * 1000 > time) { + resolve(false); + } else { + resolve(true); } - if (equip.id) { - flag[equip.id] = equip.strengthenLv; + }); + }); +}; + +export const saveArchive = (state) => { + return new Promise((resolve, reject) => { + checkArchive(state.archiveFlag).then((rsp) => { + if (rsp) { + state.archiveFlag.time = new Date().getTime(); + state.archiveFlag.seq++; + const archive = new GameArchive(state); + insertToStore(store_name_archive, archive).then((rsp) => { + resolve({ msg: at(rsp ? 'save.2' : 'save.3'), type: 'win' }); + }); + } else { + resolve({ msg: at('check.0'), type: 'warning' }); } }); - insertToStore(store_name_archive, archive); - insertToStore(store_name_archive, flag); }); }; diff --git a/src/views/archive.vue b/src/views/archive.vue index ce7abf5..272be25 100644 --- a/src/views/archive.vue +++ b/src/views/archive.vue @@ -1,21 +1,21 @@