您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
try to take over the world!
/* * @Description: autoSetting * @Version: 1.0.1 * @Author: lax * @Date: 2021-06-15 10:50:14 * @LastEditors: lax * @LastEditTime: 2021-06-17 22:48:48 * @FilePath: \autoSetting\src\index.js */ // ==UserScript== // @name autoSetting // @namespace http://tampermonkey.net/ // @version 1.0.1 // @description try to take over the world! // @author lax // @match http://*.world-of-dungeons.org/wod/spiel/hero/skillconf_nojs.php* // @match http://*.world-of-dungeons.org/wod/spiel/hero/skillconfig.php* // @grant none // ==/UserScript== (function() { "use strict"; // 挑战 key const CHALLENGE = "wod_plugin_challenge"; // buff key const BUFF = "wod_plugin_buff"; // xml loader const xml = new DOMParser(); // storage const lib = window.localStorage; // 设置 地城\决斗\一般\说明 const settingType = document.querySelectorAll("#wod-orders > div"); // 地城 const dungeon = settingType[0]; // 设置名称 const SETTING_NAME = document.querySelector("#wod-orders h1").innerHTML; // 保存按钮集合 const SAVE_BUTTON = Array.from( document.querySelectorAll("input[value=保存]") ); // 重置此页面上的设置 const reloadSetting = dungeon.querySelector( "input[value=重置此页面上的设置]" ); // 设置数据form对象 const form = document.querySelector( "form[action='/wod/spiel/hero/skillconfig.php']" ); SAVE_BUTTON.map(bt => { bt.addEventListener("click", () => { if (SETTING_NAME.includes("挑战层")) saveSetting(CHALLENGE); if (SETTING_NAME.includes("buff层")) saveSetting(BUFF); }); }); generateSaveButton("挑战", CHALLENGE); generateSaveButton("buff", BUFF); function saveSetting(name) { const config = getSettingConfig(); lib.setItem(name, config.data); } function getSettingConfig() { const WOD_CFG = window.WOD_CFG; const xs = new XmlSerializer(); WOD_CFG.serialize(xs); return xs; } function generateSaveButton(name, key) { const bt = createButton(name); bt.addEventListener("click", () => { const item = lib.getItem(key); if (!item) alert(`无法读取,请先创建或保存${name}设置!`); const source = xml.parseFromString(item, "text/xml"); // 读取挑战层设置的默认设置,该设置将被视为挑战层的设置 const template = source.getElementsByTagName("level")[0]; // 当前设置的层数 const LEVEL = document.querySelector( "#wod-orders div .wod-tabs li[class=selected]" ).innerHTML; const level = LEVEL === "默认" ? 0 : Number(LEVEL); // 读取当前层数设置 const setting = xml.parseFromString(getSettingConfig().data, "text/xml"); const oldLevel = setting.getElementsByTagName("level")[level]; let parentNode; if (LEVEL === "默认") { parentNode = setting.getElementsByTagName("standard")[0]; } else { parentNode = setting.getElementsByTagName("levels")[0]; template.setAttribute("overwrite_standard", "true"); } parentNode.replaceChild(template, oldLevel); const xmlString = new XMLSerializer().serializeToString(setting); post({ data: xmlString, level }); }); } function post({ data, level }) { form.querySelector("input[name=data]").value = base64_encode(data); form.querySelector("input[name=action]").value = "save"; form.querySelector("input[name=profile]").value = getProfileId(); form.querySelector("input[name=SELECTED_TAB]").value = "wod-orders-tab-dungeon"; form.querySelector("input[name=SELECTED_LVL]").value = level; form.querySelector("input[name=SELECTED_DUEL]").value = "hero"; form.submit(); } function getProfileId() { const WOD_CFG = window.WOD_CFG; return WOD_CFG.ui_orders.profileDropdown.getSelectedProfile().id; } function createButton(name) { const bt = document.createElement("input"); bt.type = "button"; bt.value = name; reloadSetting.parentNode.insertBefore(bt, reloadSetting); return bt; } /** * 设置拖拽 */ // 设置区域 const settingBox = Array.from( document.querySelectorAll(".wod-list .wod-list-items") ); const before = settingBox[1]; const around = settingBox[3]; console.log(before); console.log(around); addChangeListener(before); addChangeListener(around); document .querySelector("#wod-orders div .wod-tabs li[class=selected]") .click(); function addChangeListener(el) { // 允许其中元素可以拖拽 el.style.position = "relative"; const callback = function(mutationsList) { mutationsList.map(mutation => { if (mutation.type === "childList" && mutation.addedNodes.length) { listenerDrag(mutation.addedNodes); } }); }; const observer = new MutationObserver(callback); const config = { childList: true }; observer.observe(el, config); } let ing = null; function listenerDrag(el) { const items = Array.from(el); items.map(each => { if (!each.parentNode) return; const down = each.parentNode.parentNode.querySelector("img[title=向下]"); const up = each.parentNode.parentNode.querySelector("img[title=向上]"); each.setAttribute("draggable", "true"); each.addEventListener("dragstart", e => { ing = e; }); each.addEventListener("dragover", e => { e.preventDefault(); const target = e.target; if ( target.nodeName === "DIV" && target.classList.contains("wod-list-item") && target !== ing.target ) { if (target.previousSibling === ing.target) { down.click(); } else if (target.nextSibling === ing.target) { up.click(); } } }); }); } })();