import { Data } from "../core/data/Data"; import { DataSystem } from "../core/data/DataSystem"; import { ConfigData } from "../data/ConfigData"; import { UserHeroData } from "../hero/UserHeroData"; import { MarshalSkillData } from "./MarshalSkillData"; /** * 统帅技能数据 * @description 只有需要watch的,比如技能cd、当前技能编号这两个个字段在里面 * @author 郑聂华 */ export class MarshalData extends Data { /**默认统帅技能ID*/ public defaultId: number = 110001; /**统帅技能数据*/ public marshalSkillData: MarshalSkillData; /**统帅技能冷却时间 时间戳*/ public skillCoolingTime: number = 0; /**技能配置数据*/ public skillData: { [key: number]: Skill }; /**技能解锁升级小弹窗数据 type 1 解锁 2 升级 id 技能id lv 当前等级 lastLv 上一等级*/ public skillNoticeQueue: { type: number, id: number, lv: number, lastLv: number }[] = []; /**技能解锁或升级的通知队列数据*/ public skillUnlockLvUpQueue: { type: number, id: number, lv: number, lastLv: number }[] = []; /** * 初始化统帅技能数据 */ public async init() { if (!this.marshalSkillData) { this.marshalSkillData = new MarshalSkillData(); DataSystem.regeditData(this.marshalSkillData); } let marshalSkillCfg: any = DataSystem.getData(ConfigData).get("commanderskill"); for (let id in marshalSkillCfg) { this.marshalSkillData.lvNeedStarsMap.set(marshalSkillCfg[id].id, marshalSkillCfg[id].starcount.split(':')); } let numStar = 0; let userHeroData = DataSystem.getData(UserHeroData); //await userHeroData.pull(http); for (let id of userHeroData.haveHeros) { let tempHero = userHeroData.get(id); numStar += tempHero.server.star; } let tempKeys = this.marshalSkillData.lvNeedStarsMap.keys(); for (let id of tempKeys) { let tempStarAry = this.marshalSkillData.lvNeedStarsMap.get(id); this.marshalSkillData.lvMarshalSkill.set(id, -1); for (let i = 0; i < tempStarAry.length; i++) { if (numStar >= tempStarAry[i]) this.marshalSkillData.lvMarshalSkill.set(id, i + 1); } } //this.skillCoolingTime = new Date(1970, 1, 1).getTime(); this.skillCoolingTime = parseInt(localStorage.getItem("MarshalCoolTime")) || new Date(1970, 1, 1).getTime(); this.skillInit(); } /**技能配置数据解析*/ private skillInit() { let tempData = JSON.parse(JSON.stringify(DataSystem.getData(ConfigData).get("skill"))); if (tempData) { this.skillData = {}; for (let i in tempData) { let o = tempData[i]; let sd: Skill = o; sd.id = o.id; sd.name = o.name; sd.res = o.res; sd.icon = o.icon; sd.des = o.des; if (o.extra) { sd.extra = o.extra.split(":"); } let a = o.attType.split(":"); sd.attType = parseInt(a[0]); if (a[0] == '1' || a[1] == '2') { let b = a[1].split(","); sd.attackNum = parseInt(b[b.length - 1]); sd.attackRange = parseInt(b[0]); } let c = o.skillValue.split(","); sd.skillValue = []; for (let j = 0; j < c.length; j++) { sd.skillValue.push(parseFloat(c[j])); } this.skillData[i] = sd; } } } } export interface Skill { /**技能id*/ id: number; /**技能名*/ name: string; /**技能资源名*/ res: string; /**技能头像名*/ icon: string; /**描述*/ des: string; /**攻击类型*/ attType: number; /** [最小攻击系数,最大攻击系数] attType=3 万分比 attType=5 秒 */ skillValue: number[]; /** 技能范围,当attackType=2时才有 */ attackRange: number; /** 技能攻击的个数 */ attackNum: number; /**额外*/ extra: string[]; }