You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

parseCard.js 3.7 kB

6 years ago
6 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. //分析卡片的函数,Code From https://github.com/kiootic/pad-rikuu
  2. class Card{
  3. constructor(data){
  4. let card = this;
  5. card.attrs=[];
  6. card.types=[];
  7. let i = 0;
  8. function readCurve() {
  9. return {
  10. min: data[i++],
  11. max: data[i++],
  12. scale: data[i++],
  13. };
  14. }
  15. card.id = data[i++]; //ID
  16. card.name = data[i++]; //名字
  17. card.attrs.push(data[i++]); //属性1
  18. card.attrs.push(data[i++]); //属性2
  19. card.isUltEvo = data[i++] !== 0; //是否究极进化
  20. card.types.push(data[i++]); //类型1
  21. card.types.push(data[i++]); //类型2
  22. card.rarity = data[i++]; //星级
  23. card.cost = data[i++]; //cost
  24. card.unk01 = data[i++]; //未知01
  25. card.maxLevel = data[i++]; //最大等级
  26. card.feedExp = data[i++]; //1级喂食经验,需要除以4
  27. card.isEmpty = data[i++] === 1; //空卡片?
  28. card.sellPrice = data[i++]; //1级卖钱,需要除以10
  29. card.hp = readCurve(); //HP增长
  30. card.atk = readCurve(); //攻击增长
  31. card.rcv = readCurve(); //回复增长
  32. card.exp = { min: 0, max: data[i++], scale: data[i++] }; //经验增长
  33. card.activeSkillId = data[i++]; //主动技
  34. card.leaderSkillId = data[i++]; //队长技
  35. card.enemy = { //作为怪物的数值
  36. countdown: data[i++],
  37. hp: readCurve(),
  38. atk: readCurve(),
  39. def: readCurve(),
  40. maxLevel: data[i++],
  41. coin: data[i++],
  42. exp: data[i++]
  43. };
  44. card.evoBaseId = data[i++]; //进化基础ID
  45. card.evoMaterials = [data[i++], data[i++], data[i++], data[i++], data[i++]]; //进化素材
  46. card.unevoMaterials = [data[i++], data[i++], data[i++], data[i++], data[i++]]; //退化素材
  47. card.unk02 = data[i++]; //未知02
  48. card.unk03 = data[i++]; //未知03
  49. card.unk04 = data[i++]; //未知04
  50. card.unk05 = data[i++]; //未知05
  51. card.unk06 = data[i++]; //未知06
  52. card.unk07 = data[i++]; //未知07
  53. const numSkills = data[i++]; //几种敌人技能
  54. card.enemy.skills = Array.from(new Array(numSkills)).map(() => ({
  55. id: data[i++],
  56. ai: data[i++],
  57. rnd: data[i++]
  58. }));
  59. const numAwakening = data[i++]; //觉醒个数
  60. card.awakenings = Array.from(new Array(numAwakening)).map(() => data[i++]);
  61. const sAwakeningStr = data[i++];
  62. card.superAwakenings = sAwakeningStr.length>0?(sAwakeningStr.split(',')).map(Number):[]; //超觉醒
  63. card.evoRootId = data[i++]; //进化链根ID
  64. card.seriesId = data[i++]; //系列ID
  65. card.types.push(data[i++]); //类型3
  66. card.sellMP = data[i++]; //卖多少MP
  67. card.latentAwakeningId = data[i++]; //潜在觉醒ID
  68. card.collabId = data[i++]; //合作ID
  69. const flags = data[i++]; //一个旗子?
  70. card.unk08 = flags; //未知08
  71. card.canAssist = (flags & 1) !== 0; //是否能当二技
  72. card.enabled = (flags & 1<<1) !== 0; //是否已启用
  73. card.overlay = card.types.some(t => { //这步还是猜测,是否能合并
  74. return t == 0 || t == 12 || t == 14; //0進化用;12能力覺醒用;14強化合成用;15販賣用
  75. }) && (flags & 1<<3) === 0; //進化用、能力覺醒用、強化合成用,且flag有1000时
  76. card.is8Latent = (flags & 1<<5) !== 0; //是否支持8个潜觉
  77. card.altName = data[i++].split("|").filter(str=>str.length); //替换名字(分类标签)
  78. card.limitBreakIncr = data[i++]; //110级增长
  79. card.voiceId = data[i++]; //语音觉醒的ID
  80. card.blockSkinId = data[i++]; //珠子皮肤ID
  81. card.specialAttribute = data[i++]; //特别属性,比如黄龙
  82. if (i !== data.length)
  83. console.log(`residue data for #${card.id}: ${i} ${data.length}`);
  84. }
  85. }
  86. //对于Nodejs输出成模块
  87. if (typeof(module) != "undefined") module.exports = Card;

智龙迷城队伍图制作工具