UrbanDead Accurate AP Info
By grrowl
—
Last update Jun 2, 2008
—
Installed
135 times.
// ==UserScript==
// @name UrbanDead Accurate AP Info
// @namespace http://chillidonut.com/
// @description Displays precise time to next AP, and time to 50AP.
// @version 0.6beta
// @include http://*urbandead.com/map.cgi*
// ==/UserScript==
/* Some code borrowed from Ben2's script "UD Event Saver" (for the server time function)
*
* KNOWN BUGS:
* - If you're on 49AP, wait 30+ minutes without reloading the page, then do an
* action, the script won't know of the new recharge time. There's no way
* around this except to parse the action log for action-y sounding events,
* and it's not worth including EVERY action text in the script just for this.
*/
function serverTime()
{
var gDate = new Date();
var gMaltonTime = window.document.lastModified;
gDate.setDate(parseInt(gMaltonTime.substring(0,2)));
gDate.setMonth(parseInt(gMaltonTime.substring(3,5)));
gDate.setFullYear(parseInt(gMaltonTime.substring(6,10)));
gDate.setHours(parseInt(gMaltonTime.substring(11,13)));
gDate.setMinutes(parseInt(gMaltonTime.substring(14,16)));
gDate.setSeconds(parseInt(gMaltonTime.substring(17)));
//var gMilliSecs = Math.floor( gDate.getTime() / 1000) * 1000;
gDate.setTime(Math.floor( gDate.getTime() / 1000) * 1000);
return gDate;
}
function getInfoBox()
{
var paras = document.getElementsByTagName('P');
for (var i = 0; i < paras.length; ++i)
if (paras[i].className == 'gt' && paras[i].firstChild.nodeType == 3 && paras[i].firstChild.nodeValue == 'You are ')
return paras[i];
return null;
}
function parseForValue(re)
{
var matches;
if (re.test(document.body.innerHTML))
{
matches = re.exec(document.body.innerHTML);
return parseInt(matches[1]);
}
return null;
}
function APInfo()
{
var ap = parseForValue(/You have <b>([0-9]+)<\/b> Action Points? remaining/);
var uid = parseForValue(/a href=\"profile\.cgi\?mode\=edit\&id=([0-9]+)\" class\=\"y\"\>Settings/);
if (ap == null || uid == null) return;
var recharge = GM_getValue(uid + '_rechargetime', null);
var infobox = getInfoBox();
var cTime = serverTime();
// infobox.innerHTML += '<div style="font-size: 8pt;">serverTime: '+ cTime.toGMTString() +'</div>';
if (ap == 50)
{
if (!recharge)
{
infobox.innerHTML += '<div style="font-size: 8pt;">Use 1AP to activate script</div>';
GM_setValue(uid + '_rechargetime', 'fullap');
return;
}
else {
infobox.innerHTML += '<div style="font-size: 10pt;">You are at full AP.</div>';
GM_setValue(uid + '_rechargetime', 'fullap');
return;
}
}
else {
if (!recharge)
{
infobox.innerHTML += '<div style="font-size: 8pt;">Need to hit 50AP to activate.</div>';
return;
}
else if (recharge == 'fullap') { // we just used it!
recharge = cTime.getMinutes() +'.'+ cTime.getSeconds();
GM_setValue(uid + '_rechargetime', recharge);
}
}
var rTime = new Date(cTime.getTime());
recharge = recharge.split('.',2);
rTime.setMinutes(recharge[0]);
rTime.setSeconds(recharge[1]);
while (rTime.getTime() <= cTime.getTime() - (cTime.getTime() % 6000))
{
rTime.setMinutes(rTime.getMinutes() + 30);
}
while (rTime.getTime() <= cTime.getTime())
{
rTime.setMinutes(rTime.getMinutes() + 1);
}
// infobox.innerHTML += '<div style="font-size: 8pt;">nextAP: '+ rTime.toGMTString() +'</div>';
var dTime = new Date(rTime.getTime() - cTime.getTime());
var timeLeft;
if (dTime.getTime() < 7000)
{
timeLeft = 'any second now';
}
else {
timeLeft = /*dTime.getUTCHours() +'h '+*/ dTime.getUTCMinutes() +'m '+ dTime.getUTCSeconds() +'s';
}
infobox.innerHTML += '<div style="font-size: 10pt;">Next AP in '+ timeLeft +'.</div>';
dTime.setMinutes(dTime.getMinutes() + (49 - ap)*30);
timeLeft = ((dTime.getUTCDate()-1) * 24 + dTime.getUTCHours()) +'h '+
dTime.getUTCMinutes() +'m '+ dTime.getUTCSeconds() +'s';
infobox.innerHTML += '<div style="font-size: 10pt;">50AP: '+ timeLeft +'.</div>';
}
APInfo();