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.0 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  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. var mdAwoken = ms[m.id].awoken; //这个怪物的觉醒数据
  93. var mdSAwoken = ms[m.id].sAwoken; //这个怪物的超觉醒数据
  94. if ((!mdAwoken && !mdSAwoken) || (isAssist && mdAwoken.indexOf(49)<0))
  95. { //如果没有觉醒和超觉醒 || (如果是辅助队 &&第一个不是武器觉醒)
  96. return c;
  97. }
  98. //启用的觉醒数组片段
  99. var enableAwoken = mdAwoken.slice(0,m.awoken);
  100. //相同的觉醒数
  101. var hasAwoken = enableAwoken.filter(function(a){return a == ak;}).length;
  102. //如果是单人,有超觉醒,且超觉醒id和计数的id相同
  103. if (solo && mdSAwoken && (mdSAwoken[m.sawoken] == ak))
  104. {
  105. hasAwoken++;
  106. }
  107. return c + hasAwoken;
  108. },0);
  109. return tc + teamAwokenCount;
  110. },0)
  111. return formationAwokenCount;
  112. }
  113. //返回可用的怪物名称
  114. function returnMonsterNameArr(m,lsList)
  115. {
  116. var monNameArr = lsList.map(function(lc){ //取出每种语言
  117. return m.name[lc];
  118. }).filter(function(ln){ //去掉空值和问号
  119. return (ln?(ln.length>0):false) && !/^(?:초월\s*)?\?+/.test(ln);
  120. });
  121. if (monNameArr.length < 1) //如果本来的列表里没有名字
  122. {
  123. for (var nc in m.name)
  124. { //循环所有名字
  125. var theName = m.name[nc]; //当前的名字
  126. if (!/^(?:초월\s*)?\?+/.test(theName)) //如果不是问号
  127. {
  128. monNameArr.push(theName);
  129. }
  130. }
  131. if (monNameArr.length < 1) monNameArr.push("????"); //如果还没有,默认名是问号
  132. }
  133. return monNameArr;
  134. }
  135. //Code From pad-rikuu
  136. function valueAt(level, maxLevel, curve) {
  137. const f = maxLevel === 1 ? 1 : (level - 1) / (maxLevel - 1);
  138. return curve.min + (curve.max - curve.min) * Math.pow(f, curve.scale);
  139. }
  140. //计算怪物的能力
  141. function calculateAbility(monid,level,plus,awoken,latent,weaponId,weaponAwoken)
  142. {
  143. if (monid == undefined) monid = 0;
  144. if (level == undefined) level = 1;
  145. if (plus == undefined) plus = [0,0,0];
  146. if (awoken == undefined) awoken = 0;
  147. if (latent == undefined) latent = [];
  148. if (monid<=0) return null;
  149. var m = ms[monid]; //怪物数据
  150. var plusAdd = [10,5,3]; //加值的增加值
  151. var awokenAdd = [ //对应加三维觉醒的序号与增加值
  152. [{index:1,value:500},{index:65,value:-5000}],
  153. [{index:2,value:100},{index:66,value:-1000}],
  154. [{index:3,value:200},{index:67,value:-2000}]
  155. ];
  156. var latentAdd = [ //对应加三维潜在觉醒的序号与增加比例
  157. [{index:1,scale:0.015},{index:12,scale:0.03},{index:25,scale:0.045}],
  158. [{index:2,scale:0.01},{index:12,scale:0.02},{index:26,scale:0.03}],
  159. [{index:3,scale:0.1},{index:12,scale:0.2},{index:27,scale:0.3}]
  160. ];
  161. var abilitys = m.ability.map(function(ab,idx){
  162. var n_base = Math.round(valueAt(level,m.maxLv,ab));
  163. //var n_base = Math.round((ab[1]-ab[0])*(level-1)/98+ab[0]); //99级以内的增加
  164. if (level>99) //110级的增加
  165. { //100到110级有11级,将m.a110的成长比率平均分配到这11级内
  166. n_base = Math.round(ab.max + ab.max*(m.a110/100)*(level-99)/11);
  167. }
  168. var n_plus = plus[idx]*plusAdd[idx]; //加值增加量
  169. var awokenList = m.awoken.slice(0,awoken); //储存生效的觉醒
  170. if (weaponId)
  171. {
  172. var weapon = ms[weaponId]; //武器的怪物数据
  173. var weaponAwokenList = weapon.awoken.slice(0,weaponAwoken);
  174. if (weaponAwokenList.indexOf(49)>=0)
  175. awokenList = awokenList.concat(weaponAwokenList);
  176. }
  177. var n_awoken = awoken
  178. ?Math.round(awokenAdd[idx].reduce(function(previous,aw){
  179. var awokenCount = awokenList.filter(function(a){return a==aw.index;}).length; //每个潜觉的数量
  180. return previous + aw.value * awokenCount; //无加值与觉醒的基础值,乘以那么多个潜觉的增加倍数
  181. },0))
  182. :0;
  183. var n_latent = latent
  184. ?Math.round(latentAdd[idx].reduce(function(previous,la){
  185. var latentCount = latent.filter(function(l){return l==la.index;}).length; //每个潜觉的数量
  186. return previous + n_base * la.scale * latentCount; //无加值与觉醒的基础值,乘以那么多个潜觉的增加倍数
  187. },0))
  188. :0;
  189. //console.log("基础值:%d,加蛋值:%d,觉醒x%d增加:%d,潜觉增加:%d",n_base,n_plus,awokenCount,n_awoken,n_latent);
  190. var reValue = n_base + n_plus + n_awoken + n_latent;
  191. if (idx<2 && reValue<1) reValue = 1; //HP和ATK最低为1
  192. return reValue;
  193. })
  194. return abilitys;
  195. }

智龙迷城队伍图制作工具