军团:建筑物表
This commit is contained in:
287
shared/pubUtils/dictionary/DicStructure.ts
Normal file
287
shared/pubUtils/dictionary/DicStructure.ts
Normal file
@@ -0,0 +1,287 @@
|
||||
// 军团建筑物
|
||||
import {readJsonFile, parseGoodStr, parseNumberList, decodeArrayListStr} from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
import { RewardInter } from '../interface';
|
||||
const _ = require('lodash');
|
||||
|
||||
type KeysEnum<T> = { [P in keyof Required<T>]: true };
|
||||
// 中军大帐
|
||||
export interface DicCentreBase {
|
||||
// id
|
||||
readonly id: number;
|
||||
// 等级
|
||||
readonly level: number;
|
||||
// 最大人数
|
||||
readonly peopleNum: number;
|
||||
// 管理员人数
|
||||
readonly managerNum: number;
|
||||
}
|
||||
|
||||
const DicCenterKeys: KeysEnum<DicCentreBase> = {
|
||||
id: true,
|
||||
level: true,
|
||||
peopleNum: true,
|
||||
managerNum: true
|
||||
};
|
||||
|
||||
// 炼器堂
|
||||
export interface DicEquipProduceBase {
|
||||
// id
|
||||
readonly id: number;
|
||||
// 等级
|
||||
readonly level: number;
|
||||
// 开启炼器及研发等级
|
||||
readonly levelProduce: number;
|
||||
// 可研发的碎片的品质
|
||||
readonly qualityProduce: number[];
|
||||
}
|
||||
|
||||
const DicEquipProduceKeys: KeysEnum<DicEquipProduceBase> = {
|
||||
id: true,
|
||||
level: true,
|
||||
levelProduce: true,
|
||||
qualityProduce: true
|
||||
};
|
||||
|
||||
// 演武台
|
||||
export interface DicBossBase {
|
||||
// id
|
||||
readonly id: number;
|
||||
// 等级
|
||||
readonly level: number;
|
||||
// boss等级
|
||||
readonly bossLevel: number;
|
||||
// 关卡id
|
||||
readonly warId: number;
|
||||
// 掉落的拍卖行奖励
|
||||
readonly reward: RewardInter[];
|
||||
}
|
||||
|
||||
const DicBossKeys: KeysEnum<DicBossBase> = {
|
||||
id: true,
|
||||
level: true,
|
||||
bossLevel: true,
|
||||
warId: true,
|
||||
reward: true
|
||||
};
|
||||
|
||||
// 练兵场
|
||||
export interface DicTrainBase {
|
||||
// id
|
||||
readonly id: number;
|
||||
// 等级
|
||||
readonly level: number;
|
||||
// 进阶等级
|
||||
readonly trainLevel: number;
|
||||
// 难度系数
|
||||
readonly difficultyRatio: number;
|
||||
// 据点奖励增长系数
|
||||
readonly judianRewardRatio: number;
|
||||
// 进阶奖励
|
||||
readonly jinjieReward: RewardInter[];
|
||||
}
|
||||
|
||||
const DicTrainKeys: KeysEnum<DicTrainBase> = {
|
||||
id: true,
|
||||
level: true,
|
||||
trainLevel: true,
|
||||
difficultyRatio: true,
|
||||
judianRewardRatio: true,
|
||||
jinjieReward: true
|
||||
};
|
||||
|
||||
// 捐献所
|
||||
export interface DicDonateBase {
|
||||
// id
|
||||
readonly id: number;
|
||||
// 等级
|
||||
readonly level: number;
|
||||
// 捐献值
|
||||
readonly donateValue: {type: number, count: number}[];
|
||||
// 捐献奖励
|
||||
readonly donateReward: {fund: number, honour: number}[];
|
||||
// 今日捐献宝箱领取奖励系数
|
||||
readonly boxRewardRatio: number;
|
||||
}
|
||||
|
||||
const DicDonateKeys: KeysEnum<DicDonateBase> = {
|
||||
id: true,
|
||||
level: true,
|
||||
donateValue: true,
|
||||
donateReward: true,
|
||||
boxRewardRatio: true
|
||||
};
|
||||
|
||||
// 许愿池
|
||||
export interface DicWishPoolBase {
|
||||
// id
|
||||
readonly id: number;
|
||||
// 等级
|
||||
readonly level: number;
|
||||
// 许愿物品
|
||||
readonly wishGoods: {type: number, quality: number, count: number}[];
|
||||
}
|
||||
|
||||
const DicWishPoolKeys: KeysEnum<DicWishPoolBase> = {
|
||||
id: true,
|
||||
level: true,
|
||||
wishGoods: true
|
||||
};
|
||||
|
||||
// 商店
|
||||
export interface DicStoreBase {
|
||||
// id
|
||||
readonly id: number;
|
||||
// 等级
|
||||
readonly level: number;
|
||||
// 许愿物品
|
||||
readonly storeGoods: {id: number, count: number, num: number}[];
|
||||
}
|
||||
|
||||
const DicStoreKeys: KeysEnum<DicStoreBase> = {
|
||||
id: true,
|
||||
level: true,
|
||||
storeGoods: true
|
||||
};
|
||||
|
||||
export const dicStructureConsume = new Map<number, Map<number, RewardInter[]>>(); // 升级消耗 structureId => level => consume
|
||||
export const dicCenterBase = new Map<number, DicCentreBase>(); // 中军大帐
|
||||
export const dicEquipPriduceBase = new Map<number, DicEquipProduceBase>(); // 炼器堂
|
||||
export const dicBossBase = new Map<number, DicBossBase>(); // 演武台
|
||||
export const dicTrainBase = new Map<number, DicTrainBase>(); // 练兵场
|
||||
export const dicDonateBase = new Map<number, DicDonateBase>(); // 捐献所
|
||||
export const dicWishPoolBase = new Map<number, DicWishPoolBase>(); // 许愿池
|
||||
export const dicStoreBase = new Map<number, DicWishPoolBase>(); // 许愿池
|
||||
|
||||
// 中军大帐
|
||||
const strCenter = readJsonFile(FILENAME.DIC_GUILD_STRUCTURE_CENTER);
|
||||
let arrCenter = JSON.parse(strCenter);
|
||||
arrCenter.forEach(o => {
|
||||
setStructureConsume(o);
|
||||
dicCenterBase.set(o.level, _.pick(o, Object.keys(DicCenterKeys)));
|
||||
});
|
||||
arrCenter = undefined;
|
||||
|
||||
// 炼器堂
|
||||
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);
|
||||
dicBossBase.set(o.level, _.pick(o, Object.keys(DicBossKeys)));
|
||||
});
|
||||
arrBoss = undefined;
|
||||
|
||||
// 练兵场
|
||||
const strTrain = readJsonFile(FILENAME.DIC_GUILD_TRAIN_BASE);
|
||||
let arrTrain = JSON.parse(strTrain);
|
||||
arrTrain.forEach(o => {
|
||||
setStructureConsume(o);
|
||||
o.jinjieReward = parseGoodStr(o.jinjieReward);
|
||||
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.donateValue = parseDonateValue(o.donatevalue);
|
||||
o.donateReward = parseDonateReward(o.donateReward);
|
||||
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.wishGoods = parseWishGoods(o.wishgoods);
|
||||
dicWishPoolBase.set(o.level, _.pick(o, Object.keys(DicWishPoolKeys)));
|
||||
});
|
||||
arrWishPool = 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;
|
||||
|
||||
// 升级消耗
|
||||
function setStructureConsume(o) {
|
||||
let map = dicStructureConsume.get(o.structureId);
|
||||
if(!map) map = new Map<number, RewardInter[]>();
|
||||
map.set(o.level, parseGoodStr(o.consume));
|
||||
}
|
||||
|
||||
// {"type": number, "count": number}
|
||||
export function parseDonateValue(str: string) {
|
||||
let result = new Array<{ type: number, count: number }>();
|
||||
if (!str) return result;
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
for (let [type, count] of decodeArr) {
|
||||
if (isNaN(parseInt(type)) || isNaN(parseInt(count))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.push({ type: parseInt(type), count: parseInt(count) });
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// {"fund": number, "honour": number}
|
||||
export function parseDonateReward(str: string) {
|
||||
let result = new Array<{ fund: number, honour: number }>();
|
||||
if (!str) return result;
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
for (let [fund, honour] of decodeArr) {
|
||||
if (isNaN(parseInt(fund)) || isNaN(parseInt(honour))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.push({ fund: parseInt(fund), honour: parseInt(honour) });
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// {"type": number, "quality": number, "count": number}
|
||||
export function parseWishGoods(str: string) {
|
||||
let result = new Array<{ type: number, quality: number, count: number }>();
|
||||
if (!str) return result;
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
for (let [type, quality, count] of decodeArr) {
|
||||
if (isNaN(parseInt(type)) || isNaN(parseInt(quality))|| isNaN(parseInt(count))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.push({ type: parseInt(type), quality: parseInt(quality), count: parseInt(count) });
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// {"id": number, "count": number, "num": number}
|
||||
export function parseStoreGoods(str: string) {
|
||||
let result = new Array<{ id: number, count: number, num: number }>();
|
||||
if (!str) return result;
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
for (let [id, count, num] of decodeArr) {
|
||||
if (isNaN(parseInt(id)) || isNaN(parseInt(count))|| isNaN(parseInt(num))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.push({ id: parseInt(id), count: parseInt(count), num: parseInt(num) });
|
||||
}
|
||||
return result
|
||||
}
|
||||
Reference in New Issue
Block a user