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.

universal_function.js 8.1 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. //类型允许的潜觉杀,前面的数字是官方数据的类型编号,后面的杀是自己做的图片中的潜觉序号
  2. var type_allowable_latent = {
  3. "0":[], //0进化
  4. "12":[], //12觉醒
  5. "14":[], //14强化
  6. "15":[], //15卖钱
  7. "9":[],//特殊保护
  8. "1":[17,18,19,20,21,22,23,24], //1平衡
  9. "2":[20,24],//2体力
  10. "3":[18,22],//3回复
  11. "4":[20,24],//4龙
  12. "5":[19],//5神
  13. "6":[19,23],//6攻击
  14. "7":[17],//7恶魔
  15. "8":[17,20,21,24],//8机械
  16. }
  17. //仿GM_xmlhttpRequest函数v1.3
  18. if (typeof(GM_xmlhttpRequest) == "undefined") {
  19. var GM_xmlhttpRequest = function(GM_param) {
  20. var xhr = new XMLHttpRequest(); //创建XMLHttpRequest对象
  21. xhr.open(GM_param.method, GM_param.url, true);
  22. if (GM_param.responseType) xhr.responseType = GM_param.responseType;
  23. if (GM_param.overrideMimeType) xhr.overrideMimeType(GM_param.overrideMimeType);
  24. xhr.onreadystatechange = function() //设置回调函数
  25. {
  26. if (xhr.readyState === xhr.DONE) {
  27. if (xhr.status === 200 && GM_param.onload)
  28. GM_param.onload(xhr);
  29. if (xhr.status !== 200 && GM_param.onerror)
  30. GM_param.onerror(xhr);
  31. }
  32. }
  33. for (var header in GM_param.headers) {
  34. xhr.setRequestHeader(header, GM_param.headers[header]);
  35. }
  36. xhr.send(GM_param.data ? GM_param.data : null);
  37. }
  38. }
  39. //数字补0
  40. function PrefixInteger(num, length)
  41. {
  42. return (Array(length).join('0') + num).slice(-length);
  43. }
  44. //获取URL参数
  45. function getQueryString(name) {
  46. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  47. var r = window.location.search.substr(1).match(reg);
  48. if (r != null) return decodeURIComponent(r[2]); return null;
  49. }
  50. //数组去重
  51. /* https://www.cnblogs.com/baiyangyuanzi/p/6726258.html
  52. * 实现思路:获取没重复的最右一值放入新数组。
  53. * (检测到有重复值时终止当前循环同时进入顶层循环的下一轮判断)*/
  54. function uniq(array){
  55. var temp = [];
  56. var l = array.length;
  57. for(var i = 0; i < l; i++) {
  58. for(var j = i + 1; j < l; j++){
  59. if (array[i] === array[j]){
  60. i++;
  61. j = i;
  62. }
  63. }
  64. temp.push(array[i]);
  65. }
  66. return temp;
  67. }
  68. //计算用了多少潜觉格子
  69. function usedHole(latent)
  70. {
  71. return latent.reduce(function(previous,current){
  72. return previous + (current>= 12?2:1);
  73. },0);
  74. }
  75. //计算队伍中有多少个该觉醒
  76. function awokenCountInFormation(formationTeam,ak,solo)
  77. {
  78. var allAwokenCount = formationTeam.reduce(function(fc,fm){
  79. return fc + awokenCountInTeam(fm,ak,solo);
  80. },0)
  81. return allAwokenCount;
  82. }
  83. //计算队伍中有多少个该觉醒
  84. function awokenCountInTeam(team,ak,solo)
  85. {
  86. var formationAwokenCount = team.reduce(function(tc,tm,isAssist){
  87. var teamAwokenCount = tm.reduce(function(c,m){
  88. if (m.id<=0)
  89. { //如果是特殊情况的
  90. return c;
  91. }
  92. let card = ms[m.id];
  93. if (!card) return c; //如果没有这个怪,返回原始数据
  94. var mdAwoken = card.awoken; //这个怪物的觉醒数据
  95. var mdSAwoken = card.sAwoken; //这个怪物的超觉醒数据
  96. if ((!mdAwoken && !mdSAwoken) || (isAssist && mdAwoken.indexOf(49)<0))
  97. { //如果没有觉醒和超觉醒 || (如果是辅助队 &&第一个不是武器觉醒)
  98. return c;
  99. }
  100. //启用的觉醒数组片段
  101. var enableAwoken = mdAwoken.slice(0,m.awoken);
  102. //相同的觉醒数
  103. var hasAwoken = enableAwoken.filter(function(a){return a == ak;}).length;
  104. //如果是单人,有超觉醒,且超觉醒id和计数的id相同
  105. if (solo && mdSAwoken && (mdSAwoken[m.sawoken] == ak))
  106. {
  107. hasAwoken++;
  108. }
  109. return c + hasAwoken;
  110. },0);
  111. return tc + teamAwokenCount;
  112. },0)
  113. return formationAwokenCount;
  114. }
  115. //返回可用的怪物名称
  116. function returnMonsterNameArr(m,lsList)
  117. {
  118. var monNameArr = lsList.map(function(lc){ //取出每种语言
  119. return m.name[lc];
  120. }).filter(function(ln){ //去掉空值和问号
  121. return (ln?(ln.length>0):false) && !/^(?:초월\s*)?\?+/.test(ln);
  122. });
  123. if (monNameArr.length < 1) //如果本来的列表里没有名字
  124. {
  125. for (var nc in m.name)
  126. { //循环所有名字
  127. var theName = m.name[nc]; //当前的名字
  128. if (!/^(?:초월\s*)?\?+/.test(theName)) //如果不是问号
  129. {
  130. monNameArr.push(theName);
  131. }
  132. }
  133. if (monNameArr.length < 1) monNameArr.push("????"); //如果还没有,默认名是问号
  134. }
  135. return monNameArr;
  136. }
  137. //Code From pad-rikuu
  138. function valueAt(level, maxLevel, curve) {
  139. const f = maxLevel === 1 ? 1 : (level - 1) / (maxLevel - 1);
  140. return curve.min + (curve.max - curve.min) * Math.pow(f, curve.scale);
  141. }
  142. //计算怪物的能力
  143. function calculateAbility(monid,level,plus,awoken,latent,weaponId,weaponAwoken)
  144. {
  145. if (monid == undefined) monid = 0;
  146. if (level == undefined) level = 1;
  147. if (plus == undefined) plus = [0,0,0];
  148. if (awoken == undefined) awoken = 0;
  149. if (latent == undefined) latent = [];
  150. var m = ms[monid]; //怪物数据
  151. if (monid ==0 || m==undefined) return null;
  152. var plusAdd = [10,5,3]; //加值的增加值
  153. var awokenAdd = [ //对应加三维觉醒的序号与增加值
  154. [{index:1,value:500},{index:65,value:-5000}],
  155. [{index:2,value:100},{index:66,value:-1000}],
  156. [{index:3,value:200},{index:67,value:-2000}]
  157. ];
  158. var latentAdd = [ //对应加三维潜在觉醒的序号与增加比例
  159. [{index:1,scale:0.015},{index:12,scale:0.03},{index:25,scale:0.045}],
  160. [{index:2,scale:0.01},{index:12,scale:0.02},{index:26,scale:0.03}],
  161. [{index:3,scale:0.1},{index:12,scale:0.2},{index:27,scale:0.3}]
  162. ];
  163. var abilitys = m.ability.map(function(ab,idx){
  164. var n_base = Math.round(valueAt(level,m.maxLv,ab));
  165. //var n_base = Math.round((ab[1]-ab[0])*(level-1)/98+ab[0]); //99级以内的增加
  166. if (level>99) //110级的增加
  167. { //100到110级有11级,将m.a110的成长比率平均分配到这11级内
  168. n_base = Math.round(ab.max + ab.max*(m.a110/100)*(level-99)/11);
  169. }
  170. var n_plus = plus[idx]*plusAdd[idx]; //加值增加量
  171. var awokenList = m.awoken.slice(0,awoken); //储存生效的觉醒
  172. if (weaponId)
  173. {
  174. var weapon = ms[weaponId] || ms[0]; //武器的怪物数据,没有这个怪的话,切换到0
  175. var weaponAwokenList = weapon.awoken.slice(0,weaponAwoken);
  176. if (weaponAwokenList.indexOf(49)>=0)
  177. awokenList = awokenList.concat(weaponAwokenList);
  178. }
  179. var n_awoken = awoken
  180. ?Math.round(awokenAdd[idx].reduce(function(previous,aw){
  181. var awokenCount = awokenList.filter(function(a){return a==aw.index;}).length; //每个潜觉的数量
  182. return previous + aw.value * awokenCount; //无加值与觉醒的基础值,乘以那么多个潜觉的增加倍数
  183. },0))
  184. :0;
  185. var n_latent = latent
  186. ?Math.round(latentAdd[idx].reduce(function(previous,la){
  187. var latentCount = latent.filter(function(l){return l==la.index;}).length; //每个潜觉的数量
  188. return previous + n_base * la.scale * latentCount; //无加值与觉醒的基础值,乘以那么多个潜觉的增加倍数
  189. },0))
  190. :0;
  191. //console.log("基础值:%d,加蛋值:%d,觉醒x%d增加:%d,潜觉增加:%d",n_base,n_plus,awokenCount,n_awoken,n_latent);
  192. var reValue = n_base + n_plus + n_awoken + n_latent;
  193. if (idx<2 && reValue<1) reValue = 1; //HP和ATK最低为1
  194. return reValue;
  195. })
  196. return abilitys;
  197. }

智龙迷城队伍图制作工具