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"
}
}