// 武将羁绊表 import { decodeArrayListStr, readFileAndParse, parseNumberList } from '../util'; import { FILENAME } from '../../consts'; export interface DicFriendShip { // id readonly id: number; // 羁绊id readonly shipId: number; // 主武将ID readonly actorId: number; // 羁绊名称 readonly name: string; // 羁绊等级 readonly level: number; // 羁绊武将ID readonly hids: Array; // 属性加成 readonly attributes: Array<{ id: number, number: number }> // 升到这一级所需的羁绊值 readonly shipExp: number; readonly index: number; } export const friendShips = new Map(); export const friendShipsByLv = new Map(); export const friendShipsMax = new Map(); export const friendShipByIndex = new Map(); export function loadFriendShip() { friendShips.clear(); friendShipByIndex.clear(); let arr = readFileAndParse(FILENAME.DIC_FRIEND_SHIP); arr.forEach(o => { o.attributes = parseAttribute(o.attribute); o.hids = parseNumberList(o.memberId); let key1 = `${o.actorId}_${o.shipId}`; let shipSumValue = 0; if (!friendShips.has(key1)) { friendShips.set(key1, []); shipSumValue = 0; } shipSumValue += o.shipExp; friendShips.get(key1).push({ level: o.level, shipExp: shipSumValue }); if (!friendShipsMax.has(key1) || friendShipsMax.get(key1) < o.level) { friendShipsMax.set(key1, o.level); } let key2 = `${o.actorId}_${o.shipId}_${o.level}`; friendShipsByLv.set(key2, o); let newKey = `${o.actorId}_${o.index}`; if (!friendShipByIndex.has(newKey)) friendShipByIndex.set(newKey, o.shipId); }); arr = undefined; } function parseAttribute(str: string) { let result = new Array<{ id: number, number: number }>(); if (!str) return result; let decodeArr = decodeArrayListStr(str); for (let [id, number] of decodeArr) { if (isNaN(parseInt(id)) || isNaN(parseInt(number))) { throw new Error('data table format wrong'); } result.push({ id: parseInt(id), number: parseInt(number) }); } return result }