您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
convert text notation for fighting games to images
// ==UserScript== // @name Fighting Game Notationizer // @namespace http://erichgaming.com/ // @version 5.8 // @description convert text notation for fighting games to images // @author ejrich // @license MIT // @match https://www.dustloop.com/* // @match https://www.reddit.com/r/Guiltygear/* // @match https://www.reddit.com/r/StreetFighter/* // @match https://fullmeter.com/* // @match https://drunkardshade.com/* // @match https://erichgaming.com/fg/* // @grant none // ==/UserScript== /* jshint -W097 */ 'use strict'; var FGIT = { site: '//www.erichgaming.com/fgi/', $2rx: /\$2/g }; FGIT.startingMatchers = [ {rx: /\b(4?1236)(LP|MP|HP|LK|MK|HK|HS|[PKDSHABC]|4|41236)/g, img: 'hcf.png'}, {rx: /\b(6?3214)(LP|MP|HP|LK|MK|HK|HS|[PKDSHABC]|6|63214)/g, img: 'hcb.png'}, {rx: /(j\.?)(LP|MP|HP|LK|MK|HK|HS|[PKDSHABC]|2|236|214)/g, img: 'jump.png'}, {rx: /\b(236)(LP|MP|HP|LK|MK|HK|HS|[PKDSHABC]|236(?:HS|[PKDSHABC])|3214)/g, img: 'qcf.png'}, {rx: /\b(214)(LP|MP|HP|LK|MK|HK|HS|[PKDSHABC]|214(?:HS|[PKDSHABC])|1236)/g, img: 'qcb.png'}, {rx: /(623)(LP|MP|HP|LK|MK|HK|HS|[PKDSHABC])/g, img: 'shoryf.png'}, {rx: /(421)(LP|MP|HP|LK|MK|HK|HS|[PKDSHABC])/g, img: 'shoryb.png'}, {rx: /\b(2)(LP|MP|HP|LK|MK|HK|HS|[PKDSHABC])/g, img: 'down.png'}, {rx: /\b(2)(2LP|2MP|2HP|2LK|2MK|2HK|2HS|2[PKDSHABC])/g, img: 'down.png'}, {rx: /\b(4)(LP|MP|HP|LK|MK|HK|HS|[PKDSHABC])/g, img: 'back.png'}, {rx: /\b(4)(4HS|4[PKDSHABC])/g, img: 'back.png'}, {rx: /\b(4)(6LP|6MP|6HP|6LK|6MK|6HK|6HS|6[PKDSHABC])/g, img: 'back.png'}, {rx: /\b(6)(LP|MP|HP|LK|MK|HK|HS|[PKDSHABC])/g, img: 'forward.png'}, {rx: /\b(6)(6HS|6[PKDSHABC])/g, img: 'forward.png'}, {rx: /\b(1)(LP|MP|HP|LK|MK|HK|HS|[PKDSHABC])/g, img: 'downback.png'}, {rx: /\b(3)(LP|MP|HP|LK|MK|HK|HS|[PKDSHABC])/g, img: 'downforward.png'}, {rx: /\b(~)(LP|MP|HP|LK|MK|HK|HS|[PKDSHABC])/g, prefix: '~'}, {rx: /\b(P)(\+HS|\+[KDSH])/g, img: 'sfpunch.png', height: 20}, {rx: /\b(K)(\+HS|\+[DSH])/g, img: 'K.png', height: 20}, {rx: /\b(S)(\+HS|\+[DH])/g, img: 'button_s.png', height: 20}, {rx: /\b(HS|H)(\+D)/g, img: 'button_hs.png', height: 20}, {rx: /(P)(\/K(?:\/S)?(?:\/H)?(?:\/D)?)/g, img: 'sfpunch.png', height: 20}, {rx: /\b(c\.?S)/g, img: 'button_s.png', prefix: 'close', height: 20}, {rx: /\b(f\.?S)/g, img: 'button_s.png', prefix: 'far', height: 20}, {rx: /\b(cr?\.? ?)(LP|MP|HP|LK|MK|HK)/ig, img: 'down.png'}, {rx: /\b(st\.? ?)(LP|MP|HP|LK|MK|HK)/ig}, {rx: /\b(LP)\b/ig, img: 'lp.png', height: 22}, {rx: /\b(MP)\b/ig, img: 'mp.png', height: 22}, {rx: /\b(HP)\b/ig, img: 'hp.png', height: 22}, {rx: /\b(LK)\b/ig, img: 'lk.png', height: 22}, {rx: /\b(MK)\b/ig, img: 'mk.png', height: 22}, {rx: /\b(HK)\b/ig, img: 'hk.png', height: 22}, {rx: /(5P)/g, img: 'sfpunch.png', height: 20}, {rx: /(5A)/g, img: 'A.png', height: 20}, {rx: /(5B)/g, img: 'B.png', height: 20}, {rx: /(5C)/g, img: 'C.png', height: 20}, {rx: /(5K)/g, img: 'K.png', height: 20}, {rx: /(5D)/g, img: 'button_d.png', height: 20}, {rx: /(5S)/g, img: 'button_s.png', height: 20}, {rx: /(5LP)/g, img: 'lp.png', height: 22}, {rx: /(5MP)/g, img: 'mp.png', height: 22}, {rx: /(5HP)/g, img: 'hp.png', height: 22}, {rx: /(5LK)/g, img: 'lk.png', height: 22}, {rx: /(5MK)/g, img: 'mk.png', height: 22}, {rx: /(5HK)/g, img: 'hk.png', height: 22}, {rx: /(5HS|5H)(?:[^KP]|\b)/g, img: 'button_hs.png', height: 20} ]; FGIT.endingMatchers = [ {rx: /^\/(A)/, prefix: ' / ', img: 'A.png', cont: true, height: 20}, {rx: /^\/(B)/i, prefix: ' / ', img: 'B.png', cont: true, height: 20}, {rx: /^\/(C)/i, prefix: ' / ', img: 'C.png', cont: true, height: 20}, {rx: /^\/(K)/i, prefix: ' / ', img: 'K.png', cont: true, height: 20}, {rx: /^\/(S)/i, prefix: ' / ', img: 'button_s.png', cont: true, height: 20}, {rx: /^\/(HS|H)/i, prefix: ' / ', img: 'button_hs.png', cont: true, height: 20}, {rx: /^\/(D)/i, prefix: ' / ', img: 'button_d.png', height: 20}, {rx: /^(6?3214)/, img: 'hcb.png', cont: true}, {rx: /^(4?1236)/, img: 'hcf.png', cont: true}, {rx: /^(236)(LP|MP|HP|LK|MK|HK|HS|[PKDSHABC])/, img: 'qcf.png', cont: true}, {rx: /^(214)(LP|MP|HP|LK|MK|HK|HS|[PKDSHABC])/, img: 'qcb.png', cont: true}, {rx: /^(4)(LP|MP|HP|LK|MK|HK|HS|[PKDSHABC])/i, img: 'back.png', cont: true}, {rx: /^(6)(LP|MP|HP|LK|MK|HK|HS|[PKDSHABC])/i, img: 'forward.png', cont: true}, {rx: /^(2)(LP|MP|HP|LK|MK|HK|HS|[PKDSHABC])/i, img: 'down.png', cont: true}, {rx: /^(\+)(LP|MP|HP|LK|MK|HK|HS|[PKDSHABC])/i, prefix: '+', cont: true}, {rx: /^(P)\b/i, img: 'sfpunch.png', height: 20}, {rx: /^(A)\b/, img: 'A.png', height: 20}, {rx: /^(B)\b/i, img: 'B.png', height: 20}, {rx: /^(C)\b/i, img: 'C.png', height: 20}, {rx: /^(K)\b/i, img: 'K.png', height: 20}, {rx: /^(S)\b/i, img: 'button_s.png', height: 20}, {rx: /^(HS|H)\b/i, img: 'button_hs.png', height: 20}, {rx: /^(D)\b/i, img: 'button_d.png', height: 20}, {rx: /^(LP)\b/i, img: 'lp.png', height: 22}, {rx: /^(MP)\b/i, img: 'mp.png', height: 22}, {rx: /^(HP)\b/i, img: 'hp.png', height: 22}, {rx: /^(LK)\b/i, img: 'lk.png', height: 22}, {rx: /^(MK)\b/i, img: 'mk.png', height: 22}, {rx: /^(HK)\b/i, img: 'hk.png', height: 22} ]; FGIT.traverseChildNodes = function(node, matchers) { var next; if (node.nodeType === 1) { // (Element node) // Ignore link nodes if (node.nodeName === 'A') return; if (node = node.firstChild) { do { // Recursively call traverseChildNodes // on each child node next = node.nextSibling; FGIT.traverseChildNodes(node, matchers); } while(node = next); } } else if (node.nodeType === 3) { var div, first, endNodes, cont; // (Text node) for (var i = 0; i < matchers.length; i++) { if (matchers[i].rx.test(node.data)) { if (!node.parentNode) { console.log(node); } div = document.createElement('div'); div.innerHTML = node.data; cont = false; for (var j = 0; j < matchers.length; j++) { if (!matchers[j].prefix) matchers[j].prefix = ''; if (!matchers[j].suffix) matchers[j].suffix = ''; if (!matchers[j].height) matchers[j].height = 26; if (matchers[j].img) { div.innerHTML = div.innerHTML.replace(matchers[j].rx, matchers[j].prefix + '<img src="' + FGIT.site + matchers[j].img + '" title="$1" style="height: ' + matchers[j].height + 'px"/>$2' + matchers[j].suffix).replace(FGIT.$2rx, ''); } else { div.innerHTML = div.innerHTML.replace(matchers[j].rx, '<span>' + matchers[j].prefix + '</span>$2' + matchers[j].suffix).replace(FGIT.$2rx, ''); } if (matchers[j].cont) cont = true; } first = true; endNodes = []; while (div.firstChild) { if (!first && div.firstChild.nodeType === 3) { endNodes.push(div.firstChild); } first = false; node.parentNode.insertBefore(div.firstChild, node); } node.parentNode.removeChild(node); if (matchers === FGIT.startingMatchers || cont) { for (j = 0; j < endNodes.length; j++) { FGIT.traverseChildNodes(endNodes[j], FGIT.endingMatchers); } } break; } } } }; FGIT.traverseChildNodes(document.body, FGIT.startingMatchers); // Hook into angular for fullmeter.com var FGNTimeout; if (typeof angular !== 'undefined' && angular.version.major == 1 && angular.element(document.body).scope()) { angular.element(document.body).scope().$watch(function (value) { window.clearTimeout(FGNTimeout); FGNTimeout = window.setTimeout(function() { FGIT.traverseChildNodes(document.body, FGIT.startingMatchers); }, 1000)}); }