// ==UserScript== // @name Conquer Club Map Rank GL // @namespace http://userscripts.org/ // @version 1.5.6 // @description Script to work out Player Map-specific Rank // @include http://www.conquerclub.com/* // @include https://www.conquerclub.com/* // ==/UserScript== var versiont = GM_info.script.version; var latestVersiont = 0; var __eventListeners = []; var ranks = {}; var updateInfo = {}; var maps = []; var unique = {}; var totals, myOptions, myStore; var cid = 0; var viewer = null; var ghist = []; var rateReq = []; var xrateReq = []; var current = -1; var suggtot = 0; var phist = ""; var loadedName = ""; var icons = 0; var ratings = 0; var dark = 0; var pcount = 0; var sortable = ["smap","spts","swin","suni","skil", "srel"]; var graphTypes = { 'points' : new GraphType("Points","point gain/loss",pointsalg,1000, "red",null,null) , 'winloss' : new GraphType("Win/Loss %","win/loss",winlossalg,0, "green(win) and red(loss)",100,0) }; var gm = { standard : 'S', terminator : 'C', assassin: 'A', doubles: 'D', triples : 'T', quadruples : 'Q' }; function findKeyByValue(object, value) { for (var key in object) { if (object[key] == value) { return key; } } return undefined; }; var modulo = { 'D' : 2, 'T' : 3, 'Q' : 4 }; var medlev = { 'standard' : [0,20,100,400], 'crossmap' : [0,20,40,60], 'rating' : [0,40,200,500] }; var medname = ["0", "Bronze (1)", "Silver (2)", "Gold (3)"]; var medclass = ["nomedal", "bmedal", "smedal", "gmedal", "omedal"]; var meddivclass = ["nomeddiv", "bmeddiv", "smeddiv", "gmeddiv", "omeddiv"]; var medcombo = ["manual", "freestyle", "fog", "speed", "crossmap", "nuclear"]; var medcombourl = ["&it=M", "&po=F", "&wf=Y", "&tw=Y" , "&sg=Y", "", "&bc=4"]; var medmatrix = []; // all possible combinations to get medals. for (var i = 0; i < medcombo.length; i++) { for (var j = 0, length = medmatrix.length; j < length; j++) { var temp = medmatrix[j].slice(0); temp.push(i); medmatrix.push(temp); } medmatrix.push([i]); } medmatrix.sort(function(a,b) { // longest first return b.length - a.length; }); var slider; var sarray; var baseURL = window.location.protocol + "//www.conquerclub.com/"; var surl = ""; var lastLog = new Date(); lastLog.setFullYear(2008,1,13); var lastTime = lastLog.getTime(); function Point(time, points) { this._time = time; this._points = points; } function Rank() { this._wins = 0; this._rank = 0; this._counter = 0; this._firsts = 0; this._wonfirsts = 0; this._missing = 0; this._games = []; this._parray = []; this._warray = []; this._kills = 0; this._meanwin = 0; this._beaten = 0; this._defeats = new Defeats(); } function Store() { this._ranks = {}; this._unique = {}; this._date = new Date(); this._total = 0; } function Totals(insignia) { this._insignia = insignia; this._points = 0; this._maps = 0; this._unique = []; this._crossmap = []; this._crossmaps = 0; this._wins = 0; this._pages = 0; this._rpages = 0; this._expected = 0; this._games = 0; this._kills = 0; this._meanwin = 0; this._beaten = 0; this._firsts = 0; this._wonfirsts = 0; this._missing = 0; this._realscore = null; this._parray = []; this._warray = []; this._sorted = []; this._contribute = []; this._medals = 0; this._xmedals = 0; this._counter = 0; this._types = []; this._defeats = new Defeats(); } function pushUnique(array, value) { if (array.indexOf(value) == -1) { array.push(value); } } function Defeats() { this.standard = []; this.terminator = []; this.assassin = []; this.doubles = []; this.triples = []; this.quadruples = []; this.speed = []; this.manual = []; this.fog = []; this.trench = []; this.freestyle = []; this.nuclear = []; this.random = []; this.rating = []; this.xStandard = []; this.xTerminator = []; this.xAssassin = []; this.xDoubles = []; this.xTriples = []; this.xQuadruples = []; this.xSpeed = []; this.xManual = []; this.xFog = []; this.xTrench = []; this.xFreestyle = []; this.xNuclear = []; this.xRandom = []; this.xRating = []; } function Summary(name) { this._medal = name; this._current = 0; this._next = 0; this._medals = 0; this._best = []; } function Pinfo() { this._defeats = {}; } function GraphType(type,info,alg,initial,markers,maxbound,minbound) { this._type = type; this._info = info; this._markers = markers; this._running = function(array) { return(alg(array)); }; this._initial = initial; this._maxbound = maxbound; this._minbound = minbound; } function Streak() { this._start = 0; this._num = 0; } function PointInfo(data, colour) { this._data = []; this._colour = []; this._winstreak = new Streak(); this._losstreak = new Streak(); } function Slide(length,to,parray) { this._pxLen = length; this._scale = to / length; this._toVal = to; this._parray = parray; } function MapOpts(player2, num, type, bonus, order, fort, fog, trench, joinable, speed, tname, versus, versus2, ex1, ex2, player3,player4,versus3,versus4,ex3,ex4,troops) { this._pcount = 0; this._players = { p2: player2, p3: player3, p4: player4, v1: versus, v2: versus2, v3: versus3, v4: versus4, x1: ex1, x2: ex2, x3: ex3, x4: ex4 }; for (var i in this._players) { if (this._players[i]) { this._pcount++; } } this._num = num; this._type = type; this._bonus = bonus; this._order = order; this._troops = troops; this._fort = fort; this._fog = fog; this._trench = trench; this._joinable = joinable; this._speed = speed; this._tname = tname; } function addListener(instance, eventName, listener) { var listenerFn = listener; instance.addEventListener(eventName, listenerFn, false); var event = { instance: instance, name: eventName, listener: listenerFn }; __eventListeners.push(event); return event; } function removeListener(event) { var instance = event.instance; instance.removeEventListener(event.name, event.listener, false); for (var i = 0; i < __eventListeners.length; i++) { if (__eventListeners[i] == event) { __eventListeners.splice(i, 1); break; } } } function setThumbnails(opts) { var thumbs = ''; for (var i = 0; i < opts.length; i++) { if (opts[i].selected) { var map_status = (unsafeWindow.mapStatuses[i] == 'B') ? 'http://static.conquerclub.com/map_beta.png' : 'http://static.conquerclub.com/map_normal.png'; thumbs += ' ' + unsafeWindow.mapTitles[i] + ''; } } unsafeWindow.map_thumbs.innerHTML = thumbs; unsafeWindow.initLightbox(); } function pointsalg(array) { var counter = 1000; var running = new PointInfo(); for (var f=0; f< array.length; f++) { counter += array[f]._points; running._data.push(counter); if (array[f]._points < 0) running._colour.push("red"); else running._colour.push("green"); } return running; } function winlossalg(array) { var counter = 0; var winstreak = new Streak(); var losstreak = new Streak(); var running = new PointInfo(); if (array[0]._points == 1) { counter += array[0]._points; running._colour.push("green"); winstreak._num++; } else { running._colour.push("red"); losstreak._num++; } running._data.push(100 * counter); for (var f=1; f< array.length; f++) { if (array[f]._points == 1) { counter += array[f]._points; if (array[f - 1]._points == -1) { if (losstreak._num > running._losstreak._num) { running._losstreak._start = losstreak._start; running._losstreak._num = losstreak._num; } winstreak._start = f; winstreak._num = 0; } winstreak._num++; running._colour.push("green"); } else{ if (array[f - 1]._points == 1) { if (winstreak._num > running._winstreak._num) { running._winstreak._start = winstreak._start; running._winstreak._num = winstreak._num; } losstreak._start = f; losstreak._num = 0; } losstreak._num++; running._colour.push("red"); } running._data.push((100 * counter / (f+1)).toFixed(0)); } if (array[f - 1]._points == -1) { if (losstreak._num > running._losstreak._num) { running._losstreak._start = losstreak._start; running._losstreak._num = losstreak._num; } } else if (array[f - 1]._points == 1) { if (winstreak._num > running._winstreak._num) { running._winstreak._start = winstreak._start; running._winstreak._num = winstreak._num; } } return running; } function cascadewin(pinfoarray, name) { if (!pinfoarray[name]) return 0; var retVal = 0; for (var x in pinfoarray[name]._defeats) { retVal += pinfoarray[name]._defeats[x] + (pinfoarray[name]._defeats[x] * cascadewin(pinfoarray,x)); } return retVal; } function cascadeloss(pinfoarray, name) { if (!pinfoarray[name]) return 1; var retVal; for (var x in pinfoarray[name]._defeats) { retVal = pinfoarray[name]._defeats[x] * cascadeloss(pinfoarray,x); } return retVal; } function previousSib(node){ var tempNode=node.previousSibling; while(tempNode.nodeType!=1){ tempNode=tempNode.previousSibling; } return tempNode; } function nextSib(node){ var tempNode=node.nextSibling; while(tempNode.nodeType!=1){ tempNode=tempNode.nextSibling; } return tempNode; } function setTable() { var rws = viewer.document.getElementById('ranktable').getElementsByTagName('tr'); var cross = totals._crossmaps; if (cross >= 60) { cross = "gmedal"; } else if (cross >= 40) { cross = "smedal"; } else if (cross >= 20) { cross = "bmedal"; } var cwidth = totals._maps < 25 ? "noflow" : ""; for (var r=0; r= medlev[s][e]) sm._medals = e; else{ sm._next = medlev[s][e] - sm._current; break; } } } else{ for (var e=0; e< medlev.standard.length; e++) { if (sm._current >= medlev.standard[e]) sm._medals = e; else{ sm._next = medlev.standard[e] - sm._current; break; } } } totals._medals += sm._medals; var best = []; if (sm._current) { for (var j in ranks) { if (ranks[j]._defeats[s] && s!= 'rating') { if (ranks[j]._defeats[s].length > sm._best) { sm._best = ranks[j]._defeats[s].length; best = []; best.push(j); } else if (ranks[j]._defeats[s].length == sm._best) best.push(j); } } } sm._best = best; summary.push(sm); if (s == 'speed' || s == 'fog' || s == 'trench' || s == 'freestyle' || s == 'manual' || s == 'nuclear') pm[s] = sm; } } } for (var m in ranks) { if (ranks[m]._rank >= 1000) { srank = "+" + (ranks[m]._rank - 1000); pos.push(m); } else { srank = ranks[m]._rank - 1000; neg.push(m); } totals._points += ranks[m]._rank - 1000; var tr = viewer.document.createElement('tr'); totals._sorted.push(m); totals._sorted.sort(); viewer.document.getElementById('ranktable').insertBefore(tr,viewer.document.getElementById('ranktable').getElementsByTagName('tr')[totals._sorted.indexOf(m)]); tr.className = "result"; if (unique[m].length >= 5) { totals._crossmap[maps.indexOf(m)] = 1; totals._crossmaps++; mu.push(m); } else{ totals._crossmap[maps.indexOf(m)] = 0; mnu.push(m); } if (ranks[m]._missing) { missing = "" + ranks[m]._missing + ""; totals._missing += ranks[m]._missing; } else missing = ""; var td = viewer.document.createElement('td'); td.id = "gtot" + maps.indexOf(m); td.innerHTML = m + missing; tr.appendChild(td); td = viewer.document.createElement('td'); td.innerHTML = '' + getRank(250, ranks[m]._rank) + nextRank(ranks[m]._rank); tr.appendChild(td); td = viewer.document.createElement('td'); td.innerHTML = '' + srank; tr.appendChild(td); td = viewer.document.createElement('td'); td.id = "wtot" + maps.indexOf(m); td.innerHTML = ranks[m]._wins + " from " + ranks[m]._counter + "(" + (100 * (ranks[m]._wins)/(ranks[m]._counter)).toFixed(0) + "%)"; tr.appendChild(td); td = viewer.document.createElement('td'); td.id = "result" + maps.indexOf(m); td.innerHTML = '' + unique[m].length; tr.appendChild(td); td = viewer.document.createElement('td'); td.innerHTML = '' + getKiller(ranks[m]._counter - ranks[m]._wins,ranks[m]._kills); tr.appendChild(td); td = viewer.document.createElement('td'); td.innerHTML = '' + getRelative(ranks[m]._meanwin,ranks[m]._beaten); tr.appendChild(td); if (ranks[m]._wins) mwon.push(m); else mlost.push(m); if (ranks[m]._counter >= 5) freq.push(m); else nfreq.push(m); for (var ms =0; msGame " + ranks[m]._games[ms] + ""); } viewer.document.getElementById('progress').innerHTML = "Scanned " + user + " on " + m; } var cm = new Summary('crossmap'); cm._current = totals._crossmaps; for (var e=0; e< medlev['crossmap'].length; e++) { if (cm._current >= medlev['crossmap'][e]) cm._medals = e; else{ cm._next = medlev['crossmap'][e] - cm._current; break; } } totals._medals += cm._medals; var best = []; if (totals._crossmaps) { for (var j in ranks) { if (unique[j] && unique[j].length < 5){ if (unique[j].length > cm._best) { cm._best = unique[j].length; best = []; best.push(j); } else if (unique[j].length == cm._best) best.push(j); } } } cm._best = best; summary.push(cm); summary.sort(ssort); var medal = totals._unique.length; if (medal >= 400) { medal = "" + medal + ""; } else if (medal >= 100) { medal = "" + medal + ""; } else if (medal >= 20) { medal = "" + medal + ""; } else { medal = "" + medal + ""; } var cross = medclass[cm._medals]; var firstLog=new Date(); firstLog.setFullYear(2008,1,6); var firstTime = firstLog.getTime(); var runningscore = 0; var dummyscore = 0; var hiscore = 0; var hitime = 0; harray = totals["_parray"]; harray.sort(psort); for (var t=0; t hiscore) { hiscore = runningscore; } if (totals._realscore != null) { if (harray[t]._time > lastTime) { if (runningscore + totals._realscore - totals._points - 1000 > dummyscore) { dummyscore = runningscore + totals._realscore - totals._points - 1000; hitime = harray[t]._time; } } if (harray[t]._time < firstTime){ if (runningscore > dummyscore) { dummyscore = runningscore; hitime = harray[t]._time; } } } } if (totals._points >= 0) trank = "+" + (totals._points); else trank = totals._points; if (totals._realscore != null) trank = totals._realscore; if (totals._missing) missing = "" + totals._missing + ""; else missing = ""; var tds = viewer.document.getElementById('summary').getElementsByTagName('td'); tds[0].id = "gtot"; tds[0].innerHTML = "Totals" + missing + ""; if (totals._realscore != null) { tds[1].innerHTML = '' + getRank(totals._games, totals._realscore) + nextRank(totals._realscore); } else { tds[1].innerHTML = '' + getRank(totals._games, totals._points + 1000) + nextRank(totals._points + 1000); } tds[2].innerHTML = '' + trank; tds[3].id = "wtot"; tds[3].innerHTML = totals._wins + " from " + totals._games + "(" + (100 * (totals._wins)/(totals._games)).toFixed(0) + "%)"; tds[4].innerHTML = '' + medal + " (" + totals._crossmaps + ")"; tds[5].innerHTML = '' + getKiller(totals._games - totals._wins,totals._kills); tds[6].innerHTML = '' + getRelative(totals._meanwin,totals._beaten); for (var d=0; d"; x+= "Medal NameNumber of MedalsDefeatsNext MedalMaps"; x+= "Game Achievements: " + (totals._medals - totals._xmedals) + " Medals"; var base = baseURL + "player.php?submit=Search&gs=W&pt=N"; for (var y=0; y" + summary[y]._medal + ""; } else x+= "" + summary[y]._medal + ""; x+= "" + medname[summary[y]._medals] + ""; x+= "" + summary[y]._current + "" + summary[y]._next + ""; if (summary[y]._medal == 'Rating' || summary[y]._medal == 'random') x+= "-"; else if (summary[y]._best.length == 0) x+= "None"; else if (summary[y]._medal == 'crossmap') { x+= "" + summary[y]._best + " (" + unique[summary[y]._best[0]].length + ")"; } else x+= "" + summary[y]._best + ""; } if (totals._contribute.length) x+= "Contributions: " + totals._xmedals + " Medals"; for (var y=0; y< totals._contribute.length;y++) { x+= "" + totals._contribute[y]._medal + "" + totals._contribute[y]._medals + ""; x+= "---"; } x+= "Total Medals Won: " + totals._medals + ""; var comboleft = 0; for (var p in pm) { if (pm[p]._medals < 3) comboleft++; } if (cm._medals < 3 || comboleft) { x+= "Optimal Medal Combinations"; x+= "MedalsMaps"; if (nm){ var hrefbase = base + "&gt=" + gm[nm._medal]; var optimalrows = []; var optimaltext = []; for (var mat=0; mat 2) { show = 0; break; } combos.push(pm[medcombo[medmatrix[mat][step]]]); } if (show) { if (medmatrix[mat].indexOf(4) != -1) { if (cm._medals < 3) { if (cm._best.length) x+= optimalrows[optimalkey] + mps['crossmap'] + "\", \"mrsugg\");wdw.focus();'>" + optimaltext[optimalkey] + nm._medal + "" + cm._best + ""; else{ var noWins = []; var noWinsText = []; for (var un in ranks) { if (!unique[un]) { noWins.push(maps.indexOf(un)); noWinsText.push(un); } } if (noWins.length) x+= optimalrows[optimalkey] + noWins + "\", \"mrsugg\");wdw.focus();'>" + optimaltext[optimalkey] + nm._medal + "" + noWins + ""; } } } else{ combos.sort(sortCombo); if (combos[0]._best.length) x+= optimalrows[optimalkey] + mps[combos[0]._medal] + "\", \"mrsugg\");wdw.focus();'>" + optimaltext[optimalkey] + nm._medal + "" + combos[0]._best + ""; else if (nm._best.length) x+= optimalrows[optimalkey] + mps[nm._medal] + "\", \"mrsugg\");wdw.focus();'>" + optimaltext[optimalkey] + nm._medal + "" + nm._best + ""; else x+= optimalrows[optimalkey] + "\", \"mrsugg\");wdw.focus();'>" + optimaltext[optimalkey] + nm._medal + "-"; } } } } else{ var hrefbase = base; var optimalrows = []; var optimaltext = []; for (var mat=0; mat 2) { show = 0; break; } combos.push(pm[medcombo[medmatrix[mat][step]]]); } if (show) { if (medmatrix[mat].indexOf(4) != -1) { if (cm._medals < 3) { if (cm._best.length) x+= optimalrows[optimalkey] + mps['crossmap'] + "\", \"mrsugg\");wdw.focus();'>" + optimaltext[optimalkey].substr(0,optimaltext[optimalkey].length-1) + "" + cm._best + ""; else{ var noWins = []; var noWinsText = []; for (var un in ranks) { if (!unique[un]) { noWins.push(maps.indexOf(un)); noWinsText.push(un); } } if (noWins.length) x+= optimalrows[optimalkey] + noWins + "\", \"mrsugg\");wdw.focus();'>" + optimaltext[optimalkey].substr(0,optimaltext[optimalkey].length-1) + "" + noWins + ""; } } } else{ combos.sort(sortCombo); if (combos[0]._best.length) x+= optimalrows[optimalkey] + mps[combos[0]._medal] + "\", \"mrsugg\");wdw.focus();'>" + optimaltext[optimalkey].substr(0,optimaltext[optimalkey].length-1) + "" + combos[0]._best + ""; else x+= optimalrows[optimalkey] + "\", \"mrsugg\");wdw.focus();'>" + optimaltext[optimalkey].substr(0,optimaltext[optimalkey].length-1) + "-"; } } } } } x+= "
Notes: The Maps column show the best maps for that medal (most unique defeats). "; if (nm) x+= "E.g. for " + nm._medal + " most defeats have come from " + nm._best + "
"; x+= "For crossmaps, the maps shown are those closest to 5 unique defeats. The number in brackets is the number of defeats for those maps.
"; x+= "Click on the links to show game finder results for best medal + maps combination.
"; x+= ""; x+= ""; viewer.document.getElementById('meds').innerHTML = x; var stable = viewer.document.getElementById('stable'); tr = viewer.document.createElement('tr'); function createSummTd(id, title, text) { return "" + text + ""; } var trHTML = createSummTd("played", "List of Maps Completed", played.length + " Maps Completed"); trHTML += createSummTd("unplayed", "List of Maps Never Completed", (maps.length - played.length) + " Maps Not Completed"); trHTML += createSummTd("freq", "List Of Maps Played 5 times Or More", freq.length + " Frequent Maps"); trHTML += createSummTd("nfreq", "List Of Maps Played Less Than 5 Times", nfreq.length + " Infrequent Maps"); trHTML += createSummTd("mu", "List Of Maps Played With 5 Or More Unique Defeats", mu.length + " Crossmaps Maps"); trHTML += createSummTd("mnu", "List Of Maps Played With Less Than 5 Unique Defeats", mnu.length + " Non Crossmaps Maps"); tr.innerHTML = trHTML; stable.appendChild(tr); tr = viewer.document.createElement('tr'); trHTML = createSummTd("mwon", "List Of Maps Played With At Least 1 Win", mwon.length + " Maps Won"); trHTML += createSummTd("mlost", "List Of Maps Played With No Wins", mlost.length + " Maps Not Won"); trHTML += createSummTd("pos", "List Of Maps Played With Score 0 Or More", pos.length + " Positive Maps"); trHTML += createSummTd("neg", "List Of Maps Played With Negative Score", neg.length + " Negative Maps"); trHTML += createSummTd("miss", "List Of Missing Game Logs", miss.length + " Missing Logs"); trHTML += " "; tr.innerHTML = trHTML; stable.appendChild(tr); tr = viewer.document.createElement('tr'); tr.innerHTML = "Click On Light Blue Cells For Lists"; stable.appendChild(tr); freq.sort(); nfreq.sort(); mu.sort(); mnu.sort(); mwon.sort(); mlost.sort(); pos.sort(); neg.sort(); miss.sort(); addListener(viewer.document.getElementById('played'),'click', function() { viewer.document.getElementById('maplist').innerHTML = 'Maps Completed

