您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Find out who has the portals you need
// ==UserScript== // @name Kongregate Portal Report // @namespace tag://kongregate.com // @description Find out who has the portals you need // @include http://www.kongregate.com/games/* // @version 0.0.1.20160306135333 // ==/UserScript== try{ if(unsafeWindow && unsafeWindow.holodeck){ dom = unsafeWindow; } else { dom = this; } }catch(e){ dom = this; } if (window.undefined === unsafeWindow.console) { console = new function() { this.log = function(message){}; this.info = function(message){}; this.warn = function(message){}; this.error = function(message){}; }; } else { console = unsafeWindow.console; } var KPRVersion = 0.01; function init_portalReport(){ // If no version of the script is running, write down this one if (!window.KPRMaxVersion) { window.KPRMaxVersion = KPRVersion; setTimeout(init_portalReport, 1000); } // If the max version is less than this version, kill it else if (window.KPRMaxVersion < KPRVersion) { window.KPRMaxVersion = KPRVersion; setTimeout(init_portalReport, 1000); } // If this version is less than the max, kill this one else if (window.KPRMaxVersion > KPRVersion) { console.warn("KPR: Version " + KPRVersion + " is still installed, but is older than another version installed"); return; } // If no version of the script is running, this one is if (!window.KPRScriptRunning) { window.KPRScriptRunning = true; } // If a version of the script is already running, kill this one. else { if (KPRVersion == window.KPRMaxVersion) { // TODO: Is a dupe of the script running on the frame of the game, also? console.warn("KPR: Another instance of Version " + KPRVersion + " attempted to run, but was cancelled."); } else { console.warn("KPR: Version " + KPRVersion + " failed to run because Version " + window.KPRMaxVersion + " was already running."); } return; } console.info("KPR: Kongregate Portal Report loaded! v" + KPRVersion); GM_registerMenuCommand("Run Portal Report", portalReport); dom.holodeck.addChatCommand("portals", portalReport); } window.setTimeout(init_portalReport,0); function portalReport() { if (!dom.holodeck) { // console.log("no holodeck"); window.setTimeout(portalReport, 1000); return; } if (! dom.holodeck._chat_window) { // console.log("no chat window"); window.setTimeout(portalReport, 1000); return; } if (! dom.holodeck._chat_window._active_room) { // console.log("no active room"); window.setTimeout(portalReport, 1000); return; } if (! dom.holodeck._chat_window._active_room._users) { // console.log("no users"); window.setTimeout(portalReport, 1000); return; } var users = dom.holodeck._chat_window._active_room._users; var groupMap = {"atlas":[],"p-body":[]}; for (var username in users) { var user = users[username]; if (user) { var group = user.variables.dueling_group; if (group) { var need = user.variables.portals_needed; var has = user.variables.portals_to_give; groupMap[group][username] = {"name":username,"need":need, "has":has}; } } } var reportString = ""; var currentUser = dom.holodeck._active_user._attributes._object; var userGroup = currentUser.dueling_group; var iNeed = currentUser.portals_needed; var iHave = currentUser.portals_to_give; if (userGroup) { reportString += "<h3>You need " + iNeed + " " + getOtherPortalColor(userGroup) + " portal" + s(iNeed) + ", and you have " + iHave + " " + getPortalColor(userGroup) + " portal" + s(iHave) + " left to give.</h3>"; } else { reportString += "<h3>You are not currently playing the portal game.</h3>" } if (userGroup && iNeed > 0) { var otherGroup = (userGroup == "atlas")?"p-body":"atlas"; var usersString = ""; var sameTeamString = ""; var foundAny = false; var foundSameTeam = false; for (var username in groupMap[otherGroup]) { var user = groupMap[otherGroup][username]; if (user && user.has > 0) { usersString += "\t"; usersString += "<a href=\"#\" onClick=\"var texts = document.getElementsByClassName('chat_input'); for (var i in texts){var inp = texts[i]; inp.value='/w " + username + " Could I trouble you for " + ((user.has>1)?"one of your":"your last") + " " + getPortalColor(otherGroup) + " portal" + s(user.has) + "?'}; return false;\" title=\"Click to whisper\">" + username + "</a>"; usersString += " has " + user.has + " " + getPortalColor(otherGroup) + " and needs " + user.need + " " + getOtherPortalColor(otherGroup) + "<br />"; foundAny = true; groupMap[otherGroup][username] = null; } } for (var username in groupMap[userGroup]) { var user = groupMap[userGroup][username]; if (user && user.need > 0) { sameTeamString += "\t" + username + " has " + user.has + " " + getPortalColor(userGroup) + " and needs " + user.need + " " + getOtherPortalColor(userGroup) + "<br />"; foundSameTeam = true; } } if (foundAny) { reportString += "<br /><br /><h3>Peaple with " + getOtherPortalColor(userGroup) + " portals:</h3>"; reportString += usersString; } else { reportString += "<br /><br /><h3>Nobody in this room has the " + getOtherPortalColor(userGroup) + " portal" + s(iNeed) + " you need. :-(</h3>"; } if (foundSameTeam) { reportString += "<br /><br /><h3>People competing for " + getOtherPortalColor(userGroup) + " portals:</h3>"; reportString += sameTeamString; } else { reportString += "<br /><br /><h3>You have no competition for " + getOtherPortalColor(userGroup) + " portals.</h3>"; } } else { var groups = ["atlas","p-body"]; for (var i in groups) { var group = groups[i]; var anyInGroup = false; var groupString = ""; for (var username in groupMap[group]) { var user = groupMap[group][username]; if (user && (user.has > 0 || user.need > 0)) { groupString += "\t" + username + " has " + user.has + " " + getPortalColor(group) + " and needs " + user.need + " " + getOtherPortalColor(group) + "<br />"; groupMap[group][username] = null; anyInGroup = true; } } if (anyInGroup) { reportString += "<h3>People on team <span style='background-color: " + getPortalColor(group) + ";'>" + group + "</span> who still have/need portals:</h3>"; reportString += groupString; } else { reportString += "<h3>No one on team <span style='background-color: " + getPortalColor(group) + ";'>" + group + "</span> still has or needs portals.</h3>"; } } } dom.holodeck.activeDialogue().displayUnsanitizedMessage( "PortalBot: ", reportString, {"class":"whisper received_whisper"}, {non_user:true} ); return false; } function s(count) { if (count != 1) { return "s"; } else { return ""; } } function getPortalColor(groupName) { if (groupName == "atlas") { return "blue"; } else if (groupName == "p-body") { return "orange"; } else { return "no portal color" } } function getOtherPortalColor(groupName) { if (groupName == "atlas") { return "orange"; } else if (groupName == "p-body") { return "blue"; } else { return "no portal color" } }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址