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 4.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. //分析卡片的函数,Code From https://github.com/kiootic/pad-rikuu
  2. class Card{
  3. static fixId(id, reverse = false){
  4. return reverse ? (id >= 9900 ? id + 100 : id) : (id >= 10000 ? id - 100 : id);
  5. }
  6. constructor(data){
  7. let card = this;
  8. card.attrs=[];
  9. card.types=[];
  10. let i = 0;
  11. function readCurve() {
  12. return {
  13. min: data[i++],
  14. max: data[i++],
  15. scale: data[i++],
  16. };
  17. }
  18. card.id = Card.fixId(data[i++]); //ID
  19. card.name = data[i++]; //名字
  20. card.attrs.push(data[i++]); //属性1
  21. card.attrs.push(data[i++]); //属性2
  22. card.isUltEvo = data[i++] !== 0; //是否究极进化
  23. card.types.push(data[i++]); //类型1
  24. card.types.push(data[i++]); //类型2
  25. card.rarity = data[i++]; //星级
  26. card.cost = data[i++]; //cost
  27. card.unk01 = data[i++]; //未知01
  28. card.maxLevel = data[i++]; //最大等级
  29. card.feedExp = data[i++]; //1级喂食经验,需要除以4
  30. card.isEmpty = data[i++] === 1; //空卡片?
  31. card.sellPrice = data[i++]; //1级卖钱,需要除以10
  32. card.hp = readCurve(); //HP增长
  33. card.atk = readCurve(); //攻击增长
  34. card.rcv = readCurve(); //回复增长
  35. card.exp = { min: 0, max: data[i++], scale: data[i++] }; //经验增长
  36. card.activeSkillId = data[i++]; //主动技
  37. card.leaderSkillId = data[i++]; //队长技
  38. card.enemy = { //作为怪物的数值
  39. countdown: data[i++],
  40. hp: readCurve(),
  41. atk: readCurve(),
  42. def: readCurve(),
  43. maxLevel: data[i++],
  44. coin: data[i++],
  45. exp: data[i++]
  46. };
  47. card.evoBaseId = Card.fixId(data[i++]); //进化基础ID
  48. card.evoMaterials = [data[i++], data[i++], data[i++], data[i++], data[i++]].map(Card.fixId); //进化素材
  49. card.unevoMaterials = [data[i++], data[i++], data[i++], data[i++], data[i++]].map(Card.fixId); //退化素材
  50. card.unk02 = data[i++]; //未知02
  51. card.unk03 = data[i++]; //未知03
  52. card.unk04 = data[i++]; //未知04
  53. card.unk05 = data[i++]; //未知05
  54. card.unk06 = data[i++]; //未知06
  55. card.unk07 = data[i++]; //未知07
  56. const numSkills = data[i++]; //几种敌人技能
  57. card.enemy.skills = Array.from(new Array(numSkills)).map(() => ({
  58. id: data[i++],
  59. ai: data[i++],
  60. rnd: data[i++]
  61. }));
  62. const numAwakening = data[i++]; //觉醒个数
  63. card.awakenings = new Array(numAwakening);
  64. for (let ai=0; ai<numAwakening; ai++) {
  65. card.awakenings[ai] = data[i++];
  66. }
  67. card.superAwakenings = data[i++].split(',').filter(Boolean).map(strN=>parseInt(strN,10)); //超觉醒
  68. card.evoRootId = Card.fixId(data[i++]); //进化链根ID
  69. card.seriesId = data[i++]; //系列ID
  70. card.types.push(data[i++]); //类型3
  71. card.sellMP = data[i++]; //卖多少MP
  72. card.latentAwakeningId = data[i++]; //潜在觉醒ID
  73. card.collabId = data[i++]; //合作ID
  74. const flags = data[i++]; //一个旗子?
  75. card.flags = flags;
  76. card.canAssist = Boolean(flags & 1<<0); //是否能当二技
  77. card.enabled = Boolean(flags & 1<<1); //是否已启用
  78. card.stacking = !Boolean(flags & 1<<3) && //flag有1<<3时,不合并占一格,没有时则根据类型进行合并(目前合并已经不占格子)
  79. card.types.some(t=>[0,12,14,15].includes(t)); //0進化用;12能力覺醒用;14強化合成用;15販賣用默认合并
  80. //card.onlyAssist = Boolean(flags & 1<<4); //是否只能当二技
  81. card.is8Latent = Boolean(flags & 1<<5); //是否支持8个潜觉
  82. card.skillBanner = Boolean(flags & 1<<6); //是否有技能横幅
  83. card.altName = data[i++].split("|").filter(Boolean); //替换名字(分类标签)
  84. card.limitBreakIncr = data[i++]; //110级增长
  85. card.voiceId = data[i++]; //语音觉醒的ID
  86. card.blockSkinOrBgmId = data[i++]; //珠子皮肤ID
  87. card.specialAttribute = data[i++]; //特别属性,比如黄龙
  88. card.searchFlags = [data[i++], data[i++]]; //队长技搜索类型,解析写在这里会导致文件太大,所以写到前端去了
  89. card.gachaId = data[i++]; //目前猜测是桶ID
  90. card.unk08 = data[i++]; //未知08
  91. card.attrs.push(data[i++]); //属性3
  92. card.attrs = card.attrs.filter(Number.isInteger);
  93. if (card.attrs.indexOf(-1)>0)
  94. card.attrs = card.attrs.slice(0,card.attrs.indexOf(-1)); //attr里面去掉-1之后的
  95. card.types = card.types.filter(Number.isInteger);
  96. if (card.types.indexOf(-1)>0)
  97. card.types = card.types.slice(0,card.types.indexOf(-1)); //type里面去掉-1
  98. if (i < data.length)
  99. console.log(`有新增数据/residue data for #${card.id}: ${i} ${data[i]}`);
  100. }
  101. }
  102. //对于Nodejs输出成模块
  103. if (typeof(module) != "undefined") module.exports = Card;

智龙迷城队伍图制作工具