diff --git a/game-server/app.ts b/game-server/app.ts index 207169a3f..55d8b607a 100644 --- a/game-server/app.ts +++ b/game-server/app.ts @@ -56,8 +56,10 @@ app.set('name', 'chatofpomelo-websocket'); // 加载数据库和redis app.configure(function () { app.loadConfig('database', app.getBase() + '/config/database'); + app.loadConfig('serverName', app.getBase() + '/config/serverName'); console.log('env:', app.get('env')); console.log('db:', app.get('database')); + console.log('serverName:', app.get('serverName')) mongoose.connect(app.get('database').mongo, { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, useFindAndModify: false }, (err) => { if (err) { diff --git a/game-server/app/servers/activity/remote/activityRemote.ts b/game-server/app/servers/activity/remote/activityRemote.ts new file mode 100644 index 000000000..5c422457b --- /dev/null +++ b/game-server/app/servers/activity/remote/activityRemote.ts @@ -0,0 +1,23 @@ +import { Application, ChannelService } from 'pinus'; +import { reloadResources } from '../../../pubUtils/data'; + +export default function (app: Application) { + return new ActivityRemote(app); +} + +export class ActivityRemote { + + constructor(private app: Application) { + this.app = app; + this.channelService = app.get('channelService'); + } + + private channelService: ChannelService; + + /** + * 重载json资源 + */ + public async reloadResources() { + reloadResources(); + } +} \ No newline at end of file diff --git a/game-server/app/servers/battle/remote/battleRemote.ts b/game-server/app/servers/battle/remote/battleRemote.ts index 9dc52ae8a..2f69c6a68 100644 --- a/game-server/app/servers/battle/remote/battleRemote.ts +++ b/game-server/app/servers/battle/remote/battleRemote.ts @@ -1,4 +1,5 @@ import { Application, ChannelService, FrontendSession, RemoterClass } from 'pinus'; +import { reloadResources } from '../../../pubUtils/data'; export default function (app: Application) { return new BattleRemote(app); @@ -69,4 +70,11 @@ export class BattleRemote { channel.leave(uid, sid); } } + + /** + * 重载json资源 + */ + public async reloadResources() { + reloadResources(); + } } \ No newline at end of file diff --git a/game-server/app/servers/chat/remote/chatRemote.ts b/game-server/app/servers/chat/remote/chatRemote.ts index 7bb1d2b93..a81ad951f 100644 --- a/game-server/app/servers/chat/remote/chatRemote.ts +++ b/game-server/app/servers/chat/remote/chatRemote.ts @@ -6,6 +6,7 @@ import { PrivateMessageType } from '../../../db/PrivateMessage'; import { addUserToChannel, getSimpleRoleInfo } from '../../../services/roleService'; import { ChannelUser } from '../../../domain/ChannelUser'; import { getWorldChannelSid, groupRoomId } from '../../../services/chatService'; +import { reloadResources } from '../../../pubUtils/data'; export default function (app: Application) { return new ChatRemote(app); @@ -188,4 +189,11 @@ export class ChatRemote { if (!channel) return; channel.pushMessage(this.RACE_ACTIVITY_START, resResult(STATUS.SUCCESS, { })); } + + /** + * 重载json资源 + */ + public async reloadResources() { + reloadResources(); + } } diff --git a/game-server/app/servers/connector/handler/entryHandler.ts b/game-server/app/servers/connector/handler/entryHandler.ts index 994b263e5..ea217940e 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -226,10 +226,25 @@ export class EntryHandler { // console.error('set rid for session service failed! error is : %j', err.stack); // } // }); - session.on('closed', this.onUserLeave.bind(this)); + session.on('closed', this.onGmUserLeave.bind(this)); // put user into channel - return resResult(STATUS.SUCCESS); + return resResult(STATUS.SUCCESS, { + serverType: this.app.get('serverName') + }); + } + + /** + * User log out handler + * + * @param {Object} app current application + * @param {Object} session current session object + * + */ + async onGmUserLeave(session: FrontendSession, reason: string) { + if (!session || !session.uid) { + return; + } } /** diff --git a/game-server/app/servers/connector/remote/connectorRemote.ts b/game-server/app/servers/connector/remote/connectorRemote.ts index 3b90c3fc2..6f8b1b0a5 100644 --- a/game-server/app/servers/connector/remote/connectorRemote.ts +++ b/game-server/app/servers/connector/remote/connectorRemote.ts @@ -1,6 +1,7 @@ import { Application, ChannelService, FrontendSession, pinus, RemoterClass } from 'pinus'; import { STATUS } from '../../../consts/statusCode'; import { resResult } from '../../../pubUtils/util'; +import { reloadResources } from '../../../pubUtils/data'; export default function (app: Application) { return new ConnectorRemote(app); } @@ -34,4 +35,11 @@ export class ConnectorRemote { this.channelService.pushMessageByUids(route, resResult(STATUS.SUCCESS, {mails:data}), uids); } } + + /** + * 重载json资源 + */ + public async reloadResources() { + reloadResources(); + } } diff --git a/game-server/app/servers/gm/handler/gmHandler.ts b/game-server/app/servers/gm/handler/gmHandler.ts index 021c0bf05..25e718bc5 100644 --- a/game-server/app/servers/gm/handler/gmHandler.ts +++ b/game-server/app/servers/gm/handler/gmHandler.ts @@ -7,6 +7,7 @@ import { STATUS } from '../../../consts/statusCode'; import { GMMailModel } from '../../../db/GMMail'; import { setGmMails } from '../../../pubUtils/gmData/gmDataUtil'; import { getRoleOnlineInfo } from '../../../services/redisService'; +import { dispatch } from '../../../util/dispatcher'; export default function(app: Application) { return new GmHandler(app); } @@ -80,4 +81,45 @@ export class GmHandler { setGmMails([mail]);//更新邮件缓存 this.app.rpc.role.roleRemote.sendGmMailsToRoles.toServer('role-server-1',[mail]);//检查是否是群体邮件,并下发群体邮件,非群体邮件通过Filter刷新下发 } + + async reloadResource(msg: {}, session: BackendSession) { + try { + let activityServers = this.app.getServersByType('activity'); + for(let { id } of activityServers) { + await this.app.rpc.activity.activityRemote.reloadResources.toServer(id); + } + let battleServers = this.app.getServersByType('battle'); + for(let { id } of battleServers) { + await this.app.rpc.battle.battleRemote.reloadResources.toServer(id); + } + let chatServers = this.app.getServersByType('chat'); + for(let { id } of chatServers) { + await this.app.rpc.chat.chatRemote.reloadResources.toServer(id); + } + let connectServers = this.app.getServersByType('connector'); + for(let { id } of connectServers) { + await this.app.rpc.connector.connectorRemote.reloadResources.toServer(id); + } + let guildServers = this.app.getServersByType('guild'); + for(let { id } of guildServers) { + await this.app.rpc.guild.guildRemote.reloadResources.toServer(id); + } + let roleServers = this.app.getServersByType('role'); + for(let { id } of roleServers) { + await this.app.rpc.role.roleRemote.reloadResources.toServer(id); + } + let systimerServers = this.app.getServersByType('systimer'); + for(let { id } of systimerServers) { + await this.app.rpc.systimer.systimerRemote.reloadResources.toServer(id); + } + return resResult(STATUS.SUCCESS, { + isOK: true + }); + } catch(e) { + return resResult(STATUS.SUCCESS, { + isOK: false, + err: e.stack + }); + } + } } \ No newline at end of file diff --git a/game-server/app/servers/guild/remote/guildRemote.ts b/game-server/app/servers/guild/remote/guildRemote.ts new file mode 100644 index 000000000..febde0cde --- /dev/null +++ b/game-server/app/servers/guild/remote/guildRemote.ts @@ -0,0 +1,23 @@ +import { Application, ChannelService } from 'pinus'; +import { reloadResources } from '../../../pubUtils/data'; + +export default function (app: Application) { + return new GuildRemote(app); +} + +export class GuildRemote { + + constructor(private app: Application) { + this.app = app; + this.channelService = app.get('channelService'); + } + + private channelService: ChannelService; + + /** + * 重载json资源 + */ + public async reloadResources() { + reloadResources(); + } +} \ No newline at end of file diff --git a/game-server/app/servers/role/handler/heroHandler.ts b/game-server/app/servers/role/handler/heroHandler.ts index a2b837f53..b8e04abc1 100644 --- a/game-server/app/servers/role/handler/heroHandler.ts +++ b/game-server/app/servers/role/handler/heroHandler.ts @@ -7,15 +7,15 @@ import { HeroModel, Connect } from '../../../db/Hero'; import { CURRENCY_BY_TYPE, CURRENCY_TYPE, CONSUME_TYPE, HERO_GROW_MAX, HERO_SYSTEM_TYPE, ABI_STAGE, DEBUG_MAGIC_WORD, HERO_INITIAL_QUALITY, REDIS_KEY, TASK_TYPE } from '../../../consts'; import { RoleModel } from '../../../db/Role'; import { ItemModel } from '../../../db/Item'; -import { gameData, getHeroExpByLv, getHeroStarByQuality, getHeroWakeByQuality, getHeroLvByExp, getMaxGradeByjobClass, getJobByGradeAndClass, getFriendShipById, getFavourLvByExp } from '../../../pubUtils/data'; +import { gameData, getHeroExpByLv, getHeroStarByQuality, getHeroWakeByQuality, getHeroLvByExp, getMaxGradeByjobClass, getJobByGradeAndClass, getFriendShipById, getFavourLvByExp, reloadDicParam } from '../../../pubUtils/data'; import { RewardInter } from '../../../pubUtils/interface'; import { getDropItems, FIGURE_UNLOCK_CONDITION } from '../../../consts/constModules/itemConst' import { pushComposeOrangeHero, pushHeroQualityUpMsg, pushHeroStarMax, pushHeroWakeUp } from '../../../services/chatService'; import { calculatetopLineup } from '../../../pubUtils/playerCe'; import { PvpDefenseModel } from '../../../db/PvpDefense'; -import { Attribute } from '../../../domain/roleField/attribute'; import { checkTaskWithHero, checkTask } from '../../../services/taskService'; import { accomplishTask } from '../../../pubUtils/taskUtil'; +import { EQUIP } from '../../../pubUtils/dicParam'; export default function (app: Application) { return new HeroHandler(app); @@ -26,39 +26,8 @@ export class HeroHandler { } public async test(msg: {}, session: BackendSession) { - let roles = await RoleModel.find({}).lean(); - for (let role of roles) { - let { roleId, attr: roleAttr, topLineup } = role; - let heros = await HeroModel.findByRole(roleId); - let sumCe = 0; - - let pvpdefense = await PvpDefenseModel.findByRoleId(roleId); - let { heroes: defHeroes } = pvpdefense; - - for (let hero of heros) { - let { hid, attr: heroAttr } = hero; - let attr = new Attribute(); - attr.setByDbData(roleAttr, heroAttr); - let ce = attr.calCe(); - await HeroModel.updateHeroInfo(roleId, hid, { ce, historyCe: ce }); - sumCe += ce; - let curHero = topLineup.find(cur => cur.hid == hid); - if (curHero) curHero.ce = ce; - - let curDefHero = defHeroes.find(cur => cur.actorId == hid); - if (curDefHero) curDefHero.ce = ce; - console.log(roleId, hid, ce, sumCe) - } - let topLineupCe = topLineup.reduce((pre, cur) => { - return pre + cur.ce - }, 0); - let defCe = defHeroes.reduce((pre, cur) => { - return pre + cur.ce - }, 0); - - await RoleModel.updateRoleInfo(roleId, { ce: sumCe, topLineup, topLineupCe }); - await PvpDefenseModel.updateInfo(roleId, { defCe, heroes: defHeroes }); // 更新pvp防守阵战力 - } + let heroes = [...gameData.hero]; + return resResult(STATUS.SUCCESS, {heroes}) } // ! 测试接口,用来测试前清理并初始化某个武将;代码抄自:gm-server/app/service/users.ts deleteHero diff --git a/game-server/app/servers/role/remote/roleRemote.ts b/game-server/app/servers/role/remote/roleRemote.ts index d218b61f8..255b81361 100644 --- a/game-server/app/servers/role/remote/roleRemote.ts +++ b/game-server/app/servers/role/remote/roleRemote.ts @@ -2,6 +2,7 @@ import { Application, ChannelService, FrontendSession, RemoterClass } from 'pinu import { STATUS } from '../../../consts/statusCode'; import { resResult } from '../../../pubUtils/util'; import { sendRolesMails } from '../../../services/mailService'; +import { reloadResources } from '../../../pubUtils/data'; export default function (app: Application) { return new RoleRemote(app); } @@ -18,4 +19,11 @@ export class RoleRemote { sendGmMailsToRoles(mails) { sendRolesMails(mails) } + + /** + * 重载json资源 + */ + public async reloadResources() { + reloadResources(); + } } diff --git a/game-server/app/servers/systimer/remote/systimerRemote.ts b/game-server/app/servers/systimer/remote/systimerRemote.ts index 2ee78ab5b..de7b7010c 100644 --- a/game-server/app/servers/systimer/remote/systimerRemote.ts +++ b/game-server/app/servers/systimer/remote/systimerRemote.ts @@ -2,6 +2,7 @@ import { Application, ChannelService } from 'pinus'; import { resetPvpSeasonTime, setPvpDefResult, guildActivityStart, gateActivityEnd, cityActivityEnd, raceActivityEnd } from '../../../services/timeTaskService'; import PvpDefenseType from '../../../db/PvpDefense'; import { DicGuildActivity } from '../../../pubUtils/dictionary/DicGuildActivity'; +import { reloadResources } from '../../../pubUtils/data'; export default function (app: Application) { return new SystimerRemote(app); } @@ -37,4 +38,11 @@ export class SystimerRemote { public async raceActivityEnd() { return await raceActivityEnd(); } + + /** + * 重载json资源 + */ + public async reloadResources() { + reloadResources(); + } } diff --git a/game-server/app/servers/user.rpc.define.ts b/game-server/app/servers/user.rpc.define.ts index 2edede515..e09f7a478 100644 --- a/game-server/app/servers/user.rpc.define.ts +++ b/game-server/app/servers/user.rpc.define.ts @@ -12,22 +12,28 @@ import { GuildRemote } from './chat/remote/guildRemote'; import { GMRemote } from './gm/remote/gmRemote'; import { RoleRemote } from './role/remote/roleRemote'; import { GuildActivityRemote } from './guild/remote/guildActivityRemote'; +import { GuildRemote as GuildRemote2 } from './guild/remote/guildRemote'; +import { ActivityRemote } from './activity/remote/activityRemote'; declare global { interface UserRpc { - guild: { - guildActivityRemote: RemoterClass; - }, - chat: { - chatRemote: RemoterClass; - guildRemote: RemoterClass; + activity: { + activityRemote: RemoterClass; }; battle: { comBattleRemote: RemoterClass; battleRemote: RemoterClass; }; + chat: { + chatRemote: RemoterClass; + guildRemote: RemoterClass; + }; connector: { connectorRemote: RemoterClass; }; + guild: { + guildRemote: RemoterClass; + guildActivityRemote: RemoterClass; + }, systimer: { systimerRemote: RemoterClass; }, diff --git a/game-server/config/serverName.ts b/game-server/config/serverName.ts new file mode 100644 index 000000000..9ff0189c9 --- /dev/null +++ b/game-server/config/serverName.ts @@ -0,0 +1,26 @@ +module.exports = { + 'development': { + 'type': 'development', + 'name': '本地服' + }, + 'production': { + 'type': 'production', + 'name': '正式服' + }, + 'alpha': { + 'type': 'alpha', + 'name': '测试服' + }, + 'dev': { + 'type': 'dev', + 'name': '开发服' + }, + 'isbn': { + 'type': 'isbn', + 'name': '版号服' + }, + 'monitor': { + 'type': 'monitor', + 'name': '监控服' + } +}; \ No newline at end of file diff --git a/gm-server/app/controller/upload.ts b/gm-server/app/controller/upload.ts index 44ea804d8..78a868bf2 100644 --- a/gm-server/app/controller/upload.ts +++ b/gm-server/app/controller/upload.ts @@ -2,14 +2,19 @@ import { Controller } from 'egg'; import { Stream } from 'stream'; import { STATUS } from '@consts'; const fs = require('fs'); + const path = require('path'); const unzip = require("unzip-stream"); const temp = require('temp'); const compressing = require("compressing"); const moment = require("moment"); +const pump = require('mz-modules/pump'); const folderName = 'hot_update_files'; const hotUpdateAddr = `/root/${folderName}`; const publishPath = '/root/hot_update_backup'; +import {exec} from 'child_process' +import { reloadResources } from '@pubUtils/data'; +const sendToWormhole = require('stream-wormhole'); export default class UploadController extends Controller { @@ -154,46 +159,121 @@ export default class UploadController extends Controller { }) } - private jsonFolderName = 'resource'; - private jsonFolderPath = `/root/zyz/shared/${this.jsonFolderName}`; + private jsonFolder = '/app/resource/jsons'; + private warjsonFolder = '/app/resource/warJsons'; + private tsFolder = '/app/pubUtils'; + + private distJsonFolder = `/../game-server/dist${this.jsonFolder}`; + private distWarjsonFolder = `/../game-server/dist${this.warjsonFolder}`; + private distTsFolder = `/../game-server/dist${this.tsFolder}`; public async uploadJson() { const { ctx } = this; - const stream = await ctx.getFileStream(); - // const filename = stream.filename; - // const target = path.join(url, filename); + + const parts = ctx.multipart({ }); + const files = []; - if(stream.mimeType == 'application/zip') { - try { - let dirPath = await temp.mkdir(this.jsonFolderName); // 临时文件夹 - - console.log('读取文件'); - await this.doUnzipExtra(stream, dirPath); - let files = new Array<{path:string,name:string}>(); - this.getFileList(dirPath, files); - console.log(files); - - console.log('保存文件'); - if (!fs.existsSync(this.jsonFolderPath)) { - fs.mkdirSync(this.jsonFolderPath); + try { + let stream; + while ((stream = await parts()) != null) { + const filename = stream.filename; + let filenameWithoutEx = filename?filename.split('.')[0]:''; + if (stream.mimeType == 'application/json') { + if (filenameWithoutEx.match(/^\d{1,}$/)) { + let target1 = path.join(this.config.baseDir, this.warjsonFolder, filename); + let target2 = path.join(this.config.baseDir, this.distWarjsonFolder, filename); + const writeStream = fs.createWriteStream(target1); + await pump(stream, writeStream); + fs.copyFileSync(target1, target2); + // files.push(filename); + } else { + let target1 = path.join(this.config.baseDir, this.jsonFolder, filename); + let target2 = path.join(this.config.baseDir, this.distJsonFolder, filename); + const writeStream = fs.createWriteStream(target1); + await pump(stream, writeStream); + fs.copyFileSync(target1, target2); + files.push(filename); + } + } else if (stream.mimeType == 'application/octet-stream') { + let target1 = path.join(this.config.baseDir, this.tsFolder, filename); + let target2 = path.join(this.config.baseDir, this.distTsFolder, filename); + const writeStream = fs.createWriteStream(target1); + await pump(stream, writeStream); + fs.copyFileSync(target1, target2); + files.push(filename); } - for (let {path, name} of files) { - console.log(`${this.jsonFolderPath}/${name}`); - fs.renameSync(path, `${this.jsonFolderPath}/${name}`); - } - - temp.cleanupSync(); - return ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, { - "files": JSON.stringify(files) - }); - } catch (err) { - console.log(err) - return ctx.body = ctx.service.utils.resResult(STATUS.INTERNAL_ERR); + sendToWormhole(stream); } - - } else { - return ctx.body = ctx.service.utils.resResult(STATUS.GM_UPLOAD_FORMAT_ERR); + }catch(e) { + console.error(e); } + + return ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, { + "files": files + }); + + // console.log('****', stream); + // // const filename = stream.filename; + // // const target = path.join(url, filename); + + // if(stream.mimeType == 'application/zip') { + // try { + // let dirPath = await temp.mkdir(this.jsonFolderName); // 临时文件夹 + + // console.log('读取文件'); + // await this.doUnzipExtra(stream, dirPath); + // let files = new Array<{path:string,name:string}>(); + // this.getFileList(dirPath, files); + // console.log(files); + + // console.log('保存文件'); + // if (!fs.existsSync(this.jsonFolderPath)) { + // fs.mkdirSync(this.jsonFolderPath); + // } + // for (let {path, name} of files) { + // console.log(`${this.jsonFolderPath}/${name}`); + // fs.renameSync(path, `${this.jsonFolderPath}/${name}`); + // } + + // temp.cleanupSync(); + // return ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, { + // "files": JSON.stringify(files) + // }); + // } catch (err) { + // console.log(err) + // return ctx.body = ctx.service.utils.resResult(STATUS.INTERNAL_ERR); + // } + + // } else { + // return ctx.body = ctx.service.utils.resResult(STATUS.GM_UPLOAD_FORMAT_ERR); + // } } + public async reloadResource() { + const { ctx } = this; + + try { + + reloadResources(); + ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, { isOK: true }); + return; + } catch(e) { + ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, { isOK: false, err: e.stack }); + return; + } } +} + +export function childExec(commond: string) { + return new Promise((resolve, reject) => { + exec(commond, function(error, stdout, stderr){ + if(error) { + reject(error); + return; + } + console.log('stdout: ' + stdout); + console.log('stderr: ' + typeof stderr); + resolve(stdout); + }); + }) +} \ No newline at end of file diff --git a/gm-server/app/router.ts b/gm-server/app/router.ts index 98f30685b..0cd05a53c 100644 --- a/gm-server/app/router.ts +++ b/gm-server/app/router.ts @@ -11,6 +11,7 @@ export default (app: Application) => { router.get('/api/currentUser', tokenParser, controller.login.currentUser); router.post('/api/upload/hotupdate', tokenParser, controller.upload.upload); router.post('/api/upload/uploadjson', tokenParser, controller.upload.uploadJson); + router.post('/api/upload/reloadresource', tokenParser, controller.upload.reloadResource); router.post('/api/gmaccount/getgmlist', tokenParser, controller.gmaccount.getGmList); router.post('/api/gmaccount/createaccount',tokenParser, controller.gmaccount.createGmAccount); diff --git a/gm-server/config/config.local.ts b/gm-server/config/config.local.ts index 2498b3ff0..00b1d5bf9 100644 --- a/gm-server/config/config.local.ts +++ b/gm-server/config/config.local.ts @@ -37,7 +37,11 @@ export default (appInfo: EggAppInfo) => { config.multipart = { fileSize: '100mb', mode: 'stream', - fileExtensions: ['.zip', '.tar.gz'], // 扩展几种上传的文件格式 + whitelist: [ + '.json', '.ts', '.zip' + ], + fileExtensions: ['.json', '.ts', '.zip', '.tar.gz'], // 扩展几种上传的文件格式 + autoFields: true }; config.alinode = { diff --git a/gm-server/package-lock.json b/gm-server/package-lock.json index b0b2c6536..24f739678 100644 --- a/gm-server/package-lock.json +++ b/gm-server/package-lock.json @@ -2698,6 +2698,11 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "child_process": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/child_process/-/child_process-1.0.2.tgz", + "integrity": "sha1-sffn/HPSXn/R1FWtyU4UODAYK1o=" + }, "chokidar": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", diff --git a/gm-server/package.json b/gm-server/package.json index 6e788948f..95d39859c 100644 --- a/gm-server/package.json +++ b/gm-server/package.json @@ -26,6 +26,7 @@ "dependencies": { "await-stream-ready": "^1.0.1", "bcrypt": "^5.0.0", + "child_process": "^1.0.2", "compressing": "^1.5.1", "csprng": "^0.1.2", "egg": "^2.6.1", @@ -35,6 +36,7 @@ "moment": "^2.29.0", "pump": "^3.0.0", "reflect-metadata": "^0.1.13", + "stream-wormhole": "^1.1.0", "temp": "^0.9.1", "underscore": "^1.12.0", "unzip-stream": "^0.3.0" diff --git a/shared/db/DailyRecord.ts b/shared/db/DailyRecord.ts index 2022ab479..49d338e92 100644 --- a/shared/db/DailyRecord.ts +++ b/shared/db/DailyRecord.ts @@ -1,6 +1,5 @@ import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; -import { DAILY_CONST } from './../consts'; import { getZeroPoint } from '../pubUtils/timeUtil'; diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index 42fd32fad..cc2b85357 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -1,85 +1,86 @@ -import { dicHero, dicMyHeroes } from "./dictionary/DicHero"; -import { dicGoods, blueprt, dicJewel, figureCondition } from "./dictionary/DicGoods"; -import { dicBlueprtCompose } from "./dictionary/DicBlueprtCompose"; -import { dicBlueprtPossibility } from "./dictionary/DicBlueprtPossibility"; -import { dicDaily } from "./dictionary/DicDaily"; -import { dicEvent, dicEventList } from "./dictionary/DicEvent"; -import { dicExpedition, DicExpedition } from "./dictionary/DicExpedition"; -import { dicExpeditionPoint } from "./dictionary/DicExpeditionPoint"; -import { dicFuncSwitch } from "./dictionary/DicFuncSwitch"; -import { dicHeroSkill } from "./dictionary/DicHeroSkill"; -import { dicJob, jobClassAndgrades, jobClassMaxGrades } from "./dictionary/DicJob"; -import { dicKingExp, maxPlayerLv } from "./dictionary/DicKingExp"; -import { dicCharExp } from "./dictionary/DicCharExp"; -import { dicQuestion } from "./dictionary/DicQuestion"; -import { dicSe } from "./dictionary/DicSe"; -import { dicTower } from "./dictionary/DicTower"; -import { dicTowerTask } from "./dictionary/DicTowerTask"; -import { dicWar, dicWarPvp, dicDailyWarByType } from "./dictionary/DicWar"; -import { dicWarJson } from "./dictionary/DicWarJson"; -import { dicXunbao } from "./dictionary/DicXunbao"; +import { dicHero, dicMyHeroes, loadHero } from "./dictionary/DicHero"; +import { dicGoods, blueprt, dicJewel, figureCondition, loadGoods } from "./dictionary/DicGoods"; +import { dicBlueprtCompose, loadBlueprtCompose } from "./dictionary/DicBlueprtCompose"; +import { dicBlueprtPossibility, loadBlueprtPossibility } from "./dictionary/DicBlueprtPossibility"; +import { dicDaily, loadDaily } from "./dictionary/DicDaily"; +import { dicEvent, dicEventList, loadEvent } from "./dictionary/DicEvent"; +import { dicExpedition, DicExpedition, loadExpedition } from "./dictionary/DicExpedition"; +import { dicExpeditionPoint, loadExpeditionPoint } from "./dictionary/DicExpeditionPoint"; +import { dicFuncSwitch, loadFuncSwitch } from "./dictionary/DicFuncSwitch"; +import { dicHeroSkill, loadHeroSkill } from "./dictionary/DicHeroSkill"; +import { dicJob, jobClassAndgrades, jobClassMaxGrades, loadJob } from "./dictionary/DicJob"; +import { dicKingExp, maxPlayerLv, loadKingExp } from "./dictionary/DicKingExp"; +import { dicCharExp, loadCharExp } from "./dictionary/DicCharExp"; +import { dicQuestion, loadQuestion } from "./dictionary/DicQuestion"; +import { dicSe, loadSe } from "./dictionary/DicSe"; +import { dicTower, loadTower } from "./dictionary/DicTower"; +import { dicTowerTask, loadTowerTask } from "./dictionary/DicTowerTask"; +import { dicWar, dicWarPvp, dicDailyWarByType, loadWar } from "./dictionary/DicWar"; +import { dicWarJson, loadWarJson } from "./dictionary/DicWarJson"; +import { dicXunbao, loadXunbao } from "./dictionary/DicXunbao"; import { SPECIAL_ATTR, COM_BTL_LV_RANGE } from "../consts"; -import { dicFashions } from "./dictionary/DicFashions"; -import { friendShips, friendShipHidAandIds } from "./dictionary/DicFriendShip"; -import { maxFriendShipLv, dicFriendShipLevelMap } from "./dictionary/DicFriendShipLevel"; -import { dicHeroQualityUp } from "./dictionary/DicHeroQualityUp"; -import { dicHeroStar } from "./dictionary/DicHeroStar"; -import { dicHeroWake } from "./dictionary/DicHeroWake"; -import { dicRandomEffectPool } from './dictionary/DicRandomEffectPool'; -import { dicStrengthenCost } from './dictionary/DicStrengthenCost'; -import { dicRefine } from './dictionary/DicRefine'; -import { dicHeroEquip } from './dictionary/DicHeroEquip'; -import { dicSuit } from './dictionary/DicSuit'; -import { dicTitle } from './dictionary/DicTitle'; -import { dicTeraph } from './dictionary/DicTeraph'; -import { dicSchool } from './dictionary/DicSchool'; -import { dicSchoolRate } from './dictionary/DicSchoolRate'; -import { dicHeroScroll, preHeroScroll } from './dictionary/DicHeroScroll'; -import { dicPvpOpponent } from './dictionary/DicPvpOpponent'; -import { dicPvpTeamLevel } from './dictionary/DicPvpTeamLevel'; -import { dicPvpRefreshConsume, maxPvpRefreshCnt } from './dictionary/DicPvpRefreshConsume'; -import { dicGkPvp, dicGkPvps } from './dictionary/DicGkPvp'; -import { dicHeroRewads } from './dictionary/DicPvpHeroReward'; -import { dicRankRewads, dicRankMax } from './dictionary/DicPvpRankReward'; -import { dicPvpBoxs } from './dictionary/DicPvpBox'; -import { dicGuildAuth } from './dictionary/DicGuildAuth'; -import { dicCenterBase, dicEquipPriduceBase, dicBossBase, dicTrainBase, dicDonateBase, dicWishPoolBase, dicStoreBase, dicStructureConsume, dicBossBaseByBossLv } from "./dictionary/DicStructure"; -import { dicGuildActiveDayReward } from './dictionary/DicGuildActiveDayReward'; -import { dicGuildActiveWeekReward } from './dictionary/DicGuildActiveWeekReward'; -import { dicGuildActiveWays } from './dictionary/DicGuildActiveWays'; -import { dicGuildPosition } from "./dictionary/DicGuildPosition"; -import { dicMail } from "./dictionary/DicMail"; -import { dicArmyTrainJuDian } from './dictionary/DicArmyTrainJuDian'; -import { dicTrainSoloReward } from './dictionary/DicTrainSoloReward'; +import { dicFashions, loadFashions } from "./dictionary/DicFashions"; +import { friendShips, friendShipHidAandIds, loadFriendShip } from "./dictionary/DicFriendShip"; +import { maxFriendShipLv, dicFriendShipLevelMap, loadFriendShipLevel } from "./dictionary/DicFriendShipLevel"; +import { dicHeroQualityUp, loadHeroQualityUp } from "./dictionary/DicHeroQualityUp"; +import { dicHeroStar, loadHeroStar } from "./dictionary/DicHeroStar"; +import { dicHeroWake, loadHeroWake } from "./dictionary/DicHeroWake"; +import { dicRandomEffectPool, loadRandomEffectPool } from './dictionary/DicRandomEffectPool'; +import { dicStrengthenCost, loadStrengthenCost } from './dictionary/DicStrengthenCost'; +import { dicRefine, loadRefine } from './dictionary/DicRefine'; +import { dicHeroEquip, loadHeroEquip } from './dictionary/DicHeroEquip'; +import { dicSuit, loadSuit } from './dictionary/DicSuit'; +import { dicTitle, loadTitle } from './dictionary/DicTitle'; +import { dicTeraph, loadTeraph } from './dictionary/DicTeraph'; +import { dicSchool, loadSchool } from './dictionary/DicSchool'; +import { dicSchoolRate, loadSchoolRate } from './dictionary/DicSchoolRate'; +import { dicHeroScroll, preHeroScroll, loadHeroScroll } from './dictionary/DicHeroScroll'; +import { dicPvpOpponent, loadPvpOpponent } from './dictionary/DicPvpOpponent'; +import { dicPvpTeamLevel, loadPvpTeamLevel } from './dictionary/DicPvpTeamLevel'; +import { dicPvpRefreshConsume, maxPvpRefreshCnt, loadPvpRefreshConsume } from './dictionary/DicPvpRefreshConsume'; +import { dicGkPvp, dicGkPvps, loadGkPvp } from './dictionary/DicGkPvp'; +import { dicHeroRewads, loadPvpHeroReward } from './dictionary/DicPvpHeroReward'; +import { dicRankRewads, dicRankMax, loadPvpRankReward } from './dictionary/DicPvpRankReward'; +import { dicPvpBoxs, loadPvpBox } from './dictionary/DicPvpBox'; +import { dicGuildAuth, loadGuildAuth } from './dictionary/DicGuildAuth'; +import { dicCenterBase, dicEquipPriduceBase, dicBossBase, dicTrainBase, dicDonateBase, dicWishPoolBase, dicStoreBase, dicStructureConsume, dicBossBaseByBossLv, loadStructure } from "./dictionary/DicStructure"; +import { dicGuildActiveDayReward, loadGuildActiveDayReward } from './dictionary/DicGuildActiveDayReward'; +import { dicGuildActiveWeekReward, loadGuildActiveWeekReward } from './dictionary/DicGuildActiveWeekReward'; +import { dicGuildActiveWays, loadGuildActiveWays } from './dictionary/DicGuildActiveWays'; +import { dicGuildPosition, loadGuildPosition } from "./dictionary/DicGuildPosition"; +import { dicMail, loadMail } from "./dictionary/DicMail"; +import { dicArmyTrainJuDian, loadArmyTrainJuDian } from './dictionary/DicArmyTrainJuDian'; +import { dicTrainSoloReward, loadTrainSoloReward } from './dictionary/DicTrainSoloReward'; import { RewardInter } from "./interface"; -import { dicArmyDevelopConsume } from '../pubUtils/dictionary/DicArmyDevelopConsume'; -import { dicArmyBossRank } from '../pubUtils/dictionary/DicArmyBossRank'; -import { dicArmyDonate } from '../pubUtils/dictionary/DicArmyDonateBoxReward'; -import { dicRoleFriend, DicRoleFriend } from "./dictionary/DicRoleFriend"; -import { dicRoleFriendLv } from "./dictionary/DicRoleFriendLv"; +import { dicArmyDevelopConsume, loadArmyDevelopConsume } from './dictionary/DicArmyDevelopConsume'; +import { dicArmyBossRank, loadArmyBossRank } from './dictionary/DicArmyBossRank'; +import { dicArmyDonate, loadArmyDonate } from './dictionary/DicArmyDonateBoxReward'; +import { dicRoleFriend, DicRoleFriend, loadRoleFriend } from "./dictionary/DicRoleFriend"; +import { dicRoleFriendLv, loadRoleFriendLv } from "./dictionary/DicRoleFriendLv"; import { Attribute } from "../domain/roleField/attribute"; -import { dicGuildActivity, DicGuildActivity } from './dictionary/DicGuildActivity'; -import { dicGateActivityPoint } from './dictionary/DicGateActivityPoint'; -import { dicGuildAuction } from './dictionary/DicGuildAuction'; +import { dicGuildActivity, DicGuildActivity, loadGuildActivity } from './dictionary/DicGuildActivity'; +import { dicGateActivityPoint, loadGateActivityPoint } from './dictionary/DicGateActivityPoint'; +import { dicGuildAuction, loadGuildAuction } from './dictionary/DicGuildAuction'; import { getCurDay } from "./timeUtil"; -import { dicCityActivity } from "./dictionary/DicCityActivity"; -import { dicChatAccuse } from "./dictionary/DicChatAccuse"; -import { dicCityActivityReward } from "./dictionary/DicCityActivityReward"; -import { dicRaceActivity, dicRaceTypes } from './dictionary/DicRaceActivity'; +import { dicCityActivity, loadCityActivity } from "./dictionary/DicCityActivity"; +import { dicChatAccuse, loadChatAccuse } from "./dictionary/DicChatAccuse"; +import { dicCityActivityReward, loadCityActivityReward } from "./dictionary/DicCityActivityReward"; +import { dicRaceActivity, dicRaceTypes, loadRaceActivity } from './dictionary/DicRaceActivity'; import { GUILDACTIVITY, RECRUIT } from "./dicParam"; -import { decodeIdCntArrayStr, parseGoodStr, decodeArrayListStr, getRandValueByMinMax, getRandEelm } from "./util"; +import * as param from "./dicParam"; +import { decodeIdCntArrayStr, parseGoodStr, decodeArrayListStr, getRandValueByMinMax, getRandEelm, readTsFile } from "./util"; import { RACE_EVENT_TYPE } from "../consts"; -import { dicShop, dicShopItem } from "./dictionary/DicShop"; -import { dicShopList } from "./dictionary/DicShopList"; -import { dicRank } from "./dictionary/DicRank"; -import { dicRankReward } from "./dictionary/DicRankReward"; -import { dicTaskType, taskMap, dicMainTask, dicDailyTask, dicAchievement } from "./dictionary/DicTask"; -import { dicMainTaskStage } from "./dictionary/DicMainTaskStage"; -import { dicTaskBox } from './dictionary/DicTaskBox'; -import { dicGacha } from "./dictionary/DicGacha"; -import { dicGachaContent, dicGachaContentHero } from "./dictionary/DicGachaContent"; -import { dicGiftPackage } from "./dictionary/DicGiftPackage"; -import { dicRecruit } from './dictionary/DicRecruit'; +import { dicShop, dicShopItem, loadShop } from "./dictionary/DicShop"; +import { dicShopList, loadShopList } from "./dictionary/DicShopList"; +import { dicRank, loadRank } from "./dictionary/DicRank"; +import { dicRankReward, loadRankReward } from "./dictionary/DicRankReward"; +import { dicTaskType, taskMap, dicMainTask, dicDailyTask, dicAchievement, loadTask } from "./dictionary/DicTask"; +import { dicMainTaskStage, loadMainTaskStage } from "./dictionary/DicMainTaskStage"; +import { dicTaskBox, loadTaskBox } from './dictionary/DicTaskBox'; +import { dicGacha, loadGacha } from "./dictionary/DicGacha"; +import { dicGachaContent, dicGachaContentHero, loadGachaContent } from "./dictionary/DicGachaContent"; +import { dicGiftPackage, loadGiftPackage } from "./dictionary/DicGiftPackage"; +import { dicRecruit, loadRecruit } from './dictionary/DicRecruit'; export const gameData = { blurprtCompose: dicBlueprtCompose, @@ -173,9 +174,9 @@ export const gameData = { cityActivityReward: dicCityActivityReward, raceActivityEvents: dicRaceActivity, raceTypes: dicRaceTypes, - raceActivityEncounter: decodeRaceActivityEncounter(), - raceNormalItems: decodeRaceNormalItems(), - raceEventItems: decodeRaceEventItems(), + raceActivityEncounter: { events: new Map(), eventNum: 0 }, + raceNormalItems: new Array<{id: number, min: number, max: number}>(), + raceEventItems: new Array<{id: number, count: number}>(), shop: dicShop, shopItem: dicShopItem, shopList: dicShopList, @@ -192,11 +193,11 @@ export const gameData = { gacha: dicGacha, gachaContent: dicGachaContent, gachaContentHero: dicGachaContentHero, - gachaHope: getGachaHopePercent(), - gachaTurntable: getGachaTurntablePercent(), - heroTransPiece: getHeroTransPiece(), + gachaHope: new Array<{id: number, weight: number}>(), + gachaTurntable: new Array<{quality: number, count: number}>(), + heroTransPiece: new Map(), giftPackage: dicGiftPackage, - comBtlLvRange: parseComBtlLvRange(), + comBtlLvRange: new Map>(), recruit: dicRecruit }; @@ -331,7 +332,7 @@ function parseComBtlLvRange() { } map.set(range.id, lvs); }); - return map + gameData.comBtlLvRange = map } export function comBtlRangeByLv(lv: number) { @@ -588,7 +589,7 @@ function decodeRaceActivityEncounter() { if (value == RACE_EVENT_TYPE.EVENT) eventNum++; newMap.set(parseInt(key), value); } - return { events: newMap, eventNum }; + gameData.raceActivityEncounter = { events: newMap, eventNum }; } function decodeRaceNormalItems() { @@ -603,12 +604,12 @@ function decodeRaceNormalItems() { } result.push({ id: parseInt(id), min: parseInt(min), max: parseInt(max) }); } - return result + gameData.raceNormalItems = result; } function decodeRaceEventItems() { let str = GUILDACTIVITY.RACEACTIVITY_EVENT_ITEMS || ""; - return parseGoodStr(str); + gameData.raceEventItems = parseGoodStr(str); } export function getRaceEventItems() { @@ -639,7 +640,7 @@ export function getRandExpedition(cnt = 1) { // 抽卡心愿单概率 function getGachaHopePercent() { let arr = decodeArrayListStr(RECRUIT.RECRUIT_WISH_LIST); - return arr.map(cur => { + gameData.gachaHope = arr.map(cur => { return { id: parseInt(cur[0]), weight: parseInt(cur[1]) } }); } @@ -647,7 +648,7 @@ function getGachaHopePercent() { // 抽卡转盘概率 function getGachaTurntablePercent() { let arr = decodeArrayListStr(RECRUIT.RECRUIT_BONUS_HERO_QUANTITY); - return arr.map(cur => { + gameData.gachaTurntable = arr.map(cur => { return { quality: parseInt(cur[0]), count: parseInt(cur[1]) } }); } @@ -658,5 +659,137 @@ function getHeroTransPiece() { for (let [id, count] of map) { newMap.set(parseInt(id), count); } - return newMap -} \ No newline at end of file + gameData.heroTransPiece = newMap +} + +// 初始加载 +function initDatas() { + parseDicParam(); + loadDatas(); +} + +// 解析一部分dicParam的数据 +function parseDicParam() { + decodeRaceActivityEncounter(); + decodeRaceNormalItems(); + decodeRaceEventItems(); + getGachaHopePercent(); + getGachaTurntablePercent(); + getHeroTransPiece(); + parseComBtlLvRange(); +} + +// 加载json +function loadDatas() { + loadHero(); + loadGoods(); + loadBlueprtCompose(); + loadBlueprtPossibility(); + loadDaily(); + loadEvent(); + loadExpedition(); + loadExpeditionPoint(); + loadFuncSwitch(); + loadHeroSkill(); + loadJob(); + loadKingExp(); + loadCharExp(); + loadQuestion(); + loadSe(); + loadTower(); + loadTowerTask(); + loadWar(); + loadWarJson(); + loadXunbao(); + loadFashions(); + loadFriendShip(); + loadFriendShipLevel(); + loadHeroQualityUp(); + loadHeroStar(); + loadHeroWake(); + loadRandomEffectPool(); + loadStrengthenCost(); + loadRefine(); + loadHeroEquip(); + loadSuit(); + loadTitle(); + loadTeraph(); + loadSchool(); + loadSchoolRate(); + loadHeroScroll(); + loadPvpOpponent(); + loadPvpTeamLevel(); + loadPvpRefreshConsume(); + loadGkPvp(); + loadPvpHeroReward(); + loadPvpRankReward(); + loadPvpBox(); + loadGuildAuth(); + loadStructure(); + loadGuildActiveDayReward(); + loadGuildActiveWeekReward(); + loadGuildActiveWays(); + loadGuildPosition(); + loadMail(); + loadArmyTrainJuDian(); + loadTrainSoloReward(); + loadArmyDevelopConsume(); + loadArmyBossRank(); + loadArmyDonate(); + loadRoleFriend(); + loadRoleFriendLv(); + loadGuildActivity(); + loadGateActivityPoint(); + loadGuildAuction(); + loadCityActivity(); + loadChatAccuse(); + loadCityActivityReward(); + loadRaceActivity(); + loadShop(); + loadShopList(); + loadRank(); + loadRankReward(); + loadTask(); + loadMainTaskStage(); + loadTaskBox(); + loadGacha(); + loadGachaContent(); + loadGiftPackage(); + loadRecruit(); +} + +// 重载dicParam +export function reloadDicParam() { + let file = readTsFile('dicParam'); + + let lines = file.split('\n'); + let outer = ''; + lines.forEach(line => { + if(line.replace(/ /g, '')) { + if(line.indexOf('export') != -1) { + outer = line.split(' ')[2]; + // console.log(outer) + } + if(line.indexOf('export') == -1 && line.indexOf('}') == -1) { + let s = line.split(', //')[0].split(':'); + let key = s[0].replace(/ /g, ''); + let value = s[1].replace(/ /g, ''); + let isString = value.match(/(?<=')[^']*/); + if(isString) { + param[outer][key] = isString[0]; + } else { + param[outer][key] = parseFloat(value); + } + } + } + }); + parseDicParam(); +} + +// 后台调用重载资源 +export function reloadResources() { + loadDatas(); + reloadDicParam(); +} + +initDatas(); diff --git a/shared/pubUtils/dictionary/DicArmyBossRank.ts b/shared/pubUtils/dictionary/DicArmyBossRank.ts index e532c8ce3..eaf132f43 100644 --- a/shared/pubUtils/dictionary/DicArmyBossRank.ts +++ b/shared/pubUtils/dictionary/DicArmyBossRank.ts @@ -1,4 +1,4 @@ -import { readJsonFile, parseGoodStr } from '../util' +import { readFileAndParse, parseGoodStr } from '../util' import { FILENAME } from '../../consts' type KeysEnum = { [P in keyof Required]: true }; import { RewardInter } from '../interface'; @@ -18,12 +18,13 @@ const DicArmyBossRankKeys: KeysEnum = { reward: true, }; -const str = readJsonFile(FILENAME.DIC_ARMY_BOSS_RANK_REWARD); -let arr = JSON.parse(str); - export const dicArmyBossRank = new Array(); -arr.forEach(o => { - o.reward = parseGoodStr(o.reward); - dicArmyBossRank.push(_.pick(o, Object.keys(DicArmyBossRankKeys))); -}); -arr = undefined; \ No newline at end of file +export function loadArmyBossRank() { + + let arr = readFileAndParse(FILENAME.DIC_ARMY_BOSS_RANK_REWARD); + arr.forEach(o => { + o.reward = parseGoodStr(o.reward); + dicArmyBossRank.push(_.pick(o, Object.keys(DicArmyBossRankKeys))); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicArmyDevelopConsume.ts b/shared/pubUtils/dictionary/DicArmyDevelopConsume.ts index 03a10ba09..541633462 100644 --- a/shared/pubUtils/dictionary/DicArmyDevelopConsume.ts +++ b/shared/pubUtils/dictionary/DicArmyDevelopConsume.ts @@ -1,4 +1,4 @@ -import { readJsonFile, parseGoodStr } from '../util' +import { readFileAndParse, parseGoodStr } from '../util' import { FILENAME } from '../../consts' type KeysEnum = { [P in keyof Required]: true }; import { RewardInter } from '../interface'; @@ -28,18 +28,20 @@ const DicArmyDevelopConsumeKeys: KeysEnum = { timeConsume: true }; -const str = readJsonFile(FILENAME.DIC_ARMY_DEVELOPMENTCONSUME); -let arr = JSON.parse(str); - export const dicArmyDevelopConsume = new Map(); -arr.forEach(o => { - o.honourConsume = parseGoodStr(o.honourConsume); - o.prePositions = []; - o.preposition.split('&').map(element => { - if (!!parseInt(element)) - o.prePositions.push(parseInt(element)); - }); +export function loadArmyDevelopConsume() { - dicArmyDevelopConsume.set(o.id,_.pick(o, Object.keys(DicArmyDevelopConsumeKeys))); -}); -arr = undefined; \ No newline at end of file + let arr = readFileAndParse(FILENAME.DIC_ARMY_DEVELOPMENTCONSUME); + + arr.forEach(o => { + o.honourConsume = parseGoodStr(o.honourConsume); + o.prePositions = []; + o.preposition.split('&').map(element => { + if (!!parseInt(element)) + o.prePositions.push(parseInt(element)); + }); + + dicArmyDevelopConsume.set(o.id,_.pick(o, Object.keys(DicArmyDevelopConsumeKeys))); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicArmyDonateBoxReward.ts b/shared/pubUtils/dictionary/DicArmyDonateBoxReward.ts index 441897664..6609fe613 100644 --- a/shared/pubUtils/dictionary/DicArmyDonateBoxReward.ts +++ b/shared/pubUtils/dictionary/DicArmyDonateBoxReward.ts @@ -1,4 +1,4 @@ -import { readJsonFile, parseGoodStr } from '../util' +import { readFileAndParse, parseGoodStr } from '../util' import { FILENAME } from '../../consts' type KeysEnum = { [P in keyof Required]: true }; import { RewardInter } from '../interface'; @@ -16,12 +16,13 @@ const DicArmyDonateKeys: KeysEnum = { boxRewards: true }; -const str = readJsonFile(FILENAME.DIC_ARMY_DONATE_BOX_REWARD); -let arr = JSON.parse(str); - export const dicArmyDonate = new Map(); -arr.forEach(o => { - o.boxRewards = parseGoodStr(o.boxReward); - dicArmyDonate.set(o.id, _.pick(o, Object.keys(DicArmyDonateKeys))); -}); -arr = undefined; \ No newline at end of file +export function loadArmyDonate() { + let arr = readFileAndParse(FILENAME.DIC_ARMY_DONATE_BOX_REWARD); + + arr.forEach(o => { + o.boxRewards = parseGoodStr(o.boxReward); + dicArmyDonate.set(o.id, _.pick(o, Object.keys(DicArmyDonateKeys))); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicArmyTrainJuDian.ts b/shared/pubUtils/dictionary/DicArmyTrainJuDian.ts index 566b6e1bc..e9e02b165 100644 --- a/shared/pubUtils/dictionary/DicArmyTrainJuDian.ts +++ b/shared/pubUtils/dictionary/DicArmyTrainJuDian.ts @@ -1,4 +1,4 @@ -import { readJsonFile, parseGoodStr } from '../util' +import { readFileAndParse, parseGoodStr } from '../util' import { FILENAME } from '../../consts' type KeysEnum = { [P in keyof Required]: true }; import { RewardInter } from '../interface'; @@ -23,19 +23,21 @@ const DicArmyTrainJuDianKeys: KeysEnum = { soloRewardRatio: true }; -const str = readJsonFile(FILENAME.DIC_ARMY_TRAIN_JU_DIAN); -let arr = JSON.parse(str); - export const dicArmyTrainJuDian = new Map(); -arr.forEach(o => { - o.trainInstances = o.gkid.split('|').map(element => { - let arr = element.split('&'); - return {hid: parseInt(arr[0]), warId: parseInt(arr[1]), progress: parseInt(arr[2])}; +export function loadArmyTrainJuDian() { + + let arr = readFileAndParse(FILENAME.DIC_ARMY_TRAIN_JU_DIAN); + + arr.forEach(o => { + o.trainInstances = o.gkid.split('|').map(element => { + let arr = element.split('&'); + return {hid: parseInt(arr[0]), warId: parseInt(arr[1]), progress: parseInt(arr[2])}; + }); + o.jinjieReward = parseGoodStr(o.jinjieReward); + + o.heroRewards = parseGoodStr(o.shilianReward); + + dicArmyTrainJuDian.set(o.id,_.pick(o, Object.keys(DicArmyTrainJuDianKeys))); }); - o.jinjieReward = parseGoodStr(o.jinjieReward); - - o.heroRewards = parseGoodStr(o.shilianReward); - - dicArmyTrainJuDian.set(o.id,_.pick(o, Object.keys(DicArmyTrainJuDianKeys))); -}); -arr = undefined; \ No newline at end of file + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicBlueprtCompose.ts b/shared/pubUtils/dictionary/DicBlueprtCompose.ts index 149aa8b71..cabbb40e9 100644 --- a/shared/pubUtils/dictionary/DicBlueprtCompose.ts +++ b/shared/pubUtils/dictionary/DicBlueprtCompose.ts @@ -1,5 +1,5 @@ // 藏宝图合成表 -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' import { FILENAME } from '../../consts' export interface DicBlueprtCompose { @@ -15,10 +15,12 @@ export interface DicBlueprtCompose { } -const str = readJsonFile(FILENAME.DIC_BLUEPRT_COMPOSE); -let arr = JSON.parse(str); - export const dicBlueprtCompose = new Map(); -arr.forEach(o => { - dicBlueprtCompose.set(o.quality, o); -}); +export function loadBlueprtCompose() { + let arr = readFileAndParse(FILENAME.DIC_BLUEPRT_COMPOSE); + + arr.forEach(o => { + dicBlueprtCompose.set(o.quality, o); + }); + arr = undefined; +} diff --git a/shared/pubUtils/dictionary/DicBlueprtPossibility.ts b/shared/pubUtils/dictionary/DicBlueprtPossibility.ts index a42b3b15a..0d41efecc 100644 --- a/shared/pubUtils/dictionary/DicBlueprtPossibility.ts +++ b/shared/pubUtils/dictionary/DicBlueprtPossibility.ts @@ -1,5 +1,5 @@ // 藏宝图掉落率 -import { decodeArrayListStr, readJsonFile } from '../util' +import { decodeArrayListStr, readFileAndParse } from '../util' import { FILENAME } from '../../consts' export interface DicBlueprtPossibility { @@ -13,14 +13,15 @@ export interface DicBlueprtPossibility { } -const str = readJsonFile(FILENAME.DIC_BLUEPRT_POSSIBILITY); -let arr = JSON.parse(str); - export const dicBlueprtPossibility = new Array(); -arr.forEach(o => { - o.possibility = parsePossibility(o.possibility); - dicBlueprtPossibility.push(o); -}); +export function loadBlueprtPossibility() { + + let arr = readFileAndParse(FILENAME.DIC_BLUEPRT_POSSIBILITY); + arr.forEach(o => { + o.possibility = parsePossibility(o.possibility); + dicBlueprtPossibility.push(o); + }); +} function parsePossibility(str: string) { diff --git a/shared/pubUtils/dictionary/DicCharExp.ts b/shared/pubUtils/dictionary/DicCharExp.ts index 7f23cdcb8..f0dd50301 100644 --- a/shared/pubUtils/dictionary/DicCharExp.ts +++ b/shared/pubUtils/dictionary/DicCharExp.ts @@ -1,5 +1,5 @@ // 主公经验 -import {readJsonFile} from '../util' +import {readFileAndParse} from '../util' import { FILENAME } from '../../consts' export interface DicCharExp { @@ -9,13 +9,15 @@ export interface DicCharExp { readonly exp: number; } -const str = readJsonFile(FILENAME.DIC_CHAR_EXP); -let arr = JSON.parse(str); - export const dicCharExp = new Map(); +export function loadCharExp() { -let exp = 0; -arr.forEach(o => { - exp += o.exp; - dicCharExp.set(o.level, exp); -}); \ No newline at end of file + let arr = readFileAndParse(FILENAME.DIC_CHAR_EXP); + + let exp = 0; + arr.forEach(o => { + exp += o.exp; + dicCharExp.set(o.level, exp); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicChatAccuse.ts b/shared/pubUtils/dictionary/DicChatAccuse.ts index c591ba8d9..364ee99e8 100644 --- a/shared/pubUtils/dictionary/DicChatAccuse.ts +++ b/shared/pubUtils/dictionary/DicChatAccuse.ts @@ -1,5 +1,5 @@ // 聊天举报表 -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' import { FILENAME } from '../../consts' export interface DicChatAccuse { @@ -10,12 +10,13 @@ export interface DicChatAccuse { readonly name: string; } -const str = readJsonFile(FILENAME.DIC_CHAT_ACCUSE); -let arr = JSON.parse(str); - export const dicChatAccuse = new Map(); +export function loadChatAccuse() { -arr.forEach(o => { - dicChatAccuse.set(o.id, o); -}); -arr = undefined; + let arr = readFileAndParse(FILENAME.DIC_CHAT_ACCUSE); + + arr.forEach(o => { + dicChatAccuse.set(o.id, o); + }); + arr = undefined; +} diff --git a/shared/pubUtils/dictionary/DicChatSystem.ts b/shared/pubUtils/dictionary/DicChatSystem.ts index 73e9448ef..376820ff3 100644 --- a/shared/pubUtils/dictionary/DicChatSystem.ts +++ b/shared/pubUtils/dictionary/DicChatSystem.ts @@ -1,5 +1,5 @@ // 聊天模板表 -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' import { FILENAME } from '../../consts' export interface DicChatSystem { @@ -10,8 +10,7 @@ export interface DicChatSystem { readonly name: string; } -const str = readJsonFile(FILENAME.DIC_CHAT_SYSTEM); -let arr = JSON.parse(str); +let arr = readFileAndParse(FILENAME.DIC_CHAT_SYSTEM); export const dicChatSystem = new Map(); diff --git a/shared/pubUtils/dictionary/DicCityActivity.ts b/shared/pubUtils/dictionary/DicCityActivity.ts index a57b22c10..f2c3a98b8 100644 --- a/shared/pubUtils/dictionary/DicCityActivity.ts +++ b/shared/pubUtils/dictionary/DicCityActivity.ts @@ -1,5 +1,5 @@ // 军团诸侯混战城池表 -import { readJsonFile, parseNumberList } from '../util' +import { readFileAndParse, parseNumberList } from '../util' import { FILENAME } from '../../consts' export interface DicCityActivity { @@ -22,14 +22,15 @@ export interface DicCityActivity { readonly week: number[]; } -const str = readJsonFile(FILENAME.DIC_CITY_ACTIVITY); -let arr = JSON.parse(str); - export const dicCityActivity = new Map(); +export function loadCityActivity() { -arr.forEach(o => { - o.preCity = parseNumberList(o.preCity); - o.week = parseNumberList(o.week); - dicCityActivity.set( o.id, o ); -}); -arr = undefined; \ No newline at end of file + let arr = readFileAndParse(FILENAME.DIC_CITY_ACTIVITY); + + arr.forEach(o => { + o.preCity = parseNumberList(o.preCity); + o.week = parseNumberList(o.week); + dicCityActivity.set( o.id, o ); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicCityActivityReward.ts b/shared/pubUtils/dictionary/DicCityActivityReward.ts index eaecd535e..5faaf2cf1 100644 --- a/shared/pubUtils/dictionary/DicCityActivityReward.ts +++ b/shared/pubUtils/dictionary/DicCityActivityReward.ts @@ -1,5 +1,5 @@ // 诸侯混战军团排名奖励表 -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' import { FILENAME } from '../../consts' export interface DicCityActivityReward { @@ -18,16 +18,17 @@ export interface DicCityActivityReward { readonly honour: number; } -const str = readJsonFile(FILENAME.DIC_CITY_ACTIVITY_REWARD); -let arr = JSON.parse(str); - export const dicCityActivityReward = new Map(); +export function loadCityActivityReward() { -arr.forEach(o => { - if(dicCityActivityReward.has(o.type)) { - dicCityActivityReward.get(o.type).push(o); - } else { - dicCityActivityReward.set(o.type, [o]); - } -}); -arr = undefined; \ No newline at end of file + let arr = readFileAndParse(FILENAME.DIC_CITY_ACTIVITY_REWARD); + + arr.forEach(o => { + if(dicCityActivityReward.has(o.type)) { + dicCityActivityReward.get(o.type).push(o); + } else { + dicCityActivityReward.set(o.type, [o]); + } + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicDaily.ts b/shared/pubUtils/dictionary/DicDaily.ts index 35727f90f..800c21006 100644 --- a/shared/pubUtils/dictionary/DicDaily.ts +++ b/shared/pubUtils/dictionary/DicDaily.ts @@ -1,5 +1,5 @@ // 每日总表 -import { readJsonFile, parseNumberList } from '../util' +import { readFileAndParse, parseNumberList } from '../util' import { FILENAME } from '../../consts' export interface DicDaily { @@ -16,11 +16,13 @@ export interface DicDaily { } -const str = readJsonFile(FILENAME.DIC_DAILY); -let arr = JSON.parse(str); - export const dicDaily = new Array(); -arr.forEach(o => { - o.difficultLvl = parseNumberList(o.difficultLvl); - dicDaily.push(o); -}); \ No newline at end of file +export function loadDaily() { + let arr = readFileAndParse(FILENAME.DIC_DAILY); + + arr.forEach(o => { + o.difficultLvl = parseNumberList(o.difficultLvl); + dicDaily.push(o); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicEvent.ts b/shared/pubUtils/dictionary/DicEvent.ts index 46e7fdbf2..da5a4b6de 100644 --- a/shared/pubUtils/dictionary/DicEvent.ts +++ b/shared/pubUtils/dictionary/DicEvent.ts @@ -1,5 +1,5 @@ // 奇遇表 -import { parseGoodStr, decodeArrayStr, readJsonFile, parseNumberList } from '../util' +import { parseGoodStr, decodeArrayStr, readFileAndParse, parseNumberList } from '../util' import { FILENAME } from '../../consts' import { RewardInter } from '../../pubUtils/interface'; @@ -32,19 +32,22 @@ export interface DicEvent { } -const str = readJsonFile(FILENAME.DIC_EVENT); -let arr = JSON.parse(str); - export const dicEvent = new Map(); export const dicEventList = new Array(); -arr.forEach(o => { - o.winReward = parseGoodStr(o.winReward); - o.loseReward = parseGoodStr(o.loseReward); - o.suitLevel = parseSuitLevel(o.suitLevel); - o.movePointArray = parseNumberList(o.movePointArray); - dicEventList.push(o); - dicEvent.set(o.eventID, o); -}); + +export function loadEvent () { + let arr = readFileAndParse(FILENAME.DIC_EVENT); + + arr.forEach(o => { + o.winReward = parseGoodStr(o.winReward); + o.loseReward = parseGoodStr(o.loseReward); + o.suitLevel = parseSuitLevel(o.suitLevel); + o.movePointArray = parseNumberList(o.movePointArray); + dicEventList.push(o); + dicEvent.set(o.eventID, o); + }); + arr = undefined; +} function parseSuitLevel(str: string) { diff --git a/shared/pubUtils/dictionary/DicExpedition.ts b/shared/pubUtils/dictionary/DicExpedition.ts index d581821a0..1ca822f3a 100644 --- a/shared/pubUtils/dictionary/DicExpedition.ts +++ b/shared/pubUtils/dictionary/DicExpedition.ts @@ -1,5 +1,5 @@ // 远征关卡表 -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' import { FILENAME } from '../../consts' export interface DicExpedition { @@ -22,10 +22,13 @@ export interface DicExpedition { } -const str = readJsonFile(FILENAME.DIC_EXPEDITION); -let arr = JSON.parse(str); export const dicExpedition = new Map(); -arr.forEach(o => { - dicExpedition.set(o.id, o); -}); \ No newline at end of file +export function loadExpedition() { + let arr = readFileAndParse(FILENAME.DIC_EXPEDITION); + + arr.forEach(o => { + dicExpedition.set(o.id, o); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicExpeditionPoint.ts b/shared/pubUtils/dictionary/DicExpeditionPoint.ts index 8d88735bb..6d575f9c6 100644 --- a/shared/pubUtils/dictionary/DicExpeditionPoint.ts +++ b/shared/pubUtils/dictionary/DicExpeditionPoint.ts @@ -1,5 +1,5 @@ // 远征点数奖励表 -import { parseGoodStr, readJsonFile } from '../util'; +import { parseGoodStr, readFileAndParse } from '../util'; import { FILENAME } from '../../consts'; import { RewardInter } from '../interface'; @@ -11,11 +11,14 @@ export interface DicExpeditionPoint { } -const str = readJsonFile(FILENAME.DIC_EXPEDITION_POINT); -let arr = JSON.parse(str); - export const dicExpeditionPoint = new Map(); -arr.forEach(o => { - o.reward = parseGoodStr(o.reward); - dicExpeditionPoint.set(o.point, o); -}); \ No newline at end of file +export function loadExpeditionPoint() { + + let arr = readFileAndParse(FILENAME.DIC_EXPEDITION_POINT); + + arr.forEach(o => { + o.reward = parseGoodStr(o.reward); + dicExpeditionPoint.set(o.point, o); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicFashions.ts b/shared/pubUtils/dictionary/DicFashions.ts index f681d425f..6d9a55bf1 100644 --- a/shared/pubUtils/dictionary/DicFashions.ts +++ b/shared/pubUtils/dictionary/DicFashions.ts @@ -1,5 +1,5 @@ // 时装表 -import { decodeArrayListStr, readJsonFile } from '../util'; +import { decodeArrayListStr, readFileAndParse } from '../util'; import { FILENAME } from '../../consts'; export interface DicFashions { @@ -15,15 +15,17 @@ export interface DicFashions { readonly actorId: number; } -const str = readJsonFile(FILENAME.DIC_FASHIONS); -let arr = JSON.parse(str); - export const dicFashions = new Map(); -arr.forEach(o => { - o.globalAttr = parseAttr(o.globalAttr); - o.actorAttr = parseAttr(o.actorAttr); - dicFashions.set(o.id, o); -}); +export function loadFashions() { + let arr = readFileAndParse(FILENAME.DIC_FASHIONS); + + arr.forEach(o => { + o.globalAttr = parseAttr(o.globalAttr); + o.actorAttr = parseAttr(o.actorAttr); + dicFashions.set(o.id, o); + }); + arr = undefined; +} function parseAttr(str: string) { let result = new Array<{id: number, number: number}>(); diff --git a/shared/pubUtils/dictionary/DicFriendShip.ts b/shared/pubUtils/dictionary/DicFriendShip.ts index 0c8230bd3..b226bd474 100644 --- a/shared/pubUtils/dictionary/DicFriendShip.ts +++ b/shared/pubUtils/dictionary/DicFriendShip.ts @@ -1,5 +1,5 @@ // 武将羁绊表 -import { decodeArrayListStr, readJsonFile, parseNumberList } from '../util'; +import { decodeArrayListStr, readFileAndParse, parseNumberList } from '../util'; import { FILENAME } from '../../consts'; export interface DicFriendShip { @@ -21,19 +21,21 @@ export interface DicFriendShip { readonly costCoin: number; } -const str = readJsonFile(FILENAME.DIC_FRIEND_SHIP); -let arr = JSON.parse(str); - export const friendShips = new Map(); export const friendShipHidAandIds = new Map(); -arr.forEach(o => { - o.attributes = parseAttribute(o.attribute); - o.hids = parseNumberList(o.memberId); - friendShips.set(o.shipId + '_' + o.level, o); - let fiendShipHidAandId = friendShipHidAandIds.get(o.shipId); - if (!fiendShipHidAandId || fiendShipHidAandId.level < o.level) - friendShipHidAandIds.set(o.shipId, {actorId: o.actorId, level: o.level}); -}); +export function loadFriendShip() { + let arr = readFileAndParse(FILENAME.DIC_FRIEND_SHIP); + + arr.forEach(o => { + o.attributes = parseAttribute(o.attribute); + o.hids = parseNumberList(o.memberId); + friendShips.set(o.shipId + '_' + o.level, o); + let fiendShipHidAandId = friendShipHidAandIds.get(o.shipId); + if (!fiendShipHidAandId || fiendShipHidAandId.level < o.level) + friendShipHidAandIds.set(o.shipId, {actorId: o.actorId, level: o.level}); + }); + arr = undefined; +} function parseAttribute(str: string) { let result = new Array<{id: number, number: number}>(); diff --git a/shared/pubUtils/dictionary/DicFriendShipLevel.ts b/shared/pubUtils/dictionary/DicFriendShipLevel.ts index 8089e1eda..6fff576f2 100644 --- a/shared/pubUtils/dictionary/DicFriendShipLevel.ts +++ b/shared/pubUtils/dictionary/DicFriendShipLevel.ts @@ -1,5 +1,5 @@ // 武将羁绊好感等级表 -import { readJsonFile } from '../util'; +import { readFileAndParse } from '../util'; import { FILENAME } from '../../consts'; export interface DicFriendShipLevel { @@ -13,15 +13,17 @@ export interface DicFriendShipLevel { readonly expSum: number; } -const str = readJsonFile(FILENAME.DIC_FRIEND_SHIP_LEVEL); -let arr = JSON.parse(str); - export let maxFriendShipLv = 0; export const dicFriendShipLevelMap = new Map(); -let expSum = 0; -arr.forEach(o => { - expSum += o.exp; - o.expSum = expSum; - dicFriendShipLevelMap.set(o.level, o); - if(o.level > maxFriendShipLv) maxFriendShipLv = o.level; -}); \ No newline at end of file +export function loadFriendShipLevel() { + + let arr = readFileAndParse(FILENAME.DIC_FRIEND_SHIP_LEVEL); + let expSum = 0; + arr.forEach(o => { + expSum += o.exp; + o.expSum = expSum; + dicFriendShipLevelMap.set(o.level, o); + if(o.level > maxFriendShipLv) maxFriendShipLv = o.level; + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicFuncSwitch.ts b/shared/pubUtils/dictionary/DicFuncSwitch.ts index f64e1576b..1b2de424b 100644 --- a/shared/pubUtils/dictionary/DicFuncSwitch.ts +++ b/shared/pubUtils/dictionary/DicFuncSwitch.ts @@ -1,5 +1,5 @@ // 开启功能表 -import { readJsonFile } from '../util'; +import { readFileAndParse } from '../util'; import { FILENAME } from '../../consts'; export interface DicFuncSwitch { @@ -16,10 +16,12 @@ export interface DicFuncSwitch { } -const str = readJsonFile(FILENAME.DIC_FUNC_SWITCH); -let arr = JSON.parse(str); - export const dicFuncSwitch = new Map(); -arr.forEach(o => { - dicFuncSwitch.set(o.id, o); -}); +export function loadFuncSwitch() { + let arr = readFileAndParse(FILENAME.DIC_FUNC_SWITCH); + + arr.forEach(o => { + dicFuncSwitch.set(o.id, o); + }); + arr = undefined; +} diff --git a/shared/pubUtils/dictionary/DicGacha.ts b/shared/pubUtils/dictionary/DicGacha.ts index 7d81aff3b..fcb2d9c6d 100644 --- a/shared/pubUtils/dictionary/DicGacha.ts +++ b/shared/pubUtils/dictionary/DicGacha.ts @@ -1,4 +1,4 @@ -import { readJsonFile, parseNumberList, parseGoodStr, decodeArrayListStr } from '../util' +import { readFileAndParse, parseNumberList, parseGoodStr, decodeArrayListStr } from '../util' import { FILENAME } from '../../consts' import { RewardInter } from '../interface'; @@ -15,18 +15,20 @@ export interface DicGacha { readonly percent: { id: number, weight: number }[]; } -const str = readJsonFile(FILENAME.DIC_GACHA); -let arr = JSON.parse(str); - export const dicGacha = new Map(); // id => dic -arr.forEach(o => { - o.count = parseNumberList(o.count); - o.free = parseFree(o.free); - o.cost = parseGoodStr(o.cost); - o.percent = parsePercent(o.percent); - dicGacha.set(o.id, o); -}); +export function loadGacha() { + let arr = readFileAndParse(FILENAME.DIC_GACHA); + + arr.forEach(o => { + o.count = parseNumberList(o.count); + o.free = parseFree(o.free); + o.cost = parseGoodStr(o.cost); + o.percent = parsePercent(o.percent); + dicGacha.set(o.id, o); + }); + arr = undefined; +} function parseFree(str: string) { let arr = parseNumberList(str); diff --git a/shared/pubUtils/dictionary/DicGachaContent.ts b/shared/pubUtils/dictionary/DicGachaContent.ts index 900fd16d4..65180f3e8 100644 --- a/shared/pubUtils/dictionary/DicGachaContent.ts +++ b/shared/pubUtils/dictionary/DicGachaContent.ts @@ -1,4 +1,4 @@ -import { readJsonFile, parseNumberList } from '../util' +import { readFileAndParse, parseNumberList } from '../util' import { FILENAME, GACHA_CONTENT_TYPE } from '../../consts' export interface DicGachaContent { @@ -12,17 +12,19 @@ export interface DicGachaContent { readonly count: number; } -const str = readJsonFile(FILENAME.DIC_GACHA_CONTENT); -let arr = JSON.parse(str); - export const dicGachaContent = new Map(); // id => dic export const dicGachaContentHero = new Map(); // quality => dic -arr.forEach(o => { - o.param = parseNumberList(o.param); - if(o.type == GACHA_CONTENT_TYPE.HERO) { - dicGachaContentHero.set(o.param[0], o.id); - } - dicGachaContent.set(o.id, o); -}); +export function loadGachaContent() { -arr = undefined; \ No newline at end of file + let arr = readFileAndParse(FILENAME.DIC_GACHA_CONTENT); + + arr.forEach(o => { + o.param = parseNumberList(o.param); + if(o.type == GACHA_CONTENT_TYPE.HERO) { + dicGachaContentHero.set(o.param[0], o.id); + } + dicGachaContent.set(o.id, o); + }); + + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicGateActivityPoint.ts b/shared/pubUtils/dictionary/DicGateActivityPoint.ts index e957262f1..7b888ae01 100644 --- a/shared/pubUtils/dictionary/DicGateActivityPoint.ts +++ b/shared/pubUtils/dictionary/DicGateActivityPoint.ts @@ -1,4 +1,4 @@ -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' import { FILENAME } from '../../consts' export interface DicGkPvp { @@ -6,10 +6,13 @@ export interface DicGkPvp { readonly point: number; } -const str = readJsonFile(FILENAME.DIC_GATE_ACTIVITY_POINT); -let arr = JSON.parse(str); - export const dicGateActivityPoint = new Map(); -arr.forEach(o => { - dicGateActivityPoint.set(o.id, o.point); -}); +export function loadGateActivityPoint() { + + let arr = readFileAndParse(FILENAME.DIC_GATE_ACTIVITY_POINT); + + arr.forEach(o => { + dicGateActivityPoint.set(o.id, o.point); + }); + arr = undefined; +} diff --git a/shared/pubUtils/dictionary/DicGiftPackage.ts b/shared/pubUtils/dictionary/DicGiftPackage.ts index 4e89a9155..9d8079201 100644 --- a/shared/pubUtils/dictionary/DicGiftPackage.ts +++ b/shared/pubUtils/dictionary/DicGiftPackage.ts @@ -1,5 +1,5 @@ // 礼包奖励表 -import { decodeArrayListStr, readJsonFile } from '../util'; +import { decodeArrayListStr, readFileAndParse } from '../util'; import { FILENAME } from '../../consts'; import { RewardParam } from '../../domain/activityField/rewardField'; @@ -17,14 +17,17 @@ export interface DicGiftPackage { } -const str = readJsonFile(FILENAME.DIC_GIFT_PACKAGE); -let arr = JSON.parse(str); - export const dicGiftPackage = new Map(); -arr.forEach(o => { - o.reward = parseAttr(o.reward); - dicGiftPackage.set(o.id, o); -}); +export function loadGiftPackage() { + + let arr = readFileAndParse(FILENAME.DIC_GIFT_PACKAGE); + + arr.forEach(o => { + o.reward = parseAttr(o.reward); + dicGiftPackage.set(o.id, o); + }); + arr = undefined; +} function parseAttr(str: string) { let result = new Array<{ type: number, id: number, count: number }>(); diff --git a/shared/pubUtils/dictionary/DicGkPvp.ts b/shared/pubUtils/dictionary/DicGkPvp.ts index 57fc352e9..5121e2b5f 100644 --- a/shared/pubUtils/dictionary/DicGkPvp.ts +++ b/shared/pubUtils/dictionary/DicGkPvp.ts @@ -1,4 +1,4 @@ -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' import { FILENAME } from '../../consts' export interface DicGkPvp { @@ -8,12 +8,14 @@ export interface DicGkPvp { readonly warType: number; } -const str = readJsonFile(FILENAME.DIC_GK_PVP); -let arr = JSON.parse(str); - export const dicGkPvp = new Map(); export const dicGkPvps = new Array(); -arr.forEach(o => { - dicGkPvp.set(o.war_id, o); - dicGkPvps.push(o.war_id); -}); +export function loadGkPvp() { + let arr = readFileAndParse(FILENAME.DIC_GK_PVP); + + arr.forEach(o => { + dicGkPvp.set(o.war_id, o); + dicGkPvps.push(o.war_id); + }); + arr = undefined; +} diff --git a/shared/pubUtils/dictionary/DicGoods.ts b/shared/pubUtils/dictionary/DicGoods.ts index aa7e2011d..60845c5b3 100644 --- a/shared/pubUtils/dictionary/DicGoods.ts +++ b/shared/pubUtils/dictionary/DicGoods.ts @@ -1,5 +1,5 @@ // 物品表 -import {decodeArrayListStr, readJsonFile, parseGoodStr, parseNumberList, decodeArrayStr} from '../util' +import {decodeArrayListStr, readFileAndParse, parseGoodStr, parseNumberList, decodeArrayStr} from '../util' import { FILENAME, IT_TYPE, ABI_TYPE , GOOD_TYPE} from '../../consts' import { RewardInter } from '../interface'; const _ = require('lodash'); @@ -64,9 +64,6 @@ export interface DicGoods { readonly timeLimit: number; } -const str = readJsonFile(FILENAME.DIC_GOODS); -let arr = JSON.parse(str); - type KeysEnum = { [P in keyof Required]: true }; const DicGoodsKeys: KeysEnum = { good_id: true, @@ -101,53 +98,57 @@ export const dicGoods = new Map(); export const blueprt = new Map>(); export const figureCondition = new Map(); // type => {params, id, gid} -arr.forEach(o => { - o.goodsAbility = parseAbility(o); - o.goodsAbilityUp = parseAbilityUp(o); - o.composeMaterial = parseGoodStr(o.composeMaterial); - o.decomposeItem = parseGoodStr(o.decomposeItem); - o.specialAttr = parseSpecialAttr(o.specialAttr); - o.specialMaterial = parseSpecialMaterial(o.specialMaterial); - o.randomEffect = parseNumberList(o.randomEffect); - o.timeLimit = o.timelimit; - if (o.goodType == IT_TYPE.EQUIP_PIECE) { - let good = findWhere(arr, { pieceId: o.good_id }); - if (!!good) - o.equipId = good.good_id; - } - let condition = parseConditionStr(o.condition); - for(let {id, type, params} of condition) { - let mapArr = figureCondition.get(type)||new Array<{params: number[], id: number, gid: number}>(); - mapArr.push({ params, id: id, gid: o.good_id}); - figureCondition.set(type, mapArr); - } - o.condition = condition; - dicGoods.set(o.good_id, _.pick(o, Object.keys(DicGoodsKeys))); - - if (o.itid == IT_TYPE.BLUEPRT) { - let arr = blueprt.get(o.quality)||new Array(); - arr.push(o.good_id); - blueprt.set(o.quality, arr); - } else if (o.goodType == GOOD_TYPE.JEWEL) { - let material = o.composeMaterial[0]; - if (!!material && !!material.id) { - let lastJewel = findWhere(arr,{good_id:material.id}); - if (!!lastJewel) { - lastJewel.count = material.count; - lastJewel.nextJewelId = o.good_id; - if (!!o.specialMaterial.ids[0]) { - lastJewel.specialCount = o.specialMaterial.count; - lastJewel.nextSpecialId = o.specialMaterial.ids[0]; - } - dicJewel.set(lastJewel.good_id, _.pick(lastJewel, Object.keys(DicGoodsKeys))); - } - } else { - dicJewel.set(o.good_id, _.pick(o, Object.keys(DicGoodsKeys))); +export function loadGoods() { + let arr = readFileAndParse(FILENAME.DIC_GOODS); + + arr.forEach(o => { + o.goodsAbility = parseAbility(o); + o.goodsAbilityUp = parseAbilityUp(o); + o.composeMaterial = parseGoodStr(o.composeMaterial); + o.decomposeItem = parseGoodStr(o.decomposeItem); + o.specialAttr = parseSpecialAttr(o.specialAttr); + o.specialMaterial = parseSpecialMaterial(o.specialMaterial); + o.randomEffect = parseNumberList(o.randomEffect); + o.timeLimit = o.timelimit; + if (o.goodType == IT_TYPE.EQUIP_PIECE) { + let good = findWhere(arr, { pieceId: o.good_id }); + if (!!good) + o.equipId = good.good_id; } - } -}); - -arr = undefined; + let condition = parseConditionStr(o.condition); + for(let {id, type, params} of condition) { + let mapArr = figureCondition.get(type)||new Array<{params: number[], id: number, gid: number}>(); + mapArr.push({ params, id: id, gid: o.good_id}); + figureCondition.set(type, mapArr); + } + o.condition = condition; + dicGoods.set(o.good_id, _.pick(o, Object.keys(DicGoodsKeys))); + + if (o.itid == IT_TYPE.BLUEPRT) { + let arr = blueprt.get(o.quality)||new Array(); + arr.push(o.good_id); + blueprt.set(o.quality, arr); + } else if (o.goodType == GOOD_TYPE.JEWEL) { + let material = o.composeMaterial[0]; + if (!!material && !!material.id) { + let lastJewel = findWhere(arr,{good_id:material.id}); + if (!!lastJewel) { + lastJewel.count = material.count; + lastJewel.nextJewelId = o.good_id; + if (!!o.specialMaterial.ids[0]) { + lastJewel.specialCount = o.specialMaterial.count; + lastJewel.nextSpecialId = o.specialMaterial.ids[0]; + } + dicJewel.set(lastJewel.good_id, _.pick(lastJewel, Object.keys(DicGoodsKeys))); + } + } else { + dicJewel.set(o.good_id, _.pick(o, Object.keys(DicGoodsKeys))); + } + } + }); + + arr = undefined; +} function parseSpecialAttr(str: string) { let specialAttr = new Map(); diff --git a/shared/pubUtils/dictionary/DicGuildActiveDayReward.ts b/shared/pubUtils/dictionary/DicGuildActiveDayReward.ts index 7df9ce2af..3e2e0829e 100644 --- a/shared/pubUtils/dictionary/DicGuildActiveDayReward.ts +++ b/shared/pubUtils/dictionary/DicGuildActiveDayReward.ts @@ -1,5 +1,5 @@ // 每日个人可领奖励 -import { readJsonFile, parseGoodStr } from '../util' +import { readFileAndParse, parseGoodStr } from '../util' import { FILENAME } from '../../consts' import { RewardInter } from '../interface'; @@ -14,13 +14,14 @@ export interface DicGuildActiveDayReward { } -const str = readJsonFile(FILENAME.DIC_ACTIVE_DAY_REWARD); -let arr = JSON.parse(str); - export const dicGuildActiveDayReward = new Map(); +export function loadGuildActiveDayReward() { -arr.forEach(o => { - o.reward = parseGoodStr(o.Reward) - dicGuildActiveDayReward.set(o.id, o); -}); -arr = undefined; \ No newline at end of file + let arr = readFileAndParse(FILENAME.DIC_ACTIVE_DAY_REWARD); + + arr.forEach(o => { + o.reward = parseGoodStr(o.Reward) + dicGuildActiveDayReward.set(o.id, o); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicGuildActiveWays.ts b/shared/pubUtils/dictionary/DicGuildActiveWays.ts index ee65f7590..1e35d6deb 100644 --- a/shared/pubUtils/dictionary/DicGuildActiveWays.ts +++ b/shared/pubUtils/dictionary/DicGuildActiveWays.ts @@ -1,5 +1,5 @@ // 各种操作可以增加的活跃 -import { readJsonFile, decodeIdCntArrayStr } from '../util' +import { readFileAndParse, decodeIdCntArrayStr } from '../util' import { FILENAME } from '../../consts' export interface DicGuildActiveWays { @@ -13,14 +13,15 @@ export interface DicGuildActiveWays { } -const str = readJsonFile(FILENAME.DIC_ARMY_ACTIVE_POINT_WAYS); -let arr = JSON.parse(str); - export const dicGuildActiveWays = new Map(); +export function loadGuildActiveWays() { -arr.forEach(o => { - o.activePoint = decodeIdCntArrayStr(o.activePoint, 1); - if(!o.count) o.count = o.cout; - dicGuildActiveWays.set(o.id, o); -}); -arr = undefined; \ No newline at end of file + let arr = readFileAndParse(FILENAME.DIC_ARMY_ACTIVE_POINT_WAYS); + + arr.forEach(o => { + o.activePoint = decodeIdCntArrayStr(o.activePoint, 1); + if(!o.count) o.count = o.cout; + dicGuildActiveWays.set(o.id, o); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicGuildActiveWeekReward.ts b/shared/pubUtils/dictionary/DicGuildActiveWeekReward.ts index eed0de38b..fb24506d4 100644 --- a/shared/pubUtils/dictionary/DicGuildActiveWeekReward.ts +++ b/shared/pubUtils/dictionary/DicGuildActiveWeekReward.ts @@ -1,5 +1,5 @@ // 每周总活跃 -import { readJsonFile, parseGoodStr } from '../util' +import { readFileAndParse, parseGoodStr } from '../util' import { FILENAME } from '../../consts' import { RewardInter } from '../interface'; @@ -16,13 +16,14 @@ export interface DicGuildActiveWeekReward { } -const str = readJsonFile(FILENAME.DIC_ACTIVE_DAY_REWARD); -let arr = JSON.parse(str); - export const dicGuildActiveWeekReward = new Array(); +export function loadGuildActiveWeekReward() { -arr.forEach(o => { - o.reward = parseGoodStr(o.Reward) - dicGuildActiveWeekReward.push(o); -}); -arr = undefined; \ No newline at end of file + let arr = readFileAndParse(FILENAME.DIC_ACTIVE_DAY_REWARD); + + arr.forEach(o => { + o.reward = parseGoodStr(o.Reward) + dicGuildActiveWeekReward.push(o); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicGuildActivity.ts b/shared/pubUtils/dictionary/DicGuildActivity.ts index 8005f99ac..20f2dcc14 100644 --- a/shared/pubUtils/dictionary/DicGuildActivity.ts +++ b/shared/pubUtils/dictionary/DicGuildActivity.ts @@ -1,5 +1,5 @@ // 军团活动 -import { readJsonFile, parseNumberList } from '../util' +import { readFileAndParse, parseNumberList } from '../util' import { FILENAME } from '../../consts' export interface DicGuildActivity { @@ -25,17 +25,18 @@ export interface DicGuildActivity { } -const str = readJsonFile(FILENAME.DIC_GUILD_ACTIVITY); -let arr = JSON.parse(str); - export const dicGuildActivity = new Map(); +export function loadGuildActivity() { -arr.forEach(o => { - o.openDay = parseNumberList(o.openDay); - let time = o.startTime.split(':'); - o.startTime = parseInt(time[0]); - o.startMinute = parseInt(time[1]); - o.startSeconds = parseInt(time[2]); - dicGuildActivity.set( o.id, o ); -}); -arr = undefined; \ No newline at end of file + let arr = readFileAndParse(FILENAME.DIC_GUILD_ACTIVITY); + + arr.forEach(o => { + o.openDay = parseNumberList(o.openDay); + let time = o.startTime.split(':'); + o.startTime = parseInt(time[0]); + o.startMinute = parseInt(time[1]); + o.startSeconds = parseInt(time[2]); + dicGuildActivity.set( o.id, o ); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicGuildAuction.ts b/shared/pubUtils/dictionary/DicGuildAuction.ts index abc97a55c..5f1290cfa 100644 --- a/shared/pubUtils/dictionary/DicGuildAuction.ts +++ b/shared/pubUtils/dictionary/DicGuildAuction.ts @@ -1,5 +1,5 @@ // 公会权限 -import { readJsonFile, parseGoodStr } from '../util' +import { readFileAndParse, parseGoodStr } from '../util' import { FILENAME } from '../../consts' import { RewardInter } from '../../pubUtils/interface'; @@ -15,15 +15,16 @@ export interface DicGuildAuction { readonly rewards: RewardInter[]; } -const str = readJsonFile(FILENAME.DIC_GUILD_AUCTION); -let arr = JSON.parse(str); - export const dicGuildAuction = new Map(); +export function loadGuildAuction() { -arr.forEach(o => { - o.rewards = parseGoodStr(o.rewards); - let rank = dicGuildAuction.get(o.id)||[]; - rank.push(o); - dicGuildAuction.set(o.id, rank); -}); -arr = undefined; \ No newline at end of file + let arr = readFileAndParse(FILENAME.DIC_GUILD_AUCTION); + + arr.forEach(o => { + o.rewards = parseGoodStr(o.rewards); + let rank = dicGuildAuction.get(o.id)||[]; + rank.push(o); + dicGuildAuction.set(o.id, rank); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicGuildAuth.ts b/shared/pubUtils/dictionary/DicGuildAuth.ts index c4d7fc10b..7e18f3010 100644 --- a/shared/pubUtils/dictionary/DicGuildAuth.ts +++ b/shared/pubUtils/dictionary/DicGuildAuth.ts @@ -1,5 +1,5 @@ // 公会权限 -import { readJsonFile, parseNumberList } from '../util' +import { readFileAndParse, parseNumberList } from '../util' import { FILENAME } from '../../consts' export interface DicGuildAuth { @@ -11,13 +11,13 @@ export interface DicGuildAuth { } -const str = readJsonFile(FILENAME.DIC_GUILD_AUTH); -let arr = JSON.parse(str); - export const dicGuildAuth = new Map(); +export function loadGuildAuth() { + let arr = readFileAndParse(FILENAME.DIC_GUILD_AUTH); -arr.forEach(o => { - let authority = parseNumberList(o.authority) - dicGuildAuth.set(o.id, authority); -}); -arr = undefined; \ No newline at end of file + arr.forEach(o => { + let authority = parseNumberList(o.authority) + dicGuildAuth.set(o.id, authority); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicGuildPosition.ts b/shared/pubUtils/dictionary/DicGuildPosition.ts index 53bdde157..5d9ff5dc1 100644 --- a/shared/pubUtils/dictionary/DicGuildPosition.ts +++ b/shared/pubUtils/dictionary/DicGuildPosition.ts @@ -1,5 +1,5 @@ // 军团职位表 -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' import { FILENAME } from '../../consts' export interface DicGuildPosition { @@ -16,10 +16,12 @@ export interface DicGuildPosition { readonly activeRatio: number; } -const str = readJsonFile(FILENAME.DIC_GUILD_POSITION); -let arr = JSON.parse(str); - export const dicGuildPosition = new Map(); -arr.forEach(o => { - dicGuildPosition.set(o.id, o); -}); +export function loadGuildPosition() { + let arr = readFileAndParse(FILENAME.DIC_GUILD_POSITION); + + arr.forEach(o => { + dicGuildPosition.set(o.id, o); + }); + arr = undefined; +} diff --git a/shared/pubUtils/dictionary/DicHero.ts b/shared/pubUtils/dictionary/DicHero.ts index 209c51169..89d541aa5 100644 --- a/shared/pubUtils/dictionary/DicHero.ts +++ b/shared/pubUtils/dictionary/DicHero.ts @@ -1,7 +1,7 @@ // 武将表 import { ABI_TYPE, FILENAME } from '../../consts' -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' const _ = require('lodash'); export interface DicHero { @@ -31,22 +31,23 @@ export interface DicHero { readonly recruit: boolean; } -const str = readJsonFile(FILENAME.DIC_HERO); -let arr = JSON.parse(str); - type KeysEnum = { [P in keyof Required]: true }; const DicHeroKeys: KeysEnum = {heroId: true, name: true, quality: true, camp: true, jobid: true, skill: true, pieceId: true, initialStars: true, pieceCount: true, baseAbilityArr: true, baseAbilityUpArr: true, initialSkin: true, recruit: true}; export const dicMyHeroes = new Array(); export const dicHero = new Map(); -arr.forEach(o => { - if(o.heroId > 0 && o.heroId <= 300) { - dicMyHeroes.push(o.heroId); - } - o.baseAbilityArr = parseBaseAbilityArr(o); - o.baseAbilityUpArr = parseBaseAbilityUpArr(o); - o.recruit = parseInt(o.recruit) == 1; - dicHero.set(o.heroId, _.pick(o, Object.keys(DicHeroKeys))); -}); +export function loadHero() { + let arr = readFileAndParse(FILENAME.DIC_HERO); + arr.forEach(o => { + if(o.heroId > 0 && o.heroId <= 300) { + dicMyHeroes.push(o.heroId); + } + o.baseAbilityArr = parseBaseAbilityArr(o); + o.baseAbilityUpArr = parseBaseAbilityUpArr(o); + o.recruit = parseInt(o.recruit) == 1; + dicHero.set(o.heroId, _.pick(o, Object.keys(DicHeroKeys))); + }); + arr = undefined; +} function parseBaseAbilityArr(json) { let map = new Map(); diff --git a/shared/pubUtils/dictionary/DicHeroEquip.ts b/shared/pubUtils/dictionary/DicHeroEquip.ts index 74a808606..748ae4b71 100644 --- a/shared/pubUtils/dictionary/DicHeroEquip.ts +++ b/shared/pubUtils/dictionary/DicHeroEquip.ts @@ -1,5 +1,5 @@ // 藏宝图合成表 -import { readJsonFile, parseNumberList } from '../util' +import { readFileAndParse, parseNumberList } from '../util' import { FILENAME } from '../../consts' const _ = require('lodash'); @@ -8,17 +8,19 @@ export interface DicHeroEquip { readonly classId: Array; } -const str = readJsonFile(FILENAME.DIC_HERO_EQUIP); -let arr = JSON.parse(str); type KeysEnum = { [P in keyof Required]: true }; const DicHeroEquipKeys: KeysEnum = { itId: true, classId: true } export const dicHeroEquip = new Map(); -arr.forEach(o => { - o.classId = parseNumberList(o.classId); - dicHeroEquip.set(o.itId, _.pick(o, Object.keys(DicHeroEquipKeys))); -}); +export function loadHeroEquip() { + let arr = readFileAndParse(FILENAME.DIC_HERO_EQUIP); -arr = undefined; \ No newline at end of file + arr.forEach(o => { + o.classId = parseNumberList(o.classId); + dicHeroEquip.set(o.itId, _.pick(o, Object.keys(DicHeroEquipKeys))); + }); + + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicHeroQualityUp.ts b/shared/pubUtils/dictionary/DicHeroQualityUp.ts index f88fa3d86..74595aeed 100644 --- a/shared/pubUtils/dictionary/DicHeroQualityUp.ts +++ b/shared/pubUtils/dictionary/DicHeroQualityUp.ts @@ -1,5 +1,5 @@ // 武将技能表 -import {parseGoodStr, readJsonFile} from '../util' +import {parseGoodStr, readFileAndParse} from '../util' import { FILENAME } from '../../consts' import { RewardInter } from '../interface'; @@ -16,11 +16,13 @@ export interface DicHeroQualityUp { } -const str = readJsonFile(FILENAME.DIC_HERO_QUALITY_UP); -let arr = JSON.parse(str); - export const dicHeroQualityUp = new Map(); -arr.forEach(o => { - o.consume = parseGoodStr(o.consume); - dicHeroQualityUp.set(o.quality, o); -}); +export function loadHeroQualityUp() { + let arr = readFileAndParse(FILENAME.DIC_HERO_QUALITY_UP); + + arr.forEach(o => { + o.consume = parseGoodStr(o.consume); + dicHeroQualityUp.set(o.quality, o); + }); + arr = undefined; +} diff --git a/shared/pubUtils/dictionary/DicHeroScroll.ts b/shared/pubUtils/dictionary/DicHeroScroll.ts index 5d2b96e90..aae5aba15 100644 --- a/shared/pubUtils/dictionary/DicHeroScroll.ts +++ b/shared/pubUtils/dictionary/DicHeroScroll.ts @@ -1,5 +1,5 @@ // 武将技能表 -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' import { FILENAME, ABI_STAGE } from '../../consts' export interface DicHeroScroll { @@ -19,21 +19,22 @@ export interface DicHeroScroll { } -const str = readJsonFile(FILENAME.DIC_HERO_SCROLL); -let arr = JSON.parse(str); - export const dicHeroScroll = new Map(); export const preHeroScroll = new Map(); // 前一个 -let pre: DicHeroScroll; +export function loadHeroScroll() { -arr.forEach(o => { - o.ceAttr = parseCeAttr(o); - dicHeroScroll.set(`${o.quality}_${o.stars}_${o.qualityUp}_${o.colorstars}`, o); - if(pre && pre.quality == o.quality) preHeroScroll.set(o.id, pre); - pre = o; -}); -arr = undefined; -pre = undefined; + let arr = readFileAndParse(FILENAME.DIC_HERO_SCROLL); + let pre: DicHeroScroll; + + arr.forEach(o => { + o.ceAttr = parseCeAttr(o); + dicHeroScroll.set(`${o.quality}_${o.stars}_${o.qualityUp}_${o.colorstars}`, o); + if(pre && pre.quality == o.quality) preHeroScroll.set(o.id, pre); + pre = o; + }); + arr = undefined; + pre = undefined; +} function parseCeAttr(elem) { let ceAttr = new Map(); diff --git a/shared/pubUtils/dictionary/DicHeroSkill.ts b/shared/pubUtils/dictionary/DicHeroSkill.ts index 4c083b741..4cd3f5991 100644 --- a/shared/pubUtils/dictionary/DicHeroSkill.ts +++ b/shared/pubUtils/dictionary/DicHeroSkill.ts @@ -1,5 +1,5 @@ // 武将技能表 -import {decodeArrayListStr, readJsonFile} from '../util' +import {decodeArrayListStr, readFileAndParse} from '../util' import { FILENAME } from '../../consts' export interface DicHeroSkill { @@ -15,15 +15,16 @@ export interface DicHeroSkill { } -const str = readJsonFile(FILENAME.DIC_HERO_SKILL); -let arr = JSON.parse(str); - export const dicHeroSkill = new Map(); -arr.forEach(o => { - o.starSeidArr = parseSeid(o.starSeid); - o.colorStarSeidArr = parseSeid(o.colorStarSeid); - dicHeroSkill.set(o.skillid, o); -}); +export function loadHeroSkill() { + let arr = readFileAndParse(FILENAME.DIC_HERO_SKILL); + arr.forEach(o => { + o.starSeidArr = parseSeid(o.starSeid); + o.colorStarSeidArr = parseSeid(o.colorStarSeid); + dicHeroSkill.set(o.skillid, o); + }); + arr = undefined; +} function parseSeid(str: string) { let arr = new Array<{star: number, value: number, type: number}>(); diff --git a/shared/pubUtils/dictionary/DicHeroStar.ts b/shared/pubUtils/dictionary/DicHeroStar.ts index 0c5fc18f8..7e7712ce8 100644 --- a/shared/pubUtils/dictionary/DicHeroStar.ts +++ b/shared/pubUtils/dictionary/DicHeroStar.ts @@ -1,5 +1,5 @@ // 武将升星表 -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' import { ABI_STAGE, FILENAME } from '../../consts'; const _ = require('lodash'); @@ -18,17 +18,20 @@ export interface DicHeroStar { } -const str = readJsonFile(FILENAME.DIC_HERO_STAR); -let arr = JSON.parse(str); type KeysEnum = { [P in keyof Required]: true }; const DicHeroStarKeys: KeysEnum = {id: true, quality: true, star: true, advanceUpFragmentNum: true, ceAttr: true}; export const dicHeroStar = new Map(); -arr.forEach(o => { - o.ceAttr = parseCeAttr(o); - dicHeroStar.set(`${o.quality}_${o.star}`, _.pick(o, Object.keys(DicHeroStarKeys))); -}); +export function loadHeroStar() { + let arr = readFileAndParse(FILENAME.DIC_HERO_STAR); + + arr.forEach(o => { + o.ceAttr = parseCeAttr(o); + dicHeroStar.set(`${o.quality}_${o.star}`, _.pick(o, Object.keys(DicHeroStarKeys))); + }); + arr = undefined; +} function parseCeAttr(elem) { let ceAttr = new Map(); @@ -37,5 +40,4 @@ function parseCeAttr(elem) { ceAttr.set(ABI_STAGE.DEF, elem.def_up); ceAttr.set(ABI_STAGE.MDEF, elem.mdef_up); return ceAttr; -} -arr = undefined; \ No newline at end of file +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicHeroWake.ts b/shared/pubUtils/dictionary/DicHeroWake.ts index eb71b8523..db0caa740 100644 --- a/shared/pubUtils/dictionary/DicHeroWake.ts +++ b/shared/pubUtils/dictionary/DicHeroWake.ts @@ -1,5 +1,5 @@ // 武将觉醒表 -import { readJsonFile, parseGoodStr } from '../util' +import { readFileAndParse, parseGoodStr } from '../util' import { ABI_STAGE, FILENAME } from '../../consts'; import { RewardInter } from '../interface'; const _ = require('lodash'); @@ -21,18 +21,20 @@ export interface DicHeroWake { } -const str = readJsonFile(FILENAME.DIC_HERO_WAKE); -let arr = JSON.parse(str); - type KeysEnum = { [P in keyof Required]: true }; const DicHeroWakeKeys: KeysEnum = {id: true, quality: true, star: true, fragmentNum: true, consume: true, ceAttr: true}; export const dicHeroWake = new Map(); -arr.forEach(o => { - o.consume = parseGoodStr(o.consume); - o.ceAttr = parseCeAttr(o); - dicHeroWake.set(`${o.quality}_${o.star}`, _.pick(o, Object.keys(DicHeroWakeKeys))); -}); +export function loadHeroWake() { + let arr = readFileAndParse(FILENAME.DIC_HERO_WAKE); + + arr.forEach(o => { + o.consume = parseGoodStr(o.consume); + o.ceAttr = parseCeAttr(o); + dicHeroWake.set(`${o.quality}_${o.star}`, _.pick(o, Object.keys(DicHeroWakeKeys))); + }); + arr = undefined; +} function parseCeAttr(elem) { let ceAttr = new Map(); diff --git a/shared/pubUtils/dictionary/DicJob.ts b/shared/pubUtils/dictionary/DicJob.ts index 609a003bb..65baa2697 100644 --- a/shared/pubUtils/dictionary/DicJob.ts +++ b/shared/pubUtils/dictionary/DicJob.ts @@ -1,5 +1,5 @@ // 兵种表 -import {readJsonFile, parseNumberList, parseGoodStr} from '../util' +import { readFileAndParse, parseNumberList, parseGoodStr} from '../util' import { FILENAME, ABI_STAGE } from '../../consts' import { RewardInter } from '../interface'; const _ = require('lodash'); @@ -28,9 +28,6 @@ export interface DicJob { } -const str = readJsonFile(FILENAME.DIC_JOB); -let arr = JSON.parse(str); - type KeysEnum = { [P in keyof Required]: true }; const DicJobKeys: KeysEnum = {jobid: true, name: true, grade: true, unlockLevel: true, job_class: true, type: true, seid: true,trainingConsume: true, upGradeConsume: true, ceAttr: true}; @@ -38,19 +35,25 @@ export const dicJob = new Map(); export const jobClassMaxGrades = new Map(); export const jobClassAndgrades = new Map(); -arr.forEach(o => { - o.seid = parseNumberList(o.seid); - o.trainingConsume = parseGoodStr(o.trainingConsume); - o.upGradeConsume = parseGoodStr(o.upGradeConsume); - o.ceAttr = parseCeAttr(o); - dicJob.set(o.jobid, _.pick(o, Object.keys(DicJobKeys))); - let jobClass = jobClassMaxGrades.get(o.job_class); - if (!jobClass || jobClass.grade < o.grade) { - jobClassMaxGrades.set(o.job_class, {grade: o.grade,jobid: o.jobid}); - } - jobClassAndgrades.set(o.job_class+'_'+o.grade,{unlockLevel:o.unlockLevel, jobid:o.jobid}); +export function loadJob() { -}); + let arr = readFileAndParse(FILENAME.DIC_JOB); + + arr.forEach(o => { + o.seid = parseNumberList(o.seid); + o.trainingConsume = parseGoodStr(o.trainingConsume); + o.upGradeConsume = parseGoodStr(o.upGradeConsume); + o.ceAttr = parseCeAttr(o); + dicJob.set(o.jobid, _.pick(o, Object.keys(DicJobKeys))); + let jobClass = jobClassMaxGrades.get(o.job_class); + if (!jobClass || jobClass.grade < o.grade) { + jobClassMaxGrades.set(o.job_class, {grade: o.grade,jobid: o.jobid}); + } + jobClassAndgrades.set(o.job_class+'_'+o.grade,{unlockLevel:o.unlockLevel, jobid:o.jobid}); + + }); + arr = undefined; +} function parseCeAttr(elem) { let ceAttr = new Map(); @@ -59,6 +62,4 @@ function parseCeAttr(elem) { ceAttr.set(ABI_STAGE.DEF, elem.def); ceAttr.set(ABI_STAGE.MDEF, elem.mdef); return ceAttr; -} - -arr = undefined; \ No newline at end of file +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicKingExp.ts b/shared/pubUtils/dictionary/DicKingExp.ts index e45df7e7b..1638f4b44 100644 --- a/shared/pubUtils/dictionary/DicKingExp.ts +++ b/shared/pubUtils/dictionary/DicKingExp.ts @@ -1,5 +1,5 @@ // 主公经验 -import {readJsonFile} from '../util' +import {readFileAndParse} from '../util' import { FILENAME } from '../../consts' export interface DicKingExp { @@ -9,16 +9,17 @@ export interface DicKingExp { readonly exp: number; } -const str = readJsonFile(FILENAME.DIC_KING_EXP); -let arr = JSON.parse(str); - export const dicKingExp = new Map(); export let maxPlayerLv = 0; -let exp = 0; -arr.forEach(o => { - exp += o.exp; - if(o.level > maxPlayerLv) maxPlayerLv = o.level; - dicKingExp.set(o.level, { sum: exp, cur: o.exp }); -}); -arr = null; \ No newline at end of file +export function loadKingExp() { + + let arr = readFileAndParse(FILENAME.DIC_KING_EXP); + let exp = 0; + arr.forEach(o => { + exp += o.exp; + if(o.level > maxPlayerLv) maxPlayerLv = o.level; + dicKingExp.set(o.level, { sum: exp, cur: o.exp }); + }); + arr = null; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicMail.ts b/shared/pubUtils/dictionary/DicMail.ts index b1d078592..ee2420029 100644 --- a/shared/pubUtils/dictionary/DicMail.ts +++ b/shared/pubUtils/dictionary/DicMail.ts @@ -1,5 +1,5 @@ // 邮件内容 -import {readJsonFile} from '../util' +import {readFileAndParse} from '../util' import { FILENAME } from '../../consts' export interface DicMail { @@ -10,13 +10,13 @@ export interface DicMail { readonly time: number; } -const str = readJsonFile(FILENAME.DIC_MAIL); -let arr = JSON.parse(str); - export const dicMail = new Map(); +export function loadMail() { -arr.forEach(o => { - o.time = o.time * 24 * 60 * 60; - dicMail.set(o.id, o); -}); -arr = undefined; \ No newline at end of file + let arr = readFileAndParse(FILENAME.DIC_MAIL); + arr.forEach(o => { + o.time = o.time * 24 * 60 * 60; + dicMail.set(o.id, o); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicMainTaskStage.ts b/shared/pubUtils/dictionary/DicMainTaskStage.ts index 079e5e4df..231efccb8 100644 --- a/shared/pubUtils/dictionary/DicMainTaskStage.ts +++ b/shared/pubUtils/dictionary/DicMainTaskStage.ts @@ -1,5 +1,5 @@ // 主线任务阶段内容 -import {readJsonFile, parseNumberList, parseGoodStr} from '../util' +import {readFileAndParse, parseNumberList, parseGoodStr} from '../util' import { FILENAME } from '../../consts' import { RewardInter } from '../interface'; @@ -14,14 +14,15 @@ export interface DicMainTaskStage { readonly reward: RewardInter[]; } -const str = readJsonFile(FILENAME.DIC_MAIN_TASK_STAGE); -let arr = JSON.parse(str); - export const dicMainTaskStage = new Map(); +export function loadMainTaskStage() { -arr.forEach(o => { - o.mainTaskId = parseNumberList(o.mainTaskId); - o.reward = parseGoodStr(o.reward); - dicMainTaskStage.set(o.id, o); -}); -arr = undefined; \ No newline at end of file + let arr = readFileAndParse(FILENAME.DIC_MAIN_TASK_STAGE); + + arr.forEach(o => { + o.mainTaskId = parseNumberList(o.mainTaskId); + o.reward = parseGoodStr(o.reward); + dicMainTaskStage.set(o.id, o); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicPvpBox.ts b/shared/pubUtils/dictionary/DicPvpBox.ts index d3842c55a..42be72f93 100644 --- a/shared/pubUtils/dictionary/DicPvpBox.ts +++ b/shared/pubUtils/dictionary/DicPvpBox.ts @@ -1,4 +1,4 @@ -import { readJsonFile, parseGoodStr } from '../util' +import { readFileAndParse, parseGoodStr } from '../util' import { FILENAME } from '../../consts' import { RewardInter } from '../interface'; export interface DicPvpBox { @@ -9,12 +9,14 @@ export interface DicPvpBox { } -const str = readJsonFile(FILENAME.DIC_PVP_BOX); -let arr = JSON.parse(str); - export const dicPvpBoxs = new Array(); +export function loadPvpBox() { -arr.forEach(o => { - o.reward = parseGoodStr(o.reward); - dicPvpBoxs.push(o); -}); + let arr = readFileAndParse(FILENAME.DIC_PVP_BOX); + + arr.forEach(o => { + o.reward = parseGoodStr(o.reward); + dicPvpBoxs.push(o); + }); + arr = undefined; +} diff --git a/shared/pubUtils/dictionary/DicPvpHeroReward.ts b/shared/pubUtils/dictionary/DicPvpHeroReward.ts index 6bd320eac..3d8bc7c2c 100644 --- a/shared/pubUtils/dictionary/DicPvpHeroReward.ts +++ b/shared/pubUtils/dictionary/DicPvpHeroReward.ts @@ -1,4 +1,4 @@ -import { readJsonFile, parseGoodStr } from '../util' +import { readFileAndParse, parseGoodStr } from '../util' import { FILENAME } from '../../consts' import { RewardInter } from '../interface'; @@ -11,11 +11,13 @@ export interface DicHeroRewads { } -const str = readJsonFile(FILENAME.DIC_PVP_HERO_REWARD); -let arr = JSON.parse(str); - export const dicHeroRewads = new Array(); -arr.forEach(o => { - o.reward = parseGoodStr(o.reward); - dicHeroRewads.push(o); -}); \ No newline at end of file +export function loadPvpHeroReward() { + let arr = readFileAndParse(FILENAME.DIC_PVP_HERO_REWARD); + + arr.forEach(o => { + o.reward = parseGoodStr(o.reward); + dicHeroRewads.push(o); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicPvpOpponent.ts b/shared/pubUtils/dictionary/DicPvpOpponent.ts index 58e9f0c6a..c5b7ca34a 100644 --- a/shared/pubUtils/dictionary/DicPvpOpponent.ts +++ b/shared/pubUtils/dictionary/DicPvpOpponent.ts @@ -1,5 +1,5 @@ // pvp三个对手 -import {readJsonFile} from '../util' +import {readFileAndParse} from '../util' import { FILENAME } from '../../consts' export interface DicPvpOpponent { @@ -15,13 +15,14 @@ export interface DicPvpOpponent { readonly ratio: number; } -const str = readJsonFile(FILENAME.DIC_PVP_OPPONENT); -let arr = JSON.parse(str); - export const dicPvpOpponent = new Map(); +export function loadPvpOpponent() { -arr.forEach(o => { - dicPvpOpponent.set(o.id, o); -}); + let arr = readFileAndParse(FILENAME.DIC_PVP_OPPONENT); -arr = undefined; \ No newline at end of file + arr.forEach(o => { + dicPvpOpponent.set(o.id, o); + }); + + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicPvpRankReward.ts b/shared/pubUtils/dictionary/DicPvpRankReward.ts index ee8d7c26e..861788d55 100644 --- a/shared/pubUtils/dictionary/DicPvpRankReward.ts +++ b/shared/pubUtils/dictionary/DicPvpRankReward.ts @@ -1,4 +1,4 @@ -import { readJsonFile, parseGoodStr } from '../util' +import { readFileAndParse, parseGoodStr } from '../util' import { FILENAME } from '../../consts' import { RewardInter } from '../interface'; @@ -10,15 +10,18 @@ export interface DicRankRewads { } -const str = readJsonFile(FILENAME.DIC_PVP_RANK_REWARD); -let arr = JSON.parse(str); export const dicRankRewads = new Array(); -export var dicRankMax: DicRankRewads; -arr.forEach(o => { - o.reward = parseGoodStr(o.reward); - if (!dicRankMax||o.min > dicRankMax.min) { - dicRankMax = o; - } - dicRankRewads.push(o); -}); \ No newline at end of file +export let dicRankMax: DicRankRewads; +export function loadPvpRankReward() { + let arr = readFileAndParse(FILENAME.DIC_PVP_RANK_REWARD); + + arr.forEach(o => { + o.reward = parseGoodStr(o.reward); + if (!dicRankMax||o.min > dicRankMax.min) { + dicRankMax = o; + } + dicRankRewads.push(o); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicPvpRefreshConsume.ts b/shared/pubUtils/dictionary/DicPvpRefreshConsume.ts index 1aff3ec42..88c6c4615 100644 --- a/shared/pubUtils/dictionary/DicPvpRefreshConsume.ts +++ b/shared/pubUtils/dictionary/DicPvpRefreshConsume.ts @@ -1,5 +1,5 @@ // pvp三个对手 -import { readJsonFile, parseGoodStr } from '../util' +import { readFileAndParse, parseGoodStr } from '../util' import { FILENAME } from '../../consts' import { RewardInter } from '../interface'; @@ -12,16 +12,17 @@ export interface DicPvpRefreshConsume { readonly consume: RewardInter[] } -const str = readJsonFile(FILENAME.DIC_PVP_REFRESH_CONSUME); -let arr = JSON.parse(str); - export const dicPvpRefreshConsume = new Map(); export let maxPvpRefreshCnt = 0; +export function loadPvpRefreshConsume() { -arr.forEach(o => { - o.consume = parseGoodStr(o.consume); - if(o.count > maxPvpRefreshCnt) maxPvpRefreshCnt = o.count; - dicPvpRefreshConsume.set(o.count, o.consume); -}); + let arr = readFileAndParse(FILENAME.DIC_PVP_REFRESH_CONSUME); -arr = undefined; \ No newline at end of file + arr.forEach(o => { + o.consume = parseGoodStr(o.consume); + if(o.count > maxPvpRefreshCnt) maxPvpRefreshCnt = o.count; + dicPvpRefreshConsume.set(o.count, o.consume); + }); + + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicPvpTeamLevel.ts b/shared/pubUtils/dictionary/DicPvpTeamLevel.ts index 58449ff6a..18b722cdb 100644 --- a/shared/pubUtils/dictionary/DicPvpTeamLevel.ts +++ b/shared/pubUtils/dictionary/DicPvpTeamLevel.ts @@ -1,5 +1,5 @@ // pvp三个对手 -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' import { FILENAME } from '../../consts' export interface DicPvpTeamLevel { @@ -13,13 +13,14 @@ export interface DicPvpTeamLevel { readonly topLineupMax: number; } -const str = readJsonFile(FILENAME.DIC_PVP_TEAM_LEVEL); -let arr = JSON.parse(str); - export const dicPvpTeamLevel = new Array(); +export function loadPvpTeamLevel() { -arr.forEach(o => { - dicPvpTeamLevel.push(o); -}); + let arr = readFileAndParse(FILENAME.DIC_PVP_TEAM_LEVEL); -arr = undefined; \ No newline at end of file + arr.forEach(o => { + dicPvpTeamLevel.push(o); + }); + + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicQuestion.ts b/shared/pubUtils/dictionary/DicQuestion.ts index b0e3e3fcd..da3f33e8a 100644 --- a/shared/pubUtils/dictionary/DicQuestion.ts +++ b/shared/pubUtils/dictionary/DicQuestion.ts @@ -1,5 +1,5 @@ // 奇遇题库 -import {readJsonFile} from '../util' +import {readFileAndParse} from '../util' import { FILENAME } from '../../consts' export interface DicQuestion { @@ -14,15 +14,17 @@ export interface DicQuestion { } -const str = readJsonFile(FILENAME.DIC_QUESTION); -let arr = JSON.parse(str); - export const dicQuestion = new Map(); +export function loadQuestion() { -arr.forEach(o => { - o.answer = parseAnswer(o.a1, o.a2, o.a3, o.a4) - dicQuestion.set(o.id, o); -}); + let arr = readFileAndParse(FILENAME.DIC_QUESTION); + + arr.forEach(o => { + o.answer = parseAnswer(o.a1, o.a2, o.a3, o.a4) + dicQuestion.set(o.id, o); + }); + arr = undefined; +} function parseAnswer(a1: string, a2: string, a3: string, a4: string) { let answer = new Array(); diff --git a/shared/pubUtils/dictionary/DicRMB.ts b/shared/pubUtils/dictionary/DicRMB.ts index 56bade1c2..95404a17a 100644 --- a/shared/pubUtils/dictionary/DicRMB.ts +++ b/shared/pubUtils/dictionary/DicRMB.ts @@ -1,5 +1,5 @@ // RMB商品价格表 -import { readJsonFile } from '../util'; +import { readFileAndParse } from '../util'; import { FILENAME } from '../../consts'; export interface DicRMB { @@ -13,10 +13,12 @@ export interface DicRMB { readonly message: string; } -const str = readJsonFile(FILENAME.DIC_RMB); -let arr = JSON.parse(str); - export const dicRMB = new Map(); -arr.forEach(o => { - dicRMB.set(o.productID, o); -}); +export function loadRMB() { + + let arr = readFileAndParse(FILENAME.DIC_RMB); + arr.forEach(o => { + dicRMB.set(o.productID, o); + }); + arr = undefined; +} diff --git a/shared/pubUtils/dictionary/DicRaceActivity.ts b/shared/pubUtils/dictionary/DicRaceActivity.ts index 54c101ce2..c103525cc 100644 --- a/shared/pubUtils/dictionary/DicRaceActivity.ts +++ b/shared/pubUtils/dictionary/DicRaceActivity.ts @@ -1,5 +1,5 @@ // 粮草先行道具 -import { readJsonFile, parseNumberList } from '../util' +import { readFileAndParse, parseNumberList } from '../util' import { FILENAME } from '../../consts' const _ = require('lodash'); @@ -22,25 +22,26 @@ export interface DicRaceActivity { } - -const str = readJsonFile(FILENAME.DIC_RACE_ACTIVITY); -let arr = JSON.parse(str); - type KeysEnum = { [P in keyof Required]: true }; const DicRaceKeys: KeysEnum = {id: true, type: true, effectType: true, effect: true, continueTime: true, continueDistance: true, effectTime: true}; export const dicRaceActivity = new Map(); export const dicRaceTypes = new Map>(); +export function loadRaceActivity() { -arr.forEach(o => { - o.effectTime = o.effecttime; - o.effect = parseNumberList(o.effect); - dicRaceActivity.set(o.id, _.pick(o, Object.keys(DicRaceKeys))); - if(!dicRaceTypes.has(o.type)) { - dicRaceTypes.set(o.type, new Map()); - } - if(!dicRaceTypes.get(o.type).has(o.effectType)) { - dicRaceTypes.get(o.type).set(o.effectType, []); - } - dicRaceTypes.get(o.type).get(o.effectType).push(o.id); -}); \ No newline at end of file + let arr = readFileAndParse(FILENAME.DIC_RACE_ACTIVITY); + + arr.forEach(o => { + o.effectTime = o.effecttime; + o.effect = parseNumberList(o.effect); + dicRaceActivity.set(o.id, _.pick(o, Object.keys(DicRaceKeys))); + if(!dicRaceTypes.has(o.type)) { + dicRaceTypes.set(o.type, new Map()); + } + if(!dicRaceTypes.get(o.type).has(o.effectType)) { + dicRaceTypes.get(o.type).set(o.effectType, []); + } + dicRaceTypes.get(o.type).get(o.effectType).push(o.id); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicRandomEffectPool.ts b/shared/pubUtils/dictionary/DicRandomEffectPool.ts index 1ec330cf6..8fb253d7f 100644 --- a/shared/pubUtils/dictionary/DicRandomEffectPool.ts +++ b/shared/pubUtils/dictionary/DicRandomEffectPool.ts @@ -1,5 +1,5 @@ // 武将特技表 -import { readJsonFile, parseNumberList } from '../util' +import { readFileAndParse, parseNumberList } from '../util' import { FILENAME } from '../../consts' export interface DicRandomEffectPool { @@ -19,13 +19,13 @@ export interface DicRandomEffectPool { } - -const str = readJsonFile(FILENAME.DIC_RANDOM_EFFECT_POOL); -let arr = JSON.parse(str); - export const dicRandomEffectPool = new Map(); +export function loadRandomEffectPool() { + let arr = readFileAndParse(FILENAME.DIC_RANDOM_EFFECT_POOL); -arr.forEach(o => { - o.gainValueArr = parseNumberList(o.gainValue) - dicRandomEffectPool.set(o.id, o); -}); \ No newline at end of file + arr.forEach(o => { + o.gainValueArr = parseNumberList(o.gainValue) + dicRandomEffectPool.set(o.id, o); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicRank.ts b/shared/pubUtils/dictionary/DicRank.ts index bcea7f824..c2ad88aa7 100644 --- a/shared/pubUtils/dictionary/DicRank.ts +++ b/shared/pubUtils/dictionary/DicRank.ts @@ -1,5 +1,5 @@ // 排行榜表 -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' import { FILENAME } from '../../consts' export interface DicRank { @@ -13,14 +13,14 @@ export interface DicRank { } - -const str = readJsonFile(FILENAME.DIC_RANK); -let arr = JSON.parse(str); - export const dicRank = new Array(); +export function loadRank() { -arr.forEach(o => { - dicRank.push(o); -}); + let arr = readFileAndParse(FILENAME.DIC_RANK); -arr = undefined; \ No newline at end of file + arr.forEach(o => { + dicRank.push(o); + }); + + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicRankReward.ts b/shared/pubUtils/dictionary/DicRankReward.ts index 0def74112..28db1505a 100644 --- a/shared/pubUtils/dictionary/DicRankReward.ts +++ b/shared/pubUtils/dictionary/DicRankReward.ts @@ -1,5 +1,5 @@ // 排行榜奖励表 -import { readJsonFile, parseGoodStr } from '../util' +import { readFileAndParse, parseGoodStr } from '../util' import { FILENAME } from '../../consts' import { RewardInter } from '../interface'; @@ -16,15 +16,15 @@ export interface DicRankReward { } - -const str = readJsonFile(FILENAME.DIC_RANK_REWARD); -let arr = JSON.parse(str); - export const dicRankReward = new Map(); +export function loadRankReward() { -arr.forEach(o => { - o.reward = parseGoodStr(o.reward); - dicRankReward.set(o.id, o); -}); + let arr = readFileAndParse(FILENAME.DIC_RANK_REWARD); -arr = undefined; \ No newline at end of file + arr.forEach(o => { + o.reward = parseGoodStr(o.reward); + dicRankReward.set(o.id, o); + }); + + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicRecruit.ts b/shared/pubUtils/dictionary/DicRecruit.ts index 26f8169b4..53ad1fe3a 100644 --- a/shared/pubUtils/dictionary/DicRecruit.ts +++ b/shared/pubUtils/dictionary/DicRecruit.ts @@ -1,5 +1,5 @@ // 排行榜表 -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' import { FILENAME } from '../../consts' export interface DicRecruit { @@ -13,14 +13,14 @@ export interface DicRecruit { } - -const str = readJsonFile(FILENAME.DIC_RECRUIT); -let arr = JSON.parse(str); - export const dicRecruit = new Array(); +export function loadRecruit() { -arr.forEach(o => { - dicRecruit.push(o); -}); + let arr = readFileAndParse(FILENAME.DIC_RECRUIT); -arr = undefined; \ No newline at end of file + arr.forEach(o => { + dicRecruit.push(o); + }); + + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicRefine.ts b/shared/pubUtils/dictionary/DicRefine.ts index c2357ec93..9c594334e 100644 --- a/shared/pubUtils/dictionary/DicRefine.ts +++ b/shared/pubUtils/dictionary/DicRefine.ts @@ -1,5 +1,5 @@ // 武将特技表 -import { readJsonFile, parseGoodStr } from '../util' +import { readFileAndParse, parseGoodStr } from '../util' import { FILENAME } from '../../consts' import { RewardInter } from '../interface'; @@ -18,15 +18,15 @@ export interface DicRefine { } - -const str = readJsonFile(FILENAME.DIC_REFINE); -let arr = JSON.parse(str); - export const dicRefine = new Map(); +export function loadRefine() { -arr.forEach(o => { - o.material = parseGoodStr(o.material) - dicRefine.set(o.level, o); -}); + let arr = readFileAndParse(FILENAME.DIC_REFINE); -arr = undefined; \ No newline at end of file + arr.forEach(o => { + o.material = parseGoodStr(o.material) + dicRefine.set(o.level, o); + }); + + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicRoleFriend.ts b/shared/pubUtils/dictionary/DicRoleFriend.ts index a02b837d3..c980105a2 100644 --- a/shared/pubUtils/dictionary/DicRoleFriend.ts +++ b/shared/pubUtils/dictionary/DicRoleFriend.ts @@ -1,5 +1,5 @@ // 好友表 -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' import { FILENAME } from '../../consts' export interface DicRoleFriend { @@ -17,14 +17,14 @@ export interface DicRoleFriend { } - -const str = readJsonFile(FILENAME.DIC_ROLE_FRIEND); -let arr = JSON.parse(str); - export const dicRoleFriend = new Map(); +export function loadRoleFriend() { -arr.forEach(o => { - dicRoleFriend.set(o.lv, o); -}); + let arr = readFileAndParse(FILENAME.DIC_ROLE_FRIEND); -arr = undefined; \ No newline at end of file + arr.forEach(o => { + dicRoleFriend.set(o.lv, o); + }); + + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicRoleFriendLv.ts b/shared/pubUtils/dictionary/DicRoleFriendLv.ts index cbc13ef7f..ccb46fc07 100644 --- a/shared/pubUtils/dictionary/DicRoleFriendLv.ts +++ b/shared/pubUtils/dictionary/DicRoleFriendLv.ts @@ -1,5 +1,5 @@ // 亲密度等级表 -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' import { FILENAME } from '../../consts' export interface DicRoleFriendLv { @@ -17,17 +17,18 @@ export interface DicRoleFriendLv { } - -const str = readJsonFile(FILENAME.DIC_ROLE_FRIEND_LEVEL); -let arr = JSON.parse(str); - export const dicRoleFriendLv = new Map(); -let sum = 0; +export function loadRoleFriendLv() { -arr.forEach(o => { - sum += o.value; - o.sum = sum; - dicRoleFriendLv.set(o.lv, o); -}); + let arr = readFileAndParse(FILENAME.DIC_ROLE_FRIEND_LEVEL); -arr = undefined; \ No newline at end of file + let sum = 0; + + arr.forEach(o => { + sum += o.value; + o.sum = sum; + dicRoleFriendLv.set(o.lv, o); + }); + + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicSchool.ts b/shared/pubUtils/dictionary/DicSchool.ts index ac51e6eb6..07b4741ce 100644 --- a/shared/pubUtils/dictionary/DicSchool.ts +++ b/shared/pubUtils/dictionary/DicSchool.ts @@ -1,5 +1,5 @@ // 百家学宫列表 -import { readJsonFile, parseNumberList } from '../util' +import { readFileAndParse, parseNumberList } from '../util' import { FILENAME } from '../../consts' export interface DicSchool { @@ -12,15 +12,15 @@ export interface DicSchool { readonly upAttribute: Array; } - -const str = readJsonFile(FILENAME.DIC_SCHOOL); -let arr = JSON.parse(str); - export const dicSchool = new Map(); +export function loadSchool() { -arr.forEach(o => { - o.upAttribute = parseNumberList(o.upAttribute) - dicSchool.set(o.id, o); -}); + let arr = readFileAndParse(FILENAME.DIC_SCHOOL); -arr = undefined; \ No newline at end of file + arr.forEach(o => { + o.upAttribute = parseNumberList(o.upAttribute) + dicSchool.set(o.id, o); + }); + + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicSchoolRate.ts b/shared/pubUtils/dictionary/DicSchoolRate.ts index 6d932cf7f..b515f0172 100644 --- a/shared/pubUtils/dictionary/DicSchoolRate.ts +++ b/shared/pubUtils/dictionary/DicSchoolRate.ts @@ -1,5 +1,5 @@ // 百家学宫列表 -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' import { FILENAME } from '../../consts' export interface DicSchoolRate { @@ -18,14 +18,14 @@ export interface DicSchoolRate { readonly assiAttrAddValue: number; } - -const str = readJsonFile(FILENAME.DIC_SCHOOL_RATE); -let arr = JSON.parse(str); - export const dicSchoolRate = new Map(); +export function loadSchoolRate() { -arr.forEach(o => { - dicSchoolRate.set(`${o.stars}_${o.colorstars}_${o.quality}`, o); -}); + let arr = readFileAndParse(FILENAME.DIC_SCHOOL_RATE); -arr = undefined; \ No newline at end of file + arr.forEach(o => { + dicSchoolRate.set(`${o.stars}_${o.colorstars}_${o.quality}`, o); + }); + + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicSe.ts b/shared/pubUtils/dictionary/DicSe.ts index 1b44b44e7..e0007c73e 100644 --- a/shared/pubUtils/dictionary/DicSe.ts +++ b/shared/pubUtils/dictionary/DicSe.ts @@ -1,5 +1,5 @@ // 武将特技表 -import { readJsonFile, parseNumberList } from '../util' +import { readFileAndParse, parseNumberList } from '../util' import { FILENAME } from '../../consts' export interface DicSe { @@ -20,14 +20,14 @@ export interface DicSe { readonly index: number; } - -const str = readJsonFile(FILENAME.DIC_SE); -let arr = JSON.parse(str); - export const dicSe = new Map(); +export function loadSe() { + let arr = readFileAndParse(FILENAME.DIC_SE); -arr.forEach(o => { - o.index = 0; - o.gainValueArr = parseNumberList(o.gainvalue) - dicSe.set(o.id, o); -}); \ No newline at end of file + arr.forEach(o => { + o.index = 0; + o.gainValueArr = parseNumberList(o.gainvalue) + dicSe.set(o.id, o); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicShop.ts b/shared/pubUtils/dictionary/DicShop.ts index af83ba6e7..b0ed10a8f 100644 --- a/shared/pubUtils/dictionary/DicShop.ts +++ b/shared/pubUtils/dictionary/DicShop.ts @@ -1,5 +1,5 @@ // 商店商品表 -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' import { FILENAME } from '../../consts' export interface DicShop { @@ -26,20 +26,21 @@ export interface DicShop { readonly price: number; } - -const str = readJsonFile(FILENAME.DIC_SHOP); -let arr = JSON.parse(str); - export const dicShopItem = new Map(); // itemid => DicShop export const dicShop = new Map(); // shop => DicShop[] +export function loadShop() { -arr.forEach(o => { - o.guildLvLimit = o.guildlvlimit == '&'?0: o.guildlvlimit; - o.purchaseLimit = o.purchaselimit == '&'?-1: o.purchaselimit; - if(!dicShop.has(o.shop)) { - dicShop.set(o.shop, [o]); - } else { - dicShop.get(o.shop).push(o); - } - dicShopItem.set(o.id, o); -}); \ No newline at end of file + let arr = readFileAndParse(FILENAME.DIC_SHOP); + + arr.forEach(o => { + o.guildLvLimit = o.guildlvlimit == '&'?0: o.guildlvlimit; + o.purchaseLimit = o.purchaselimit == '&'?-1: o.purchaselimit; + if(!dicShop.has(o.shop)) { + dicShop.set(o.shop, [o]); + } else { + dicShop.get(o.shop).push(o); + } + dicShopItem.set(o.id, o); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicShopList.ts b/shared/pubUtils/dictionary/DicShopList.ts index 6b1706637..f2d4324d5 100644 --- a/shared/pubUtils/dictionary/DicShopList.ts +++ b/shared/pubUtils/dictionary/DicShopList.ts @@ -1,5 +1,5 @@ // 商店表 -import { readJsonFile, parseNumberList } from '../util' +import { readFileAndParse, parseNumberList } from '../util' import { FILENAME } from '../../consts' export interface DicShopList { @@ -13,14 +13,14 @@ export interface DicShopList { readonly money: number[]; } - -const str = readJsonFile(FILENAME.DIC_SHOP_LIST); -let arr = JSON.parse(str); - export const dicShopList = new Map(); +export function loadShopList() { + let arr = readFileAndParse(FILENAME.DIC_SHOP_LIST); -arr.forEach(o => { - o.type = parseNumberList(o.typeid); - o.money = parseNumberList(o.moneyid); - dicShopList.set(o.shopid, o); -}); \ No newline at end of file + arr.forEach(o => { + o.type = parseNumberList(o.typeid); + o.money = parseNumberList(o.moneyid); + dicShopList.set(o.shopid, o); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicStrengthenCost.ts b/shared/pubUtils/dictionary/DicStrengthenCost.ts index 7727ba3e3..9f0096547 100644 --- a/shared/pubUtils/dictionary/DicStrengthenCost.ts +++ b/shared/pubUtils/dictionary/DicStrengthenCost.ts @@ -1,5 +1,5 @@ // 强化消耗表 -import {readJsonFile} from '../util' +import {readFileAndParse} from '../util' import { FILENAME } from '../../consts' export interface DicStrengthenCost { @@ -9,11 +9,12 @@ export interface DicStrengthenCost { readonly costCoin: number; } -const str = readJsonFile(FILENAME.DIC_STRENGTHEN_COST); -let arr = JSON.parse(str); - export const dicStrengthenCost = new Map(); +export function loadStrengthenCost() { + let arr = readFileAndParse(FILENAME.DIC_STRENGTHEN_COST); -arr.forEach(o => { - dicStrengthenCost.set(o.level, o.costCoin); -}); \ No newline at end of file + arr.forEach(o => { + dicStrengthenCost.set(o.level, o.costCoin); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicStructure.ts b/shared/pubUtils/dictionary/DicStructure.ts index 342c14be9..7971c08d3 100644 --- a/shared/pubUtils/dictionary/DicStructure.ts +++ b/shared/pubUtils/dictionary/DicStructure.ts @@ -1,5 +1,5 @@ // 军团建筑物 -import {readJsonFile, parseGoodStr, parseNumberList, decodeArrayListStr} from '../util' +import {readFileAndParse, parseGoodStr, parseNumberList, decodeArrayListStr} from '../util' import { FILENAME } from '../../consts' import { RewardInter } from '../interface'; const _ = require('lodash'); @@ -146,11 +146,6 @@ export interface DicStoreBase { readonly storeGoods: {id: number, count: number, num: number}[]; } -const DicStoreKeys: KeysEnum = { - id: true, - level: true, - storeGoods: true -}; export const dicStructureConsume = new Map>(); // 升级消耗 structureId => level => consume export const dicCenterBase = new Map(); // 中军大帐 @@ -163,96 +158,97 @@ export const dicWishPoolBase = new Map(); // 许愿池 export const dicStoreBase = new Map(); // 许愿池 export let maxMemberCnt = 0; // 满配最大人数 -// 中军大帐 -const strCenter = readJsonFile(FILENAME.DIC_GUILD_STRUCTURE_CENTER); -let arrCenter = JSON.parse(strCenter); -arrCenter.forEach(o => { - setStructureConsume(o); - if(o.peopleNum > maxMemberCnt) maxMemberCnt = o.peopleNum; - dicCenterBase.set(o.level, _.pick(o, Object.keys(DicCenterKeys))); -}); -arrCenter = undefined; +export function loadStructure() { -// 炼器堂 -const strEquip = readJsonFile(FILENAME.DIC_GUILD_EQUIP_PRODUCE_BASE); -let arrEquip = JSON.parse(strEquip); -arrEquip.forEach(o => { - setStructureConsume(o); - o.qualityProduce = parseNumberList(o.qualityProduce); - dicEquipPriduceBase.set(o.level, _.pick(o, Object.keys(DicEquipProduceKeys))); -}); -arrEquip = undefined; - -// 演武台 -const strBoss = readJsonFile(FILENAME.DIC_GUILD_BOSS_BASE); -let arrBoss = JSON.parse(strBoss); -arrBoss.forEach(o => { - setStructureConsume(o); - o.reward = parseGoodStr(o.reward); - o.wars = o.warIdHP.split('|').map((warStrs)=> { - if (!warStrs) { - return; - } - let warArr = warStrs.split('&'); - return { warId: parseInt(warArr[0]), bossHp: parseInt(warArr[1])} + const DicStoreKeys: KeysEnum = { + id: true, + level: true, + storeGoods: true + }; + // 中军大帐 + let arrCenter = readFileAndParse(FILENAME.DIC_GUILD_STRUCTURE_CENTER); + arrCenter.forEach(o => { + setStructureConsume(o); + if(o.peopleNum > maxMemberCnt) maxMemberCnt = o.peopleNum; + dicCenterBase.set(o.level, _.pick(o, Object.keys(DicCenterKeys))); }); - dicBossBase.set(o.level, _.pick(o, Object.keys(DicBossKeys))); - dicBossBaseByBossLv.set(o.bossLevel, _.pick(o, Object.keys(DicBossKeys))); -}); -arrBoss = undefined; + arrCenter = undefined; -// 练兵场 -const strTrain = readJsonFile(FILENAME.DIC_GUILD_TRAIN_BASE); -let arrTrain = JSON.parse(strTrain); -arrTrain.forEach(o => { - setStructureConsume(o); - dicTrainBase.set(o.level, _.pick(o, Object.keys(DicTrainKeys))); -}); -arrTrain = undefined; - -// 捐献所 -const strDonate = readJsonFile(FILENAME.DIC_GUILD_DONATE_BASE); -let arrDonate = JSON.parse(strDonate); -arrDonate.forEach(o => { - setStructureConsume(o); - o.donateReward = parseDonateReward(o.donatevalue, o.honourReward, o.fundReward); - dicDonateBase.set(o.level, _.pick(o, Object.keys(DicDonateKeys))); -}); -arrDonate = undefined; - -// 许愿池 -const strWishPool = readJsonFile(FILENAME.DIC_GUILD_WISH_POOL_BASE); -let arrWishPool = JSON.parse(strWishPool); -arrWishPool.forEach(o => { - setStructureConsume(o); - o.wishGoodsEquips = o.wishgoodsEquip.split('|').map(wishGoodsEquip=>{ - let wishGoodsEquips = wishGoodsEquip.split('&'); - return {quality: parseInt(wishGoodsEquips[0]), count: parseInt(wishGoodsEquips[1])}; + // 炼器堂 + let arrEquip = readFileAndParse(FILENAME.DIC_GUILD_EQUIP_PRODUCE_BASE); + arrEquip.forEach(o => { + setStructureConsume(o); + o.qualityProduce = parseNumberList(o.qualityProduce); + dicEquipPriduceBase.set(o.level, _.pick(o, Object.keys(DicEquipProduceKeys))); }); - o.wishGoodsHeros = o.wishgoodsHero.split('|').map(wishGoodsHero=>{ - let wishGoodsHeros = wishGoodsHero.split('&'); - return {quality: parseInt(wishGoodsHeros[0]), count: parseInt(wishGoodsHeros[1])}; + arrEquip = undefined; + + // 演武台 + let arrBoss = readFileAndParse(FILENAME.DIC_GUILD_BOSS_BASE); + arrBoss.forEach(o => { + setStructureConsume(o); + o.reward = parseGoodStr(o.reward); + o.wars = o.warIdHP.split('|').map((warStrs)=> { + if (!warStrs) { + return; + } + let warArr = warStrs.split('&'); + return { warId: parseInt(warArr[0]), bossHp: parseInt(warArr[1])} + }); + dicBossBase.set(o.level, _.pick(o, Object.keys(DicBossKeys))); + dicBossBaseByBossLv.set(o.bossLevel, _.pick(o, Object.keys(DicBossKeys))); }); - dicWishPoolBase.set(o.level, _.pick(o, Object.keys(DicWishPoolKeys))); -}); -arrWishPool = undefined; + arrBoss = undefined; -// 商店 -const strStore = readJsonFile(FILENAME.DIC_GUILD_STORE_BASE); -let arrStore = JSON.parse(strStore); -arrStore.forEach(o => { - setStructureConsume(o); - o.storeGoods = parseStoreGoods(o.storeGoods); - dicStoreBase.set(o.level, _.pick(o, Object.keys(DicStoreKeys))); -}); -arrStore = undefined; + // 练兵场 + let arrTrain = readFileAndParse(FILENAME.DIC_GUILD_TRAIN_BASE); + arrTrain.forEach(o => { + setStructureConsume(o); + dicTrainBase.set(o.level, _.pick(o, Object.keys(DicTrainKeys))); + }); + arrTrain = undefined; -// 升级消耗 -function setStructureConsume(o) { - let map = dicStructureConsume.get(o.structureId); - if(!map) map = new Map(); - map.set(o.level, o.consume); - dicStructureConsume.set(o.structureId, map); + // 捐献所 + let arrDonate = readFileAndParse(FILENAME.DIC_GUILD_DONATE_BASE); + arrDonate.forEach(o => { + setStructureConsume(o); + o.donateReward = parseDonateReward(o.donatevalue, o.honourReward, o.fundReward); + dicDonateBase.set(o.level, _.pick(o, Object.keys(DicDonateKeys))); + }); + arrDonate = undefined; + + // 许愿池 + let arrWishPool = readFileAndParse(FILENAME.DIC_GUILD_WISH_POOL_BASE); + arrWishPool.forEach(o => { + setStructureConsume(o); + o.wishGoodsEquips = o.wishgoodsEquip.split('|').map(wishGoodsEquip=>{ + let wishGoodsEquips = wishGoodsEquip.split('&'); + return {quality: parseInt(wishGoodsEquips[0]), count: parseInt(wishGoodsEquips[1])}; + }); + o.wishGoodsHeros = o.wishgoodsHero.split('|').map(wishGoodsHero=>{ + let wishGoodsHeros = wishGoodsHero.split('&'); + return {quality: parseInt(wishGoodsHeros[0]), count: parseInt(wishGoodsHeros[1])}; + }); + dicWishPoolBase.set(o.level, _.pick(o, Object.keys(DicWishPoolKeys))); + }); + arrWishPool = undefined; + + // 商店 + let arrStore = readFileAndParse(FILENAME.DIC_GUILD_STORE_BASE); + arrStore.forEach(o => { + setStructureConsume(o); + o.storeGoods = parseStoreGoods(o.storeGoods); + dicStoreBase.set(o.level, _.pick(o, Object.keys(DicStoreKeys))); + }); + arrStore = undefined; + + // 升级消耗 + function setStructureConsume(o) { + let map = dicStructureConsume.get(o.structureId); + if(!map) map = new Map(); + map.set(o.level, o.consume); + dicStructureConsume.set(o.structureId, map); + } } // {"type": number, "count": number} diff --git a/shared/pubUtils/dictionary/DicSuit.ts b/shared/pubUtils/dictionary/DicSuit.ts index 3d1ea43d9..528c33ce0 100644 --- a/shared/pubUtils/dictionary/DicSuit.ts +++ b/shared/pubUtils/dictionary/DicSuit.ts @@ -1,5 +1,5 @@ // 镇念塔表 -import { decodeArrayListStr, readJsonFile, parseNumberList } from '../util' +import { decodeArrayListStr, readFileAndParse, parseNumberList } from '../util' import { FILENAME } from '../../consts'; export interface DicSuit { @@ -14,17 +14,18 @@ export interface DicSuit { readonly tireInfo: Array; } -const str = readJsonFile(FILENAME.DIC_SUIT); -let arr = JSON.parse(str); export const dicSuit = new Map(); +export function loadSuit() { + let arr = readFileAndParse(FILENAME.DIC_SUIT); -arr.forEach(o => { - o.effect = parseSuitEffect(o.effect); - o.tireInfo = parseNumberList(o.tireInfo); - dicSuit.set(o.id, o); -}); -arr = undefined; + arr.forEach(o => { + o.effect = parseSuitEffect(o.effect); + o.tireInfo = parseNumberList(o.tireInfo); + dicSuit.set(o.id, o); + }); + arr = undefined; +} function parseSuitEffect(str: string) { let result = new Array<{ count: number, seid: number }>(); diff --git a/shared/pubUtils/dictionary/DicTask.ts b/shared/pubUtils/dictionary/DicTask.ts index 0d0621078..b8316c23f 100644 --- a/shared/pubUtils/dictionary/DicTask.ts +++ b/shared/pubUtils/dictionary/DicTask.ts @@ -1,6 +1,6 @@ // 任务 import { RewardInter } from '../interface'; -import { readJsonFile, parseNumberList, parseGoodStr } from '../util'; +import { readFileAndParse, parseNumberList, parseGoodStr } from '../util'; import { FILENAME, TASK_FUN_TYPE} from '../../consts'; const _ = require('lodash'); @@ -95,36 +95,33 @@ taskMap.set(TASK_FUN_TYPE.DAILY, dicDailyTask); taskMap.set(TASK_FUN_TYPE.ACHIEVEMENT, dicAchievement); export const dicTaskType = new Map(); +export function loadTask() { -const mainTask = readJsonFile(FILENAME.DIC_MAIN_TASK); -let arrMainTask = JSON.parse(mainTask); -arrMainTask.forEach(o => { - o.taskParam = parseNumberList(o.taskParam); - o.taskReward = parseGoodStr(o.taskReward); - dicMainTask.set(o.id, _.pick(o, Object.keys(DicMainTaskKeys))); - pushDicTaskType(o.taskType, TASK_FUN_TYPE.MAIN, o); -}); -arrMainTask = undefined; - -const dailyTask = readJsonFile(FILENAME.DIC_DAILY_TASK); -let arrDailyTask = JSON.parse(dailyTask); -arrDailyTask.forEach(o => { - o.taskParam = parseNumberList(o.taskParam); - o.taskReward = parseGoodStr(o.taskReward); - dicDailyTask.set(o.id, _.pick(o, Object.keys(DicDailyTaskKeys))); - pushDicTaskType(o.taskType, TASK_FUN_TYPE.DAILY, o); -}); -arrDailyTask = undefined; - -const achievement = readJsonFile(FILENAME.DIC_ACHIEVEMENT); -let arrAchievement = JSON.parse(achievement); -arrAchievement.forEach(o => { - o.taskParam = parseNumberList(o.taskParam); - o.taskReward = parseGoodStr(o.taskReward); - dicAchievement.set(o.id, _.pick(o, Object.keys(DicAchievementKeys))); - pushDicTaskType(o.taskType, TASK_FUN_TYPE.ACHIEVEMENT, o); -}); -arrAchievement = undefined; + const arrMainTask = readFileAndParse(FILENAME.DIC_MAIN_TASK); + arrMainTask.forEach(o => { + o.taskParam = parseNumberList(o.taskParam); + o.taskReward = parseGoodStr(o.taskReward); + dicMainTask.set(o.id, _.pick(o, Object.keys(DicMainTaskKeys))); + pushDicTaskType(o.taskType, TASK_FUN_TYPE.MAIN, o); + }); + + const arrDailyTask = readFileAndParse(FILENAME.DIC_DAILY_TASK); + arrDailyTask.forEach(o => { + o.taskParam = parseNumberList(o.taskParam); + o.taskReward = parseGoodStr(o.taskReward); + dicDailyTask.set(o.id, _.pick(o, Object.keys(DicDailyTaskKeys))); + pushDicTaskType(o.taskType, TASK_FUN_TYPE.DAILY, o); + }); + + const arrAchievement = readFileAndParse(FILENAME.DIC_ACHIEVEMENT); + arrAchievement.forEach(o => { + o.taskParam = parseNumberList(o.taskParam); + o.taskReward = parseGoodStr(o.taskReward); + dicAchievement.set(o.id, _.pick(o, Object.keys(DicAchievementKeys))); + pushDicTaskType(o.taskType, TASK_FUN_TYPE.ACHIEVEMENT, o); + }); + +} function pushDicTaskType(taskType: number, type: number, o: any) { if(!dicTaskType.has(taskType)) { diff --git a/shared/pubUtils/dictionary/DicTaskBox.ts b/shared/pubUtils/dictionary/DicTaskBox.ts index 67c2d11eb..311c957f7 100644 --- a/shared/pubUtils/dictionary/DicTaskBox.ts +++ b/shared/pubUtils/dictionary/DicTaskBox.ts @@ -1,5 +1,5 @@ // 主线任务阶段内容 -import {readJsonFile, parseGoodStr} from '../util' +import {readFileAndParse, parseGoodStr} from '../util' import { FILENAME, TASK_FUN_TYPE } from '../../consts' import { RewardInter } from '../interface'; @@ -13,25 +13,25 @@ export interface DicTaskBox { } export const dicTaskBox = new Map>(); +export function loadTaskBox() { -const str1 = readJsonFile(FILENAME.DIC_TASK_BOX); -let arr1 = JSON.parse(str1); -arr1.forEach(o => { - if(!dicTaskBox.has(TASK_FUN_TYPE.DAILY)) { - dicTaskBox.set(TASK_FUN_TYPE.DAILY, new Map()); - } - o.reward = parseGoodStr(o.reward); - dicTaskBox.get(TASK_FUN_TYPE.DAILY).set(o.id, o); -}); -arr1 = undefined; - -const str2 = readJsonFile(FILENAME.DIC_ACHIEVEMENT_BOX); -let arr2 = JSON.parse(str2); -arr2.forEach(o => { - if(!dicTaskBox.has(TASK_FUN_TYPE.ACHIEVEMENT)) { - dicTaskBox.set(TASK_FUN_TYPE.ACHIEVEMENT, new Map()); - } - o.reward = parseGoodStr(o.reward); - dicTaskBox.get(TASK_FUN_TYPE.ACHIEVEMENT).set(o.id, o); -}); -arr2 = undefined; \ No newline at end of file + let arr1 = readFileAndParse(FILENAME.DIC_TASK_BOX); + arr1.forEach(o => { + if(!dicTaskBox.has(TASK_FUN_TYPE.DAILY)) { + dicTaskBox.set(TASK_FUN_TYPE.DAILY, new Map()); + } + o.reward = parseGoodStr(o.reward); + dicTaskBox.get(TASK_FUN_TYPE.DAILY).set(o.id, o); + }); + arr1 = undefined; + + let arr2 = readFileAndParse(FILENAME.DIC_ACHIEVEMENT_BOX); + arr2.forEach(o => { + if(!dicTaskBox.has(TASK_FUN_TYPE.ACHIEVEMENT)) { + dicTaskBox.set(TASK_FUN_TYPE.ACHIEVEMENT, new Map()); + } + o.reward = parseGoodStr(o.reward); + dicTaskBox.get(TASK_FUN_TYPE.ACHIEVEMENT).set(o.id, o); + }); + arr2 = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicTeraph.ts b/shared/pubUtils/dictionary/DicTeraph.ts index 07189fac9..f1bf1fb75 100644 --- a/shared/pubUtils/dictionary/DicTeraph.ts +++ b/shared/pubUtils/dictionary/DicTeraph.ts @@ -1,5 +1,5 @@ // 物品表 -import { decodeArrayListStr, readJsonFile, parseGoodStr } from '../util' +import { decodeArrayListStr, readFileAndParse, parseGoodStr } from '../util' import { FILENAME, ABI_TYPE} from '../../consts' import { RewardInter } from '../interface'; const _ = require('lodash'); @@ -25,34 +25,36 @@ export interface DicTeraph { readonly assiAttrValue:Map; // 次级属性 readonly upGradeMaterial:Array; } - -const str = readJsonFile(FILENAME.DIC_TERAPH); -let arr = JSON.parse(str); - -type KeysEnum = { [P in keyof Required]: true }; -const DicTeraphKeys: KeysEnum = { - id: true, - index: true, - grade: true, - mainAttrMax: true, - mainAttrUp: true, - criRate: true, - criEffect: true, - upMaterial: true, - assiAttrValue: true, - upGradeMaterial: true, -} export const dicTeraph = new Map(); -arr.forEach(o => { - o.assiAttrValue = parseAttr(o.assiAttrValue); - o.upGradeMaterial = parseGoodStr(o.upGradeMaterial); - o.upMaterial = parseGoodStr(o.upMaterial); - o.mainAttrMax = parseMainAttrMax(o); - o.mainAttrUp = parseMainAttrUp(o); - dicTeraph.set(o.index + '_' + o.grade, _.pick(o, Object.keys(DicTeraphKeys))); -}); +export function loadTeraph() { -arr = undefined; + let arr = readFileAndParse(FILENAME.DIC_TERAPH); + + type KeysEnum = { [P in keyof Required]: true }; + const DicTeraphKeys: KeysEnum = { + id: true, + index: true, + grade: true, + mainAttrMax: true, + mainAttrUp: true, + criRate: true, + criEffect: true, + upMaterial: true, + assiAttrValue: true, + upGradeMaterial: true, + } + + arr.forEach(o => { + o.assiAttrValue = parseAttr(o.assiAttrValue); + o.upGradeMaterial = parseGoodStr(o.upGradeMaterial); + o.upMaterial = parseGoodStr(o.upMaterial); + o.mainAttrMax = parseMainAttrMax(o); + o.mainAttrUp = parseMainAttrUp(o); + dicTeraph.set(o.index + '_' + o.grade, _.pick(o, Object.keys(DicTeraphKeys))); + }); + + arr = undefined; +} function parseAttr(str: string) { let result = new Map(); diff --git a/shared/pubUtils/dictionary/DicTitle.ts b/shared/pubUtils/dictionary/DicTitle.ts index b9fd3c5a0..da20679ee 100644 --- a/shared/pubUtils/dictionary/DicTitle.ts +++ b/shared/pubUtils/dictionary/DicTitle.ts @@ -1,5 +1,5 @@ // 物品表 -import { decodeArrayListStr, readJsonFile, parseGoodStr } from '../util' +import { decodeArrayListStr, readFileAndParse, parseGoodStr } from '../util' import { FILENAME, ABI_TYPE} from '../../consts' const _ = require('lodash'); @@ -19,9 +19,6 @@ export interface DicTitle { readonly material:Array<{id: number, number: number}>; } -const str = readJsonFile(FILENAME.DIC_TITLE); -let arr = JSON.parse(str); - type KeysEnum = { [P in keyof Required]: true }; const DicTitleKeys: KeysEnum = { id: true, @@ -31,14 +28,19 @@ const DicTitleKeys: KeysEnum = { material: true } export const dicTitle = new Map(); -arr.forEach(o => { - o.mainAttrValue = parseMainAttr(o); - o.assiAttrValue = parseAttr(o.assiAttrValue); - o.material = parseGoodStr(o.material); - dicTitle.set(o.id, _.pick(o, Object.keys(DicTitleKeys))); -}); +export function loadTitle() { -arr = undefined; + let arr = readFileAndParse(FILENAME.DIC_TITLE); + + arr.forEach(o => { + o.mainAttrValue = parseMainAttr(o); + o.assiAttrValue = parseAttr(o.assiAttrValue); + o.material = parseGoodStr(o.material); + dicTitle.set(o.id, _.pick(o, Object.keys(DicTitleKeys))); + }); + + arr = undefined; +} function parseAttr(str: string) { let result = new Map(); diff --git a/shared/pubUtils/dictionary/DicTower.ts b/shared/pubUtils/dictionary/DicTower.ts index e14b1f0a8..5b00209da 100644 --- a/shared/pubUtils/dictionary/DicTower.ts +++ b/shared/pubUtils/dictionary/DicTower.ts @@ -1,5 +1,5 @@ // 镇念塔表 -import {parseGoodStr, decodeArrayListStr, readJsonFile, parseNumberList} from '../util' +import {parseGoodStr, decodeArrayListStr, readFileAndParse, parseNumberList} from '../util' import { FILENAME } from '../../consts'; import { RewardInter } from '../../pubUtils/interface'; @@ -14,17 +14,19 @@ export interface DicTower { readonly rewardOfcollect: Array; } -const str = readJsonFile(FILENAME.DIC_TOWER); -let arr = JSON.parse(str); export const dicTower = new Map(); +export function loadTower() { + let arr = readFileAndParse(FILENAME.DIC_TOWER); -arr.forEach(o => { - o.warArray = parseNumberList(o.warArray); - o.reward = parseGoodStr(o.reward); - o.rewardOfcollect = parseGoodStrOfCollect(o.rewardOfcollect); - dicTower.set(o.towerFloor, o); -}); + arr.forEach(o => { + o.warArray = parseNumberList(o.warArray); + o.reward = parseGoodStr(o.reward); + o.rewardOfcollect = parseGoodStrOfCollect(o.rewardOfcollect); + dicTower.set(o.towerFloor, o); + }); + arr = undefined; +} function parseGoodStrOfCollect(str: string) { let result = new Array<{id: number, count: number}>(); diff --git a/shared/pubUtils/dictionary/DicTowerTask.ts b/shared/pubUtils/dictionary/DicTowerTask.ts index 2d357e40b..c10e50a34 100644 --- a/shared/pubUtils/dictionary/DicTowerTask.ts +++ b/shared/pubUtils/dictionary/DicTowerTask.ts @@ -1,5 +1,5 @@ // 镇念塔派遣任务表 -import {parseGoodStr, decodeArrayListStr, decodeArrayStr, readJsonFile} from '../util' +import {parseGoodStr, decodeArrayListStr, decodeArrayStr, readFileAndParse} from '../util' import { FILENAME } from '../../consts'; import { RewardInter } from '../interface'; @@ -32,18 +32,19 @@ export interface DicTowerTask { } -const str = readJsonFile(FILENAME.DIC_TOWER_TASK); -let arr = JSON.parse(str); - export const dicTowerTask = new Map(); +export function loadTowerTask() { + let arr = readFileAndParse(FILENAME.DIC_TOWER_TASK); -arr.forEach(o => { - o.reward = parseGoodStr(o.reward); - o.additionalReward = parseGoodStr(o.additionalReward); - o.termsForAdd = parseTermsForAdd(o.termsForAdd); - o.suitFloor = parseSuitFloor(o.suitFloor as string); - dicTowerTask.set(o.taskId, o); -}); + arr.forEach(o => { + o.reward = parseGoodStr(o.reward); + o.additionalReward = parseGoodStr(o.additionalReward); + o.termsForAdd = parseTermsForAdd(o.termsForAdd); + o.suitFloor = parseSuitFloor(o.suitFloor as string); + dicTowerTask.set(o.taskId, o); + }); + arr = undefined; +} function parseTermsForAdd(str: string) { let result = new Array<{type: number, param: number, count: number}>(); diff --git a/shared/pubUtils/dictionary/DicTrainSoloReward.ts b/shared/pubUtils/dictionary/DicTrainSoloReward.ts index a86fec8a4..faeafb03b 100644 --- a/shared/pubUtils/dictionary/DicTrainSoloReward.ts +++ b/shared/pubUtils/dictionary/DicTrainSoloReward.ts @@ -1,4 +1,4 @@ -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' import { FILENAME } from '../../consts' type KeysEnum = { [P in keyof Required]: true }; const _ = require('lodash'); @@ -24,27 +24,29 @@ const DicTrainSoloRewardKeys: KeysEnum = { failHonour: true, }; -const str = readJsonFile(FILENAME.DIC_ARMY_TRAIN_SOLO_REWARD); -let arr = JSON.parse(str); - export const dicTrainSoloReward = new Map(); -arr.forEach(o => { - o.winReward.split('|').map(cur=>{ - let arr = cur.split('&'); - if (arr[0] == 1) { - o.winScore = parseInt(arr[1]); - } else if (arr[0] == 2) { - o.winHonour = parseInt(arr[1]); - } - }) - o.failReward.split('|').map(cur=>{ - let arr = cur.split('&'); - if (arr[0] == 1) { - o.failScore = parseInt(arr[1]); - } else if (arr[0] == 2) { - o.failHonour = parseInt(arr[1]); - } - }) - dicTrainSoloReward.set(o.id,_.pick(o, Object.keys(DicTrainSoloRewardKeys))); -}); -arr = undefined; \ No newline at end of file +export function loadTrainSoloReward() { + + let arr = readFileAndParse(FILENAME.DIC_ARMY_TRAIN_SOLO_REWARD); + + arr.forEach(o => { + o.winReward.split('|').map(cur=>{ + let arr = cur.split('&'); + if (arr[0] == 1) { + o.winScore = parseInt(arr[1]); + } else if (arr[0] == 2) { + o.winHonour = parseInt(arr[1]); + } + }) + o.failReward.split('|').map(cur=>{ + let arr = cur.split('&'); + if (arr[0] == 1) { + o.failScore = parseInt(arr[1]); + } else if (arr[0] == 2) { + o.failHonour = parseInt(arr[1]); + } + }) + dicTrainSoloReward.set(o.id,_.pick(o, Object.keys(DicTrainSoloRewardKeys))); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicWar.ts b/shared/pubUtils/dictionary/DicWar.ts index ee571561e..666b1ffe5 100644 --- a/shared/pubUtils/dictionary/DicWar.ts +++ b/shared/pubUtils/dictionary/DicWar.ts @@ -1,5 +1,5 @@ // 关卡表 -import {decodeArrayListStr, decodeArrayStr, readJsonFile} from '../util' +import {decodeArrayListStr, decodeArrayStr, readFileAndParse} from '../util' import { WAR_RELATE_TABLES, WAR_TYPE } from '../../consts'; export interface DicWar { @@ -37,28 +37,28 @@ export interface DicWar { export const dicWar = new Map(); export const dicWarPvp = new Array(); export const dicDailyWarByType = new Map(); - -for(let filename of WAR_RELATE_TABLES) { - const str = readJsonFile(filename); - let arr = JSON.parse(str); - - arr.forEach(o => { - o.fixReward = parseFixReward(o.fixReward); - o.conditionReward = parseConditionReward(o.conditionReward); - o.parseRandomReward = parseRandomReward(o.parseRandomReward); - o.detailUIBg = parseDetailUIBg(o.detailUIBg); - o.jackpotReward = parseJackpotReward(o.jackpotReward); - - dicWar.set(o.war_id, o); - if(o.warType == WAR_TYPE.PVP) { - dicWarPvp.push(o); - } else if (o.warType == WAR_TYPE.DAILY) { - if(!dicDailyWarByType.has(o.dailyType)) { - dicDailyWarByType.set(o.dailyType, []); +export function loadWar() { + for(let filename of WAR_RELATE_TABLES) { + let arr = readFileAndParse(filename); + + arr.forEach(o => { + o.fixReward = parseFixReward(o.fixReward); + o.conditionReward = parseConditionReward(o.conditionReward); + o.parseRandomReward = parseRandomReward(o.parseRandomReward); + o.detailUIBg = parseDetailUIBg(o.detailUIBg); + o.jackpotReward = parseJackpotReward(o.jackpotReward); + + dicWar.set(o.war_id, o); + if(o.warType == WAR_TYPE.PVP) { + dicWarPvp.push(o); + } else if (o.warType == WAR_TYPE.DAILY) { + if(!dicDailyWarByType.has(o.dailyType)) { + dicDailyWarByType.set(o.dailyType, []); + } + dicDailyWarByType.get(o.dailyType).push(o); } - dicDailyWarByType.get(o.dailyType).push(o); - } - }); + }); + } } function parseFixReward(str: string = '') { diff --git a/shared/pubUtils/dictionary/DicWarJson.ts b/shared/pubUtils/dictionary/DicWarJson.ts index 59164e77d..ab691bdef 100644 --- a/shared/pubUtils/dictionary/DicWarJson.ts +++ b/shared/pubUtils/dictionary/DicWarJson.ts @@ -1,5 +1,5 @@ // 关卡表 -import {decodeArrayListStr, readWarJsonFileList} from '../util' +import {decodeArrayListStr, readWarJsonFileAndParse} from '../util' export interface DicWarJson { @@ -49,18 +49,19 @@ export interface DicWarJson { } export const dicWarJson = new Map>(); -readWarJsonFileList().forEach(str => { - let arr = JSON.parse(str); - - let warjson = new Array(); - let warid = 0; - arr.forEach(o => { - o.attribute = parseAttribute(o.attribute); - warid = o.warId; - warjson.push(o); - }); - dicWarJson.set(warid, warjson); -}) +export function loadWarJson() { + readWarJsonFileAndParse().forEach(arr => { + + let warjson = new Array(); + let warid = 0; + arr.forEach(o => { + o.attribute = parseAttribute(o.attribute); + warid = o.warId; + warjson.push(o); + }); + dicWarJson.set(warid, warjson); + }) +} export function parseAttribute(str: string) { let result = new Array<{ id: number, val: number }>(); diff --git a/shared/pubUtils/dictionary/DicXunbao.ts b/shared/pubUtils/dictionary/DicXunbao.ts index 0bac75ffb..1d7211dbf 100644 --- a/shared/pubUtils/dictionary/DicXunbao.ts +++ b/shared/pubUtils/dictionary/DicXunbao.ts @@ -1,5 +1,5 @@ // 寻宝表 -import { readJsonFile } from '../util' +import { readFileAndParse } from '../util' import { FILENAME } from '../../consts' export interface DicXunbao { @@ -14,10 +14,12 @@ export interface DicXunbao { // readonly assistanceLevel: number; } -const str = readJsonFile(FILENAME.DIC_XUNBAO); -let arr = JSON.parse(str); - export const dicXunbao = new Map(); -arr.forEach(o => { - dicXunbao.set(o.quality, o); -}); +export function loadXunbao() { + let arr = readFileAndParse(FILENAME.DIC_XUNBAO); + + arr.forEach(o => { + dicXunbao.set(o.quality, o); + }); + arr = undefined; +} diff --git a/shared/pubUtils/util.ts b/shared/pubUtils/util.ts index 569016745..24a4b9d7d 100644 --- a/shared/pubUtils/util.ts +++ b/shared/pubUtils/util.ts @@ -397,10 +397,40 @@ export function readWarJsonFileList() { return fs.readdirSync(__dirname + `/../resource/${folder}`) .filter(cur => { return cur.indexOf('.') != 0 }) .map(file => { - return fs.readFileSync(path.resolve(__dirname, `../resource/${folder}/${file}`)).toString('utf8'); + return { + name: file, + str: fs.readFileSync(path.resolve(__dirname, `../resource/${folder}/${file}`)).toString('utf8') + } }); } +export function readTsFile(fileName: string) { + let file = fs.readFileSync(path.resolve(__dirname, `../pubUtils/${fileName}.ts`)).toString('utf8').replace(/^\uFEFF/, ''); + return file; +} + +export function readFileAndParse(fileName: string) { + try { + let readResult = readJsonFile(fileName); + return JSON.parse(readResult); + } catch(e) { + throw new Error(`${fileName}格式错误:${e.message}`); + } +} + +export function readWarJsonFileAndParse() { + let warJsons = readWarJsonFileList(); + let result = []; + for(let { name, str } of warJsons) { + try { + let json = JSON.parse(str); + result.push(json); + } catch(e) { + throw new Error(`${name}格式错误:${e.message}`); + } + } + return result; +} // 字典表常用解析方法 // 解析物品 {"id": number, "count": number} 格式 export function parseGoodStr(str: string) { diff --git a/web-server/app/controller/game.ts b/web-server/app/controller/game.ts index 378ddab50..df1ab8a44 100644 --- a/web-server/app/controller/game.ts +++ b/web-server/app/controller/game.ts @@ -4,6 +4,7 @@ import { Controller } from 'egg'; import { RoleModel } from '@db/Role'; import { NoticeModel } from '@db/Notice'; import { ServerParamWithRole, GroupParam } from '../domain/gameField/serverlist'; +import { reloadResources } from 'app/pubUtils/data'; export default class GameController extends Controller { @@ -86,4 +87,18 @@ export default class GameController extends Controller { } + public async reloadResource() { + const { ctx } = this; + + try { + + reloadResources(); + ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, { isOK: true }); + return; + } catch(e) { + ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, { isOK: false, err: e.stack }); + return; + } + } + } diff --git a/web-server/app/middleware/gmTokenParser.ts b/web-server/app/middleware/gmTokenParser.ts new file mode 100644 index 000000000..4f5bf1d55 --- /dev/null +++ b/web-server/app/middleware/gmTokenParser.ts @@ -0,0 +1,50 @@ +import { GMUserModel } from '@db/GMUser'; +import { GMUserGroupModel } from '@db/GMUserGroup' +import { GMGroupModel } from '@db/GMGroup' +import { GMRecordModel } from '@db/GMRecord' +import { ApiModel } from '@db/Api'; +import { STATUS } from '@consts'; + +module.exports = () => { + return async function tokenParser(ctx, next) { + + if (!ctx.request.headers || !ctx.request.headers.token) { + console.error('token not found'); + ctx.body = ctx.service.utils.resResult(STATUS.WRONG_PARMS); + return; + } + const user = await GMUserModel.getGmAccountByToken(ctx.request.headers.token); + if (!user) { + console.error('token invalid'); + ctx.body = ctx.service.utils.resResult(STATUS.TOKEN_ERR); + return; + } + const url = ctx.request.url; + let apiResult = await ApiModel.getApi(url); + if(!apiResult) { + ctx.body = ctx.service.utils.resResult(STATUS.GM_MISS_API); + return; + } + let userGroups = await GMUserGroupModel.getUserGroupByUid(user.uid, 1); + let flag = 0; + for(let userGroup of userGroups) { + let { groupId } = userGroup; + let group = await GMGroupModel.getGroupById(groupId); + if(group) { + if(group.apis.includes(apiResult.apiId)) { + flag = 1; break; + } + } + } + if(flag != 1) { + ctx.body = ctx.service.utils.resResult(STATUS.GM_NO_AUTHORITY_GET); + return; + } + ctx.user = user; + await next(); + if(ctx.request.method == "POST") { + await GMRecordModel.createRecord(user?user.uid:0, ctx.request.url, JSON.stringify(ctx.request.body||{}), JSON.stringify(ctx.body||{})); + } + }; +}; + diff --git a/web-server/app/router.ts b/web-server/app/router.ts index 19cf371e2..fc6755a75 100644 --- a/web-server/app/router.ts +++ b/web-server/app/router.ts @@ -17,4 +17,5 @@ export default (app: Application) => { router.post('/user/authentication', tokenParser, controller.account.authentication); router.post('/game/getserverlist', tokenParser, controller.game.getServerList); router.post('/game/getnotice', tokenParser, controller.game.getnotice); + router.post('/web/reloadresource', app.middleware.gmTokenParser(), controller.game.reloadResource); }; diff --git a/web-server/typings/app/middleware/index.d.ts b/web-server/typings/app/middleware/index.d.ts index 0c66bd3e2..73de247a7 100644 --- a/web-server/typings/app/middleware/index.d.ts +++ b/web-server/typings/app/middleware/index.d.ts @@ -2,11 +2,13 @@ // Do not modify this file!!!!!!!!! import 'egg'; +import ExportGmTokenParser from '../../../app/middleware/gmTokenParser'; import ExportParmsDecode from '../../../app/middleware/parmsDecode'; import ExportTokenParser from '../../../app/middleware/tokenParser'; declare module 'egg' { interface IMiddleware { + gmTokenParser: typeof ExportGmTokenParser; parmsDecode: typeof ExportParmsDecode; tokenParser: typeof ExportTokenParser; }