- // ==UserScript==
- // @name Imperia Online Espionage Extensions
- // @namespace imperia_espionage
- // @version 1.2
- // @description try to take over the world!
- // @author ChoMPi
- // @match http://*.imperiaonline.org/imperia/game_v6/game/village.php*
- // @grant GM_getValue
- // @grant GM_setValue
- // ==/UserScript==
- /* jshint -W097 */
- 'use strict';
-
- function GetSpyRowID(element)
- {
- return $(element).next().attr('id').replace('hidden-tr-', '');
- }
-
- function GetSpyNotes()
- {
- if (typeof localStorage.imperia_spy_notes != 'undefined') {
- GM_setValue('imperia_spy_notes', localStorage.imperia_spy_notes);
- delete localStorage.imperia_spy_notes;
- }
-
- var notes = GM_getValue('imperia_spy_notes', null);
-
- if (notes == null)
- return {};
-
- return JSON.parse(notes);
- }
-
- function GetSpyNote(id)
- {
- var notes = GetSpyNotes();
- if (typeof notes[id] != 'undefined') {
- return notes[id];
- }
- return '';
- }
-
- function SaveSpyNote(id, note)
- {
- var notes = GetSpyNotes();
- notes[id] = note;
- GM_setValue('imperia_spy_notes', JSON.stringify(notes));
- }
-
- function OnWindowEspionage()
- {
- var opCenter = $('#operation-center .spy-wrapper');
- var dataGrid = $('.data-grid', opCenter);
-
- ProcessEspionageData(dataGrid);
- }
-
- function LoadEspionageData(data, appendTo)
- {
- var content = $(data).find('#messageboxEspionageTabs').get(1);
- content = $(content).html();
- content = $('<div></div>').html(content.replace("<![CDATA[S", "").replace("]]>", ""));
- var dataGrid = content.find('.data-grid');
- $('tr', dataGrid).first().remove();
-
- ProcessEspionageData(dataGrid);
-
- dataGrid.find('tr').each(function(i, e)
- {
- appendTo.append($(e));
- });
- }
-
- function ProcessEspionageData(dataGrid)
- {
- if (dataGrid.length > 0)
- {
- dataGrid.find('tr.stripe').each(function(i, e)
- {
- var id = GetSpyRowID(e);
- var noteText = GetSpyNote(id);
-
- var lastAttack = GetLastAttackString(id);
- if (lastAttack != '')
- {
- var attackField = $('<div style="font-size:12px; padding-top:3px; color: #632626;">Last attack order: ' + lastAttack + ' ago</div>');
- $('td:eq(1)', e).append(attackField);
- }
-
- var noteField = $('<div style="font-size:12px; padding-top:3px; color: #675E49; ' + (noteText == '' ? 'display:none;' : '') + '">' + noteText + '</div>');
- $('td:eq(1)', e).append(noteField);
-
- var form = $('<form onSubmit="return false;" style="display:none;"><textarea rows="2" cols="40"></textarea><br><input class="button" type="submit" value="Save" /></form>');
- $('td:eq(1)', e).append(form);
-
- var button = $('<a href="javascript:void(0);" id="' + id + '" class="button icons rename-bookmark" title="Set Note"><span></span></a>');
- $('td.actions div', e).append(button);
-
- form.submit(function()
- {
- SaveSpyNote(id, $('textarea', form).val());
- noteField.html($('textarea', form).val());
- form.fadeOut('fast', function()
- {
- if (noteField.html() != '')
- noteField.fadeIn('fast');
- });
- return false;
- });
-
- button.click(function()
- {
- if (form.is(':visible')) {
- form.fadeOut('fast', function() {
- if (noteField.html() != '') {
- noteField.fadeIn('fast');
- }
- });
- } else {
- $('textarea', form).val(GetSpyNote(id));
- noteField.fadeOut('fast', function() {
- form.fadeIn('fast');
- });
- }
- });
- });
- }
- }
-
- function GetLastAttacks()
- {
- if (typeof localStorage.imperia_last_attacks != 'undefined') {
- GM_setValue('imperia_last_attacks', localStorage.imperia_last_attacks);
- delete localStorage.imperia_last_attacks;
- }
-
- var attacks = GM_getValue('imperia_last_attacks', null);
-
- if (attacks == null)
- return {};
-
- return JSON.parse(attacks);
- }
-
- function GetLastAttack(id)
- {
- var attacks = GetLastAttacks();
- if (typeof attacks[id] != 'undefined') {
- return parseInt(attacks[id]);
- }
- return 0;
- }
-
- function GetLastAttackString(id)
- {
- var attackTime = GetLastAttack(id);
- if (attackTime > 0) {
- return timeSince(attackTime);
- }
- return '';
- }
-
- function SaveLastAttack(id, time)
- {
- var attacks = GetLastAttacks();
- attacks[id] = time;
- GM_setValue('imperia_last_attacks', JSON.stringify(attacks));
- }
-
- function OnDoAttack(requestData, response)
- {
- var id;
- var userid = requestData.match(/<e><k>dUserId<\/k><v>S(\d+)<\/v><\/e>/)[1];
- var provinceid = requestData.match(/<e><k>dProvinceId<\/k><v>S(\d+)<\/v><\/e>/);
- var name = requestData.match(/<e><k>dName<\/k><v>S([\_\-\.a-zA-Z0-9]*)<\/v><\/e>/)[1];
-
- if (provinceid == null) {
- return;
- }
-
- // Check if it's NPC or player
- if (name == '' || name.substring(0, 3) == 'NPC') {
- id = userid + '-' + provinceid[1];
- } else {
- id = userid + '-' + name;
- }
-
- // Check the response for error
- if (response.match(/\<cmd cmd\=\"as\" id\=\"errorContainerOperationCenter\" prop\=\"innerHTML\"\>/)) {
- return;
- }
-
- SaveLastAttack(id, new Date().getTime());
- }
-
- function OnSpyReport(id)
- {
- var wind = $('#spy-report-' + id);
- var simulatorLinks = $('.icon-simulator').parent().find('a');
-
- simulatorLinks.each(function(i, e) {
- // javascript:void(xajax_viewOperationCenter(container.open({saveName:'operation-center', title:'Command Center'}), {tab: 'simulators', subTab: 2, side: 'bottom', simulatorType: 1, spyReportId: 510619}))
- //$(e).attr('href', "javascript:void(0)");
- $(e).click(function() {
- container.open({saveName:'simulation-' + id, title:'Simulators'});
-
- $.post(location.protocol + "//" + location.host + "/imperia/game_v6/game/xajax_loader.php", {
- xjxfun: "viewOperationCenter",
- xjxr: Date.now(),
- xjxargs: ["Soperation-center", "<xjxobj><e><k>tab</k><v>Ssimulators</v></e><e><k>subTab</k><v>N2</v></e><e><k>side</k><v>Sbottom</v></e><e><k>simulatorType</k><v>N1</v></e><e><k>spyReportId</k><v>N" + id + "</v></e><e><k>vexok</k><v>Btrue</v></e></xjxobj>"],
- },
- function(data) {
- var cont = $('#messageboxsimulation-' + id);
- var content = $(data).find('xjx').find('cmd').get(2);
- var contentHTML = $(content).html();
- contentHTML = contentHTML.replace("<![CDATA[S", "").replace("]]>", "");
-
- cont.html(contentHTML);
- },
- "xml");
- });
- });
- }
-
- function addXMLRequestCallback(callback)
- {
- if (typeof XMLHttpRequest.newCallbacks == 'undefined')
- {
- XMLHttpRequest.newCallbacks = [callback];
- }
- else
- {
- XMLHttpRequest.newCallbacks.push(callback);
- return;
- }
-
- XMLHttpRequest.oldSend = XMLHttpRequest.prototype.send;
- // override the native send()
- XMLHttpRequest.prototype.send = function()
- {
- var self = this;
- this.addEventListener("readystatechange", function()
- {
- if (self.readyState == 4 && self.status == 200) {
- for (var i = 0; i < XMLHttpRequest.newCallbacks.length; i++)
- {
- XMLHttpRequest.newCallbacks[i](self);
- }
- }
- }, false);
- this.requestData = (arguments.length > 0) ? decodeURIComponent(arguments[0]) : null;
- // call the native send()
- XMLHttpRequest.oldSend.apply(this, arguments);
- }
- }
-
- function timeSince(date)
- {
- var seconds = Math.floor((new Date() - date) / 1000);
- var minutes = Math.floor(seconds / 60);
- var hours = Math.floor(seconds / 3600);
- var days = Math.floor(seconds / 86400);
- var months = Math.floor(seconds / 2592000);
- var years = Math.floor(seconds / 31536000);
-
- if (seconds < 60) {
- return Math.floor(seconds) + " seconds";
- }
- else if (minutes < 60) {
- return minutes + ' minute' + (minutes > 1 ? 's' : '');
- }
- else if (hours < 24) {
- return hours + ' hour' + (hours > 1 ? 's' : '');
- }
- else if (days < 30) {
- return days + ' day' + (days > 1 ? 's' : '');
- }
- else if (months < 12) {
- return months + ' month' + (months > 1 ? 's' : '');
- }
- else {
- return years + ' year' + (years > 1 ? 's' : '');
- }
- }
-
- function Init()
- {
- addXMLRequestCallback(function(xhr) {
- if (xhr.requestData != null) {
- // Check for the espionage window
- if (xhr.requestData.indexOf('xjxfun=viewOperationCenter') > -1 && xhr.requestData.indexOf('dontprocess=1') == -1) {
- if (xhr.response.indexOf('tab-espionage active') > -1) {
- OnWindowEspionage();
- }
- }
- // Check for attack
- if (xhr.requestData.indexOf('xjxfun=doAttack') > -1) {
- if (xhr.requestData != null) {
- OnDoAttack(xhr.requestData, xhr.response);
- }
- }
- // Check for spy
- if (xhr.requestData.indexOf('xjxfun=doSpy') > -1) {
- var patt = new RegExp(/<e><k>spy_mission_id<\/k><v>N(\d+)<\/v><\/e>/g);
- var id = patt.exec(xhr.requestData);
- if (typeof id[1] != 'undefined') {
- //OnSpyReport(parseInt(id[1]));
- }
- }
- }
- });
- }
-
- function hookFunction(object, functionName, callback) {
- (function(originalFunction) {
- object[functionName] = function () {
- var returnValue = originalFunction.apply(this, arguments);
-
- callback.apply(this, arguments);
-
- return returnValue;
- };
- }(object[functionName]));
- }
-
- $(document).ready(function()
- {
- function InitCheck()
- {
- if (typeof io.showUI != 'undefined')
- {
- hookFunction(io, 'showUI', function() {
- Init();
- });
- }
- else
- {
- setTimeout(InitCheck, 500);
- }
- }
- InitCheck();
- });