Files
ZYZ/shared/pubUtils/data.ts
2021-03-31 17:52:34 +08:00

549 lines
18 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { dicHero } 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 } from "./dictionary/DicEvent";
import { 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 } from "./dictionary/DicWar";
import { dicWarJson } from "./dictionary/DicWarJson";
import { dicXunbao } from "./dictionary/DicXunbao";
import { SPECIAL_ATTR } from "../consts/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 } 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 { 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 { Attribute } from "../domain/roleField/attribute";
import { dicGuildActivity, DicGuildActivity } from './dictionary/DicGuildActivity';
import { dicGateActivityPoint } from './dictionary/DicGateActivityPoint';
import { dicGuildAuction } 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 { GUILDACTIVITY } from "./dicParam";
import { decodeIdCntArrayStr, parseGoodStr, decodeArrayListStr, getRandValueByMinMax } from "./util";
import { GUILD_SELECT, RACE_EVENT_TYPE } from "../consts";
import { dicShop, dicShopItem } from "./dictionary/DicShop";
import { dicShopList } from "./dictionary/DicShopList";
export const gameData = {
blurprtCompose: dicBlueprtCompose,
blueprtPossibility: dicBlueprtPossibility,
daily: dicDaily,
event: dicEvent,
expedition: dicExpedition,
expeditionPoint: dicExpeditionPoint,
funcsSwitch: dicFuncSwitch,
goods: dicGoods,
hero: dicHero,
heroQualityUp: dicHeroQualityUp,
heroSkill: dicHeroSkill,
heroStar: dicHeroStar,
heroWake: dicHeroWake,
job: dicJob,
jobClassMaxGrades: jobClassMaxGrades,
jobClassAndgrades: jobClassAndgrades,
kingexp: dicKingExp,
maxPlayerLv: maxPlayerLv,
charexp: dicCharExp,
question: dicQuestion,
se: dicSe,
tower: dicTower,
towerTask: dicTowerTask,
war: dicWar,
warJson: dicWarJson,
xunbao: dicXunbao,
btlBossHpSum: new Map<number, number>(),
btlBossHp: new Map<number, Array<{dataId: number, hp: number, actorId: number}>>(),
blueprtToWar: new Map<number, number>(),
blueprt: blueprt,
fashion: dicFashions,
friendShips: friendShips,
friendShipHidAandIds: friendShipHidAandIds,
maxFriendShipLv: maxFriendShipLv,
friendShipLevelMap: dicFriendShipLevelMap,
randomEffectPool: dicRandomEffectPool,
strengthenCost: dicStrengthenCost,
refine: dicRefine,
jewels: dicJewel,
dicHeroEquip: dicHeroEquip,
suit: dicSuit,
title: dicTitle,
teraphs: dicTeraph,
school: dicSchool,
schoolRate: dicSchoolRate,
heroScroll: dicHeroScroll,
preHeroScroll: preHeroScroll,
pvpOpponent: dicPvpOpponent,
pvpTeamLevel: dicPvpTeamLevel,
pvpWar: dicWarPvp,
pvpRefreshConsume: dicPvpRefreshConsume,
maxPvpRefreshCnt: maxPvpRefreshCnt,
pvpGk: dicGkPvp,
pvpGks: dicGkPvps,
pvpHeroRewards: dicHeroRewads,
pvpRankRewards: dicRankRewads,
pvpBoxs: dicPvpBoxs,
pvpRankMax: dicRankMax,
guildAuth: dicGuildAuth,
centerBase: dicCenterBase,
equipProduceBase: dicEquipPriduceBase,
bossBase: dicBossBase,
trainBase: dicTrainBase,
donateBase: dicDonateBase,
armyWishPool: dicWishPoolBase,
storeBase: dicStoreBase,
structureConsume: dicStructureConsume,
guildActiveDayReward: dicGuildActiveDayReward,
guildActiveWeekReward: dicGuildActiveWeekReward,
guildPosition: dicGuildPosition,
armyTrainJuDian: dicArmyTrainJuDian,
trainSoloReward: dicTrainSoloReward,
mail: dicMail,
guildActiveWays: dicGuildActiveWays,
armyDevelopConsume: dicArmyDevelopConsume,
armyBossRank: dicArmyBossRank,
armyDonateBox: dicArmyDonate,
roleFriend: dicRoleFriend,
roleFriendLv: dicRoleFriendLv,
figureCondition: figureCondition,
guildActivity: dicGuildActivity,
gateActivityPoint: dicGateActivityPoint,
guildAuction: dicGuildAuction,
cityActivity: dicCityActivity,
chatAccuse: dicChatAccuse,
cityActivityReward: dicCityActivityReward,
raceActivityEvents: dicRaceActivity,
raceTypes: dicRaceTypes,
raceActivityEncounter: decodeRaceActivityEncounter(),
raceNormalItems: decodeRaceNormalItems(),
raceEventItems: decodeRaceEventItems(),
shop: dicShop,
shopItem: dicShopItem,
shopList: dicShopList
};
// 在此提供一些原先在gamedata中提供的方法以便更方便获取gameData数据
/**
* 根据主公当前经验获得当前等级
* @param exp 累积经验
*/
export function getLvByExp(exp: number) {
let curLv = 0;
let entries = gameData.kingexp.entries();
for (let [lv, {sum}] of entries) {
curLv = lv;
if(exp < sum) break;
}
return curLv;
}
/**
* 根据主公当前等级获得累积经验1=> 1级满经验
* @param lv 等级
*/
export function getExpByLv(lv: number) {
return gameData.kingexp.get(lv);
}
/**
* 根据武将当前经验获得当前等级
* @param exp 累积经验
*/
export function getHeroLvByExp(exp: number) {
let curLv = 0;
let entries = gameData.charexp.entries();
for (let [lv, sum] of entries) {
curLv = lv;
if(exp < sum) break;
}
return curLv;
}
/**
* 根据武将当前等级获得累积经验1=> 1级满经验
* @param lv
*/
export function getHeroExpByLv(lv: number) {
return gameData.charexp.get(lv);
}
/**
* 根据武将当前好感获得好感等级
* @param exp 累积经验
*/
export function getFavourLvByExp(exp: number) {
let curLv = 0;
let entries = gameData.friendShipLevelMap.entries();
for (let [lv, { expSum: sum }] of entries) {
curLv = lv;
if(exp < sum) break;
}
return curLv;
}
export function getBossHpByWarId(warId: number) {
let bossHpSum = gameData.btlBossHpSum.get(warId) || 0;
let bossHpArr = gameData.btlBossHp.get(warId) || [];
if (!bossHpSum || !bossHpArr) {
const warInfo = dicWarJson.get(warId);
if (warInfo && warInfo.length) {
warInfo.forEach(hero => {
let { attribute, dataId, relation, actorId } = hero;
if (relation === 2) {
let newAttr = new Attribute();
newAttr.setByWarJson(attribute, 1);
let attrJson = newAttr.getReduceAttributes();
const hp = attrJson.hp||0;
if (hp > 0) {
bossHpArr.push({dataId, hp, actorId});
bossHpSum += hp;
}
}
})
gameData.btlBossHp.set(warId, bossHpArr);
gameData.btlBossHpSum.set(warId, bossHpSum);
}
}
return { bossHpSum, bossHpArr };
}
export function getWarIdByBlueprtId(blueprtId: number) {
let warId = gameData.blueprtToWar.get(blueprtId);
if (!warId) {
let blueprt = gameData.goods.get(blueprtId);
if(blueprt) {
const { specialAttr } = blueprt;
warId = specialAttr.get(SPECIAL_ATTR.WAR_ID);
if(warId)
gameData.blueprtToWar.set(blueprtId, warId);
}
}
return warId;
}
export function getHeroStarByQuality(quality: number, star: number) {
return gameData.heroStar.get(`${quality}_${star}`);
}
export function getHeroWakeByQuality(quality: number, star: number) {
return gameData.heroWake.get(`${quality}_${star}`);
}
export function getMaxGradeByjobClass(jobClass: number) {
const job = gameData.jobClassMaxGrades.get(jobClass);
return job?.jobid;
}
export function getJobByGradeAndClass(jobClass: number, grade: number) {
return gameData.jobClassAndgrades.get(jobClass +'_' + grade);
}
export function getFriendShipById(shipId: number, level: number) {
return gameData.friendShips.get(shipId +'_' + level);
}
export function getGoodById(gid:number) {
return gameData.goods.get(gid);
}
export function getJewelById(gid:number) {
return gameData.jewels.get(gid);
}
export function getHeroEquipByClassId(classId:number) {
return gameData.dicHeroEquip.get(classId);
}
export function getHeroJob(jobId: number) {
const job = gameData.job.get(jobId);
return job;
}
export function getTitle(titleLv: number) {
const titleInfo = gameData.title.get(titleLv);
return titleInfo;
}
export function getTeraph(id: number, grade: number) {
const teraphInfo = gameData.teraphs.get(id +'_'+ grade);
return teraphInfo;
}
export function getSchoolRateByStar(star: number, colorStar: number, quality: number) {
const schoolRate = gameData.schoolRate.get(`${star}_${colorStar}_${quality}`);
return schoolRate;
}
export function getScollByStar(quality: number, star: number, curQuality: number, colorStar: number) {
const heroScroll = gameData.heroScroll.get(`${quality}_${star}_${curQuality}_${colorStar}`);
return heroScroll;
}
export function getSuit(id: number) {
const suitInfo = gameData.suit.get(id);
return suitInfo;
}
export function getFuncsSwitch(id:number) {
const funcInfo = gameData.funcsSwitch.get(id);
return funcInfo;
}
export function getPLvByScore(score: number) {
let lv = 0;
for(let {teamLv, topLineupMin, topLineupMax} of gameData.pvpTeamLevel) {
if(score >= topLineupMin) lv = teamLv;
if(score < topLineupMax) break;
}
return lv;
}
export function getPvpGkByWarId (warId: number) {
return gameData.pvpGk.get(warId);
}
export function getPvpGkWarIds() {
let warIds = gameData.pvpGks;
return warIds;
}
export function getPvpHeroRewards() {
return gameData.pvpHeroRewards;
}
export function getPvpRankRewards() {
return gameData.pvpRankRewards;
}
export function getPvpBoxs() {
return gameData.pvpBoxs;
}
export function getResultMaxRank() {
return gameData.pvpRankMax;
}
export function getStructureConsume(structureId: number, level: number) {
return gameData.structureConsume.get(structureId).get(level);
}
export function hasStructureConsume(structureId: number, level: number) {
return gameData.structureConsume.get(structureId).has(level);
}
export function getBossByLv(lv: number) {
return gameData.bossBase.get(lv);
}
export function getArmyTrainJuDian(trainId: number) {
return gameData.armyTrainJuDian.get(trainId);
}
export function getTrainSoloReward(id: number) {
return gameData.trainSoloReward.get(id);
}
export function getTrainBaseByLv(lv: number) {
return gameData.trainBase.get(lv);
}
export function getGuildActiveWeekReward(rank: number) {
let result = gameData.guildActiveWeekReward.find(cur => {
let {rankMax, rankMin} = cur;
return rank >= rankMin && rank <= (rankMax || rankMax == -1);
});
let reward = new Array<RewardInter>();
if(result) reward = result.reward;
return reward;
}
export function getGuildActiveByIdAndType(id: number, type: number) {
let dicWay = gameData.guildActiveWays.get(id);
if(!dicWay) return 0;
return dicWay.activePoint.get(type.toString());
}
export function getArmyDevelopConsumeById(id: number) {
let result = gameData.armyDevelopConsume.get(id);
return result;
}
export function getArmyDevelopConsume() {
return gameData.armyDevelopConsume;
}
export function getArmyBossRank() {
return gameData.armyBossRank;
}
export function getArmyDonateBaseByLv(lv: number) {
return gameData.donateBase.get(lv);
}
export function getArmyDonateBoxBaseById(id: number) {
return gameData.armyDonateBox.get(id);
}
export function getArmyWishPoolBaseByLv(lv: number) {
return gameData.armyWishPool.get(lv);
}
export function getFriendLvByExp(exp: number) {
let resultLv = 1;
for(let [lv, {sum}] of gameData.roleFriendLv.entries()) {
resultLv = lv;
if(exp < sum) break;
}
return resultLv;
}
/**
* 根据主公当前经验获得当前等级
* @param exp 累积经验
*/
export function getDicFriendByLv(lv: number) {
let dicFriend: DicRoleFriend;
let entries = gameData.roleFriend.entries();
for (let [dicLv, dic ] of entries) {
dicFriend = dic;
if(lv > dicLv) break;
}
return dicFriend;
}
/**
* @description 获取今天开启的活动的配置
*/
export function getTodayGuildActivity() {
let today = getCurDay();
let dic: DicGuildActivity;
for(let [_id, dicGuildActivity] of gameData.guildActivity) {
if(dicGuildActivity.openDay.includes(today)) {
dic = dicGuildActivity;
break;
}
}
return dic;
}
/**
* 根据军团活动排名获得奖励
* @param aid 活动id
* @param rank 排名
*/
export function getGuildAuctionRewards(aid: number, rank: number) {
let ranksReward = gameData.guildAuction.get(aid)||[];
let dic = ranksReward.find(cur => {
return rank >= cur.min && (rank <= cur.max || cur.max == 0);
});
return dic?dic.rewards: new Array<RewardInter>();
}
/**
* 根据军团活动排名获得功勋奖励
* @param type 城池类型
* @param guildRank 军团排名
* @param rank 成员在军团内部排名
*/
export function getCityActivityRewards(type: number, guildRank: number, rank: number) {
let ranksReward = gameData.cityActivityReward.get(type)||[];
let dic = ranksReward.find(cur => {
return cur.guildRank == guildRank && (rank >= cur.min && (rank <= cur.max || cur.max == 0));
});
return dic?dic.honour: 0;
}
function decodeRaceActivityEncounter() {
let str = GUILDACTIVITY.RACEACTIVITY_ENCOUNTER;
let map = decodeIdCntArrayStr(str, 1);
let newMap = new Map<number, number>();
let eventNum = 0;
for(let [key, value] of map) {
if(value == RACE_EVENT_TYPE.EVENT) eventNum ++;
newMap.set(parseInt(key), parseInt(value));
}
return { events: newMap, eventNum };
}
function decodeRaceNormalItems() {
let str = GUILDACTIVITY.RACEACTIVITY_NORMAL_ITEMS;
let result = new Array<{ id: number, min: number, max: number }>();
if (!str) return result;
let decodeArr = decodeArrayListStr(str);
for (let [id, min, max] of decodeArr) {
if (isNaN(parseInt(id)) || isNaN(parseInt(min)) || isNaN(parseInt(max))) {
throw new Error('data table format wrong');
}
result.push({ id: parseInt(id), min: parseInt(min), max: parseInt(max) });
}
return result
}
function decodeRaceEventItems() {
let str = GUILDACTIVITY.RACEACTIVITY_EVENT_ITEMS||"";
return parseGoodStr(str);
}
export function getRaceEventItems() {
let items = gameData.raceNormalItems;
let result = new Array<RewardInter>();
for(let {id, min, max} of items) {
let count = getRandValueByMinMax(min, max, 0);
result.push({ id, count });
}
return result;
}