import fs = require('fs'); import path = require('path'); let gamedata = {}; const wars = ['dic_zyz_gk_main', 'dic_zyz_gk_mainElite', 'dic_zyz_gk_daily', 'dic_zyz_gk_event', 'dic_zyz_gk_tower', 'dic_zyz_gk_expedition']; // 关卡相关的表 const allWarInfos = new Map(); const towerInfos = new Map(); const towerTaskInfos = new Map(); const heroInfos = new Map(); const jobInfos = new Map(); const levelInfos = new Map(); function parseWarData() { let result = null; for (let filename of wars) { let warInfo = gamedata['jsons'][filename]||[]; for(let war of warInfo) { if(war.war_id) { allWarInfos.set(war.war_id, war); } } } return result; } function parseTowerData() { const towerFile = 'dic_zyz_tower'; const towerData = gamedata['jsons'][towerFile] || []; towerData.forEach(elem => { if (elem.towerFloor) { towerInfos.set(elem.towerFloor, elem); } }); } function parseTowerTaskData() { const towerTaskFile = 'dic_zyz_search'; const towerTaskData = gamedata['jsons'][towerTaskFile] || []; towerTaskData.forEach(elem => { if (elem && elem.taskId) { towerTaskInfos.set(elem.taskId, elem); } }); } function parseHeroData() { const heroFile = 'dic_zyz_hero'; const heroesData = gamedata['jsons'][heroFile] || []; heroesData.forEach(elem => { if (elem && elem.heroId) { heroInfos.set(elem.heroId, elem); } }); } function parseJobData() { const jobFile = 'dic_zyz_job'; const jobsData = gamedata['jsons'][jobFile] || []; jobsData.forEach(elem => { if (elem && elem.jobid) { jobInfos.set(elem.jobid, elem); } }); } function parseLevelInfo() { const jobFile = 'dic_zyz_kingexp'; const levelData = gamedata['jsons'][jobFile] || []; let exp = 0; levelData.forEach(elem => { if (elem && elem.level) { exp += elem.exp; levelInfos.set(elem.level, { sum: exp, cur: elem.exp }); } }); } function initData (folder: string) { if(!gamedata.hasOwnProperty(folder)) { gamedata[folder] = {}; } fs.readdirSync(__dirname + '/../resource/' + folder) .filter(function(file) { return (file.indexOf(".") !== 0) && (file !== "index.js"); }) //筛选有文件名且不是index进行遍历 .forEach(function(file) { var name = file.split('.')[0]; try { gamedata[folder][name] = JSON.parse( fs.readFileSync(path.resolve(__dirname, "../resource/" + folder + "/" + file)).toString() ); } catch(e) { console.error(e); console.error('【文件错误】:' + file); gamedata[folder][name] = []; } }); } function parseData() { parseWarData(); parseTowerData(); parseTowerTaskData(); parseHeroData(); parseJobData(); parseLevelInfo(); } initData('jsons'); // 加载一般json initData('warJsons'); // 加载出兵表 parseData(); export function getGamedata(key) { return gamedata['jsons'][key]; } // 获取出兵表 export function getWarJsons(key: any) { key = key + ''; let arr = key.split('&'); let index = Math.floor(Math.random() * arr.length); key = arr[index]; return { json: gamedata['warJsons'][key], fileName: key } } export function getWarById(warid: number) { return allWarInfos.get(warid); } export function getTowerDataByLv(lv: number) { return towerInfos.get(lv); } export function getGoodById(gid) { let goodsInfo = gamedata['jsons']['dic_goods']||[]; return goodsInfo.find(cur => { return cur.good_id == gid }); } export function getTaskById(tid: number) { const taskInfo = towerTaskInfos.get(tid); return taskInfo; } export function getHeroInfoById(hid: number) { const heroInfo = heroInfos.get(hid); return heroInfo; } export function getJobInfoById(jid: number) { const jobInfo = jobInfos.get(jid); return jobInfo; } export function getLvByExp(exp: number) { let curLv = 0; let entries = levelInfos.entries(); for (let [lv, {sum}] of entries) { if(exp < sum) { curLv = lv; break; } } return curLv; } export function getExpByLv(lv: number) { return levelInfos.get(lv); }