Decklog To Tabletop simulator script

Download TCG image from Decklog and save it for use in Tabletop simulator

目前为 2021-01-24 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Decklog To Tabletop simulator script
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.2
  5. // @description Download TCG image from Decklog and save it for use in Tabletop simulator
  6. // @author Royal
  7. // @match https://decklog.bushiroad.com/view/*
  8. // @grant GM_download
  9. // @grant GM_setClipboard
  10. // @grant GM_xmlhttpRequest
  11. // @require http://code.jquery.com/jquery-3.4.1.min.js
  12. // ==/UserScript==
  13.  
  14. var t1 = "";
  15. var t2 = "";
  16. var t3 = "";
  17. var t4 = "";
  18. var totalnum = "";
  19. var lua_base = "";
  20. var cardback = "https://www.tcgcard.tw/wp-content/uploads/2020/05/ws_cardback.png";
  21. var target = document.querySelector('.body-page-view');
  22. // create an observer instance
  23. var observer = new MutationObserver(function(mutations) {
  24. mutations.forEach(function(mutation) {
  25. setTimeout(function() {
  26. //Code to run After timeout elapses
  27. remove_landscape_card();
  28. }, 500); //Two seconds will elapse and Code will execute.
  29. });
  30. });
  31.  
  32. // configuration of the observer:
  33. var config = { attributes: true, childList: true, characterData: true };
  34.  
  35.  
  36.  
  37.  
  38. (function() {
  39. 'use strict';
  40.  
  41. // Your code here...
  42. $(document).ready(function() { //When document has loaded
  43.  
  44. observer.observe(target, config);
  45.  
  46.  
  47. setTimeout(function() {
  48. //Code to run After timeout elapses
  49. // test button
  50. //$(".deckview").append('<button type="button" id="Testbbt">Testbbt</button>');
  51. //$("#Testbbt").click (Testbbt);
  52. $(".deckview").append('<button type="button" id="DL_TTS_bt">Download As TTS card set</button>');
  53. $("#DL_TTS_bt").click (card_set);
  54. $(".deckview").append('<button type="button" id="getdata">Get Lua Code</button>');
  55. $("#getdata").click (getdata);
  56.  
  57.  
  58. }, 4000); //Two seconds will elapse and Code will execute.
  59.  
  60.  
  61.  
  62. });
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69. })();
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77. function card_set (zEvent) {
  78. alert ("Downloading as TTS card set");
  79. $(".deckview").find(".card-item").each(function( index ) {
  80. console.log( index + ": " + $(this).find("img").attr("title"));
  81. var name = $(this).find("img").attr("title").replace('/', '-');
  82. var dl_url = $(this).find("img").attr("src");
  83. var num = "0"+$(this).find(".card-controller-inner").find(".num").first().text()+"x"
  84. var path = 'Decklog_TTS/'; // use a special folder for all the images
  85. var arg = {
  86. url: dl_url,
  87. name: path + num + " " + name + ".png"
  88. };
  89. var result= GM_download(arg);
  90. console.log(result);
  91. });
  92. //download card back
  93. var arg = {
  94. url: "https://www.tcgcard.tw/wp-content/uploads/2020/05/ws_cardback.png",
  95. name: "Decklog_TTS/00 back.png"
  96. };
  97. var result= GM_download(arg);
  98. console.log(result);
  99.  
  100.  
  101.  
  102.  
  103. }
  104.  
  105.  
  106.  
  107. function getdata (zEvent) {
  108. // alert ("Test");
  109. var urllist = [];
  110. var cardidlist = [];
  111. var cardtitlelist = [];
  112. var carddesc = [];
  113. totalnum = $(".graph-sum-value").text();
  114.  
  115. $(".deckview").find(".card-item").each(function( index ) {
  116. //console.log( index + ": " + $(this).find("img").attr("title"));
  117.  
  118. var num = $(this).find(".card-controller-inner").find(".num").first().text()
  119. var i;
  120. for (i = 0; i < num; i++) {
  121. var dl_url = $(this).find("img").attr("src");
  122. urllist.push(dl_url);
  123. var name = $(this).find("img").attr("title");
  124. var spname = name.split(" : ");
  125. cardidlist.push(spname[0]);
  126. cardtitlelist.push(spname[1]);
  127. }
  128.  
  129. });
  130. console.log("'"+urllist.join("','")+"'");
  131. console.log("'"+cardidlist.join("','")+"'");
  132. console.log("'"+cardtitlelist.join("','")+"'");
  133. console.log("'"+carddesc.join("','")+"'");
  134. GM_setClipboard ("'"+urllist.join("','")+"'");
  135. //GM_setClipboard ("'"+cardidlist.join("','")+"'");
  136. //GM_setClipboard ("'"+cardtitlelist.join("','")+"'");
  137. //GM_setClipboard ("'"+carddesc.join("','")+"'");
  138. t1 = "'"+urllist.join("','")+"'";
  139. t2 = "'"+cardidlist.join("','")+"'";
  140. t3 = "'"+cardtitlelist.join("','")+"'";
  141. //var t4 = "'"+carddesc.join("','")+"'";
  142. t4 = "";
  143. combine()
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151. }
  152.  
  153.  
  154.  
  155. /*
  156.  
  157. function getdata (zEvent) {
  158. alert ("Test");
  159. var urllist = [];
  160. var cardidlist = [];
  161. var cardtitlelist = [];
  162. var carddesc = [];
  163.  
  164. $(".deckview").find(".card-item").each(function( index ) {
  165. //console.log( index + ": " + $(this).find("img").attr("title"));
  166.  
  167. var num = $(this).find(".card-controller-inner").find(".num").first().text()
  168. var name = $(this).find("img").attr("title");
  169. var spname = name.split(" : ");
  170. var dataurl = "https://ws-tcg.com/cardlist/?cardno="+spname[0];
  171. var i;
  172. for (i = 0; i < num; i++) {
  173. cardidlist.push(spname[0]);
  174. cardtitlelist.push(spname[1]);
  175.  
  176.  
  177. var dl_url = $(this).find("img").attr("src");
  178. urllist.push(dl_url);
  179.  
  180. }
  181.  
  182. });
  183. console.log("'"+urllist.join("','")+"'");
  184. console.log("'"+cardidlist.join("','")+"'");
  185. console.log("'"+cardtitlelist.join("','")+"'");
  186. console.log("'"+carddesc.join("','")+"'");
  187. //GM_setClipboard ("'"+urllist.join("','")+"'");
  188. //GM_setClipboard ("'"+cardidlist.join("','")+"'");
  189. GM_setClipboard ("'"+cardtitlelist.join("','")+"'");
  190. //GM_setClipboard ("'"+carddesc.join("','")+"'");
  191.  
  192.  
  193. }
  194.  
  195. */
  196.  
  197. function remove_landscape_card (zEvent) {
  198. //alert ("Test");
  199. const img = new Image();
  200. $(".deckview").find(".card-item").each(function( index ) {
  201. //console.log( index + ": " + $(this).find("img"));
  202.  
  203. const img = new Image();
  204. //img.onload = function() {
  205. // console.log( index + ": " + this.width + 'x' + this.height);
  206. //}
  207.  
  208.  
  209. img.src = $(this).find("img").attr("src");
  210. console.log( index + ": " + img.width + 'x' + img.height);
  211. if (img.width > img.height){
  212. var name = $(this).find("img").attr("title");
  213. var spname = name.split(" : ");
  214. var yyturl1 = 'https://yuyu-tei.jp/game_ws/sell/sell_price.php?name='+spname[0];
  215.  
  216.  
  217. let getimg = new Promise((resolve,reject) => {
  218.  
  219. GM_xmlhttpRequest({
  220. method: 'GET',
  221. url: yyturl1 ,
  222. headers: {
  223. 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
  224. 'Accept': 'application/atom+xml,application/xml,text/xml',
  225. },
  226. onload: function(responseDetails) {
  227. //console.log('Request for Atom feed returned ' + responseDetails.status + ' ' + responseDetails.statusText + '\n\n' +'Feed data:\n' + responseDetails.responseText);
  228. //console.log(responseDetails.responseText)
  229. var yyturl2 = "https://yuyu-tei.jp"+$(responseDetails.responseText).find(".card_list_box").find("a").attr("href")
  230.  
  231. GM_xmlhttpRequest({
  232. method: 'GET',
  233. url: yyturl2 ,
  234. headers: {
  235. 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
  236. 'Accept': 'application/atom+xml,application/xml,text/xml',
  237. },
  238. onload: function(responseDetails) {
  239. //console.log('Request for Atom feed returned ' + responseDetails.status + ' ' + responseDetails.statusText + '\n\n' +'Feed data:\n' + responseDetails.responseText);
  240. //console.log(responseDetails.responseText)
  241. var data = responseDetails.responseText;
  242. var newimg = $(data).find(".image_box").find("img").first().attr("src");
  243. console.log(newimg);
  244. if (newimg != "" ){
  245. resolve(newimg);
  246. } else{
  247. reject("img no found");
  248. }
  249.  
  250.  
  251. }
  252. });
  253. }
  254. });
  255.  
  256.  
  257. });
  258.  
  259. getimg.then(successdata =>{
  260. console.log($(this).find("img").attr("src", successdata))
  261. });
  262. }
  263.  
  264. //alert(name);
  265. });
  266.  
  267. }
  268.  
  269.  
  270. function Testbbt (zEvent) {
  271. alert ("Test");
  272. combine();
  273.  
  274.  
  275. };
  276.  
  277. let get_lua_code = new Promise((resolve,reject) => {
  278.  
  279. GM_xmlhttpRequest({
  280. method: 'GET',
  281. url: "https://raw.githubusercontent.com/RoyalShooter/Decklog-To-Tabletop-simulator-script/main/Lua_Basecode/lua_base" ,
  282. headers: {
  283. 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
  284. 'Accept': 'application/atom+xml,application/xml,text/xml',
  285. },
  286. onload: function(responseDetails) {
  287. //console.log('Request for Atom feed returned ' + responseDetails.status + ' ' + responseDetails.statusText + '\n\n' +'Feed data:\n' + responseDetails.responseText);
  288. //console.log(responseDetails.responseText)
  289. lua_base = responseDetails.responseText;
  290. //GM_setClipboard (lua_base);
  291. if (lua_base != "" ){
  292. resolve(lua_base);
  293. } else{
  294. reject("err on base lua");
  295. }
  296. }
  297. });
  298.  
  299. });
  300.  
  301. function combine(){
  302. get_lua_code.then(successdata =>{
  303. lua_base = successdata ;
  304. });
  305. var lua_top = "local testurl = {"+t1+"} \n local cardid = {"+t2+"} \n local cardname = {"+t3+"} \n local carddesc = {"+t4+"} \n local totalnum = '" +totalnum+"' \n local cardBack = '"+cardback+"'\n";
  306. var lua = lua_top + "\n" + lua_base
  307. GM_setClipboard (lua);
  308. alert("Lua code finished, please paste lua in the scripting tab");
  309.  
  310.  
  311.  
  312.  
  313.  
  314. };