fix(dev): 数据解析功能实现,开始测试

This commit is contained in:
BTMuli
2023-03-08 19:22:47 +08:00
parent 979e7078f0
commit 0a9759d33c
8 changed files with 18406 additions and 0 deletions

View File

@@ -5,6 +5,9 @@
<v-list-item @click="initDev()" prepend-icon="mdi-refresh">
<v-list-item-title>初始化开发</v-list-item-title>
</v-list-item>
<v-list-item @click="parseAchievement()" prepend-icon="mdi-export">
<v-list-item-title>解析成就数据</v-list-item-title>
</v-list-item>
</v-list>
</v-card>
</template>
@@ -12,15 +15,160 @@
<script lang="ts">
import { defineComponent } from "vue";
import useDevStore from "../store/modules/dev";
import useAppStore from "../store/modules/app";
import { fs } from "@tauri-apps/api";
import { SnapHutaoData } from "../plugins/Snap.Hutao";
import {
Achievement as HutaoAchievement,
AchievementGoal as HutaoAchievementGoal,
} from "../plugins/Snap.Hutao/interface/achievement";
import { PaimonMoeData } from "../plugins/Paimon.moe";
import {
AchievementJson as PaimonAchievementJson,
AchievementSeries as PaimonAchievementSeries,
} from "../plugins/Paimon.moe/interface/achievement";
import {
Achievement as TGAchievement,
AchievementSeries as TGAchievementSeries,
} from "../interface/achievements";
export default defineComponent({
name: "Dev",
data() {
return {
originRaw: {
Hutao: "" as string,
Paimon: "" as string,
},
};
},
methods: {
initDev() {
const devStore = useDevStore();
devStore.showDev = false;
devStore.magicCount = 0;
},
async parseAchievement() {
const appStore = useAppStore();
const appDataDir = appStore.dataPath.app;
await console.log("正在读取原始数据...");
// 读取原始数据
await console.log("正在读取 Snap.Hutao 数据库...");
const hutaoAchievementData: HutaoAchievement[] = SnapHutaoData.Achievement.data;
await console.log("读取胡桃成就数据成功!");
const hutaoAchievementGoalData: HutaoAchievementGoal[] =
SnapHutaoData.AchievementGoal.data;
await console.log("读取胡桃成就系列数据成功!");
await console.log("正在读取 Paimon.moe 数据库...");
const paimonAchievementJsonData: PaimonAchievementJson = PaimonMoeData.Achievement.data;
await console.log("读取 Paimon.moe 成就数据成功!");
// 新建目标数据
await console.log("正在生成目标数据...");
const achievementSeries: TGAchievementSeries[] = [];
const achievement: TGAchievement[] = [];
// 先解析 Hutao 的成就数据
await console.log("正在解析胡桃成就系列数据...");
hutaoAchievementGoalData.map(hutaoAchievementGoal => {
const achievementSeriesItem: TGAchievementSeries = {
id: hutaoAchievementGoal.Id,
order: hutaoAchievementGoal.Order,
name: hutaoAchievementGoal.Name,
card: hutaoAchievementGoal?.FinishReward?.ID,
};
achievementSeries.push(achievementSeriesItem);
});
await console.log("解析胡桃成就系列数据成功!");
await console.log("正在解析胡桃成就数据...");
hutaoAchievementData.map(hutaoAchievement => {
const achievementItem: TGAchievement = {
id: hutaoAchievement.Id,
series: hutaoAchievement.Goal,
order: hutaoAchievement.Order,
name: hutaoAchievement.Title,
description: hutaoAchievement.Description,
reward: hutaoAchievement.FinishReward.ID,
version: "",
progress: hutaoAchievement.Progress,
};
achievement.push(achievementItem);
});
await console.log("解析胡桃成就数据成功!");
// 再解析 Paimon.moe 的成就数据
await console.log("正在解析 Paimon.moe 成就数据...");
for (let paimonAchievementJsonDataKey in paimonAchievementJsonData) {
const paimonSeries: PaimonAchievementSeries =
paimonAchievementJsonData[paimonAchievementJsonDataKey];
// 寻找成就系列中名称相同的成就系列
const achievementSeriesItem: TGAchievementSeries | undefined =
achievementSeries.find(
achievementSeriesItem => achievementSeriesItem.name === paimonSeries.name
);
// 成就版本-暂存
let achievementVersion: string = "";
paimonSeries.achievements.map(paimonAchievementItem => {
// 判断是不是数组
if (Array.isArray(paimonAchievementItem)) {
paimonAchievementItem.map(paimonAchievement => {
// 查找成就中 id 相同的成就
const achievementItem: TGAchievement | undefined = achievement.find(
achievementItem => achievementItem.id === paimonAchievement.id
);
if (achievementItem) {
// 更新数据
achievementItem.version = paimonAchievement.ver;
if (achievementSeriesItem) {
if (achievementVersion === "") {
achievementVersion = paimonAchievement.ver;
} else {
// 比较 v1.1 和 v1.2 的大小
if (achievementVersion < paimonAchievement.ver) {
achievementVersion = paimonAchievement.ver;
}
}
}
}
});
} else {
// 查找成就中 id 相同的成就
const achievementItem: TGAchievement | undefined = achievement.find(
achievementItem => achievementItem.id === paimonAchievementItem.id
);
if (achievementItem) {
// 更新数据
achievementItem.version = paimonAchievementItem.ver;
if (achievementSeriesItem) {
if (achievementVersion === "") {
achievementVersion = paimonAchievementItem.ver;
} else {
// 比较 v1.1 和 v1.2 的大小
if (achievementVersion < paimonAchievementItem.ver) {
achievementVersion = paimonAchievementItem.ver;
}
}
}
}
}
});
// 更新成就系列版本
if (achievementSeriesItem && achievementVersion !== "") {
achievementSeriesItem.version = achievementVersion;
}
}
await console.log("解析 Paimon.moe 成就数据成功!");
// 输出数据
await console.log("正在输出目标数据...");
// 输出成就系列数据
await console.log("正在输出成就系列数据...");
await fs.writeFile(
`${appDataDir}\\achievement.json`,
JSON.stringify(achievementSeries)
);
await console.log("输出成就系列数据成功!");
// 输出成就数据
await console.log("正在输出成就数据...");
await fs.writeFile(`${appDataDir}\\achievements.json`, JSON.stringify(achievement));
await console.log("输出成就数据成功!");
},
},
});
</script>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,9 @@
import Achievement from "./data/Achievement.json";
import { AchievementJson } from "./interface/achievement";
export const PaimonMoeData = {
Achievement: {
name: "Achievement.json",
data: Achievement as unknown as AchievementJson,
},
};