' + played; }); addListener(viewer.document.getElementById('unplayed'),'click', function() { viewer.document.getElementById('maplist').innerHTML = 'Maps Not Completed

' + unplayed; }); addListener(viewer.document.getElementById('mwon'),'click', function() { viewer.document.getElementById('maplist').innerHTML = 'Maps Won

' + mwon; }); addListener(viewer.document.getElementById('mlost'),'click', function() { viewer.document.getElementById('maplist').innerHTML = 'Maps Not Won

' + mlost; }); addListener(viewer.document.getElementById('mu'),'click', function() { viewer.document.getElementById('maplist').innerHTML = 'Crossmaps Maps

' + mu; }); addListener(viewer.document.getElementById('mnu'),'click', function() { viewer.document.getElementById('maplist').innerHTML = 'Non Crossmaps Maps

' + mnu; }); addListener(viewer.document.getElementById('pos'),'click', function() { viewer.document.getElementById('maplist').innerHTML = 'Positive Maps

' + pos; }); addListener(viewer.document.getElementById('neg'),'click', function() { viewer.document.getElementById('maplist').innerHTML = 'Negative Maps

' + neg; }); addListener(viewer.document.getElementById('freq'),'click', function() { viewer.document.getElementById('maplist').innerHTML = 'Frequent Maps

' + freq; }); addListener(viewer.document.getElementById('nfreq'),'click', function() { viewer.document.getElementById('maplist').innerHTML = 'Infrequent Maps

' + nfreq; }); addListener(viewer.document.getElementById('miss'),'click', function() { viewer.document.getElementById('maplist').innerHTML = 'Missing Logs

