// ==UserScript==
// @name Imperia Online Attack Extensions
// @namespace imperia_attack
// @version 1.8
// @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';
var intervalTime = 60000; // Time in milliseconds
var lang = "en";
String.prototype.replaceAll = function (find, replace) {
var str = this;
return str.replace(new RegExp(find, 'g'), replace);
};
function tolang(key)
{
var strings = {
"en": {
"title": "My queued attacks",
"paused": "Paused",
"import": "Import",
"export": "Export",
"destination": "Destionation",
"missiontype": "Mission Type",
"distance": "Distance",
"traveltime": "Travel Time",
"armyunits": "Army Units",
"totaltime": "Total time",
"startqueue": "Start Queue",
"pausequeue": "Pause Queue",
"delete": "Delete",
"deleteall": "Delete All",
"playerinfo": "Player information",
"capital": "Capital",
"fortresssiege": "Fortress Siege",
"queuefortsiege": "Queue Fortress Siege",
"fieldbattle": "Field Battle",
"queuefieldbattle": "Queue Field Battle",
"noattacks": "There are no attacks in the queue.",
"inqueue": "In Queue",
"unitnames": {
"P1": "Light Spearmen",
"P2": "Heavy Spearmen",
"P3": "Phalanx",
"S1": "Light Archers",
"S2": "Heavy Archers",
"S3": "Elite Archers",
"M1": "Light Swordsmen",
"M2": "Heavy Swordsmen",
"M3": "Guardians",
"K1": "Light Cavalry",
"K2": "Heavy Cavalry",
"K3": "Paladins",
"CT": "Supply Wagons",
"C1": "Battering Rams",
"C2": "Catapults",
"C3": "Trebuchets",
"C4": "Ballistae",
},
},
"bg": {
"title": "Атаки в изчакване",
"paused": "Паузирано",
"import": "Импортиране",
"export": "Експортиране",
"destination": "Дестинация",
"missiontype": "Вид на мисията",
"distance": "Разстояние",
"traveltime": "Време за пътуване",
"armyunits": "Военни единици",
"totaltime": "Общо време",
"startqueue": "Старт",
"pausequeue": "Пауза",
"delete": "Изтрий",
"deleteall": "Изтрий Всички",
"playerinfo": "Информация за играча",
"capital": "Столица",
"fortresssiege": "Крепостна обсада",
"queuefortsiege": "Изчакване Крепостна обсада",
"fieldbattle": "Полева битка",
"queuefieldbattle": "Изчакване Полева битка",
"noattacks": "Няма атаки в изчакване.",
"inqueue": "Във Изчакване",
"unitnames": {
"P1": "Леки копиеносци",
"P2": "Тежки копиеносци",
"P3": "Фаланги",
"S1": "Леки стрелци",
"S2": "Тежки стрелци",
"S3": "Елитни стрелци",
"M1": "Леки мечоносци",
"M2": "Тежки мечоносци",
"M3": "Гвардейци",
"K1": "Лека конница",
"K2": "Тежка конница",
"K3": "Паладини",
"CT": "Товарни колички",
"C1": "Тарани",
"C2": "Катапулти",
"C3": "Требушети",
"C4": "Балисти",
},
},
};
return strings[lang][key];
}
function GetNextQueueID()
{
var id = GM_getValue('attackqueueid' + uid + REALM, 1);
GM_setValue('attackqueueid' + uid + REALM, parseInt(id) + 1);
return parseInt(id);
}
function QueueAttack(obj)
{
obj.id = GetNextQueueID();
GetAttackTime(obj, function(travelTime)
{
var list = GetQueueList();
obj.travelTime = travelTime;
list.push(obj);
GM_setValue('attackqueue' + uid + REALM, JSON.stringify(list));
UpdateQueueNotification();
});
}
function DequeueAttack(id)
{
var list = GetQueueList();
if (list.length > 0) {
for (var i = 0; i < list.length; i++) {
if (list[i].id == id) {
list.splice(i, 1);
}
}
GM_setValue('attackqueue' + uid + REALM, JSON.stringify(list));
}
UpdateQueueNotification();
if (container.isOpen({saveName:"queued-attacks"})) {
OpenQueuedAttacks();
}
}
function ClearAttackQueue()
{
GM_setValue('attackqueue' + uid + REALM, JSON.stringify([]));
UpdateQueueNotification();
if (container.isOpen({saveName:"queued-attacks"})) {
OpenQueuedAttacks();
}
}
function GetQueueList()
{
var list = GM_getValue('attackqueue' + uid + REALM, null);
if (list === null)
return [];
return JSON.parse(list);
}
function ImportQueueList(text)
{
var json;
try {
json = JSON.parse(text);
}
catch (err) {
alert('Import failed! Error: ' + err);
return;
}
// Corrections
for (var i = 0; i < json.length; i++) {
if (typeof json[i].attackType == 'undefined') {
json[i].attackType = "1";
}
}
GM_setValue('attackqueue' + uid + REALM, JSON.stringify(json));
UpdateQueueNotification();
OpenQueuedAttacks();
}
function GetQueuePauseState()
{
var state = GM_getValue('attackqueuestate' + uid + REALM, '1');
return (state == '1');
}
function SetQueuePauseState(state)
{
GM_setValue('attackqueuestate' + uid + REALM, (state ? '1' : '0'));
}
function SaveUnitInput(key, value)
{
var inputs = GM_getValue('unitinputs' + uid + REALM, null);
if (inputs === null) {
inputs = {};
} else {
inputs = JSON.parse(inputs);
}
inputs[key] = value;
GM_setValue('unitinputs' + uid + REALM, JSON.stringify(inputs));
}
function GetUnitInput(key)
{
var inputs = GM_getValue('unitinputs' + uid + REALM, null);
if (inputs === null) {
return 0;
}
inputs = JSON.parse(inputs);
if (typeof inputs[key] == 'undefined') {
return 0;
}
return inputs[key];
}
function pad(d)
{
return (d < 10) ? '0' + d.toString() : d.toString();
}
function StringToSeconds(timeStr)
{
if (timeStr.indexOf(':') == -1) {
return 0;
}
var timeArr = timeStr.split(':');
var hours = parseInt(timeArr[0]);
var minutes = parseInt(timeArr[1]);
var seconds = parseInt(timeArr[2]);
return (seconds + (minutes * 60) + (hours * 60 * 60));
}
function SecondsToString(totalSeconds)
{
var newhours = Math.floor(totalSeconds / 3600);
var newminutes = Math.floor((totalSeconds / 60) % 60);
var newseconds = totalSeconds % 60;
return pad(newhours) + ':' + pad(newminutes) + ':' + pad(newseconds);
}
function DoubleTimeString(timeStr)
{
var totalSeconds = (StringToSeconds(timeStr) * 2);
return SecondsToString(totalSeconds);
}
function GetTotalTime(queueList)
{
if (queueList.length == 0) {
return '00:00:00';
}
var totalSeconds = 0;
for (var i = 0; i < queueList.length; i++) {
if (typeof queueList[i].travelTime != 'undefined') {
totalSeconds += StringToSeconds(queueList[i].travelTime);
}
}
return SecondsToString(totalSeconds);
}
function GetAttackTime(attackData, callback)
{
if (attackData.dName.toLowerCase().indexOf('worldboss') > -1) {
callback('01:00:00');
return;
}
var armyString = "<xjxobj></xjxobj>";
if (attackData.armyStrings.length > 0) {
armyString = "<xjxobj>" + attackData.armyStrings.join("") + "</xjxobj>";
}
var sendData = "<xjxobj><e><k>generalId</k><v>S" + attackData.generalId + "</v></e><e><k>army</k><v>" + armyString + "</v></e><e><k>dUserId</k><v>S" + attackData.dUserId + "</v></e><e><k>dProvinceId</k><v>S" + attackData.dProvinceId + "</v></e><e><k>attackType</k><v>S" + attackData.attackType + "</v></e><e><k>dName</k><v>S" + attackData.dName + "</v></e><e><k>formation</k><v>S" + attackData.formation + "</v></e><e><k>vexok</k><v>Btrue</v></e></xjxobj>";
$.post(location.protocol + "//" + location.host + "/imperia/game_v6/game/xajax_loader.php", {
xjxfun: "viewAttackInfo",
xjxr: Date.now(),
xjxargs: ["SOperationCenter", sendData],
},
function(data) {
var e1 = $(data).find("#attackInfoBox").get(0);
var html = $(e1).html().replace("<![CDATA[S", "").replace("]]>", "");
var div = $('<div></div>').html(html);
var table = div.find('.table-army-info').get(0);
var tr = $(table).find('tr').get(1);
var td = $(tr).find('.info-values').get(1);
callback(DoubleTimeString($(td).text()));
}, "xml");
}
function ExecuteAttack(attackData)
{
var armyString = "<xjxobj></xjxobj>";
if (attackData.armyStrings.length > 0) {
armyString = "<xjxobj>" + attackData.armyStrings.join("") + "</xjxobj>";
} else {
console.log('No army selected for queued attack.');
return;
}
var sendData = "<xjxobj><e><k>generalId</k><v>S" + attackData.generalId + "</v></e><e><k>army</k><v>" + armyString + "</v></e><e><k>dUserId</k><v>S" + attackData.dUserId + "</v></e><e><k>dProvinceId</k><v>S" + attackData.dProvinceId + "</v></e><e><k>attackType</k><v>S" + attackData.attackType + "</v></e><e><k>dName</k><v>S" + attackData.dName + "</v></e><e><k>formation</k><v>S" + attackData.formation + "</v></e><e><k>vexok</k><v>Btrue</v></e></xjxobj>";
$.post(location.protocol + "//" + location.host + "/imperia/game_v6/game/xajax_loader.php", {
xjxfun: "doAttack",
xjxr: Date.now(),
xjxargs: ["SOperationCenter", sendData],
},
function(data) {
refreshUI('Refresh');
}, "xml");
DequeueAttack(attackData.id);
}
function UpdateQueueNotification()
{
var queueList = GetQueueList();
$('#widget-attackqueue').find('#count').html(queueList.length);
}
function GetFormDataValue(formData, key)
{
for (var i = 0; i < formData.length; i++) {
if (formData[i].name == key) {
return formData[i].value;
}
}
return null;
}
function GetAvailableArmy(callback)
{
// Check for army
$.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>Sattack</v></e><e><k>subTab</k><v>SloadAttack</v></e><e><k>vexok</k><v>Btrue</v></e></xjxobj>"],
},
function(data) {
var e1 = $(data).find("#messageboxArmyAttacks").get(0);
var html = $(e1).html().replace("<![CDATA[S", "").replace("]]>", "");
html = $(html);
var form = html.find("#sendAttackForm");
var formData = form.serializeArray();
var army = [];
for (var i = 0; i < formData.length; i++) {
if (formData[i].name.indexOf('army') > -1) {
var keySearch = /army\[(.*)\]/;
var results = formData[i].name.match(keySearch);
if (results.length > 0) {
var maxUnits = $('#max_' + results[1], html).val();
formData[i].value = parseInt(maxUnits);
army.push(formData[i]);
}
}
}
callback(army);
}, "xml");
}
function GetAvailableGenerals(callback)
{
// Check for general
$.post(location.protocol + "//" + location.host + "/imperia/game_v6/game/xajax_loader.php", {
xjxfun: "viewAssignGeneral",
xjxr: Date.now(),
xjxargs: ["Smodal", "<xjxobj><e><k>assignmentType</k><v>N1</v></e><e><k>vexok</k><v>Btrue</v></e></xjxobj>"],
},
function(data) {
var e2 = $(data).find("#messageboxmodal").get(0);
var html = $(e2).html();
var search = /personId\=\"(\d+)\"/g;
var results = html.match(search);
var generals = [];
if (results.length > 0) {
for (var i = 0; i < results.length; i++) {
var searchId = /personId\=\"(\d+)\"/;
var results2 = results[i].match(searchId);
if (results2.length > 0) {
generals.push(results2[1]);
}
}
}
callback(generals);
}, "xml");
}
function GetUnitsFromArmyArray(armyArray, key)
{
for (var i = 0; i < armyArray.length; i++) {
if (armyArray[i].name == key) {
return armyArray[i].value;
}
}
return 0;
}
function IsArmyAvailable(attackData, availableArmy, availableGenerals)
{
for (var i = 0; i < attackData.army.length; i++) {
var requestedUnits = attackData.army[i].value;
var availableUnits = GetUnitsFromArmyArray(availableArmy, attackData.army[i].name);
if (availableUnits < requestedUnits) {
return false;
}
}
if (availableGenerals.indexOf(attackData.generalId) == -1) {
return false;
}
return true;
}
function DeductArmyUnits(attackData, availableArmy)
{
for (var i = 0; i < attackData.army.length; i++) {
for (var i2 = 0; i2 < availableArmy.length; i2++) {
if (availableArmy[i2].name == attackData.army[i].name) {
availableArmy[i2].value = availableArmy[i2].value - attackData.army[i].value;
}
}
}
return availableArmy;
}
function RemoveGeneral(attackData, availableGenerals)
{
var index = availableGenerals.indexOf(attackData.generalId);
if (index > -1) {
availableGenerals.splice(index, 1);
}
return availableGenerals;
}
function Update()
{
if (GetQueuePauseState()) {
return;
}
var queueList = GetQueueList();
if (queueList.length > 0) {
GetAvailableArmy(function(availableArmy)
{
GetAvailableGenerals(function(availableGenerals)
{
var runAttacks = [];
for (var i = 0; i < queueList.length; i++) {
if (IsArmyAvailable(queueList[i], availableArmy, availableGenerals)) {
runAttacks.push(queueList[i]);
availableArmy = DeductArmyUnits(queueList[i], availableArmy);
availableGenerals = RemoveGeneral(queueList[i], availableGenerals);
}
}
for (var i2 = 0; i2 < runAttacks.length; i2++) {
// Execute the attack
ExecuteAttack(runAttacks[i2]);
}
});
});
} else {
SetQueuePauseState(true);
UpdateQueueNotification();
}
}
function GetQueuedAttackUnitsTooltip(attackData)
{
var html = '<table id="tooltip-qa' + attackData.id + '" class="ui-hide"><tbody>';
html += '<tr><td colspan="2">' + attackData.generalCard + '</td></tr>';
for (var i = 0; i < attackData.army.length; i++) {
var key = attackData.army[i].name.replace('army[' , '').replace(']' , '');
html += '<tr><td>' + tolang('unitnames')[key] + '</td><td class="numeral">' + attackData.army[i].value + '</td></tr>';
}
html += '</tbody></table>';
return html;
}
function OpenQueuedAttacks()
{
var queueList = GetQueueList();
var totalTime = GetTotalTime(queueList);
container.open({saveName:'queued-attacks', title:tolang('title')});
var cont = $('#queued-attacks .window-content');
cont.html('<span class="window-decor-left"></span>' +
'<span class="window-decor-right"></span>' +
'<div class="window-wide queued-attacks-main">' +
'<div class="content">' +
'<div id="all-queued-attacks-list-id" class="queued-attacks">' +
'<h3>' + tolang('title') + ' <span id="current-queue-state"' + (GetQueuePauseState() ? '' : ' style="display:none;"') + '>- <span style="color:#5F1D1D;">' + tolang('paused') + '</span></span>' +
'<div class="fright tright" style="margin-bottom:15px;margin-right:20px;">' +
'<div class="centered-block fright queue-operations" style="width: 500px;">' +
'<button class="button small" type="button" id="import-queue">' + tolang('import') + '</button>' +
'<button class="button small" type="button" id="export-queue">' + tolang('export') + '</button>' +
'</div>' +
'</div>' +
'</h3>' +
'<table class="data-grid middle">' +
'<tbody>' +
'<tr>' +
'<th title="' + tolang('destination') + '"><div class="table-header-icons from-to"></div></th>' +
'<th title="' + tolang('missiontype') + '"><div class="table-header-icons type-mission"></div></th>' +
'<th title="' + tolang('distance') + '"><span class="icon-op icon-distance"></span></th>' +
'<th title="' + tolang('traveltime') + '" class="th-time"><div class="table-header-icons timer"></div></th>' +
'<th title="' + tolang('armyunits') + '"><div class="table-header-icons army"></div></th>' +
'<th><div class="table-header-icons actions"></div></th>' +
'</tr>' +
'</tbody>' +
'</table>' +
'<div class="th-header clear cutting-panel">' +
'<div class="fleft tleft" style="margin-bottom:20px;">' +
'<div class="centered-block fleft queue-time" style="width: 200px;">' +
'' + tolang('totaltime') + ': ' + totalTime +
'</div>' +
'</div>' +
'<div class="fright tright" style="margin-bottom:20px;">' +
'<div class="centered-block fright queue-operations" style="width: 500px;">' +
'<button class="button small" type="button" id="start-queue"' + (GetQueuePauseState() ? '' : ' style="display:none;"') + '>' + tolang('startqueue') + '</button>' +
'<button class="button small" type="button" id="pause-queue"' + (GetQueuePauseState() ? ' style="display:none;"' : '') + '>' + tolang('pausequeue') + '</button>' +
'<button class="button small" type="button" id="clear-queue">' + tolang('deleteall') + '</button>' +
'</div>' +
'</div>' +
'</div>' +
'</div>' +
'</div>' +
'</div>');
var dataTable = $('.data-grid tbody', cont);
if (queueList.length > 0) {
for (var i = 0; i < queueList.length; i++) {
var attackData = queueList[i];
var name = "";
if (attackData.isPlayer) {
name = '<a class="username" href="javascript:void(xajax_viewGameProfiles(container.open({saveName: \'profiles\', title: \'' + tolang('playerinfo') + '\'}), { tab: 1, \'userId\': ' + attackData.dUserId + ' }))">' + attackData.dName + '</a>';
} else {
name = attackData.realName;
}
var tr = $('<tr class="queued-attack">' +
'<td><span class="ui-ib"><span class="ui-ib"><span class="prov-pict holding1" title="' + tolang('capital') + '"></span></span></span><span class="arrow-divider"></span>' + name + '</td>' +
'<td>' + (attackData.attackType == "1" ? tolang('fortresssiege') : tolang('fieldbattle')) + '</td>' +
'<td class="numeral" style="text-align:center;">' + attackData.distance + '</td>' +
'<td class="numeral" style="text-align:center;">' + attackData.travelTime + '</td>' +
'<td class="numeral tooltip-arrow" content="#tooltip-qa' + attackData.id + '" position="left;center" style="text-align:center;">' + attackData.armyTotal + GetQueuedAttackUnitsTooltip(attackData) + '</td>' +
'<td class="tcenter"><div class="centered-block visual-loading fnone"><button class="button icons red delete" type="button" title="' + tolang('delete') + '" name="delete" data-id="' + attackData.id + '"><span></span></button></div></td>' +
'</tr>');
dataTable.append(tr);
}
}
else
{
dataTable.append('<tr><td class="tcenter" colspan="5">' + tolang('noattacks') + '</td></tr>');
}
container.position();
$('#queued-attacks').on('click', 'button.delete', function() {
var id = $(this).attr('data-id');
if (typeof id != 'undefined') {
DequeueAttack(parseInt(id));
}
});
$('button#clear-queue', cont).click(function(){
ClearAttackQueue();
});
$('button#start-queue', cont).click(function(){
SetQueuePauseState(false);
$('button#pause-queue', cont).show();
$(this).hide();
$('#current-queue-state', cont).hide();
});
$('button#pause-queue', cont).click(function(){
SetQueuePauseState(true);
$('button#start-queue', cont).show();
$(this).hide();
$('#current-queue-state', cont).show();
});
$('button#export-queue', cont).click(function() {
container.open({saveName:'export-queued-attacks', title:tolang('export')});
$('#export-queued-attacks .window-content').html(
'<div class="window-tight export-queued-attacks-main">' +
'<div class="content">' +
'<textarea rows="10" style="width:480px;overflow-y:scroll;">' + JSON.stringify(GetQueueList()) + '</textarea>' +
'</div>' +
'</div>');
container.position();
});
$('button#import-queue', cont).click(function() {
container.open({saveName:'import-queued-attacks', title:tolang('import')});
$('#import-queued-attacks .window-content').html(
'<div class="window-tight import-queued-attacks-main">' +
'<div class="content">' +
'<textarea rows="10" style="width:480px;overflow-y:scroll;" id="queue-json"></textarea>' +
'<div class="th-header clear cutting-panel">' +
'<div class="fright tright" style="margin-bottom:20px;">' +
'<div class="centered-block fright queue-operations" style="width: 500px;">' +
'<button class="button small" type="button" id="import-queue-run">' + tolang('import') + '</button>' +
'</div>' +
'</div>' +
'</div>' +
'</div>' +
'</div>');
$('#import-queued-attacks #import-queue-run').click(function() {
var textarea = $('#import-queued-attacks #queue-json');
ImportQueueList(textarea.val());
container.close({saveName: 'import-queued-attacks', flow: true, closedWith: 'click'});
});
container.position();
});
ui.constructor();
}
function FormatFormData(formData)
{
var obj = {};
obj.army = [];
obj.armyStrings = [];
obj.armyTotal = 0;
for (var i = 0; i < formData.length; i++) {
var e = formData[i];
if (e.name == "generalId") {
obj.generalId = e.value;
}
else if (e.name == "dUserId") {
obj.dUserId = e.value;
}
else if (e.name == "dProvinceId") {
obj.dProvinceId = e.value;
}
else if (e.name == "dName") {
obj.dName = e.value;
}
else if (e.name == "formation") {
obj.formation = e.value;
}
else if (e.name == "attackType") {
obj.attackType = e.value;
}
else if (e.name.indexOf('army') > -1 && e.value != '') {
var regex = /army\[(.*)\]/;
var results = e.name.match(regex);
if (results != null) {
e.value = parseInt(e.value);
obj.army.push(e);
obj.armyStrings.push("<e><k>" + results[1] + "</k><v>S" + e.value + "</v></e>");
obj.armyTotal += e.value;
}
}
}
return obj;
}
function CreateSlider()
{
var table = $('.oc-attack .choose-army');
if (table.find('#army-slider-wrap').length > 0)
return;
var inputs = $('.unit-input', table);
var selectAll = $('#select-all-army', table);
inputs.each(function(i, e)
{
var a = $(e).children('a');
if (typeof a.attr('id') == 'undefined')
return;
var key = a.attr('id').replace('current_max_army_', '');
var max = $('#max_' + key).val();
if (max == '0')
return;
$(e).attr('data-key', key);
$(e).attr('data-max', max);
$(e).addClass('hasUnits');
});
var pctText = $('<div style="text-align:center;padding-top:6px;">0%</div>');
var sliderWrap = $('<div id="army-slider-wrap"></div>');
var slider = $('<div id="army-slider"></div>');
sliderWrap.append(slider);
selectAll.parent().parent().append(sliderWrap);
slider.slider({
min: 0,
max: 100,
change: function( event, ui ) {
inputs.each(function(i, e)
{
if (!$(e).hasClass('hasUnits'))
return;
var key = $(e).attr('data-key');
var max = $(e).attr('data-max');
var value = Math.floor(parseInt(max) * (ui.value / 100));
$('#army_' + key).val(value);
$('#army_' + key).trigger('keyup');
pctText.html(ui.value + '%');
});
calcArmyCapacity();
},
slide: function( event, ui ) {
pctText.html(ui.value + '%');
}
});
sliderWrap.after(pctText);
}
function QueueAttackButtonClick()
{
var form = $('#sendAttackForm');
if (typeof form != 'undefined' && form.length > 0)
{
var formData = form.serializeArray();
var obj = FormatFormData(formData);
if ($('#refreshInfo').length > 0) {
var distance = $('#refreshInfo').parent().find('.info-values').get(1);
obj.distance = $(distance).text();
} else {
obj.distance = "";
}
var table = $('.table-army-attack').find('tr').get(0);
if ($(table).find('.search-wrapper').length > 0)
{
obj.isPlayer = true;
}
else
{
var td = $(table).find('td').get(0);
td = $(td).clone();
td.find('h4').remove();
td.find('input').remove();
obj.isPlayer = false;
obj.realName = td.text().trim();
}
var generalCard = $('#attack-general').clone();
generalCard.find('a.change').remove();
generalCard.find('a').prop('href', null);
obj.generalCard = generalCard.html().replaceAll('\n', '').replace(/\s{2,}/g, ' ');
QueueAttack(obj);
}
}
function CreateQueueAttackButton()
{
if ($('.oc-attack').find('.button[name="sendAttack"]').length > 0 && $('.oc-attack').find('.queueAttack').length == 0)
{
var qButton;
var dName = $('#sendAttackForm #dName');
if (typeof dName == 'undefined' || dName.text().indexOf('Nomad') == -1)
{
qButton = $('<button class="button queueAttack" type="button" onclick="return false;">' + tolang('queuefortsiege') + '</button>');
qButton.click(function() {
$('#attackType').val('1');
QueueAttackButtonClick();
});
}
else if (dName.text().indexOf('Nomad') > -1)
{
qButton = $('<button class="button queueAttack" type="button" onclick="return false;">' + tolang('queuefieldbattle') + '</button>');
qButton.click(function() {
$('#attackType').val('2');
QueueAttackButtonClick();
});
}
var qButtonCont = $('<div class="centered-block visual-loading fnone"></div>');
$('.oc-attack .button[name="sendAttack"]').parent().parent().append(qButtonCont);
qButtonCont.append(qButton);
}
}
function LoadAndHookUnitInputs()
{
setTimeout(function() {
var form = $('#sendAttackForm');
if (typeof form != 'undefined' && form.length > 0)
{
form.find('input.unit-input').each(function(i, e) {
var id = $(e).prop('id');
$(e).val(GetUnitInput(id));
$(e).trigger('keyup');
$(e).on('keyup', function() {
SaveUnitInput($(this).prop('id'), $(this).val());
});
$(e).parent().find('a').click(function() {
$(e).trigger('keyup');
});
});
}
}, 400);
}
function OnWindowAttack()
{
CreateSlider();
CreateQueueAttackButton();
LoadAndHookUnitInputs();
}
function IsPlayerInQueue(userid)
{
var queueList = GetQueueList();
if (queueList.length > 0) {
for (var i = 0; i < queueList.length; i++) {
if (parseInt(queueList[i].dUserId) == parseInt(userid)) {
return true;
}
}
}
return false;
}
function IsProvinceInQueue(userid, provinceid)
{
var queueList = GetQueueList();
if (queueList.length > 0) {
for (var i = 0; i < queueList.length; i++) {
if (parseInt(queueList[i].dUserId) == parseInt(userid) && parseInt(queueList[i].dProvinceId) == parseInt(provinceid)) {
return true;
}
}
}
return false;
}
function OnWindowEspionage()
{
var opCenter = $('#operation-center .spy-wrapper');
var dataGrid = $('.data-grid', opCenter);
if (dataGrid.length > 0)
{
dataGrid.find('tr.stripe').each(function(i, e)
{
if (!$(e).hasClass('processed'))
{
var idstring = $(e).next().attr('id').replace('hidden-tr-', '');
var idarr = idstring.split('-');
var userid = idarr[0];
var secondid = idarr[1];
var isNpc = /^\d+$/.test(secondid);
if (!isNpc && IsPlayerInQueue(userid))
{
var note = $('<div style="font-size:12px; padding-top:3px; color: #632626;">' + tolang('inqueue') + '</div>');
$('td:eq(1)', e).append(note);
}
else if (isNpc && IsProvinceInQueue(userid, secondid))
{
var note = $('<div style="font-size:12px; padding-top:3px; color: #632626;">' + tolang('inqueue') + '</div>');
$('td:eq(1)', e).append(note);
}
$(e).addClass('processed');
}
});
}
}
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 Init()
{
addXMLRequestCallback(function(xhr) {
if (xhr.requestData != null) {
// Check for the espionage window
if (xhr.requestData.indexOf('xjxfun=viewOperationCenter') > -1) {
if (xhr.response.indexOf('tab-attack active') > -1) {
OnWindowAttack();
}
else if (xhr.response.indexOf('tab-espionage active') > -1) {
OnWindowEspionage();
}
}
else if (xhr.requestData.indexOf('viewAttackInfo') > -1) {
OnWindowAttack();
}
else if (xhr.requestData.indexOf('sendAttackWorldboss') > -1) {
OnWindowAttack();
}
}
});
if ($('#widget-lang a').hasClass('bg')) {
lang = "bg";
}
$('<style type="text/css">' +
'#army-slider-wrap {position:relative;z-index:1;height:6px;margin:0px 10px;padding:7px 14px 7px 16px;border-radius:15px;border:1px solid rgba(120,108,86,0.8);box-shadow:inset 0px 0px 6px rgba(0,0,0,0.2),1px 1px 1px rgba(255,237,196,0.25);background:#A69674;background:linear-gradient(to bottom, rgba(119,108,86,0.2) 0%, rgba(119,108,86,0.2) 100%)}' +
'#army-slider {}' +
'#army-slider a {top:-13px;width:36px;margin-left:-18px;height:36px;outline:none;background:url("http://ihcdn3.ioimg.org/iov6live/gui/custom-ui-sprite.png?v=724") no-repeat -2px -60px}' +
'#army-slider a:hover {background-position:-2px -96px}' +
'#widget-attackqueue { top:140px;right:51px;width:250px;height:0; }' +
'.ui-attackqueue a { background-position:0px -329px;position:relative;float:right;width:44px;height:28px;margin-right:9px; }' +
'.ui-attackqueue a .m-time { position:absolute;display:inline-block;left:2px;bottom:-12px;width:38px;padding:1px 0px;color:#fff;font-size:12px;text-align:center;background:rgba(0,0,0,0.5);border-radius:0 0 3px 3px; }' +
'.ui-attackqueue a:hover .m-time { box-shadow:0 0 2px #FFF; }' +
'#queued-attacks .queue-operations button { margin-left: 8px; }' +
'</style>').appendTo("head");
var notifyCont = $('<div id="widget-attackqueue" class="ui"><div class="ui-attackqueue"></div></div>');
var notifyButton = $('<a class="ui-icon" href="javascript:void(0)" title="' + tolang('title') + '"><span id="count" class="m-time">0</span></a>');
$('.ui-attackqueue', notifyCont).append(notifyButton);
$('#imperia').append(notifyCont);
UpdateQueueNotification();
notifyButton.click(function() {
OpenQueuedAttacks();
});
setInterval(Update, intervalTime);
}
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();
});