您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
try to take over the world!
// ==UserScript== // @name Decklog WS Deck Output // @namespace http://tampermonkey.net/ // @version 3.0.0 // @description try to take over the world! // @author Chatgpt 4.0 // @match https://decklog.bushiroad.com/view/* // @grant GM_xmlhttpRequest // @grant GM_setClipboard // ==/UserScript== async function downloadImage(url) { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: "GET", url: url, responseType: "blob", onload: function (response) { resolve(response.response); }, onerror: function (err) { reject(err); } }); }); } async function loadImage(blob) { return new Promise((resolve, reject) => { const img = new Image(); img.src = URL.createObjectURL(blob); img.onload = () => resolve(img); img.onerror = (err) => reject(err); }); } async function processImage(image, num) { const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); if (image.width > image.height) { canvas.width = 1400; canvas.height = 1000; ctx.rotate(Math.PI / 2); ctx.drawImage(image, 0, -1400, 1000, 1400); } else { canvas.width = 1000; canvas.height = 1400; ctx.drawImage(image, 0, 0, 1000, 1400); } const processedImages = []; for (let i = 0; i < num; i++) { processedImages.push(canvas.toDataURL()); } return processedImages; } async function createDeckImage(images) { const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); canvas.width = 10000; canvas.height = 7000; let xPos = 0; let yPos = 0; const imgPromises = images.map(async (image) => { return new Promise(async (resolve) => { const img = new Image(); img.src = image; img.onload = () => { ctx.drawImage(img, xPos, yPos, 1000, 1400); xPos += 1000; if (xPos >= 10000) { xPos = 0; yPos += 1400; } resolve(); }; }); }); await Promise.all(imgPromises); return new Promise((resolve) => { canvas.toBlob((blob) => { resolve(blob); }, 'image/jpeg'); }); } async function ButtonClickAction(zEvent) { const deckList = []; let deckImages = []; try { var list = document.querySelectorAll('.card-item.col-xl-2.col-lg-3.col-sm-4.col-6'); } catch (e) { console.error(e.message); } for (let item of list) { const imageUrl = item.getElementsByTagName("img")[0].getAttribute("data-src"); const num = parseInt(item.getElementsByClassName("num")[0].innerHTML); deckList.push({ imageUrl, num }); } for (const item of deckList) { const imageBlob = await downloadImage(item.imageUrl); const image = await loadImage(imageBlob); const processedImages = await processImage(image, item.num); deckImages = deckImages.concat(processedImages); } const deckBlob = await createDeckImage(deckImages); const deckFileName = window.location.pathname.split('/').pop() + '.jpg'; const a = document.createElement('a'); a.href = URL.createObjectURL(deckBlob); a.download = deckFileName; a.click(); URL.revokeObjectURL(a.href); } async function copyDeckToClipboard(zEvent) { const deckList = []; try { var list = document.querySelectorAll('.card-item.col-xl-2.col-lg-3.col-sm-4.col-6'); } catch (e) { console.error(e.message); } for (let item of list) { const title = item.getElementsByTagName("img")[0].getAttribute("title"); let cardId = title.split(' ')[0]; const num = parseInt(item.getElementsByClassName("num")[0].innerHTML); // 替換特定結尾 if (cardId.endsWith('SSP')) { cardId = cardId.replace('SSP', 's'); } else if (cardId.endsWith('OFR')) { cardId = cardId.replace('OFR', 'f'); } else if (cardId.endsWith('WIR')) { cardId = cardId.replace('WIR', 'i'); } else if (cardId.endsWith('RRR')) { cardId = cardId.replace('RRR', 'r'); } else if (cardId.endsWith('SR')) { cardId = cardId.replace('SR', 's'); } else if (cardId.endsWith('SP')) { cardId = cardId.replace('SP', 'p'); } for (let i = 0; i < num; i++) { deckList.push(cardId); } } const deckText = deckList.join('\n'); GM_setClipboard(deckText); alert('Deck copied to clipboard!'); } function addButtonWhenAvailable() { const viewBtnContainer = document.querySelector('.view-btn-container .btn-container'); if (viewBtnContainer) { const deckImageButton = document.createElement('button'); deckImageButton.setAttribute('type', 'button'); deckImageButton.setAttribute('class', 'btn btn-warning btn-sm'); deckImageButton.textContent = 'Create Deck Image'; viewBtnContainer.appendChild(deckImageButton); deckImageButton.addEventListener("click", ButtonClickAction, false); const copyDeckButton = document.createElement('button'); copyDeckButton.setAttribute('type', 'button'); copyDeckButton.setAttribute('class', 'btn btn-warning btn-sm'); copyDeckButton.textContent = 'Copy Deck to Clipboard'; viewBtnContainer.appendChild(copyDeckButton); copyDeckButton.addEventListener("click", copyDeckToClipboard, false); } else { setTimeout(addButtonWhenAvailable, 500); } } addButtonWhenAvailable();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址