' + miss; }); for (var st=0; st< sortable.length; st++) { viewer.document.getElementById(sortable[st]).className = "sorton"; } setTable(); if (totals._insignia) { myDefeats = new Defeats(); for (def in totals._defeats) { myDefeats[def] = totals._defeats[def]; } myStore._total = totals._counter; serialize("defeats", myDefeats); serialize("store", myStore); } viewer.document.getElementById('closeRank').style.opacity = "0.9"; viewer.document.getElementById('closeRank').style.backgroundColor = "green"; viewer.document.getElementById('progress').innerHTML = "Scan Complete. Click on light blue column headers to sort. Click again to reverse sort. Click on yellow boxes for chart."; if (surl != "") { var sentscore; var senthi; if (totals._realscore != null) { sentscore = totals._realscore; senthi = (dummyscore + 1000); } else{ sentscore = (totals._points + 1000); senthi = (hiscore + 1000); } GM_xmlhttpRequest({ method: 'POST', url: "http://chipv.freehostia.com/scoreboard.php?act=s&player=" + user + "&score=" + sentscore + "&win=" + totals._wins + "&loss=" + (totals._games - totals._wins) + "&rr=" + getRR(totals._meanwin,totals._beaten) + "&hiscore=" + senthi + "&unique=" + totals._unique.length + "&medals=" + totals._medals + "&url=" + surl, headers: { 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey', 'Accept': 'text/html' }, onload: function(responseDetails) { surl = ""; } }); } } function valToPix(val) { return (Math.floor(val * slider._toVal / (slider._scale * slider._pxLen)) * (slider._pxLen / slider._toVal)); } function tinput(id) { displayObj = viewer.document.getElementById('display_' + id); displayVal = parseInt(displayObj.value); if (displayVal <= slider._toVal) { var n = valToPix(displayVal); slideLeft('slider_' + id,n); viewer.document.getElementById('stamp_' + id).innerHTML = '' + new Date(slider._parray[displayVal]._time).toLocaleString(); displayObj.style.color = "blue"; } else{ viewer.document.getElementById('stamp_' + id).innerHTML = ""; displayObj.style.color = "gray"; } } function slideLeft(elmnt, pos) { if (!(elmnt = viewer.document.getElementById(elmnt))) return 0; if (typeof(pos) == 'number') elmnt.style.left = pos + 'px'; else { pos = parseInt(elmnt.style.left); if (isNaN(pos)) pos = 0; } return pos; } function moveSlider(evnt) { if (mouseover) { x = pxLeft + evnt.screenX - xCoord; if (x > slider._pxLen) x = slider._pxLen; if (x < 0) x = 0; slideLeft(sliderObj.id, x); sliderPos = (slider._pxLen / slider._toVal) * Math.round(slider._toVal * x / slider._pxLen); v = Math.round((sliderPos * slider._scale)); displayObj.value = v; stampObj.innerHTML = '' + new Date(slider._parray[v]._time).toLocaleString(); return false; } return undefined; } function slide(evnt, id) { sliderObj = viewer.document.getElementById('slider_' + id); displayObj = viewer.document.getElementById('display_' + id); stampObj = viewer.document.getElementById('stamp_' + id); pxLeft = slideLeft('slider_' + id); xCoord = evnt.screenX; mouseover = true; viewer.document.addEventListener('mousemove', moveSlider , false); viewer.document.addEventListener('mouseup', sliderMouseUp, false); } function sliderMouseUp() { mouseover = false; v = (parseInt(displayObj.value)) ? parseInt(displayObj.value) : 0; pos = v /(slider._scale); slideLeft(sliderObj.id, pos); stampObj.innerHTML = '' + new Date(slider._parray[v]._time).toLocaleString(); viewer.document.removeEventListener('mousemove', moveSlider, false); viewer.document.removeEventListener('mouseup', sliderMouseUp, false); } function graph(holder, arr, start, end, title, graphtype) { var parray = holder[arr]; var offset = 0; var deficit; viewer.document.getElementById('lines').innerHTML = ''; switchTabs(2); parray.sort(psort); var running = graphtype._running(parray); var g = new line_graph(graphtype._maxbound, graphtype._minbound); viewer.document.getElementById('lines').style.display = "block"; viewer.document.getElementById('cheader').style.display = "block"; viewer.document.getElementById('cfooter').style.display = "block"; viewer.document.getElementById('buttons').style.display = "block"; viewer.document.getElementById('cheader').innerHTML = "

Map Rank Chart For " + title + " " + graphtype._type + "


" + graphtype._type + ""; viewer.document.getElementById('cfooter').innerHTML = "

Timestamp

"; if (start==0 && graphtype == graphTypes['points']) g.add('',graphtype._initial,"red"); if (title == "Totals" && totals._realscore != null && graphtype == graphTypes['points']) deficit = totals._realscore - totals._points - 1000; for (var f=start; f<=end; f++) { offset = (deficit && parray[f]._time > lastTime)? deficit:0; g.add('' + f + '', parseInt(running._data[f]) + offset, running._colour[f]); } g.render("lines"); var buttontxt = ""; if (graphtype == graphTypes['winloss']) { buttontxt += ""; } buttontxt += ""; buttontxt += ""; buttontxt += ""; buttontxt += ""; buttontxt += "
Min: " + g.min + "   Max: " + g.max + "
Longest Winning Streak : " + (running._winstreak._num) + "   "; buttontxt += "Longest Losing Streak : " + (running._losstreak._num) + "
From
 
"; buttontxt += "
 
"; buttontxt += "
To
 
"; buttontxt += "
 
"; buttontxt += "
"; viewer.document.getElementById('buttons').innerHTML = buttontxt; viewer.document.getElementById('slider_1').style.left = valToPix(start) + "px"; viewer.document.getElementById('slider_2').style.left = valToPix(end) + "px"; viewer.document.getElementById('track_1').style.width = (220) + "px"; viewer.document.getElementById('track_2').style.width = (220) + "px"; viewer.document.getElementById('slit_1').style.width = (210) + "px"; viewer.document.getElementById('slit_2').style.width = (210) + "px"; viewer.document.getElementById('display_1').value = start; viewer.document.getElementById('display_2').value = end; viewer.document.getElementById('stamp_1').innerHTML = '' + new Date(parray[start]._time).toLocaleString(); viewer.document.getElementById('stamp_2').innerHTML = '' + new Date(parray[end]._time).toLocaleString(); addListener(viewer.document.getElementById('display_1'),'keyup', function() { tinput(1); }); addListener(viewer.document.getElementById('display_2'),'keyup', function() { tinput(2); }); addListener(viewer.document.getElementById('slider_1'),'mousedown', function(event) { slide(event,1); }); addListener(viewer.document.getElementById('slider_2'),'mousedown', function(event) { slide(event,2); }); viewer.document.getElementById('progress').innerHTML = "Hover over Timestamp numbers to see timestamp of " + graphtype._info + ". Hover over " + graphtype._markers + " markers to see values."; addListener(viewer.document.getElementById('graph'),'click', function() { fromVal = parseInt(viewer.document.getElementById('display_1').value); toVal = parseInt(viewer.document.getElementById('display_2').value); if (isNaN(fromVal) || isNaN(toVal) || fromVal > toVal || fromVal > slide._toVal || toVal < 0 || fromVal < 0 || toVal > slide._toVal) { alert("Invalid range"); } else{ graph(holder, arr, fromVal , toVal, title, graphtype); } }); addListener(viewer.document.getElementById('gall'),'click', function() { graph(holder, arr, 0,parray.length - 1, title, graphtype); }); if (graphtype == graphTypes['winloss']) { addListener(viewer.document.getElementById('wstreak'),'click', function() { graph(holder, arr, running._winstreak._start,running._winstreak._start + running._winstreak._num - 1, title, graphtype); }); addListener(viewer.document.getElementById('lstreak'),'click', function() { graph(holder, arr, running._losstreak._start,running._losstreak._start + running._losstreak._num - 1, title, graphtype); }); } } function handleSearchSuggest(lastval) { var next = document.getElementById('player').value; var k=0; if (next == '') { clearSuggest(); return; } if (next != lastval) { return; } var ss = document.getElementById('phistory'); ss.innerHTML = ''; var str = phist.split("|"); for (i=0; i < str.length; i++) { if (str[i].substring(next.length,0).match(next, "i")) { var suggest = document.createElement('div'); suggest.innerHTML = str[i]; if (k==0) { suggest.className = "history_link_over"; } else{ suggest.className = "history_link"; } ss.appendChild(suggest); suggest.addEventListener('mouseover', function() { suggestOver(this); }, false); suggest.addEventListener('mouseout', function() { suggestOut(this); }, false); suggest.addEventListener('click', function() { setSearch(this.innerHTML); }, false); ss.style.visibility = 'visible'; k++; } } suggtot = k; if (suggtot > 0) { current = 0; } else { current = -1; } } function suggestOver(div_value) { var divs = document.getElementById('phistory').getElementsByTagName('div'); for (i=0; i< suggtot; i++) { divs[i].className = "history_link"; } div_value.className = 'history_link_over'; } function suggestOut(div_value) { div_value.className = 'history_link'; } function setSearch(value) { document.getElementById('player').value = value; clearSuggest(); } function clearSuggest() { div = document.getElementById('phistory'); div.innerHTML = ''; div.style.visibility = 'hidden'; } function updownArrow(keyCode) { if (keyCode == 40 || keyCode == 38){ if (keyCode == 38){ // keyUp if (current == 0 || current == -1){ current = suggtot-1; }else{ current--; } } else { // keyDown if (current == suggtot-1){ current = 0; }else { current++; } } var divs = document.getElementById('phistory').getElementsByTagName('div'); for (i=0; i< suggtot; i++) { if (i == current){ divs[i].className = "history_link_over"; } else { divs[i].className = "history_link"; } } return true; } else { current = -1; return false; } } function key(input,e) { var keyCode; if (!e) { keyCode = window.event.keyCode; } else{ keyCode = e.keyCode; } last = input.value; if (keyCode == 13) { if (current != -1) { var divs = document.getElementById('phistory').getElementsByTagName('div'); setSearch(divs[current].innerHTML); } return; } if (updownArrow(keyCode)){ return; } if (keyCode == 27) { clearSuggest(); return; } handleSearchSuggest(last); } function deserialize(name, def) { var toReturn; try { var original = GM_getValue(name); if (original && original.indexOf('(') == 0) { toReturn = def || {}; // saved through old method, reset. } else { toReturn = JSON.parse(original, def || {}); } } catch (e) {} return toReturn || def || {}; } function serialize(name, val) { GM_setValue(name, JSON.stringify(val)); } var saveButtonHandler = function() { var name= prompt("Please Name this map rank (reusing a name will overwrite it)",loadedName); if (name) { var searchDetails={}; var allP = document.getElementById('middleColumn').getElementsByTagName("input"); var mSel = document.getElementById("maps"); for ( i in allP ) { if (allP[i].type=="checkbox") { searchDetails[allP[i].id] = allP[i].checked; } if (allP[i].type=="text") { searchDetails[allP[i].id] = allP[i].value; } } for (j=0; j< mSel.options.length; j++) { var strip = mSel.options[j].innerHTML.replace(/ \(Beta\)$/, '').replace(/\(\d+\) /,'' ); searchDetails[strip] = mSel.options[j].selected; } myOptions[name] = searchDetails; serialize("mapbook", myOptions); showSearchs(); } }; var loadButtonHandler = function (searchDetails,s,bRun) { loadedName = s; var allP =document.getElementById('middleColumn').getElementsByTagName("input"); var mSel = document.getElementById("maps"); for (j=0; j< mSel.options.length; j++) { var strip = mSel.options[j].innerHTML.replace(/ \(Beta\)$/, '').replace(/\(\d+\) /,'' ); if (searchDetails[strip]){ mSel.options[j].selected = searchDetails[strip]; } else { mSel.options[j].selected = false; searchDetails[strip] = false; myOptions[s] = searchDetails; serialize("SEARCHES", myOptions); } } setThumbnails(mSel.options); for ( i in allP ) { if (allP[i].type=="checkbox") { if (searchDetails[allP[i].id]) { allP[i].checked = searchDetails[allP[i].id] ; } else { allP[i].checked = false; searchDetails[allP[i].id] = false; myOptions[s] = searchDetails; serialize("mapbook", myOptions); } } if (allP[i].type=="text") { if (searchDetails[allP[i].id] != undefined) { allP[i].value = searchDetails[allP[i].id]; } else { allP[i].value = ""; searchDetails[allP[i].id] = ""; myOptions[s] = searchDetails; serialize("mapbook", myOptions); } } } if (bRun) { document.getElementById('maprank').click(); } }; var delButtonHandler = function (searchName) { if (confirm("Are you sure you want to remove the saved map rank "+ searchName)) { var newOptions = {}; for (var s in myOptions) { if (s!=searchName) { newOptions[s] = myOptions[s]; } } myOptions = newOptions; serialize("mapbook", myOptions); showSearchs(); } }; var makedelButtonHandler = function (searchName) { return function(e) { e.preventDefault(); delButtonHandler(searchName); }; }; var makeloadButtonHandler = function (search,s,run) { return function(e) { e.preventDefault(); loadButtonHandler (search,s,run); }; }; var showSearchs = function showSearchs() { var savedSearches = document.getElementById('mapsaved'); savedSearches.innerHTML = "Saved Map Ranks
"; var srchtbl = document.createElement('table'); savedSearches.appendChild(srchtbl); for (var s in myOptions) { var srch = document.createElement('tr'); srchtbl.appendChild(srch); var srch2 = document.createElement('td'); srch.appendChild(srch2); srch2.innerHTML = s; var srch2 = document.createElement('td'); srch.appendChild(srch2); var spm = document.createElement('a'); srch2.appendChild(spm); spm.innerHTML = "Run"; spm.addEventListener("click", makeloadButtonHandler(myOptions[s],s,true), false); var srch2 = document.createElement('td'); srch.appendChild(srch2); var spm = document.createElement('a'); srch2.appendChild(spm); spm.innerHTML = "Load"; spm.addEventListener("click", makeloadButtonHandler(myOptions[s],s,false), false); var srch2 = document.createElement('td'); srch.appendChild(srch2); var spm = document.createElement('a'); srch2.appendChild(spm); spm.innerHTML = "Delete"; spm.addEventListener("click", makedelButtonHandler(s), false); } }; function getRank(games,total) { if (games >= 250 && total >= 4500) return "Field Marshal"; if (games >= 200 && total >= 3500) return "General"; if (games >= 150 && total >= 3000) return "Brigadier"; if (games >= 100 && total >= 2500) return "Colonel"; if (games >= 80 && total >= 2000) return "Major"; if (games >= 60 && total >= 1800) return "Captain"; if (games >= 40 && total >= 1600) return "Lieutenant"; if (games >= 20 && total >= 1400) return "Sergeant 1st Class"; if (games >= 20 && total >= 1300) return "Sergeant"; if (games >= 10 && total >= 1200) return "Corporal 1st Class"; if (games >= 10 && total >= 1100) return "Corporal"; if (games >= 5 && total >= 1000) return "Private 1st Class"; if (games >= 5 && total >= 900) return "Private"; if (games >= 5 && total >= 800) return "Cadet"; if (games >= 5) return "Cook"; return "New Recruit"; } function nextRank(total) { if (total >= 4500) return ""; if (total >= 3500) return "" + (4500 - total) + ""; if (total >= 3000) return "" + (3500 - total) + ""; if (total >= 2500) return "" + (3000 - total) + ""; if (total >= 2000) return "" + (2500 - total) + ""; if (total >= 1800) return "" + (2000 - total) + ""; if (total >= 1600) return "" + (1800 - total) + ""; if (total >= 1400) return "" + (1600 - total) + ""; if (total >= 1300) return "" + (1400 - total) + ""; if (total >= 1200) return "" + (1300 - total) + ""; if (total >= 1100) return "" + (1200 - total) + ""; if (total >= 1000) return "" + (1100 - total) + ""; if (total >= 900) return "" + (1000 - total) + ""; if (total >= 800) return "" + (900 - total) + ""; return "" + (800 - total) + ""; } function getKiller(losses, defeats) { if (defeats + losses) { var ratio = (100 * defeats / (defeats + losses)).toFixed(0); var pc = "(" + ratio + "%)"; if (ratio >= 95) { return "Angel Of Death " + pc; } if (ratio >= 90) { return "Grim Reaper " + pc + "" + ((losses * 19) - defeats) + ""; } if (ratio >= 80) { return "Warmonger " + pc + "" + ((losses * 9) - defeats) + ""; } if (ratio >= 75) { return "Tyrant " + pc + "" + ((losses * 4) - defeats) + ""; } if (ratio >= 50) { return "Serial Killer " + pc + "" + ((losses * 3) - defeats) + ""; } if (ratio >= 25) { return "Murderer " + pc + "" + (losses - defeats) + ""; } if (ratio >= 10) { return "Petty Thug " + pc + "" + (Math.ceil(losses / 3) - defeats) + ""; } return "Victim " + pc + "" + (Math.ceil(losses / 9) - defeats) + ""; } return "N/A"; } function getRR(rank, defeats) { if (defeats + rank) { var ratio = (rank / (defeats)).toFixed(3); return ratio; } return 0.000; } function getRelative(rank, defeats) { if (defeats + rank) { var ratio = (rank / (defeats)).toFixed(3); var pc = "(" + ratio + ")"; if (ratio >= 1.4) { return "Gladiator " + pc; } if (ratio >= 1.1) { return "Brawler " + pc; } if (ratio >= .8) { return "Equalitarian " + pc; } if (ratio >= .5) { return "Point Hoarder " + pc; } return "N00b Farmer " + pc; } return "N/A (0)"; } function cleanup() { for (var cx = 0; cx < ghist.length; cx++) { ghist[cx].onreadystatechange = function() {}; ghist[cx].abort(); } ghist = []; while (__eventListeners.length > 0) { removeListener(__eventListeners[0]); } if (viewer != null) viewer.close(); } function sortByCol(id,cellfn, cell, dir) { var idc = []; for (var i=0; i< sortable.length; i++) { idc[sortable[i]] = viewer.document.getElementById(sortable[i]).className; } sortedTable(cellfn, cell, dir); viewer.document.getElementById(id).className = (idc[id] == "sorton" ? "sortoff" : "sorton"); for (var i=0; i< sortable.length; i++) { if (sortable[i] != id) viewer.document.getElementById(sortable[i]).className = idc[sortable[i]]; } } function ssort(a,b) { return(a._next-b._next); } function psort(a,b) { return(a._time-b._time); } function alpha(cells, sorter) { return cells[sorter].innerHTML; } function numerical(cells, sorter) { return parseInt(cells[sorter].innerHTML); } function percent(cells, sorter) { if (cells[sorter].innerHTML.match(/\((\d+)%\)/)) { return parseInt(RegExp.$1); } return 0; } function factor(cells, sorter) { if (cells[sorter].innerHTML.match(/\((\d).(\d+)\)/)) { return (parseInt(RegExp.$1) * 1000) + parseInt(RegExp.$2); } return 0; } function sortedTable(cellfn, cell, dir) { var res = viewer.document.getElementById('ranktable').getElementsByTagName('tr'); table = viewer.document.createElement("table"); table.border=0; table.id = "scroller"; table.width = "100%"; table.cellSpacing = "0"; table.cellPadding = "0"; table.className = "scrollTable"; for (var r=0; r< 4; r++) { var clone = viewer.document.getElementById('scroller').getElementsByTagName('thead')[r].cloneNode(true); table.appendChild(clone); } var unsorted = []; var clone = []; var ref = []; tbody = table.appendChild(viewer.document.createElement("tbody")); tbody.className = "scrollContent"; tbody.id = "ranktable"; for (var r=0; r< res.length; r++) { var ix = res[r].getElementsByTagName('td'); ref[r] = cellfn(ix, cell); unsorted.push(ref[r]); if (isNaN(ref[r])) unsorted.sort(); else unsorted.sort(function(a,b) { return(b-a); }); if (dir == "sortoff") unsorted.reverse(); clone[r] = res[r].cloneNode(true); tbody.insertBefore(clone[r], tbody.getElementsByTagName('tr')[unsorted.indexOf(ref[r])]); } viewer.document.getElementById('tableContainer').removeChild(viewer.document.getElementById('scroller')); viewer.document.getElementById('tableContainer').appendChild(table); setTable(); } function switchTabs(id) { viewer.document.getElementById('lines').style.visibility = (id==2)?"visible":"hidden"; viewer.document.getElementById('cheader').style.visibility = (id==2)?"visible":"hidden"; viewer.document.getElementById('cfooter').style.visibility = (id==2)?"visible":"hidden"; viewer.document.getElementById('buttons').style.visibility = (id==2)?"visible":"hidden"; viewer.document.getElementById('tableContainer').style.visibility = (id==1)?"visible":"hidden"; viewer.document.getElementById('summ').style.visibility = (id==3)?"visible":"hidden"; viewer.document.getElementById('meds').style.visibility = (id==4)?"visible":"hidden"; viewer.document.getElementById('tab1').style.backgroundColor = "#cdc"; viewer.document.getElementById('tab2').style.backgroundColor = "#cdc"; viewer.document.getElementById('tab3').style.backgroundColor = "#cdc"; viewer.document.getElementById('tab4').style.backgroundColor = "#cdc"; viewer.document.getElementById('tab' + id).style.backgroundColor = "#0f0"; } function createBox(txt, name, options) { cleanup(); viewer = window.open('','box','width=1040,height=720,scrollbars=yes,resizable=yes,status=no,toolbar=no,location=no,directories=no,menubar=no,copyhistory=no'); viewer.addEventListener('unload', function() { viewer=null; cleanup(); }, false); var style = viewer.document.getElementsByTagName('head')[0].appendChild(viewer.document.createElement("style")); style.type = 'text/css'; style.innerHTML = "#rankDiv {background-color:transparent;position:absolute;width:100%;height:100%;top:0px;left:0px;z-index:10000;} "; style.innerHTML += "#rankBox {position:relative;min-width:1040px;height:100%;margin-top:10px;margin-left:20px;border:2px solid #000;background-color:#F2F5F6;} "; style.innerHTML += "#rankDiv > #rankBox {position:fixed;overflow:auto;} "; style.innerHTML += "#rankBox h1 {margin:0;font:bold 0.9em verdana,arial;background-color:#cdc;color:#000;border-bottom:1px solid #000;padding:2px 0 2px 5px;} "; style.innerHTML += "#rankBox p {font:0.7em verdana,arial;padding-left:50px;width:900px;} .result {font-weight:bold;color:#00f;} .totals {color:#000;} "; style.innerHTML += "#rankBox a {text-decoration:none;} .central {text-align:center} #rankBox #tab1, #rankBox #tab2, #rankBox #tab3, #rankBox #tab4 {border:1px solid black}"; style.innerHTML += "#rankBox #tab1:hover, #rankBox #tab2:hover, #rankBox #tab3:hover, #rankBox #tab4:hover , #rankBox #closeRank:hover {color:#fff} .header {background-color:#cdc;font-weight:bold;} "; style.innerHTML += "#rankBox #closeRank {display:block;position:relative;margin:5px auto;padding:3px;border:2px solid #000;width:70px;font:0.7em verdana,arial;text-transform:uppercase;text-align:center;color:#000;background-color:#cdc;text-decoration:none;} "; style.innerHTML += "#rankBox img {position:relative;top:20px;left:20px;} .rankoptions {width:100px;} .bmedal {font-weight:bold;color:#8C7853} .smedal {font-weight:bold;color:silver} .gmedal {font-weight:bold;color:gold} .bmeddiv {background-color:#8C7853;z-index:-100} .smeddiv {background-color:silver;z-index:-100} .gmeddiv {background-color:gold;z-index:-100}"; style.innerHTML += "#wstreak {cursor:pointer;text-decoration:underline;color:green} #lstreak {cursor:pointer;text-decoration:underline;color:red}"; style.innerHTML += "#lines {visibility:hidden;overflow: auto;width:100%;height:500px;position:absolute;z-index:200;top:150px;align:center;padding:0px;border:1px solid black;text-align:center;font: 7pt Verdana, Arial, Helvetica, sans-serif;}"; style.innerHTML += "#summ {visibility:hidden;overflow: hidden;width:1000px;height:565px;position:absolute;z-index:200;top:120px;align:center;margin-left:10px;margin-right:10px;padding:0px;border:1px solid black;text-align:center;}"; style.innerHTML += "#meds {visibility:hidden;overflow: hidden;width:1000px;height:565px;position:absolute;z-index:200;top:120px;align:center;margin-left:10px;margin-right:10px;padding:0px;border:1px solid black;text-align:center;}"; style.innerHTML += "#cheader {display:none;width:100%;position:absolute;z-index:200;top:100px;margin:0px;padding:0px;font: 7pt Verdana, Arial, Helvetica, sans-serif;}"; style.innerHTML += "#cheader h3{text-align:center;border:1px solid black;} tbody.scrollContent td.chart,thead.totalsHeader td.chart {background-color:yellow;color:red;cursor:pointer;}"; style.innerHTML += "#cheader span{text-align:left;position:absolute;top:30px;font-size:9pt} .mreven {background-color:#ddd} .mrodd {background-color:#eee}"; style.innerHTML += "#cfooter {display:none;width:100%;position:absolute;z-index:200;top:460px;height:10px;margin:0px;padding:0px;font: 7pt Verdana, Arial, Helvetica, sans-serif;}"; style.innerHTML += "#cfooter h3{text-align:center;font-size:9pt;align:center} #buttons {z-index:201;position:absolute;top:490px;left:22%;width:56%;} #buttons table {text-align:center;font-weight:bold;color:blue;font-size:11pt;}"; style.innerHTML += ".track {line-height: 0px;font-size: 0px;text-align: left;padding: 4px;border: 1px solid;}"; style.innerHTML += ".slider {width: 16px;height: 8px;position: relative;z-index: 2;line-height: 0px;margin: 0;border: 2px solid;}"; style.innerHTML += ".slit {height: 2px;margin: 4px 4px 2px 4px;line-height: 0px;position: absolute;z-index: 1;border: 1px solid;}"; style.innerHTML += ".display_div {width: 48px;padding: 0 2px 0 0;height: 20px;text-align: left;border: 1px solid;}"; style.innerHTML += ".display {background-color: #fff;color: blue;width: 48px;text-align: left;font-size: 8pt;font-family: verdana, arial, helvetica, sans-serif;font-weight: bold;cursor: text;}"; style.innerHTML += ".stamp_div {color: #fff;width: 200px;padding: 0 2px 0 0;height: 20px;text-align: left;border: 0;}"; style.innerHTML += ".stamp {color: blue;width: 200px;text-align: left;font-size: 8pt;font-family: verdana, arial, helvetica, sans-serif;font-weight: bold;border: 0;}"; style.innerHTML += "#slider_1 {background-color: #696;border-color: #9c9 #363 #363 #9c9;} #track_1, #display_div_1 {background-color: #bdb;border-color: #ded #9a9 #9a9 #ded;}"; style.innerHTML += "#slit_1 {background-color: #232;border-color: #9a9 #ded #ded #9a9;} #slider_2 {background-color: #369;border-color: #69c #036 #036 #69c;}"; style.innerHTML += "#track_2, #display_div_2 {background-color: #bcd;border-color: #def #9ab #9ab #def;} #slit_2 {background-color: #036;border-color: #9ab #def #def #9ab;}"; style.innerHTML += "#tabs {text-align:center} #tabs table{align:center;margin-left:30px;} #tabs a {width:100px;font-weight:bold;font: verdana,arial;text-transform:none;color:gray;padding:0 5px} #tabs a:hover {background-color:#cdc}"; style.innerHTML += "#scroller {width: 1000px;} #scroller, #scroller.td, #scroller.a, #summ td, #meds td {color: #000;font: bold 7pt Verdana, Geneva, Arial, Helvetica, sans-serif}"; style.innerHTML += "div.tableContainer {border: 1px solid #963;height: 565px;overflow: hidden;width: 1000px;margin:10px}"; style.innerHTML += "thead.fixedHeader tr, thead.scrollHeader tr, thead.totalsHeader tr {display: block} thead.fixedHeader td, tbody.scrollContent td.banner {background: #cdc;border-bottom: 1px solid #EB8;padding: 4px 3px;text-align: center;width: 1000px}"; style.innerHTML += "thead.scrollHeader td {background: #fff;border-right: 1px solid #B74;border-bottom: 1px solid #EB8;padding: 4px 3px;text-align: center;width: 136px;} thead.scrollHeader td.sorton, thead.scrollHeader td.sortoff {background-color:cyan;cursor:pointer;} "; style.innerHTML += "thead.totalsHeader td {background: #fff;border-right: 1px solid #B74;border-bottom: 1px solid #EB8;padding: 4px 3px;text-align: center;width: 136px;}"; style.innerHTML += "thead.scrollHeader a, thead.scrollHeader a:link, thead.scrollHeader a:visited,thead.totalsHeader a, thead.totalsHeader a:link, thead.totalsHeader a:visited, tbody.scrollContent a, tbody.scrollContent a:link, tbody.scrollContent a:visited {display: block;width: 136px;}"; style.innerHTML += "tbody.scrollContent {display: block;height: 480px;overflow: auto;width: 100%}"; style.innerHTML += "tbody.scrollContent td {background: #FFF;border-right: 1px solid #b74;border-bottom: 1px solid #DDD;padding: 4px 3px;text-align:center;}"; style.innerHTML += "tbody.scrollContent td + td + td + td + td + td + td{width: 119px} thead.scrollHeader td + td + td + td + td + td + td, thead.totalsHeader td + td + td + td + td + td + td{border-right: 1px solid #ddd;}"; style.innerHTML += "tbody.scrollContent td ,tbody.scrollContent td.noflow {width: 136px;vertical-align: middle;} tbody.scrollContent td.mreven {background-color:#ddd} tbody.scrollContent td.mrodd {background-color:#eee} tbody.scrollContent td.summ {width:166px; background-color:cyan}"; style.innerHTML += "tbody.scrollContent td#maplist {width:1000px;font: bold 10pt Verdana, Geneva, Arial, Helvetica, sans-serif;color:#00f;background-color:#eee} tbody.scrollContent td#maplist span {color:#000;font-size:16px;} tbody.scrollContent td#maplist a, #meds a {display:inline;text-decoration:underline}"; style.innerHTML += "#meds td {color:#000;width:1000px;} #meds .bmedal {color:#8C7853} #meds .smedal {color:silver} #meds .gmedal {color:gold} #meds .omedal {color:blue}"; mObj = viewer.document.getElementsByTagName("body")[0].appendChild(viewer.document.createElement("div")); mObj.id = "rankDiv"; mObj.style.visibility = 'hidden'; mObj.style.height = viewer.document.documentElement.scrollHeight + "px"; alertObj = mObj.appendChild(viewer.document.createElement("div")); alertObj.id = "rankBox"; alertObj.style.left = (viewer.document.documentElement.scrollWidth - alertObj.offsetWidth)/2 + "px"; h1 = alertObj.appendChild(viewer.document.createElement("h1")); h1.appendChild(viewer.document.createTextNode("MAP RANK GL")); msg = alertObj.appendChild(viewer.document.createElement("p")); msg.id = "progress"; msg.innerHTML = txt; btn = alertObj.appendChild(viewer.document.createElement("a")); btn.id = "closeRank"; btn.appendChild(viewer.document.createTextNode("CLOSE")); btn.href = "javascript:void(0);"; btn.style.opacity = "0.5"; addListener(btn,'click', function() { if (btn.style.backgroundColor == "green") removeBox(); }); tabs = viewer.document.getElementById('rankBox').appendChild(viewer.document.createElement("div")); tabs.id = "tabs"; tabs.innerHTML = "
TableChartSummaryMedals
"; for (var i = 1; i < 5; i++) { addListener(viewer.document.getElementById('tab' + i),'click', function(e) { switchTabs(+(this.id.match(/\d/))); }); } tableWrap = viewer.document.getElementById('rankBox').appendChild(viewer.document.createElement("div")); tableWrap.id = "tableContainer"; tableWrap.className = "tableContainer"; table = viewer.document.getElementById('tableContainer').appendChild(viewer.document.createElement("table")); table.id = "scroller"; table.border=0; table.width = "100%"; table.cellSpacing = "0"; table.cellPadding = "0"; table.className = "scrollTable"; heading = table.appendChild(viewer.document.createElement("thead")); heading.className = "fixedHeader"; ftr = heading.appendChild(viewer.document.createElement("tr")); ftr.innerHTML = "Map Rank For " + name + ""; opts = table.appendChild(viewer.document.createElement("thead")); opts.className = "fixedHeader"; otr = opts.appendChild(viewer.document.createElement("tr")); otr.innerHTML = "Options: " + options + ""; cols = table.appendChild(viewer.document.createElement("thead")); cols.className = "scrollHeader"; ctr = cols.appendChild(viewer.document.createElement("tr")); ctr.innerHTML = "MapRankPointsWin/LossUnique DefeatsKill RatioRelative Rank"; tots = table.appendChild(viewer.document.createElement("thead")); tots.className = "totalsHeader"; ttr = tots.appendChild(viewer.document.createElement("tr")); ttr.id = "summary"; ttr.className = "result totals"; ttr.innerHTML = "Totals      "; tbody = table.appendChild(viewer.document.createElement("tbody")); tbody.className = "scrollContent"; tbody.id = "ranktable"; mObj.style.visibility = 'visible'; chartheader = viewer.document.getElementById('rankBox').appendChild(viewer.document.createElement("div")); chartheader.id = "cheader"; container = viewer.document.getElementById('rankBox').appendChild(viewer.document.createElement("div")); container.id = "lines"; container.innerHTML = "

No Chart Selected. Click on a yellow box in the table.

"; chartfooter = viewer.document.getElementById('rankBox').appendChild(viewer.document.createElement("div")); chartfooter.id = "cfooter"; chartbutt = viewer.document.getElementById('rankBox').appendChild(viewer.document.createElement("div")); chartbutt.id = "buttons"; container = viewer.document.getElementById('rankBox').appendChild(viewer.document.createElement("div")); container.id = "summ"; container = viewer.document.getElementById('rankBox').appendChild(viewer.document.createElement("div")); container.id = "meds"; stable = viewer.document.getElementById('summ').appendChild(viewer.document.createElement("table")); stable.border=0; stable.width = "100%"; stable.cellSpacing = "0"; stable.cellPadding = "0"; var thead = viewer.document.createElement('thead'); thead.className = "fixedHeader"; tr = viewer.document.createElement('tr'); td = viewer.document.createElement('td'); td.innerHTML = "Map Rank Summary For " + name + ""; tr.appendChild(td); thead.appendChild(tr); stable.appendChild(thead); var thead = viewer.document.createElement('thead'); thead.className = "fixedHeader"; tr = viewer.document.createElement('tr'); td = viewer.document.createElement('td'); td.innerHTML = "Options: " + options; tr.appendChild(td); thead.appendChild(tr); stable.appendChild(thead); tbody = viewer.document.createElement('tbody'); tbody.className = "scrollContent"; tbody.id = "stable"; stable.appendChild(tbody); switchTabs(1); } function removeBox() { viewer.close(); viewer = null; ghist = []; } function getElementsByClassName(oElm, strTagName, strClassName, exact) { var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName); var arrReturnElements = []; strClassName = strClassName.replace(/\-/g, "\\-"); var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s)"); var oElement; for (var i=0; i -1) { if (imgs[im].parentNode.align == "center") { if (nextSib(imgs[im].parentNode.parentNode).firstChild.innerHTML.match(/Amount: (\d+)$/)) { var tm = new Summary(imgs[im].alt); tm._medals = parseInt(RegExp.$1); totals._medals += tm._medals; totals._xmedals += tm._medals; totals._contribute.push(tm); } } } } } }; majax.send(null); } function getRandomMedals(user, page){ var jump = baseURL + 'api.php?mode=gamelist&mp=Random&gs=F&p1un=' + encodeURIComponent(user); if(page > 1) jump += "&page=" + page; ghist["rpaging" + page] = new XMLHttpRequest(); ghist["rpaging" + page].open('GET', jump, true); ghist["rpaging" + page].onreadystatechange = function() { if (ghist["rpaging" + page].readyState == 4) { var parser = new DOMParser(); var dom = parser.parseFromString(ghist["rpaging" + page].responseText,"application/xml"); var games = dom.getElementsByTagName('game'); var pages = dom.getElementsByTagName('page')[0].firstChild.nodeValue; var numGames = parseInt(dom.getElementsByTagName('games')[0].getAttribute('total')); var puid = cid; var numPages = 1; if(pages.match(/^(\d+) of (\d+)$/)) { var returned = parseInt(RegExp.$2); numPages = returned > 1?returned:1; } if(page == 1) { if(numPages > 1) { for(var pg=2;pg<=numPages;pg++) { getRandomMedals(user, pg ); } } } for(var g=0; g< games.length; g++) { var gvalid = 1; var game_number = games[g].getElementsByTagName('game_number')[0].firstChild.nodeValue; var players = games[g].getElementsByTagName('player'); var gaming = games[g].getElementsByTagName('game_type')[0].firstChild.nodeValue; var pids = []; for(s=0; s 1) jump += "&page=" + page; ghist["paging" + page] = new XMLHttpRequest(); ghist["paging" + page].open('GET', jump, true); ghist["paging" + page].onreadystatechange = function() { if (ghist["paging" + page].readyState == 4) { var parser = new DOMParser(); var dom = parser.parseFromString(ghist["paging" + page].responseText,"application/xml"); var games = dom.getElementsByTagName('game'); var pages = dom.getElementsByTagName('page')[0].firstChild.nodeValue; var numGames = parseInt(dom.getElementsByTagName('games')[0].getAttribute('total')); var puid = cid; var numPages = 0; if (totals._insignia && myStore._total && myStore._total == numGames) { for (var r in myStore._ranks) { totals._maps++; totals._wins += myStore._ranks[r]._wins; for (var p=0; p< myStore._unique[r].length; p++) { if (totals._unique.indexOf(myStore._unique[r][p]) == -1) { totals._unique.push(myStore._unique[r][p]); } } for (d in myStore._ranks[r]._defeats) { for (var p=0; p< myStore._ranks[r]._defeats[d].length; p++) { if (totals._defeats[d].indexOf(myStore._ranks[r]._defeats[d][p]) == -1) { totals._defeats[d].push(myStore._ranks[r]._defeats[d][p]); } } } if (myStore._ranks[r]._parray != undefined) { for (var p=0; p< myStore._ranks[r]._parray.length; p++) { totals._parray.push(myStore._ranks[r]._parray[p]); } } else { myStore._ranks[r]._parray = []; } if (myStore._ranks[r]._warray != undefined) { for (var p=0; p< myStore._ranks[r]._warray.length; p++) { totals._warray.push(myStore._ranks[r]._warray[p]); } } else { myStore._ranks[r]._warray = []; } if (myStore._ranks[r]._kills) totals._kills += myStore._ranks[r]._kills; if (myStore._ranks[r]._beaten){ totals._meanwin += myStore._ranks[r]._meanwin; totals._beaten += myStore._ranks[r]._beaten; } totals._games+=myStore._ranks[r]._counter; ranks[r] = myStore._ranks[r]; unique[r] = myStore._unique[r]; } totals._counter = myStore._total; getRandomMedals(user, 1); } else { if (pages.match(/^(\d+) of (\d+)$/)) { numPages = parseInt(RegExp.$2); if (!totals._expected) totals._expected = numPages; } if (page == 1) { if (numPages > 1) { for (var pg=2;pg<=numPages;pg++) { getHistPage(user,maplist, pg, mapopts); } } } for (var g=0; g< games.length; g++) { var gvalid = 1; var mapname = games[g].getElementsByTagName('map')[0].firstChild.nodeValue; var players = games[g].getElementsByTagName('player'); var gaming = games[g].getElementsByTagName('game_type')[0].firstChild.nodeValue; var touring = ""; if (games[g].getElementsByTagName('tournament')[0].firstChild) touring = games[g].getElementsByTagName('tournament')[0].firstChild.nodeValue; var joinable = games[g].getElementsByTagName('private')[0].firstChild.nodeValue; var speeding = games[g].getElementsByTagName('speed_game')[0].firstChild.nodeValue; var ordering = games[g].getElementsByTagName('play_order')[0].firstChild.nodeValue; var troops = games[g].getElementsByTagName('initial_troops')[0].firstChild.nodeValue; var cards = games[g].getElementsByTagName('bonus_cards')[0].firstChild.nodeValue; var fort = games[g].getElementsByTagName('fortifications')[0].firstChild.nodeValue; var fog = games[g].getElementsByTagName('war_fog')[0].firstChild.nodeValue; var trench = games[g].getElementsByTagName('trench_warfare')[0].firstChild.nodeValue; var pids = []; for (s=0; s 1) jump += "&page=" + page; rateReq[page] = new XMLHttpRequest(); rateReq[page].open('GET', jump, true); rateReq[page].onreadystatechange = function() { if (rateReq[page].readyState == 4) { var div=document.createElement('div'); div.innerHTML = rateReq[page].responseText; var results = getElementsByClassName(div,'span','search_results',true); if (results.length && results[0].innerHTML.match(/(\d+) results on (\d+) pages/)) { var numGames = parseInt(RegExp.$1); var thisPage = parseInt(RegExp.$2); var rates = getElementsByClassName(div,'a','rating',true); for (var r=0; r 1) { for (var pg=2;pg<=thisPage;pg++) { getRatings(user,url,pg); } } } if (page == thisPage && viewer.document.getElementById('rated')) { viewer.document.getElementById('rated').innerHTML = '' + totals._defeats['rating'].length + " Rated Players"; } } } }; rateReq[page].send(null); } function getXRatings(user,url,page) { var jump = url; if (page > 1) jump += "&page=" + page; xrateReq[page] = new XMLHttpRequest(); xrateReq[page].open('GET', jump, true); xrateReq[page].onreadystatechange = function() { if (xrateReq[page].readyState == 4) { var div=document.createElement('div'); div.innerHTML = xrateReq[page].responseText; var results = getElementsByClassName(div,'span','search_results',true); if (results.length && results[0].innerHTML.match(/(\d+) results on (\d+) pages/)) { var numGames = parseInt(RegExp.$1); var thisPage = parseInt(RegExp.$2); var rates = getElementsByClassName(div,'a','rating',true); for (var r=0; r 1) { for (var pg=2;pg<=thisPage;pg++) { getXRatings(user,url,pg); } } } } } }; xrateReq[page].send(null); } var leftBar = document.getElementById("leftColumn"); if (leftBar) { var ul = leftBar.getElementsByTagName("ul"); if (ul[0]) { GM_xmlhttpRequest({ method: 'GET', url: 'https://raw.github.com/sherkaner/addons-for-Conquerclub/master/currentVersions.json', headers: { 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey', 'Accept': 'text/html' }, onload: function(responseDetails) { updateInfo = JSON.parse(responseDetails.responseText), latest = updateInfo["Map Rank"].split('.'), ver = versiont.split('.'); latestVersiont = (((parseInt(latest[0]) * 10000) + (parseInt(latest[1]) * 100) + parseInt(latest[2])) > ((parseInt(ver[0]) * 10000) + (parseInt(ver[1]) * 100) + parseInt(ver[2]))); if (latestVersiont) { var toUpdate = document.querySelector('#tlatest span'); toUpdate.textContent = "Update Available"; toUpdate.className = "attention"; } } }); GM_addStyle("#phistory {z-index:2000;color:#000;width:151px;position:absolute;background-color:#FFF;text-align:left;border:1px solid #000;visibility:hidden;}\ .history_link {background-color: #FFFFFF;padding: 2px 6px 2px 6px;} .history_link_over {background-color: #3366CC; padding: 2px 6px 2px 6px;}\ #player {width:143px;border:1px solid #000;} #map{width:153px;border-width:1px} .fieldx {width:10em;border: 1px solid #565}"); var rt = GM_getValue('ratings'); if (rt == undefined) { GM_setValue('ratings',ratings); } else{ ratings = rt; } var hist = GM_getValue('phist'); if (hist == undefined) { GM_setValue('phist',phist); } else{ phist = hist; } var ic = GM_getValue('icons'); if (ic == undefined) { GM_setValue('icons',icons); } else { icons = ic; } var dk = GM_getValue('dark'); if (dk == undefined) { GM_setValue('dark',dark); } else { dark = dk; } myDefeats = deserialize('defeats', new Defeats()); if (myDefeats && (icons || dark)) { if (/player.php\?mode=find/.test(window.location.href) || /player.php\?mode=mygames/.test(window.location.href) || /player.php\?submit=Search/.test(window.location.href) || /player.php\?mode=join/.test(window.location.href) || /player.php\?mode=next/.test(window.location.href)) { var uls = getElementsByClassName(document,'ul','players',true); for (var u=0; uTeam (\d):/) && !lis[l].innerHTML.match(/-empty-/) && !lis[l].innerHTML.match(/-reserved-/)) { var anc = lis[l].getElementsByTagName('a'); if (anc.length && anc[0].href.match(/u=(\d+)$/)) { var names = RegExp.$1; for (def in myDefeats) { var imgtitle = ""; if (myDefeats[def].indexOf(names) != -1) { if (def == "rating" && icons) { imgtitle = "Already Rated for " + def + " medal (from Map Rank)"; } else if (def == "xRating" && dark) { imgtitle = "Received Rating (from Map Rank)"; } else if (def.charAt(0) == 'x' && dark) { var defx = def.replace(/x/, ''); imgtitle = defx + " Loss (from Map Rank)"; } else if (def.charAt(0) != 'x' && icons) { imgtitle = "Already Defeated for " + def + " medal (from Map Rank)"; } if (imgtitle != "") { var img = lis[l].appendChild(document.createElement('img')); img.src = "http://i1159.photobucket.com/albums/p625/TheBluU/cc/" + def + ".png"; img.style.verticalAlign = "middle"; img.title = imgtitle; } } } } } } } } var findPage = /www.conquerclub.com\/player.php\?mode=find/.test(window.location.href) && !(/\&private=Y/.test(window.location.href)) && !(/\&submit=Join/.test(window.location.href)); var startPage = /www.conquerclub.com\/player.php\?mode=start/.test(window.location.href); if ((findPage || startPage) && document.getElementsByTagName('fieldset').length) { nextSib(document.getElementsByName('sg[]')[1]).innerHTML += "(" + myDefeats['speed'].length + ")"; nextSib(document.getElementsByName('po[]')[1]).innerHTML += "(" + myDefeats['freestyle'].length + ")"; nextSib(document.getElementsByName('wf[]')[1]).innerHTML += "(" + myDefeats['fog'].length + ")"; nextSib(document.getElementsByName('it[]')[1]).innerHTML += "(" + myDefeats['manual'].length + ")"; nextSib(document.getElementsByName('bc[]')[2]).innerHTML += "(" + myDefeats['nuclear'].length + ")"; nextSib(document.getElementsByName('tw[]')[1]).innerHTML += "(" + myDefeats['trench'].length + ")"; var gtDiv = document.getElementsByName('gt[]'); for (gt=0; gt< gtDiv.length;gt++) { var name = nextSib(gtDiv[gt]).innerHTML; if (myDefeats[name]) nextSib(gtDiv[gt]).innerHTML += "(" + myDefeats[name].length + ")"; } } } if (/www.conquerclub.com\/forum\/memberlist.php\?mode=viewprofile/.test(window.location.href)) { var boxes = getElementsByClassName(document,'div','panel bg1 online',true); if (boxes.length == 0) boxes = getElementsByClassName(document,'div','panel bg1',true); var h2 = document.getElementsByTagName('h2')[0]; var profname = h2.innerHTML.match(/Viewing profile - (.+?)$/); var prof = RegExp.$1; var an = document.createElement ('input'); an.id = "profrank"; an.type = "button"; an.value = "Map Rank " + prof; boxes[0].appendChild(an); an.addEventListener("click" , function() { createBox("Collecting Games", prof, ''); var insignia = 0; var logout = getElementsByClassName(document,'div','vnav',true); var para = logout[0].getElementsByTagName('a'); if (para[0].innerHTML.match(/logout (.+?)<\/b>/)) { var mine = RegExp.$1; if (prof.match(mine, "i")) { insignia = 1; myStore = deserialize('store', new Store()); if (!myStore) { myStore = new Store(); myDefeats = new Defeats(); } } } totals = new Totals(insignia); if (ratings) getRatings(prof,baseURL + 'player.php?mode=ratings2&username=' + encodeURIComponent(prof),1); if (ratings) getXRatings(prof,baseURL + 'player.php?mode=ratings1&username=' + encodeURIComponent(prof),1); ranks = {}; unique = {}; surl = "|||||||"; getPlayerMedals(prof); getPlayerId(prof, maps); } , true); var logout = getElementsByClassName(document,'div','vnav',true); var para = logout[0].getElementsByTagName('a'); if (para[0].innerHTML.match(/logout (.+?)<\/b>/)) { var mine = RegExp.$1; if (!prof.match(mine, "i")) { var van = document.createElement ('input'); van.type = "button"; van.id = "profvs"; van.value = "Map Rank vs."; boxes[0].appendChild(van); van.addEventListener("click" , function() { var link = baseURL + "player.php?submit=Search&game_status=F&player1=" + encodeURIComponent(prof); var mopts = new MapOpts('','','','','','','','','','','', prof, '', '', '', '', '', '', '', '', '', ''); createBox("Collecting Games", mine, "vs. " + prof + " "); totals = new Totals(0); ranks = {}; unique = {}; pcount = 0; surl = ""; getPlayerPage (mine, maps, mopts, 'v1'); } , true); } } } if (/www.conquerclub.com\/player.php\?mode=find/.test(window.location.href) && !(/\&private=Y/.test(window.location.href)) && !(/\&submit=Join/.test(window.location.href))) { if (document.getElementsByTagName('fieldset').length){ var v1 = document.getElementById('player1'); var x1 = document.createElement('span'); v1.parentNode.appendChild(x1); x1.innerHTML = ' Map Rank vs. '; y1 = document.createElement('input'); y1.type = "text"; y1.id = "versus1"; y1.className = "fieldx"; v1.className = "fieldx"; v1.parentNode.appendChild(y1); var ex1 = document.createElement('span'); v1.parentNode.appendChild(ex1); ex1.innerHTML = ' Exclude '; ey1 = document.createElement('input'); ey1.type = "text"; ey1.id = "exclude1"; ey1.className = "fieldx"; v1.parentNode.appendChild(ey1); var v2 = document.getElementById('player2'); var x2 = document.createElement('span'); v2.parentNode.appendChild(x2); x2.innerHTML = ' Map Rank vs. '; y2 = document.createElement('input'); y2.type = "text"; y2.id = "versus2"; y2.className = "fieldx"; v2.className = "fieldx"; v2.parentNode.appendChild(y2); var ex2 = document.createElement('span'); v2.parentNode.appendChild(ex2); ex2.innerHTML = ' Exclude '; ey2 = document.createElement('input'); ey2.type = "text"; ey2.id = "exclude2"; ey2.className = "fieldx"; v2.parentNode.appendChild(ey2); var v3 = document.getElementById('player3'); var x3 = document.createElement('span'); v3.parentNode.appendChild(x3); x3.innerHTML = ' Map Rank vs. '; y3 = document.createElement('input'); y3.type = "text"; y3.id = "versus3"; y3.className = "fieldx"; v3.className = "fieldx"; v3.parentNode.appendChild(y3); var ex3 = document.createElement('span'); v3.parentNode.appendChild(ex3); ex3.innerHTML = ' Exclude '; ey3 = document.createElement('input'); ey3.type = "text"; ey3.id = "exclude3"; ey3.className = "fieldx"; v3.parentNode.appendChild(ey3); var v4 = document.getElementById('player4'); var x4 = document.createElement('span'); v4.parentNode.appendChild(x4); x4.innerHTML = ' Map Rank vs. '; y4 = document.createElement('input'); y4.type = "text"; y4.id = "versus4"; y4.className = "fieldx"; v4.parentNode.appendChild(y4); var ex4 = document.createElement('span'); v4.parentNode.appendChild(ex4); ex4.innerHTML = ' Exclude '; ey4 = document.createElement('input'); ey4.type = "text"; ey4.id = "exclude4"; ey4.className = "fieldx"; v4.className = "fieldx"; v4.parentNode.appendChild(ey4); var buttonDiv = document.getElementsByTagName('fieldset')[0].appendChild(document.createElement('div')); buttonDiv.className = "field-row"; buttonDiv.id = "maprankbox"; buttonDiv.innerHTML = "Map Rank Loading..."; } } window.addEventListener("unload" , cleanup, false); GM_xmlhttpRequest({ method: 'GET', url: baseURL + 'api.php?mode=maplist&nocache=' + Math.random(), headers: { 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey', 'Accept': 'text/html' }, onload: function(responseDetails) { var parser = new DOMParser(); var dom = parser.parseFromString(responseDetails.responseText,"application/xml"); var mapxml = dom.getElementsByTagName('title'); var gmMenu = document.createElement('div'); gmMenu.id="missed"; var html = "

Map Rank GL " + versiont + "

Player
Map"; gmMenu.innerHTML = html; ul[0].parentNode.appendChild(gmMenu); document.getElementById('player').addEventListener('keypress', function(event) { event.stopPropagation(); }, false); document.getElementById('player').addEventListener('keyup', function(event) { event.stopPropagation(); key(this,event); }, false); document.getElementById('player').addEventListener('blur', function(event) { event.stopPropagation(); setTimeout(function() { clearSuggest(); },200); }, false); ul = document.createElement ('ul'); ul.style.borderWidth = "0px 1px 0px 1px"; ul.style.width = "151px"; ul.innerHTML += "
  • Map Rank
  • "; gmMenu.appendChild(ul); ul = document.createElement ('ul'); ul.style.borderWidth = "0px 1px 0px 1px"; ul.style.width = "151px"; var inner = "
  • Options
  • "; inner += "
    "; inner += "Ratings
    "; inner += "Display Icons
    "; inner += "Display Dark Icons"; inner += "
  • "; ul.innerHTML = inner; gmMenu.appendChild(ul); document.getElementById('ratings').addEventListener("click" , function () { ratings = (this.checked == true)? 1:0; GM_setValue('ratings',ratings); }, true); document.getElementById('icons').addEventListener("click" , function () { icons = (this.checked == true)? 1:0; GM_setValue('icons',icons); }, true); document.getElementById('dark').addEventListener("click" , function () { dark = (this.checked == true)? 1:0; GM_setValue('dark',dark); }, true); ul = document.createElement ('ul'); ul.style.borderWidth = "0px 1px 0px 1px"; ul.style.width = "151px"; ul.innerHTML += "
  • Reset
  • "; gmMenu.appendChild(ul); document.getElementById('reset').addEventListener("click" , function () { myDefeats = null; myStore = null; serialize("defeats", myDefeats); serialize("store", myStore); alert("Map Rank Cache Reset"); },true); ul = document.createElement('ul'); ul.style.borderWidth = "0px 1px 0px 1px"; ul.style.width = "151px"; if (latestVersiont) { ul.innerHTML = "
  • New Update Available
  • "; } else{ ul.innerHTML = "
  • Latest Version Installed
  • "; } gmMenu.appendChild(ul); var ftext = updateInfo['Map rank update text']; if (ftext) { document.getElementById('tlatest').addEventListener("click" , function () { alert('New version features\n' + ftext); },true); } document.getElementById('rank').addEventListener('click', function() { var text = document.getElementById('map').options[document.getElementById('map').selectedIndex].text; var player = document.getElementById('player').value; if (player == "") { alert("Must give a player name"); return false; } else{ if (phist == "") { phist = player; GM_setValue('phist',phist); } else{ var hists = phist.split('|'); if (hists.indexOf(player) == -1) { hists.push(player); if (hists.length > 10) hists.shift(); phist = hists.join('|'); GM_setValue('phist',phist); } } var link = baseURL + "player.php?submit=Search&game_status=F&player1=" + encodeURIComponent(player); surl = ""; if (text == "All") { createBox("Collecting Games", player, ''); surl = "|||||||"; var insignia = 0; var logout = getElementsByClassName(document,'div','vnav',true); var para = logout[0].getElementsByTagName('a'); if (para[0].innerHTML.match(/logout (.+?)<\/b>/)) { var mine = RegExp.$1; if (player.match(mine, "i")) { insignia = 1; myStore = deserialize('store', new Store()); if (!myStore) { myStore = new Store(); myDefeats = new Defeats(); } else { for (var ms in myStore._ranks) { if (!isNaN(ms)) { myStore = new Store(); break; } } } } } totals = new Totals(insignia); if (ratings) getRatings(player,baseURL + 'player.php?mode=ratings2&username=' + encodeURIComponent(player),1); if (ratings) getXRatings(player,baseURL + 'player.php?mode=ratings1&username=' + encodeURIComponent(player),1); ranks = {}; unique = {}; getPlayerMedals(player); getPlayerId(player, maps); } else { var ind = document.getElementById('map').selectedIndex - 1; surl = "|||||||" + maps[ind]; ranks = {}; unique = {}; createBox("Collecting Games", player, ''); totals = new Totals(0); getPlayerMedals(player); getPlayerId(player, new Array(maps[ind])); } } } , true); if (/www.conquerclub.com\/player.php\?mode=find/.test(window.location.href) && !(/\&private=Y/.test(window.location.href)) && !(/\&submit=Join/.test(window.location.href))) { if (document.getElementsByTagName('fieldset').length){ if (icons) { var mapdivs = document.getElementById("maps").getElementsByTagName('option'); var tempStore = deserialize('store', new Store()); if (tempStore) { for (md=0;md
    "; document.getElementById('mapbook').addEventListener("click", saveButtonHandler, false); myOptions = deserialize("mapbook"); if (!myOptions) myOptions = {}; showSearchs(); if (myOptions['DEFAULT']) { loadButtonHandler(myOptions['DEFAULT'],"",false); } document.getElementById('maprank').addEventListener('click', function () { var opts = ""; var player = document.getElementById('player1').value; var player2 = document.getElementById('player2').value; var player3 = document.getElementById('player3').value; var player4 = document.getElementById('player4').value; var versus = document.getElementById('versus1').value; var versus2 = document.getElementById('versus2').value; var versus3 = document.getElementById('versus3').value; var versus4 = document.getElementById('versus4').value; var exclude = document.getElementById('exclude1').value; var exclude2 = document.getElementById('exclude1').value; var exclude3 = document.getElementById('exclude1').value; var exclude4 = document.getElementById('exclude1').value; if (player2 != "") opts += "Player 2: " + player2 + " "; if (player3 != "") opts += "Player 3: " + player3 + " "; if (player4 != "") opts += "Player 4: " + player4 + " "; if (versus != "") opts += "vs. " + versus + " "; if (versus2 != "") opts += "vs. " + versus2 + " "; if (versus3 != "") opts += "vs. " + versus3 + " "; if (versus4 != "") opts += "vs. " + versus4 + " "; if (exclude != "") opts += "- " + exclude + " "; if (exclude2 != "") opts += "- " + exclude2 + " "; if (exclude3 != "") opts += "- " + exclude3 + " "; if (exclude4 != "") opts += "- " + exclude4 + " "; var numbers = cboxValues('np[]'); if (numbers.length) opts += "Number of Players: " + numbers + " "; var mip = document.getElementById('maps').options; var mp = []; for (op = 0; op< mip.length; op++) { if (mip[op].selected) { var txt = mip[op].text.replace(/ \(Beta\)$/, '').replace(/ \(Closed\)$/, '').replace(/ \(\d+\)/,'' ); mp.push(txt); } } var gt = cboxValues('ty[]'); if (gt.length) opts += "Game Type: " + gt + " "; var porder = cboxValues('po[]'); if (porder.length) opts += "Play Order: " + porder + " "; var tps = cboxValues('it[]'); if (tps.length) opts += "Initial Troops: " + tps + " "; var bonus = cboxValues('bc[]'); if (bonus.length) opts += "Bonus: " + bonus + " "; var fort = cboxValues('ft[]'); if (fort.length) opts += "Fortifications: " + fort + " "; var fog = cboxValues('wf[]'); if (fog.length) opts += "Fog of War:" + fog + " "; var joinable = cboxValues('pt[]'); if (joinable.length) opts += "Joinability: " + joinable + " "; var speed = cboxValues('sg[]'); if (speed.length) opts += "Round Length: " + speed + " "; var trench = cboxValues('tw[]'); if (trench.length) opts += "Trench Warfare:" + trench + " "; var nn = document.getElementById('tournament'); var tour = (nn.value); if (tour != "") { opts += "Tournament: " + tour + " "; } if (player == "") { alert("Must give a player name"); } else { var link = baseURL + "player.php?submit=Search&game_status=F&player1=" + encodeURIComponent(player) + "&player2=" + encodeURIComponent(player2); var postlink = "&num_players=" + numbers + "&game_type=" + gt + "&bonus_cards=" + bonus + "&play_order=" + porder; surl = ""; postlink += "&fortifications=" + fort + "&war_fog=" + fog + "&trench_warfare=" + trench + "&private=" + joinable + "&speed_game=" + speed + "&tournament=" + tour; mopts = new MapOpts(player2,numbers,gt,bonus,porder,fort,fog,trench,joinable,speed,tour, versus, versus2, exclude, exclude2, player3, player4, versus3, versus4, exclude3, exclude4,tps); if (!fort.length && !tps.length && tour == "" && player2 == "" && player3 == "" && player4 == "" && versus == "" && versus2 == "" && versus3 == "" && versus4 == "" && exclude == "" && exclude2 == "" && exclude3 == "" && exclude4 == "") { if (!joinable.length) { surl = numbers + "|" + gt + "|" + porder + "|" + bonus + "|" + fog + "|" + trench + "|" + speed + "|" + mp; } else { if (joinable == "T" && !numbers.length && !gt.length && !porder.length && !bonus.length && !fog.length && !trench.length && !speed.length && !mp.length) { surl = "|||||||T"; } } } if (!mp.length){ createBox("Collecting Games", player, opts); totals = new Totals(0); ranks = {}; unique = {}; pcount = 0; if (player2) getPlayerPage (player, maps, mopts, 'p2'); if (player3) getPlayerPage (player, maps, mopts, 'p3'); if (player4) getPlayerPage (player, maps, mopts, 'p4'); if (versus) getPlayerPage (player, maps, mopts, 'v1'); if (versus2) getPlayerPage (player, maps, mopts, 'v2'); if (versus3) getPlayerPage (player, maps, mopts, 'v3'); if (versus4) getPlayerPage (player, maps, mopts, 'v4'); if (exclude) getPlayerPage (player, maps, mopts, 'x1'); if (exclude2) getPlayerPage (player, maps, mopts, 'x2'); if (exclude3) getPlayerPage (player, maps, mopts, 'x3'); if (exclude4) getPlayerPage (player, maps, mopts, 'x4'); if (mopts._pcount == 0){ getPlayerMedals(player); getPlayerId(player, maps,mopts); } } else { createBox("Collecting Games", player, opts); totals = new Totals(0); ranks = {}; unique = {}; pcount = 0; if (player2) getPlayerPage (player, mp, mopts, 'p2'); if (player3) getPlayerPage (player, mp, mopts, 'p3'); if (player4) getPlayerPage (player, mp, mopts, 'p4'); if (versus) getPlayerPage (player, mp, mopts, 'v1'); if (versus2) getPlayerPage (player, mp, mopts, 'v2'); if (versus3) getPlayerPage (player, mp, mopts, 'v3'); if (versus4) getPlayerPage (player, mp, mopts, 'v4'); if (exclude) getPlayerPage (player, mp, mopts, 'x1'); if (exclude2) getPlayerPage (player, mp, mopts, 'x2'); if (exclude3) getPlayerPage (player, mp, mopts, 'x3'); if (exclude4) getPlayerPage (player, mp, mopts, 'x4'); if (mopts._pcount == 0){ getPlayerMedals(player); getPlayerId(player, mp,mopts); } } } return false; }, true); } } if (/www.conquerclub.com\/player.php\?mode=start/.test(window.location.href)) { if (document.getElementsByTagName('fieldset').length){ if (icons) { var mapdivs = document.getElementById("maps").getElementsByTagName('option'); var tempStore = deserialize('store', new Store()); if (tempStore) { for (md=0;md(" + tempStore._unique[name].length + ")
    "; } } } } } } }); } } function d2h(d) { return d.toString(16); } function h2d(h) { return parseInt(h,16); } function line_graph(max,min) { this.ct = 0; this.data = []; this.colour = []; this.x_name = []; this.max = -64000; // MAX INT this.min = 64000; this.maxbounds = max; this.minbounds = min; this.maxind = 0; this.minind = 0; this.c_array = [[255, 192, 95], [80, 127, 175], [159, 87, 112], [111, 120, 96], [224, 119, 96], [80, 159, 144], [207, 88, 95], [64, 135, 96], [239, 160, 95], [144, 151, 80], [255, 136, 80]]; this.getColor = function() { if (this.ct >= (this.c_array.length-1)) { this.ct = 0; } else { this.ct++; } return "#" + d2h(this.c_array[this.ct][0]) + d2h(this.c_array[this.ct][1]) + d2h(this.c_array[this.ct][2]); }; this.add = function(x_name, value, colour) { var val = parseInt(value,10); this.x_name.push(x_name); this.data.push(val); this.colour.push(colour); if (val > this.max) { this.max = val; this.maxind = this.data.length - 1; } if (val < this.min) { this.min = val; this.minind = this.data.length - 1; } }; this.render = function(canvas) { var jg = new jsGraphics(canvas); var h = 300; var dw = 30; var fnt = 12; var sx = 50; var step = (this.data.length > 14) ? Math.round(this.data.length / 15) : 1; var span = 22; var ht1; var rtmax = sx + 10 + (dw+Math.round((dw/2)))*(span); var i; jg.setColor("blue"); if (this.maxbounds == null) this.maxbounds = this.max; if (this.minbounds == null) this.minbounds = this.min; if (this.maxbounds) { for (i = 0 ; i <= 5 ; i++) { jg.drawLine(0,Math.round((h/5*i)),rtmax+20,Math.round((h/5*i))); var ff = Math.round(this.maxbounds - ((this.maxbounds - this.minbounds)/ 5 * i)); jg.drawString(ff+"",4,Math.round((h/5*i)-2)); } } else { jg.drawLine(0,h,rtmax+20,h); jg.drawString("0",4,h-2); } // Draw the bar graph var color = this.getColor(); var oldx, oldy; jg.setStroke(1); for (i = 0; i < this.data.length; i+=step) { var triplet = []; triplet.push(i); if (this.maxind > i && this.maxind < i+step) triplet.push(this.maxind); if (this.minind > i && this.minind < i+step && this.minind != this.maxind) triplet.push(this.minind); triplet.sort(); for (var k=0; k 1) { jg.setColor(this.colour[this.data.length - 1]); jg.drawLine(oldx, h-oldy, sx, h-ht1); } jg.setColor(this.colour[this.data.length - 1]); jg.fillEllipse(sx-2, h-ht1-2, 8, 8, this.data[this.data.length - 1]); jg.setColor("green"); jg.drawString(this.x_name[this.data.length - 1], sx, h); oldx = sx; oldy = ht1; sx = sx+dw+Math.round(dw/2); } jg.setFont("Verdana", fnt, 'font-weight:bold;'); jg.paint(); }; } function pntCnvDom() { var x = viewer.document.createRange(); x.setStartBefore(this.cnv); x = x.createContextualFragment(this.htm); this.cnv.appendChild(x); this.htm = ''; } function mkDiv(x, y, w, h) { this.htm += '
    <\/div>'; } function mkDivD(x, y, w, h, d) { this.htm += '
    <\/div>'; } function mkLin(x1, y1, x2, y2) { var _x2, _y2, dx, dy, pr, pru, p, ox, oy, x, y, yIncr; if (x1 > x2) { _x2 = x2; _y2 = y2; x2 = x1; y2 = y1; x1 = _x2; y1 = _y2; } dx = x2-x1, dy = Math.abs(y2-y1), x = x1, y = y1, yIncr = (y1 > y2)? -1 : 1; if (dx >= dy) { pr = dy<<1; pru = pr - (dx<<1); p = pr-dx; ox = x; while ((dx--) > 0) { ++x; if (p > 0) { this.mkDiv(ox, y, x-ox, 1); y += yIncr; p += pru; ox = x; } else p += pr; } this.mkDiv(ox, y, x2-ox+1, 1); } else { pr = dx<<1; pru = pr - (dy<<1); p = pr-dy; oy = y; if (y2 <= y1) { while ((dy--) > 0) { if (p > 0) { this.mkDiv(x++, y, 1, oy-y+1); y += yIncr; p += pru; oy = y; } else { y += yIncr; p += pr; } } this.mkDiv(x2, y2, 1, oy-y2+1); } else { while ((dy--) > 0) { y += yIncr; if (p > 0) { this.mkDiv(x++, oy, 1, y-oy); p += pru; oy = y; } else p += pr; } this.mkDiv(x2, oy, 1, y2-oy+1); } } } function mkOv(left, top, width, height) { var a = width>>1, b = height>>1, wod = width&1, hod = (height&1)+1, cx = left+a, cy = top+b, x = 0, y = b, ox = 0, oy = b, aa = (a*a)<<1, bb = (b*b)<<1, st = (aa>>1)*(1-(b<<1)) + bb, tt = (bb>>1) - aa*((b<<1)-1), w, h; while (y > 0) { if (st < 0) { st += bb*((x<<1)+3); tt += (bb<<1)*(++x); } else if (tt < 0) { st += bb*((x<<1)+3) - (aa<<1)*(y-1); tt += (bb<<1)*(++x) - aa*(((y--)<<1)-3); w = x-ox; h = oy-y; if (w&2 && h&2) { this.mkOvQds(cx, cy, -x+2, ox+wod, -oy, oy-1+hod, 1, 1); this.mkOvQds(cx, cy, -x+1, x-1+wod, -y-1, y+hod, 1, 1); } else this.mkOvQds(cx, cy, -x+1, ox+wod, -oy, oy-h+hod, w, h); ox = x; oy = y; } else { tt -= aa*((y<<1)-3); st -= (aa<<1)*(--y); } } this.mkDiv(cx-a, cy-oy, a-ox+1, (oy<<1)+hod); this.mkDiv(cx+ox+wod, cy-oy, a-ox+1, (oy<<1)+hod); } function mkRect(x, y, w, h) { var s = this.stroke; this.mkDiv(x, y, w, s); this.mkDiv(x+w, y, s, h); this.mkDiv(x, y+h, w+s, s); this.mkDiv(x, y+s, s, h-s); } function jsGraphics(id, wnd) { this.setColor = function(arg) { this.color = arg.toLowerCase(); }; this.setStroke = function(x) { this.stroke = x; this.drawLine = mkLin; this.mkOv = mkOv; this.drawRect = mkRect; }; this.setFont = function(fam, sz, sty) { this.ftFam = fam; this.ftSz = sz; this.ftSty = sty || 'font-weight:normal;'; }; this.fillEllipse = function(left, top, w, h, dt) { var a = (w -= 1)>>1, b = (h -= 1)>>1, wod = (w&1)+1, hod = (h&1)+1, cx = left+a, cy = top+b, x = 0, y = b, ox = 0, oy = b, aa2 = (a*a)<<1, aa4 = aa2<<1, bb = (b*b)<<1, st = (aa2>>1)*(1-(b<<1)) + bb, tt = (bb>>1) - aa2*((b<<1)-1), pxl, dw, dh; if (w+1) while (y > 0) { if (st < 0) { st += bb*((x<<1)+3); tt += (bb<<1)*(++x); } else if (tt < 0) { st += bb*((x<<1)+3) - aa4*(y-1); pxl = cx-x; dw = (x<<1)+wod; tt += (bb<<1)*(++x) - aa2*(((y--)<<1)-3); dh = oy-y; this.mkDivD(pxl, cy-oy, dw, dh, dt); this.mkDivD(pxl, cy+y+hod, dw, dh, dt); ox = x; oy = y; } else { tt -= aa2*((y<<1)-3); st -= aa4*(--y); } } this.mkDivD(cx-a, cy-oy, w+1, (oy<<1)+hod, dt); }; this.drawString = function(txt, x, y) { this.htm += '
    '+ txt + '<\/div>'; }; this.clear = function() { this.htm = ""; if (this.cnv) this.cnv.innerHTML = this.defhtm; }; this.mkOvQds = function(cx, cy, xl, xr, yt, yb, w, h) { this.mkDiv(xr+cx, yt+cy, w, h); this.mkDiv(xr+cx, yb+cy, w, h); this.mkDiv(xl+cx, yb+cy, w, h); this.mkDiv(xl+cx, yt+cy, w, h); }; this.setStroke(1); this.setFont('verdana,geneva,helvetica,sans-serif', String.fromCharCode(0x31, 0x32, 0x70, 0x78), 'font-weight:bold;'); this.color = '#000000'; this.htm = ''; this.cnv = viewer.document.getElementById(id); this.defhtm = (this.cnv && this.cnv.innerHTML)? this.cnv.innerHTML : ''; this.paint = pntCnvDom ; this.mkDiv = mkDiv; this.mkDivD = mkDivD; }