2023-10-18 13:19:12 +00:00
|
|
|
import { Data } from '#miao'
|
|
|
|
import lodash from 'lodash'
|
|
|
|
import fs from 'node:fs'
|
|
|
|
|
|
|
|
let Trans = {
|
|
|
|
init () {
|
2023-10-18 17:01:11 +00:00
|
|
|
Data.createDir('temp/UserDataBAK')
|
2023-10-18 13:19:12 +00:00
|
|
|
let uids = fs.readdirSync('./data/UserData')
|
|
|
|
uids = uids.filter((uid) => /\.(json)/i.test(uid))
|
|
|
|
let success = 0
|
|
|
|
let count = 0
|
|
|
|
if (uids.length === 0) {
|
|
|
|
return
|
|
|
|
}
|
2023-10-19 20:18:30 +00:00
|
|
|
console.log('miao-plugin: 准备将面板数据迁移至data/PlayerData/gs...')
|
2023-10-18 13:19:12 +00:00
|
|
|
lodash.forEach(uids, (uid) => {
|
|
|
|
uid = uid.replace('.json', '')
|
|
|
|
let ret = Trans.trans(uid)
|
|
|
|
count++
|
|
|
|
if (ret) {
|
|
|
|
success++
|
|
|
|
}
|
|
|
|
|
|
|
|
if (count % 100 === 0) {
|
|
|
|
console.log(`迁移成功: ${success}...`)
|
|
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
|
|
let src = `./data/UserData/${uid}.json`
|
2023-10-18 17:01:11 +00:00
|
|
|
let dst = `./temp/UserDataBAK/${uid}.json`
|
2023-10-18 13:19:12 +00:00
|
|
|
fs.existsSync(dst) && fs.unlinkSync(dst)
|
|
|
|
fs.copyFileSync(src, dst)
|
|
|
|
fs.unlinkSync(src)
|
|
|
|
} catch (err) {
|
|
|
|
console.log(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
})
|
|
|
|
console.log('Trans UID', success)
|
|
|
|
},
|
|
|
|
trans (uid) {
|
|
|
|
let data = Trans.getData(uid)
|
|
|
|
if (data) {
|
|
|
|
Data.writeJSON(`data/PlayerData/gs/${uid}.json`, data, 'root', 0)
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
},
|
|
|
|
getData (uid) {
|
|
|
|
let ds = Data.readJSON(`data/UserData/${uid}.json`)
|
|
|
|
let dst = Data.readJSON(`data/PlayerData/gs/${uid}.json`)
|
|
|
|
if (!ds.uid || (lodash.isEmpty(ds.avatars) && lodash.isEmpty(ds.chars))) {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
let ret = Data.getData(ds, 'uid,name,level,word,face,card,sign,_profile')
|
|
|
|
ret.game = 'gs'
|
|
|
|
let info = ds.info || dst.info
|
|
|
|
if (info) {
|
|
|
|
if (info?.stats?.fieldExtMap) {
|
|
|
|
delete info.stats.fieldExtMap
|
|
|
|
}
|
|
|
|
ret.info = info
|
|
|
|
}
|
|
|
|
ret.avatars = {
|
|
|
|
...(dst.avatars || {}),
|
|
|
|
...Trans.getAvatars({ ...ds.chars, ...ds.avatars })
|
|
|
|
}
|
|
|
|
return ret
|
|
|
|
},
|
|
|
|
getAvatars (ds) {
|
|
|
|
let ret = {}
|
|
|
|
lodash.forEach(ds || {}, (avatar, id) => {
|
|
|
|
avatar = Trans.getAvatar(avatar)
|
|
|
|
if (avatar) {
|
|
|
|
ret[id] = avatar
|
|
|
|
}
|
|
|
|
})
|
|
|
|
return ret
|
|
|
|
},
|
|
|
|
getAvatar (ds) {
|
|
|
|
if (!ds.id || !ds.name || !ds.level || !ds.weapon || !ds.promote) {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return {
|
|
|
|
...Data.getData(ds, 'id,name,elem,level,promote,fetter,costume,cons,talent,weapon'),
|
|
|
|
...Trans.getArtis(ds.artis),
|
|
|
|
...Data.getData(ds, '_source,_time,_talent')
|
|
|
|
}
|
|
|
|
},
|
|
|
|
getArtis (artis) {
|
|
|
|
let profile = {}
|
|
|
|
let mys = {}
|
|
|
|
lodash.forEach(artis, (ds, idx) => {
|
|
|
|
if (ds.mainId && ds.attrIds) {
|
|
|
|
profile[idx] = {
|
|
|
|
level: ds._level || ds.level || 1,
|
|
|
|
star: ds._star || ds.star || 1,
|
|
|
|
name: ds._name || ds.name || '',
|
|
|
|
mainId: ds.mainId,
|
|
|
|
attrIds: ds.attrIds
|
|
|
|
}
|
|
|
|
}
|
|
|
|
mys[idx] = {
|
|
|
|
level: ds.level || 1,
|
|
|
|
star: ds.star || 1,
|
|
|
|
name: ds.name || '',
|
|
|
|
}
|
|
|
|
})
|
|
|
|
let ret = {}
|
|
|
|
if (lodash.isEmpty(profile)) {
|
|
|
|
if (!lodash.isEmpty(mys)) {
|
|
|
|
ret.mysArtis = mys
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
ret.artis = profile
|
|
|
|
let hasDiff = false
|
|
|
|
let getKey = (d) => {
|
|
|
|
return [d?.name || '', d?.level || '', d?.star || ''].join('|')
|
|
|
|
}
|
|
|
|
for (let idx = 1; idx <= 5; idx++) {
|
|
|
|
if (getKey(profile[idx]) !== getKey(mys[idx])) {
|
|
|
|
hasDiff = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (hasDiff) {
|
|
|
|
ret.mysArtis = mys
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return ret
|
|
|
|
}
|
|
|
|
}
|
|
|
|
export default Trans
|