您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Raccourcis clavier pour les compétences et sortilèges
// ==UserScript== // @name MH - Raistlin - Keyboard shortcuts // @namespace MH // @description Raccourcis clavier pour les compétences et sortilèges // @include *://games.mountyhall.com/* // @include *://mh2.mh.raistlin.fr/* // @icon https://xballiet.github.io/ImagesMH/MZ.png // @version 1.5 // @grant none // @require https://gf.qytechs.cn/scripts/23602-tout-mz?version=892175&d=.user.js // ==/UserScript== // La liste des keyCodes est trouvable par exemple ici : // http://www.cambiaresearch.com/c4/702b8cd1-e5b0-42e6-83ac-25f0306e3e25/Javascript-Char-Codes-Key-Codes.aspx // La liste des constantes JS correspondante est trouvable par exemple ici : // http://stackoverflow.com/questions/1465374/javascript-event-keycode-constants /**************************************************************************************** *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* * UTILS * *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* ****************************************************************************************/ function array_flip(trans) { var key, tmp_ar = {}; for (key in trans) { if (trans.hasOwnProperty(key)) { tmp_ar[trans[key]] = key; } } return tmp_ar; } function getShortCutsArray() { // Tableau contenant la liste des raccourcis sous la forme C => 124 var localShortCutsArray = new Array(); var shortCutsList = window.localStorage['shortcutsList']; if ((shortCutsList == null) || (shortCutsList == undefined) || (shortCutsList == 'undefined')) { return new Array(); } var firstArray = shortCutsList.split(';'); for (var i = 0 ; i < firstArray.length - 1 ; i++) { secondArray = firstArray[i].split(':'); if (secondArray[0].length > 0) { localShortCutsArray[secondArray[0]] = secondArray[1]; } } return localShortCutsArray; } function insertBefore(next, el) { next.parentNode.insertBefore(el, next); } function insertTd(next) { var td = document.createElement('td'); insertBefore(next, td); return td; } function appendText(paren, text, bold) { if (bold) { var b = document.createElement('b'); b.appendChild(document.createTextNode(text)); paren.appendChild(b); } else { paren.appendChild(document.createTextNode(text)); } } function appendTextbox(paren, type, nam, size, maxlength, value) { var input = document.createElement('input'); input.className = 'TextboxV2'; input.type = type; input.name = nam; input.id = nam; input.size = size; input.maxLength = maxlength; if(value) input.value = value; paren.appendChild(input); return input; } function appendButton(paren, value, onClick) { var input = document.createElement('input'); input.type = 'button'; input.className = 'mh_form_submit'; input.value = value; input.onmouseover = function(){this.style.cursor='pointer';}; if(onClick) input.onclick = onClick; paren.appendChild(input); return input; } /**************************************************************************************** *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* * GESTION DE LA PAGE PROFIL * *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* ****************************************************************************************/ /*********************************************************************** * Ajout d'un th entre le nom et le niveau de maitrise d'une comp/sort * ***********************************************************************/ function addThToTr(tr) { // On ajoute le th var th = document.createElement('th'); insertBefore(tr.childNodes[5], th); // Un peu de mise en page th.width = '65px'; th.align = 'center'; } /*********************************************************************** * Ajout d'un td entre le nom et le niveau de maitrise d'une comp/sort * ***********************************************************************/ function addTdToTr(tr, talName) { var talNameString = '' + talName; if (talNameString.length < 2) { talName = '0' + talName; } // On ajoute le td var td = insertTd(tr.childNodes[5]); // On ajoute le texte appendText(td, 'AltGr+'); // On ajoute la textbox tb = appendTextbox(td, 'text', talName, 1, 1, ''); // On met a jour la valeur de la textbox si le cookie existe var reverseShortCutsArray = array_flip(shortCutsArray); tb.value = reverseShortCutsArray[talName]; // Si c'est pas un caractere, on vide (c'est moche, mais c'est pour eviter les "undefined") if (tb.value.length > 1) { tb.value = ''; } } /*********************************************************************** * Sauvegarde des raccourcis dans le localStorage * ***********************************************************************/ function shortCutUpdate() { // La chaine qui stockera la liste des raccourcis non vides var shortCutsList = ''; // Un tableau juste pour verifier l'absence de doublons var localShortCutsArray = new Array(); for (var i = 0 ; i < talIds.length ; i++) { // On recupere la liste des inputs rajoutes par le script pour les comps et les sorts var snapShotInputs = document.evaluate('./tbody/tr/td/input[@class="TextboxV2"]', document.getElementById(talIds[i]), null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); // On parcourt la liste des textbox des comps et des sorts for (var cpt = 0 ; cpt < snapShotInputs.snapshotLength ; cpt++) { // On recupere la textbox courante var currentInput = snapShotInputs.snapshotItem(cpt); // On sauve la valeur du raccourci pour l'affichage ulterieur if (currentInput.value.length > 0) { shortCutsList += currentInput.value + ':' + currentInput.name + ';'; // Si on tombe sur un doublon, on arrete la sauvegarde if (currentInput.value in localShortCutsArray) { window.alert('Erreur : doublons dans les raccourcis'); return; } localShortCutsArray[currentInput.value] = currentInput.name; } } } // On sauve la liste et on previent le joueur window.localStorage['shortcutsList'] = shortCutsList; // On met a jour les 2 frames (gauche et haut-droite) pour que les raccourcis soient immediatement pris en compte window.parent.parent.Sommaire.location.reload(); window.parent.parent.Main.Contenu.location.reload(); window.alert('Raccourcis sauvegard\u00E9s'); } function mainProfil() { // Si on est sur le profil, on rajoute les champs dans les comps/sorts pour rajouter le raccourcis // Le champ est initialise avec la valeur du localStorage si elle existe for (var i = 0 ; i < talIds.length ; i++) { // On recupere la liste des lignes de competences et sorts var listeTal = document.getElementById(talIds[i]); // Pour chaque competence et sort, on rajoute un champ "input" de 1 caractere entre la comp et le % x_tals = listeTal.getElementsByTagName('tr'); addThToTr(x_tals[0]); for (var cpt = 1 ; cpt < x_tals.length ; cpt++) { var talTarget = document.evaluate('./td/a[@target="Action"]', x_tals[cpt], null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0).getAttribute('href').match(/\d+/); // Le nom de la textbox est l'id addTdToTr(x_tals[cpt], talTarget); } } // On rajoute un tr/td sous la table pour rajouter le bouton save var footer2 = document.getElementById('footer2'); saveDiv = document.createElement('div'); insertBefore(footer2, saveDiv); // On rajoute un bouton pour sauvegarder dans le localStorage saveButton = appendButton(saveDiv, 'Mise a jour des raccourcis', shortCutUpdate); } /**************************************************************************************** *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* * GESTION DES RACCOURCIS * *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* ****************************************************************************************/ // Ajout des keyhandlers function keyHandler(e) { // Recuperation du keyCode correspondant a la touche pressee var keyPressedCode = (e.keyCode ? e.keyCode : e.which); // Recuperation du caractere correspondant var talent = shortCutsArray[String.fromCharCode(keyPressedCode)]; // On lance le raccourci, sauf si on est en train de remplir un champ texte (input ou textarea) if ((e.ctrlKey && e.altKey) && (document.activeElement.nodeName != 'INPUT') && (document.activeElement.nodeName != 'TEXTAREA')) { window.parent.parent.Main.Action.location = '?ai_ToDo=' + talent; } } /**************************************************************************************** *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* * MAIN * *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* ****************************************************************************************/ // Tableau contenant les raccourcis : en variable globale (beuh) shortCutsArray = getShortCutsArray(); var talIds = ['competences', 'sortileges']; // Ajout des champs sur le profil if (window.self.location.toString().indexOf('MH_Play/Play_profil2.php') !== -1) { mainProfil(); } // Si on n'est pas sur le profil, on peut declencher les raccourcis (c'est pour eviter de lancer des raccourcis existants quand on essaye d'en mettre d'autres) if (window.self.location.toString().indexOf('') !== -1) { document.addEventListener('keypress', keyHandler, true); }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址