您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Caddy Healer for Urban Dead
// ==UserScript== // @name chud // @namespace http://userscripts.org/users/72447 // @author haliphax (http://userscripts.org/users/72447) // @contributor jimflexx (http://userscripts.org/users/117383) // @description Caddy Healer for Urban Dead // @include http://urbandead.com/map.cgi* // @include http://www.urbandead.com/map.cgi* // @version 0.0.1.20210919202127 // ==/UserScript== // sort characters array based on hp (characters[i][2]) function sortCharacters(a, b) { return (a[2] - b[2]); } // displays the caddy function displayCaddy(characters) { var canFAK = false; var fakButton = document.evaluate("//form[@action and contains(@action,'use-h')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); if(fakButton.snapshotLength > 0) { canFAK = true; fakButton = fakButton.snapshotItem(0); } var weapons = getWeapons(); var canPunch = weapons[0] == null ? false : true; var canKnife = weapons[1] == null ? false : true; var canPistol = weapons[2] == null ? false : true; var canShotgun = weapons[3] == null ? false : true; var canAxe = weapons[4] == null ? false : true; var canMaul = weapons[5] == null ? false : true; var canTeeth = weapons[6] == null ? false : true; var canDrag = weapons[7] == null ? false : true; var caddyMain = document.createElement('div'); caddyMain.setAttribute('style','background-color: #556655; color: #fbb; border-width: 4px; border-style: solid; border-color: #454; padding: 4px 7px 2px 7px; margin-top: 5px; margin-bottom: 5px;'); for(var i = 0; i < characters.length; i++) { var character = document.createElement('div'); character.setAttribute('style','clear: both; margin: 2px 0px 3px 0px;'); // Create the appropriate buttons createButton(canKnife, character, characters[i], "K", "knife", "Stab", "#933", "#111", "#fff", "#fff", "#fff", "map.cgi", "weapon", "knife"); createButton(canAxe, character, characters[i], "A", "axe", "Hack", "#663", "#111", "#fff", "#fff", "#fff", "map.cgi", "weapon", "axe"); createButton(canPistol, character, characters[i], "P", "pistol", "Shoot", "#366", "#111", "#fff", "#fff", "#fff", "map.cgi", "weapon", "pistol"); createButton(canShotgun, character, characters[i], "S", "shotgun", "Blast", "#396", "#111", "#fff", "#fff", "#fff", "map.cgi", "weapon", "shotgun"); createButton(canMaul, character, characters[i], "C", "maul", "Claw", "#396", "#111", "#fff", "#fff", "#fff", "map.cgi", "weapon", "maul"); createButton(canTeeth, character, characters[i], "B", "teeth", "Bite", "#396", "#111", "#fff", "#fff", "#fff", "map.cgi", "weapon", "teeth"); createButton(characters[i][2] <= 12 && canDrag, character, characters[i], "D", "drag", "Drag", "#396", "#111", "#fff", "#fff", "#fff", "map.cgi", "weapon", "drag"); createButton(canFAK, character, characters[i], "+", "heal", "Heal", "#393", "#9e9", "#ded", "#fff", "#ded", fakButton.action, null, null); // Create the HP display, color-coded by value var characterHP = document.createElement('span'); var inf = characters[i][4].indexOf("class=\"inf\"") != -1 ? true : false; characterHP.innerText = " " + characters[i][2] + " "; characterHP.setAttribute('style','color: ' + getHPColor(characters[i][2], inf) + '; width: 4em;'); character.appendChild(characterHP); // Create the character's name, with appropriate links and Contact colors var characterName = document.createElement('a'); characterName.innerHTML = characters[i][1]; characterName.href = "profile.cgi?id=" + characters[i][0]; if(characters[i][3] != null) characterName.className = characters[i][3]; character.appendChild(characterName); caddyMain.appendChild(character); } var pars = document.evaluate('//tr/td[@class="cp"]/div[@class="gt"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); if(pars.snapshotLength != 0) { pars.snapshotItem(0).parentNode.appendChild(caddyMain); } } // simply creates a button with the given parameters function createButton(able, character, characters, displayText, buttonType, titleText, defColor, hovColor, textColor, hovTextColor, borderColor, buttonAction, inputName, inputValue) { if(!able) return; var characterForm = document.createElement('form'); characterForm.innerHTML = displayText; characterForm.setAttribute("onmouseover", "this.style.backgroundColor = '" + hovColor + "'; this.style.color = '" + hovTextColor + "'"); characterForm.setAttribute("onmouseout", "this.style.backgroundColor = '" + defColor + "'; this.style.color = '" + textColor + "'"); characterForm.setAttribute("onclick", 'chud' + buttonType + '_' + characters[0] + '.submit()', false); characterForm.setAttribute('style','height: 1em; clear: none; border: ' + borderColor + ' solid 1px; background-color: ' + defColor + '; padding: 0px 2px 0px 2px; margin-right: 1px; text-align: center; cursor: pointer; color: ' + textColor + ';'); characterForm.name = "chud" + buttonType + "_" + characters[0]; characterForm.action = buttonAction; characterForm.method = "post"; characterForm.title = titleText; var characterTarget = document.createElement('input'); characterTarget.setAttribute("type", "hidden"); characterTarget.name = "target"; characterTarget.value = characters[0]; var otherInput = document.createElement('input'); otherInput.setAttribute("type", "hidden"); otherInput.name = inputName; otherInput.value = inputValue; characterForm.appendChild(characterTarget); characterForm.appendChild(otherInput); character.appendChild(characterForm); } // generates a color for HP based on its value function getHPColor(hp, inf) { var level = hp / 60; var color = '#'; if(inf) var c = [[170, 180, 70], [120, 240, 40]]; else var c = [[255, 40, 60], [240, 175, 120]]; for (var i = 0; i < 3; ++i) color += ('0' + parseInt(c[0][i] + ((c[1][i] - c[0][i]) * level)).toString(16)).substr(-2); return color; } // finds all of the weapons you can use function getWeapons() { var weapons = new Array(); weapons[0] = document.evaluate("//option[@value and contains(@value,'punch')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); if(weapons[0].snapshotLength > 0) { weapons[1] = document.evaluate("//option[@value and contains(@value,'knife')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); weapons[2] = document.evaluate("//option[@value and contains(@value,'pistol')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); weapons[3] = document.evaluate("//option[@value and contains(@value,'shotgun')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); weapons[4] = document.evaluate("//option[@value and contains(@value,'axe')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); } else { weapons[5] = document.evaluate("//option[@value and contains(@value,'maul')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); weapons[6] = document.evaluate("//option[@value and contains(@value,'teeth')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); weapons[7] = document.evaluate("//option[@value and contains(@value,'drag')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); } for(var i = 0; i < weapons.length; i++) { if(weapons[i] != null && weapons[i].snapshotLength > 0) weapons[i] = weapons[i].snapshotItem(0); else weapons[i] = null; } return weapons; } // main script body var pnRegex = /<a.*?href="profile.cgi\?id=(\d+)"(?:\sclass="(.*?)")?>(.*?)<\/a>.*?\((\d+)<sub/gi; var matches = null; var characters = new Array(); var i = 0; matches = pnRegex.exec(document.body.innerHTML); while(matches != null) { if (matches[0].indexOf("class=\"trg\"")!=-1 || matches[0].indexOf("class=\"inf\"")!=-1) { characters[i] = new Array(); characters[i][0] = matches[1]; // profile id characters[i][1] = matches[3]; // name characters[i][2] = matches[4]; // hit points characters[i][3] = matches[2]; // href class (color) characters[i][4] = matches[0]; // hp class i++; } else if(matches[4] != 60 && matches[4] != 50) { characters[i] = new Array(); characters[i][0] = matches[1]; // profile id characters[i][1] = matches[3]; // name characters[i][2] = matches[4]; // hit points characters[i][3] = matches[2]; // href class (color) characters[i][4] = matches[0]; // hp class i++; } matches = pnRegex.exec(document.body.innerHTML); } if(characters.length > 0) { characters.sort(sortCharacters); displayCaddy(characters); }