MarshalData.ts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import { Data } from "../core/data/Data";
  2. import { DataSystem } from "../core/data/DataSystem";
  3. import { ConfigData } from "../data/ConfigData";
  4. import { UserHeroData } from "../hero/UserHeroData";
  5. import { MarshalSkillData } from "./MarshalSkillData";
  6. /**
  7. * 统帅技能数据
  8. * @description 只有需要watch的,比如技能cd、当前技能编号这两个个字段在里面
  9. * @author 郑聂华
  10. */
  11. export class MarshalData extends Data {
  12. /**默认统帅技能ID*/
  13. public defaultId: number = 110001;
  14. /**统帅技能数据*/
  15. public marshalSkillData: MarshalSkillData;
  16. /**统帅技能冷却时间 时间戳*/
  17. public skillCoolingTime: number = 0;
  18. /**技能配置数据*/
  19. public skillData: { [key: number]: Skill };
  20. /**技能解锁升级小弹窗数据 type 1 解锁 2 升级 id 技能id lv 当前等级 lastLv 上一等级*/
  21. public skillNoticeQueue: { type: number, id: number, lv: number, lastLv: number }[] = [];
  22. /**技能解锁或升级的通知队列数据*/
  23. public skillUnlockLvUpQueue: { type: number, id: number, lv: number, lastLv: number }[] = [];
  24. /**
  25. * 初始化统帅技能数据
  26. */
  27. public async init() {
  28. if (!this.marshalSkillData) {
  29. this.marshalSkillData = new MarshalSkillData();
  30. DataSystem.regeditData(this.marshalSkillData);
  31. }
  32. let marshalSkillCfg: any = DataSystem.getData(ConfigData).get("commanderskill");
  33. for (let id in marshalSkillCfg) {
  34. this.marshalSkillData.lvNeedStarsMap.set(marshalSkillCfg[id].id, marshalSkillCfg[id].starcount.split(':'));
  35. }
  36. let numStar = 0;
  37. let userHeroData = DataSystem.getData(UserHeroData);
  38. //await userHeroData.pull(http);
  39. for (let id of userHeroData.haveHeros) {
  40. let tempHero = userHeroData.get(id);
  41. numStar += tempHero.server.star;
  42. }
  43. let tempKeys = this.marshalSkillData.lvNeedStarsMap.keys();
  44. for (let id of tempKeys) {
  45. let tempStarAry = this.marshalSkillData.lvNeedStarsMap.get(id);
  46. this.marshalSkillData.lvMarshalSkill.set(id, -1);
  47. for (let i = 0; i < tempStarAry.length; i++) {
  48. if (numStar >= tempStarAry[i])
  49. this.marshalSkillData.lvMarshalSkill.set(id, i + 1);
  50. }
  51. }
  52. //this.skillCoolingTime = new Date(1970, 1, 1).getTime();
  53. this.skillCoolingTime = parseInt(localStorage.getItem("MarshalCoolTime")) || new Date(1970, 1, 1).getTime();
  54. this.skillInit();
  55. }
  56. /**技能配置数据解析*/
  57. private skillInit() {
  58. let tempData = JSON.parse(JSON.stringify(DataSystem.getData(ConfigData).get("skill")));
  59. if (tempData) {
  60. this.skillData = {};
  61. for (let i in tempData) {
  62. let o = tempData[i];
  63. let sd: Skill = o;
  64. sd.id = o.id;
  65. sd.name = o.name;
  66. sd.res = o.res;
  67. sd.icon = o.icon;
  68. sd.des = o.des;
  69. if (o.extra) { sd.extra = o.extra.split(":"); }
  70. let a = o.attType.split(":");
  71. sd.attType = parseInt(a[0]);
  72. if (a[0] == '1' || a[1] == '2') {
  73. let b = a[1].split(",");
  74. sd.attackNum = parseInt(b[b.length - 1]);
  75. sd.attackRange = parseInt(b[0]);
  76. }
  77. let c = o.skillValue.split(",");
  78. sd.skillValue = [];
  79. for (let j = 0; j < c.length; j++) {
  80. sd.skillValue.push(parseFloat(c[j]));
  81. }
  82. this.skillData[i] = sd;
  83. }
  84. }
  85. }
  86. }
  87. export interface Skill {
  88. /**技能id*/
  89. id: number;
  90. /**技能名*/
  91. name: string;
  92. /**技能资源名*/
  93. res: string;
  94. /**技能头像名*/
  95. icon: string;
  96. /**描述*/
  97. des: string;
  98. /**攻击类型*/
  99. attType: number;
  100. /** [最小攻击系数,最大攻击系数] attType=3 万分比 attType=5 秒 */
  101. skillValue: number[];
  102. /** 技能范围,当attackType=2时才有 */
  103. attackRange: number;
  104. /** 技能攻击的个数 */
  105. attackNum: number;
  106. /**额外*/
  107. extra: string[];
  108. }