View File

@@ -0,0 +1,49 @@
/**
* @file plugins Paimon.moe Interface Achievement
* @description plugins Paimon.moe Interface Achievement
* @author BTMuli<bt-muli@outlook.com>
* @see https://github.com/MadeBaruna/paimon-moe/blob/main/src/data/achievement/zh.json
* @version v3.5
*/
/**
* @description Paimon.moe Achievement json data interface
* @interface AchievementJson
* @example [key: string]: { AchievementSeries }
* @return {AchievementJson}
*/
export interface AchievementJson {
[key: string]: AchievementSeries;
}
/**
* @description Paimon.moe Achievement series
* @interface AchievementSeries
* @property {string} name - Achievement series name
* @property {(Achievement|Achievement[])[]} achievements - Achievement list
* @property {number} order - Achievement series order
* @return {AchievementSeries}
*/
export interface AchievementSeries {
name: string;
achievements: (Achievement | Achievement[])[];
order: number;
}
/**
* @description Paimon.moe Achievement
* @interface Achievement
* @property {number} id - Achievement id
* @property {string} name - Achievement name
* @property {string} desc - Achievement description
* @property {number} reward - Achievement reward
* @property {string} ver - Achievement version
* @return {Achievement}
*/
interface Achievement {
id: number;
name: string;
desc: string;
reward: number;
ver: string;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,384 @@
[
{
"Id": 0,
"Order": 1,
"Name": "天地万象",
"Icon": "UI_AchievementIcon_O001"
},
{
"Id": 17,
"Order": 2,
"Name": "心跳的记忆",
"Icon": "UI_AchievementIcon_E001"
},
{
"Id": 1,
"Order": 3,
"Name": "尘世巡游·第一辑",
"FinishReward": {
"Id": 210021,
"Count": 1
},
"Icon": "UI_AchievementIcon_A001"
},
{
"Id": 22,
"Order": 4,
"Name": "尘世巡游·第二辑",
"FinishReward": {
"Id": 210087,
"Count": 1
},
"Icon": "UI_AchievementIcon_A001_Part2"
},
{
"Id": 32,
"Order": 5,
"Name": "尘世巡游·第三辑",
"FinishReward": {
"Id": 210128,
"Count": 1
},
"Icon": "UI_AchievementIcon_A001_Part3"
},
{
"Id": 2,
"Order": 6,
"Name": "冒险手艺",
"FinishReward": {
"Id": 210022,
"Count": 1
},
"Icon": "UI_AchievementIcon_A002"
},
{
"Id": 3,
"Order": 7,
"Name": "英雄之旅",
"FinishReward": {
"Id": 210023,
"Count": 1
},
"Icon": "UI_AchievementIcon_A003"
},
{
"Id": 4,
"Order": 8,
"Name": "蒙德·风与牧歌的城邦",
"FinishReward": {
"Id": 210024,
"Count": 1
},
"Icon": "UI_AchievementIcon_A004"
},
{
"Id": 5,
"Order": 9,
"Name": "璃月·岩与契约的海港",
"FinishReward": {
"Id": 210025,
"Count": 1
},
"Icon": "UI_AchievementIcon_A005"
},
{
"Id": 6,
"Order": 10,
"Name": "元素专家·第一辑",
"FinishReward": {
"Id": 210026,
"Count": 1
},
"Icon": "UI_AchievementIcon_B001"
},
{
"Id": 36,
"Order": 11,
"Name": "元素专家·第二辑",
"FinishReward": {
"Id": 210137,
"Count": 1
},
"Icon": "UI_AchievementIcon_B001_Part2"
},
{
"Id": 7,
"Order": 12,
"Name": "神射手",
"FinishReward": {
"Id": 210027,
"Count": 1
},
"Icon": "UI_AchievementIcon_B002"
},
{
"Id": 8,
"Order": 13,
"Name": "挑战者·第一辑",
"FinishReward": {
"Id": 210028,
"Count": 1
},
"Icon": "UI_AchievementIcon_B004"
},
{
"Id": 14,
"Order": 14,
"Name": "挑战者·第二辑",
"FinishReward": {
"Id": 210041,
"Count": 1
},
"Icon": "UI_AchievementIcon_B004_Part2"
},
{
"Id": 15,
"Order": 15,
"Name": "挑战者·第三辑",
"FinishReward": {
"Id": 210051,
"Count": 1
},
"Icon": "UI_AchievementIcon_B004_Part3"
},
{
"Id": 20,
"Order": 16,
"Name": "挑战者·第四辑",
"FinishReward": {
"Id": 210088,
"Count": 1
},
"Icon": "UI_AchievementIcon_B004_Part4"
},
{
"Id": 29,
"Order": 17,
"Name": "挑战者·第五辑",
"FinishReward": {
"Id": 210116,
"Count": 1
},
"Icon": "UI_AchievementIcon_B004_Part5"
},
{
"Id": 34,
"Order": 18,
"Name": "挑战者·第六辑",
"FinishReward": {
"Id": 210139,
"Count": 1
},
"Icon": "UI_AchievementIcon_B004_Part6"
},
{
"Id": 9,
"Order": 20,
"Name": "秘境与深境螺旋·第一辑",
"FinishReward": {
"Id": 210029,
"Count": 1
},
"Icon": "UI_AchievementIcon_B005"
},
{
"Id": 10,
"Order": 21,
"Name": "Olah第一辑",
"FinishReward": {
"Id": 210030,
"Count": 1
},
"Icon": "UI_AchievementIcon_C001"
},
{
"Id": 11,
"Order": 22,
"Name": "至冬国不相信眼泪·第一辑",
"FinishReward": {
"Id": 210031,
"Count": 1
},
"Icon": "UI_AchievementIcon_C002"
},
{
"Id": 12,
"Order": 23,
"Name": "岩港往事·第一辑",
"FinishReward": {
"Id": 210032,
"Count": 1
},
"Icon": "UI_AchievementIcon_C003"
},
{
"Id": 13,
"Order": 24,
"Name": "异世相逢·第一辑",
"FinishReward": {
"Id": 210033,
"Count": 1
},
"Icon": "UI_AchievementIcon_D001"
},
{
"Id": 21,
"Order": 25,
"Name": "异世相逢·第二辑",
"FinishReward": {
"Id": 210086,
"Count": 1
},
"Icon": "UI_AchievementIcon_D001_Part2"
},
{
"Id": 33,
"Order": 26,
"Name": "异世相逢·第三辑",
"FinishReward": {
"Id": 210129,
"Count": 1
},
"Icon": "UI_AchievementIcon_D001_Part3"
},
{
"Id": 16,
"Order": 27,
"Name": "雪山上的来客",
"FinishReward": {
"Id": 210052,
"Count": 1
},
"Icon": "UI_AchievementIcon_A006"
},
{
"Id": 18,
"Order": 28,
"Name": "世外洞天·第一辑",
"FinishReward": {
"Id": 210072,
"Count": 1
},
"Icon": "UI_AchievementIcon_A007"
},
{
"Id": 19,
"Order": 29,
"Name": "世外洞天·第二辑",
"FinishReward": {
"Id": 210075,
"Count": 1
},
"Icon": "UI_AchievementIcon_A007_Part2"
},
{
"Id": 23,
"Order": 30,
"Name": "世外洞天·第三辑",
"FinishReward": {
"Id": 210089,
"Count": 1
},
"Icon": "UI_AchievementIcon_A007_Part3"
},
{
"Id": 24,
"Order": 31,
"Name": "稻妻·雷与永恒的群岛·其之一",
"FinishReward": {
"Id": 210090,
"Count": 1
},
"Icon": "UI_AchievementIcon_A008"
},
{
"Id": 26,
"Order": 32,
"Name": "稻妻·雷与永恒的群岛·其之二",
"FinishReward": {
"Id": 210097,
"Count": 1
},
"Icon": "UI_AchievementIcon_A008_Part2"
},
{
"Id": 27,
"Order": 33,
"Name": "雾海纪行",
"FinishReward": {
"Id": 210103,
"Count": 1
},
"Icon": "UI_AchievementIcon_A008_Part3"
},
{
"Id": 25,
"Order": 34,
"Name": "提瓦特钓鱼指南·第一辑",
"FinishReward": {
"Id": 210098,
"Count": 1
},
"Icon": "UI_AchievementIcon_A009"
},
{
"Id": 28,
"Order": 35,
"Name": "白昼之光",
"FinishReward": {
"Id": 210109,
"Count": 1
},
"Icon": "UI_AchievementIcon_A010"
},
{
"Id": 30,
"Order": 36,
"Name": "岩窟流明",
"FinishReward": {
"Id": 210117,
"Count": 1
},
"Icon": "UI_AchievementIcon_A011"
},
{
"Id": 31,
"Order": 37,
"Name": "须弥·玄识深藏的雨林",
"FinishReward": {
"Id": 210130,
"Count": 1
},
"Icon": "UI_AchievementIcon_A012"
},
{
"Id": 35,
"Order": 38,
"Name": "须弥·饰金砂原·其之一",
"FinishReward": {
"Id": 210138,
"Count": 1
},
"Icon": "UI_AchievementIcon_A013"
},
{
"Id": 38,
"Order": 39,
"Name": "须弥·饰金砂原·其之二",
"FinishReward": {
"Id": 210151,
"Count": 1
},
"Icon": "UI_AchievementIcon_A013_Part2"
},
{
"Id": 37,
"Order": 40,
"Name": "七圣召唤",
"FinishReward": {
"Id": 210145,
"Count": 1
},
"Icon": "UI_AchievementIcon_A014"
}
]

View File

@@ -0,0 +1,17 @@
import {
Achievement as TypeAchievement,
AchievementGoal as TypeAchievementGoal,
} from "./interface/achievement";
import Achievement from "./data/Achievement.json";
import AchievementGoal from "./data/AchievementGoal.json";
export const SnapHutaoData = {
Achievement: {
name: "Achievement.json",
data: Achievement as unknown as TypeAchievement[],
},
AchievementGoal: {
name: "AchievementGoal.json",
data: AchievementGoal as unknown as TypeAchievementGoal[],
},
};

View File

@@ -0,0 +1,61 @@
/**
* @file plugins Snap.Hutao Interface Achievement
* @description plugins Snap.Hutao Interface Achievement
* @author BTMuli<bt-muli@outlook.com>
* @see https://github.com/DGP-Studio/Snap.Metadata/blob/main/Output/CHS/Achievement.json
* @version v3.5
*/
/**
* @description Snap.Hutao Achievement data interface
* @interface Achievement
* @property {number} Id - 成就ID
* @property {number} Goal - 成就系列对应顺序
* @property {number} Order - 成就对应顺序
* @property {string} Title - 成就标题
* @property {string} Description - 成就描述
* @property FinishReward - 成就完成奖励
* @property {number} FinishReward.ID - 物品ID201为原石
* @property {number} FinishReward.Count - 物品数量
* @property {number} Progress - 成就进度
* @property {string|undefined} Icon - 成就图标
* @return Achievement
*/
export interface Achievement {
Id: number;
Goal: number;
Order: number;
Title: string;
Description: string;
FinishReward: {
ID: number;
Count: number;
};
Progress: number;
Icon?: string;
}
/**
* @description Snap.Hutao AchievementGoal data interface
* @see https://github.com/DGP-Studio/Snap.Metadata/blob/main/Output/CHS/AchievementGoal.json
* @interface AchievementGoal
* @property {number} Id - 成就系列ID
* @property {number} Order - 成就系列对应顺序
* @property {string} Name - 成就系列名称
* @property FinishReward - 成就系列完成奖励
* @description 某些成就系列没有完成奖励这边的FinishReward可能为undefined
* @property {number} FinishReward.ID - 物品ID这边指的应该是成就名片ID
* @property {number} FinishReward.Count - 物品数量
* @property {string} Icon - 成就系列图标
* @return AchievementGoal
*/
export interface AchievementGoal {
Id: number;
Order: number;
Name: string;
FinishReward?: {
ID: number;
Count: number;
};
Icon: string;
}