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 { 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 { 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, RECRUIT } from "./dicParam"; import { decodeIdCntArrayStr, parseGoodStr, decodeArrayListStr, getRandValueByMinMax, getRandEelm } 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"; export const gameData = { blurprtCompose: dicBlueprtCompose, blueprtPossibility: dicBlueprtPossibility, daily: dicDaily, event: dicEvent, eventList: dicEventList, 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, dailyWarByType: dicDailyWarByType, xunbao: dicXunbao, btlBossHpSum: new Map(), btlBossHp: new Map>(), blueprtToWar: new Map(), 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, bossBaseByBossLv: dicBossBaseByBossLv, 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, dicMyHeroes: dicMyHeroes, rank: dicRank, generalRankReward: dicRankReward, taskType: dicTaskType, tasks: taskMap, mainTask: dicMainTask, dailyTask: dicDailyTask, achievement: dicAchievement, mainTaskStage: dicMainTaskStage, taskBox: dicTaskBox, gacha: dicGacha, gachaContent: dicGachaContent, gachaContentHero: dicGachaContentHero, gachaHope: getGachaHopePercent(), gachaTurntable: getGachaTurntablePercent(), heroTransPiece: getHeroTransPiece(), giftPackage: dicGiftPackage, comBtlLvRange: parseComBtlLvRange() }; // 在此提供一些原先在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 getBossHpByBlueprtId(blueprtId: number) { let { dispatchJsonId } = getWarByBlueprtId(blueprtId); let bossHpInfo = getBossHpByWarId(dispatchJsonId); return bossHpInfo; } export function getWarByBlueprtId(blueprtId: number) { let warId = getWarIdByBlueprtId(blueprtId); return gameData.war.get(warId); } export function getRewardByBlueprtId(blueprtId: number) { let { fixReward } = getWarByBlueprtId(blueprtId); return fixReward; } function parseComBtlLvRange() { let map = new Map>() const lvRange = COM_BTL_LV_RANGE; lvRange.forEach(range => { const lvs = []; for (let lv = range.minLv; lv <= range.maxLv; lv++) { lvs.push(lv); } map.set(range.id, lvs); }); return map } export function comBtlRangeByLv(lv: number) { for (let [k, v] of gameData.comBtlLvRange) { if (v.indexOf(lv) !== -1) { return k; } } } export function comBtlRanges() { return Array.from(gameData.comBtlLvRange.keys()); } 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(); 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(); } /** * 根据军团活动排名获得功勋奖励 * @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(); let eventNum = 0; for (let [key, value] of map) { if (value == RACE_EVENT_TYPE.EVENT) eventNum++; newMap.set(parseInt(key), 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(); for (let { id, min, max } of items) { let count = getRandValueByMinMax(min, max, 0); result.push({ id, count }); } return result; } // 根据保底类型获得保底数量 export function getDicGachaFloor(id: number) { let map = decodeIdCntArrayStr(RECRUIT.RECRUIT_MUST, 1); return map.get(id.toString()) } export function getRandExpedition(cnt = 1) { let arr: DicExpedition[] = []; for (let [_id, dicExpedition] of gameData.expedition) { arr.push(dicExpedition); } return getRandEelm(arr, cnt); } // 抽卡心愿单概率 function getGachaHopePercent() { let arr = decodeArrayListStr(RECRUIT.RECRUIT_WISH_LIST); return arr.map(cur => { return { id: parseInt(cur[0]), weight: parseInt(cur[1]) } }); } // 抽卡转盘概率 function getGachaTurntablePercent() { let arr = decodeArrayListStr(RECRUIT.RECRUIT_BONUS_HERO_QUANTITY); return arr.map(cur => { return { quality: parseInt(cur[0]), count: parseInt(cur[1]) } }); } function getHeroTransPiece() { let map = decodeIdCntArrayStr(RECRUIT.RECRUIT_CHANGE_SHARD, 1); let newMap = new Map(); for (let [id, count] of map) { newMap.set(parseInt(id), count); } return newMap }