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.

script.js 14 kB

7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448
  1. var ms = null;
  2. var memberTeamObj = function(){
  3. return {id:0,level:0,awoken:0,plus:[0,0,0],latent:[]};
  4. }
  5. var memberAssistObj = function(){
  6. return {id:0,level:0,awoken:0,plus:[0,0,0]};
  7. }
  8. var teamObj = function(){
  9. return [
  10. [
  11. new memberTeamObj(),
  12. new memberTeamObj(),
  13. new memberTeamObj(),
  14. new memberTeamObj(),
  15. new memberTeamObj(),
  16. new memberTeamObj(),
  17. ],
  18. [
  19. new memberAssistObj(),
  20. new memberAssistObj(),
  21. new memberAssistObj(),
  22. new memberAssistObj(),
  23. new memberAssistObj(),
  24. new memberAssistObj(),
  25. ],
  26. ];
  27. }
  28. var formation = {
  29. title:"",
  30. team:[
  31. new teamObj(),//队伍A
  32. new teamObj(),//队伍B
  33. ]
  34. };
  35. window.onload = function()
  36. {
  37. GM_xmlhttpRequest({
  38. method: "GET",
  39. url:"monsters-info/mon.json",
  40. onload: function(response) {
  41. ms = JSON.parse(response.response);
  42. initialize();//初始化
  43. test(); //测试代码
  44. },
  45. onerror: function(response) {
  46. console.error("怪物数据获取错误",response);
  47. }
  48. });
  49. }
  50. //初始化
  51. function initialize()
  52. {
  53. var monstersList = document.querySelector("#monsters-list");
  54. ms.forEach(function(m){
  55. var opt = monstersList.appendChild(document.createElement("option"));
  56. opt.value = m.id;
  57. opt.label = m.id + " | " + m.name["ja"] + " | " + m.name["en"] + " | " + m.name["ko"];
  58. });
  59. //队伍框
  60. var formationBox = document.querySelector(".formation-box");
  61. formationBox.formationBox = formation;
  62. //编辑框
  63. var editBox = document.querySelector(".edit-box");
  64. editBox.latent = []; //储存潜在觉醒
  65. editBox.assist = false; //储存是否为辅助宠物
  66. editBox.monsterBox = null;
  67. editBox.latentBox = null;
  68. editBox.member = null;
  69. var settingBox = editBox.querySelector(".setting-box")
  70. //id搜索
  71. var monstersSearch = editBox.querySelector(".edit-box .m-id");
  72. monstersSearch.onchange = function(){
  73. if (/^\d+$/.test(this.value))
  74. {
  75. editBoxChangeMonId(parseInt(this.value));
  76. }
  77. }
  78. monstersSearch.oninput = monstersSearch.onchange;
  79. //觉醒
  80. var monEditAwokens = Array.prototype.slice.call(settingBox.querySelectorAll(".m-awoken-ul>.awoken-icon"));
  81. monEditAwokens.forEach(function(akDom,idx,domArr){
  82. akDom.onclick = function(){
  83. if (idx>0 && idx>=domArr.filter(function(d){return !d.classList.contains("display-none")}).length-1)
  84. domArr[0].innerHTML = "★";
  85. else
  86. domArr[0].innerHTML = idx;
  87. for(var ai=1;ai<domArr.length;ai++)
  88. {
  89. if(ai<=idx)
  90. {
  91. if(domArr[ai].classList.contains("unselected-awoken"))
  92. domArr[ai].classList.remove("unselected-awoken");
  93. }
  94. else
  95. {
  96. if(!domArr[ai].classList.contains("unselected-awoken"))
  97. domArr[ai].classList.add("unselected-awoken");
  98. }
  99. }
  100. }
  101. })
  102. //等级
  103. var monEditLv = settingBox.querySelector(".m-level");
  104. var monEditLvMax = settingBox.querySelector(".m-level-btn-max");
  105. monEditLvMax.onclick = function(){
  106. monEditLv.value = this.value;
  107. }
  108. //加蛋
  109. var monEditAddHp = settingBox.querySelector(".m-plus-hp");
  110. var monEditAddAtk = settingBox.querySelector(".m-plus-atk");
  111. var monEditAddRcv = settingBox.querySelector(".m-plus-rcv");
  112. var monEditAddHp99 = settingBox.querySelector(".m-plus-hp-btn-99");
  113. monEditAddHp99.onclick = function(){monEditAddHp.value = this.value}
  114. var monEditAddAtk99 = settingBox.querySelector(".m-plus-atk-btn-99");
  115. monEditAddAtk99.onclick = function(){monEditAddAtk.value = this.value}
  116. var monEditAddRcv99 = settingBox.querySelector(".m-plus-rcv-btn-99");
  117. monEditAddRcv99.onclick = function(){monEditAddRcv.value = this.value}
  118. var monEditAdd297 = settingBox.querySelector(".m-plus-btn-297");
  119. monEditAdd297.onclick = function(){monEditAddHp.value = monEditAddAtk.value = monEditAddRcv.value = 99}
  120. //潜觉
  121. var monEditLatentUl = settingBox.querySelector(".m-latent-ul");
  122. var monEditLatents = Array.prototype.slice.call(monEditLatentUl.querySelectorAll("li"));
  123. var monEditLatentAllowableUl = settingBox.querySelector(".m-latent-allowable-ul");
  124. var monEditLatentsAllowable = Array.prototype.slice.call(monEditLatentAllowableUl.querySelectorAll("li"));
  125. function refreshLatent(latent) //刷新潜觉
  126. {
  127. if (this.value<0) return;
  128. var usedHoleN = usedHole(latent);
  129. for (var ai=0;ai<6;ai++)
  130. {
  131. if (latent[ai])
  132. {
  133. monEditLatents[ai].className = "latent-icon latent-icon-" + latent[ai];
  134. monEditLatents[ai].value = ai;
  135. }
  136. else if(ai<(6-usedHoleN+latent.length))
  137. {
  138. monEditLatents[ai].className = "latent-icon";
  139. monEditLatents[ai].value = -1;
  140. }
  141. else
  142. {
  143. monEditLatents[ai].className = "display-none";
  144. monEditLatents[ai].value = -1;
  145. }
  146. }
  147. }
  148. editBox.refreshLatent = refreshLatent;
  149. //已有觉醒的去除
  150. monEditLatents.forEach(function(l){
  151. l.onclick = function(){
  152. var aIdx = parseInt(this.value);
  153. editBox.latent.splice(aIdx,1);
  154. refreshLatent(editBox.latent);
  155. }
  156. })
  157. //可选觉醒的添加
  158. monEditLatentsAllowable.forEach(function(la){
  159. la.onclick = function(){
  160. if (this.classList.contains("unselected-latent")) return;
  161. var lIdx = parseInt(this.value);
  162. var usedHoleN = usedHole(editBox.latent);
  163. if (lIdx >= 12 && usedHoleN<=4)
  164. editBox.latent.push(lIdx);
  165. else if (lIdx < 12 && usedHoleN<=5)
  166. editBox.latent.push(lIdx);
  167. refreshLatent(editBox.latent);
  168. }
  169. })
  170. var btnCancel = editBox.querySelector(".button-cancel");
  171. var btnDone = editBox.querySelector(".button-done");
  172. btnCancel.onclick = function(){
  173. btnDone.classList.remove("cant-assist");
  174. btnDone.disabled = false;
  175. editBox.member = null;
  176. editBox.classList.add("display-none");
  177. formationBox.classList.remove("blur-bg");
  178. }
  179. btnDone.onclick = function(){
  180. var mD = editBox.member;
  181. mD.id = parseInt(monstersSearch.value);
  182. mD.level = parseInt(monEditLv.value);
  183. mD.awoken = monEditAwokens.filter(function(akDom){
  184. return !akDom.classList.contains("unselected-awoken") && !akDom.classList.contains("display-none")
  185. }).length - 1;
  186. mD.plus[0] = parseInt(monEditAddHp.value);
  187. mD.plus[1] = parseInt(monEditAddAtk.value);
  188. mD.plus[2] = parseInt(monEditAddRcv.value);
  189. if (!editBox.assist)
  190. {
  191. mD.latent = editBox.latent.concat();
  192. }
  193. changeid(mD,editBox.monsterBox,editBox.latentBox);
  194. editBox.classList.add("display-none");
  195. formationBox.classList.remove("blur-bg");
  196. }
  197. }
  198. function usedHole(latent) //计算用了多少潜觉格子
  199. {
  200. return latent.reduce(function(previous,current){
  201. return previous + (current>= 12?2:1);
  202. },0);
  203. }
  204. function changeid(mon,monDom,latentDom)
  205. {
  206. var md = ms[mon.id]; //怪物固定数据
  207. if (mon.id>-1) //如果提供了id
  208. {
  209. monDom.className = "monster";
  210. monDom.classList.add("pet-cards-" + Math.ceil(mon.id/100)); //添加图片编号
  211. var idxInPage = (mon.id-1) % 100; //获取当前页面的总序号
  212. monDom.classList.add("pet-cards-index-x-" + idxInPage % 10); //添加X方向序号
  213. monDom.classList.add("pet-cards-index-y-" + parseInt(idxInPage / 10)); //添加Y方向序号
  214. monDom.querySelector(".property").className = "property property-" + md.ppt[0]; //主属性
  215. monDom.querySelector(".subproperty").className = "subproperty subproperty-" + md.ppt[1]; //副属性
  216. monDom.title = "No." + mon.id + " " + md.name["ja"];
  217. monDom.href = "http://pad.skyozora.com/pets/" + mon.id;
  218. }
  219. if (mon.level>0) //如果提供了等级
  220. {
  221. var levelDom = monDom.querySelector(".level");
  222. levelDom.innerHTML = mon.level;
  223. if (mon.level == 99 || (mon.level >= md.maxLevel && md.maxLevel <=99))
  224. {
  225. levelDom.classList.add("max");
  226. }else
  227. {
  228. levelDom.classList.remove("max");
  229. }
  230. if (md.maxLevel>99 && mon.level>=99)
  231. levelDom.classList.add("_110");
  232. else
  233. levelDom.classList.remove("_110");
  234. }
  235. if (mon.awoken>-1) //如果提供了觉醒
  236. {
  237. var awokenIcon = monDom.querySelector(".awoken-count");
  238. if (mon.awoken == 0 || md.awoken.length < 1) //没觉醒
  239. {
  240. awokenIcon.classList.add("display-none");
  241. awokenIcon.innerHTML = "";
  242. }else
  243. {
  244. awokenIcon.classList.remove("display-none");
  245. if (mon.awoken < md.awoken.length) //觉醒没满直接写数字
  246. {
  247. awokenIcon.innerHTML = mon.awoken;
  248. awokenIcon.classList.remove("allowable-assist");
  249. }else //满觉醒打星星
  250. {
  251. awokenIcon.innerHTML = "★";
  252. if (md.assist)
  253. awokenIcon.classList.add("allowable-assist");
  254. }
  255. }
  256. }
  257. if (mon.plus) //如果提供了加值
  258. {
  259. monDom.querySelector(".plus .hp").innerHTML = mon.plus[0];
  260. monDom.querySelector(".plus .atk").innerHTML = mon.plus[1];
  261. monDom.querySelector(".plus .rcv").innerHTML = mon.plus[2];
  262. if (mon.plus[0]+mon.plus[1]+mon.plus[2] >= 297)
  263. {
  264. monDom.querySelector(".plus").classList.add("has297");
  265. }else
  266. {
  267. monDom.querySelector(".plus").classList.remove("has297");
  268. }
  269. }
  270. if (latentDom && mon.latent) //如果提供了潜觉
  271. {
  272. var latent = mon.latent.sort(function(a,b){return b-a;});
  273. var latentDoms = Array.prototype.slice.call(latentDom.querySelectorAll("li"));
  274. var usedHoleN = usedHole(latent);
  275. for (var ai=0;ai<6;ai++)
  276. {
  277. if (latent[ai])
  278. {
  279. latentDoms[ai].className = "latent-icon latent-icon-" + latent[ai];
  280. }
  281. else if(ai<(6-usedHoleN+latent.length))
  282. {
  283. latentDoms[ai].className = "latent-icon";
  284. }
  285. else
  286. {
  287. latentDoms[ai].className = "display-none";
  288. }
  289. }
  290. }
  291. }
  292. //点击怪物头像,出现编辑框
  293. function editMon(AorB,isAssist,tempIdx)
  294. {
  295. //数据
  296. var mD = formation.team[AorB][isAssist][tempIdx];
  297. //对应的Dom
  298. var formationBox = AorB?document.querySelector(".formation-box .formation-B-box"):document.querySelector(".formation-box .formation-A-box");
  299. var teamBox = isAssist?formationBox.querySelector(".formation-assist"):formationBox.querySelector(".formation-team");
  300. var memberBox = teamBox.querySelector(".member-" + (tempIdx+1));
  301. var editBox = document.querySelector(".edit-box");
  302. var monsterBox = memberBox.querySelector(".monster");
  303. document.querySelector(".formation-box").classList.add("blur-bg");
  304. editBox.classList.remove("display-none");
  305. editBox.assist = isAssist;
  306. editBox.monsterBox = monsterBox;
  307. editBox.member = mD;
  308. editBox.assist = isAssist;
  309. if (!isAssist)
  310. {
  311. var latentBox = formationBox.querySelector(".formation-latents .latents-"+(tempIdx+1)+" .latent-ul");
  312. editBox.latentBox = latentBox;
  313. }
  314. var monstersSearch = editBox.querySelector(".search-box .m-id");
  315. monstersSearch.value = mD.id;
  316. monstersSearch.onchange();
  317. var settingBox = editBox.querySelector(".setting-box");
  318. var monEditAwokens = settingBox.querySelectorAll(".m-awoken-ul .awoken-icon");
  319. if (mD.awoken>0) monEditAwokens[mD.awoken].onclick();
  320. var monEditLv = settingBox.querySelector(".m-level");
  321. monEditLv.value = mD.level;
  322. var monEditAddHp = settingBox.querySelector(".m-plus-hp");
  323. var monEditAddAtk = settingBox.querySelector(".m-plus-atk");
  324. var monEditAddRcv = settingBox.querySelector(".m-plus-rcv");
  325. monEditAddHp.value = mD.plus[0];
  326. monEditAddAtk.value = mD.plus[1];
  327. monEditAddRcv.value = mD.plus[2];
  328. if (!isAssist)
  329. {
  330. editBox.latent = mD.latent.concat();
  331. editBox.refreshLatent(editBox.latent);
  332. }
  333. }
  334. function editBoxChangeMonId(id)
  335. {
  336. var md = ms[id]; //怪物固定数据
  337. if (!md){
  338. id = 0;
  339. md = ms[0]
  340. }
  341. var editBox = document.querySelector(".edit-box");
  342. var monInfoBox = editBox.querySelector(".monsterinfo-box");
  343. var me = monInfoBox.querySelector(".monster");
  344. changeid({id:id,},me); //改变图像
  345. var mId = monInfoBox.querySelector(".monster-id");
  346. mId.innerHTML = id;
  347. var mRare = monInfoBox.querySelector(".monster-rare");
  348. mRare.className = "monster-rare rare-" + md.rare;
  349. var mName = monInfoBox.querySelector(".monster-name");
  350. mName.innerHTML = md.name["ja"];
  351. var mType = monInfoBox.querySelectorAll(".monster-type li");
  352. for (var ti=0;ti<mType.length;ti++)
  353. {
  354. if (md.type[ti])
  355. {
  356. mType[ti].className = "type-name type-name-" + md.type[ti];
  357. mType[ti].firstChild.className = "type-icon type-icon-" + md.type[ti];
  358. }else
  359. {
  360. mType[ti].className = "display-none";
  361. }
  362. }
  363. var settingBox = editBox.querySelector(".setting-box");
  364. var mAwoken = settingBox.querySelectorAll(".m-awoken-ul li");
  365. mAwoken[0].innerHTML = md.awoken.length?"★":"0";
  366. for (var ai=1;ai<mAwoken.length;ai++)
  367. {
  368. if (md.awoken[ai-1])
  369. {
  370. mAwoken[ai].className = "awoken-icon awoken-" + md.awoken[ai-1];
  371. }else
  372. {
  373. mAwoken[ai].className = "display-none";
  374. }
  375. }
  376. var monEditLvMax = settingBox.querySelector(".m-level-btn-max");
  377. monEditLvMax.innerHTML = monEditLvMax.value = md.maxLevel;
  378. var monEditLv = settingBox.querySelector(".m-level");
  379. monEditLv.value = md.maxLevel>99?99:md.maxLevel;
  380. var monLatentAllowUl = settingBox.querySelector(".m-latent-allowable-ul");
  381. //该宠Type允许的杀
  382. var allowLatent = uniq(md.type.reduce(function (previous, t, index, array) {
  383. return previous.concat(type_allowable_latent[t]);
  384. },[]));
  385. for(var li=17;li<=24;li++)
  386. {
  387. var latentDom = monLatentAllowUl.querySelector(".latent-icon-" + li);
  388. if (allowLatent.indexOf(li)>=0)
  389. {
  390. if(latentDom.classList.contains("unselected-latent"))
  391. latentDom.classList.remove("unselected-latent");
  392. }else
  393. {
  394. if(!latentDom.classList.contains("unselected-latent"))
  395. latentDom.classList.add("unselected-latent");
  396. }
  397. }
  398. if (editBox.assist)
  399. {
  400. var btnDone = editBox.querySelector(".button-done");
  401. if (!md.assist)
  402. {
  403. btnDone.classList.add("cant-assist");
  404. btnDone.disabled = true;
  405. }else
  406. {
  407. btnDone.classList.remove("cant-assist");
  408. btnDone.disabled = false;
  409. }
  410. }
  411. editBox.latent.length = 0;
  412. editBox.refreshLatent(editBox.latent);
  413. }
  414. function test()
  415. {
  416. var m1 = document.querySelector(".formation-A-box .formation-team .member-1 .monster");
  417. var a1 = document.querySelector(".formation-A-box .formation-latents .latents-1 .latent-ul");
  418. var m = formation.team[0][0][0];
  419. m.id=5209;
  420. m.level=36;
  421. m.awoken=5;
  422. m.plus[0]=98;
  423. m.plus[1]=96;
  424. m.plus[2]=95;
  425. m.latent=[11,11,16,11,11];
  426. changeid(m,m1,a1);
  427. //editBoxChangeMonId(3264);
  428. }

智龙迷城队伍图制作工具

Contributors (1)