// ==UserScript== // @name The Researcher // @version 1.0.7 // @namespace http://userscripts.org // @description Perform automated research // @include http://www.conquerclub.com/* // @resource jQuery http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js // @resource jQueryUI http://strd6.com/stuff/jqui/jquery-ui-personalized-1.6rc6.min.js // @resource jQueryUICSS http://strd6.com/stuff/jqui/theme/ui.all.css // @resource ui-bg_diagonals-thick_18_b81900_40x40.png http://strd6.com/stuff/jqui/theme/images/ui-bg_diagonals-thick_18_b81900_40x40.png // @resource ui-bg_glass_100_f6f6f6_1x400.png http://strd6.com/stuff/jqui/theme/images/ui-bg_glass_100_f6f6f6_1x400.png // @resource ui-bg_diagonals-thick_20_666666_40x40.png http://strd6.com/stuff/jqui/theme/images/ui-bg_diagonals-thick_20_666666_40x40.png // @resource ui-bg_glass_65_ffffff_1x400.png http://strd6.com/stuff/jqui/theme/images/ui-bg_glass_65_ffffff_1x400.png // @resource ui-bg_gloss-wave_35_f6a828_500x100.png http://strd6.com/stuff/jqui/theme/images/ui-bg_gloss-wave_35_f6a828_500x100.png // @resource ui-icons_222222_256x240.png http://strd6.com/stuff/jqui/theme/images/ui-icons_222222_256x240.png // @resource ui-bg_flat_10_000000_40x100.png http://strd6.com/stuff/jqui/theme/images/ui-bg_flat_10_000000_40x100.png // @resource ui-icons_ef8c08_256x240.png http://strd6.com/stuff/jqui/theme/images/ui-icons_ef8c08_256x240.png // @resource ui-icons_ffd27a_256x240.png http://strd6.com/stuff/jqui/theme/images/ui-icons_ffd27a_256x240.png // @resource ui-bg_glass_100_fdf5ce_1x400.png http://strd6.com/stuff/jqui/theme/images/ui-bg_glass_100_fdf5ce_1x400.png // @resource ui-icons_228ef1_256x240.png http://strd6.com/stuff/jqui/theme/images/ui-icons_228ef1_256x240.png // @resource ui-icons_ffffff_256x240.png http://strd6.com/stuff/jqui/theme/images/ui-icons_ffffff_256x240.png // @resource ui-bg_highlight-soft_75_ffe45c_1x100.png http://strd6.com/stuff/jqui/theme/images/ui-bg_highlight-soft_75_ffe45c_1x100.png // @resource ui-bg_highlight-soft_100_eeeeee_1x100.png http://strd6.com/stuff/jqui/theme/images/ui-bg_highlight-soft_100_eeeeee_1x100.png // ==/UserScript== var version = "1.0.7"; var _baseKey = "theResearcher"; var _pluginTitle = "The Researcher"; var scriptUrl = "http://userscripts.org/scripts/source/92871"; var forumUrl = "http://userscripts.org/scripts/source/92871.meta.js"; var checkVersion = true; var _initializing = true; // Inject jQuery into page... gross hack... for now... (function() { var head = document.getElementsByTagName('head')[0]; var script = document.createElement('script'); script.type = 'text/javascript'; var jQuery = GM_getResourceText('jQuery'); var jQueryUI = GM_getResourceText('jQueryUI'); script.innerHTML = jQuery + jQueryUI; head.appendChild(script); $ = unsafeWindow.$; })(); // Load UI Styles (function() { var resources = { 'ui-bg_diagonals-thick_18_b81900_40x40.png': GM_getResourceURL('ui-bg_diagonals-thick_18_b81900_40x40.png'), 'ui-bg_glass_100_f6f6f6_1x400.png': GM_getResourceURL('ui-bg_glass_100_f6f6f6_1x400.png'), 'ui-bg_diagonals-thick_20_666666_40x40.png': GM_getResourceURL('ui-bg_diagonals-thick_20_666666_40x40.png'), 'ui-bg_glass_65_ffffff_1x400.png': GM_getResourceURL('ui-bg_glass_65_ffffff_1x400.png'), 'ui-bg_gloss-wave_35_f6a828_500x100.png': GM_getResourceURL('ui-bg_gloss-wave_35_f6a828_500x100.png'), 'ui-icons_222222_256x240.png': GM_getResourceURL('ui-icons_222222_256x240.png'), 'ui-bg_flat_10_000000_40x100.png': GM_getResourceURL('ui-bg_flat_10_000000_40x100.png'), 'ui-icons_ef8c08_256x240.png': GM_getResourceURL('ui-icons_ef8c08_256x240.png'), 'ui-icons_ffd27a_256x240.png': GM_getResourceURL('ui-icons_ffd27a_256x240.png'), 'ui-bg_glass_100_fdf5ce_1x400.png': GM_getResourceURL('ui-bg_glass_100_fdf5ce_1x400.png'), 'ui-icons_228ef1_256x240.png': GM_getResourceURL('ui-icons_228ef1_256x240.png'), 'ui-icons_ffffff_256x240.png': GM_getResourceURL('ui-icons_ffffff_256x240.png'), 'ui-bg_highlight-soft_75_ffe45c_1x100.png': GM_getResourceURL('ui-bg_highlight-soft_75_ffe45c_1x100.png'), 'ui-bg_highlight-soft_100_eeeeee_1x100.png': GM_getResourceURL('ui-bg_highlight-soft_100_eeeeee_1x100.png') }; var head = document.getElementsByTagName('head')[0]; var style = document.createElement('style'); style.type = 'text/css'; var css = GM_getResourceText ('jQueryUICSS'); $.each(resources, function(resourceName, resourceUrl) { console.log(resourceName + ': ' + resourceUrl); css = css.replace( 'images/' + resourceName, resourceUrl); }); style.innerHTML = css; head.appendChild(style); })(); /****************************************************************************** Chrome support ******************************************************************************/ if ((typeof GM_getValue == 'undefined') || (GM_getValue('a', 'b') == undefined)) { var namespace = "BOB."; GM_addStyle = function(css) { var style = document.createElement('style'); style.textContent = css; document.getElementsByTagName('head')[0].appendChild(style); } GM_deleteValue = function(name) { localStorage.removeItem(namespace + name); } GM_getValue = function(name, defaultValue) { var value = localStorage.getItem(namespace + name); if (!value) return defaultValue; var type = value[0]; value = value.slice(1); switch (type) { case 'b': return value == 'true'; case 'n': return Number(value); default: return value; } } GM_listValues = function() { var i,result = []; for (i = 0; i < localStorage.length; i++) { var name = localStorage.key(i); if (name.indexOf(namespace) == 0) { result.push(name.slice(namespace.length)); } } return result; } GM_xmlhttpRequest=function(obj) { var request=new XMLHttpRequest(); request.onreadystatechange=function() { if(obj.onreadystatechange) { obj.onreadystatechange(request); }; if(request.readyState==4 && obj.onload) { obj.onload(request); } } request.onerror=function() { if(obj.onerror) { obj.onerror(request); } } try { request.open(obj.method,obj.url,true); } catch(e) { if(obj.onerror) { obj.onerror( {readyState:4,responseHeaders:'',responseText:'',responseXML:'',status:403,statusText:'Forbidden'} ); }; return request; } if(obj.headers) { for(var name in obj.headers) { request.setRequestHeader(name,obj.headers[name]); } } request.send(obj.data); return request; } GM_setValue = function(name, value) { value = (typeof value)[0] + value; localStorage.setItem(namespace + name, value); } unsafeWindow = window; } /****************************************************************************** Utility methods ******************************************************************************/ function getGameNumber(url) { return (/game=([0-9]*)/(url))[1]; } function getCurrentGameNumber() { return getGameNumber(window.location.href); } function getTimestamp() { da = new Date(); year = da.getFullYear(); month = da.getMonth() + 1; day = da.getDate(); hour = da.getHours(); minute = da.getMinutes(); second = da.getSeconds(); if ( year < 1970 ) year = year + 100; syear = new String(year); smonth = new String(month); sday = new String(day); shour = new String(hour); sminute = new String(minute); ssecond = new String(second); if ( smonth.length == 1 ) smonth = "0" + smonth; if ( sday.length == 1 ) sday = "0" + sday; if ( shour.length == 1 ) shour = "0" + shour; if ( sminute.length == 1 ) sminute = "0" + sminute; if ( ssecond.length == 1 ) ssecond = "0" + ssecond; return syear + "-" + smonth + "-" + sday + " " + shour + ":" + sminute + ":" + ssecond; } /****************************************************************************** Styles ******************************************************************************/ GM_addStyle(".dialog {font-size:12px;white-space:nowrap;padding:10px;text-align:left;}"); GM_addStyle(".dialog tr {height:22px;}"); GM_addStyle(".dialog td {text-align:center;border:1px solid black;}"); GM_addStyle(".dialog .doubles {background-color:#DDFFDD;border-left-width:3px;}"); GM_addStyle(".dialog .triples {background-color:#DDDDFF;}"); GM_addStyle(".dialog .quads {background-color:#FFFFDD;}"); GM_addStyle(".dialog .other {background-color:#FFDDDD;border-right-width:3px;}"); GM_addStyle(".dialog .goodMap {color:#00BB00;}"); GM_addStyle(".dialog .badMap {color:#FF0000;}"); /**************************************************************************************** Custom stuff ****************************************************************************************/ var acronyms = { "Any Clan" : "ALL", "A Fistful of Sixes" : "AFOS", "Agents of Chaos" : "AOC", "Angels of Death" : "AOD", "Black Sheep Squadron" : "BSS", "De Veroveraars der Lage Landen" : "DVLL", "Death By Comity" : "DBC", "Divine Domination" : "DD", "DYNASTY" : "DYN", "EMPIRE" : "EMP", "Eternal Empire" : "EE", "F.B.R. (Faith Becomes Reality)" : "FBR", "Generation One: The Clan" : "G1", "Gorgonzola Pirates" : "GORG", "Grim Reapers" : "GRIM", "Hells Messengers" : "HELL", "Imperial Britain" : "IB", "KARMA clan" : "KAR", "Knights of the Round Table" : "KORT", "Left4Dead" : "L4D", "Legends of the Zone" : "LOTZ", "Legends of War" : "LOW", "++The Legion++" : "LEGION", "Memento Mori" : "MM", "Mythology" : "MYTH", "Nemesis" : "NEM", "Outlaws & Highwaymen" : "O&H", "Project Firestorm" : "FIRE", "Soldiers of War" : "SOW", "The Brethren of the Fat Mermaid" : "BotFM", "The Bullet-Proof Bandits" : "BPB", "The Dark Knights of Chaos" : "DKOC", "The Devil's Brigade" : "DEVB", "The Fraternal Order of Exceptional Drinkers" : "FOED", "The Global Dominators" : "GLOB", "The Horsemen of the Apocalypse (THOTA)" : "THOTA", "The Immortal Assassins" : "IA", "The Imperial Dragoons" : "ID", "The Last Warriors" : "TLW", "The Odd Fellows Union" : "TOFU", "The Spanking Monkeys" : "TSM" }; var clans = new Array(); var maps = new Array(); var badMaps = new Array(); var weakMaps = new Array(); var unplayedMaps = new Array(); var records = new Array(); var best = new Array(); var _mapsLoaded = false; var _membersLoaded = false; var _recordsLoaded = false; var _recordsLoading = 0; var _totalRecords = 0; var _recordsCompleted = 0; var _clanId; function Clan(name) { this._name = name; this._members = new Array(); } function Record() { this._d_wins = 0; this._d_losses = 0; this._d_percentage = 0; this._t_wins = 0; this._t_losses = 0; this._t_percentage = 0; this._q_wins = 0; this._q_losses = 0; this._q_percentage = 0; this._o_wins = 0; this._o_losses = 0; this._o_percentage = 0; } function ProblemMap(name) { this._mapName = name; this._worstPercentage = 101; this._badTypes = new Array(); this._percentages = new Array(); } function listClans() { GM_xmlhttpRequest({ method: 'GET', url: 'http://www.conquerclub.com/forum/ucp.php?i=167', onload: gotList }); } function gotList(response) { try { $(response.responseText).find("a.forumtitle").each(function(){ var val = (/g=([0-9]*)/($(this).attr("href")))[1]; var name = $(this).html(); clans[val] = new Clan(name); var acr = acronyms[name]; if ( acr ) { name = acr; } else { name = name.substring(0,17); } var option = $("<option></option>"); option.html(name); option.val(val); if ( acr ) { $("#" + _baseKey + "ClanSelect").prepend(option); } else { $("#" + _baseKey + "ClanSelect").append(option); } }); $("#" + _baseKey + "ClanSelect").get(0).selectedIndex = 0; }catch(e){} } var calcIntervalId = 0; var recordIntervalId = 0; var flagIntervalId = 0; function startCalculations() { maps = new Array(); badMaps = new Array(); weakMaps = new Array(); unplayedMaps = new Array(); records = new Array(); best = new Array(); _mapsLoaded = false; _membersLoaded = false; _recordsLoaded = false; _recordsLoading = 0; _totalRecords = 0; _recordsCompleted = 0; var viewer = $( "#" + _baseKey + "Dialog" ); _clanId = $("#" + _baseKey + "ClanSelect").val(); viewer.html("Calculating results for " + clans[_clanId]._name + ", please wait..."); viewer.append("<div id=\"percentComplete\">0%</div>"); viewer.dialog( "open" ); getClanMembers(); getMaps(); recordIntervalId = setInterval(getRecords, 500); calcIntervalId = setInterval(Calculate, 500); } function Calculate() { if ( _recordsLoaded ) { clearInterval(calcIntervalId); var viewer = $( "#" + _baseKey + "Dialog" ); var tabsdiv = $("<div></div>"); tabsdiv.attr("id",_baseKey + "tabs"); tabsdiv.html("<ul><li><a href=\"#" + _baseKey + "raw-results\">Raw Data</a></li><li><a href=\"#" + _baseKey + "calcs\">Summarized Results</a></li></ul>"); var resultsDiv = $("<div></div>"); resultsDiv.attr("id",_baseKey + "raw-results"); var calcsDiv = $("<div></div>"); calcsDiv.attr("id",_baseKey + "calcs"); var table = $("<table></table"); table.attr("id",_baseKey + "Results"); var tableRow = $("<tr></tr>"); var nameCell = $("<td></td>"); var dataCell = $("<td></td>"); tableRow.append(nameCell); tableRow.append(dataCell); table.append(tableRow); var nameTable = $("<table></table>"); nameTable.attr("id",_baseKey + "NameTable"); nameTable.append("<tr><th> </th></tr>"); nameTable.append("<tr><th> </th></tr>"); nameTable.append("<tr><th>Best</th></tr>"); nameCell.append(nameTable); var dataDiv = $("<div></div>"); dataDiv.css("overflow","auto"); dataDiv.css("width",800); var dataTable = $("<table></table>"); dataTable.attr("id",_baseKey + "DataTable"); dataDiv.append(dataTable); dataCell.append(dataDiv); var headerRow = $("<tr></tr>"); var gameTypeRow = $("<tr></tr>"); for (mapidx in maps) { var header = $("<th></th>"); header.attr("colspan",4); header.css("text-align","center"); header.html(maps[mapidx]); headerRow.append(header); gameTypeRow.append("<td class=\"doubles\">D</td>"); gameTypeRow.append("<td class=\"triples\">T</td>"); gameTypeRow.append("<td class=\"quads\">Q</td>"); gameTypeRow.append("<td class=\"other\">O</td>"); } for (memberidx in clans[_clanId]._members) { var member = clans[_clanId]._members[memberidx]; var nameRow = $("<tr></tr>"); var dataRow = $("<tr></tr>"); var name = $("<th></th>"); name.html(member); nameRow.append(name); nameTable.append(nameRow); for (mapidx in maps) { var map = maps[mapidx]; var dataD = $("<td></td>"); var dataT = $("<td></td>"); var dataQ = $("<td></td>"); var dataO = $("<td></td>"); dataD.addClass("doubles"); dataT.addClass("triples"); dataQ.addClass("quads"); dataO.addClass("other"); if ( best[map] === undefined ) { best[map] = new Array(); best[map]["d"] = 0; best[map]["t"] = 0; best[map]["q"] = 0; best[map]["o"] = 0; } if (records[member] !== undefined && records[member][map] !== undefined ) { var dPlayed = records[member][map]._d_wins + records[member][map]._d_losses; var tPlayed = records[member][map]._t_wins + records[member][map]._t_losses; var qPlayed = records[member][map]._q_wins + records[member][map]._q_losses; var oPlayed = records[member][map]._o_wins + records[member][map]._o_losses; records[member][map]._d_percentage = dPlayed > 5 ? records[member][map]._d_wins / dPlayed * 100 : 0; records[member][map]._t_percentage = tPlayed > 5 ? records[member][map]._t_wins / tPlayed * 100 : 0; records[member][map]._q_percentage = qPlayed > 5 ? records[member][map]._q_wins / qPlayed * 100 : 0; records[member][map]._o_percentage = oPlayed > 5 ? records[member][map]._o_wins / oPlayed * 100 : 0; if ( records[member][map]._d_percentage > best[map]["d"] ) best[map]["d"] = records[member][map]._d_percentage; if ( records[member][map]._t_percentage > best[map]["t"] ) best[map]["t"] = records[member][map]._t_percentage; if ( records[member][map]._q_percentage > best[map]["q"] ) best[map]["q"] = records[member][map]._q_percentage; if ( records[member][map]._o_percentage > best[map]["o"] ) best[map]["o"] = records[member][map]._o_percentage; dataD.html(records[member][map]._d_wins + "-" + records[member][map]._d_losses); dataT.html(records[member][map]._t_wins + "-" + records[member][map]._t_losses); dataQ.html(records[member][map]._q_wins + "-" + records[member][map]._q_losses); dataO.html(records[member][map]._o_wins + "-" + records[member][map]._o_losses); } dataRow.append(dataD); dataRow.append(dataT); dataRow.append(dataQ); dataRow.append(dataO); } dataTable.append(dataRow); } var bestRow = $("<tr></tr>"); var hasAlerted = false; for (mapidx in maps) { var map = maps[mapidx]; var dataD = $("<td></td>"); var dataT = $("<td></td>"); var dataQ = $("<td></td>"); var dataO = $("<td></td>"); dataD.addClass("doubles"); dataT.addClass("triples"); dataQ.addClass("quads"); dataO.addClass("other"); dataD.append(parseFloat(best[map]["d"]).toFixed(2) + "%"); dataT.append(parseFloat(best[map]["t"]).toFixed(2) + "%"); dataQ.append(parseFloat(best[map]["q"]).toFixed(2) + "%"); dataO.append(parseFloat(best[map]["o"]).toFixed(2) + "%"); if ( parseInt(best[map]["d"]) > 60 ) dataD.addClass("goodMap"); if ( parseInt(best[map]["d"]) < 40 && parseInt(best[map]["d"]) > 0 ) dataD.addClass("badMap"); if ( parseInt(best[map]["t"]) > 60 ) dataT.addClass("goodMap"); if ( parseInt(best[map]["t"]) < 40 && parseInt(best[map]["t"]) > 0 ) dataT.addClass("badMap"); if ( parseInt(best[map]["q"]) > 60 ) dataQ.addClass("goodMap"); if ( parseInt(best[map]["q"]) < 40 && parseInt(best[map]["q"]) > 0 ) dataQ.addClass("badMap"); if ( parseInt(best[map]["o"]) > 60 ) dataO.addClass("goodMap"); if ( parseInt(best[map]["o"]) < 40 && parseInt(best[map]["o"]) > 0 ) dataO.addClass("badMap"); if ( parseInt(best[map]["d"]) < 40 || parseInt(best[map]["t"]) < 40 || parseInt(best[map]["q"]) < 40 ) { var problemMap = new ProblemMap(map); if ( parseInt(best[map]["d"]) < 40 ) { problemMap._badTypes[problemMap._badTypes.length] = "D"; problemMap._percentages[problemMap._percentages.length] = parseFloat(best[map]["d"]).toFixed(2); if (parseInt(best[map]["d"]) > 0 && parseFloat(best[map]["d"]).toFixed(2) < problemMap._worstPercentage ) problemMap._worstPercentage = parseFloat(best[map]["d"]).toFixed(2); } if ( parseInt(best[map]["t"]) < 40 ) { problemMap._badTypes[problemMap._badTypes.length] = "T"; problemMap._percentages[problemMap._percentages.length] = parseFloat(best[map]["t"]).toFixed(2); if (parseInt(best[map]["t"]) > 0 && parseFloat(best[map]["t"]).toFixed(2) < problemMap._worstPercentage ) problemMap._worstPercentage = parseFloat(best[map]["t"]).toFixed(2); } if ( parseInt(best[map]["q"]) < 40 ) { problemMap._badTypes[problemMap._badTypes.length] = "Q"; problemMap._percentages[problemMap._percentages.length] = parseFloat(best[map]["q"]).toFixed(2); if (parseInt(best[map]["q"]) > 0 && parseFloat(best[map]["q"]).toFixed(2) < problemMap._worstPercentage ) problemMap._worstPercentage = parseFloat(best[map]["q"]).toFixed(2); } if (problemMap._worstPercentage < 101) { badMaps[badMaps.length] = problemMap; } else if ( problemMap._badTypes.length == 3 && parseInt(best[map]["o"]) == 0 ) { unplayedMaps[unplayedMaps.length] = problemMap } else { weakMaps[weakMaps.length] = problemMap; } } bestRow.append(dataD); bestRow.append(dataT); bestRow.append(dataQ); bestRow.append(dataO); } var poorDiv = $("<div></div>"); poorDiv.css("display","inline-block"); poorDiv.css("width","300px"); poorDiv.css("height","420px"); poorDiv.css("overflow","scroll"); poorDiv.append("Poor Performance Maps:<br>"); for (mapidx in badMaps) { var problemMap = badMaps[mapidx]; for (typeidx in problemMap._badTypes) { var type = problemMap._badTypes[typeidx]; var percent = problemMap._percentages[typeidx] < 101 ? problemMap._percentages[typeidx] : 0; if ( percent > 0 ) poorDiv.append(problemMap._mapName + " (" + type + "): " + percent + "%<br>"); } } calcsDiv.append(poorDiv); var unplayedDiv = $("<div></div>"); unplayedDiv.css("display","inline-block"); unplayedDiv.css("width","300px"); unplayedDiv.css("height","420px"); unplayedDiv.css("overflow","scroll"); unplayedDiv.append("Unplayed Maps:<br>"); for (mapidx in unplayedMaps) { var problemMap = unplayedMaps[mapidx]; unplayedDiv.append(problemMap._mapName + "<br>"); } calcsDiv.append(unplayedDiv); var weakDiv = $("<div></div>"); weakDiv.css("display","inline-block"); weakDiv.css("width","300px"); weakDiv.css("height","420px"); weakDiv.css("overflow","scroll"); weakDiv.append("Weak Map Types:<br>"); for (mapidx in weakMaps) { var problemMap = weakMaps[mapidx]; for (typeidx in problemMap._badTypes) { var type = problemMap._badTypes[typeidx]; var percent = problemMap._percentages[typeidx] < 101 ? problemMap._percentages[typeidx] : 0; weakDiv.append(problemMap._mapName + " (" + type + ")<br>"); } } calcsDiv.append(weakDiv); dataTable.prepend(bestRow); dataTable.prepend(gameTypeRow); dataTable.prepend(headerRow); dataTable.append(bestRow.clone()); dataTable.append(gameTypeRow.clone()); dataTable.append(headerRow.clone()); resultsDiv.append(table); tabsdiv.append(resultsDiv); tabsdiv.append(calcsDiv); viewer.html(""); viewer.append(tabsdiv); tabsdiv.tabs(); } } function getRecords() { if ( _mapsLoaded && _membersLoaded ) { clearInterval(recordIntervalId); _totalRecords = clans[_clanId]._members.length; for (memberidx in clans[_clanId]._members) { getRecord(clans[_clanId]._members[memberidx],1); } flagIntervalId = setInterval(updateRecordsFlag, 5000); } } function updateRecordsFlag() { if ( _recordsLoading == 0 ) { clearInterval(flagIntervalId); _recordsLoaded = true; } } function getRecord(member,page) { var url = "http://www.conquerclub.com/api.php?mode=gamelist&po=S&sg=N&it=E&gs=F>=D,T,Q&names=Y&p1un=" + member; if ( page == 1 ) { _recordsLoading++; } else { url += "&page=" + page; } setTimeout(function() { GM_xmlhttpRequest({ method: 'GET', url: url, onload: function(response){ var resp = $(response.responseText); var pageInfo = resp.find("page").text(); pageParts = pageInfo.split(" of "); var localMember = decodeURI((/p1un=([^&]*)/(response.finalUrl))[1]); if ( parseInt(pageParts[0]) > parseInt(pageParts[1]) ) { alert(response.finalUrl); } $(response.responseText).find("map").each(function(){ var gameType = $(this).siblings("game_type").text(); var playerCount = $(this).siblings("players").find("player").length; var map = $(this).text(); var record; if ( records[localMember] === undefined || records[localMember][map] === undefined ) { record = new Record(); } else { record = records[localMember][map]; } $(this).siblings("players").find("player").each(function(){ if ( $(this).text() == localMember ) { if ( $(this).attr("state") == "Won" ) { switch(gameType) { case "D": if ( playerCount == 4 ) record._d_wins++; else record._o_wins++; break; case "T": record._t_wins++; break; case "Q": record._q_wins++; break; default: record._o_wins++; break; } } else if ( $(this).attr("state") == "Lost" ) { switch(gameType) { case "D": if ( playerCount == 4 ) record._d_losses++; else record._o_losses++; break; case "T": record._t_losses++; break; case "Q": record._q_losses++; break; default: record._o_losses++; break; } } } }); if ( records[localMember] === undefined ) { records[localMember] = new Array(); } records[localMember][map] = record; }); if ( pageParts[0] == pageParts[1] ) { _recordsLoading--; _recordsCompleted++; var percent = _recordsCompleted / _totalRecords * 100; $("#percentComplete").html(percent.toFixed(0) + "%"); } else { var newPage = parseInt(pageParts[0])+1; getRecord(localMember,newPage); } } }); }, 0); } function getMaps() { var listUrl = "http://www.conquerclub.com/api.php?mode=maplist"; setTimeout(function() { GM_xmlhttpRequest({ method: 'GET', url: listUrl, onload: function(response){ $(response.responseText).find("title").each(function(){ maps[maps.length] = $(this).text(); }); _mapsLoaded = true; } }); }, 0); } function getClanMembers() { var listUrl = "http://www.conquerclub.com/api.php?mode=group&g=" + _clanId; setTimeout(function() { GM_xmlhttpRequest({ method: 'GET', url: listUrl, onload: function(response){ $(response.responseText).find("member").each(function(){ clans[_clanId]._members[clans[_clanId]._members.length] = $(this).text(); }); _membersLoaded = true; } }); }, 0); } function customMenuItems() { var menu = $("#" + _baseKey + "Menu"); var optionMenu = $("#" + _baseKey + "MenuItemOptions"); var select = $("<select></select>"); select.attr("id",_baseKey + "ClanSelect"); select.insertBefore(optionMenu); listClans(); var ul = $("<ul></ul>"); ul.css("borderWidth","0px 1px 0px 1px"); ul.css("width", "151px"); var html = "<li><a href='javascript:void(0)' id='" + _baseKey + "Calculate'>Calculate</a></li>"; ul.html(html); ul.click(startCalculations); ul.insertBefore(optionMenu); } /**************************************************************************************** Initialization Stuff ****************************************************************************************/ function initialize() { showMenu(customMenuItems); checkForUpdate(scriptUrl); initializeDialog(); } function initializeDialog() { $.fx.speeds._default = 1000; var dialog = $("<div></div>"); dialog.attr("id",_baseKey + "Dialog"); dialog.attr("title","Clan Results"); dialog.addClass("dialog"); $("#" + _baseKey + "Menu").append(dialog); $( "#" + _baseKey + "Dialog" ).dialog({ autoOpen: false, height: 550, width: 1000 }); } /****************************************************************************** Version stuff ******************************************************************************/ function checkForUpdate(scriptUrlBase) { var lastversion = GM_getValue('lastupdate', 0); if (checkVersion && lastversion < new Date().getTime() - 60*60*1000) { GM_setValue('lastupdate', new Date().getTime() + ""); GM_xmlhttpRequest({ method: 'GET', url: forumUrl, onload: updateServerNumber }); } else { updateOptionsMenu(); } } function updateServerNumber(response) { try { var serverVersion = /version\s+(\d+.\d+.\d+)/.exec(response.responseText)[1]; GM_setValue('updateavailable', serverVersion); updateOptionsMenu(); }catch(e){} } function isNewVersion() { var serverVersion = GM_getValue('updateavailable', false); if (serverVersion) { var newVersion = serverVersion.split('.').map(function(string) { return parseInt(string,10); }); var thisVersion = version.split('.').map(function(string) { return parseInt(string,10); }); return (newVersion[0]>thisVersion[0] || (newVersion[0]==thisVersion[0] && (newVersion[1]>thisVersion[1] || (newVersion[1]==thisVersion[1] && newVersion[2]>thisVersion[2])))); } return false; } /****************************************************************************** Menu stuff ******************************************************************************/ function updateOptionsMenu() { var cgMenu = $("#" + _baseKey + "Menu"); var ul = $("<ul></ul>"); ul.css("borderWidth","0px 1px 0px 1px"); ul.css("width", "151px"); var source = scriptUrl + ".user.js"; if(isNewVersion()) { ul.html("<li><a id=\"cgVersionInfo\" href=" + source + "><span class=\"attention\">New Update Available</span></a></li>"); } else { ul.html("<li><a id=\"cgVersionInfo\" href=" + source + "><span>Latest Version Installed</span></a></li>"); } cgMenu.append(ul); } function getLeftMenu() { return $("#leftColumn ul:first").parent(); } function showMenu(customMenuMethod) { var notepadMenu = $("<div></div>"); notepadMenu.attr("id", _baseKey + "Menu"); notepadMenu.html("<h3><b>" + _pluginTitle + " <span style='font-size:7pt;' ><a href='" + forumUrl + "'>" + version + "</a></span></b></h3>"); getLeftMenu().append(notepadMenu); var ul = $("<ul></ul>"); ul.attr("id",_baseKey + "MenuItemOptions"); ul.css("borderWidth","1px 1px 0px 1px"); ul.css("width", "151px"); var html = "<li><a href='javascript:void(0)' id='" + _baseKey + "OptionsLink'>Options</a></li>"; ul.html(html); var optionsDiv = $("<div></div>"); optionsDiv.attr("id",_baseKey + "Options"); optionsDiv.hide(); ul.append(optionsDiv); notepadMenu.append(ul); $("#" + _baseKey + "OptionsLink").click(function(){ $("#" + _baseKey + "notepadOptions").toggle(); }); customMenuMethod(); } /**************************************************************************************** Inline executions ****************************************************************************************/ initialize();
Mozilla add on,User script,Grease Monkey Script, greasemonkey userscripts, updater userscripts mafia wars userscripts mafia wars autoplayer userscripts mafia wars wall userscripts scripts userscripts travian greasemonkey greasemonkey download greasemonkey facebook greasemonkey tutorial greasemonkey youtube greasemonkey travian greasemonkey chrome greasemonkey mafia wars greasemonkey mafia wars autoplayer
Sunday, January 23, 2011
Perform automated research
Subscribe to:
Post Comments (Atom)
0 comments:
Post a Comment