Skin Storage Script

a script to easily store as many skins as you want

当前为 2019-07-10 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Skin Storage Script
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.3
  5. // @description a script to easily store as many skins as you want
  6. // @author Oki
  7. // @match https://*.jstris.jezevec10.com/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. /**************************
  12. Skin Storage Script
  13. **************************/
  14. (function() {
  15.  
  16. window.addEventListener('load', function(){
  17.  
  18. localStorage.customSkins = localStorage.customSkins || "";
  19. localStorage.activeSkins = localStorage.activeSkins || "";
  20. localStorage.randomizeKey = localStorage.randomizeKey || 'F4'
  21.  
  22. document.getElementsByName("bSkin").forEach((radioButton, i)=>{
  23. i>2&&(radioButton.type = "checkbox")
  24. })
  25.  
  26. var randomizeOption = document.createElement("tr");
  27. randomizeOption.innerHTML = '<td>Randomize skin:</td><td><input maxlength="1" id="input421" type="text" size="7" value="'+localStorage.randomizeKey+'"></td><td id="kc421">0</td>'
  28. tab_controls.children[2].appendChild(randomizeOption);
  29.  
  30. var plusButton=document.createElement("div");
  31. plusButton.style = "width:20px;height:20px;background-color:green;text-align:center;font-weight:1000";
  32. plusButton.innerHTML = "+";
  33. plusButton.id = "plusButton";
  34.  
  35.  
  36. var modalStyles=document.createElement("style");
  37. modalStyles.innerHTML='#skinModal {display: none;position: fixed;z-index: 100;padding-top: 200px;left: 0;top: 0;width: 100%;height: 100%;background-color: rgba(0,0,0,0.4)} #modalContent {color:black;background-color: white;margin: auto;padding: 20px;border: 1px solid #888;width: 60%} .xbutton {width:20px;height:20px;background-size:cover;margin-bottom:4px;margin-left:20px;filter: invert(100%)}';
  38. document.body.appendChild(modalStyles);
  39.  
  40. var modal=document.createElement("div");
  41. modal.id = "skinModal";
  42. modal.innerHTML = '<div id="modalContent"><p>Please enter the new skin url. For animated skins, use this format: url1;size1 url2;size2 ...</p><input id="modalInput" style="border:2px solid black;z-index: 1000" type="text" value="https://i.imgur.com/XcnWlC6.png"><br><br><button id="modalClose" style="float:left down">Cancel</button><button id="modalConfirm" style="float:left down">OK</button></div></div>'
  43. app.appendChild(modal);
  44.  
  45.  
  46. var skinModalText = "";
  47.  
  48. modalConfirm.onclick = J=>{
  49. addSkin(1)
  50. }
  51.  
  52. modalClose.onclick = N=>{
  53. addSkin(0)
  54. }
  55.  
  56. function addSkin(flag) {
  57. skinModal.style.display = "none";
  58. skinModalText = modalInput.value
  59. if(skinModalText == ""){flag = 0}
  60. modalInput.value = "";
  61.  
  62. if(!flag){
  63. return;
  64. }
  65.  
  66. var skinNumber = localStorage.customSkins.split(",").length-1;
  67. localStorage.customSkins += ","+skinModalText;
  68. refreshSkins()
  69.  
  70. }
  71.  
  72. plusButton.onclick = X=>{
  73. skinModal.style.display = "block";
  74. }
  75.  
  76. document.getElementsByName("blockSkin")[0].appendChild(plusButton);
  77.  
  78.  
  79. function refreshSkins() {
  80. stopPreviewAnimation();
  81. var oldContainer = document.getElementById("allSkinContainer");
  82. oldContainer.parentNode.removeChild(oldContainer);
  83. addSkins();
  84. startPreviewAnimation();
  85. }
  86.  
  87.  
  88. function addSkins() {
  89. var skins = localStorage.customSkins.split(",")
  90. var allSkinContainer = document.createElement("div")
  91. allSkinContainer.id = "allSkinContainer"
  92.  
  93. skins.map((skin,i)=>{
  94. if(i>0) {
  95. var src = skin.split(";")[0];
  96. allSkinContainer.innerHTML += `<div><input id="bskin`+i+`" type="checkbox" name="bSkin"><label for="bskin`+i+`"><img src="`+src+`" height="20"></label><img src="https://jstris.jezevec10.com/res/svg/dark/rubbish.svg" name="xbutton" class="xbutton" ></div>`
  97. var xbutton = document.getElementById("xbutton")
  98. }
  99. })
  100.  
  101. document.getElementsByName("blockSkin")[0].insertBefore(allSkinContainer,plusButton)
  102. document.getElementsByName("xbutton").forEach((button, i)=>{
  103. button.addEventListener("click", W=>{var temp=localStorage.customSkins.split(',');temp.splice(i+1, 1);localStorage.customSkins=temp;refreshSkins()});
  104. })
  105. }
  106.  
  107.  
  108. function loadSkinNoSize(src) {
  109. var spliced = src.split(";")
  110. if(spliced.length>1){
  111. Game['animatedSkin'] = src.split(" ").map(x=>x.split(";"))
  112. }
  113.  
  114. var skinImg = new Image();
  115. skinImg.onload = function(){
  116. loadSkin(this.src,this.height)
  117. };
  118. skinImg.src = spliced[0];
  119. }
  120.  
  121.  
  122. Game['deployRandomSkin'] = function() {
  123. if (typeof Game['stopAnim'] == 'function') {
  124. Game['stopAnim']();
  125. Game['animatedSkin'] = []
  126. }
  127.  
  128. var candidates = localStorage.activeSkins.split(",").slice(1);
  129. var choice = candidates[Math.floor(Math.random()*candidates.length)];
  130.  
  131. if(choice > 6) {
  132. frames = localStorage.customSkins.split(",")[choice-7].split(" ")
  133.  
  134. if(frames.length>1){
  135. Game['animatedSkin'] = frames.map(x=>x.split(";"))
  136. Game['animationRunning']&&Game['startAnim']();
  137. }
  138. }
  139.  
  140. loadSkinNoSize(document.getElementsByName("bSkin")[choice].nextSibling.children[0].src)
  141. }
  142.  
  143.  
  144. settingsSave.onmouseup = Y=>{
  145. stopPreviewAnimation();
  146.  
  147. localStorage.activeSkins = ""
  148. document.getElementsByName("bSkin").forEach((e,i)=>{
  149. if(i>2 && e.checked){
  150. localStorage.activeSkins += ","+i;
  151. Game['deployRandomSkin']()
  152. }
  153. })
  154. }
  155.  
  156. window.onkeydown = function(e) {
  157. if(e.key.toLowerCase() == "f4") {
  158. Game['deployRandomSkin']()
  159. }
  160. }
  161.  
  162. settings.onmouseup = Z=>{
  163. startPreviewAnimation();
  164.  
  165. setTimeout(U=>{
  166. for(var checkbox of document.getElementsByName("bSkin")) {
  167. checkbox.checked = false;
  168. }
  169. var skins = localStorage.activeSkins.split(",");
  170. for (var i = 1; i < skins.length; i++) {
  171. document.getElementsByName("bSkin")[skins[i]].checked = true
  172. }
  173. }, 100)
  174. }
  175.  
  176. var previewIntervals = []
  177. var previewsAnimated = false;
  178.  
  179. function startPreviewAnimation() {
  180. var skins = localStorage.customSkins.split(",")
  181.  
  182. skins.map((skin,j)=>{
  183. var frames = skin.split(" ").map(x=>x.split(";"))
  184. if(frames.length > 1) {
  185.  
  186. var animLength = frames.length*localStorage.animSpeed
  187. frames.map((x,i)=>{
  188. setTimeout(()=>{previewIntervals.push(setInterval(()=>{
  189. document.getElementById("bskin"+j).nextSibling.children[0].src = frames[i][0]
  190. }, animLength))}, i*(animLength/frames.length))
  191. })
  192. }
  193. })
  194. previewsAnimated = true
  195. }
  196.  
  197. function stopPreviewAnimation() {
  198. for (var i=0; i < previewIntervals.length; i++) {
  199. clearInterval(previewIntervals[i]);
  200. }
  201. }
  202.  
  203. addSkins();
  204. Game['deployRandomSkin']();
  205.  
  206. });
  207. })();