176 lines
4.4 KiB
TypeScript
176 lines
4.4 KiB
TypeScript
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<number, any>();
|
|
const towerInfos = new Map<number, any>();
|
|
const towerTaskInfos = new Map<number, any>();
|
|
const heroInfos = new Map<number, any>();
|
|
const jobInfos = new Map<number, any>();
|
|
const levelInfos = new Map<number, {sum: number, cur: number}>();
|
|
|
|
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);
|
|
} |