// ==UserScript==
// @name 无剑Mud辅助
// @description 无剑Mud辅修,由在线版移植而来,順便《略改》
// @namespace http://tampermonkey.net/
// @version 9.9.9
// @license MIT
// @author 燕飞、东方鸣、懒人、九
// @match http://121.40.177.24:8001/*
// @match http://110.42.64.223:8021/*
// @match http://121.40.177.24:8041/*
// @match http://121.40.177.24:8061/*
// @match http://110.42.64.223:8081/*
// @match http://121.40.177.24:8101/*
// @match http://121.40.177.24:8102/*
// @match http://swordman-s1.btmud.com/*
// @match http://swordman-inter.btmud.com/*
// @grant unsafeWindow
// @grant GM_info
// @grant GM_setClipboard
// @connect greasyfork.org
// @connect update.greasyfork.org
// @license LGPL-3.0
// @grant GM_xmlhttpRequest
// @grant GM.xmlHttpRequest
// @grant GM_openInTab
// @grant GM.openInTab
// @run-at document-end
// @compatible Chrome >= 80
// @compatible Edge >= 80
// @compatible Firefox PC >= 74
// @compatible Opera >= 67
// @compatible Safari MacOS >= 13.1
// @compatible Firefox Android >= 79
// @compatible Opera Android >= 57
// @compatible Safari iOS >= 13.4
// @compatible WebView Android >= 80
// ==/UserScript==
class GreasyFork {
constructor() {
if(location.hostname === 'greasyfork.org' || location.hostname === 'sleazyfork.org') {
this.host = location.host
return
}
throw new Error('Invalid instance initialization location, host is not valid.')
}
static get __xmlHttpRequest() {
return GM_xmlhttpRequest || GM.xmlHttpRequest
}
static get __openInTab() {
return GM_openInTab || GM.openInTab
}
static get INVALID_ARGUMENT_ERROR() {
return 'Argument "{0}" is not valid'
}
static get PARSING_ERROR() {
return 'Unexpected parsing error, "{0}"'
}
static get INVALID_PAGE_ERROR() {
return 'Current page is not valid'
}
static __format(str, ...args) {
let result = str
for (let i = 0; i < args.length; i++) {
const arg = args[i]
result = result.replace(new RegExp(`\\{${i}\\}`, 'g'), arg)
}
return result
}
static __isId(id) {
return typeof id === 'string' && /^\d+$/.test(id)
}
static get languages() {
return [
'ar', 'bg', 'cs', 'da', 'de', 'el', 'en', 'eo', 'es', 'fi', 'fr', 'fr-CA', 'he', 'hu', 'id', 'it', 'ja', 'ka', 'ko', 'nb', 'nl', 'pl', 'pt-BR', 'ro', 'ru', 'sk', 'sr', 'sv', 'th', 'tr', 'uk', 'ug', 'vi', 'zh-CN', 'zh-TW'
]
}
static get version() {
return '2.0.1'
}
static parseScriptNode(node) {
if (!(node instanceof HTMLElement) || !node.dataset.scriptId) {
throw new Error(GreasyFork.__format(GreasyFork.INVALID_ARGUMENT_ERROR, 'node'))
}
const {
scriptId,
scriptName,
scriptAuthors,
scriptDailyInstalls,
scriptTotalInstalls,
scriptRatingScore,
scriptCreatedDate,
scriptUpdatedDate,
scriptType,
scriptVersion,
sensitive,
scriptLanguage,
cssAvailableAsJs
} = node.dataset
const ratingsNode = node.querySelector('dd.script-list-ratings')
let ratings = {}
if(ratingsNode) {
const ratingsGood = Number(ratingsNode.querySelector('.good-rating-count').textContent)
const ratingsOk = Number(ratingsNode.querySelector('.ok-rating-count').textContent)
const ratingsBad = Number(ratingsNode.querySelector('.bad-rating-count').textContent)
ratings = {
ratingsGood,
ratingsOk,
ratingsBad
}
}
return Object.assign({
scriptId,
scriptName,
scriptAuthors: JSON.parse(scriptAuthors),
scriptDailyInstalls: Number(scriptDailyInstalls),
scriptTotalInstalls: Number(scriptTotalInstalls),
scriptRatingScore: Number(scriptRatingScore),
scriptCreatedDate,
scriptUpdatedDate,
scriptType,
scriptVersion,
sensitive: sensitive === 'true',
scriptLanguage,
cssAvailableAsJs: cssAvailableAsJs === 'true',
node
}, ratings)
}
static getScriptData(id) {
if (!GreasyFork.__isId(id)) {
throw new Error(GreasyFork.__format(GreasyFork.INVALID_ARGUMENT_ERROR, 'id'))
}
return new Promise((res, rej) => {
GreasyFork.__xmlHttpRequest({
url: `https://greasyfork.org/scripts/${id}.json`,
onload: response => {
const data = JSON.parse(response.responseText)
return res(data)
},
onerror: err => {
return rej(err)
}
})
})
}
static getScriptCode(url, isLibrary = false) {
return new Promise((res, rej) => {
GreasyFork.__xmlHttpRequest({
url,
onload: response => {
const code = response.responseText
return res(code)
},
onerror: err => {
return rej(err)
}
})
})
}
}
(function () {
"use strict";
if (location.host == "orchin.cn") {
var params = new URLSearchParams(location.href.split("?")[1]);
var host = params.get("ws_host");
if (!host) return;
params["delete"]("ws_host");
location.replace("http://" + host + "?" + params.toString());
}
GreasyFork.getScriptData("491806").then(data => {
GreasyFork.getScriptCode(data.code_url).then(code => {
eval("(function (){" + code + "})()");
});
});
})();