// ==UserScript==
// @name DIO-TOOLS
// @namespace DIO
// @version 3.07
// @author Diony
// @description DIO-Tools is a small extension for the browser game Grepolis. (counter, displays, smilies, trade options, changes to the layout)
// @include http://de.grepolis.com/game*
// @include /http[s]{0,1}://[a-z]{2}[0-9]{1,2}\.grepolis\.com/game*/
// @include https://*forum.*.grepolis.com/*.php*
// @include http://diotools.de/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js
// @icon http://s7.directupload.net/images/140128/vqchpigi.gif
// @icon64 http://diotools.de/images/icon_dio_64x64.png
// @copyright 2013+, DIONY
// @grant GM_info
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @grant GM_xmlhttpRequest
// @grant GM_getResourceURL
// ==/UserScript==
var version = '3.07';
//if(unsafeWindow.DM) console.dir(unsafeWindow.DM.status('l10n'));
//console.dir(DM.status('templates'));
//http://s7.directupload.net/images/140128/vqchpigi.gif - DIO-Tools-Smiley
//http://de44.grepolis.com/cache/js/libs/jquery-1.10.2.min.js
//console.log(JSON.stringify(DM.getl10n()));
//// console.log(GM_getResourceText("dio_sprite"));
/*******************************************************************************************************************************
* Changes
* ----------------------------------------------------------------------------------------------------------------------------
* | ● Einstellungen und auch das ganze Script komplett überarbeitet
* | ● Features können nun ohne Refresh deaktiviert/aktiviert werden
* | ● Einzelne Features sind unabhängiger voneinander und somit auch fehlerresistenter (einzelne Features können sich bei Fehlerauftreten durch Grepolis-Updates nicht mehr gegenseitig blockieren)
* | ● Fehlerhafter Biremenzähler als Kompromiss für die Erweiterung der "Verfügbare Einheiten"-Anzeige entfernt: es kann nun jede Einheit im Bullauge angezeigt werden
* | ● EO-Zähler hat ATT/UT's doppelt gezählt, wenn nebenher der veröffentlichte Belagerungsbericht im Forum offen war
* | ● 3 kleine Layoutfehler beim EO-Zähler behoben
* | ● Wenn Zauberfenster und Zauberbox gleichzeitig offen waren, kam es zu einem Layoutfehler
* | ● Fehler beim Mausrad-Zoom behoben
* | ● Fehler bei der Transporteranzeige behoben: die Kapazität der großen Transporter wurde durch das Rebalancing nichtmehr korrekt berechnet
* | ● Smileybox etwas verbessert
* | ● Weihnachtssmileys hinzugefügt
* | ● Kontextmenü der Stadticons auf der strategischen Karte konnte im Nachtmodus nicht geöffnet werden
* | ● Grüner Fortschrittsbalken beim Weltwunderzähler wurde nicht angezeigt
* | ● Fenster wurden angepasst (Verfügbare Einheiten und Einheitenvergleich)
* ----------------------------------------------------------------------------------------------------------------------------
*******************************************************************************************************************************/
/*******************************************************************************************************************************
* Bugs / TODOs
* ----------------------------------------------------------------------------------------------------------------------------
* | ● Aktivitätsbox für Angriffe blendet nicht aus
* | ● Smileys verschwinden manchmal? -> bisher nicht reproduzierbar
* | ● Performanceeinbruch nach dem Switchen des WW-Fensters
* | ● keine Smileys im Grepoforum mit Safari (fehlendes jQuery)
* ----------------------------------------------------------------------------------------------------------------------------
*******************************************************************************************************************************/
/*******************************************************************************************************************************
* Global stuff
*******************************************************************************************************************************/
var uw = unsafeWindow || window, $ = uw.jQuery || jQuery, DATA, GM;
// GM-API?
GM = (typeof GM_info === 'object');
console.log('%c|= DIO-Tools is active =|', 'color: green; font-size: 1em; font-weight: bolder; ');
function loadValue(name, default_val){
var value;
if(GM){
value = GM_getValue(name, default_val);
} else {
value = localStorage.getItem(name) || default_val;
}
if(typeof(value) === "string"){
value = JSON.parse(value)
}
return value;
}
// LOAD DATA
if(GM && (uw.location.pathname === "/game/index")){
var WID = uw.Game.world_id, MID = uw.Game.market_id, AID = uw.Game.alliance_id;
//GM_deleteValue(WID + "_bullseyeUnit");
DATA = {
// GLOBAL
options : loadValue("options", "{}"),
user : loadValue("dio_user", "{}"),
count: loadValue("dio_count", "[]"),
notification : loadValue('notif', '0'),
error: loadValue('error', '{}'),
spellbox : loadValue("spellbox", '{ "top":"23%", "left": "-150%", "show": false }'),
commandbox: loadValue("commandbox" , '{ "top":55, "left": 250 }'),
tradebox : loadValue("tradebox", '{ "top":55, "left": 450 }'),
// WORLD
townTypes : loadValue(WID + "_townTypes", "{}"),
sentUnits : loadValue(WID + "_sentUnits", '{ "attack": {}, "support": {} }'),
biremes : loadValue(WID + "_biremes", "{}"), //old
bullseyeUnit : loadValue(WID + "_bullseyeUnit", '{ "current_group" : -1 }'), // new
worldWonder : loadValue(WID + "_wonder", '{ "ratio": {}, "storage": {}, "map": {} }'),
clickCount : loadValue(WID + "_click_count", '{}'), // old
statistic : loadValue(WID + "_statistic", '{}'), // new
// MARKET
worldWonderTypes : loadValue(MID + "_wonderTypes", '{}')
};
if(!DATA.worldWonder.map) {
DATA.worldWonder.map = {};
}
// Temporary:
if(typeof DATA.options.trd == 'boolean') {
DATA.options.per = DATA.options.rec = DATA.options.trd; delete DATA.options.trd;
}
if(typeof DATA.options.mov == 'boolean') {
DATA.options.act = DATA.options.mov; delete DATA.options.mov;
}
if(typeof DATA.options.twn == 'boolean') {
DATA.options.tic = DATA.options.til = DATA.options.tim = DATA.options.twn; delete DATA.options.twn;
}
if(GM) GM_deleteValue("notification");
}
// GM: EXPORT FUNCTIONS
uw.saveValueGM = function(name, val){
setTimeout(function(){
GM_setValue(name, val);
}, 0);
};
uw.deleteValueGM = function(name){
setTimeout(function(){
GM_deleteValue(name);
},0);
};
uw.chatUserRequest = function(){
var _chatIndicator = $('.nui_main_menu .chat .indicator');
setTimeout(function(){
GM_xmlhttpRequest({
method: "GET",
url: "http://api.relay-chat.de/compteur_js.php?chan="+ (uw.Game.market_id === "de" ? "Grepolis" + uw.Game.market_id.toUpperCase() : "GREPO"),
onload: function(text){
_chatIndicator.get(0).innerHTML = text.response.split("'")[1];
_chatIndicator.get(0).style.display = 'block';
},
onerror: function(){
_chatIndicator.get(0).style.display = 'none';
}
});
}, 0);
};
uw.getImageDataFromCanvas = function(x, y){
console.debug("HEY", document.getElementById('canvas_picker').getContext('2d').getImageData(x, y, 1, 1));
};
uw.calculateConcaveHull = function() {
var contour = [
new poly2tri.Point(100, 100),
new poly2tri.Point(100, 300),
new poly2tri.Point(300, 300),
new poly2tri.Point(300, 100)
];
var swctx = new poly2tri.SweepContext(contour);
swctx.triangulate();
var triangles = swctx.getTriangles();
console.debug(triangles);
return triangles;
};
if(typeof exportFunction == 'function'){
// Firefox > 30
//uw.DATA = cloneInto(DATA, unsafeWindow);
exportFunction(uw.saveValueGM, unsafeWindow, {defineAs: "saveValueGM"});
exportFunction(uw.deleteValueGM, unsafeWindow, {defineAs: "deleteValueGM"});
exportFunction(uw.chatUserRequest, unsafeWindow, {defineAs: "chatUserRequest"});
exportFunction(uw.calculateConcaveHull, unsafeWindow, {defineAs: "calculateConcaveHull"});
exportFunction(uw.getImageDataFromCanvas, unsafeWindow, {defineAs: "getImageDataFromCanvas"});
} else {
// Firefox < 30, Chrome, Opera, ...
//uw.DATA = DATA;
}
var time_a, time_b;
// APPEND SCRIPT
function appendScript(){
//console.log("GM-API: " + gm_bool);
if(document.getElementsByTagName('body')[0]){
var dioscript = document.createElement('script');
dioscript.type ='text/javascript';
dioscript.id = 'diotools';
time_a = uw.Timestamp.client();
dioscript.textContent = DIO_GAME.toString().replace(/uw\./g, "") + "\n DIO_GAME('"+ version +"', "+ GM +", '" + JSON.stringify(DATA).replace(/'/g, "##") + "', "+ time_a +");";
document.body.appendChild(dioscript);
} else {
setTimeout(function(){
appendScript();
}, 500);
}
}
if(location.host === "diotools.de"){
// PAGE
DIO_PAGE();
} else {
if((location.pathname !== "/game/index") && GM){
// FORUM
DIO_GAME(version);
} else {
// GAME
appendScript();
}
}
function DIO_PAGE(){
if(typeof GM_info == 'object') {
setTimeout(function() {
dio_user = JSON.parse(loadValue("dio_user", ""));
console.log(dio_user);
uw.dio_version = parseFloat(version);
}, 0);
} else {
dio_user = localStorage.getItem("dio_user") || "";
dio_version = parseFloat(version);
}
}
function DIO_FORUM(){
if($(".editor_textbox_container").get(0)){
loadSmileys();
changeForumEditorLayout();
addForum();
}
}
function DIO_GAME(version, gm, DATA, time_a) {
var MutationObserver = uw.MutationObserver || window.MutationObserver,
WID, MID, AID, PID, LID,
dio_sprite = "http://666kb.com/i/ct1etaz0uyohw402i.png"; // http://abload.de/img/dio_spritejmqxp.png, http://img1.myimg.de/DIOSPRITEe9708.png -> Forbidden!?
if (uw.location.pathname === "/game/index") {
DATA = JSON.parse(DATA.replace(/##/g, "'"));
WID = uw.Game.world_id;
MID = uw.Game.market_id;
AID = uw.Game.alliance_id;
PID = uw.Game.player_id;
LID = uw.Game.locale_lang.split("_")[0]; // LID ="es";
// World with Artemis ??
Game.hasArtemis = true; //Game.constants.gods.length == 6;
}
$.prototype.reverseList = [].reverse;
// Implement old jQuery method (version < 1.9)
$.fn.toggleClick = function () {
var methods = arguments; // Store the passed arguments for future reference
var count = methods.length; // Cache the number of methods
// Use return this to maintain jQuery chainability
// For each element you bind to
return this.each(function (i, item) {
// Create a local counter for that element
var index = 0;
// Bind a click handler to that element
$(item).on('click', function () {
// That when called will apply the 'index'th method to that element
// the index % count means that we constrain our iterator between 0
// and (count-1)
return methods[index++ % count].apply(this, arguments);
});
});
};
function saveValue(name, val) {
if (gm) {
saveValueGM(name, val);
} else {
localStorage.setItem(name, val);
}
}
function deleteValue(name) {
if (gm) {
deleteValueGM(name);
} else {
localStorage.removeItem(name);
}
}
/*******************************************************************************************************************************
* Graphic filters
*******************************************************************************************************************************/
if (uw.location.pathname === "/game/index") {
$('<svg width="0%" height="0%">' +
// GREYSCALE
'<filter id="GrayScale">' +
'<feColorMatrix type="matrix" values="0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0">' +
'</filter>' +
// SEPIA
'<filter id="Sepia">' +
'<feColorMatrix type="matrix" values="0.343 0.669 0.119 0 0 0.249 0.626 0.130 0 0 0.172 0.334 0.111 0 0 0.000 0.000 0.000 1 0">' +
'</filter>' +
// SATURATION
'<filter id="Saturation"><feColorMatrix type="saturate" values="0.2"></filter>' +
'<filter id="Saturation1"><feColorMatrix type="saturate" values="1"></filter>' +
'<filter id="Saturation2"><feColorMatrix type="saturate" values="2"></filter>' +
// HUE
'<filter id="Hue1"><feColorMatrix type="hueRotate" values= "65"></filter>' +
'<filter id="Hue2"><feColorMatrix type="hueRotate" values="150"></filter>' +
'<filter id="Hue3"><feColorMatrix type="hueRotate" values="-65"></filter>' +
// BRIGHTNESS
'<filter id="Brightness15">' +
'<feComponentTransfer><feFuncR type="linear" slope="1.5"/><feFuncG type="linear" slope="1.5"/><feFuncB type="linear" slope="1.5"/></feComponentTransfer>' +
'</filter>' +
'<filter id="Brightness12">' +
'<feComponentTransfer><feFuncR type="linear" slope="1.2"/><feFuncG type="linear" slope="1.2"/><feFuncB type="linear" slope="1.2"/></feComponentTransfer>' +
'</filter>' +
'<filter id="Brightness11">' +
'<feComponentTransfer><feFuncR type="linear" slope="1.1"/><feFuncG type="linear" slope="1.1"/><feFuncB type="linear" slope="1.1"/></feComponentTransfer>' +
'</filter>' +
'<filter id="Brightness10">' +
'<feComponentTransfer><feFuncR type="linear" slope="1.0"/><feFuncG type="linear" slope="1.0"/><feFuncB type="linear" slope="1.0"/></feComponentTransfer>' +
'</filter>' +
'<filter id="Brightness07">' +
'<feComponentTransfer><feFuncR type="linear" slope="0.7"/><feFuncG type="linear" slope="0.7"/><feFuncB type="linear" slope="0.7"/></feComponentTransfer>' +
'</filter>' +
'</svg>').appendTo('#ui_box');
}
/*******************************************************************************************************************************
* Language versions: german, english, french, russian, polish, spanish
*******************************************************************************************************************************/
var LANG = {
de: {
settings: {
dsc: "DIO-Tools bietet unter anderem einige Anzeigen, eine Smileyauswahlbox,<br>Handelsoptionen und einige Veränderungen des Layouts.",
act: "Funktionen der Toolsammlung aktivieren/deaktivieren:",
prv: "Vorschau einzelner Funktionen:",
version_old: "DIO-Tools-Version ist nicht aktuell",
version_new: "DIO-Tools-Version ist aktuell",
version_dev: "DIO-Tools-Entwicklerversion",
version_update: "Aktualisieren",
link_forum: "http://forum.de.grepolis.com/showthread.php?28838&goto=newpost", //"http://forum.de.grepolis.com/showthread.php?28838"
link_contact: "http://forum.de.grepolis.com/private.php?do=newpm&u=10548",
forum: "Forum",
author: "Autor",
cat_units: "Einheiten",
cat_icons: "Stadticons",
cat_forum: "Forum",
cat_trade: "Handel",
cat_wonders: "Weltwunder",
cat_layout: "Layout",
cat_other: "Sonstiges"
},
options: {
bir: ["Biremenzähler", "Zählt die jeweiligen Biremen einer Stadt und summiert diese.<br><br>Anzeige im Minimap-Bullauge oben links"],
ava: ["Verfügbare Einheiten", "Zählt die verfügbaren Einheiten von allen Städten"],
sml: ["Smileys", "Erweitert die BBCode-Leiste um eine Smileybox"],
str: ["Einheitenstärke", "Fügt mehrere Einheitenstärketabellen in verschiedenen Bereichen hinzu"],
tra: ["Transportkapazität", "Zeigt die belegte und verfügbare Transportkapazität im Einheitenmenu an"],
per: ["Prozentualer Handel", "Erweitert das Handelsfenster um einen Prozentualer Handel"],
rec: ["Rekrutierungshandel", "Erweitert das Handelsfenster um einen Rekrutierungshandel"],
cnt: ["EO-Zähler", "Zählt die ATT/UT-Anzahl im EO-Fenster"],
way: ["Laufzeit", "Zeigt im ATT/UT-Fenster die Laufzeit bei Verbesserter Truppenbewegung an"],
sim: ["Simulator", "Anpassung des Simulatorlayouts & permanente Anzeige der Erweiterten Modifikatorbox"],
spl: ["Zauberbox", "Komprimierte verschiebbare & magnetische Zauberbox (Positionsspeicherung)"],
act: ["Aktivitätsboxen", "Verbesserte Anzeige der Handels- und Truppenaktivitätsboxen (Positionsspeicherung)"],
pop: ["Gunst-Popup", 'Ändert das Aussehen des Gunst-Popups'],
tsk: ["Taskleiste", 'Vergrößert die Taskleiste und minimiert das "Tägliche Belohnung"-Fenster beim Start'],
irc: ["Chat", "Ersetzt den Allianzchat durch einen IRC-Chat"],
bbc: ["DEF-Formular", "Erweitert die BBCode-Leiste um ein automatisches DEF-Formular"],
com: ["Einheitenvergleich", "Fügt Einheitenvergleichstabellen hinzu"],
tic: ["Stadticons", "Jede Stadt erhält ein Icon für den Stadttyp (Automatische Erkennung)", "Zusätzliche Icons stehen bei der manuellen Auswahl zur Verfügung"],
til: ["Stadtliste", "Fügt die Stadticons zur Stadtliste hinzu"],
tim: ["Karte", "Setzt die Stadticons auf die strategische Karte"],
wwc: ["Anteil", "Anteilsrechner & Rohstoffzähler + Vor- & Zurück-Buttons bei fertiggestellten WW's (momentan nicht deaktivierbar!)"],
wwr: ["Rangliste", "Überarbeitete Weltwunderrangliste"],
wwi: ["Icons", 'Fügt Weltwundericons auf der strategischen Karte hinzu'],
con: ["Kontextmenu", 'Vertauscht "Stadt selektieren" und "Stadtübersicht" im Kontextmenu'],
sen: ["Abgeschickte Einheiten", 'Zeigt im Angriffs-/Unterstützungsfenster abgeschickte Einheiten an'],
tov: ["Stadtübersicht", 'Ersetzt die neue Stadtansicht mit der alten Fensteransicht'],
scr: ["Mausrad-Zoom", 'Man kann mit dem Mausrad die 3 Ansichten wechseln'],
err: ["Automatische Fehlerberichte senden", "Wenn du diese Option aktivierst, kannst du dabei helfen Fehler zu identifizieren."],
her: ["Thrakische Eroberung", "Verkleinerung der Karte der Thrakischen Eroberung."]
},
labels: {
uni: "Verfügbare Einheiten",
con: "Selektieren",
// Smileys
std: "Standard",
gre: "Grepolis",
nat: "Natur",
ppl: "Leute",
oth: "Sonstige",
// Defense form
ttl: "Übersicht: Stadtverteidigung",
inf: "Informationen zur Stadt:",
dev: "Abweichung",
det: "Detailierte Landeinheiten",
prm: "Premiumboni",
sil: "Silberstand",
mov: "Truppenbewegungen:",
// WW
leg: "WW-Anteil",
stg: "Stufe",
tot: "Gesamt",
// Simulator
str: "Einheitenstärke",
los: "Verluste",
mod: "ohne Modifikatoreinfluss",
// Comparison box
dsc: "Einheitenvergleich",
hck: "Schlag",
prc: "Stich",
dst: "Distanz",
sea: "See",
att: "Angriff",
def: "Verteidigung",
spd: "Geschwindigkeit",
bty: "Beute (Rohstoffe)",
cap: "Transportkapazität",
res: "Baukosten (Rohstoffe)",
fav: "Gunst",
tim: "Bauzeit (s)",
// Trade
rat: "Ressourcenverhältnis eines Einheitentyps",
shr: "Anteil an der Lagerkapazität der Zielstadt",
per: "Prozentualer Handel",
// Sent units box
lab: "Abgeschickt",
improved_movement: "Verbesserte Truppenbewegung"
},
buttons: {
sav: "Speichern", ins: "Einfügen", res: "Zurücksetzen"
}
},
en: {
settings: {
dsc: "DIO-Tools offers, among other things, some displays, a smiley box,<br>trade options and some changes to the layout.",
act: "Activate/deactivate features of the toolset:",
prv: "Preview of several features:",
version_old: "Version is not up to date",
version_new: "Version is up to date",
version_dev: "Developer version",
version_update: "Update",
link_forum: "http://forum.en.grepolis.com/showthread.php?52104&goto=newpost",
link_contact: "http://forum.en.grepolis.com/private.php?do=newpm&u=46211",
forum: "Forum",
author: "Author",
cat_units: "Units",
cat_icons: "Town icons",
cat_forum: "Forum",
cat_trade: "Trade",
cat_wonders: "World wonder",
cat_layout: "Layout",
cat_other: "Miscellaneous"
},
options: {
bir: ["Bireme counter", "Counts the biremes of a city and sums these"],
ava: ["Available units", "Counts the available units of all cities"],
sml: ["Smilies", "Extends the bbcode bar by a smiley box"],
str: ["Unit strength", "Adds unit strength tables in various areas"],
tra: ["Transport capacity", "Shows the occupied and available transport capacity in the unit menu"],
per: ["Percentual trade", "Extends the trade window by a percentual trade"],
rec: ["Recruiting trade", "Extends the trade window by a recruiting trade"],
cnt: ["Conquests", "Counts the attacks/supports in the conquest window"],
way: ["Troop speed", "Displays improved troop speed in the attack/support window"],
sim: ["Simulator", "Adaptation of the simulator layout & permanent display of the extended modifier box"],
spl: ["Spell box", "Compressed movable & magnetic spell box (position memory)"],
act: ["Activity boxes", "Improved display of trade and troop activity boxes (position memory)"],
pop: ["Favor popup", "Changes the favor popup"],
tsk: ["Taskbar", "Increases the taskbar and minimizes the daily reward window on startup"],
irc: ["Chat", 'Replaced the alliance chat by an irc chat. (FlashPlayer required)'],
bbc: ["Defense form", "Extends the bbcode bar by an automatic defense form"],
com: ["Unit Comparison", "Adds unit comparison tables"],
tic: ["Town icons", "Each city receives an icon for the town type (automatic detection)", "Additional icons are available for manual selection"],
til: ["Town list", "Adds the town icons to the town list"],
tim: ["Map", "Sets the town icons on the strategic map"],
wwc: ["Calculator", "Share calculation & resources counter + previous & next buttons on finished world wonders (currently not deactivatable!)"],
wwr: ["Ranking", "Redesigned world wonder rankings"],
wwi: ["Icons", 'Adds world wonder icons on the strategic map'],
con: ["Context menu", 'Swaps "Select town" and "City overview" in the context menu'],
sen: ["Sent units", 'Shows sent units in the attack/support window'],
tov: ["Town overview", 'Replaces the new town overview with the old window style'],
scr: ["Mouse wheel", 'You can change the views with the mouse wheel'],
err: ["Send bug reports automatically", "If you activate this option, you can help identify bugs."],
her: ["Thracian Conquest", "Downsizing of the map of the Thracian conquest."]
},
labels: {
uni: "Available Units",
con: "Select town",
// Smileys
std: "Standard",
gre: "Grepolis",
nat: "Nature",
ppl: "People",
oth: "Other",
hal: "Halloween",
xma: "Xmas",
// Defense form
ttl: "Overview: Town defense",
inf: "Town information:",
dev: "Deviation",
det: "Detailed land units",
prm: "Premium bonuses",
sil: "Silver volume",
mov: "Troop movements:",
// WW
leg: "WW Share",
stg: "Stage",
tot: "Total",
// Simulator
str: "Unit strength",
los: "Loss",
mod: "without modificator influence",
// Comparison box
dsc: "Unit comparison",
hck: "Blunt",
prc: "Sharp",
dst: "Distance",
sea: "Sea",
att: "Offensive",
def: "Defensive",
spd: "Speed",
bty: "Booty (resources)",
cap: "Transport capacity",
res: "Costs (resources)",
fav: "Favor",
tim: "Recruiting time (s)",
// Trade
rat: "Resource ratio of an unit type",
shr: "Share of the storage capacity of the target city",
per: "Percentage trade",
// Sent units box
lab: "Sent units",
improved_movement: "Improved troop movement"
},
buttons: {
sav: "Save", ins: "Insert", res: "Reset"
}
},
///////////////////////////////////
// French Translation by eclat49 //
///////////////////////////////////
fr: {
settings: {
dsc: "DIO-Tools offres certains écrans, une boîte de smiley, les options <br>commerciales, des changements à la mise en page et d'autres choses.",
act: "Activation/Désactivation des fonctions:",
prv: "Aperçu des fonctions séparées:"
},
options: {
bir: ["Compteur de birèmes ", "Totalise l'ensemble des birèmes présentent en villes et les résume. (Remplace la mini carte dans le cadran)"],
sml: ["Smileys", "Rajoutes une boite de smilies à la boite de bbcode"],
str: ["Force unitaire", "Ajoutes des tableaux de force unitaire dans les différentes armes"],
//trd: [ "Commerce", "Ajout d'une option par pourcentage, par troupes pour le commerce, ainsi qu'un affichage des limites pour les festivals" ],
per: ["Commerce de pourcentage", ""],
rec: ["Commerce de recrutement", ""],
cnt: ["Compteur conquête", "Comptabilise le nombre d'attaque et de soutien dans la fenêtre de conquête"],
way: ["Vitesse des troupes ", "Rajoutes le temps de trajet avec le bonus accélération"],
sim: ["Simulateur", "Modification de la présentation du simulateur et affichage permanent des options premium"],
spl: ["Boîte de magie", "Boîte de sort cliquable et positionnable"],
act: ["Boîte d'activité", "Présentation améliorée du commerce et des mouvement de troupes (mémoire de position)"],
pop: ["Popup de faveur", 'Change la popup de faveur'],
tsk: ["Barre de tâches ", "La barre de tâches augmente et minimise le fenêtre de bonus journalier"],
irc: ["Chat", "Remplace le chat de l'alliance à travers un chat IRC. (FlashPlayer requis)"],
bbc: ["Formulaire de défense", "Ajout d'un bouton dans la barre BBCode pour un formulaire de défense automatique"],
com: ["Comparaison des unités", "Ajoutes des tableaux de comparaison des unités"],
tic: ["Icônes des villes", "Chaque ville reçoit une icône pour le type de ville (détection automatique)", "Des icônes supplémentaires sont disponibles pour la sélection manuelle"],
til: ["Liste de ville", "Ajoute les icônes de la ville à la liste de la ville"],
tim: ["Carte", "Définit les icônes de la ville sur la carte stratégique"],
wwc: ["Merveille du monde", "Compteur de ressource et calcul d'envoi + bouton précédent et suivant sur les merveilles finies(ne peut être désactivé pour le moment)"],
wwr: ["", ""],
//wwi: [ "Icônes",'Adds world wonder icons on the strategic map' ],
con: ["Menu contextuel", 'Swaps "Sélectionner ville" et "Aperçu de la ville" dans le menu contextuel'],
sen: ["Unités envoyées", 'Affiche unités envoyées dans la fenêtre attaque/support'],
tov: ["Aperçu de ville", "Remplace la nouvelle aperçu de la ville avec l'ancien style de fenêtre"],
scr: ["Molette de la souris", 'Avec la molette de la souris vous pouvez changer les vues'],
err: ["Envoyer des rapports de bogues automatiquement", "Si vous activez cette option, vous pouvez aider à identifier les bugs."]
},
labels: {
uni: "Unités disponibles",
con: "Sélectionner",
// Smileys
std: "Standard",
gre: "Grepolis",
nat: "Nature",
ppl: "Gens",
oth: "Autres",
// Defense form
ttl: "Aperçu: Défense de ville",
inf: "Renseignements sur la ville:",
dev: "Différence",
det: "Unités terrestres détaillées",
prm: "Bonus premium",
sil: "Remplissage de la grotte",
mov: "Mouvements de troupes:",
// WW
leg: "Participation",
stg: "Niveau",
tot: "Total",
// Simulator
str: "Force unitaire",
los: "Pertes",
mod: "sans influence de modificateur",
// Comparison box
dsc: "Comparaison des unités",
hck: "Contond.",
prc: "Blanche",
dst: "Jet",
sea: "Navale",
att: "Attaque",
def: "Défense",
spd: "Vitesse",
bty: "Butin",
cap: "Capacité de transport",
res: "Coût de construction",
fav: "Faveur",
tim: "Temps de construction (s)",
// Trade
rat: "Ratio des ressources d'un type d'unité",
shr: "Part de la capacité de stockage de la ville cible",
per: "Commerce de pourcentage",
// Sent units box
lab: "Envoyée",
improved_movement: "Mouvement des troupes amélioré"
},
buttons: {
sav: "Sauver", ins: "Insertion", res: "Remettre"
}
},
///////////////////////////////////
// Russian Translation by MrBobr //
///////////////////////////////////
ru: {
settings: {
dsc: "DIO-Tools изменяет некоторые окна, добавляет новые смайлы, отчёты,<br>улучшеные варианты торговли и другие функции.",
act: "Включение/выключение функций:",
prv: "Примеры внесённых изменений:"
},
options: {
bir: ["Счётчик бирем", "Показывает число бирем во всех городах"],
sml: ["Смайлы", "Добавляет кнопку для вставки смайлов в сообщения"],
str: ["Сила отряда", "Добавляет таблицу общей силы отряда в некоторых окнах"],
//trd: [ "Торговля", "Добавляет маркеры и отправку недостающих ресурсов, необходимых для фестиваля. Инструменты для долевой торговли" ],
per: ["Процент торговля", ""],
rec: ["Рекрутинг торговля", ""],
cnt: ["Завоевания", "Отображение общего числа атак/подкреплений в окне завоевания города"],
way: ["30% ускорение", "Отображает примерное время движения отряда с 30% бонусом"],
sim: ["Симулятор", "Изменение интерфейса симулятора, добавление новых функций"],
spl: ["Заклинания", "Изменяет положение окна заклинаний"],
act: ["Перемещения", "Показывает окна пересылки ресурсов и перемещения войск"],
pop: ["Благосклонность", "Отображение окна с уровнем благосклонности богов"],
tsk: ["Таскбар", "Увеличение ширины таскбара и сворачивание окна ежедневной награды при входе в игру"],
irc: ["Чат", 'Замена чата игры на irc-чат'],
bbc: ["Форма обороны", "Добавляет кнопку для вставки в сообщение отчёта о городе"], // Beschreibung passt nicht ganz
com: ["Сравнение юнитов", "Добавляет окно сравнения юнитов"],
tic: ["Типы городов", "Каждый город получает значок для городского типа (автоматическое определение)", "Дополнительные иконки доступны для ручного выбора"], // ?
til: ["Список город", "Добавляет значки городские в список города"], // ?
tim: ["Карта", "Устанавливает городские иконки на стратегической карте"], // ?
wwc: ["Чудо света", "Share calculation & resources counter + previous & next buttons on finished world wonders (currently not deactivatable!)"],
wwr: ["", ""],
//wwi: [ "World wonder icons",'Adds world wonder icons on the strategic map' ],
//con: [ "Context menu", 'Swaps "Select town" and "City overview" in the context menu'],
//sen: [ "Sent units", 'Shows sent units in the attack/support window'],
tov: ["Обзор Город", 'Заменяет новый обзор города с старом стиле окна'], // ?
scr: ["Колесо мыши", 'С помощью колеса мыши вы можете изменить взгляды'], // ?
err: ["Отправить сообщения об ошибках автоматически", "Если вы включите эту опцию, вы можете помочь идентифицировать ошибки"]
},
labels: {
uni: "Доступные войска",
con: "выбирать",
// Smileys
std: "",
gre: "",
nat: "",
ppl: "",
oth: "",
// Defense form
ttl: "Обзор: Отчёт о городе",
inf: "Информация о войсках и постройках:",
dev: "Отклонение",
det: "Детальный отчёт",
prm: "Премиум-бонусы",
sil: "Серебро в пещере",
mov: "Перемещения",
// WW
leg: "",
stg: "",
tot: "",
// Simulator
str: "Сила войск",
los: "Потери",
mod: "без учёта заклинаний, бонусов, исследований",
// Comparison box
dsc: "Сравнение юнитов",
hck: "Ударное",
prc: "Колющее",
dst: "Дальнего боя",
sea: "Морские",
att: "Атака",
def: "Защита",
spd: "Скорость",
bty: "Добыча (ресурсы)",
cap: "Вместимость транспортов",
res: "Стоимость (ресурсы)",
fav: "Благосклонность",
tim: "Время найма (с)",
// Trade
rat: "",
shr: "",
per: "",
// Sent units box
lab: "Отправлено",
improved_movement: "Улучшенная перемещение войск"
},
buttons: {
sav: "Сохраниить", ins: "Вставка", res: "Сброс"
}
},
////////////////////////////////
// Polish Translation by anpu //
////////////////////////////////
pl: {
settings: {
dsc: "DIO-Tools oferuje (między innymi) poprawione widoki, nowe uśmieszki,<br>opcje handlu i zmiany w wyglądzie.",
act: "Włącz/wyłącz funkcje skryptu:",
prv: "podgląd poszczególnych opcji:"
},
options: {
bir: ["Licznik birem", "Zlicza i sumuje biremy z miast"],
sml: ["Emotki", "Dodaje dodatkowe (zielone) emotikonki"],
str: ["Siła jednostek", "dodaje tabelki z siłą jednostek w różnych miejscach gry"],
//trd: [ "Handel", "Rozszerza okno handlu o handel procentowy, proporcje surowców wg jednostek, dodaje znaczniki dla festynów" ],
per: ["Handel procentowy", ""],
rec: ["Handel rekrutacyjne", ""],
cnt: ["Podboje", "Zlicza wsparcia/ataki w oknie podboju (tylko własne podboje)"],
way: ["Prędkość wojsk", "Wyświetla dodatkowo czas jednostek dla bonusu przyspieszone ruchy wojsk"],
sim: ["Symulator", "Dostosowanie wyglądu symulatora oraz dodanie szybkich pól wyboru"],
spl: ["Ramka czarów", "Kompaktowa pływająca ramka z czarami (można umieścić w dowolnym miejscu ekranu. Zapamiętuje położenie.)"],
act: ["Ramki aktywności", "Ulepszony podgląd ruchów wojsk i handlu (można umieścić w dowolnym miejscu ekranu. Zapamiętuje położenie.)"],
pop: ["Łaski", "Zmienia wygląd ramki informacyjnej o ilości produkowanych łask"],
tsk: ["Pasek skrótów", "Powiększa pasek skrótów i minimalizuje okienko z bonusem dziennym"],
irc: ["Czat", 'Zastępuje standardowy Chat chatem IRC (wymagany FlashPlayer)'],
bbc: ["Raportów obronnych", "Rozszerza pasek skrótów BBcode o generator raportów obronnych"],
com: ["Porównianie", "Dodaje tabelki z porównaniem jednostek"],
tic: ["Ikony miasta", "Każde miasto otrzyma ikonę typu miasta (automatyczne wykrywanie)", "Dodatkowe ikony są dostępne dla ręcznego wyboru"], // ?
til: ["Lista miasto", "Dodaje ikony miasta do listy miasta"], // ?
tim: ["Mapa", "Zestawy ikon miasta na mapie strategicznej"], // ?
wwc: ["Cuda Świata", "Liczy udział w budowie oraz ilość wysłanych surowców na budowę Cudu Świata oraz dodaje przyciski do szybkiego przełączania między cudami (obecnie nie możliwe do wyłączenia)"],
wwr: ["", ""],
//wwi: [ "World wonder icons",'Adds world wonder icons on the strategic map' ],
con: ["menu kontekstowe", 'Zamiemia miejcami przycisk "wybierz miasto" z przyciskiem "podgląd miasta" po kliknięciu miasta na mapie'],
sen: ["Wysłane jednostki", 'Pokaż wysłane jednostki w oknie wysyłania ataków/wsparć'],
tov: ["Podgląd miasta", 'Zastępuje nowy podgląd miasta starym'],
scr: ["Zoom", 'Możesz zmienić poziom przybliżenia mapy kółkiem myszy'],
err: ["Automatycznie wysyłać raporty o błędach", "Jeśli włączysz tę opcję, możesz pomóc zidentyfikować błędy"]
},
labels: {
uni: "Dostępne jednostki",
con: "Wybierz miasto",
// Smileys
std: "Standard" /* "Standardowe" */,
gre: "Grepolis",
nat: "Przyroda",
ppl: "Ludzie",
oth: "Inne",
// Defense form
ttl: "Podgląd: Obrona miasta",
inf: "Informacje o mieście:",
dev: "Ochyłka",
det: "jednostki lądowe",
prm: "opcje Premium",
sil: "Ilość srebra",
mov: "Ruchy wojsk",
// WW
leg: "Udział w Cudzie",
stg: "Poziom",
tot: "Łącznie",
// Simulator
str: "Siła jednostek",
los: "Straty",
mod: "bez modyfikatorów",
// Comparison box
dsc: "Porównianie jednostek",
hck: "Obuchowa",
prc: "Tnąca",
dst: "Dystansowa",
sea: "Morskie",
att: "Offensywne",
def: "Defensywne",
spd: "Prędkość",
bty: "Łup (surowce)",
cap: "Pojemność transportu",
res: "Koszta (surowce)",
fav: "Łaski",
tim: "Czas rekrutacji (s)",
// Trade
rat: "Stosunek surowców dla wybranej jednostki",
shr: "procent zapełnienia magazynu w docelowym mieście",
per: "Handel procentowy",
// Sent units box
lab: "Wysłane jednostki",
improved_movement: "Przyspieszone ruchy wojsk"
},
buttons: {
sav: "Zapisz", ins: "Wstaw", res: "Anuluj"
}
},
//////////////////////////////////////////////
// Spanish Translation by Juana de Castilla //
//////////////////////////////////////////////
es: {
settings: {
dsc: "DIO-Tools ofrece, entre otras cosas, varias pantallas, ventana de <br>emoticones, opciones de comercio y algunos cambios en el diseño.",
act: "Activar/desactivar características de las herramientas:",
prv: "Vista previa de varias características:"
},
options: {
bir: ["Contador de birremes", "Cuenta los birremes de una ciudad y los suma"],
sml: ["Emoticones", "Código BB para emoticones"],
str: ["Fortaleza de la Unidad", "Añade tabla de fortalezas de cada unidad en varias zonas"],
//trd: [ "Comercio", "Añade en la pestaña de comercio un porcentaje de comercio y reclutamiento y limitadores de Mercado por cada ciudad" ],
per: ["Comercio de porcentual", ""],
rec: ["Comercio de reclutamiento", ""],
cnt: ["Conquistas", "contador de ataques y refuerzos en la pestaña de conquista"],
way: ["Velocidad de tropas", "Muestra movimiento de tropas mejorado en la ventana de ataque/refuerzo"],
sim: ["Simulador", "Adaptación de la ventana del simulador incluyendo recuadro de modificadores"],
spl: ["Ventana de hechizos", "Ventana deslizante y comprimida de los hechizos (memoria posicional)"],
act: ["Ventana de actividad", "Mejora las ventanas de comercio y movimiento de tropas (memoria posicional)"],
pop: ["Popup", "Cambia el popup de favores"],
tsk: ["Barra de tareas", "aumenta la barra de tareas y minimice la recompensa al aparecer"],
irc: ["Chat", 'Sustituye el chat de la alianza con un irc chat. (require FlashPlayer)'],
bbc: ["Formulario de defensa", "Añade en la barra de códigos bb un formulario de defensa"],
com: ["Comparación", "añade ventana de comparación de unidades"],
tic: ["Iconos de la ciudad", "Cada ciudad recibe un icono para el tipo de la ciudad (detección automática)", "Iconos adicionales están disponibles para la selección manual"],
til: ["Lista de la ciudad", "Agrega los iconos de la ciudad a la lista de la ciudad"],
tim: ["Map", "Establece los iconos de la ciudad en el mapa estratégico"],
wwc: ["Maravillas", "Calcula participación & contador de recursos + antes y después teclas de maravillas terminadas (no desactibable ahora!)"],
wwr: ["", ""],
//wwi: [ "World wonder icons",'Adds world wonder icons on the strategic map' ],
con: ["menú contextual", 'Cambia "Elegir ciudad" y "vista de la ciudad" en el menú contextual '],
sen: ["Unidades enviadas", 'Muestra las unidades enviadas en la ventana de ataque/refuerzos'],
tov: ["Información de la ciudad", 'sustituye la vista nueva de ciudad por la ventana antigua'],
scr: ["Rueda raton", 'Puede cambiar las vistas con la rueda del raton'],
err: ["Enviar informes de errores automáticamente", "Si se activa esta opción, puede ayudar a identificar errores."]
},
labels: {
uni: "Unidades disponibles",
con: "Escoger ciudad",
// Smileys
std: "Standard",
gre: "Grepolis",
nat: "Natura",
ppl: "Gente",
oth: "Otros",
// Defense form
ttl: "Vista general: Defensa de la ciudad",
inf: "Información de la ciudad:",
dev: "Desviación",
det: "Unidades de tierra detalladas",
prm: "Bonos Premium",
sil: "Volumen de plata",
mov: "Movimientos de tropas:",
// WW
leg: "WW cuota",
stg: "Nivel",
tot: "Total",
// Simulator
str: "Fortaleza de la Unidad",
los: "Perdida",
mod: "sin influencia del modificador",
// Comparison box
dsc: "Comparación de Unidades",
hck: "Contundente",
prc: "Punzante",
dst: "Distancia",
sea: "Mar",
att: "Ataque",
def: "Defensa",
spd: "Velocidad",
bty: "Botín (recursos)",
cap: "Capacidad de transporte",
res: "Costes (recursos)",
fav: "Favor",
tim: "Tiempo de reclutamiento (s)",
// Trade
rat: "Proporción de recursos de un tipo de unidad",
shr: "Porcentaje de la capacidad de almacenamiento de la ciudad destino",
per: "Porcentaje de comercio",
// Sent units box
lab: "Unidades enviadas",
improved_movement: "Movimiento de tropas mejorados"
},
buttons: {
sav: "Guardar", ins: "Insertar", res: "Reinicio"
}
},
ar: {},
////////////////////////////////////////////
// Portuguese (BR) Translation by HELL //
////////////////////////////////////////////
br: {
settings: {
dsc: "DIO-Tools oferece, entre outras coisas, algumas telas, uma caixa de smiley, opções de comércio <br> e algumas alterações no layout.",
act: "Ativar/desativar recursos do conjunto de ferramentas:",
prv: "Pré-visualização de vários recursos:",
version_old: "Versão não está atualizada",
version_new: "Versão está atualizada",
version_dev: "Versão do desenvolvedor",
version_update: "Atualização",
link_forum: "http://forum.en.grepolis.com/showthread.php?52104&goto=newpost",
link_contact: "http://forum.en.grepolis.com/private.php?do=newpm&u=46211",
forum: "Forum",
author: "Autor",
cat_units: "Unidades",
cat_icons: "Ícones nas Cidades",
cat_forum: "Forum",
cat_trade: "Comércio",
cat_wonders: "Maravilhas do Mundo",
cat_layout: "Layout",
cat_other: "Outros"
},
options: {
bir: ["Contador de Birremes", "Conta as biremes da cidade na cidade"],
ava: ["Unidades Disponíveis", "Conta as unidades disponíveis de todas as cidades"],
sml: ["Smilies", "Estende o bbcode com uma caixa de smiley"],
str: ["Força das Tropas", "Adiciona quadros de força das tropas em diversas áreas"],
tra: ["Capacidade de Transporte", "Mostra a capacidade de transporte ocupado e disponível no menu de unidades"],
per: ["Percentual de comércio", "Estende-se a janela de comércio com um percentual de comércio"],
rec: ["Comércio para recrutamento", "Estende-se a janela de comércio com um comércio de recrutamento"],
cnt: ["Conquistas", "Conta os ataques/apoios na janela de conquista"],
way: ["Velocidade da Tropa", "Displays mostram a possivél velocidade de tropa na janela de ataque/suporte"],
sim: ["Simulador", "Adaptação do layout simulador & exposição permanente da caixa poderes estendida"],
spl: ["Caixa de Poderes Divinos", "Pequena caixa móvel & magnética de poderes divinos (com memória de posição) "],
act: ["Ativar caixas suspensas de comércio e ataque", "Melhorias da exibição de caixas de comércio e atividade tropa (com memória de posição)"],
pop: ["Caixa de favores divino", "Altera a caixa de favores divino por um novo layout"],
tsk: ["Barra de tarefas", "Aumenta a barra de tarefas e minimiza a janela recompensa diária no inicio"],
irc: ["Chat", 'Substituiu o da bate-papo por um bate-papo IRC. (Flash Player requerido)'],
bbc: ["Pedido de Apoio", "Estende a barra de bbcode com uma forma de Pedido de Apoio Automática"],
com: ["Comparação de Unidades", "Adiciona tabelas de comparação de unidade"],
tic: ["Ícones nas Cidades", "Cada cidade recebe um ícone para o tipo de tropas na cidade (detecção automática) "," Ícones adicionais estão disponíveis para seleção manual"],
til: ["Lista das Cidades", "Adiciona os ícones da cidade na lista de cidades"],
tim: ["Mapa", "Mostra os ícones das cidades no mapa estratégico"],
wwc: ["Calculadora de WW", "Cálculo compartilhado & contador de recursos + botões anterior e próxima maravilhas do mundo (atualmente não desactivável!)"],
wwr: ["Classificação", "Classificação das maravilha do mundo redesenhadas"],
wwi: ["Icones", 'Adiciona ícones nas maravilha do mundo no mapa estratégico'],
con: ["Menu de Contexto", 'Troca da "Selecione cidade" e "Visão Geral da Cidade" no menu de contexto'],
sen: ["Unidades Enviadas", 'Shows sent units in the attack/support window'],
tov: ["Visão da Cidade", 'Substitui o novo panorama da cidade, com o estilo da janela antiga'],
scr: ["Roda do Mouse", 'Você pode alterar os pontos de vista com a roda do mouse'],
err: ["Enviar automaticamente relatórios de erros", "Se você ativar essa opção, você pode ajudar a identificar erros."],
her: ["Conquista Thracian", "Redução de tamanho do mapa da conquista Thracian."]
},
labels: {
uni: "Unidades disponíveis",
con: "Selecionar cidade",
// Smileys
std: "Padrão",
gre: "Grepolis",
nat: "Natural",
ppl: "Popular",
oth: "Outros",
hal: "Halloween",
xma: "Natal",
// Defense form
ttl: "Pedido de Apoio",
inf: "Informação da cidade:",
dev: "Desvio",
det: "Unidades Detalhadas",
prm: "Bônus Premium",
sil: "Prata na Gruta",
mov: "Movimentação de Tropas:",
// WW
leg: "WW Maravilhas",
stg: "Level",
tot: "Total",
// Simulator
str: "Força das Unidades",
los: "Perdas",
mod: "Sem modificador de influência",
// Comparison box
dsc: "Comparação de unidades",
hck: "Impacto",
prc: "Corte",
dst: "Arremço",
sea: "Naval",
att: "Ofensivo",
def: "Defensivo",
spd: "Velocidade",
bty: "Saque (recursos)",
cap: "Capacidade de trasporte",
res: "Custo (recursos)",
fav: "Favor",
tim: "Tempo de recrutamento (s)",
// Trade
rat: "Proporção de recursos de um tipo de unidade",
shr: "A partir do armazenamento sobre a cidade de destino",
per: "Percentual de comércio",
// Sent units box
lab: "Unidades enviadas",
improved_movement: "Movimentação de tropas com ajuste de bônus"
},
buttons: {
sav: "Salvar", ins: "Inserir", res: "Resetar"
}
},
pt : {}
};
LANG.ar = LANG.es;
LANG.pt = LANG.br;
// Create JSON
// console.log(JSON.stringify(LANG.en));
// Forum: Choose language
if (uw.location.pathname !== "/game/index") {
LID = uw.location.host.split(".")[1];
}
// Translation GET
function getText(category, name) {
var txt = "???";
if (LANG[LID]) {
if (LANG[LID][category]) {
if (LANG[LID][category][name]) {
txt = LANG[LID][category][name];
} else {
if (LANG.en[category]) {
if (LANG.en[category][name]) {
txt = LANG.en[category][name];
}
}
}
} else {
if (LANG.en[category]) {
if (LANG.en[category][name]) {
txt = LANG.en[category][name];
}
}
}
} else {
if (LANG.en[category]) {
if (LANG.en[category][name]) {
txt = LANG.en[category][name];
}
}
}
return txt;
}
/*******************************************************************************************************************************
* Settings
*******************************************************************************************************************************/
// (De)activation of the features
var options_def = {
bir: true, // Biremes counter
ava: true, // Available units
sml: true, // Smileys
str: true, // Unit strength
tra: true, // Transport capacity
per: true, // Percentual Trade
rec: true, // Recruiting Trade
way: true, // Troop speed
cnt: true, // Attack/support counter
sim: true, // Simulator
spl: true, // Spell box
act: false,// Activity boxes
tsk: true, // Task bar
irc: true, // IRC-Chat
pop: true, // Favor popup
bbc: true, // BBCode bar
com: true, // Unit comparison
tic: true, // Town icons
til: true, // Town icons: Town list
tim: true, // Town icons: Map
wwc: true, // World wonder counter
wwr: true, // World wonder ranking
wwi: true, // World wonder icons
con: true, // Context menu
sen: true, // Sent units
tov: false,// Town overview
scr: true, // Mausrad,
err: false,// Error Reports
her: true // Thrakische Eroberung
};
if (uw.location.pathname === "/game/index") {
for (var opt in options_def) {
if (options_def.hasOwnProperty(opt)) {
if (DATA.options[opt] === undefined) {
DATA.options[opt] = options_def[opt];
}
}
}
}
var version_text = '', version_color = 'black';
function getLatestVersion() {
$('<style id="dio_version">' +
'#version_info .version_icon { background: url(http://666kb.com/i/ct1etaz0uyohw402i.png) -50px -50px no-repeat; width:25px; height:25px; float:left; } ' +
'#version_info .version_icon.red { -webkit-filter: hue-rotate(-100deg); } ' +
'#version_info .version_icon.green { -webkit-filter: hue-rotate(0deg); } ' +
'#version_info .version_icon.blue { -webkit-filter: hue-rotate(120deg); } ' +
'#version_info .version_text { line-height: 2; margin: 0px 6px 0px 6px; float: left;} ' +
'</style>').appendTo("head");
var v_info = $('#version_info');
if (version_text === '') {
$.ajax({
type: "GET", url: "https://diotools.de/scripts/version.php",
success: function (response) {
var latest_version = parseFloat(response),
current_version = parseFloat(version);
if (current_version < latest_version) {
version_text = "<div class='version_icon red'></div><div class='version_text'>" + getText('settings', 'version_old') + "</div><div class='version_icon red'></div>" +
'<a class="version_text" href="https://diotools.de/downloads/DIO-TOOLS.user.js" target="_blank">--> Update</a>';
version_color = 'crimson';
} else if (current_version == latest_version) {
version_text = "<div class='version_icon green'></div><div class='version_text'>" + getText('settings', 'version_new') + "</div><div class='version_icon green'></div>";
version_color = 'darkgreen';
} else {
version_text = "<div class='version_icon blue'></div><div class='version_text'>" + getText('settings', 'version_dev') + "</div><div class='version_icon blue'></div>";
version_color = 'darkblue';
}
v_info.html(version_text).css({color: version_color});
}
});
} else {
v_info.html(version_text).css({color: version_color});
}
}
// Add DIO-Tools to grepo settings
function settings() {
var wid = $(".settings-menu").get(0).parentNode.id;
if (!$("#dio_tools").get(0)) {
$(".settings-menu ul:last").append('<li id="dio_li"><img id="dio_icon" src="http://www.greensmilies.com/smile/smiley_emoticons_smile.gif"></div> <a id="dio_tools" href="#"> DIO-Tools</a></li>');
}
$(".settings-link").click(function () {
$('.section').each(function () {
this.style.display = "block";
});
$('.settings-container').removeClass("dio_overflow");
$('#dio_bg_medusa').css({display: "none"});
if ($('#dio_settings').get(0)) {
$('#dio_settings').get(0).style.display = "none";
}
});
$("#dio_tools").click(function () {
if ($('.email').get(0)) {
$('.settings-container').removeClass("email");
}
$('.settings-container').addClass("dio_overflow");
$('#dio_bg_medusa').css({display: "block"});
if (!$('#dio_settings').get(0)) {
// Styles
$('<style id="dio_settings_style">' +
// Chrome Scroollbar Style
'#dio_settings ::-webkit-scrollbar { width: 13px; } ' +
'#dio_settings ::-webkit-scrollbar-track { background-color: rgba(130, 186, 135, 0.5); border-top-right-radius: 4px; border-bottom-right-radius: 4px; } ' +
'#dio_settings ::-webkit-scrollbar-thumb { background-color: rgba(87, 121, 45, 0.5); border-radius: 3px; } ' +
'#dio_settings ::-webkit-scrollbar-thumb:hover { background-color: rgba(87, 121, 45, 0.8); } ' +
'#dio_settings table tr :first-child { text-align:center; vertical-align:top; } ' +
'#dio_settings #version_info { font-weight:bold;height: 35px;margin-top:-5px; } ' +
'#dio_settings #version_info img { margin:-1px 2px -8px 0px; } ' +
'#dio_settings .icon_types_table { font-size:0.7em; line-height:2.5; border:1px solid green; border-spacing:10px 2px; border-radius:5px; } ' +
'#dio_settings .icon_types_table td { text-align:left; } ' +
'#dio_settings table p { margin:0.2em 0em; } ' +
'#dio_settings .checkbox_new .cbx_caption { white-space:nowrap; margin-right:10px; font-weight:bold; } ' +
'#dio_settings .dio_settings_tabs {width:auto; border:2px solid darkgreen; background:#2B241A; padding:1px 1px 0px 1px; right:auto; border-top-left-radius:5px; border-top-right-radius:5px; border-bottom:0px;} ' +
'#dio_settings .dio_settings_tabs li { float:left; } ' +
'#dio_settings .icon_small { margin:0px; } ' +
'#dio_settings img { max-width:90px; max-height:90px; margin-right:10px; } ' +
'#dio_settings .content { border:2px solid darkgreen; border-radius:5px; border-top-left-radius:0px; background:rgba(31, 25, 12, 0.1); top:23px; position:relative; padding:10px; height:350px; overflow-y:auto; } ' +
'#dio_settings .content .content_category { display:none; border-spacing:5px; } ' +
'#dio_settings .dio_options_table legend { font-weight:bold; } ' +
'#dio_settings .dio_options_table p { margin:0px; } ' +
'#dio_settings #donate_btn { -webkit-filter: hue-rotate(45deg); } ' +
'#donate_btn { background: url(' + dio_sprite + '); width:100px; height:26px;} ' +
'#donate_btn.de { background-position: 0px 250px } ' +
'#donate_btn.en { background-position: 0px 300px } ' +
'#dio_hall table { border-spacing: 9px 3px; } ' +
'#dio_hall table th { text-align:left !important;color:green;text-decoration:underline;padding-bottom:10px; } ' +
'#dio_hall table td.value { text-align: right; } ' +
'#dio_hall table td.laurel.green { background: url("/images/game/ally/founder.png") no-repeat; height:18px; width:18px; background-size:100%; } ' +
'#dio_hall table td.laurel.bronze { background: url("https://diotools.de/images/game/laurel_sprite.png") no-repeat 25%; height:18px; width:18px; } ' +
'#dio_hall table td.laurel.silver { background: url("https://diotools.de/images/game/laurel_sprite.png") no-repeat 50%; height:18px; width:18px; } ' +
'#dio_hall table td.laurel.gold { background: url("https://diotools.de/images/game/laurel_sprite.png") no-repeat 75%; height:18px; width:18px; } ' +
'#dio_hall table td.laurel.blue { background: url("https://diotools.de/images/game/laurel_sprite.png") no-repeat 100%; height:18px; width:18px; } ' +
'</style>').appendTo('head');
$('.settings-container').append(
'<div id="dio_settings" class="player_settings section"><div id="dio_bg_medusa"></div>' +
'<div class="game_header bold"><a href="#" target="_blank" style="color:white">DIO-Tools (v' + version + ')</a></div>' +
// Check latest version
'<div id="version_info"><img src="http://666kb.com/i/csmicltyu4zhiwo5b.gif" /></div>' +
// Donate button
'<div style="position:absolute; left: 495px;top: 40px;"><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3EWUQUTMC5VKS" target="_blank">' +
'<div id="donate_btn" class="' + LID + '" alt="Donate"></div></a></div>' +
// Settings navigation
'<ul class="menu_inner dio_settings_tabs">' +
'<li><a class="submenu_link active" href="#" id="dio_units"><span class="left"><span class="right"><span class="middle">' + getText("settings", "cat_units") + '</span></span></span></a></li>' +
'<li><a class="submenu_link" href="#" id="dio_icons"><span class="left"><span class="right"><span class="middle">' + getText("settings", "cat_icons") + '</span></span></span></a></li>' +
'<li><a class="submenu_link" href="#" id="dio_forum"><span class="left"><span class="right"><span class="middle">' + getText("settings", "cat_forum") + '</span></span></span></a></li>' +
'<li><a class="submenu_link" href="#" id="dio_trade"><span class="left"><span class="right"><span class="middle">' + getText("settings", "cat_trade") + '</span></span></span></a></li>' +
'<li><a class="submenu_link" href="#" id="dio_wonder"><span class="left"><span class="right"><span class="middle">' + getText("settings", "cat_wonders") + '</span></span></span></a></li>' +
'<li><a class="submenu_link" href="#" id="dio_layout"><span class="left"><span class="right"><span class="middle">' + getText("settings", "cat_layout") + '</span></span></span></a></li>' +
'<li><a class="submenu_link" href="#" id="dio_other"><span class="left"><span class="right"><span class="middle">' + getText("settings", "cat_other") + '</span></span></span></a></li>' +
'</ul>' +
// Settings content
'<DIV class="content">' +
// Units tab
'<table id="dio_units_table" class="content_category visible"><tr>' +
'<td><img src="https://diotools.de/images/game/settings/units/available_units.png" alt="" /></td>' +
'<td><div id="ava" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "ava")[0] + '</div></div>' +
'<p>' + getText("options", "ava")[1] + '</p></td>' +
'</tr><tr>' +
'<td><img src="https://diotools.de/images/game/settings/units/sent_units.png" alt="" /></td>' +
'<td><div id="sen" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "sen")[0] + '</div></div>' +
'<p>' + getText("options", "sen")[1] + '</p></td>' +
'</tr><tr>' +
'<td><img src="https://diotools.de/images/game/settings/units/unit_strength.png" alt="" /></td>' +
'<td><div id="str" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "str")[0] + '</div></div>' +
'<p>' + getText("options", "str")[1] + '</p></td>' +
'</tr><tr>' +
'<td><img src="https://diotools.de/images/game/settings/units/transport_capacity.png" alt="" /></td>' +
'<td><div id="tra" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "tra")[0] + '</div></div>' +
'<p>' + getText("options", "tra")[1] + '</p></td>' +
'</tr><tr>' +
'<td><img src="https://diotools.de/images/game/settings/units/unit_comparison.png" alt="" /></td>' +
'<td><div id="com" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "com")[0] + '</div></div>' +
'<p>' + getText("options", "com")[1] + '</p></td>' +
'</tr></table>' +
// Icons tab
'<table id="dio_icons_table" class="content_category"><tr>' +
'<td><img src="https://diotools.de/images/game/settings/townicons/townicons.png" alt="" /></td>' +
'<td><div id="tic" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "tic")[0] + '</div></div>' +
'<p>' + getText("options", "tic")[1] + '</p>' +
'<table class="icon_types_table">' +
'<tr><td style="width:115px"><div class="icon_small townicon_lo"></div> Land Offensive</td>' + '<td><div class="icon_small townicon_fo"></div> Fly Offensive</td></tr>' +
'<tr><td><div class="icon_small townicon_ld"></div> Land Defensive</td>' + '<td><div class="icon_small townicon_fd"></div> Fly Defensive</td></tr>' +
'<tr><td><div class="icon_small townicon_so"></div> Navy Offensive</td>' + '<td><div class="icon_small townicon_no"></div> Outside</td></tr>' +
'<tr><td><div class="icon_small townicon_sd"></div> Navy Defensive</td>' + '<td><div class="icon_small townicon_po"></div> Empty</td></tr>' +
'</table><br>' +
'<p>' + getText("options", "tic")[2] + ':</p>' +
'<div class="icon_small townicon_sh"></div><div class="icon_small townicon_di"></div><div class="icon_small townicon_un"></div><div class="icon_small townicon_ko"></div>' +
'<div class="icon_small townicon_ti"></div><div class="icon_small townicon_gr"></div><div class="icon_small townicon_dp"></div><div class="icon_small townicon_re"></div>' +
'<div class="icon_small townicon_wd"></div><div class="icon_small townicon_st"></div><div class="icon_small townicon_si"></div><div class="icon_small townicon_bu"></div>' +
'<div class="icon_small townicon_he"></div><div class="icon_small townicon_ch"></div><div class="icon_small townicon_bo"></div><div class="icon_small townicon_fa"></div>' +
'<div class="icon_small townicon_wo"></div>' +
'</td>' +
'</tr><tr>' +
'<td><img src="https://diotools.de/images/game/settings/townicons/townlist.png" alt="" style="border: 1px solid rgb(158, 133, 78);" /></td>' +
'<td><div id="til" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "til")[0] + '</div></div>' +
'<p>' + getText("options", "til")[1] + '</p></td>' +
'</tr><tr>' +
'<td><img src="https://diotools.de/images/game/settings/townicons/map.png" alt="" /></td>' +
'<td><div id="tim" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "tim")[0] + '</div></div>' +
'<p>' + getText("options", "tim")[1] + '</p></td>' +
'</tr></table>' +
// Forum tab
'<table id="dio_forum_table" class="content_category"><tr>' +
'<td><img src="https://diotools.de/images/game/settings/forum/smiley_box.png" alt="" /></td>' +
'<td><div id="sml" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "sml")[0] + '</div></div>' +
'<p>' + getText("options", "sml")[1] + '</p>' +
'<img src="http://www.greensmilies.com/smile/smiley_emoticons_mttao_wassermann.gif" /> <img src="http://666kb.com/i/cigrqlp2odi2kqo24.gif" /> ' +
'<img src="http://666kb.com/i/cifvfsu3e2sdiipn0.gif" alt="" /> <img src="http://666kb.com/i/cigmv8wnffb3v0ifg.gif" /> ' +
'<img src="http://666kb.com/i/cj2byjendffymp88t.gif" alt="" /> <img src="http://666kb.com/i/cj1l9gndtu3nduyvi.gif" /> ' +
'<img src="http://666kb.com/i/cigrmpfofys5xtiks.gif" alt="" />' + //'<img src="http://666kb.com/i/cifohielywpedbyh8.gif" />'+
'<br><br><br></td>' +
'</tr><tr>' +
'<td><img src="https://diotools.de/images/game/settings/forum/def_formular.png" alt="" /></td>' +
'<td><div id="bbc" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "bbc")[0] + '</div></div>' +
'<p>' + getText("options", "bbc")[1] + '</p><br><img src="http://s1.directupload.net/images/140401/9b2ydh82.png" alt="" style="max-width:none !important;" /></td>' +
'</tr></table>' +
// Trade tab
'<table id="dio_trade_table" class="content_category"><tr>' +
'<td><img src="https://diotools.de/images/game/settings/trade/recruiting_trade.png" /></td>' +
'<td><div id="rec" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "rec")[0] + '</div></div>' +
'<p>' + getText("options", "rec")[1] + '</p><br>' +
/*
'<p><u>Beispiel Feuerschiffe:</u><br>'+
'<p>Verhältnisauswahl</p>'+
'<table style="font-size: 0.7em;line-height: 2.5;border: 1px solid green;border-spacing: 10px 2px;border-radius: 5px;">'+
'<tr><th></th><th><div class="icon_small townicon_wd"></div></th><td></td><th><div class="icon_small townicon_st"></div></th><td></td><th><div class="icon_small townicon_si"></div></th></tr>'+
'<tr><td>Kosten</td><td>1300</td><td></td><td>300</td><td></td><td>800</td></tr>'+
'<tr><td>Verhältnis</td><td>1</td><td>:</td><td>0.23</td><td>:</td><td>0.62</td></tr>'+
'</table>'+
'<p>Lagergröße Zielstadt: 25500 - 1000 Puffer (=100%)</p>'+
'<p>Handelsmenge 25%: </p>'+
'<table style="font-size: 0.7em;line-height: 2.5;">'+
'<tr><td>4 x 25%</td><td>4 x 25%</td><td>...</td></tr>'+
'<tr><td><img src="http://s7.directupload.net/images/140920/uc4dsyp9.png" style="width:60px" /></td>'+
'<td><img src="http://s7.directupload.net/images/140920/uc4dsyp9.png" style="width:60px" /></td><td>...</td></tr>'+
'</table>'+
//'- Versenden von 35 einzelnen Rohstoffportionen im Anteil 20% (z.B. 4900 Holz, 1130 Stein, 3015 Silber bei Lagerkapazität von 25.500), das heißt 5 Portionen für einen Rekrutierungsslot'+
//'- nach Ankommen von jeweils 5 Portionen, Einheiten in Auftrag geben (19-21 Feuerschiffe bei maximaler Lagerkapazität)'+
//'Ein Puffer von 1000 Rohstoffeinheiten wird dabei von der Lagerkapazität der Zielstadt abgezogen, damit Rekrutierungsreste und neu produzierte Rohstoffe nicht gleich zum Überlaufen des Lagers führen.'+
//'Das Ganze beschleunigt das Befüllen der Rekrutierungsschleifen enorm und es gehen dabei keine Rohstoffe verloren.</p>'+
'<br><br><br></td>'+
*/
'</tr><tr>' +
'<td><img src="https://diotools.de/images/game/settings/trade/percentage_trade.png" /></td>' +
'<td><div id="per" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "per")[0] + '</div></div>' +
'<p>' + getText("options", "per")[1] + '</p><br></td>' +
/*
'</tr><tr>'+
'<td><img src="http://s7.directupload.net/images/140917/tveb5n33.png" /></td>'+
'<td><div id="trd2" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">Trade Limit Marker</div></div>'+
'<p></p></td>'+
*/
'</tr></table>' +
// World wonder tab
'<table id="dio_wonder_table" class="content_category"><tr>' +
'<td><img src="https://diotools.de/images/game/settings/wonders/share.png" alt="" /></td>' +
'<td><div id="wwc" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "wwc")[0] + '</div></div>' +
'<p>' + getText("options", "wwc")[1] + '</p><br/>' +
'<img src="https://diotools.de/images/game/settings/wonders/share_calculator.png" alt="" style="max-width:none !important;" /></td>' +
'</tr><tr>' +
'<td><img src="https://diotools.de/images/game/settings/wonders/ranking.png" alt="" /></td>' +
'<td><div id="wwr" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "wwr")[0] + '</div></div>' +
'<p>' + getText("options", "wwr")[1] + '</p></td>' +
'</tr><tr>' +
'<td><img src="https://diotools.de/images/game/settings/wonders/icons.png" alt="" /></td>' +
'<td><div id="wwi" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "wwi")[0] + '</div></div>' +
'<p>' + getText("options", "wwi")[1] + '</p></td>' +
'</tr></table>' +
// Layout tab
'<table id="dio_layout_table" class="content_category"><tr>' +
'<td><img src="https://diotools.de/images/game/settings/layout/simulator.png" alt="" /></td>' +
'<td><div id="sim" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "sim")[0] + '</div></div>' +
'<p>' + getText("options", "sim")[1] + '</p></td>' +
'</tr><tr>' +
'<td><img src="https://diotools.de/images/game/settings/layout/spellbox.png" alt="" /></td>' +
'<td><div id="spl" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "spl")[0] + '</div></div>' +
'<p>' + getText("options", "spl")[1] + '</p></td>' +
'</tr><tr>' +
'<td><img src="https://diotools.de/images/game/settings/layout/taskbar.png" alt="" /></td>' +
'<td><div id="tsk" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "tsk")[0] + '</div></div>' +
'<p>' + getText("options", "tsk")[1] + '</p></td>' +
'</tr><tr>' +
'<td><img src="https://diotools.de/images/game/settings/layout/favor_popup.png" alt="" /></td>' +
'<td><div id="pop" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "pop")[0] + '</div></div>' +
'<p>' + getText("options", "pop")[1] + '</p></td>' +
'</tr><tr>' +
'<td><img src="https://diotools.de/images/game/settings/layout/contextmenu.png" alt="" /></td>' +
'<td><div id="con" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "con")[0] + '</div></div>' +
'<p>' + getText("options", "con")[1] + '</p></td>' +
'</tr><tr>' +
'<td><img src="https://diotools.de/images/game/settings/layout/activity_boxes.png" alt="" /></td>' +
'<td><div id="act" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "act")[0] + '</div></div>' +
'<p>' + getText("options", "act")[1] + '</p></td>' +
'</tr></table>' +
// Other Stuff tab
'<table id="dio_other_table" class="content_category"><tr>' +
'<td><img src="https://diotools.de/images/game/settings/misc/troop_speed.png" style="border: 1px solid rgb(158, 133, 78);" alt="" /></td>' +
'<td><div id="way" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "way")[0] + '</div></div>' +
'<p>' + getText("options", "way")[1] + '</p></td>' +
'</tr><tr>' +
'<td><img src="https://diotools.de/images/game/settings/misc/chat.png" alt="" /></td>' +
'<td><div id="irc" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "irc")[0] + '</div></div>' +
'<p>' + getText("options", "irc")[1] + '</p></td>' +
'</tr><tr>' +
'<td><img src="https://diotools.de/images/game/settings/misc/conquer_counter.png" style="border: 1px solid rgb(158, 133, 78);" alt="" /></td>' +
'<td><div id="cnt" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "cnt")[0] + '</div></div>' +
'<p>' + getText("options", "cnt")[1] + '</p></td>' +
'</tr><tr>' +
'<td><img src="https://diotools.de/images/game/settings/misc/mousewheel_zoom.png" alt="" /></td>' +
'<td><div id="scr" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "scr")[0] + '</div></div>' +
'<p>' + getText("options", "scr")[1] + '</p><br><br></td>' +
'</tr><tr>' +
'<td><img src="" alt="" /></td>' +
'<td><div id="err" class="checkbox_new"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("options", "err")[0] + '</div></div>' +
'<p>' + getText("options", "err")[1] + '</p></td>' +
'</tr></table>' +
// Hall of DIO-Tools tab
'<div id="dio_hall" class="content_category">'+
"<p>I like to thank all of you who helped the development of DIO-Tools by donating or translating!</p>"+
'<table style="float:left;margin-right: 75px;">'+
'<tr><th colspan="3">Donations</th></tr>'+
(function(){
var donations = [
["Eduard R", 50],
["Gregoire L", 25],
["Renee A", 20], ["Dirk R", 20], ["Patti T", 20],
["Klaus N", 15],
["Marco S", 10], ["Richard L", 10], ["Carsten K", 10], ["Tatiana H", 10], ["Ursula S", 10], ["Susanne S", 10], ["Falk T", 10],
["Belinda M", 8], ["Wolfgang R", 8],
["Miguel B", 7],
["Antje S", 5], ["Hans-Jörg S", 5], ["Deanna P", 5], ["ForexTraction", 5], ["Rene F", 5], ["Rüdiger D", 5], ["Hans Hermann S", 5],
["Siegbert M", 5], ["Wilhelm B", 5], ["Peter P", 5], ["Helga W", 5], ["Lydia R", 5],
["Michael S", 3],
["Mario P", 2], ["Artur G", 2], ["Heiko K", 2], ["Alexander B", 2], ["Dick N", 2],
["Marcel G", 1], ["Ramona L", 1], ["Dennis S", 1], ["Konstandinos K", 1], ["Sarl T", 1], ["Jagadics I", 1], ["Andreas R", 1],
["Peter F", 1], ["Vinicio G", 1], ["Marielle M", 1], ["Christian B", 1], ["Bernd W", 1], ["Maria N", 1], ["Thomas W", 1],
["Domenik F", 1], ["Oliver H", 1], ["Jens R", 1], ["Nicole S", 1], ["Hartmut S", 1], ["Alex L", 1], ["Andreas S", 1]
];
var donation_table = "";
for(var d = 0; d < donations.length; d++){
var donation_class = "";
switch(donations[d][1]){
case 50: donation_class = "gold"; break;
case 25: donation_class = "silver"; break;
case 20: donation_class = "bronze"; break;
default: donation_class = "green"; break;
}
donation_table += '<tr class="donation"><td class="laurel '+ donation_class +'"></td><td>' + donations[d][0] + '</td><td class="value">' + donations[d][1] + '€</td></tr>';
}
return donation_table;
})() +
'</table>'+
'<table>'+
'<tr><th colspan="3">Translations</th></tr>'+
(function(){
var translations = [
["eclat49", "FR"],
["MrBobr", "RU"],
["anpu", "PL"],
["Juana de Castilla", "ES"],
["HELL", "BR"]
];
var translation_table = "";
for(var d = 0; d < translations.length; d++){
translation_table += '<tr class="translation"><td class="laurel blue"></td><td >' + translations[d][0] + '</td><td class="value">' + translations[d][1] + '</td></tr>';
}
return translation_table;
})() +
'</table>'+
'</div>' +
'</DIV>' +
// Links (Forum, PM, ...)
'<div style="bottom: -50px;font-weight: bold;position: absolute;width: 99%;">' +
'<a id="hall_of_diotools" href="#" style="font-weight:bold; float:left">' +
'<img src="/images/game/ally/founder.png" alt="" style="float:left;height:19px;margin:0px 5px -3px;"><span>Hall of DIO-Tools</span></a>' +
'<span class="bbcodes_player bold" style="font-weight:bold; float:right; margin-left:20px;">' + getText("settings", "author") + ': ' +
'<a id="link_contact" href=' + getText("settings", "link_contact") + ' target="_blank">Diony</a></span>' +
'<a id="link_forum" href=' + getText("settings", "link_forum") + ' target="_blank" style="font-weight:bold; float:right">' +
'<img src="http://forum.de.grepolis.com/grepolis/statusicon/forum_new-16.png" alt="" style="margin: 0px 5px -3px 5px;" /><span>' + getText("settings", "forum") + '</span></a>' +
'</div>' +
'</div></div>');
getLatestVersion();
// Tab event handler
$('#dio_settings .dio_settings_tabs .submenu_link').click(function () {
if (!$(this).hasClass("active")) {
$('#dio_settings .dio_settings_tabs .submenu_link.active').removeClass("active");
$(this).addClass("active");
$("#dio_settings .visible").removeClass("visible");
$("#" + this.id + "_table").addClass("visible");
}
});
//
$('#hall_of_diotools').click(function () {
$('#dio_settings .dio_settings_tabs .submenu_link.active').removeClass("active");
$("#dio_settings .visible").removeClass("visible");
$("#dio_hall").addClass("visible");
});
$("#dio_settings .checkbox_new").click(function () {
$(this).toggleClass("checked").toggleClass("disabled").toggleClass("green");
toggleActivation(this.id);
DATA.options[this.id] = $(this).hasClass("checked");
saveValue("options", JSON.stringify(DATA.options));
});
for (var e in DATA.options) {
if (DATA.options.hasOwnProperty(e)) {
if (DATA.options[e] === true) {
$("#" + e).addClass("checked").addClass("green");
} else {
$("#" + e).addClass("disabled");
}
}
}
$('#dio_save').click(function () {
$('#dio_settings .checkbox_new').each(function () {
var act = false;
if ($("#" + this.id).hasClass("checked")) {
act = true;
}
DATA.options[this.id] = act;
});
saveValue("options", JSON.stringify(DATA.options));
});
}
$('.section').each(function () {
this.style.display = "none";
});
$('#dio_settings').get(0).style.display = "block";
});
}
function toggleActivation(opt) {
var FEATURE, activation = true;
switch (opt) {
case "sml":
FEATURE = SmileyBox;
break;
case "bir":
FEATURE = BiremeCounter;
break;
case "str":
FEATURE = UnitStrength.Menu;
break;
case "tra":
FEATURE = TransportCapacity;
break;
case "ava":
FEATURE = AvailableUnits;
break;
case "sim":
FEATURE = Simulator;
break;
case "spl":
FEATURE = Spellbox;
break;
case "tsk":
FEATURE = Taskbar;
break;
case "scr":
FEATURE = MouseWheelZoom;
break;
case "irc":
FEATURE = Chat;
break;
case "com":
FEATURE = UnitComparison;
break;
case "pop":
FEATURE = FavorPopup;
break;
case "con":
FEATURE = ContextMenu;
break;
case "tic":
FEATURE = TownIcons;
break;
case "tim":
FEATURE = TownIcons.Map;
break;
case "til":
FEATURE = TownList;
break;
case "sen":
FEATURE = SentUnits;
break;
case "act":
FEATURE = ActivityBoxes;
break;
case "wwc":
FEATURE = WorldWonderCalculator;
break;
case "wwr":
FEATURE = WorldWonderRanking;
break;
case "wwi":
FEATURE = WorldWonderIcons;
break;
case "pom":
FEATURE = PoliticalMap;
break;
default:
activation = false;
break;
}
if (activation) {
if (DATA.options[opt]) {
FEATURE.deactivate();
} else {
FEATURE.activate();
}
}
}
function addSettingsButton() {
var tooltip_str = "DIO-Tools: " + (DM.getl10n("layout", "config_buttons").settings || "Settings");
$('<div class="btn_settings circle_button dio_settings"><div class="dio_icon js-caption"></div></div>').appendTo(".gods_area");
// Style
$('<style id="dio_settings_button" type="text/css">' +
'#ui_box .btn_settings.dio_settings { top:95px; right:103px; z-index:10; } ' +
'#ui_box .dio_settings .dio_icon { margin:7px 0px 0px 4px; width:24px; height:24px; background:url(http://666kb.com/i/cifvfsu3e2sdiipn0.gif) no-repeat 0px 0px; background-size:100% } ' +
'#ui_box .dio_settings .dio_icon.click { margin-top:8px; }' +
'</style>').appendTo('head');
// Tooltip
$('.dio_settings').tooltip(tooltip_str);
// Mouse Events
$('.dio_settings').on('mousedown', function () {
$('.dio_icon').addClass('click');
});
$('.dio_settings').on('mouseup', function () {
$('.dio_icon').removeClass('click');
});
$('.dio_settings').click(openSettings);
}
var diosettings = false;
function openSettings() {
if (!GPWindowMgr.getOpenFirst(Layout.wnd.TYPE_PLAYER_SETTINGS)) {
diosettings = true;
}
Layout.wnd.Create(GPWindowMgr.TYPE_PLAYER_SETTINGS, 'Settings');
}
var exc = false, sum = 0, ch = ["FBADAF", "IGCCJB"], alpha = 'ABCDEFGHIJ';
function a() {
var pA = PID.toString(), pB = "";
for (var c in pA) {
if (pA.hasOwnProperty(c)) {
pB += alpha[pA[parseInt(c, 10)]];
}
}
sum = 0;
for (var b in ch) {
if (ch.hasOwnProperty(b)) {
if (pB !== ch[b]) {
exc = true;
} else {
exc = false;
return;
}
for (var s in ch[b]) {
if (ch[b].hasOwnProperty(s)) {
sum += alpha.indexOf(ch[b][s]);
}
}
}
}
}
var autoTownTypes, manuTownTypes, population, sentUnitsArray, biriArray, spellbox, commandbox, tradebox, wonder, wonderTypes;
function setStyle() {
// Settings
$('<style id="dio_settings_style" type="text/css">' +
'#dio_bg_medusa { background:url(' + dio_sprite + ') -160px -43px no-repeat; height: 510px; width: 260px; right: -10px; z-index: -1; position: absolute;} ' +
'.dio_overflow { overflow: hidden; } ' +
'#dio_icon { width:15px; vertical-align:middle; margin-top:-2px; } ' +
'#quackicon { width:15px !important; vertical-align:middle !important; margin-top:-2px; height:12px !important; } ' +
'#dio_settings .green { color: green; } ' +
'#dio_settings .visible { display:block !important; } ' +
'</style>').appendTo('head');
// Town Icons
$('<style id="dio_icons" type="text/css">.icon_small { position:relative; height:20px; width:25px; margin-left:-25px; }</style>').appendTo('head');
// Tutorial-Quest Container
$('<style id="dio_quest_container" type="text/css"> #tutorial_quest_container { top: 130px } </style>').appendTo('head');
// Velerios
$('<style id="dio_velerios" type="text/css"> #ph_trader_image { background-image: url(http://s14.directupload.net/images/140826/mh8k8nyw.jpg); } </style>').appendTo('head');
// http://s7.directupload.net/images/140826/bgqlsdrf.jpg
// Specific player wishes
if (PID == 1212083) {
$('<style id="dio_wishes" type="text/css"> #world_end_info { display: none; } </style>').appendTo('head');
}
}
if (uw.location.pathname === "/game/index") {
setStyle();
}
function loadFeatures() {
if (typeof(ITowns) !== "undefined") {
autoTownTypes = {};
manuTownTypes = DATA.townTypes;
population = {};
sentUnitsArray = DATA.sentUnits;
biriArray = DATA.biremes;
spellbox = DATA.spellbox;
commandbox = DATA.commandbox;
tradebox = DATA.tradebox;
wonder = DATA.worldWonder;
wonderTypes = DATA.worldWonderTypes;
var DIO_USER = {'name': uw.Game.player_name, 'market': MID};
saveValue("dio_user", JSON.stringify(DIO_USER));
$.Observer(uw.GameEvents.game.load).subscribe('DIO_START', function (e, data) {
a();
// English => default language
if (!LANG[LID]) {
LID = "en";
}
if ((ch.length == 2) && exc && (sum == 42)) {
// AJAX-EVENTS
setTimeout(function () {
ajaxObserver();
}, 0);
addSettingsButton();
addFunctionToITowns();
if (DATA.options.tsk) {
setTimeout(function () {
minimizeDailyReward();
Taskbar.activate();
}, 0);
}
//addStatsButton();
fixUnitValues();
setTimeout(function () {
var waitCount = 0;
// No comment... it's Grepolis... i don't know... *rolleyes*
function waitForGrepoLazyLoading() {
if (typeof(ITowns.townGroups.getGroupsDIO()[-1]) !== "undefined" && typeof(ITowns.getTown(Game.townId).getBuildings) !== "undefined") {
try {
// Funktion wird manchmal nicht ausgeführt:
var units = ITowns.getTown(Game.townId).units();
getAllUnits();
setInterval(function () {
getAllUnits();
}, 900000); // 15min
if (DATA.options.ava) {
setTimeout(function () {
AvailableUnits.activate();
}, 0);
}
if (DATA.options.tic) {
setTimeout(function () {
TownIcons.activate();
}, 0);
}
if (DATA.options.tim) {
setTimeout(function () {
TownIcons.Map.activate();
}, 0);
}
if (DATA.options.til) {
setTimeout(function () {
TownList.activate();
}, 0);
}
} catch(e){
if(waitCount < 12) {
waitCount++;
console.warn("DIO-Tools | Fehler | getAllUnits | units() fehlerhaft ausgeführt?", e);
// Ausführung wiederholen
setTimeout(function () {
waitForGrepoLazyLoading();
}, 5000); // 5s
}
else {
errorHandling(e, "waitForGrepoLazyLoading2");
}
}
}
else {
var e = { "stack": "getGroups() = " + typeof(ITowns.townGroups.getGroupsDIO()[-1]) + ", getBuildings() = " + typeof(ITowns.getTown(Game.townId).getBuildings) };
if(waitCount < 12) {
waitCount++;
console.warn("DIO-Tools | Fehler | getAllUnits | " + e.stack);
// Ausführung wiederholen
setTimeout(function () {
waitForGrepoLazyLoading();
}, 5000); // 5s
}
else {
errorHandling(e, "waitForGrepoLazyLoading2");
}
}
}
waitForGrepoLazyLoading();
}, 0);
if (DATA.options.pop) {
setTimeout(function () {
FavorPopup.activate();
}, 0);
}
if (DATA.options.spl) {
setTimeout(function () {
Spellbox.activate();
}, 0);
}
imageSelectionProtection();
if (DATA.options.con) {
setTimeout(function () {
ContextMenu.activate();
}, 0);
}
if (DATA.options.act) {
setTimeout(function () {
ActivityBoxes.activate();
}, 0);
}
if (DATA.options.str) {
setTimeout(function () {
UnitStrength.Menu.activate();
hideNavElements();
}, 0);
}
if (DATA.options.tra) {
setTimeout(function () {
TransportCapacity.activate();
}, 0);
}
if (DATA.options.com) {
setTimeout(function () {
UnitComparison.activate();
}, 0);
}
if (DATA.options.sml) {
setTimeout(function () {
SmileyBox.activate();
}, 0);
}
if (DATA.options.irc) {
setTimeout(function () {
Chat.activate();
}, 0);
}
if (DATA.options.scr) {
setTimeout(function () {
MouseWheelZoom.activate();
}, 0);
}
if (DATA.options.sim) {
setTimeout(function () {
Simulator.activate();
}, 0);
}
if (DATA.options.sen) {
setTimeout(function () {
SentUnits.activate();
}, 0);
}
if (DATA.options.wwc) {
setTimeout(function () {
WorldWonderCalculator.activate();
}, 0);
}
if (PID === 84367 || PID === 104769 || PID === 1291505) {
setTimeout(function() {
PoliticalMap.activate();
//PoliticalMap.getAllianceColors();
//Statistics.activate();
}, 0);
}
setTimeout(function () {
counter(uw.Timestamp.server());
setInterval(function () {
counter(uw.Timestamp.server());
}, 21600000);
}, 60000);
// Notifications
setTimeout(function () {
Notification.init();
}, 0);
// setTimeout(function(){ HolidaySpecial.activate(); }, 0);
// Execute once to get the world wonder types and coordinates
setTimeout(function () {
if (!wonderTypes.great_pyramid_of_giza) {
getWorldWonderTypes();
}
if (wonderTypes.great_pyramid_of_giza) {
setTimeout(function () {
if (!wonder.map.mausoleum_of_halicarnassus) {
getWorldWonders();
} else {
if (DATA.options.wwi) {
WorldWonderIcons.activate();
}
}
}, 2000);
}
}, 3000);
// Execute once to get alliance ratio
if (wonder.ratio[AID] == -1 || !$.isNumeric(wonder.ratio[AID])) {
setTimeout(function () {
getPointRatioFromAllianceProfile();
}, 5000);
}
}
time_b = uw.Timestamp.client();
//console.log("Gebrauchte Zeit:" + (time_b - time_a));
});
} else {
setTimeout(function () {
loadFeatures();
}, 100);
}
}
if (uw.location.pathname === "/game/index") {
loadFeatures();
}
/*******************************************************************************************************************************
* HTTP-Requests
* *****************************************************************************************************************************/
function ajaxObserver() {
$(document).ajaxComplete(function (e, xhr, opt) {
var url = opt.url.split("?"),
action = url[0].substr(5) + "/" + url[1].split(/&/)[1].substr(7);
if (PID == 84367 || PID == 104769) {
console.log(action);
//console.log((JSON.parse(xhr.responseText).json));
}
switch (action) {
case "/frontend_bridge/fetch": // Daily Reward
//$('.daily_login').find(".minimize").click();
break;
case "/player/index":
settings();
if (diosettings) {
$('#dio_tools').click();
diosettings = false;
}
break;
case "/index/switch_town":
if (DATA.options.str) {
UnitStrength.Menu.update();
}
if (DATA.options.str) {
TransportCapacity.update();
}
if (DATA.options.bir) {
BiremeCounter.get();
}
if (DATA.options.tic) {
TownIcons.changeTownIcon();
}
break;
case "/building_docks/index":
if (DATA.options.bir) {
BiremeCounter.getDocks();
}
break;
case "/building_place/units_beyond":
if (DATA.options.bir) {
BiremeCounter.getAgora();
}
//addTransporterBackButtons();
break;
case "/building_place/simulator":
if (DATA.options.sim) {
Simulator.change();
}
break;
case "/building_place/simulate":
if (DATA.options.sim) {
afterSimulation();
}
break;
case "/alliance_forum/forum":
case "/message/new":
case "/message/forward":
case "/message/view":
case "/player_memo/load_memo_content":
if (DATA.options.sml) {
SmileyBox.add(action);
}
if (DATA.options.bbc) {
addForm(action);
}
break;
case "/wonders/index":
if (DATA.options.per) {
WWTradeHandler();
}
if (DATA.options.wwc) {
getResWW();
}
break;
case "/wonders/send_resources":
if (DATA.options.wwc) {
getResWW();
}
break;
case "/ranking/alliance":
getPointRatioFromAllianceRanking();
break;
case "/ranking/wonder_alliance":
getPointRatioFromAllianceRanking();
if (DATA.options.wwr) {
WorldWonderRanking.change(JSON.parse(xhr.responseText).plain.html);
}
if (DATA.options.wwi) {
WorldWonderIcons.activate();
}
break;
case "/alliance/members_show":
getPointRatioFromAllianceMembers();
break;
case "/town_info/trading":
addTradeMarks(15, 18, 15, "red");
TownTabHandler(action.split("/")[2]);
break;
case "/town_overviews/trade_overview":
addPercentTrade(1234, false); // TODO
case "/farm_town_overviews/get_farm_towns_for_town":
changeResColor();
break;
case "/command_info/conquest_info":
if (DATA.options.str) {
UnitStrength.Conquest.add();
}
break;
case "/command_info/conquest_movements":
case "/conquest_info/getinfo":
if (DATA.options.cnt) {
countMovements();
}
break;
case "/building_barracks/index":
case "/building_barracks/build":
if (DATA.options.str) {
UnitStrength.Barracks.add();
}
break;
case "/town_info/attack":
case "/town_info/support":
console.debug(JSON.parse(xhr.responseText));
TownTabHandler(action.split("/")[2]);
break;
case "/report/index":
changeDropDownButton();
loadFilter();
saveFilter();
//removeReports();
break;
case "/report/view":
Statistics.LuckCounter.count();
break;
case "/message/default":
case "/message/index":
break;
case "/chat/init":
if (DATA.options.irc) {
Chat.open();
}
break;
case "/town_info/go_to_town":
/*
//console.log(uw.Layout.wnd);
var windo = uw.GPWindowMgr.getOpenFirst(uw.Layout.wnd.TYPE_TOWNINDEX).getID();
//console.log(uw.GPWindowMgr.getOpenFirst(uw.Layout.wnd.TYPE_TOWNINDEX));
uw.GPWindowMgr.getOpenFirst(uw.Layout.wnd.TYPE_TOWNINDEX).setPosition([100,400]);
//console.log(windo);
//console.log(uw.GPWindowMgr.getOpenFirst(uw.Layout.wnd.TYPE_TOWNINDEX).getPosition());
*/
break;
}
});
}
function test() {
//http://gpde.innogamescdn.com/images/game/temp/island.png
//console.log(uw.WMap);
//console.log(uw.WMap.getSea(uw.WMap.getXCoord(), uw.WMap.getYCoord()));
//console.log(uw.GameControllers.LayoutToolbarActivitiesController().prototype.getActivityTypes());
//console.log(uw.GameViews);
//console.log(uw.GameViews.BarracksUnitDetails());
//console.log(uw.ITowns.getTown(uw.Game.townId).unitsOuter().sword);
//console.log(uw.ITowns.getCurrentTown().unitsOuter().sword);
//console.log(uw.ITowns.getTown(uw.Game.townId).researches().attributes);
//console.log(uw.ITowns.getTown(uw.Game.townId).hasConqueror());
//console.log(uw.ITowns.getTown(uw.Game.townId).allUnits());
//console.log(uw.ITowns.all_units.fragments[uw.Game.townId]._byId);
//console.log("Zeus: " + uw.ITowns.player_gods.zeus_favor_delta_property.lastTriggeredVirtualPropertyValue);
//console.log(uw.ITowns.player_gods.attributes);
//console.log(uw.ITowns.getTown('5813').createTownLink());
//console.log(uw.ITowns.getTown(5813).unitsOuterTown);
//console.log(uw.ITowns.getTown(uw.Game.townId).getLinkFragment());
//console.log(uw.ITowns.getTown(uw.Game.townId).allGodsFavors());
}
/*******************************************************************************************************************************
* Helping functions
* ----------------------------------------------------------------------------------------------------------------------------
* | ● fixUnitValues: Get unit values and overwrite some wrong values
* | ● getMaxZIndex: Get the highest z-index of "ui-dialog"-class elements
* ----------------------------------------------------------------------------------------------------------------------------
*******************************************************************************************************************************/
// Fix buggy grepolis values
function fixUnitValues() {
//uw.GameData.units.small_transporter.attack = uw.GameData.units.big_transporter.attack = uw.GameData.units.demolition_ship.attack = uw.GameData.units.militia.attack = 0;
//uw.GameData.units.small_transporter.defense = uw.GameData.units.big_transporter.defense = uw.GameData.units.demolition_ship.defense = uw.GameData.units.colonize_ship.defense = 0;
uw.GameData.units.militia.resources = {wood: 0, stone: 0, iron: 0};
}
function getMaxZIndex() {
var maxZ = Math.max.apply(null, $.map($("div[class^='ui-dialog']"), function (e, n) {
if ($(e).css('position') == 'absolute') {
return parseInt($(e).css('z-index'), 10) || 1000;
}
}));
return (maxZ !== -Infinity) ? maxZ + 1 : 1000;
}
function getBrowser() {
var ua = navigator.userAgent,
tem,
M = ua.match(/(opera|maxthon|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
if (/trident/i.test(M[1])) {
tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
M[1] = 'IE';
M[2] = tem[1] || '';
}
if (M[1] === 'Chrome') {
tem = ua.match(/\bOPR\/(\d+)/);
if (tem !== null) {
M[1] = 'Opera';
M[2] = tem[1];
}
}
M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
if ((tem = ua.match(/version\/(\d+)/i)) !== null) M.splice(1, 1, tem[1]);
return M.join(' ');
}
// Error Handling / Remote diagnosis / Automatic bug reports
function errorHandling(e, fn) {
if (PID == 84367 || PID == 104769 || PID === 1291505) {
HumanMessage.error("DIO-TOOLS(" + version + ")-ERROR: " + e.message);
console.log("DIO-TOOLS | Error-Stack | ", e.stack);
} else {
if (!DATA.error[version]) {
DATA.error[version] = {};
}
if (DATA.options.err && !DATA.error[version][fn]) {
$.ajax({
type: "POST",
url: "https://diotools.de/game/error.php",
data: {error: e.stack.replace(/'/g, '"'), "function": fn, browser: getBrowser(), version: version},
success: function (text) {
DATA.error[version][fn] = true;
saveValue("error", JSON.stringify(DATA.error));
}
});
}
}
}
function createWindowType(name, title, width, height, minimizable, position) {
$('<style id="dio_window">' +
'.dio_title_img { height:18px; float:left; margin-right:3px; } ' +
'.dio_title { margin:1px 6px 13px 23px; color:rgb(126,223,126); } ' +
'</style>').appendTo('head');
// Create Window Type
function WndHandler(wndhandle) {
this.wnd = wndhandle;
}
Function.prototype.inherits.call(WndHandler, WndHandlerDefault);
WndHandler.prototype.getDefaultWindowOptions = function () {
return {
position: position,
width: width,
height: height,
minimizable: minimizable,
title: "<img class='dio_title_img' src='http://666kb.com/i/cifvfsu3e2sdiipn0.gif' /><div class='dio_title'>" + title + "</div>"
};
};
GPWindowMgr.addWndType(name, "", WndHandler, 1);
}
// Notification
var Notification = {
init: function () {
// NotificationType
NotificationType.DIO_TOOLS = "diotools";
// Style
$('<style id="dio_notification" type="text/css">' +
'#notification_area .diotools .icon { background: url(http://666kb.com/i/cifvfsu3e2sdiipn0.gif) 4px 7px no-repeat !important;} ' +
'#notification_area .diotools { cursor:pointer; } ' +
'</style>').appendTo('head');
var notif = DATA.notification;
if (notif <= 7) {
//Notification.create(1, 'Swap context menu buttons ("Select town" and "City overview")');
//Notification.create(2, 'Town overview (old window mode)');
//Notification.create(3, 'Mouse wheel: You can change the views with the mouse wheel');
//Notification.create(4, 'Town icons on the strategic map');
//Notification.create(5, 'Percentual unit population in the town list');
//Notification.create(6, 'New world wonder ranking');
//Notification.create(7, 'World wonder icons on the strategic map');
// Click Event
$('.diotools .icon').click(function () {
openSettings();
$(this).parent().find(".close").click();
});
saveValue('notif', '8');
}
},
create: function (nid, feature) {
var Notification = new NotificationHandler();
Notification.notify($('#notification_area>.notification').length + 1, uw.NotificationType.DIO_TOOLS,
"<span style='color:rgb(8, 207, 0)'><b><u>New Feature!</u></b></span>" + feature + "<span class='small notification_date'>DIO-Tools: v" + version + "</span>");
}
};
/*******************************************************************************************************************************
* Mousewheel Zoom
*******************************************************************************************************************************/
var MouseWheelZoom = {
// Scroll trough the views
activate: function () {
$('#main_area, #dio_political_map, .viewport, .sjs-city-overview-viewport').bind('mousewheel', function (e) {
e.stopPropagation();
var current = $('.bull_eye_buttons .checked').get(0).getAttribute("name"), delta = 0, scroll, sub_scroll = 6;
switch (current) {
case 'political_map':
scroll = 4;
break;
case 'strategic_map':
scroll = 3;
break;
case 'island_view':
scroll = 2;
break;
case 'city_overview':
scroll = 1;
break;
}
delta = -e.originalEvent.detail || e.originalEvent.wheelDelta; // Firefox || Chrome & Opera
//console.debug("cursor_pos", e.pageX, e.pageY);
if (scroll !== 4) {
if (delta < 0) {
scroll += 1;
} else {
scroll -= 1;
}
} else {
// Zoomstufen bei der Politischen Karte
sub_scroll = $('.zoom_select').get(0).selectedIndex;
if (delta < 0) {
sub_scroll -= 1;
} else {
sub_scroll += 1;
}
if (sub_scroll === -1) {
sub_scroll = 0;
}
if (sub_scroll === 7) {
scroll = 3;
}
}
switch (scroll) {
case 4:
if (!$('.bull_eye_buttons .btn_political_map').hasClass("checked")) {
$('.bull_eye_buttons .btn_political_map').click();
}
// onChange wird aufgerufen, wenn sich die Selektierung ändert
//$('.zoom_select option').eq(sub_scroll).prop('selected', true);
$('.zoom_select').get(0)[sub_scroll].selected = true;
//$('.zoom_select').get(0).change();
//$('.zoom_select').get(0).val(sub_scroll);
PoliticalMap.zoomToCenter();
//PoliticalMap.zoomToCenterToCursorPosition($('.zoom_select').get(0)[sub_scroll].value, [e.pageX, e.pageY]);
break;
case 3:
$('.bull_eye_buttons .strategic_map').click();
$('#popup_div').css('display', 'none');
break;
case 2:
$('.bull_eye_buttons .island_view').click();
break;
case 1:
$('.bull_eye_buttons .city_overview').click();
break;
}
// Prevent page from scrolling
return false;
});
},
deactivate: function () {
$('#main_area, .ui_city_overview').unbind('mousewheel');
}
};
/*******************************************************************************************************************************
* Statistics
* ----------------------------------------------------------------------------------------------------------------------------
* | ● Expansion of towns?
* | ● Occupancy of the farms?
* | ● Mouseclick-Counter?
* | ● Resource distribution (%)?
* | ● Building level counter ?
* ----------------------------------------------------------------------------------------------------------------------------
*******************************************************************************************************************************/
//$('<script src="https://github.com/mbostock/d3/blob/master/d3.js"></script>').appendTo("head");
// http://mbostock.github.com/d3/d3.v2.js
var Statistics = {
activate: function () {
Statistics.addButton();
$('<style id="dio_statistic">' +
'path { stroke: steelblue; stroke-width: 1; fill: none; } ' +
'.axis { shape-rendering: crispEdges; } ' +
'.x.axis line { stroke: lightgrey; } ' +
'.x.axis .minor { stroke-opacity: .5; } ' +
'.x.axis path { display: none; } ' +
'.y.axis line, .y.axis path { fill: none; stroke: #000; } ' +
'</style>').appendTo('head');
Statistics.ClickCounter.activate();
// Create Window Type
createWindowType("DIO_STATISTICS", "Statistics", 300, 250, true, ["center", "center", 100, 100]);
},
deactivate: function () {
$('#dio_statistic_button').remove();
$('#dio_statistic').remove();
Statistics.ClickCounter.deactivate();
},
addButton: function () {
$('<div id="dio_statistic_button" class="circle_button"><div class="ico_statistics js-caption"></div></div>').appendTo(".gods_area");
// Style
$('<style id="dio_statistic_style">' +
'#dio_statistic_button { top:56px; left:-4px; z-index:10; position:absolute; } ' +
'#dio_statistic_button .ico_statistics { margin:7px 0px 0px 8px; width:17px; height:17px; background:url(http://s1.directupload.net/images/140408/pltgqlaw.png) no-repeat 0px 0px; background-size:100%; } ' +
// http://s14.directupload.net/images/140408/k4wikrlq.png // http://s7.directupload.net/images/140408/ahfr8227.png
'#dio_statistic_button .ico_statistics.checked { margin-top:8px; } ' +
'</style>').appendTo('head');
// Tooltip
$('#dio_statistic_button').tooltip(getText("labels", "uni")); // TODO
// Events
$('#dio_statistic_button').on('mousedown', function () {
$('#dio_statistic_button, .ico_statistics').addClass("checked");
}).on('mouseup', function () {
$('#dio_statistic_button, .ico_statistics').removeClass("checked");
});
$('#dio_statistic_button').click(function () {
if (!Layout.wnd.getOpenFirst(GPWindowMgr.TYPE_DIO_STATISTICS)) {
Statistics.openWindow();
$('#dio_statistic_button, .ico_statistics').addClass("checked");
} else {
Statistics.closeWindow();
$('#dio_statistic_button, .ico_statistics').removeClass("checked");
}
});
},
openWindow: function () {
var content =
'<div id="dio_mouseclicks" style="margin-bottom:5px; font-style:italic;">' +
'<span style="text-decoration:underline;">Insgesamt:</span> <span></span>' +
'<span style="float:right;"></span><span style="text-decoration:underline;float:right;">Heute:</span> ' +
'</div><canvas id="dio_graph" width="290" height="150" style="margin-top:15px;"></canvas>';
Layout.wnd.Create(GPWindowMgr.TYPE_DIO_STATISTICS).setContent(content);
Statistics.ClickCounter.onOpenWindow();
// Draw diagram
var graph, xPadding = 35, yPadding = 25;
var data = {values: [{X: "Jan", Y: 0}]};
console.log(DATA.clickCount);
for (var o in DATA.clickCount) {
data.values.push({X: "opp", Y: DATA.clickCount[o]});
}
function getMaxY() {
var max = 0;
for (var i = 0; i < data.values.length; i++) {
if (data.values[i].Y > max) {
max = data.values[i].Y;
}
}
max += 10 - max % 10;
return max + 10;
}
function getXPixel(val) {
return ((graph.width() - xPadding) / data.values.length) * val + (xPadding + 10);
}
function getYPixel(val) {
return graph.height() - (((graph.height() - yPadding) / getMaxY()) * val) - yPadding;
}
graph = $('#dio_graph');
var c = graph[0].getContext('2d');
c.lineWidth = 2;
c.strokeStyle = '#333';
c.font = 'italic 8pt sans-serif';
c.textAlign = "center";
// Axis
c.beginPath();
c.moveTo(xPadding, 0);
c.lineTo(xPadding, graph.height() - yPadding);
c.lineTo(graph.width(), graph.height() - yPadding);
c.stroke();
// X-Axis caption
for (var x = 0; x < data.values.length; x++) {
c.fillText(data.values[x].X, getXPixel(x), graph.height() - yPadding + 20);
}
// Y-Axis caption
c.textAlign = "right";
c.textBaseline = "middle";
var maxY = getMaxY(), maxYscala = Math.ceil(maxY / 1000) * 1000;
console.log(maxY);
for (var y = 0; y < maxY; y += maxYscala / 10) {
c.fillText(y, xPadding - 10, getYPixel(y));
}
// Graph
c.strokeStyle = 'rgb(0,150,0)';
c.beginPath();
c.moveTo(getXPixel(0), getYPixel(data.values[0].Y));
for (var i = 1; i < data.values.length; i++) {
c.lineTo(getXPixel(i), getYPixel(data.values[i].Y));
}
c.stroke();
// Points
c.fillStyle = '#333';
for (var p = 0; p < data.values.length; p++) {
c.beginPath();
c.arc(getXPixel(p), getYPixel(data.values[p].Y), 2, 0, Math.PI * 2, true);
c.fill();
}
},
closeWindow: function () {
Layout.wnd.getOpenFirst(GPWindowMgr.TYPE_DIO_STATISTICS).close();
},
ClickCounter: {
today: "00000000",
activate: function () {
Statistics.ClickCounter.updateDate();
$(document).on("mousedown", function () {
DATA.clickCount[Statistics.ClickCounter.today]++;
});
window.onbeforeunload = function () {
Statistics.ClickCounter.save();
};
// TODO: Update date
setTimeout(function () {
Statistics.ClickCounter.updateDate();
}, 0);
},
deactivate: function () {
$(document).off("mousedown");
},
save: function () {
saveValue(WID + "_click_count", JSON.stringify(DATA.clickCount));
},
updateDate: function () {
var today = new Date((window.Timestamp.server() + 7200) * 1000);
Statistics.ClickCounter.today = today.getUTCFullYear() + ((today.getUTCMonth() + 1) < 10 ? "0" : "") + (today.getUTCMonth() + 1) + (today.getUTCDate() < 10 ? "0" : "") + today.getUTCDate();
DATA.clickCount[Statistics.ClickCounter.today] = DATA.clickCount[Statistics.ClickCounter.today] || 0;
},
onOpenWindow: function () {
$('#dio_mouseclicks span:eq(2)').get(0).innerHTML = DATA.clickCount[Statistics.ClickCounter.today];
$(document).off("mousedown");
$(document).on("mousedown", function () {
if ($('#dio_mouseclicks').get(0)) {
$('#dio_mouseclicks span:eq(2)').get(0).innerHTML = ++DATA.clickCount[Statistics.ClickCounter.today];
} else {
DATA.clickCount[Statistics.ClickCounter.today]++;
$(document).off("mousedown");
$(document).on("mousedown", function () {
DATA.clickCount[Statistics.ClickCounter.today]++;
});
}
});
}
},
LuckCounter: {
luckArray: {},
count: function () {
if ($('.fight_bonus.luck').get(0)) {
var report_id = $('#report_report_header .game_arrow_delete').attr("onclick").split(",")[1].split(")")[0].trim(),
luck = parseInt($('.fight_bonus.luck').get(0).innerHTML.split(":")[1].split("%")[0].trim(), 10);
Statistics.LuckCounter.luckArray[report_id] = luck;
console.log(Statistics.LuckCounter.calcAverage());
}
},
calcAverage: function () {
var sum = 0, count = 0;
for (var report_id in Statistics.LuckCounter.luckArray) {
if (Statistics.LuckCounter.luckArray.hasOwnProperty(report_id)) {
sum += parseInt(Statistics.LuckCounter.luckArray[report_id], 10);
count++;
}
}
return (parseFloat(sum) / parseFloat(count));
}
}
};
/*******************************************************************************************************************************
* Body Handler
* ----------------------------------------------------------------------------------------------------------------------------
* | ● Town icon
* | ● Town list: Adds town type to the town list
* | ● Swap Context Icons
* | ● City overview
* ----------------------------------------------------------------------------------------------------------------------------
*******************************************************************************************************************************/
function imageSelectionProtection() {
$('<style id="dio_image_selection" type="text/css"> img { -moz-user-select: -moz-none; -khtml-user-select: none; -webkit-user-select: none;} </style>').appendTo('head');
}
var worldWonderIcon = {
colossus_of_rhodes: "url(https://gpall.innogamescdn.com/images/game/map/wonder_colossus_of_rhodes.png) 38px -1px;",
great_pyramid_of_giza: "url(https://gpall.innogamescdn.com/images/game/map/wonder_great_pyramid_of_giza.png) 34px -6px;",
hanging_gardens_of_babylon: "url(https://gpall.innogamescdn.com/images/game/map/wonder_hanging_gardens_of_babylon.png) 34px -5px;",
lighthouse_of_alexandria: "url(https://gpall.innogamescdn.com/images/game/map/wonder_lighthouse_of_alexandria.png) 37px -1px;",
mausoleum_of_halicarnassus: "url(https://gpall.innogamescdn.com/images/game/map/wonder_mausoleum_of_halicarnassus.png) 37px -4px;",
statue_of_zeus_at_olympia: "url(https://gpall.innogamescdn.com/images/game/map/wonder_statue_of_zeus_at_olympia.png) 36px -3px;",
temple_of_artemis_at_ephesus: "url(https://gpall.innogamescdn.com/images/game/map/wonder_temple_of_artemis_at_ephesus.png) 34px -5px;"
};
var WorldWonderIcons = {
activate: function () {
try {
if (!$('#dio_wondericons').get(0)) {
var color = "orange";
// style for world wonder icons
var style_str = "<style id='dio_wondericons' type='text/css'>";
for (var ww_type in wonder.map) {
if (wonder.map.hasOwnProperty(ww_type)) {
for (var ww in wonder.map[ww_type]) {
if (wonder.map[ww_type].hasOwnProperty(ww)) {
/*
if(wonder.map[ww_type][ww] !== AID){
color = "rgb(192, 109, 54)";
} else {
color = "orange";
}
*/
style_str += "#mini_i" + ww + ":before {" +
"content: '';" +
"background:" + color + " " + worldWonderIcon[ww_type] +
"background-size: auto 97%;" +
"padding: 8px 16px;" +
"top: 50px;" +
"position: relative;" +
"border-radius: 40px;" +
"z-index: 200;" +
"cursor: pointer;" +
"box-shadow: 1px 1px 0px rgba(0, 0, 0, 0.5);" +
"border: 2px solid green; } " +
"#mini_i" + ww + ":hover:before { z-index: 201; " +
"filter: url(#Brightness12);" +
"-webkit-filter: brightness(1.2); } ";
}
}
}
}
$(style_str + "</style>").appendTo('head');
// Context menu on mouseclick
$('#minimap_islands_layer').on('click', '.m_island', function (e) {
var ww_coords = this.id.split("i")[3].split("_");
uw.Layout.contextMenu(e, 'wonder', {ix: ww_coords[0], iy: ww_coords[1]});
});
}
} catch (error) {
errorHandling(error, "setWonderIconsOnMap");
}
},
deactivate: function () {
$('#dio_wondericons').remove();
}
};
var TownIcons = {
types: {
// Automatic Icons
lo: 0,
ld: 3,
so: 6,
sd: 7,
fo: 10,
fd: 9,
bu: 14, /* Building */
po: 22,
no: 12,
// Manual Icons
fa: 20, /* Favor */
re: 15, /* Resources */
di: 2, /* Distance */
sh: 1, /* Pierce */
lu: 13, /* ?? */
dp: 11, /* Diplomacy */
ha: 15, /* ? */
si: 18, /* Silber */
ra: 17,
ch: 19, /* Research */
ti: 23, /* Time */
un: 5,
wd: 16, /* Wood */
wo: 24, /* World */
bo: 13, /* Booty */
gr: 21, /* Lorbeer */
st: 17, /* Stone */
is: 26, /* ?? */
he: 4, /* Helmet */
ko: 8 /* Kolo */
},
deactivate: function () {
$('#town_icon').remove();
$('#dio_townicons_field').remove();
},
activate: function () {
try {
$('<div id="town_icon"><div class="town_icon_bg"><div class="icon_big townicon_' +
(manuTownTypes[uw.Game.townId] || ((autoTownTypes[uw.Game.townId] || "no") + " auto")) + '"></div></div></div>').appendTo('.town_name_area');
// Town Icon Style
$('#town_icon .icon_big').css({
backgroundPosition: TownIcons.types[(manuTownTypes[uw.Game.townId] || ((autoTownTypes[uw.Game.townId] || "no")))] * -25 + 'px 0px'
});
console.debug(dio_sprite);
$('<style id="dio_townicons_field" type="text/css">' +
'#town_icon { background:url(' + dio_sprite + ') 0 -125px no-repeat; position:absolute; width:69px; height:61px; left:-47px; top:0px; z-index: 10; } ' +
'#town_icon .town_icon_bg { background:url(' + dio_sprite + ') -76px -129px no-repeat; width:43px; height:43px; left:25px; top:4px; cursor:pointer; position: relative; } ' +
'#town_icon .town_icon_bg:hover { filter:url(#Brightness11); -webkit-filter:brightness(1.1); box-shadow: 0px 0px 15px rgb(1, 197, 33); } ' +
'#town_icon .icon_big { position:absolute; left:9px; top:9px; height:25px; width:25px; } ' +
'#town_icon .select_town_icon {position: absolute; top:47px; left:23px; width:145px; display:none; padding:2px; border:3px inset rgb(7, 99, 12); box-shadow:rgba(0, 0, 0, 0.5) 4px 4px 6px; border-radius:0px 10px 10px 10px;' +
'background:url(https://gpall.innogamescdn.com/images/game/popup/middle_middle.png); } ' +
'#town_icon .item-list { max-height:400px; max-width:200px; align:right; overflow-x:hidden; } ' +
'#town_icon .option_s { cursor:pointer; width:20px; height:20px; margin:0px; padding:2px 2px 3px 3px; border:2px solid rgba(0,0,0,0); border-radius:5px; background-origin:content-box; background-clip:content-box;} ' +
'#town_icon .option_s:hover { border: 2px solid rgb(59, 121, 81) !important;-webkit-filter: brightness(1.3); } ' +
'#town_icon .sel { border: 2px solid rgb(202, 176, 109); } ' +
'#town_icon hr { width:145px; margin:0px 0px 7px 0px; position:relative; top:3px; border:0px; border-top:2px dotted #000; float:left} ' +
'#town_icon .auto_s { width:136px; height:16px; float:left} ' +
// Quickbar modification
'.ui_quickbar .left, .ui_quickbar .right { width:46%; } ' +
// because of Kapsonfires Script and Beta Worlds bug report bar:
'.town_name_area { z-index:11; left:52%; } ' +
'.town_name_area .left { z-index:20; left:-39px; } ' +
'</style>').appendTo('head');
var icoArray = ['ld', 'lo', 'sh', 'di', 'un',
'sd', 'so', 'ko', 'ti', 'gr',
'fd', 'fo', 'dp', 'no', 'po',
're', 'wd', 'st', 'si', 'bu',
'he', 'ch', 'bo', 'fa', 'wo'];
// Fill select box with town icons
$('<div class="select_town_icon dropdown-list default active"><div class="item-list"></div></div>').appendTo("#town_icon");
for (var i in icoArray) {
if (icoArray.hasOwnProperty(i)) {
$('.select_town_icon .item-list').append('<div class="option_s icon_small townicon_' + icoArray[i] + '" name="' + icoArray[i] + '"></div>');
}
}
$('<hr><div class="option_s auto_s" name="auto"><b>Auto</b></div>').appendTo('.select_town_icon .item-list');
$('#town_icon .option_s').click(function () {
$("#town_icon .sel").removeClass("sel");
$(this).addClass("sel");
if ($(this).attr("name") === "auto") {
delete manuTownTypes[uw.Game.townId];
} else {
manuTownTypes[uw.Game.townId] = $(this).attr("name");
}
TownIcons.changeTownIcon();
// Update town icons on the map
TownIcons.Map.activate(); //setOnMap();
saveValue(WID + "_townTypes", JSON.stringify(manuTownTypes));
});
// Show & hide drop menus on click
$('#town_icon .town_icon_bg').click(function () {
var el = $('#town_icon .select_town_icon').get(0);
if (el.style.display === "none") {
el.style.display = "block";
} else {
el.style.display = "none";
}
});
$('#town_icon .select_town_icon [name="' + (manuTownTypes[uw.Game.townId] || (autoTownTypes[uw.Game.townId] ? "auto" : "" )) + '"]').addClass("sel");
} catch (error) {
errorHandling(error, "addTownIcon");
}
},
changeTownIcon: function () {
var townType = (manuTownTypes[uw.Game.townId] || ((autoTownTypes[uw.Game.townId] || "no")));
$('#town_icon .icon_big').removeClass().addClass('icon_big townicon_' + townType + " auto");
$('#town_icon .sel').removeClass("sel");
$('#town_icon .select_town_icon [name="' + (manuTownTypes[uw.Game.townId] || (autoTownTypes[uw.Game.townId] ? "auto" : "" )) + '"]').addClass("sel");
$('#town_icon .icon_big').css({
backgroundPosition: TownIcons.types[townType] * -25 + 'px 0px'
});
$('#town_icon .select_town_icon').get(0).style.display = "none";
},
Map: {
activate: function () {
try {
// if town icon changed
if ($('#dio_townicons_map').get(0)) {
$('#dio_townicons_map').remove();
}
// style for own towns (town icons)
var start = (new Date()).getTime(), end, style_str = "<style id='dio_townicons_map' type='text/css'>";
for (var e in autoTownTypes) {
if (autoTownTypes.hasOwnProperty(e)) {
style_str += "#mini_t" + e + " { height: 19px;" +
"width:19px;" +
"border-radius: 11px;" +
"border: 2px solid rgb(16, 133, 0);" +
"margin: -4px;" +
//"background: rgb(255, 187, 0) url(http://s7.directupload.net/images/140404/xt839us6.png) repeat;"+
"background: rgb(255, 187, 0) url(" + dio_sprite + ") " + (TownIcons.types[(manuTownTypes[e] || autoTownTypes[e])] * -25) + "px -27px repeat;" +
"z-index: 100;" +
"font-size: 0em;" +
"cursor: pointer;" +
(Game.night_mode ? "filter:url(#Brightness07); -webkit-filter: brightness(0.7);" : " ") +
"box-shadow: 1px 1px 0px rgba(0, 0, 0, 0.5);} " +
// Mouseover Style
"#mini_t" + e + ":hover { z-index: 101; " +
(Game.night_mode ? "filter:none; -webkit-filter: none;" : "filter: url(#Brightness12); -webkit-filter: brightness(1.2);") +
"} ";
}
}
// Context menu on mouseclick
$('#minimap_islands_layer').on('click', '.m_town', function (z) {
var id = parseInt(this.id.substring(6), 10);
Layout.contextMenu(z, 'determine', {"id": id, "name": uw.ITowns.getTown(id).name});
z.stopPropagation(); // prevent parent world wonder event
});
// Style for foreign cities (shadow)
style_str += "#minimap_islands_layer .m_town { text-shadow: 1px 1px 0px rgba(0, 0, 0, 0.7); } ";
// Style for night mode
style_str += "#minimap { z-index: auto } ";
style_str += "</style>";
$(style_str).appendTo('head');
// Test:
$.Observer(GameEvents.game.night).subscribe('DIO_SWITCH_NIGHT', function (o) {
console.log("Switch Night: " + Timestamp.serverTime());
console.log(o);
});
/*
setTimeout(function(){
uw.MapTiles.createTownDiv_old = uw.MapTiles.createTownDiv;
uw.MapTiles.createTownDiv = function(town, player_current_town) {
var ret = uw.MapTiles.createTownDiv_old(town, player_current_town);
if(!isNaN(town.id) && town.player_id == PID) {
//setIconMap(town.id);
console.log(town.id);
console.log(player_current_town);
}
return ret;
};
},2000);
*/
} catch (error) {
errorHandling(error, "TownIcons.Map.activate");
}
},
deactivate: function () {
$('#dio_townicons_map').remove();
$('#minimap_islands_layer').off('click');
}
}
};
// Style for town icons
var style_str = '<style id="dio_townicons" type="text/css">';
for (var s in TownIcons.types) {
if (TownIcons.types.hasOwnProperty(s)) {
style_str += '.townicon_' + s + ' { background:url(' + dio_sprite + ') ' + (TownIcons.types[s] * -25) + 'px -26px repeat;float:left;} ';
}
}
style_str += '</style>';
$(style_str).appendTo('head');
var ContextMenu = {
activate: function () {
// Set context menu event handler
$.Observer(uw.GameEvents.map.context_menu.click).subscribe('DIO_CONTEXT', function (e, data) {
if (DATA.options.con && $('#context_menu').children().length == 4) {
// Clear animation
$('#context_menu div#goToTown').css({
left: '0px',
top: '0px',
WebkitAnimation: 'none', //'A 0s linear',
animation: 'none' //'B 0s linear'
});
}
// Replace german label of 'select town' button
if (LID === "de" && $('#select_town').get(0)) {
$("#select_town .caption").get(0).innerHTML = "Selektieren";
}
});
// Set context menu animation
$('<style id="dio_context_menu" type="text/css">' +
// set fixed position of 'select town' button
'#select_town { left: 0px !important; top: 0px !important; z-index: 6; } ' +
// set animation of 'goToTown' button
'#context_menu div#goToTown { left: 30px; top: -51px; ' +
'-webkit-animation: A 0.115s linear; animation: B 0.2s;} ' +
'@-webkit-keyframes A { from {left: 0px; top: 0px;} to {left: 30px; top: -51px;} }' +
'@keyframes B { from {left: 0px; top: 0px;} to {left: 30px; top: -51px;} }' +
'</style>').appendTo('head');
},
deactivate: function () {
$.Observer(uw.GameEvents.map.context_menu.click).unsubscribe('DIO_CONTEXT');
$('#dio_context_menu').remove();
}
};
var TownList = {
activate: function () {
// Style town list
$('<style id="dio_town_list" type="text/css">' +
'#town_groups_list .item { text-align: left; padding-left:35px; } ' +
'#town_groups_list .inner_column { border: 1px solid rgba(100, 100, 0, 0.3);margin: -2px 0px 0px 2px; } ' +
'#town_groups_list .island_quest_icon { background-size: 90%; position: absolute; right: 37px; top: 4px; } ' +
'#town_groups_list .island_quest_icon.hidden { display:none; } ' +
// Quacks Zentrier-Button verschieben
'#town_groups_list .jump_town { right: 37px !important; } ' +
// Population percentage
'#town_groups_list .pop_percent { position: absolute; right: 7px; top:0px; font-size: 0.7em; display:block !important;} ' +
'#town_groups_list .full { color: green; } ' +
'#town_groups_list .threequarter { color: darkgoldenrod; } ' +
'#town_groups_list .half { color: darkred; } ' +
'#town_groups_list .quarter { color: red; } ' +
'</style>').appendTo('head');
// Open town list: hook to grepolis function render()
var i = 0;
while (uw.layout_main_controller.sub_controllers[i].name != 'town_name_area') {
i++;
}
uw.layout_main_controller.sub_controllers[i].controller.town_groups_list_view.render_old = uw.layout_main_controller.sub_controllers[i].controller.town_groups_list_view.render;
uw.layout_main_controller.sub_controllers[i].controller.town_groups_list_view.render = function () {
uw.layout_main_controller.sub_controllers[i].controller.town_groups_list_view.render_old();
TownList.change();
};
// Town List open?
if ($('#town_groups_list').get(0)) {
TownList.change();
}
},
deactivate: function () {
var i = 0;
while (uw.layout_main_controller.sub_controllers[i].name != 'town_name_area') {
i++;
}
layout_main_controller.sub_controllers[i].controller.town_groups_list_view.render = layout_main_controller.sub_controllers[i].controller.town_groups_list_view.render_old;
$('#dio_town_list').remove();
$('#town_groups_list .small_icon, #town_groups_list .pop_percent').css({display: 'none'});
//$.Observer(uw.GameEvents.town.town_switch).unsubscribe('DIO_SWITCH_TOWN');
$("#town_groups_list .town_group_town").unbind('mouseenter mouseleave');
},
change: function () {
if (!$('#town_groups_list .icon_small').get(0) && !$('#town_groups_list .pop_percent').get(0)) {
$("#town_groups_list .town_group_town").each(function () {
try {
var town_item = $(this), town_id = town_item.attr('name'), townicon_div, percent_div = "", percent = -1, pop_space = "full";
if (population[town_id]) {
percent = population[town_id].percent;
}
if (percent < 75) {
pop_space = "threequarter";
}
if (percent < 50) {
pop_space = "half";
}
if (percent < 25) {
pop_space = "quarter";
}
if (!town_item.find('icon_small').length) {
townicon_div = '<div class="icon_small townicon_' + (manuTownTypes[town_id] || autoTownTypes[town_id] || "no") + '"></div>';
// TODO: Notlösung...
if (percent != -1) {
percent_div = '<div class="pop_percent ' + pop_space + '">' + percent + '%</div>';
}
town_item.prepend(townicon_div + percent_div);
}
// opening context menu
/*
$(this).click(function(e){
console.log(e);
uw.Layout.contextMenu(e, 'determine', {"id": town_id,"name": uw.ITowns[town_id].getName()});
});
*/
} catch (error) {
errorHandling(error, "TownList.change");
}
});
}
// Hover Effect for Quacks Tool:
$("#town_groups_list .town_group_town").hover(function () {
$(this).find('.island_quest_icon').addClass("hidden");
}, function () {
$(this).find('.island_quest_icon').removeClass("hidden");
});
// Add change town list event handler
//$.Observer(uw.GameEvents.town.town_switch).subscribe('DIO_SWITCH_TOWN', function () {
//TownList.change();
//});
}
};
/*******************************************************************************************************************************
* Available units
* ----------------------------------------------------------------------------------------------------------------------------
* | ● GetAllUnits
* | ● Shows all available units
* ----------------------------------------------------------------------------------------------------------------------------
*******************************************************************************************************************************/
var groupUnitArray = {};
// TODO: split Function (getUnits, calcUnitsSum, availableUnits, countBiremes, getTownTypes)?
function getAllUnits() {
try {
var townArray = uw.ITowns.getTowns(), groupArray = uw.ITowns.townGroups.getGroupsDIO(),
unitArray = {
"sword": 0,
"archer": 0,
"hoplite": 0,
"chariot": 0,
"godsent": 0,
"rider": 0,
"slinger": 0,
"catapult": 0,
"small_transporter": 0,
"big_transporter": 0,
"manticore": 0,
"harpy": 0,
"pegasus": 0,
"cerberus": 0,
"minotaur": 0,
"medusa": 0,
"zyklop": 0,
"centaur": 0,
"fury": 0,
"sea_monster": 0
},
unitArraySea = {"bireme": 0, "trireme": 0, "attack_ship": 0, "demolition_ship": 0, "colonize_ship": 0};
console.debug("DIO-TOOLS | getAllUnits | GROUP ARRAY", groupArray);
if (uw.Game.hasArtemis) {
unitArray = $.extend(unitArray, {"griffin": 0, "calydonian_boar": 0});
}
unitArray = $.extend(unitArray, unitArraySea);
for (var group in groupArray) {
if (groupArray.hasOwnProperty(group)) {
// Clone Object "unitArray"
groupUnitArray[group] = Object.create(unitArray);
for (var town in groupArray[group].towns) {
if (groupArray[group].towns.hasOwnProperty(town)) {
var type = {lo: 0, ld: 0, so: 0, sd: 0, fo: 0, fd: 0}; // Type for TownList
for (var unit in unitArray) {
if (unitArray.hasOwnProperty(unit)) {
// All Groups: Available units
var tmp = parseInt(uw.ITowns.getTown(town).units()[unit], 10);
groupUnitArray[group][unit] += tmp || 0;
// Only for group "All"
if (group == -1) {
// Bireme counter // old
if (unit === "bireme" && ((biriArray[townArray[town].id] || 0) < (tmp || 0))) {
biriArray[townArray[town].id] = tmp;
}
//TownTypes
if (!uw.GameData.units[unit].is_naval) {
if (uw.GameData.units[unit].flying) {
type.fd += ((uw.GameData.units[unit].def_hack + uw.GameData.units[unit].def_pierce + uw.GameData.units[unit].def_distance) / 3 * (tmp || 0));
type.fo += (uw.GameData.units[unit].attack * (tmp || 0));
} else {
type.ld += ((uw.GameData.units[unit].def_hack + uw.GameData.units[unit].def_pierce + uw.GameData.units[unit].def_distance) / 3 * (tmp || 0));
type.lo += (uw.GameData.units[unit].attack * (tmp || 0));
}
} else {
type.sd += (uw.GameData.units[unit].defense * (tmp || 0));
type.so += (uw.GameData.units[unit].attack * (tmp || 0));
}
}
}
}
// Only for group "All"
if (group == -1) {
// Icon: DEF or OFF?
var z = ((type.sd + type.ld + type.fd) <= (type.so + type.lo + type.fo)) ? "o" : "d",
temp = 0;
for (var t in type) {
if (type.hasOwnProperty(t)) {
// Icon: Land/Sea/Fly (t[0]) + OFF/DEF (z)
if (temp < type[t]) {
autoTownTypes[townArray[town].id] = t[0] + z;
temp = type[t];
}
// Icon: Troops Outside (overwrite)
if (temp < 1000) {
autoTownTypes[townArray[town].id] = "no";
}
}
}
// Icon: Empty Town (overwrite)
var popBuilding = 0, buildVal = uw.GameData.buildings, levelArray = townArray[town].buildings().getLevels(),
popMax = Math.floor(buildVal.farm.farm_factor * Math.pow(townArray[town].buildings().getBuildingLevel("farm"), buildVal.farm.farm_pow)), // Population from farm level
popPlow = townArray[town].getResearches().attributes.plow ? 200 : 0,
popFactor = townArray[town].getBuildings().getBuildingLevel("thermal") ? 1.1 : 1.0, // Thermal
popExtra = townArray[town].getPopulationExtra();
for (var b in levelArray) {
if (levelArray.hasOwnProperty(b)) {
popBuilding += Math.round(buildVal[b].pop * Math.pow(levelArray[b], buildVal[b].pop_factor));
}
}
population[town] = {};
population[town].max = popMax * popFactor + popPlow + popExtra;
population[town].buildings = popBuilding;
population[town].units = parseInt((population[town].max - (popBuilding + townArray[town].getAvailablePopulation()) ), 10);
if (population[town].units < 300) {
autoTownTypes[townArray[town].id] = "po";
}
population[town].percent = Math.round(100 / (population[town].max - popBuilding) * population[town].units);
}
}
}
}
}
// Update Available Units
AvailableUnits.updateBullseye();
if (GPWindowMgr.TYPE_DIO_UNITS) {
if (Layout.wnd.getOpenFirst(GPWindowMgr.TYPE_DIO_UNITS)) {
AvailableUnits.updateWindow();
}
}
} catch (error) {
errorHandling(error, "getAllUnits"); // TODO: Eventueller Fehler in Funktion
}
}
function addFunctionToITowns() {
// Copy function and prevent an error
uw.ITowns.townGroups.getGroupsDIO = function () {
var town_groups_towns, town_groups, groups = {};
// #Grepolis Fix: 2.75 -> 2.76
if (MM.collections) {
town_groups_towns = MM.collections.TownGroupTown[0];
town_groups = MM.collections.TownGroup[0];
} else {
town_groups_towns = MM.getCollections().TownGroupTown[0];
town_groups = MM.getCollections().TownGroup[0];
}
town_groups_towns.each(function (town_group_town) {
var gid = town_group_town.getGroupId(),
group = groups[gid],
town_id = town_group_town.getTownId();
if (!group) {
groups[gid] = group = {
id: gid,
//name: town_groups.get(gid).getName(), // hier tritt manchmal ein Fehler auf: TypeError: Cannot read property "getName" of undefined at http://_.grepolis.com/cache/js/merged/game.js?1407322916:8298:525
towns: {}
};
}
group.towns[town_id] = {id: town_id};
//groups[gid].towns[town_id]={id:town_id};
});
//console.log(groups);
return groups;
};
}
var AvailableUnits = {
activate: function () {
var default_title = DM.getl10n("place", "support_overview").options.troop_count + " (" + DM.getl10n("hercules2014", "available") + ")";
$(".picomap_container").prepend("<div id='available_bullseye_unit' class='unit_icon90x90 " + (DATA.bullseyeUnit[DATA.bullseyeUnit.current_group] || "bireme") + "'><div class='amount'></div></div>");
$('.picomap_overlayer').tooltip(getText("options", "ava")[0]);
// Style
$('<style id="dio_available_units_style">' +
'@-webkit-keyframes Z { 0% { opacity: 0; } 100% { opacity: 1; } } ' +
'@keyframes Z { 0% { opacity: 0; } 100% { opacity: 1; } } ' +
'@-webkit-keyframes blurr { 0% { -webkit-filter: blur(5px); } 100% { -webkit-filter: blur(0px); } } ' +
'.picomap_overlayer { cursor:pointer; } ' +
'.picomap_area .bull_eye_buttons { height: 55px; } ' +
'#sea_id { background: none; font-size:25px; cursor:default; height:50px; width:50px; position:absolute; top:70px; left:157px; z-index: 30; } ' +
// Available bullseye unit
'#available_bullseye_unit { margin: 5px 28px 0px 28px; -webkit-animation: blur 2s; animation: Z 1s; } ' +
'#available_bullseye_unit .amount { color:#826021; position:relative; top:28px; font-style:italic; width:79px; font-weight: bold; text-shadow: 0px 0px 2px black, 1px 1px 2px black, 0px 2px 2px black; -webkit-animation: blur 3s; } ' +
'#available_bullseye_unit.big_number { font-size: 0.90em; line-height: 1.4; } ' +
'#available_bullseye_unit.blur { -webkit-animation: blurr 0.6s; } ' +
// Land units
'#available_bullseye_unit.sword .amount { color:#E2D9C1; top:57px; width:90px; } ' +
'#available_bullseye_unit.hoplite .amount { color:#E2D9C1; top:57px; width:90px; } ' +
'#available_bullseye_unit.archer .amount { color:#E2D0C1; top:47px; width:70px; } ' +
'#available_bullseye_unit.chariot { background-position: -990px 10px; } ' +
'#available_bullseye_unit.rider .amount { color:#DFCC6C; top:52px; width:105px; } ' +
'#available_bullseye_unit.chariot .amount,' +
'#available_bullseye_unit.slinger .amount { color:#F5E8B4; top:53px; width:91px; } ' +
'#available_bullseye_unit.catapult .amount { color:#F5F6C5; top:36px; width:87px; } ' +
'#available_bullseye_unit.godsent .amount { color:#F5F6C5; top:57px; width:92px; } ' +
// Mythic units
'#available_bullseye_unit.medusa .amount { color:#FBFFBB; top:50px; width:65px; } ' +
'#available_bullseye_unit.manticore .amount { color:#ECD181; top:50px; width:55px; } ' +
'#available_bullseye_unit.pegasus { background-position: -2970px 11px; } ' +
'#available_bullseye_unit.pegasus .amount { color:#F7F8E3; top:52px; width:90px; } ' +
'#available_bullseye_unit.minotaur { background-position: -2700px 5px; } ' +
'#available_bullseye_unit.minotaur .amount { color:#EAD88A; top:58px; width:78px; } ' +
//'#available_bullseye_unit.zyklop { background-position: -4140px 10px; } '+
'#available_bullseye_unit.zyklop .amount { color:#EDE0B0; top:53px; width:95px; } ' +
'#available_bullseye_unit.harpy { background-position: -1800px 11px; } ' +
'#available_bullseye_unit.harpy .amount { color:#E7DB79; top:40px; width:78px; } ' +
'#available_bullseye_unit.sea_monster .amount { color:#D8EA84; top:58px; width:91px; } ' +
'#available_bullseye_unit.cerberus .amount { color:#EC7445; top:25px; width:101px; } ' +
'#available_bullseye_unit.centaur { background-position: -810px 10px; } ' +
'#available_bullseye_unit.centaur .amount { color:#ECE0A8; top:44px; width:83px; } ' +
'#available_bullseye_unit.fury .amount { color:#E0E0BC; top:57px; width:95px; } ' +
'#available_bullseye_unit.griffin { background-position: -1710px 10px; } ' +
'#available_bullseye_unit.griffin .amount { color:#FFDC9D; top:55px; width:98px; } ' +
'#available_bullseye_unit.calydonian_boar .amount { color:#FFDC9D; top:17px; width:85px; } ' +
// Naval units
'#available_bullseye_unit.attack_ship .amount { color:#FFCB00; top:26px; width:99px; } ' +
'#available_bullseye_unit.bireme .amount { color:#DFC677; color:azure; top:28px; width:79px; } ' +
'#available_bullseye_unit.trireme .amount { color:#F4FFD4; top:24px; width:90px; } ' +
'#available_bullseye_unit.small_transporter .amount { color:#F5F6C5; top:26px; width:84px; } ' +
'#available_bullseye_unit.big_transporter .amount { color:#FFDC9D; top:27px; width:78px; } ' +
'#available_bullseye_unit.colonize_ship .amount { color:#F5F6C5; top:29px; width:76px; } ' +
'#available_bullseye_unit.colonize_ship .amount { color:#F5F6C5; top:29px; width:76px; } ' +
'#available_bullseye_unit.demolition_ship .amount { color:#F5F6C5; top:35px; width:90px; } ' +
// Available units window
'#available_units { overflow: auto; height: 250px; } ' +
'#available_units .unit { margin: 5px; cursor:pointer; overflow:visible; } ' +
'#available_units .unit.active { border: 2px solid #7f653a; border-radius:30px; margin:4px; } ' +
'#available_units .unit span { text-shadow: 1px 1px 1px black, 1px 1px 2px black;} ' +
'#available_units hr { border: none; border-top: 1px solid rgb(8, 148, 33); margin-top: 10px; } ' +
'#available_units .option { float: left; margin-right: 30px; width:100%; } ' +
//'#available_units .box_content { background:url(http://s1.directupload.net/images/140206/8jd9d3ec.png) 94% 94% no-repeat; background-size:140px; } '+
'#available_units .drop_box { position:absolute; top: -38px; right: 83px; width:90px; z-index:10; } ' +
'#available_units .drop_group { width: 120px; } ' +
'#available_units .select_group.open { display:block; } ' +
'#available_units .item-list { overflow: auto; overflow-x: hidden; } ' +
'#available_units .arrow { width:18px; height:18px; background:url(' + drop_out.src + ') no-repeat -1px -1px; position:absolute; } ' +
// Available units button
'#btn_available_units { top:86px; left:119px; z-index:10; position:absolute; } ' +
'#btn_available_units .ico_available_units { margin:5px 0px 0px 4px; width:24px; height:24px; ' +
'background:url(http://s1.directupload.net/images/140323/w4ekrw8b.png) no-repeat 0px 0px;background-size:100%; filter:url(#Hue1); -webkit-filter:hue-rotate(100deg); } ' +
'</style>').appendTo('head');
createWindowType("DIO_UNITS", (LANG.hasOwnProperty(LID) ? getText("options", "ava")[0] : default_title), 365, 270, true, [240, 70]);
// Set Sea-ID beside the bull eye
$('#sea_id').prependTo('#ui_box');
AvailableUnits.addButton();
AvailableUnits.updateBullseye();
},
deactivate: function () {
$('#available_bullseye_unit').remove();
$('#dio_available_units_style').remove();
$('#btn_available_units').remove();
if (Layout.wnd.getOpenFirst(GPWindowMgr.TYPE_DIO_UNITS)) {
Layout.wnd.getOpenFirst(GPWindowMgr.TYPE_DIO_UNITS).close();
}
$('.picomap_overlayer').unbind();
$('#sea_id').appendTo('.picomap_container')
},
addButton: function () {
var default_title = DM.getl10n("place", "support_overview").options.troop_count + " (" + DM.getl10n("hercules2014", "available") + ")";
$('<div id="btn_available_units" class="circle_button"><div class="ico_available_units js-caption"></div></div>').appendTo(".bull_eye_buttons");
// Events
$('#btn_available_units').on('mousedown', function () {
$('#btn_available_units, .ico_available_units').addClass("checked");
}).on('mouseup', function () {
$('#btn_available_units, .ico_available_units').removeClass("checked");
});
$('#btn_available_units, .picomap_overlayer').click(function () {
if (!Layout.wnd.getOpenFirst(GPWindowMgr.TYPE_DIO_UNITS)) {
AvailableUnits.openWindow();
$('#btn_available_units, .ico_available_units').addClass("checked");
} else {
AvailableUnits.closeWindow();
$('#btn_available_units, .ico_available_units').removeClass("checked");
}
});
// Tooltip
$('#btn_available_units').tooltip(LANG.hasOwnProperty(LID) ? getText("labels", "uni") : default_title);
},
openWindow: function () {
var groupArray = uw.ITowns.townGroups.getGroupsDIO(),
unitArray = {
"sword": 0,
"archer": 0,
"hoplite": 0,
"slinger": 0,
"rider": 0,
"chariot": 0,
"catapult": 0,
"godsent": 0,
"manticore": 0,
"harpy": 0,
"pegasus": 0,
"griffin": 0,
"cerberus": 0,
"minotaur": 0,
"medusa": 0,
"zyklop": 0,
"centaur": 0,
"calydonian_boar": 0,
"fury": 0,
"sea_monster": 0,
"small_transporter": 0,
"big_transporter": 0,
"bireme": 0,
"attack_ship": 0,
"trireme": 0,
"demolition_ship": 0,
"colonize_ship": 0
};
if (!uw.Game.hasArtemis) {
delete unitArray.calydonian_boar;
delete unitArray.griffin;
}
var land_units_str = "", content =
'<div id="available_units">' +
// Dropdown menu
'<div class="drop_box">' +
'<div class="drop_group dropdown default">' +
'<div class="border-left"></div><div class="border-right"></div>' +
'<div class="caption" name="' + groupArray[DATA.bullseyeUnit.current_group].id + '">' + ITowns.town_groups._byId[groupArray[DATA.bullseyeUnit.current_group].id].attributes.name + '</div>' +
'<div class="arrow"></div>' +
'</div>' +
'<div class="select_group dropdown-list default active"><div class="item-list"></div></div>' +
'</div>' +
// Content
'<div class="box_content">';
for (var unit in unitArray) {
if (unitArray.hasOwnProperty(unit)) {
land_units_str += '<div class="unit index_unit bold unit_icon40x40 ' + unit + '"></div>';
if (unit == "sea_monster") {
land_units_str += '<div style="clear:left;"></div>'; // break
}
}
}
content += land_units_str + '</div></div>';
AvailableUnits.wnd = Layout.wnd.Create(GPWindowMgr.TYPE_DIO_UNITS);
AvailableUnits.wnd.setContent(content);
if (Game.premium_features.curator <= Timestamp.now()) {
$('#available_units .drop_box').css({display: 'none'});
DATA.bullseyeUnit.current_group = -1;
}
// Add groups to dropdown menu
for (var group in groupArray) {
if (groupArray.hasOwnProperty(group)) {
var group_name = ITowns.town_groups._byId[group].attributes.name;
$('<div class="option' + (group == -1 ? " sel" : "") + '" name="' + group + '">' + group_name + '</div>').appendTo('#available_units .item-list');
}
}
// Update
AvailableUnits.updateWindow();
// Dropdown menu Handler
$('#available_units .drop_group').click(function () {
$('#available_units .select_group').toggleClass('open');
});
// Change group
$('#available_units .select_group .option').click(function () {
DATA.bullseyeUnit.current_group = $(this).attr("name");
$('#available_units .select_group').removeClass('open');
$('#available_units .select_group .option.sel').removeClass("sel");
$(this).addClass("sel");
$('#available_units .drop_group .caption').attr("name", DATA.bullseyeUnit.current_group);
$('#available_units .drop_group .caption').get(0).innerHTML = this.innerHTML;
$('#available_units .unit.active').removeClass("active");
$('#available_units .unit.' + (DATA.bullseyeUnit[DATA.bullseyeUnit.current_group] || "bireme")).addClass("active");
AvailableUnits.updateWindow();
AvailableUnits.updateBullseye();
AvailableUnits.save();
});
// Set active bullseye unit
$('#available_units .unit.' + (DATA.bullseyeUnit[DATA.bullseyeUnit.current_group] || "bireme")).addClass("active");
// Change bullseye unit
$('#available_units .unit').click(function () {
DATA.bullseyeUnit[DATA.bullseyeUnit.current_group] = this.className.split(" ")[4].trim();
$('#available_units .unit.active').removeClass("active");
$(this).addClass("active");
AvailableUnits.updateBullseye();
AvailableUnits.save();
});
// Close button event - uncheck available units button
Layout.wnd.getOpenFirst(GPWindowMgr.TYPE_DIO_UNITS).getJQCloseButton().get(0).onclick = function () {
$('#btn_available_units, .ico_available_units').removeClass("checked");
};
},
closeWindow: function () {
Layout.wnd.getOpenFirst(GPWindowMgr.TYPE_DIO_UNITS).close();
},
save: function () {
saveValue(WID + "_bullseyeUnit", JSON.stringify(DATA.bullseyeUnit));
},
updateBullseye: function () {
var sum = 0, str = "", fsize = ['1.4em', '1.2em', '1.15em', '1.1em', '1.0em', '0.95em'], i;
if ($('#available_bullseye_unit').get(0)) {
$('#available_bullseye_unit').get(0).className = "unit_icon90x90 " + (DATA.bullseyeUnit[DATA.bullseyeUnit.current_group] || "bireme");
if (groupUnitArray[DATA.bullseyeUnit.current_group]) {
sum = groupUnitArray[DATA.bullseyeUnit.current_group][(DATA.bullseyeUnit[DATA.bullseyeUnit.current_group] || "bireme")];
}
sum = sum.toString();
for (i = 0; i < sum.length; i++) {
str += "<span style='font-size:" + fsize[i] + "'>" + sum[i] + "</span>";
}
$('#available_bullseye_unit .amount').get(0).innerHTML = str;
if (sum >= 100000) {
$('#available_bullseye_unit').addClass("big_number");
} else {
$('#available_bullseye_unit').removeClass("big_number");
}
}
},
updateWindow: function () {
$('#available_units .box_content .unit').each(function () {
var unit = this.className.split(" ")[4];
this.innerHTML = '<span style="font-size:0.9em">' + groupUnitArray[DATA.bullseyeUnit.current_group][unit] + '</span>';
});
}
};
/*******************************************************************************************************************************
* Comparison box
* ----------------------------------------------------------------------------------------------------------------------------
* | ● Compares the units of each unit type
* ----------------------------------------------------------------------------------------------------------------------------
*******************************************************************************************************************************/
var UnitComparison = {
activate: function () {
//UnitComparison.addBox();
UnitComparison.addButton();
// Create Window Type
createWindowType("DIO_COMPARISON", getText("labels", "dsc"), 480, 315, true, ["center", "center", 100, 100]);
// Style
$('<style id="dio_comparison_style"> ' +
// Button
'#dio_comparison_button { top:51px; left:120px; z-index:10; position:absolute; } ' +
'#dio_comparison_button .ico_comparison { margin:5px 0px 0px 4px; width:24px; height:24px; ' +
'background:url(http://666kb.com/i/cjq6cxia4ms8mn95r.png) no-repeat 0px 0px; background-size:100%; filter:url(#Hue1); -webkit-filter:hue-rotate(60deg); } ' +
'#dio_comparison_button.checked .ico_comparison { margin-top:6px; } ' +
// Window
'#dio_comparison a { float:left; background-repeat:no-repeat; background-size:25px; line-height:2; margin-right:10px; } ' +
'#dio_comparison .box_content { text-align:center; font-style:normal; } ' +
// Menu tabs
'#dio_comparison_menu .tab_icon { left: 23px;} ' +
'#dio_comparison_menu .tab_label { margin-left: 18px; } ' +
// Content
'#dio_comparison .hidden { display:none; } ' +
'#dio_comparison table { width:480px; } ' +
'#dio_comparison .hack .t_hack, #dio_comparison .pierce .t_pierce, #dio_comparison .distance .t_distance, #dio_comparison .sea .t_sea { display:inline-table; } ' +
'#dio_comparison .box_content { background:url(http://s1.directupload.net/images/140206/8jd9d3ec.png) 94% 94% no-repeat; background-size:140px; } ' +
'#dio_comparison .compare_type_icon { height:25px; width:25px; background:url(https://gpall.innogamescdn.com/images/game/units/units_info_sprite2.51.png); background-size:100%; } ' +
'#dio_comparison .compare_type_icon.booty { background:url(http://s14.directupload.net/images/140404/ki4gwd7x.png); background-size:100%; } ' +
'#dio_comparison .compare_type_icon.time { background:url(https://gpall.innogamescdn.com/images/game/res/time.png); background-size:100%; } ' +
'#dio_comparison .compare_type_icon.favor { background:url(https://gpall.innogamescdn.com/images/game/res/favor.png); background-size:100%; } ' +
'</style>').appendTo("head");
},
deactivate: function () {
$('#dio_comparison_button').remove();
$('#dio_comparison_style').remove();
if (Layout.wnd.getOpenFirst(GPWindowMgr.TYPE_DIO_COMPARISON)) {
Layout.wnd.getOpenFirst(GPWindowMgr.TYPE_DIO_COMPARISON).close();
}
},
addButton: function () {
$('<div id="dio_comparison_button" class="circle_button"><div class="ico_comparison js-caption"></div></div>').appendTo(".bull_eye_buttons");
// Events
/*
$('#dio_comparison_button').on('mousedown', function(){
$('#dio_comparison_button').addClass("checked");
}, function(){
$('#dio_comparison_button').removeClass("checked");
});
*/
$('#dio_comparison_button').on('click', function () {
if (!Layout.wnd.getOpenFirst(GPWindowMgr.TYPE_DIO_COMPARISON)) {
UnitComparison.openWindow();
$('#dio_comparison_button').addClass("checked");
} else {
UnitComparison.closeWindow();
$('#dio_comparison_button').removeClass("checked");
}
});
// Tooltip
$('#dio_comparison_button').tooltip(getText("labels", "dsc"));
},
openWindow: function () {
var content =
// Title tabs
'<ul id="dio_comparison_menu" class="menu_inner" style="top: -36px; right: 35px;">' +
'<li><a class="submenu_link sea" href="#"><span class="left"><span class="right"><span class="middle">' +
'<span class="tab_icon icon_small townicon_so"></span><span class="tab_label">' + getText("labels", "sea") + '</span>' +
'</span></span></span></a></li>' +
'<li><a class="submenu_link distance" href="#"><span class="left"><span class="right"><span class="middle">' +
'<span class="tab_icon icon_small townicon_di"></span><span class="tab_label">' + getText("labels", "dst") + '</span>' +
'</span></span></span></a></li>' +
'<li><a class="submenu_link pierce" href="#"><span class="left"><span class="right"><span class="middle">' +
'<span class="tab_icon icon_small townicon_sh"></span><span class="tab_label">' + getText("labels", "prc") + '</span>' +
'</span></span></span></a></li>' +
'<li><a class="submenu_link hack active" href="#"><span class="left"><span class="right"><span class="middle">' +
'<span class="tab_icon icon_small townicon_lo"></span><span class="tab_label">' + getText("labels", "hck") + '</span>' +
'</span></span></span></a></li>' +
'</ul>' +
// Content
'<div id="dio_comparison" style="margin-bottom:5px; font-style:italic;"><div class="box_content hack"></div></div>';
Layout.wnd.Create(GPWindowMgr.TYPE_DIO_COMPARISON).setContent(content);
UnitComparison.addComparisonTable("hack");
UnitComparison.addComparisonTable("pierce");
UnitComparison.addComparisonTable("distance");
UnitComparison.addComparisonTable("sea");
// Tooltips
var labelArray = DM.getl10n("barracks"),
labelAttack = DM.getl10n("context_menu", "titles").attack,
labelDefense = DM.getl10n("place", "tabs")[0];
$('.tr_att').tooltip(labelAttack);
$('.tr_def').tooltip(labelDefense + " (Ø)");
$('.tr_def_sea').tooltip(labelDefense);
$('.tr_spd').tooltip(labelArray.tooltips.speed);
$('.tr_bty').tooltip(labelArray.tooltips.booty.title);
$('.tr_bty_sea').tooltip(labelArray.tooltips.ship_transport.title);
$('.tr_res').tooltip(labelArray.costs + " (" +
labelArray.cost_details.wood + " + " +
labelArray.cost_details.stone + " + " +
labelArray.cost_details.iron + ")"
);
$('.tr_fav').tooltip(labelArray.costs + " (" + labelArray.cost_details.favor + ")");
$('.tr_tim').tooltip(labelArray.cost_details.buildtime_barracks + " (s)");
$('.tr_tim_sea').tooltip(labelArray.cost_details.buildtime_docks + " (s)");
UnitComparison.switchComparisonTables();
// Close button event - uncheck available units button
Layout.wnd.getOpenFirst(GPWindowMgr.TYPE_DIO_COMPARISON).getJQCloseButton().get(0).onclick = function () {
$('#dio_comparison_button').removeClass("checked");
$('.ico_comparison').get(0).style.marginTop = "5px";
};
},
closeWindow: function () {
Layout.wnd.getOpenFirst(GPWindowMgr.TYPE_DIO_COMPARISON).close();
},
switchComparisonTables: function () {
$('#dio_comparison_menu .hack, #dio_comparison_menu .pierce, #dio_comparison_menu .distance, #dio_comparison_menu .sea').click(function () {
$('#dio_comparison .box_content').removeClass($('#dio_comparison .box_content').get(0).className.split(" ")[1]);
console.debug(this.className.split(" ")[1]);
$('#dio_comparison .box_content').addClass(this.className.split(" ")[1]);
$('#dio_comparison_menu .active').removeClass("active");
$(this).addClass("active");
});
},
tooltips: [], t: 0,
addComparisonTable: function (type) {
var pos = {
att: {hack: "36%", pierce: "27%", distance: "45.5%", sea: "72.5%"},
def: {hack: "18%", pierce: "18%", distance: "18%", sea: "81.5%"}
};
var unitIMG = "https://gpall.innogamescdn.com/images/game/units/units_info_sprite2.51.png";
var strArray = [
"<td></td>",
'<td><div class="compare_type_icon" style="background-position: 0% ' + pos.att[type] + ';"></div></td>',
'<td><div class="compare_type_icon" style="background-position: 0% ' + pos.def[type] + ';"></div></td>',
'<td><div class="compare_type_icon" style="background-position: 0% 63%;"></div></td>',
(type !== "sea") ? '<td><div class="compare_type_icon booty"></div></td>' : '<td><div class="compare_type_icon" style="background-position: 0% 91%;"></div></td>',
'<td><div class="compare_type_icon" style="background-position: 0% 54%;"></div></td>',
'<td><div class="compare_type_icon favor"></div></td>',
'<td><div class="compare_type_icon time"></div></td>'
];
for (var e in uw.GameData.units) {
if (uw.GameData.units.hasOwnProperty(e)) {
var valArray = [];
if (type === (uw.GameData.units[e].attack_type || "sea") && (e !== "militia")) {
valArray.att = Math.round(uw.GameData.units[e].attack * 10 / uw.GameData.units[e].population) / 10;
valArray.def = Math.round(((uw.GameData.units[e].def_hack + uw.GameData.units[e].def_pierce + uw.GameData.units[e].def_distance) * 10) / (3 * uw.GameData.units[e].population)) / 10;
valArray.def = valArray.def || Math.round(uw.GameData.units[e].defense * 10 / uw.GameData.units[e].population) / 10;
valArray.speed = uw.GameData.units[e].speed;
valArray.booty = Math.round(((uw.GameData.units[e].booty) * 10) / uw.GameData.units[e].population) / 10;
valArray.booty = valArray.booty || Math.round(((uw.GameData.units[e].capacity ? uw.GameData.units[e].capacity + 6 : 0) * 10) / uw.GameData.units[e].population) / 10;
valArray.favor = Math.round((uw.GameData.units[e].favor * 10) / uw.GameData.units[e].population) / 10;
valArray.res = Math.round((uw.GameData.units[e].resources.wood + uw.GameData.units[e].resources.stone + uw.GameData.units[e].resources.iron) / (uw.GameData.units[e].population));
valArray.time = Math.round(uw.GameData.units[e].build_time / uw.GameData.units[e].population);
// World without Artemis? -> grey griffin and boar
valArray.heroStyle = "";
valArray.heroStyleIMG = "";
if (!uw.Game.hasArtemis && ((e === "griffin") || (e === "calydonian_boar"))) {
valArray.heroStyle = "color:black;opacity: 0.4;";
valArray.heroStyleIMG = "filter: url(#GrayScale); -webkit-filter:grayscale(100%);";
}
strArray[0] += '<td class="un' + (UnitComparison.t) + '"><span class="unit index_unit unit_icon40x40 ' + e + '" style="' + valArray.heroStyle + valArray.heroStyleIMG + '"></span></td>';
strArray[1] += '<td class="bold" style="color:' + ((valArray.att > 19) ? 'green;' : ((valArray.att < 10 && valArray.att !== 0 ) ? 'red;' : 'black;')) + valArray.heroStyle + '">' + valArray.att + '</td>';
strArray[2] += '<td class="bold" style="color:' + ((valArray.def > 19) ? 'green;' : ((valArray.def < 10 && valArray.def !== 0 ) ? 'red;' : 'black;')) + valArray.heroStyle + '">' + valArray.def + '</td>';
strArray[3] += '<td class="bold" style="' + valArray.heroStyle + '">' + valArray.speed + '</td>';
strArray[4] += '<td class="bold" style="' + valArray.heroStyle + '">' + valArray.booty + '</td>';
strArray[5] += '<td class="bold" style="' + valArray.heroStyle + '">' + valArray.res + '</td>';
strArray[6] += '<td class="bold" style="color:' + ((valArray.favor > 0) ? 'rgb(0, 0, 214);' : 'black;') + valArray.heroStyle + ';">' + valArray.favor + '</td>';
strArray[7] += '<td class="bold" style="' + valArray.heroStyle + '">' + valArray.time + '</td>';
UnitComparison.tooltips[UnitComparison.t] = uw.GameData.units[e].name;
UnitComparison.t++;
}
}
}
$('<table class="hidden t_' + type + '" cellpadding="1px">' +
'<tr>' + strArray[0] + '</tr>' +
'<tr class="tr_att">' + strArray[1] + '</tr><tr class="tr_def' + (type == "sea" ? "_sea" : "") + '">' + strArray[2] + '</tr>' +
'<tr class="tr_spd">' + strArray[3] + '</tr><tr class="tr_bty' + (type == "sea" ? "_sea" : "") + '">' + strArray[4] + '</tr>' +
'<tr class="tr_res">' + strArray[5] + '</tr><tr class="tr_fav">' + strArray[6] + '</tr><tr class="tr_tim' + (type == "sea" ? "_sea" : "") + '">' + strArray[7] + '</tr>' +
'</table>').appendTo('#dio_comparison .box_content');
for (var i = 0; i <= UnitComparison.t; i++) {
$('.un' + i).tooltip(UnitComparison.tooltips[i]);
}
}
};
/*******************************************************************************************************************************
* Reports and Messages
* ----------------------------------------------------------------------------------------------------------------------------
* | ● Storage of the selected filter (only in German Grepolis yet)
* ----------------------------------------------------------------------------------------------------------------------------
*******************************************************************************************************************************/
var filter = "all";
function saveFilter() {
$('#dd_filter_type_list .item-list div').each(function () {
$(this).click(function () {
filter = $(this).attr("name");
});
});
/*
var i = 0;
$("#report_list a").each(function () {
//console.log((i++) +" = " + $(this).attr('data-reportid'));
});
*/
}
function loadFilter() {
if ($('#dd_filter_type_list .selected').attr("name") !== filter) {
$('#dd_filter_type .caption').click();
$('#dd_filter_type_list .item-list div[name=' + filter + ']').click();
}
}
function removeReports() {
$("#report_list li:contains('spioniert')").each(function () {
//$(this).remove();
});
}
var zut = 0;
var messageArray = {};
function filterPlayer() {
if (!$('#message_filter_list').get(0)) {
$('<div id="message_filter_list" style="height:300px;overflow-y:scroll; width: 790px;"></div>').appendTo('#folder_container');
$("#message_list").get(0).style.display = "none";
}
if (zut < parseInt($('.es_last_page').get(0).value, 10) - 1) {
$('.es_page_input').get(0).value = zut++;
$('.jump_button').click();
$("#message_list li:contains('')").each(function () {
$(this).appendTo('#message_filter_list');
});
} else {
zut = 1;
}
}
/*******************************************************************************************************************************
* World Wonder Ranking - Change
*******************************************************************************************************************************/
function getWorldWonderTypes() {
$.ajax({
type: "GET",
url: "/game/alliance?town_id=" + uw.Game.town_id + "&action=world_wonders&h=" + uw.Game.csrfToken + "&json=%7B%22town_id%22%3A" + uw.Game.town_id + "%2C%22nlreq_id%22%3A" + uw.Game.notification_last_requested_id +
"%7D&_=" + uw.Game.server_time,
success: function (text) {
try {
//console.log(JSON.parse(text));
temp = JSON.parse(text).json.data.world_wonders;
for (var t in temp) {
if (temp.hasOwnProperty(t)) {
wonderTypes[temp[t].wonder_type] = temp[t].full_name;
}
}
temp = JSON.parse(text).json.data.buildable_wonders;
for (var x in temp) {
if (temp.hasOwnProperty(x)) {
wonderTypes[x] = temp[x].name;
}
}
saveValue(MID + "_wonderTypes", JSON.stringify(wonderTypes));
} catch (error) {
errorHandling(error, "getWorldWonderTypes");
}
}
});
}
function getWorldWonders() {
$.ajax({
type: "GET",
url: "/game/ranking?town_id=" + uw.Game.town_id + "&action=wonder_alliance&h=" + uw.Game.csrfToken + "&json=%7B%22type%22%3A%22all%22%2C%22town_id%22%3A" + uw.Game.town_id + "%2C%22nlreq_id%22%3A3" + uw.Game.notification_last_requested_id +
"%7D&_=" + uw.Game.server_time
});
}
var WorldWonderRanking = {
activate: function () {
if ($('#dio_wonder_ranking').get(0)) {
$('#dio_wonder_ranking').remove();
}
$('<style id="dio_wonder_ranking" type="text/css"> .wonder_ranking { display: none; } </style>').appendTo('head');
},
deactivate: function () {
if ($('#dio_wonder_ranking').get(0)) {
$('#dio_wonder_ranking').remove();
}
$('<style id="dio_wonder_ranking" type="text/css"> .wonder_ranking { display: block; } </style>').appendTo('head');
},
change: function (html) {
if ($('#ranking_inner tr', html)[0].children.length !== 1) { // world wonders exist?
try {
var ranking = {}, temp_ally, temp_ally_id, temp_ally_link;
// Save world wonder ranking into array
$('#ranking_inner tr', html).each(function () {
try {
if (this.children[0].innerHTML) {
temp_ally = this.children[1].children[0].innerHTML; // das hier
temp_ally_id = this.children[1].children[0].onclick.toString();
temp_ally_id = temp_ally_id.substring(temp_ally_id.indexOf(",") + 1);
temp_ally_id = temp_ally_id.substring(0, temp_ally_id.indexOf(")"));
temp_ally_link = this.children[1].innerHTML;
} else {
//World wonder name
var wonder_name = this.children[3].children[0].innerHTML;
for (var w in wonderTypes) {
if (wonderTypes.hasOwnProperty(w)) {
if (wonder_name == wonderTypes[w]) {
var level = this.children[4].innerHTML, // world wonder level
ww_data = JSON.parse(atob(this.children[3].children[0].href.split("#")[1])), wonder_link;
//console.log(ww_data);
if (!ranking.hasOwnProperty(level)) {
// add wonder types
ranking[level] = {
colossus_of_rhodes: {},
great_pyramid_of_giza: {},
hanging_gardens_of_babylon: {},
lighthouse_of_alexandria: {},
mausoleum_of_halicarnassus: {},
statue_of_zeus_at_olympia: {},
temple_of_artemis_at_ephesus: {}
};
}
if (!ranking[level][w].hasOwnProperty(temp_ally_id)) {
ranking[level][w][temp_ally_id] = {}; // add alliance array
}
// island coordinates of the world wonder:
ranking[level][w][temp_ally_id].ix = ww_data.ix;
ranking[level][w][temp_ally_id].iy = ww_data.iy;
ranking[level][w][temp_ally_id].sea = this.children[5].innerHTML; // world wonder sea
wonder_link = this.children[3].innerHTML;
if (temp_ally.length > 15) {
temp_ally = temp_ally.substring(0, 15) + '.';
}
wonder_link = wonder_link.substr(0, wonder_link.indexOf(">") + 1) + temp_ally + '</a>';
ranking[level][w][temp_ally_id].ww_link = wonder_link;
// other data of the world wonder
ranking[level][w][temp_ally_id].ally_link = temp_ally_link;
ranking[level][w][temp_ally_id].ally_name = temp_ally; // alliance name
ranking[level][w][temp_ally_id].name = wonder_name; // world wonder name
// Save wonder coordinates for wonder icons on map
if (!wonder.map[w]) {
wonder.map[w] = {};
}
wonder.map[w][ww_data.ix + "_" + ww_data.iy] = level;
saveValue(WID + "_wonder", JSON.stringify(wonder));
}
}
}
}
} catch (error) {
errorHandling(error, "WorldWonderRanking.change(function)");
}
});
if ($('#ranking_table_wrapper').get(0)) {
$('#ranking_fixed_table_header').get(0).innerHTML = '<tr>' +
'<td style="width:10px">#</td>' +
'<td>Colossus</td>' +
'<td>Pyramid</td>' +
'<td>Garden</td>' +
'<td>Lighthouse</td>' +
'<td>Mausoleum</td>' +
'<td>Statue</td>' +
'<td>Temple</td>' +
'</tr>';
$('#ranking_fixed_table_header').css({
tableLayout: 'fixed',
width: '100%',
//paddingLeft: '0px',
paddingRight: '15px'
});
var ranking_substr = '', z = 0;
for (var level = 10; level >= 1; level--) {
if (ranking.hasOwnProperty(level)) {
var complete = "";
if (level == 10) {
complete = "background: rgba(255, 236, 108, 0.36);";
}
// Alternate table background color
if (z === 0) {
ranking_substr += '<tr class="game_table_odd" style="' + complete + '"><td style="border-right: 1px solid #d0be97;">' + level + '</td>';
z = 1;
} else {
ranking_substr += '<tr class="game_table_even" style="' + complete + '"><td style="border-right: 1px solid #d0be97;">' + level + '</td>';
z = 0;
}
for (var w in ranking[level]) {
if (ranking[level].hasOwnProperty(w)) {
ranking_substr += '<td>';
for (var a in ranking[level][w]) {
if (ranking[level][w].hasOwnProperty(a)) {
ranking_substr += '<nobr>' + ranking[level][w][a].ww_link + '</nobr><br />'; // ww link
}
}
ranking_substr += '</td>';
}
}
ranking_substr += '</tr>';
}
}
var ranking_str = '<table id="ranking_endless_scroll" class="game_table" cellspacing="0"><tr>' +
'<td style="width:10px;border-right: 1px solid #d0be97;"></td>' +
'<td><div class="dio_wonder" style="background:' + worldWonderIcon.colossus_of_rhodes + ';margin-left:26px"></div></td>' + // Colossus
'<td><div class="dio_wonder" style="background:' + worldWonderIcon.great_pyramid_of_giza + ';margin-left:19px"></div></td>' + // Pyramid
'<td><div class="dio_wonder" style="background:' + worldWonderIcon.hanging_gardens_of_babylon + ';margin-left:19px"></div></td>' + // Garden
'<td><div class="dio_wonder" style="background:' + worldWonderIcon.lighthouse_of_alexandria + ';margin-left:24px"></div></td>' + // Lighthouse
'<td><div class="dio_wonder" style="background:' + worldWonderIcon.mausoleum_of_halicarnassus + ';margin-left:25px"></div></td>' + // Mausoleum
'<td><div class="dio_wonder" style="background:' + worldWonderIcon.statue_of_zeus_at_olympia + ';margin-left:25px"></div></td>' + // Statue
'<td><div class="dio_wonder" style="background:' + worldWonderIcon.temple_of_artemis_at_ephesus + ';margin-left:22px"></div></td>' + // Temple
'</tr>' + ranking_substr + '</table>';
$('#ranking_table_wrapper').get(0).innerHTML = ranking_str;
$('#ranking_endless_scroll .dio_wonder').css({
width: "65px", height: "60px",
backgroundSize: "auto 100%",
backgroundPosition: "64px 0px"
});
$('#ranking_endless_scroll').css({
tableLayout: 'fixed',
width: '100%',
overflowY: 'auto',
overflowX: 'hidden',
fontSize: '0.7em',
lineHeight: '2'
});
$('#ranking_endless_scroll tbody').css({
verticalAlign: 'text-top'
});
$('#ranking_table_wrapper img').css({
width: "60px"
});
$('#ranking_table_wrapper').css({
overflowY: 'scroll'
});
}
} catch (error) {
errorHandling(error, "WorldWonderRanking.change");
}
}
if ($('.wonder_ranking').get(0)) {
$('.wonder_ranking').get(0).style.display = "block";
}
}
};
/*******************************************************************************************************************************
* World Wonder
* ----------------------------------------------------------------------------------------------------------------------------
* | ● click adjustment
* | ● Share calculation (= ratio of player points to alliance points)
* | ● Resources calculation & counter (stores amount)
* | ● Adds missing previous & next buttons on finished world wonders (better browsing through world wonders)
* ----------------------------------------------------------------------------------------------------------------------------
*******************************************************************************************************************************/
// getPointRatio: Default
function getPointRatioFromAllianceProfile() {
if (AID) {
$.ajax({
type: "GET",
url: '/game/alliance?town_id=' + uw.Game.townId + '&action=profile&h=' + uw.Game.csrfToken + '&json=%7B%22alliance_id%22%3A' + AID + '%2C%22town_id%22%3A' + uw.Game.townId +
'%2C%22nlreq_id%22%3A' + uw.Game.notification_last_requested_id + '%7D&_=' + uw.Game.server_time,
success: function (text) {
try {
text = text.substr(text.indexOf("/li") + 14).substr(0, text.indexOf("\ "));
var AP = parseInt(text, 10);
wonder.ratio[AID] = 100 / AP * uw.Game.player_points;
saveValue(WID + "_wonder", JSON.stringify(wonder));
} catch (error) {
errorHandling(error, "getPointRatioFromAllianceProfile");
}
}
});
} else {
wonder.ratio[AID] = -1;
saveValue(WID + "_wonder", JSON.stringify(wonder));
}
}
function getPointRatioFromAllianceRanking() {
try {
if (AID && $('.current_player .r_points').get(0)) {
wonder.ratio[AID] = 100 / parseInt($('.current_player .r_points').get(0).innerHTML, 10) * uw.Game.player_points;
saveValue(WID + "_wonder", JSON.stringify(wonder));
}
} catch (error) {
errorHandling(error, "getPointRatioFromAllianceRaking");
}
}
function getPointRatioFromAllianceMembers() {
try {
var ally_points = 0;
$('#ally_members_body tr').each(function () {
ally_points += parseInt($(this).children().eq(2).text(), 10) || 0;
});
wonder.ratio[AID] = 100 / ally_points * uw.Game.player_points;
saveValue(WID + "_wonder", JSON.stringify(wonder));
} catch (error) {
errorHandling(error, "getPointRatioFromAllianceMembers");
}
}
var WorldWonderCalculator = {
activate: function () {
// Style
$('<style id="dio_wonder_calculator"> ' +
'.wonder_controls { height:380px; } ' +
'.wonder_controls .wonder_progress { margin: 0px auto 5px; } ' +
'.wonder_controls .wonder_header { text-align:left; margin:10px -8px 12px 3px; }' +
'.wonder_controls .build_wonder_icon { top:25px !important; }' +
'.wonder_controls .wonder_progress_bar { top:54px; }' +
'.wonder_controls .trade fieldset { float:right; } ' +
'.wonder_controls .wonder_res_container { right:29px; } ' +
'.wonder_controls .ww_ratio {position:relative; height:auto; } ' +
'.wonder_controls fieldset.next_level_res { height:auto; } ' +
'.wonder_controls .town-capacity-indicator { margin-top:0px; } ' +
'.wonder_controls .ww_ratio .progress { line-height:1; color:white; font-size:0.8em; } ' +
'.wonder_controls .ww_perc { position:absolute; width:242px; text-align:center; } ' +
'.wonder_controls .indicator3 { z-index:0; } ' +
'.wonder_controls .indicator3.red { background-position:right -203px; height:10px; width:242px; } ' +
'.wonder_controls .indicator3.green { background-position:right -355px; height:10px; width:242px; } ' +
'.wonder_controls .all_res { background:url(https://gpall.innogamescdn.com/images/game/layout/resources_2.32.png) no-repeat 0 -90px; width:30px; height:30px; margin:0 auto; margin-left:5px; } ' +
'.wonder_controls .town-capacity-indicator { margin-top:0px; } ' +
'</style>').appendTo('head');
},
deactivate: function () {
$('#dio_wonder_calculator').remove();
}
};
// TODO: Split function...
function getResWW() {
try {
var wndArray = uw.GPWindowMgr.getOpen(uw.Layout.wnd.TYPE_WONDERS);
for (var e in wndArray) {
if (wndArray.hasOwnProperty(e)) {
var wndID = "#gpwnd_" + wndArray[e].getID() + " ";
if ($(wndID + '.wonder_progress').get(0)) {
var res = 0,
ww_share = {total: {share: 0, sum: 0}, stage: {share: 0, sum: 0}},
ww_type = $(wndID + '.finished_image_small').attr('src').split("/")[6].split("_")[0], // Which world wonder?
res_stages = [2, 4, 6, 10, 16, 28, 48, 82, 140, 238], // Rohstoffmenge pro Rohstofftyp in 100.000 Einheiten
stage = parseInt($(wndID + '.wonder_expansion_stage span').get(0).innerHTML.split("/")[0], 10) + 1, // Derzeitige Füllstufe
speed = uw.Game.game_speed;
wonder.storage[AID] = wonder.storage[AID] || {};
wonder.storage[AID][ww_type] = wonder.storage[AID][ww_type] || {};
wonder.storage[AID][ww_type][stage] = wonder.storage[AID][ww_type][stage] || 0;
if (!$(wndID + '.ww_ratio').get(0)) {
$('<fieldset class="ww_ratio"></fieldset>').appendTo(wndID + '.wonder_res_container .trade');
$(wndID + '.wonder_header').prependTo(wndID + '.wonder_progress');
$(wndID + '.wonder_res_container .send_res').insertBefore(wndID + '.wonder_res_container .next_level_res');
}
for (var d in res_stages) {
if (res_stages.hasOwnProperty(d)) {
ww_share.total.sum += res_stages[d];
}
}
ww_share.total.sum *= speed * 300000;
ww_share.total.share = parseInt(wonder.ratio[AID] * (ww_share.total.sum / 100), 10);
ww_share.stage.sum = speed * res_stages[stage - 1] * 300000;
ww_share.stage.share = parseInt(wonder.ratio[AID] * (ww_share.stage.sum / 100), 10); // ( 3000 = 3 Rohstofftypen * 100000 Rohstoffe / 100 Prozent)
setResWW(stage, ww_type, ww_share, wndID);
$(wndID + '.wonder_res_container .send_resources_btn').click(function (e) {
try {
wonder.storage[AID][ww_type][stage] += parseInt($(wndID + '#ww_trade_type_wood input:text').get(0).value, 10);
wonder.storage[AID][ww_type][stage] += parseInt($(wndID + '#ww_trade_type_stone input:text').get(0).value, 10);
wonder.storage[AID][ww_type][stage] += parseInt($(wndID + '#ww_trade_type_iron input:text').get(0).value, 10);
setResWW(stage, ww_type, ww_share, wndID);
saveValue(WID + "_wonder", JSON.stringify(wonder));
} catch (error) {
errorHandling(error, "getResWW_Click");
}
});
} else {
$('<div class="prev_ww pos_Y"></div><div class="next_ww pos_Y"></div>').appendTo(wndID + '.wonder_controls');
$(wndID + '.wonder_finished').css({width: '100%'});
$(wndID + '.pos_Y').css({
top: '-266px'
});
}
}
}
} catch (error) {
errorHandling(error, "getResWW");
}
}
function setResWW(stage, ww_type, ww_share, wndID) {
try {
var stage_width, total_width, res_total = 0, stage_color = "red", total_color = "red";
for (var z in wonder.storage[AID][ww_type]) {
if (wonder.storage[AID][ww_type].hasOwnProperty(z)) {
res_total += wonder.storage[AID][ww_type][z];
}
}
// Progressbar
if (ww_share.stage.share > wonder.storage[AID][ww_type][stage]) {
stage_width = (242 / ww_share.stage.share) * wonder.storage[AID][ww_type][stage];
stage_color = "red";
} else {
stage_width = 242;
stage_color = "green"
}
if (ww_share.total.share > res_total) {
total_color = "red";
total_width = (242 / ww_share.total.share) * res_total;
} else {
total_width = 242;
total_color = "green"
}
$(wndID + '.ww_ratio').get(0).innerHTML = "";
$(wndID + '.ww_ratio').append(
'<legend>' + getText("labels", "leg") + ' (<span style="color:#090">' + (Math.round(wonder.ratio[AID] * 100) / 100) + '%</span>):</legend>' +
'<div class="town-capacity-indicator">' +
'<div class="icon all_res"></div>' +
'<div id="ww_town_capacity_stadium" class="tripple-progress-progressbar">' +
'<div class="border_l"></div><div class="border_r"></div><div class="body"></div>' +
'<div class="progress overloaded">' +
'<div class="indicator3 ' + stage_color + '" style="width:' + stage_width + 'px"></div>' +
'<span class="ww_perc">' + Math.round(wonder.storage[AID][ww_type][stage] / ww_share.stage.share * 100) + '%</span>' +
'</div>' +
'<div class="amounts">' + getText("labels", "stg") + ': <span class="curr">' + pointNumber(wonder.storage[AID][ww_type][stage]) + '</span> / ' +
'<span class="max">' + pointNumber(Math.round(ww_share.stage.share / 1000) * 1000) + '</span></div>' +
'</div></div>' +
'<div class="town-capacity-indicator">' +
'<div class="icon all_res"></div>' +
'<div id="ww_town_capacity_total" class="tripple-progress-progressbar">' +
'<div class="border_l"></div><div class="border_r"></div><div class="body"></div>' +
'<div class="progress overloaded">' +
'<div class="indicator3 ' + total_color + '" style="width:' + total_width + 'px;"></div>' +
'<span class="ww_perc">' + Math.round(res_total / ww_share.total.share * 100) + '%</span>' +
'</div>' +
'<div class="amounts">' + getText("labels", "tot") + ': <span class="curr">' + pointNumber(res_total) + '</span> / ' +
'<span class="max">' + pointNumber((Math.round(ww_share.total.share / 1000) * 1000)) + '</span></div>' +
'</div></div>');
$(wndID + '.ww_ratio').tooltip(
"<table style='border-spacing:0px; text-align:right' cellpadding='5px'><tr>" +
"<td align='right' style='border-right: 1px solid;border-bottom: 1px solid'></td>" +
"<td style='border-right: 1px solid; border-bottom: 1px solid'><span class='bbcodes_player bold'>(" + (Math.round((wonder.ratio[AID]) * 100) / 100) + "%)</span></td>" +
"<td style='border-bottom: 1px solid'><span class='bbcodes_ally bold'>(100%)</span></td></tr>" +
"<tr><td class='bold' style='border-right:1px solid;text-align:center'>" + getText("labels", "stg") + " " + stage + "</td>" +
"<td style='border-right: 1px solid'>" + pointNumber(Math.round(ww_share.stage.share / 1000) * 1000) + "</td>" +
"<td>" + pointNumber(Math.round(ww_share.stage.sum / 1000) * 1000) + "</td></tr>" +
"<tr><td class='bold' style='border-right:1px solid;text-align:center'>" + getText("labels", "tot") + "</td>" +
"<td style='border-right: 1px solid'>" + pointNumber(Math.round(ww_share.total.share / 1000) * 1000) + "</td>" +
"<td>" + pointNumber(Math.round(ww_share.total.sum / 1000) * 1000) + "</td>" +
"</tr></table>");
} catch (error) {
errorHandling(error, "setResWW");
}
}
// Adds points to numbers
function pointNumber(number) {
var sep;
if (LID === "de") {
sep = ".";
} else {
sep = ",";
}
number = number.toString();
if (number.length > 3) {
var mod = number.length % 3;
var output = (mod > 0 ? (number.substring(0, mod)) : '');
for (var i = 0; i < Math.floor(number.length / 3); i++) {
if ((mod == 0) && (i == 0)) {
output += number.substring(mod + 3 * i, mod + 3 * i + 3);
} else {
output += sep + number.substring(mod + 3 * i, mod + 3 * i + 3);
}
}
number = output;
}
return number;
}
/*******************************************************************************************************************************
* Farming Village Overview
* ----------------------------------------------------------------------------------------------------------------------------
* | ● Color change on possibility of city festivals
* ----------------------------------------------------------------------------------------------------------------------------
* *****************************************************************************************************************************/
function changeResColor() {
var res, res_min, i = 0;
$('#fto_town_list .fto_resource_count :last-child').reverseList().each(function () {
if ($(this).parent().hasClass("stone")) {
res_min = 18000;
} else {
res_min = 15000;
}
res = parseInt(this.innerHTML, 10);
if ((res >= res_min) && !($(this).hasClass("town_storage_full"))) {
this.style.color = '#0A0';
}
if (res < res_min) {
this.style.color = '#000';
}
});
}
/********************************************************************************************************************************
* Conquest Info
* -----------------------------------------------------------------------------------------------------------------------------
* | ● Amount of supports und attacks in the conquest window
* | ● Layout adjustment (for reasons of clarity)
* | - TODO: conquest window of own cities
* -----------------------------------------------------------------------------------------------------------------------------
* ******************************************************************************************************************************/
function countMovements() {
var sup = 0, att = 0;
$('.tab_content #unit_movements .support').each(function () {
sup++;
});
$('.tab_content #unit_movements .attack_land, .tab_content #unit_movements .attack_sea, .tab_content #unit_movements .attack_takeover').each(function () {
att++;
});
var str = "<div id='move_counter' style=''><div style='float:left;margin-right:5px;'></div>" +
"<div class='movement def'></div>" +
"<div class='movement' style='color:green;'> " + sup + "</div>" +
"<div class='movement off'> </div>" +
"<div style='color:red;'> " + att + "</div></div>" +
"<hr class='move_hr'>";
if ($('.gpwindow_content .tab_content .bold').get(0)) {
$('.gpwindow_content .tab_content .bold').append(str);
} else {
$('.gpwindow_content h4:eq(1)').append(str);
// TODO: set player link ?
/*
$('#unit_movements li div').each(function(){
//console.log(this.innerHTML);
});
*/
}
$('<style id="dio_conquest"> ' +
'.move_hr { margin:7px 0px 0px 0px; background-color:#5F5242; height:2px; border:0px solid; } ' +
// Smaller movements
'#unit_movements { font-size: 0.80em; } ' +
'#unit_movements .incoming { width:150px; height:45px; float:left; } ' +
// Counter
'#move_counter { position:relative; width:100px; margin-top:-16px; left: 40%; } ' +
'#move_counter .movement { float:left; margin:0px 5px 0px 0px; height:18px; width:18px; position:relative; } ' +
'#move_counter .def { background:url(https://gpall.innogamescdn.com/images/game/place/losts.png); background-position:0 -36px; } ' +
'#move_counter .off { background:url(https://gpall.innogamescdn.com/images/game/place/losts.png); background-position:0 0px; }' +
'</style>').appendTo("head");
/*
$('#unit_movements div').each(function(){
if($(this).attr('class') === "unit_movements_arrow"){
// delete placeholder for arrow of outgoing movements (there are no outgoing movements)
if(!this.style.background) { this.remove(); }
} else {
// realign texts
$(this).css({
margin: '3px',
paddingLeft: '3px'
});
}
});
*/
}
/*******************************************************************************************************************************
* Town window
* ----------------------------------------------------------------------------------------------------------------------------
* | ● TownTabHandler (trade, attack, support,...)
* | ● Sent units box
* | ● Short duration: Display of 30% troop speed improvement in attack/support tab
* | ● Trade options:
* | - Ressource marks on possibility of city festivals
* | - Percentual Trade: Trade button
* | - Recruiting Trade: Selection boxes (ressource ratio of unit type + share of the warehouse capacity of the target town)
* ----------------------------------------------------------------------------------------------------------------------------
*******************************************************************************************************************************/
var arrival_interval = {};
// TODO: Change both functions in MultipleWindowHandler()
function TownTabHandler(action) {
var wndArray, wndID, wndA;
wndArray = Layout.wnd.getOpen(uw.Layout.wnd.TYPE_TOWN);
//console.log(wndArray);
for (var e in wndArray) {
if (wndArray.hasOwnProperty(e)) {
//console.log(wndArray[e].getHandler());
wndA = wndArray[e].getAction();
wndID = "#gpwnd_" + wndArray[e].getID() + " ";
if (!$(wndID).get(0)) {
wndID = "#gpwnd_" + (wndArray[e].getID() + 1) + " ";
}
//console.log(wndID);
if (wndA === action) {
switch (action) {
case "trading":
if ($(wndID + '#trade_tab').get(0)) {
if (!$(wndID + '.rec_trade').get(0) && DATA.options.rec) {
addRecTrade(wndID);
}
console.log(DATA.options.per);
if (!$(wndID + '.btn_trade').get(0) && DATA.options.per) {
addPercentTrade(wndID, false);
}
}
//addTradeMarks(wndID, 15, 18, 15, "red"); // town festival
break;
case "support":
case "attack":
//if(!arrival_interval[wndID]){
if (DATA.options.way && !($('.js-casted-powers-viewport .unit_movement_boost').get(0) || $(wndID + '.short_duration').get(0))) {
//if(arrival_interval[wndID]) console.log("add " + wndID);
ShortDuration.add(wndID);
}
if (DATA.options.sen) {
SentUnits.add(wndID, action);
}
//}
break;
case "rec_mark":
//addTradeMarks(wndID, 15, 18, 15, "lime");
break;
}
}
}
}
}
function WWTradeHandler() {
var wndArray, wndID, wndA;
wndArray = uw.GPWindowMgr.getOpen(uw.GPWindowMgr.TYPE_WONDERS);
for (var e in wndArray) {
if (wndArray.hasOwnProperty(e)) {
wndID = "#gpwnd_" + wndArray[e].getID() + " ";
if (DATA.options.per && !($(wndID + '.btn_trade').get(0) || $(wndID + '.next_building_phase').get(0) || $(wndID + '#ww_time_progressbar').get(0))) {
addPercentTrade(wndID, true);
}
}
}
}
/*******************************************************************************************************************************
* ● Sent units box
*******************************************************************************************************************************/
var SentUnits = {
activate: function () {
$.Observer(GameEvents.command.send_unit).subscribe('DIO_SEND_UNITS', function (e, data) {
for (var z in data.params) {
if (data.params.hasOwnProperty(z) && (data.sending_type !== "")) {
if (uw.GameData.units[z]) {
sentUnitsArray[data.sending_type][z] = (sentUnitsArray[data.sending_type][z] == undefined ? 0 : sentUnitsArray[data.sending_type][z]);
sentUnitsArray[data.sending_type][z] += data.params[z];
}
}
}
//SentUnits.update(data.sending_type); ????
});
},
deactivate: function () {
$.Observer(GameEvents.command.send_unit).unsubscribe('DIO_SEND_UNITS');
},
add: function (wndID, action) {
if (!$(wndID + '.sent_units_box').get(0)) {
$('<div class="game_inner_box sent_units_box ' + action + '"><div class="game_border ">' +
'<div class="game_border_top"></div><div class="game_border_bottom"></div><div class="game_border_left"></div><div class="game_border_right"></div>' +
'<div class="game_border_corner corner1"></div><div class="game_border_corner corner2"></div>' +
'<div class="game_border_corner corner3"></div><div class="game_border_corner corner4"></div>' +
'<div class="game_header bold">' +
'<div class="icon_sent townicon_' + (action == "attack" ? "lo" : "ld") + '"></div><span>' + getText("labels", "lab") + ' (' + (action == "attack" ? "OFF" : "DEF") + ')</span>' +
'</div>' +
'<div class="troops"><div class="units_list"></div><hr style="width: 172px;border: 1px solid rgb(185, 142, 93);margin: 3px 0px 2px -1px;">' +
'<div id="btn_sent_units_reset" class="button_new">' +
'<div class="left"></div>' +
'<div class="right"></div>' +
'<div class="caption js-caption">' + getText("buttons", "res") + '<div class="effect js-effect"></div></div>' +
'</div>' +
'</div></div>').appendTo(wndID + '.attack_support_window');
SentUnits.update(action);
$(wndID + '.icon_sent').css({
height: '20px',
marginTop: '-2px',
width: '20px',
backgroundPositionY: '-26px',
paddingLeft: '0px',
marginLeft: '0px'
});
$(wndID + '.sent_units_box').css({
position: 'absolute',
right: '0px',
bottom: '16px',
width: '192px'
});
$(wndID + '.troops').css({padding: '6px 0px 6px 6px'});
$(wndID + '#btn_sent_units_reset').click(function () {
// Overwrite old array
sentUnitsArray[action] = {};
SentUnits.update(action);
});
}
},
update: function (action) {
try {
// Remove old unit list
$('.sent_units_box.' + action + ' .units_list').each(function () {
this.innerHTML = "";
});
// Add new unit list
for (var x in sentUnitsArray[action]) {
if (sentUnitsArray[action].hasOwnProperty(x)) {
if ((sentUnitsArray[action][x] || 0) > 0) {
$('.sent_units_box.' + action + ' .units_list').each(function () {
$(this).append('<div class="unit_icon25x25 ' + x +
(sentUnitsArray[action][x] >= 1000 ? (sentUnitsArray[action][x] >= 10000 ? " five_digit_number" : " four_digit_number") : "") + '">' +
'<span class="count text_shadow">' + sentUnitsArray[action][x] + '</span>' +
'</div>');
});
}
}
}
saveValue(WID + "_sentUnits", JSON.stringify(sentUnitsArray));
} catch (error) {
errorHandling(error, "updateSentUnitsBox");
}
}
};
/*******************************************************************************************************************************
* ● Short duration
*******************************************************************************************************************************/
var DurationCalculator = {
activate: function () {
var speedBoosterSprite = "https://diotools.de/images/game/speed_booster.png";
$('<style id="dio_duration_calculator_style">' +
'.dio_speed_booster { border:1px solid #724B08; border-spacing: 0px;} ' +
'.dio_speed_booster td { border:0; padding:2px; } ' +
'.dio_speed_booster .checkbox_new { margin: 4px 0px 1px 3px; } ' +
'.dio_speed_booster .odd { background: url("https://gpall.innogamescdn.com/images/game/border/brown.png") repeat scroll 0% 0% transparent; } ' +
'.dio_speed_booster .even { background: url("https://gpall.innogamescdn.com/images/game/border/odd.png") repeat scroll 0% 0% transparent; } ' +
'.booster_icon { width:20px; height:20px; background-image:url(' + speedBoosterSprite + ');} ' +
'.booster_icon.improved_speed { background-position:0 0; } ' +
'.booster_icon.cartography { background-position:-20px 0; } ' +
'.booster_icon.meteorology { background-position:-40px 0; } ' +
'.booster_icon.lighthouse { background-position:-60px 0; } ' +
'.booster_icon.set_sail { background-position:-80px 0; } ' +
'.booster_icon.atalanta { background-position:-100px 0; } ' +
'</style>').appendTo('head');
},
deactivate: function () {
$('#dio_duration_calculator_style').remove();
},
add: function (wndID, data) {
}
};
// TODO : Style Umstellen!
var ShortDuration = {
activate: function () {
},
deactivate: function () {
},
add: function (wndID) {
//console.log($(wndID + ".duration_container").get(0));
try {
var tooltip = (LANG.hasOwnProperty(LID) ? getText("labels", "improved_movement") : "") + " (+30% " + DM.getl10n("barracks", "tooltips").speed.trim() + ")";
var speedBoosterSprite = "https://diotools.de/images/game/speed_booster.png";
$('<table class="dio_duration">' +
'<tr><td class="way_icon"></td><td class="dio_way"></td><td class="arrival_icon"></td><td class="dio_arrival"></td><td colspan="2" class="dio_night"></td></tr>' +
'<tr class="short_duration_row" style="color:darkgreen">' +
'<td> ╚> </td><td><span class="short_duration">~0:00:00</span></td>' +
'<td> ╚></td><td><span class="short_arrival">~00:00:00</span></td>' +
'<td class="short_icon"></td><td></td></tr>' +
'</table>').prependTo(wndID + ".duration_container");
/*
$('<style id="dio_speed_booster_style">' +
'.dio_speed_booster { border:1px solid #724B08; border-spacing: 0px;} ' +
'.dio_speed_booster td { border:0; padding:2px; } ' +
'.dio_speed_booster .checkbox_new { margin: 4px 0px 1px 3px; } ' +
'.dio_speed_booster .odd { background: url("https://gpall.innogamescdn.com/images/game/border/brown.png") repeat scroll 0% 0% transparent; } ' +
'.dio_speed_booster .even { background: url("https://gpall.innogamescdn.com/images/game/border/odd.png") repeat scroll 0% 0% transparent; } ' +
'.booster_icon { width:20px; height:20px; background-image:url(' + speedBoosterSprite + ');} ' +
'.booster_icon.improved_speed { background-position:0 0; } ' +
'.booster_icon.cartography { background-position:-20px 0; } ' +
'.booster_icon.meteorology { background-position:-40px 0; } ' +
'.booster_icon.lighthouse { background-position:-60px 0; } ' +
'.booster_icon.set_sail { background-position:-80px 0; } ' +
'.booster_icon.atalanta { background-position:-100px 0; } ' +
'</style>').appendTo('head');
$('<table class="dio_speed_booster"><tr>' +
'<td class="odd"><div class="booster_icon improved_speed"></div><div class="checkbox_new checked"><div class="cbx_icon"></div></div></td>' +
'<td class="even"><div class="booster_icon cartography"></div><div class="checkbox_new checked"><div class="cbx_icon"></div></div></td>' +
'<td class="odd"><div class="booster_icon meteorology"></div><div class="checkbox_new checked"><div class="cbx_icon"></div></div></td>' +
'<td class="even"><div class="booster_icon lighthouse"></div><div class="checkbox_new checked"><div class="cbx_icon"></div></div></td>' +
'<td class="odd"><div class="booster_icon set_sail"></div><div class="checkbox_new checked"><div class="cbx_icon"></div></div></td>' +
'<td class="even"><div class="booster_icon atalanta"></div><div class="checkbox_new checked"><div class="cbx_icon"></div></div></td>' +
'</tr></table>').appendTo(wndID + ".duration_container");
*/
$(wndID + ".nightbonus").appendTo(wndID + ".dio_night");
$(wndID + '.way_duration').appendTo(wndID + ".dio_way");
$(wndID + ".arrival_time").appendTo(wndID + ".dio_arrival");
// Style TODO: Umschreiben!
$(wndID + '.duration_container').css({
width: 'auto'
});
$(wndID + '.dio_duration').css({
borderSpacing: '0px',
marginBottom: '2px',
textAlign: 'right'
});
$(wndID + '.dio_way span,' + wndID + '.dio_arrival span').css({
padding: '0px 0px 0px 0px',
background: 'none'
});
$(wndID + '.short_icon').css({
padding: '20px 0px 0px 30px',
background: 'url(http://666kb.com/i/ck2c7eohpyfa3yczt.png) 11px -1px / 21px no-repeat',
WebkitFilter: 'hue-rotate(50deg)'
});
$(wndID + '.way_icon').css({
padding: '30px 0px 0px 30px',
background: 'transparent url(https://gpall.innogamescdn.com/images/game/towninfo/traveltime.png) no-repeat 0 0'
});
$(wndID + '.arrival_icon').css({
padding: '30px 0px 0px 30px',
background: 'transparent url(https://gpall.innogamescdn.com/images/game/towninfo/arrival.png) no-repeat 0 0'
});
$(wndID + '.max_booty').css({
padding: '0px 0px 0px 30px',
margin: '3px 0 4px 4px',
width: 'auto'
});
$(wndID + '.fast_boats_needed').css({
background: 'transparent url(http://s7.directupload.net/images/140724/4pvfuch8.png) no-repeat 0 0',
padding: '2px 10px 7px 24px',
margin: '0px 0px 0px 6px'
});
$(wndID + '.slow_boats_needed').css({
background: 'transparent url(http://s1.directupload.net/images/140724/b5xl8nmj.png) no-repeat 0 0',
padding: '2px 10px 7px 24px',
margin: '0px 0px 0px 6px'
});
// Tooltip
$(wndID + '.short_duration_row').tooltip(tooltip);
// Detection of changes
ShortDuration.change(wndID);
// $(wndID + '.way_duration').bind('DOMSubtreeModified', function(e) { console.log(e); }); // Alternative
} catch (error) {
errorHandling(error, "addShortDuration");
}
},
change: function (wndID) {
var duration = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
if (mutation.addedNodes[0]) {
//console.log(mutation);
ShortDuration.calculate(wndID);
}
});
});
if ($(wndID + '.way_duration').get(0)) {
duration.observe($(wndID + '.way_duration').get(0), {
attributes: false,
childList: true,
characterData: false
});
}
},
//$('<style> .duration_container { display: block !important } </style>').appendTo("head");
calculate: function (wndID) {
//console.log(wndID);
//console.log($(wndID + '.duration_container .way_duration').get(0));
try {
var setup_time = 900 / Game.game_speed,
duration_time = $(wndID + '.duration_container .way_duration').get(0).innerHTML.replace("~", "").split(":"),
// TODO: hier tritt manchmal Fehler auf TypeError: Cannot read property "innerHTML" of undefined at calcShortDuration (<anonymous>:3073:86)
arrival_time,
h, m, s,
atalanta_factor = 0;
var hasCartography = ITowns.getTown(Game.townId).getResearches().get("cartography");
var hasMeteorology = ITowns.getTown(Game.townId).getResearches().get("meteorology");
var hasSetSail = ITowns.getTown(Game.townId).getResearches().get("set_sail");
var hasLighthouse = ITowns.getTown(Game.townId).buildings().get("lighthouse");
// Atalanta aktiviert?
if ($(wndID + '.unit_container.heroes_pickup .atalanta').get(0)) {
if ($(wndID + '.cbx_include_hero').hasClass("checked")) {
// Beschleunigung hängt vom Level ab, Level 1 = 11%, Level 20 = 30%
var atalanta_level = MM.getCollections().PlayerHero[0].models[1].get("level");
atalanta_factor = (atalanta_level + 10) / 100;
}
}
// Sekunden, Minuten und Stunden zusammenrechnen (-> in Sekunden)
duration_time = ((parseInt(duration_time[0], 10) * 60 + parseInt(duration_time[1], 10)) * 60 + parseInt(duration_time[2], 10));
// Verkürzte Laufzeit berechnen
duration_time = ((duration_time - setup_time) * (1 + atalanta_factor)) / (1 + 0.3 + atalanta_factor) + setup_time;
h = Math.floor(duration_time / 3600);
m = Math.floor((duration_time - h * 3600) / 60);
s = Math.floor(duration_time - h * 3600 - m * 60);
if (m < 10) {
m = "0" + m;
}
if (s < 10) {
s = "0" + s;
}
$(wndID + '.short_duration').get(0).innerHTML = "~" + h + ":" + m + ":" + s;
// Ankunftszeit errechnen
arrival_time = Math.round((Timestamp.server() + Game.server_gmt_offset)) + duration_time;
h = Math.floor(arrival_time / 3600);
m = Math.floor((arrival_time - h * 3600) / 60);
s = Math.floor(arrival_time - h * 3600 - m * 60);
h %= 24;
if (m < 10) {
m = "0" + m;
}
if (s < 10) {
s = "0" + s;
}
$(wndID + '.short_arrival').get(0).innerHTML = "~" + h + ":" + m + ":" + s;
clearInterval(arrival_interval[wndID]);
arrival_interval[wndID] = setInterval(function () {
arrival_time += 1;
h = Math.floor(arrival_time / 3600);
m = Math.floor((arrival_time - h * 3600) / 60);
s = Math.floor(arrival_time - h * 3600 - m * 60);
h %= 24;
if (m < 10) {
m = "0" + m;
}
if (s < 10) {
s = "0" + s;
}
if ($(wndID + '.short_arrival').get(0)) {
$(wndID + '.short_arrival').get(0).innerHTML = "~" + h + ":" + m + ":" + s;
} else {
clearInterval(arrival_interval[wndID]);
}
}, 1000);
} catch (error) {
errorHandling(error, "ShortDuration.calculate");
}
}
};
/*******************************************************************************************************************************
* ● Dropdown menu
*******************************************************************************************************************************/
// TODO: Umstellen!
// Preload images for drop down arrow buttons
var drop_over = new Image();
drop_over.src = "http://s7.directupload.net/images/140107/hna95u8a.png";
var drop_out = new Image();
drop_out.src = "http://s14.directupload.net/images/140107/ppsz5mxk.png";
function changeDropDownButton() {
$('<style id="dio_style_arrow" type="text/css">' +
'#dd_filter_type .arrow, .select_rec_unit .arrow {' +
'width: 18px !important; height: 17px !important; background: url("http://s14.directupload.net/images/140107/ppsz5mxk.png") no-repeat 0px -1px !important;' +
'position: absolute; top: 2px !important; right: 3px; } ' +
'</style>').appendTo('head');
}
/*******************************************************************************************************************************
* ● Recruiting Trade
* *****************************************************************************************************************************/
var trade_count = 0, unit = "FS", percent = "0.0"; // Recruiting Trade
function addRecTrade(wndID) {
var max_amount;
$('<div class="rec_trade">' +
// DropDown-Button for unit
'<div class="drop_rec_unit dropdown default">' +
'<div class="border-left"></div>' +
'<div class="border-right"></div>' +
'<div class="caption" name="' + unit + '">' + unit + '</div>' +
'<div class="arrow"></div>' +
'</div>' +
'<div class="drop_rec_perc dropdown default">' +
// DropDown-Button for ratio
'<div class="border-left"></div>' +
'<div class="border-right"></div>' +
'<div class="caption" name="' + percent + '">' + Math.round(percent * 100) + '%</div>' +
'<div class="arrow"></div>' +
'</div></div><span class="rec_count" style="top:30px">(' + trade_count + ')</span>').appendTo(wndID + ".content");
// Select boxes for unit and ratio
$('<div class="select_rec_unit dropdown-list default active">' +
'<div class="item-list">' +
'<div class="option_s unit index_unit unit_icon40x40 attack_ship" name="FS"></div>' +
'<div class="option_s unit index_unit unit_icon40x40 bireme" name="BI"></div>' +
'<div class="option_s unit index_unit unit_icon40x40 sword" name="SK"></div>' +
'<div class="option_s unit index_unit unit_icon40x40 slinger" name="SL"></div>' +
'<div class="option_s unit index_unit unit_icon40x40 archer" name="BS"></div>' +
'<div class="option_s unit index_unit unit_icon40x40 hoplite" name="HO"></div>' +
'<div class="option_s unit index_unit unit_icon40x40 rider" name="RE"></div>' +
'<div class="option_s unit index_unit unit_icon40x40 chariot" name="SW"></div>' +
'</div></div>').appendTo(wndID + ".rec_trade");
$('<div class="select_rec_perc dropdown-list default inactive">' +
'<div class="item-list">' +
'<div class="option sel" name="0.0"> 0%</div>' +
'<div class="option" name="0.05"> 5%</div>' +
'<div class="option" name="0.1">10%</div>' +
'<div class="option" name="0.16666">17%</div>' +
'<div class="option" name="0.2">20%</div>' +
'<div class="option" name="0.25">25%</div>' +
'<div class="option" name="0.33">33%</div>' +
'<div class="option" name="0.5">50%</div>' +
'</div></div>').appendTo(wndID + ".rec_trade");
$(wndID + ".rec_trade [name='" + unit + "']").toggleClass("sel");
// Styles
$(wndID + '.rec_trade').css({position: 'absolute', left: '30px', top: '70px'});
$(wndID + '.select_rec_unit').css({
position: 'absolute',
top: '20px',
width: '84px',
display: "none"
});
$(wndID + '.select_rec_perc').css({
position: 'absolute',
left: '50px',
top: '20px',
width: '50px',
display: "none"
});
$(wndID + '.item-list').css({maxHeight: '400px', maxWidth: '200px', align: "right"});
$(wndID + '.arrow').css({
width: '18px',
height: '18px',
background: 'url(' + drop_out.src + ') no-repeat -1px -1px',
position: 'absolute'
});
$(wndID + '.option_s').css({
filter: "url(#GrayScale)",
WebkitFilter: "grayscale(100%)",
cursor: 'pointer',
color: 'black',
lineHeight: '14px',
float: 'left',
position: 'relative',
width: '40px',
margin: '0px',
padding: '0px'
});
$('.select_rec_unit .sel').css({"filter": "url(#Sepia)", "-webkit-filter": "sepia(100%)"});
// hover effects of the elements in the drop menus
$(wndID + '.option_s').hover(
function () {
//console.log(this.className);
$(this).css({"filter": "none", "-webkit-filter": "grayscale(0%) sepia(0%)"});
if (!($(this).hasClass("sel"))) {
$('.option_s .sel').css({"filter": "url(#Sepia)", "-webkit-filter": "grayscale(0%) sepia(100%)"});
}
},
function () {
$('.select_rec_unit .option_s').css({
"filter": "url(#GrayScale)",
"-webkit-filter": "grayscale(100%) sepia(0%)"
});
$('.select_rec_unit .sel').css({
"filter": "url(#Sepia)",
"-webkit-filter": "grayscale(0%) sepia(100%)"
});
}
);
$(wndID + '.option').hover(
function () {
$(this).css({color: '#fff', background: "#328BF1"});
},
function () {
$(this).css({color: '#000', background: "#FFEEC7"});
}
);
// click events of the drop menu
$(wndID + ' .select_rec_unit .option_s').each(function () {
$(this).click(function (e) {
$(".select_rec_unit .sel").toggleClass("sel");
$("." + this.className.split(" ")[4]).toggleClass("sel");
unit = $(this).attr("name");
$('.drop_rec_unit .caption').attr("name", unit);
$('.drop_rec_unit .caption').each(function () {
this.innerHTML = unit;
});
$(this).parent().parent().get(0).style.display = "none";
$('.drop_rec_unit .caption').change();
});
});
$(wndID + ' .select_rec_perc .option').each(function () {
$(this).click(function (e) {
$(this).parent().find(".sel").toggleClass("sel");
$(this).toggleClass("sel");
percent = $(this).attr("name");
$('.drop_rec_perc .caption').attr("name", percent);
$('.drop_rec_perc .caption').each(function () {
this.innerHTML = Math.round(percent * 100) + "%";
});
$(this).parent().parent().get(0).style.display = "none";
$('.drop_rec_perc .caption').change();
});
});
// show & hide drop menus on click
$(wndID + '.drop_rec_perc').click(function (e) {
if ($(e.target)[0].parentNode.parentNode.childNodes[3].style.display === "none") {
$(e.target)[0].parentNode.parentNode.childNodes[3].style.display = "block";
$(e.target)[0].parentNode.parentNode.childNodes[2].style.display = "none";
} else {
$(e.target)[0].parentNode.parentNode.childNodes[3].style.display = "none";
}
});
$(wndID + '.drop_rec_unit').click(function (e) {
if ($(e.target)[0].parentNode.parentNode.childNodes[2].style.display === "none") {
$(e.target)[0].parentNode.parentNode.childNodes[2].style.display = "block";
$(e.target)[0].parentNode.parentNode.childNodes[3].style.display = "none";
} else {
$(e.target)[0].parentNode.parentNode.childNodes[2].style.display = "none";
}
});
$(wndID).click(function (e) {
var clicked = $(e.target), element = $('#' + this.id + ' .select_rec_unit').get(0);
if ((clicked[0].parentNode.className.split(" ")[1] !== "dropdown") && element) {
element.style.display = "none";
}
});
// hover arrow change
$(wndID + '.dropdown').hover(function (e) {
$(e.target)[0].parentNode.childNodes[3].style.background = "url('" + drop_over.src + "') no-repeat -1px -1px";
}, function (e) {
$(e.target)[0].parentNode.childNodes[3].style.background = "url('" + drop_out.src + "') no-repeat -1px -1px";
});
$(wndID + ".drop_rec_unit .caption").attr("name", unit);
$(wndID + ".drop_rec_perc .caption").attr("name", percent);
$(wndID + '.drop_rec_unit').tooltip(getText("labels", "rat"));
$(wndID + '.drop_rec_perc').tooltip(getText("labels", "shr"));
var ratio = {
NO: {w: 0, s: 0, i: 0},
FS: {w: 1, s: 0.2308, i: 0.6154},
BI: {w: 1, s: 0.8750, i: 0.2250},
SL: {w: 0.55, s: 1, i: 0.4},
RE: {w: 0.6666, s: 0.3333, i: 1},
SK: {w: 1, s: 0, i: 0.8947},
HO: {w: 0, s: 0.5, i: 1},
BS: {w: 1, s: 0, i: 0.6250},
SW: {w: 0.4545, s: 1, i: 0.7273}
};
if ($('#town_capacity_wood .max').get(0)) {
max_amount = parseInt($('#town_capacity_wood .max').get(0).innerHTML, 10);
} else {
max_amount = 25500;
}
$(wndID + '.caption').change(function (e) {
//console.log($(this).attr('name') + ", " + unit + "; " + percent);
if (!(($(this).attr('name') === unit) || ($(this).attr('name') === percent))) {
//trade_count = 0;
$('.rec_count').get(0).innerHTML = "(" + trade_count + ")";
}
var tmp = $(this).attr('name');
if ($(this).parent().attr('class').split(" ")[0] === "drop_rec_unit") {
unit = tmp;
} else {
percent = tmp;
}
var max = (max_amount - 100) / 1000;
addTradeMarks(max * ratio[unit].w, max * ratio[unit].s, max * ratio[unit].i, "lime");
var part = (max_amount - 1000) * parseFloat(percent); // -1000 als Puffer (sonst Überlauf wegen Restressies, die nicht eingesetzt werden können, vorallem bei FS und Biremen)
var rArray = uw.ITowns.getTown(uw.Game.townId).getCurrentResources();
var tradeCapacity = uw.ITowns.getTown(uw.Game.townId).getAvailableTradeCapacity();
var wood = ratio[unit].w * part;
var stone = ratio[unit].s * part;
var iron = ratio[unit].i * part;
if ((wood > rArray.wood) || (stone > rArray.stone) || (iron > rArray.iron) || ( (wood + stone + iron) > tradeCapacity)) {
wood = stone = iron = 0;
$('.drop_rec_perc .caption').css({color: '#f00'});
//$('.' + e.target.parentNode.parentNode.className + ' .select_rec_perc .sel').css({color:'#f00'});
//$('.select_rec_perc .sel').css({color:'#f00'});
} else {
$('.' + e.target.parentNode.parentNode.className + ' .drop_rec_perc .caption').css({color: '#000'});
}
$("#trade_type_wood [type='text']").select().val(wood).blur();
$("#trade_type_stone [type='text']").select().val(stone).blur();
$("#trade_type_iron [type='text']").select().val(iron).blur();
});
$('#trade_button').click(function () {
trade_count++;
$('.rec_count').get(0).innerHTML = "(" + trade_count + ")";
});
$(wndID + '.rec_count').css({
position: 'absolute',
display: 'block',
left: '33px',
top: '95px',
width: '20px'
});
$(wndID + '.drop_rec_unit').css({
position: 'absolute',
display: 'block',
width: '50px',
overflow: 'visible'
});
$(wndID + '.drop_rec_perc').css({
position: 'absolute',
display: 'block',
left: '49px',
width: '55px',
color: '#000'
});
$(wndID + '.drop_rec_perc .caption').change();
}
/*******************************************************************************************************************************
* ● Ressources marks
*******************************************************************************************************************************/
function addTradeMarks(woodmark, stonemark, ironmark, color) {
var max_amount, limit, wndArray = uw.GPWindowMgr.getOpen(uw.Layout.wnd.TYPE_TOWN), wndID;
for (var e in wndArray) {
if (wndArray.hasOwnProperty(e)) {
wndID = "#gpwnd_" + wndArray[e].getID() + " ";
if ($(wndID + '.town-capacity-indicator').get(0)) {
max_amount = $(wndID + '.amounts .max').get(0).innerHTML;
$('#trade_tab .c_' + color).each(function () {
this.remove();
});
$('#trade_tab .progress').each(function () {
if ($("p", this).length < 3) {
if ($(this).parent().get(0).id != "big_progressbar") {
limit = 1000 * (242 / parseInt(max_amount, 10));
switch ($(this).parent().get(0).id.split("_")[2]) {
case "wood":
limit = limit * woodmark;
break;
case "stone":
limit = limit * stonemark;
break;
case "iron":
limit = limit * ironmark;
break;
}
$('<p class="c_' + color + '"style="position:absolute;left: ' + limit + 'px; background:' + color + ';width:2px;height:100%;margin:0px"></p>').appendTo(this);
}
}
});
}
}
}
}
/*******************************************************************************************************************************
* ● Percentual Trade
*******************************************************************************************************************************/
var rest_count = 0;
function addPercentTrade(wndID, ww) {
var a = "";
var content = wndID + ".content";
if (ww) {
a = "ww_";
content = wndID + '.trade .send_res';
}
$('<div class="btn btn_trade"><a class="button" href="#">' +
'<span class="left"><span class="right">' +
'<span class="middle mid">' +
'<span class="img_trade"></span></span></span></span>' +
'<span style="clear:both;"></span>' +
'</a></div>').prependTo(content);
$(wndID + '.btn_trade').tooltip(getText("labels", "per"));
setPercentTrade(wndID, ww);
// Style
$(wndID + '.btn').css({width: '20px', overflow: 'visible', position: 'absolute', display: 'block'});
if (!ww) {
$(wndID + '.content').css({height: '320px'});
}
if (ww) {
$(wndID + '.btn_trade').css({left: '678px', top: '154px'});
} else {
$(wndID + '.btn_trade').css({left: '336px', top: '135px'});
}
$(wndID + '.mid').css({minWidth: '26px'});
$(wndID + '.img_trade').css({
width: '27px',
height: '27px',
top: '-3px',
float: 'left',
position: 'relative',
background: 'url("http://666kb.com/i/cjq6d72qk521ig1zz.png") no-repeat'
});
}
var res = {};
function setPercentTrade(wndID, ww) {
var a = ww ? "ww_" : "", own_town = $(wndID + '.town_info').get(0) ? true : false;
$(wndID + '.btn_trade').toggleClick(function () {
res.wood = {};
res.stone = {};
res.iron = {};
res.sum = {};
res.sum.amount = 0;
// Set amount of resources to 0
setAmount(true, a, wndID);
// Total amount of resources // TODO: ITowns.getTown(Game.townId).getCurrentResources(); ?
for (var e in res) {
if (res.hasOwnProperty(e) && e != "sum") {
res[e].rest = false;
res[e].amount = parseInt($('.ui_resources_bar .' + e + ' .amount').get(0).innerHTML, 10);
res.sum.amount += res[e].amount;
}
}
// Percentage of total resources
res.wood.percent = 100 / res.sum.amount * res.wood.amount;
res.stone.percent = 100 / res.sum.amount * res.stone.amount;
res.iron.percent = 100 / res.sum.amount * res.iron.amount;
// Total trading capacity
res.sum.cur = parseInt($(wndID + '#' + a + 'big_progressbar .caption .curr').get(0).innerHTML, 10);
// Amount of resources on the percentage of trading capacity (%)
res.wood.part = parseInt(res.sum.cur / 100 * res.wood.percent, 10);
res.stone.part = parseInt(res.sum.cur / 100 * res.stone.percent, 10);
res.iron.part = parseInt(res.sum.cur / 100 * res.iron.percent, 10);
// Get rest warehouse capacity of each resource type
for (var f in res) {
if (res.hasOwnProperty(f) && f != "sum") {
if (!ww && own_town) { // Own town
var curr = parseInt($(wndID + '#town_capacity_' + f + ' .amounts .curr').get(0).innerHTML.replace('+', '').trim(), 10) || 0,
curr2 = parseInt($(wndID + '#town_capacity_' + f + ' .amounts .curr2').get(0).innerHTML.replace('+', '').trim(), 10) || 0,
max = parseInt($(wndID + '#town_capacity_' + f + ' .amounts .max').get(0).innerHTML.replace('+', '').trim(), 10) || 0;
res[f].cur = curr + curr2;
res[f].max = max - res[f].cur;
if (res[f].max < 0) {
res[f].max = 0;
}
} else { // World wonder or foreign town
res[f].max = 30000;
}
}
}
// Rest of fraction (0-2 units) add to stone amount
res.stone.part += res.sum.cur - (res.wood.part + res.stone.part + res.iron.part);
res.sum.rest = 0;
rest_count = 0;
calcRestAmount();
setAmount(false, a, wndID);
}, function () {
setAmount(true, a, wndID);
});
}
function calcRestAmount() {
// Subdivide rest
if (res.sum.rest > 0) {
for (var e in res) {
if (res.hasOwnProperty(e) && e != "sum" && res[e].rest != true) {
res[e].part += res.sum.rest / (3 - rest_count);
}
}
res.sum.rest = 0;
}
// Calculate new rest
for (var f in res) {
if (res.hasOwnProperty(f) && f != "sum" && res[f].rest != true) {
if (res[f].max <= res[f].part) {
res[f].rest = true;
res.sum.rest += res[f].part - res[f].max;
rest_count += 1;
res[f].part = res[f].max;
}
}
}
// Recursion
if (res.sum.rest > 0 && rest_count < 3) {
calcRestAmount();
}
}
function setAmount(clear, a, wndID) {
for (var e in res) {
if (res.hasOwnProperty(e) && e != "sum") {
if (clear == true) {
res[e].part = 0;
}
$(wndID + "#" + a + "trade_type_" + e + ' [type="text"]').select().val(res[e].part).blur();
}
}
}
/********************************************************************************************************************************
* Unit strength (blunt/sharp/distance) and Transport Capacity
* ----------------------------------------------------------------------------------------------------------------------------
* | ● Unit strength: Menu
* | - Switching of def/off display with buttons
* | - Possible Selection of certain unit types
* | ● Unit strength: Conquest
* | ● Unit strength: Barracks
* | ● Transport capacity: Menu
* | - Switching of transporter speed (+/- big transporter)
* ----------------------------------------------------------------------------------------------------------------------------
* ******************************************************************************************************************************/
var def = true, blunt = 0, sharp = 0, dist = 0, shipsize = false;
var UnitStrength = {
// Calculate defensive strength
calcDef: function (units) {
var e;
blunt = sharp = dist = 0;
for (e in units) {
if (units.hasOwnProperty(e)) {
blunt += units[e] * uw.GameData.units[e].def_hack;
sharp += units[e] * uw.GameData.units[e].def_pierce;
dist += units[e] * uw.GameData.units[e].def_distance;
}
}
},
// Calculate offensive strength
calcOff: function (units, selectedUnits) {
var e;
blunt = sharp = dist = 0;
for (e in selectedUnits) {
if (selectedUnits.hasOwnProperty(e)) {
var attack = (units[e] || 0) * uw.GameData.units[e].attack;
switch (uw.GameData.units[e].attack_type) {
case 'hack':
blunt += attack;
break;
case 'pierce':
sharp += attack;
break;
case 'distance':
dist += attack;
break;
}
}
}
},
/*******************************************************************************************************************************
* ● Unit strength: Unit menu
*******************************************************************************************************************************/
Menu: {
activate: function () {
$('<div id="strength" class="cont def"><hr>' +
'<span class="bold text_shadow cont_left strength_font">' +
'<table style="margin:0px;">' +
'<tr><td><div class="ico units_info_sprite img_hack"></td><td id="blunt">0</td></tr>' +
'<tr><td><div class="ico units_info_sprite img_pierce"></td><td id="sharp">0</td></tr>' +
'<tr><td><div class="ico units_info_sprite img_dist"></td><td id="dist">0</td></tr>' +
'</table>' +
'</span>' +
'<div class="cont_right">' +
'<img id="def_button" class="active img" src="https://gpall.innogamescdn.com/images/game/unit_overview/support.png">' +
'<img id="off_button" class="img" src="https://gpall.innogamescdn.com/images/game/unit_overview/attack.png">' +
'</div></div>').appendTo('.units_land .content');
// Style
$('<style id="dio_strength_style">' +
'#strength.def #off_button, #strength.off #def_button { filter:url(#Sepia); -webkit-filter:sepia(1); }' +
'#strength.off #off_button, #strength.def #def_button { filter:none; -webkit-filter:none; } ' +
'#strength.off .img_hack { background-position:0% 36%;} ' +
'#strength.def .img_hack { background-position:0% 0%;} ' +
'#strength.off .img_pierce { background-position:0% 27%;} ' +
'#strength.def .img_pierce { background-position:0% 9%;} ' +
'#strength.off .img_dist { background-position:0% 45%;} ' +
'#strength.def .img_dist { background-position:0% 18%;} ' +
'#strength .strength_font { font-size: 0.8em; } ' +
'#strength.off .strength_font { color:#edb;} ' +
'#strength.def .strength_font { color:#fc6;} ' +
'#strength .ico { height:20px; width:20px; } ' +
'#strength .units_info_sprite { background:url(https://gpall.innogamescdn.com/images/game/units/units_info_sprite2.51.png); background-size:100%; } ' +
'#strength .img_pierce { background-position:0px -20px; } ' +
'#strength .img_dist { background-position:0px -40px; } ' +
'#strength hr { margin:0px; background-color:#5F5242; height:2px; border:0px solid; } ' +
'#strength .cont_left { width:65%; display:table-cell; } ' +
'#strength.cont { background:url(https://gpall.innogamescdn.com/images/game/layout/layout_units_nav_border.png); } ' +
'#strength .cont_right { width:30%; display:table-cell; vertical-align:middle; } ' +
'#strength .img { float:right; background:none; margin:2px 8px 2px 0px; } ' +
'</style>').appendTo("head");
// Button events
$('.units_land .units_wrapper, .btn_gods_spells .checked').click(function () {
setTimeout(function () {
UnitStrength.Menu.update();
}, 100);
});
$('#off_button').click(function () {
$('#strength').addClass('off').removeClass('def');
def = false;
UnitStrength.Menu.update();
});
$('#def_button').click(function () {
$('#strength').addClass('def').removeClass('off');
def = true;
UnitStrength.Menu.update();
});
$('#def_button, #off_button').hover(function () {
$(this).css('cursor', 'pointer');
});
UnitStrength.Menu.update();
},
deactivate: function () {
$('#strength').remove();
$('#dio_strength_style').remove();
},
update: function () {
var unitsIn = uw.ITowns.getTown(uw.Game.townId).units(), units = UnitStrength.Menu.getSelected();
// Calculation
if (def === true) {
UnitStrength.calcDef(units);
} else {
UnitStrength.calcOff(unitsIn, units);
}
$('#blunt').get(0).innerHTML = blunt;
$('#sharp').get(0).innerHTML = sharp;
$('#dist').get(0).innerHTML = dist;
},
getSelected: function () {
var units = [];
if ($(".units_land .units_wrapper .selected").length > 0) {
$(".units_land .units_wrapper .selected").each(function () {
units[this.className.split(" ")[1]] = this.children[0].innerHTML;
});
} else {
$(".units_land .units_wrapper .unit").each(function () {
units[this.className.split(" ")[1]] = this.children[0].innerHTML;
});
}
return units;
}
},
/*******************************************************************************************************************************
* ● Unit strength: Conquest
*******************************************************************************************************************************/
Conquest: {
add: function () {
var units = [], str;
// units of the siege
$('#conqueror_units_in_town .unit').each(function () {
str = $(this).attr("class").split(" ")[4];
if (!uw.GameData.units[str].is_naval) {
units[str] = parseInt(this.children[0].innerHTML, 10);
//console.log($(this).attr("class").split(" ")[4]);
}
});
// calculation
UnitStrength.calcDef(units);
$('<div id="strength_eo" class="game_border" style="width:90px; margin: 20px; align:center;">' +
'<div class="game_border_top"></div><div class="game_border_bottom"></div>' +
'<div class="game_border_left"></div><div class="game_border_right"></div>' +
'<div class="game_border_corner corner1"></div><div class="game_border_corner corner2"></div>' +
'<div class="game_border_corner corner3"></div><div class="game_border_corner corner4"></div>' +
'<span class="bold" style="color:#000;font-size: 0.8em;"><table style="margin:0px;background:#f7dca2;width:100%;align:center;">' +
'<tr><td width="1%"><div class="ico units_info_sprite img_hack"></div></td><td id="bl" align="center" width="100%">0</td></tr>' +
'<tr><td><div class="ico units_info_sprite img_pierce"></div></td><td id="sh" align="center">0</td></tr>' +
'<tr><td><div class="ico units_info_sprite img_dist"></div></td><td id="di" align="center">0</td></tr>' +
'</table></span>' +
'</div>').appendTo('#conqueror_units_in_town');
$('#strength_eo').tooltip('Gesamteinheitenstärke der Belagerungstruppen');
// Veröffentlichung-Button-Text
$('#conqueror_units_in_town .publish_conquest_public_id_wrap').css({
marginLeft: '130px'
});
$('#strength_eo .ico').css({
height: '20px',
width: '20px'
});
$('#strength_eo .units_info_sprite').css({
background: 'url(https://gpall.innogamescdn.com/images/game/units/units_info_sprite2.51.png)',
backgroundSize: '100%'
});
$('#strength_eo .img_pierce').css({backgroundPosition: '0% 9%'});
$('#strength_eo .img_dist').css({backgroundPosition: '0% 18%'});
$('#bl').get(0).innerHTML = blunt;
$('#sh').get(0).innerHTML = sharp;
$('#di').get(0).innerHTML = dist;
}
},
/*******************************************************************************************************************************
* ● Unit strength: Barracks
*******************************************************************************************************************************/
Barracks: {
add: function () {
if (!$('#strength_baracks').get(0)) {
var units = [], pop = 0;
// whole units of the town
$('#units .unit_order_total').each(function () {
units[$(this).parent().parent().attr("id")] = this.innerHTML;
});
// calculation
UnitStrength.calcDef(units);
// population space of the units
for (var e in units) {
if (units.hasOwnProperty(e)) {
pop += units[e] * uw.GameData.units[e].population;
}
}
$('<div id="strength_baracks" class="game_border" style="float:right; width:70px; align:center;">' +
'<div class="game_border_top"></div><div class="game_border_bottom"></div>' +
'<div class="game_border_left"></div><div class="game_border_right"></div>' +
'<div class="game_border_corner corner1"></div><div class="game_border_corner corner2"></div>' +
'<div class="game_border_corner corner3"></div><div class="game_border_corner corner4"></div>' +
'<span class="bold" style="color:#000;font-size: 0.8em;"><table style="margin:0px;background:#f7dca2;width:100%;align:center;">' +
'<tr><td width="1%"><div class="ico units_info_sprite img_hack"></div></td><td id="b" align="center" width="100%">0</td></tr>' +
'<tr><td><div class="ico units_info_sprite img_pierce"></div></td><td id="s" align="center">0</td></tr>' +
'<tr><td><div class="ico units_info_sprite img_dist"></div></td><td id="d" align="center">0</td></tr>' +
'</table></span>' +
'</div>').appendTo('.ui-dialog #units');
$('<div id="pop_baracks" class="game_border" style="float:right; width:60px; align:center;">' +
'<div class="game_border_top"></div><div class="game_border_bottom"></div>' +
'<div class="game_border_left"></div><div class="game_border_right"></div>' +
'<div class="game_border_corner corner1"></div><div class="game_border_corner corner2"></div>' +
'<div class="game_border_corner corner3"></div><div class="game_border_corner corner4"></div>' +
'<span class="bold" style="color:#000;font-size: 0.8em;"><table style="margin:0px;background:#f7dca2;width:100%;align:center;">' +
'<tr><td width="1%"><img class="ico" src="https://gpall.innogamescdn.com/images/game/res/pop.png"></td><td id="p" align="center" width="100%">0</td></tr>' +
'</table></span>' +
'</div>').appendTo('.ui-dialog #units');
$('.ui-dialog #units .ico').css({
height: '20px',
width: '20px'
});
$('.ui-dialog #units .units_info_sprite').css({
background: 'url(https://gpall.innogamescdn.com/images/game/units/units_info_sprite2.51.png)',
backgroundSize: '100%'
});
$('.ui-dialog #units .img_pierce').css({backgroundPosition: '0% 9%'});
$('.ui-dialog #units .img_dist').css({backgroundPosition: '0% 18%'});
//$('#pop_baracks').tooltip('Bevölkerungszahl aller Landeinheiten der Stadt');
//$('#strength_baracks').tooltip('Gesamteinheitenstärke stadteigener Truppen');
$('#b').get(0).innerHTML = blunt;
$('#s').get(0).innerHTML = sharp;
$('#d').get(0).innerHTML = dist;
$('#p').get(0).innerHTML = pop;
}
}
}
};
/*******************************************************************************************************************************
* ● Transporter capacity
*******************************************************************************************************************************/
var TransportCapacity = {
activate: function () {
// transporter display
$('<div id="transporter" class="cont" style="height:25px;">' +
'<table style=" margin:0px;"><tr align="center" >' +
'<td><img id="ship_img" class="ico" src="http://s7.directupload.net/images/140724/4pvfuch8.png"></td>' +
'<td><span id="ship" class="bold text_shadow" style="color:#FFCC66;font-size: 10px;line-height: 2.1;"></span></td>' +
'</tr></table>' +
'</div>').appendTo('.units_naval .content');
$('#transporter.cont').css({
background: 'url(https://gpall.innogamescdn.com/images/game/layout/layout_units_nav_border.png)'
});
$('#transporter').hover(function () {
$(this).css('cursor', 'pointer');
});
$('#transporter').toggleClick(
function () {
$('#ship_img').get(0).src = "http://s1.directupload.net/images/140724/b5xl8nmj.png";
shipsize = !shipsize;
TransportCapacity.update();
},
function () {
$('#ship_img').get(0).src = "http://s7.directupload.net/images/140724/4pvfuch8.png";
shipsize = !shipsize;
TransportCapacity.update();
}
);
TransportCapacity.update();
},
deactivate: function () {
$('#transporter').remove();
},
update: function () {
var bigTransp = 0, smallTransp = 0, pop = 0, ship = 0, unit, berth, units = [];
// Ship space (available)
smallTransp = parseInt(uw.ITowns.getTown(parseInt(uw.Game.townId, 10)).units().small_transporter, 10);
if (isNaN(smallTransp)) smallTransp = 0;
if (shipsize) {
bigTransp = parseInt(uw.ITowns.getTown(parseInt(uw.Game.townId, 10)).units().big_transporter, 10);
if (isNaN(bigTransp)) bigTransp = 0;
}
// Checking: Research berth
berth = 0;
if (uw.ITowns.getTown(uw.Game.townId).researches().hasBerth()) {
berth = GameData.research_bonus.berth;
}
ship = bigTransp * (GameData.units.big_transporter.capacity + berth) + smallTransp * (GameData.units.small_transporter.capacity + berth);
units = uw.ITowns.getTown(uw.Game.townId).units();
// Ship space (required)
for (var e in units) {
if (units.hasOwnProperty(e)) {
if (uw.GameData.units[e]) { // without Heroes
if (!(uw.GameData.units[e].is_naval || uw.GameData.units[e].flying)) {
pop += units[e] * uw.GameData.units[e].population;
}
}
}
}
$('#ship').get(0).innerHTML = pop + "/" + ship;
}
};
/*******************************************************************************************************************************
* Simulator
* ----------------------------------------------------------------------------------------------------------------------------
* | ● Layout adjustment
* | ● Permanent display of the extended modifier box
* | ● Unit strength for entered units (without modificator influence yet)
* ----------------------------------------------------------------------------------------------------------------------------
*******************************************************************************************************************************/
var Simulator = {
activate: function () {
$('<style id="dio_simulator" type="text/css">' +
'#place_simulator { overflow: hidden !important} ' +
'#place_simulator .game_body { height: 457px !important} ' +
// Bonus container
'.place_sim_bonuses_heroes { position:absolute; right:-20px; top:24px; width: 300px;} ' +
'.place_sim_bonuses_heroes .place_sim_showhide { display:none; } ' + // Hide modifier box button
//'.place_sim_wrap_mods {position: relative; right: -17px !important} '+
'.place_sim_wrap_mods .place_simulator_table :eq(1) { width: 300px;} ' + ////////////// genauer!
'.place_sim_wrap_mods > .place_simulator_table { width: 272px;} ' + ////////////// genauer!
// Wall losses
'.place_sim_wrap_mods tr:last-child { display:none; } ' +
// Extended modifier box
//'@-webkit-keyframes MODBOX { 0% { opacity: 0; } 100% { opacity: 1; } } '+
//'@keyframes MODBOX { 0% { opacity: 0; } 100% { opacity: 1; } } '+
'.place_sim_wrap_mods_extended { display: table-cell !important; -webkit-animation:MODBOX 1s; animation:MODBOX 1s; position: relative; width:272px; padding-top: 3px; opacity: 1 !important; left: 0px; top: 0px} ' +
'.place_sim_wrap_mods_extended table tr td:eq(0) { width: 18px !important } ' +
'.place_sim_wrap_mods_extended td { border:0px; } ' +
'.place_sim_wrap_mods_extended tr td:first-child { border-left:0px; width:19px; padding-left:0px; } ' +
'.place_sim_wrap_mods_extended .place_simulator_table { border:0; margin:2px; border-collapse:separate; border:1px solid #724B08; table-layout:fixed; width:100% } ' +
'.place_simulator_table .place_image { display:block; width: 20px; height:20px; background-size:100%; margin:auto; } ' +
'.place_simulator_table .place_image.pa_commander { background: url(https://diotools.de/images/game/advisors/advisors_22.png); background-position: 0px 44px; } ' +
'.place_simulator_table .place_image.pa_captain { background: url(https://diotools.de/images/game/advisors/advisors_22.png); background-position: 0px 88px; } ' +
'.place_simulator_table .place_image.pa_priest { background: url(https://diotools.de/images/game/advisors/advisors_22.png); background-position: 0px 66px; } ' +
'.place_simulator_table .place_image.is_night { background-position: 0px -40px; } ' +
'.place_simulator_table .place_image.research_ram { background-position: 0px -300px; } ' +
'.place_simulator_table .place_image.research_phalanx { background-position: 0px -280px; }' +
'.place_sim_wrap_mods_extended .place_cross { height:16px; background:none; } ' +
'.place_sim_wrap_mods_extended .place_checkbox_field { display:table-cell; width:13px; height:13px; } ' +
'.place_sim_wrap_mods_extended tr:last-child { display:none;} ' +
'.place_sim_wrap_mods_extended tr:nth-of-type(3) td, .place_sim_wrap_mods_extended tr:nth-of-type(5) td { border-top: 2px solid #BFA978 !important; padding-top: 3px !important} ' +
'.place_sim_wrap_mods_extended .game_border>div { display:none; } ' +
'.place_sim_wrap_mods_extended .game_border { margin:0px; } ' +
'.place_sim_wrap_mods_extended .game_border { height: 139px; overflow-y: auto; overflow-x: hidden; }' + // Größe der Modfikatorbox begrenzen
'#place_simulator .window_inner_curtain { display: none !important } ' + // Hintergrund entfernen bei offener Modifikatorbox
// Unit container
'#simulator_body .unit_container { height: 50px !important; width: 50px !important; margin: 0px 3px 0px 1px !important} ' +
'.place_simulator_odd, .place_simulator_even { text-align: center !important} ' +
'.place_insert_field { margin: 0px !important} ' +
'#place_sim_ground_units { position:absolute; bottom: 35px;} ' +
// Sea unit box
'#place_sim_naval_units { position: absolute; } ' +
'#place_sim_naval_units tbody tr:last-child { height:auto !important; }' +
'.place_sim_select_strategies select { width: 95px !important} ' +
'.place_sim_select_strategies { margin-left: 99px !important} ' +
// Land unit box
'#place_sim_wrap_units { position: absolute !important; bottom: 35px !important} ' +
'#simulator_body>h4 { position:absolute;bottom:188px;} ' +
// Select boxes
'.place_sim_select_gods_wrap { position:absolute; bottom:185px; left:96px;} ' +
'.place_sim_select_gods { width: 105px !important} ' +
'.place_sim_select_gods select { width: 80px !important} ' +
'#select_insert_units { width: 130px !important} ' +
'.place_sim_select_gods_wrap .place_symbol, .place_sim_select_strategies .place_symbol { margin: 0px 2px 0px 5px !important} ' +
'.place_sim_insert_units .place_symbol { background: url(https://gpall.innogamescdn.com/images/game/towninfo/traveltime.png) !important; background-size: 140% !important; background-position-y: -4px !important} ' +
'.place_attack { float: left !important} ' +
'#simulator_body .att { margin-left: 19px !important} ' +
// Hero box
'.place_sim_heroes_container { position: absolute !important; right: 26px !important; padding-top: 3px !important; z-index: 1 !important} ' +
'.place_sim_hero_container { width: 45px !important; height: 25px !important} ' +
'#place_simulator .place_sim_bonuses_heroes h4:nth-of-type(2) { display:none; }' + // Heroes title
// - Hero container
'.place_sim_hero_choose, .place_sim_hero_unit_container { height: 26px !important; width: 30px !important} ' +
'#hero_defense_icon, #hero_attack_icon { height: 25px !important; width: 25px !important; margin: 0px !important} ' +
'#hero_defense_dd, #hero_attack_dd { height: 25px !important; width: 25px !important; margin: 1px !important} ' +
'.place_sim_hero_attack, .place_sim_hero_defense { margin-left: 3px !important} ' +
'#hero_attack_text, #hero_defense_text { font-size: 11px !important; bottom: 0px !important} ' +
'.place_sim_heroes_container .plus { left: 2px; top: 2px !important} ' +
'.place_sim_heroes_container .button_new.square { left: 2px !important; } ' +
// - Hero spinner
'.place_sim_heroes_container .spinner { height: 25px !important; width: 40px !important } ' +
'.place_sim_heroes_container td:nth-child(0) { height: 30px !important} ' +
'.place_sim_heroes_container .spinner { height: 24px !important; position:absolute !important; width:12px !important; left:29px !important; '+
'background:url(https://gpall.innogamescdn.com/images/game/border/odd.png) repeat !important; border: 1px solid rgb(107, 107, 107) !important; } ' +
'.place_sim_heroes_container .spinner .button_down, .place_sim_heroes_container .spinner .button_up { bottom: 2px !important; cursor: pointer !important} ' +
'.place_sim_heroes_container .spinner .border_l, .place_sim_heroes_container .spinner .border_r, .place_sim_heroes_container .spinner .body { display:none; } '+
// Quack
'#q_place_sim_lost_res { display: none; } ' +
'</style>').appendTo('head');
if($('#place_simulator').get(0)) {
Simulator.change();
}
},
deactivate: function () {
$('#dio_simulator').remove();
if($('#simu_table').get(0)) {
$('#simu_table').remove();
// Hero box
if ($('.place_sim_heroes_container').get(0)) {
$('.hero_unit').each(function () {
$(this).addClass('unit_icon40x40').removeClass('unit_icon25x25');
});
// Hero spinner
$('.place_sim_heroes_container .spinner').each(function () {
$(this).addClass('place_sim_hero_spinner');
});
}
}
},
change: function () {
// TODO: Durch CSS ersetzen...
// Wall loss
$('.place_sim_wrap_mods tr:eq(1) td:eq(5)').html('<span id="building_place_def_losses_wall_level" class="place_losses bold"></span>');
// Extended modificator box
$('.place_sim_wrap_mods_extended .power').each(function () {
$(this).removeClass("power_icon45x45").addClass("power_icon16x16");
});
$('.place_sim_wrap_mods_extended td:nth-child(even)').each(function () {
$(this).addClass("left_border place_simulator_odd");
});
$('.place_sim_wrap_mods_extended td:nth-child(odd)').each(function () {
$(this).addClass("left_border place_simulator_even");
});
// Border entfernen
$('.place_sim_wrap_mods_extend td:first-child').each(function () {
$(this).removeClass("left_border");
});
// -> Update percentage each time
$('.place_checkbox_field').click(function () {
FightSimulator.closeModsExtended(); //$('.place_sim_bonuses_more_confirm').get(0).click();
});
// Hero world ?
if (uw.Game.hasArtemis) {
$('.place_sim_wrap_mods_extend tr').each(function () {
this.children[1].style.borderLeft = "none";
this.children[0].remove();
});
}
// Hero box
if ($('.place_sim_heroes_container').get(0)) {
$('.hero_unit').each(function () {
$(this).removeClass('unit_icon40x40').addClass('unit_icon25x25');
});
// Hero spinner
$('.place_sim_heroes_container .spinner').each(function () {
$(this).removeClass('place_sim_hero_spinner');
});
}
setStrengthSimulator();
}
};
function afterSimulation() {
var lossArray = {att: {res: 0, fav: 0, pop: 0}, def: {res: 0, fav: 0, pop: 0}},
wall_level = parseInt($('.place_sim_wrap_mods .place_insert_field[name="sim[mods][def][wall_level]"]').val(), 10),
wall_damage = parseInt($('#building_place_def_losses_wall_level').get(0).innerHTML, 10),
wall_iron = [0, 200, 429, 670, 919, 1175, 1435, 1701, 1970, 2242, 2518, 2796, 3077, 3360, 3646, 3933, 4222, 4514, 4807, 5101, 5397, 5695, 5994, 6294, 6596, 6899];
// Calculate unit losses
$('#place_sim_ground_units .place_losses, #place_sim_naval_units .place_losses').each(function () {
var loss = parseInt(this.innerHTML, 10) || 0;
console.log(this.innerHTML);
if (loss > 0) {
var unit = this.id.substring(26);
var side = this.id.split("_")[2]; // att / def
lossArray[side].res += loss * (uw.GameData.units[unit].resources.wood + uw.GameData.units[unit].resources.stone + uw.GameData.units[unit].resources.iron);
lossArray[side].fav += loss * uw.GameData.units[unit].favor;
lossArray[side].pop += loss * uw.GameData.units[unit].population;
}
});
// Calculate wall resource losses
for (var w = wall_level; w > wall_level - wall_damage; w--) {
lossArray.def.res += 400 + w * 350 + wall_iron[w]; // wood amount is constant, stone amount is multiplicative and iron amount is irregular for wall levels
}
// Insert losses into table
for (var x in lossArray) {
if (lossArray.hasOwnProperty(x)) {
for (var z in lossArray[x]) {
if (lossArray[x].hasOwnProperty(z)) {
console.log(((z === "res") && (lossArray[x][z] > 10000)) ? (Math.round(lossArray[x][z] / 1000) + "k") : lossArray[x][z]);
$("#" + x + "_" + z).get(0).innerHTML = ((z === "res") && (lossArray[x][z] > 10000)) ? (Math.round(lossArray[x][z] / 1000) + "k") : lossArray[x][z];
}
}
}
}
}
// Stärkeanzeige: Simulator
var unitsGround = {att: {}, def: {}}, unitsNaval = {att: {}, def: {}}, name = "";
function setStrengthSimulator() {
$('<div id="simu_table">' +
'<div style="float:left; margin-right:12px;"><h4>' + getText("labels", "str") + '</h4>' +
'<table class="place_simulator_table strength" cellpadding="0px" cellspacing="0px" style="align:center;">' +
'<tr>' +
'<td class="place_simulator_even"></td>' +
'<td class="left_border place_simulator_odd"><div class="ico units_info_sprite img_hack"></div></td>' +
'<td class="left_border place_simulator_even"><div class="ico units_info_sprite img_pierce"></div></td>' +
'<td class="left_border place_simulator_odd"><div class="ico units_info_sprite img_dist"></div></td>' +
'<td class="left_border place_simulator_even"><div class="ico units_info_sprite img_ship"></div></td>' +
'</tr><tr>' +
'<td class="place_simulator_even"><div class="place_symbol place_att"></div></td>' +
'<td class="left_border place_simulator_odd" id="att_b">0</td>' +
'<td class="left_border place_simulator_even" id="att_s">0</td>' +
'<td class="left_border place_simulator_odd" id="att_d">0</td>' +
'<td class="left_border place_simulator_even" id="att_ship">0</td>' +
'</tr><tr>' +
'<td class="place_simulator_even"><div class="place_symbol place_def"></div></td>' +
'<td class="left_border place_simulator_odd" id="def_b">0</td>' +
'<td class="left_border place_simulator_even" id="def_s">0</td>' +
'<td class="left_border place_simulator_odd" id="def_d">0</td>' +
'<td class="left_border place_simulator_even" id="def_ship">0</td>' +
'</tr>' +
'</table>' +
'</div><div><h4>' + getText("labels", "los") + '</h4>' +
'<table class="place_simulator_table loss" cellpadding="0px" cellspacing="0px" style="align:center;">' +
'<tr>' +
'<td class="place_simulator_even"></td>' +
'<td class="left_border place_simulator_odd"><div class="ico units_info_sprite img_res"></div></td>' +
'<td class="left_border place_simulator_even"><div class="ico units_info_sprite img_fav"></div></td>' +
'<td class="left_border place_simulator_odd"><div class="ico units_info_sprite img_pop"></div></td>' +
'</tr><tr>' +
'<td class="place_simulator_even"><div class="place_symbol place_att"></div></td>' +
'<td class="left_border place_simulator_odd" id="att_res">0</td>' +
'<td class="left_border place_simulator_even" id="att_fav">0</td>' +
'<td class="left_border place_simulator_odd" id="att_pop">0</td>' +
'</tr><tr>' +
'<td class="place_simulator_even"><div class="place_symbol place_def"></div></td>' +
'<td class="left_border place_simulator_odd" id="def_res">0</td>' +
'<td class="left_border place_simulator_even" id="def_fav">0</td>' +
'<td class="left_border place_simulator_odd" id="def_pop">0</td>' +
'</tr>' +
'</table>' +
'</div></div>').appendTo('#simulator_body');
$('#simu_table').css({
position: 'absolute',
top: '200px',
fontSize: '0.8em',
width: '63%'
});
$('#simu_table .ico').css({
height: '20px',
width: '20px',
margin: 'auto'
});
$('#simu_table .units_info_sprite').css({
background: 'url(https://gpall.innogamescdn.com/images/game/units/units_info_sprite2.51.png)',
backgroundSize: '100%'
});
$('#simu_table .img_hack').css({backgroundPosition: '0% 36%'});
$('#simu_table .img_pierce').css({backgroundPosition: '0% 27%'});
$('#simu_table .img_dist').css({backgroundPosition: '0% 45%'});
$('#simu_table .img_ship').css({backgroundPosition: '0% 72%'});
$('#simu_table .img_fav').css({
background: 'url(https://gpall.innogamescdn.com/images/game/res/favor.png)',
backgroundSize: '100%'
});
$('#simu_table .img_res').css({
background: 'url(https://gpall.innogamescdn.com/images/game/units/units_info_sprite2.51.png) 0% 54%',
backgroundSize: '100%'
});
$('#simu_table .img_pop').css({
background: 'url(https://gpall.innogamescdn.com/images/game/res/pop.png)',
backgroundSize: '100%'
});
$('#simu_table .left_border').css({
width: '54px'
});
$('#simu_table .left_border').each(function () {
$(this)[0].align = 'center';
});
$('#simu_table .strength').tooltip(getText("labels", "str") + " (" + getText("labels", "mod") + ")");
$('#simu_table .loss').tooltip(getText("labels", "los"));
// Klick auf Einheitenbild
$('.index_unit').click(function () {
var type = $(this).attr('class').split(" ")[4];
$('.place_insert_field[name="sim[units][att][' + type + ']"]').change();
});
$('#place_sim_ground_units .place_insert_field, #place_sim_naval_units .place_insert_field').on('input change', function () {
name = $(this).attr("name").replace(/\]/g, "").split("[");
var str = this;
//console.log(str);
setTimeout(function () {
var unit_type = $(str).closest('.place_simulator_table').attr("id").split("_")[2],
val, e;
val = parseInt($(str).val(), 10);
val = val || 0;
if (unit_type == "ground") {
unitsGround[name[2]][name[3]] = val;
if (name[2] == "def") {
UnitStrength.calcDef(unitsGround.def);
} else {
UnitStrength.calcOff(unitsGround.att, unitsGround.att);
}
$('#' + name[2] + '_b').get(0).innerHTML = blunt;
$('#' + name[2] + '_s').get(0).innerHTML = sharp;
$('#' + name[2] + '_d').get(0).innerHTML = dist;
} else {
var att = 0, def = 0;
unitsNaval[name[2]][name[3]] = val;
if (name[2] == "def") {
for (e in unitsNaval.def) {
if (unitsNaval.def.hasOwnProperty(e)) {
def += unitsNaval.def[e] * uw.GameData.units[e].defense;
}
}
$('#def_ship').get(0).innerHTML = def;
} else {
for (e in unitsNaval.att) {
if (unitsNaval.att.hasOwnProperty(e)) {
att += unitsNaval.att[e] * uw.GameData.units[e].attack;
}
}
$('#att_ship').get(0).innerHTML = att;
}
}
}, 100);
});
// Abfrage wegen eventueller Spionageweiterleitung
getUnitInputs();
setTimeout(function () {
setChangeUnitInputs("def");
}, 100);
$('#select_insert_units').change(function () {
var side = $(this).find('option:selected').val();
setTimeout(function () {
getUnitInputs();
if (side === "att" || side === "def") {
setChangeUnitInputs(side);
}
}, 200);
});
}
function getUnitInputs() {
$('#place_sim_ground_units .place_insert_field, #place_sim_naval_units .place_insert_field').each(function () {
name = $(this).attr("name").replace(/\]/g, "").split("[");
var str = this;
var unit_type = $(str).closest('.place_simulator_table').attr("id").split("_")[2],
val, e;
val = parseInt($(str).val(), 10);
val = val || 0;
if (unit_type === "ground") {
unitsGround[name[2]][name[3]] = val;
} else {
var att = 0, def = 0;
unitsNaval[name[2]][name[3]] = val;
}
});
}
function setChangeUnitInputs(side) {
$('.place_insert_field[name="sim[units][' + side + '][godsent]"]').change();
setTimeout(function () {
$('.place_insert_field[name="sim[units][' + side + '][colonize_ship]"]').change();
}, 100);
}
/*******************************************************************************************************************************
* Defense form
* ----------------------------------------------------------------------------------------------------------------------------
* | ● Adds a defense form to the bbcode bar
* ----------------------------------------------------------------------------------------------------------------------------
*******************************************************************************************************************************/
// Funktion aufteilen...
function addForm(e) {
var textareaId = "", bbcodeBarId = "";
switch (e) {
case "/alliance_forum/forum":
textareaId = "#forum_post_textarea";
bbcodeBarId = "#forum";
break;
case "/message/forward":
textareaId = "#message_message";
bbcodeBarId = "#message_bbcodes";
break;
case "/message/new":
textareaId = "#message_new_message";
bbcodeBarId = "#message_bbcodes";
break;
case "/message/view":
textareaId = "#message_reply_message";
bbcodeBarId = "#message_bbcodes";
break;
case "/player_memo/load_memo_content":
textareaId = "#memo_text_area";
bbcodeBarId = "#memo_edit";
break;
}
$('<a title="Verteidigungsformular" href="#" class="dio_bbcode_option def_form" name="def_form"></a>').appendTo(bbcodeBarId + ' .bb_button_wrapper');
$('.def_form_button').css({
cursor: 'pointer',
marginTop: '3px'
});
$(bbcodeBarId + ' .dio_bbcode_option').css({
background: 'url("http://s14.directupload.net/images/140126/lt3hyb8j.png")',
display: 'block',
float: 'left',
width: '22px',
height: '23px',
margin: '0 3px 0 0',
position: 'relative'
});
$(bbcodeBarId + ' .def_form').css({
backgroundPosition: '-89px 0px'
});
var imgArray = {
wall: 'https://gpall.innogamescdn.com/images/game/main/wall.png',
tower: 'https://gpall.innogamescdn.com/images/game/main/tower.png',
hide: 'https://gpall.innogamescdn.com/images/game/main/hide.png',
spy: 'http://s7.directupload.net/images/140114/yr993xwc.png',
pop: 'http://s7.directupload.net/images/140114/4d6xktxm.png',
rev1: 'http://s7.directupload.net/images/140115/9cv6otiu.png',
rev0: 'http://s7.directupload.net/images/140115/aue4rg6i.png',
eo1: 'http://s1.directupload.net/images/140115/fkzlipyh.png',
eo0: 'http://s1.directupload.net/images/140115/hs2kg59c.png',
att: 'http://s1.directupload.net/images/140115/3t6uy4te.png',
sup: 'http://s7.directupload.net/images/140115/ty6szerx.png',
zeus: 'http://s1.directupload.net/images/140114/cdxecrpu.png',
hera: 'http://s1.directupload.net/images/140114/mve54v2o.png',
athena: 'http://s14.directupload.net/images/140114/kyqyedhe.png',
poseidon: 'http://s7.directupload.net/images/140114/tusr9oyi.png',
hades: 'http://s7.directupload.net/images/140114/huins2gn.png',
artemis: 'http://s7.directupload.net/images/140114/kghjhko8.png',
nogod: 'http://s1.directupload.net/images/140114/e7vmvfap.png',
captain: 'http://s14.directupload.net/images/140114/88gg75rc.png',
commander: 'http://s14.directupload.net/images/140114/slbst52o.png',
priest: 'http://s1.directupload.net/images/140114/glptekkx.png',
phalanx: 'http://s7.directupload.net/images/140114/e97wby6z.png',
ram: 'http://s7.directupload.net/images/140114/s854ds3w.png',
militia: 'http://wiki.en.grepolis.com/images/9/9b/Militia_40x40.png',
sword: 'http://wiki.en.grepolis.com/images/9/9c/Sword_40x40.png',
slinger: 'http://wiki.en.grepolis.com/images/d/dc/Slinger_40x40.png',
archer: 'http://wiki.en.grepolis.com/images/1/1a/Archer_40x40.png',
hoplite: 'http://wiki.en.grepolis.com/images/b/bd/Hoplite_40x40.png',
rider: 'http://wiki.en.grepolis.com/images/e/e9/Rider_40x40.png',
chariot: 'http://wiki.en.grepolis.com/images/b/b8/Chariot_40x40.png',
catapult: 'http://wiki.en.grepolis.com/images/f/f0/Catapult_40x40.png',
godsent: 'http://wiki.de.grepolis.com/images/6/6e/Grepolis_Wiki_225.png',
def_sum: 'http://s14.directupload.net/images/140127/6cxnis9r.png',
minotaur: 'http://wiki.de.grepolis.com/images/7/70/Minotaur_40x40.png',
manticore: 'http://wiki.de.grepolis.com/images/5/5e/Manticore_40x40.png',
zyclop: 'http://wiki.de.grepolis.com/images/6/66/Zyklop_40x40.png',
sea_monster: 'http://wiki.de.grepolis.com/images/7/70/Sea_monster_40x40.png',
harpy: 'http://wiki.de.grepolis.com/images/8/80/Harpy_40x40.png',
medusa: 'http://wiki.de.grepolis.com/images/d/db/Medusa_40x40.png',
centaur: 'http://wiki.de.grepolis.com/images/5/53/Centaur_40x40.png',
pegasus: 'http://wiki.de.grepolis.com/images/5/54/Pegasus_40x40.png',
cerberus: 'http://wiki.de.grepolis.com/images/6/67/Zerberus_40x40.png',
fury: 'http://wiki.de.grepolis.com/images/6/67/Erinys_40x40.png',
griffin: 'http://wiki.de.grepolis.com/images/d/d1/Unit_greif.png',
calydonian_boar: 'http://wiki.de.grepolis.com/images/9/93/Unit_eber.png',
big_transporter: 'http://wiki.en.grepolis.com/images/0/04/Big_transporter_40x40.png',
bireme: 'http://wiki.en.grepolis.com/images/4/44/Bireme_40x40.png',
attack_ship: 'http://wiki.en.grepolis.com/images/e/e6/Attack_ship_40x40.png',
demolition_ship: 'http://wiki.en.grepolis.com/images/e/ec/Demolition_ship_40x40.png',
small_transporter: 'http://wiki.en.grepolis.com/images/8/85/Small_transporter_40x40.png',
trireme: 'http://wiki.en.grepolis.com/images/a/ad/Trireme_40x40.png',
colonize_ship: 'http://wiki.en.grepolis.com/images/d/d1/Colonize_ship_40x40.png',
move_icon: 'https://gpall.innogamescdn.com/images/game/unit_overview/',
bordure: 'http://s1.directupload.net/images/140126/8y6pmetk.png'
};
$('<div class="bb_def_chooser">' +
'<div class="bbcode_box middle_center">' +
'<div class="bbcode_box top_left"></div><div class="bbcode_box top_right"></div>' +
'<div class="bbcode_box top_center"></div><div class="bbcode_box bottom_center"></div>' +
'<div class="bbcode_box bottom_right"></div><div class="bbcode_box bottom_left"></div>' +
'<div class="bbcode_box middle_left"></div><div class="bbcode_box middle_right"></div>' +
'<div class="bbcode_box content clearfix" style="padding:5px">' +
'<div id="f_uni" class="checkbox_new checked"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("labels", "det") + '</div></div><br><br>' +
'<div id="f_prm" class="checkbox_new checked"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("labels", "prm") + '</div></div><br><br>' +
'<div id="f_sil" class="checkbox_new checked"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("labels", "sil") + '</div></div><br><br>' +
'<div id="f_mov" class="checkbox_new checked"><div class="cbx_icon"></div><div class="cbx_caption">' + getText("labels", "mov") + '</div></div><br><br>' +
'<div><a class="button" id="dio_insert" href="#"><span class="left"><span class="right"><span class="middle"><small>' + getText("buttons", "ins") + '</small></span></span></span><span></span></a></div>' +
'</div></div></div>').appendTo(bbcodeBarId + ' .bb_button_wrapper');
$('.bb_def_chooser').css({
display: 'none',
top: '38px',
left: '510px',
position: 'absolute',
width: '190px',
zIndex: 10000
});
$(bbcodeBarId + " .bb_def_chooser .checkbox_new").click(function () {
$(this).toggleClass("checked");
});
$(bbcodeBarId + ' .def_form').toggleClick(function () {
$(this).parent().find(".bb_def_chooser").get(0).style.display = "block";
}, function () {
$(this).parent().find(".bb_def_chooser").get(0).style.display = "none";
});
$(bbcodeBarId + ' #dio_insert').click(function () {
var textarea = $(textareaId).get(0), text = $(textarea).val(), troop_table = "", troop_img = "", troop_count = "", separator = "", move_table = "", landunit_sum = 0;
$('.def_form').click();
if ($('#f_uni').hasClass("checked")) {
$('.units_land .unit, .units_naval .unit').each(function () {
troop_img += separator + '[img]' + imgArray[this.className.split(" ")[1]] + '[/img]';
troop_count += separator + '[center]' + $(this).find(".value").get(0).innerHTML + '[/center]';
separator = "[||]";
});
} else {
$('.units_land .unit').each(function () {
var a = this.className.split(" ")[1], def = (uw.GameData.units[a].def_hack + uw.GameData.units[a].def_pierce + uw.GameData.units[a].def_distance) / (3 * uw.GameData.units[a].population);
if (def > 10) {
landunit_sum += parseInt($(this).find(".value").get(0).innerHTML, 10) * uw.GameData.units[a].population * ((def > 20) ? 2 : 1);
}
});
landunit_sum = (landunit_sum > 10000) ? ((Math.round(landunit_sum / 100)) / 10) + "k" : landunit_sum;
troop_img += '[img]' + imgArray.def_sum + '[/img]';
troop_count += '[center]' + landunit_sum + '[/center]';
separator = "[||]";
$('.units_naval .unit').each(function () {
troop_img += separator + '[img]' + imgArray[this.className.split(" ")[1]] + '[/img]';
troop_count += separator + '[center]' + $(this).find(".value").get(0).innerHTML + '[/center]';
});
}
if (troop_img !== "") {
troop_table = "\n[table][**]" + troop_img + "[/**][**]" + troop_count + "[/**][/table]\n";
}
var str = '[img]' + imgArray.bordure + '[/img]' +
'\n\n[color=#006B00][size=12][u][b]' + getText("labels", "ttl") + ' ([url="http://adf.ly/eDM1y"]©DIO-Tools[/url])[/b][/u][/size][/color]\n\n' +
//'[table][**][img]'+ imgArray.sup +'[/img][||]'+
'[size=12][town]' + uw.ITowns.getTown(uw.Game.townId).getId() + '[/town] ([player]' + uw.Game.player_name + '[/player])[/size]' +
//'[||][img]'+ imgArray['rev' + (uw.ITowns.getTown(uw.Game.townId).hasConqueror()?1:0)] +'[/img][/**][/table]'+
'\n\n[i][b]' + getText("labels", "inf") + '[/b][/i]' + troop_table +
'[table][*]' +
'[img]' + imgArray.wall + '[/img][|]\n' +
'[img]' + imgArray.tower + '[/img][|]\n' +
'[img]' + imgArray.phalanx + '[/img][|]\n' +
'[img]' + imgArray.ram + '[/img][|]\n' +
($('#f_prm').hasClass("checked") ? '[img]' + imgArray.commander + '[/img][|]\n' : ' ') +
($('#f_prm').hasClass("checked") ? '[img]' + imgArray.captain + '[/img][|]\n' : ' ') +
($('#f_prm').hasClass("checked") ? '[img]' + imgArray.priest + '[/img][|]\n' : ' ') +
($('#f_sil').hasClass("checked") ? '[center][img]' + imgArray.spy + '[/img][/center][|]\n' : ' ') +
'[img]' + imgArray.pop + '[/img][|]\n' +
'[img]' + imgArray[(uw.ITowns.getTown(uw.Game.townId).god() || "nogod")] + '[/img][/*]\n' +
'[**][center]' + uw.ITowns.getTown(uw.Game.townId).buildings().getBuildingLevel("wall") + '[/center][||]' +
'[center]' + uw.ITowns.getTown(uw.Game.townId).buildings().getBuildingLevel("tower") + '[/center][||]' +
'[center]' + (uw.ITowns.getTown(uw.Game.townId).researches().attributes.phalanx ? '+' : '-') + '[/center][||]' +
'[center]' + (uw.ITowns.getTown(uw.Game.townId).researches().attributes.ram ? '+' : '-') + '[/center][||]' +
($('#f_prm').hasClass("checked") ? '[center]' + ((uw.Game.premium_features.commander >= uw.Timestamp.now()) ? '+' : '-') + '[/center][||]' : ' ') +
($('#f_prm').hasClass("checked") ? '[center]' + ((uw.Game.premium_features.captain >= uw.Timestamp.now()) ? '+' : '-') + '[/center][||]' : ' ') +
($('#f_prm').hasClass("checked") ? '[center]' + ((uw.Game.premium_features.priest >= uw.Timestamp.now()) ? '+' : '-') + '[/center][||]' : ' ') +
($('#f_sil').hasClass("checked") ? '[center]' + Math.round(uw.ITowns.getTown(uw.Game.townId).getEspionageStorage() / 1000) + 'k[/center][||]' : ' ') +
'[center]' + uw.ITowns.getTown(uw.Game.townId).getAvailablePopulation() + '[/center][||]' +
'[center]' + $('.gods_favor_amount').get(0).innerHTML + '[/center]' +
'[/**][/table]';
var bb_count_str = parseInt(str.match(/\[/g).length, 10), bb_count_move = 0;
var i = 0;
if ($('#f_mov').hasClass("checked")) {
move_table += '\n[i][b]' + getText("labels", "mov") + '[/b][/i]\n[table]';
$('#toolbar_activity_commands').mouseover();
$('#toolbar_activity_commands_list .content .command').each(function () {
var cl = $(this).children()[0].className.split(" ");
if ((cl[cl.length - 1] === "returning" || cl[cl.length - 1] === "revolt_arising" || cl[cl.length - 1] === "revolt_running") && ((bb_count_str + bb_count_move) < 480)) {
move_table += (i % 1) ? "" : "[**]";
i++;
move_table += "[img]" + imgArray.move_icon + cl[2] + ".png[/img][||]";
move_table += getArrivalTime($(this).children()[1].innerHTML) + (uw.Game.market_id === "de" ? " Uhr[||]" : " [||]");
move_table += "[town]" + JSON.parse(atob($(this).children()[2].firstChild.href.split("#")[1])).id + "[/town]";
move_table += (i % 1) ? "[||]" : "[/**]";
}
bb_count_move = parseInt(move_table.match(/\[/g).length, 10);
});
if ((bb_count_str + bb_count_move) > 480) {
move_table += '[**]...[/**]';
}
$('#toolbar_activity_commands').mouseout();
//console.log((bb_count_str + bb_count_move));
move_table += (i % 1) ? "[/**]" : "";
move_table += "[*][|][color=#800000][size=6][i] (" + getText("labels", "dev") + ": ±1s)[/i][/size][/color][/*][/table]\n";
}
str += move_table + '[img]' + imgArray.bordure + '[/img]';
$(textarea).val(text.substring(0, $(textarea).get(0).selectionStart) + str + text.substring($(textarea).get(0).selectionEnd));
});
}
function getArrivalTime(duration_time) {
/*
var server_time = new Date((uw.Timestamp.server() + 7200) * 1000);
duration_time = duration_time.split(":");
s = server_time.getUTCSeconds() + parseInt(duration_time[2], 10);
m = server_time.getUTCMinutes() + parseInt(duration_time[1], 10) + ((s>=60)? 1 : 0);
h = server_time.getUTCHours() + parseInt(duration_time[0], 10) + ((m>=60)? 1 : 0);
*/
var server_time = $('.server_time_area').get(0).innerHTML.split(" ")[0].split(":"), arrival_time, s, m, h;
duration_time = duration_time.split(":");
s = parseInt(server_time[2], 10) + parseInt(duration_time[2], 10);
m = parseInt(server_time[1], 10) + parseInt(duration_time[1], 10) + ((s >= 60) ? 1 : 0);
h = parseInt(server_time[0], 10) + parseInt(duration_time[0], 10) + ((m >= 60) ? 1 : 0);
s = s % 60;
m = m % 60;
h = h % 24;
s = ((s < 10) ? "0" : "") + s;
m = ((m < 10) ? "0" : "") + m;
h = ((h < 10) ? "0" : "") + h;
arrival_time = h + ":" + m + ":" + s;
return arrival_time;
}
/*******************************************************************************************************************************
* Smiley box
* ----------------------------------------------------------------------------------------------------------------------------
* | ● Display of a smiley selection box for text input fields (forum, messages, notes):
* | ● Used smileys: http://www.greensmilies.com/smilie-album/
* | + Own Grepolis smileys
* ----------------------------------------------------------------------------------------------------------------------------
*******************************************************************************************************************************/
var smileyArray = {};
var SmileyBox = {
loading_error: false, isHalloween: false, isXmas: false, isForum: $(".editor_textbox_container").get(0),
activate: function () {
$('<style id="dio_smiley">' +
'.smiley_button { cursor:pointer; margin:3px 2px 2px 2px; } ' +
'.smiley_box.game { z-index:5000; position:absolute; top:27px; left:430px; min-width:300px; display:none; } ' +
// Smiley categories
'.smiley_box .box_header { display: table; width: 100%; text-align:center; } ' +
'.smiley_box .group { display:table-cell; color: #0c450c; cursor: pointer; font-weight:bold; padding: 0px 2px 0px 2px; } ' +
'.smiley_box .group.active { color: #089421; text-decoration:underline;} ' +
'.smiley_box .group:hover { color: #14999E; } ' + // #11AD6C
// Special smiley categories
'.smiley_box .halloween { color: #E25E00; } ' +
'.smiley_box .xmas { color: darkred; } ' +
'.smiley_box hr { margin:3px 0px 0px 0px; color:#086b18; border:1px solid; } ' +
// Smilies
'.smiley_box .box_content { overflow: hidden; } ' +
'.smiley_box .box_content .smiley { border: 1px solid rgba(0,0,0,0); border-radius: 5px;} ' +
'.smiley_box .box_content .smiley:hover { background: rgba(8, 148, 77, 0.2); border: 1px solid rgba(0, 128, 0, 0.5); } ' +
// Smiley page link
'.smiley_box .box_footer { text-align:center; margin-top:4px; } ' +
'.smiley_box a:link, .smiley_box a:visited { color: #086b18; font-size: 0.7em; } ' +
'.smiley_box a:hover { color: #14999E; } ' +
// TODO Forum ...
'.smiley_box.forum .box_header_left { float:left; } ' +
//'.smiley_box.forum .group { padding-right: 10px; } '+
'.smiley_box.forum .box_header_right { text-align:right; margin-top:2px; } ' +
'.smiley_box.forum { max-height:90px; margin-left:5px; width:99%; min-height:10px; } ' +
'.smiley_box.forum .box_content { overflow:overlay; min-height:70px; margin-bottom:10px; } ' +
'.smiley_box.forum a:link, .smiley_box.forum a:visited { font-size: 1em; } ' +
'</style>').appendTo('head');
// Smiley categories
smileyArray.button = ["rollsmiliey", "smile"];
smileyArray.standard = [
"smilenew", "i/cnfy7elqh8dotnsdp", "lol", "neutral_new", "afraid", "freddus_pacman", "auslachen2", "kolobok-sanduhr", "bussi2", "winken4", "flucht2", "panik4", "ins-auge-stechen",
"seb_zunge", "fluch4_GREEN", "baby_junge2", "blush-reloaded6", "frown", "verlegen", "blush-pfeif", "stevieh_rolleyes", "daumendreh2", "baby_taptap",
"sadnew", "hust", "confusednew", "idea2", "irre", "irre4", "sleep", "candle", "nicken", "no_sad",
"thumbs-up_new", "thumbs-down_new", "bravo2", "oh-no2", "kaffee2", "drunk", "saufen", "freu-dance", "hecheln", "headstand", "rollsmiliey", "eazy_cool01", "motz", "cuinlove", "biggrin"
];
smileyArray.nature = [
"dinosaurier07", "flu-super-gau", "ben_cat", "schwein", "hundeleine01", "blume", "ben_sharky", "ben_cow", "charly_bissig", "gehirnschnecke_confused", "mttao_fische", "mttao_angler",
"insel", "fliegeschnappen", "i/cifohy0y1cl7nckzw", /* Spinne */ "i/cifogx34asrswrcjw", /* Schiffbrüchiger */ "plapperhase", "ben_dumbo"
];
smileyArray.grepolis = [
"mttao_wassermann", "i/cigrmpfofys5xtiks", /* Hera */ "i/cifvfsu3e2sdiipn0", /* Medusa */ "i/cigmv8wnffb3v0ifg", /* Mantikor */ "i/cigrqlp2odi2kqo24", /* Zyklop */
"i/cj1l9gndtu3nduyvi", /* Minotaurus */ "i/cj2byjendffymp88t", /* Pegasus */ "i/cj2ccmi2x8mhcoikd", /* Hydra */
"silvester_cuinlove", "mttao_schuetze", "kleeblatt2", "wallbash", /* "glaskugel4", */ "musketiere_fechtend", /* "krone-hoch",*/ "i/cifojb85jytq5h07g", // Wikinger
"mttao_waage2", "steckenpferd", /* "kinggrin_anbeten2", */ "i/cifohielywpedbyh8", /* Grepo Love */ "skullhaufen", "pferdehaufen" // "i/ckajscggscw4s2u60"
];
smileyArray.people = [
"seb_hut5", "opa_boese2", "star-wars-yoda1-gruen", "hexefliegend", "snob", "seb_detektiv_ani", "seb_cowboy", "devil", "segen", "pirat5", "borg", "hexe3b",
"i/cifoqe3geok0jco5o", // Ägypter
"i/ciforgs313z0ae1cc", // Hippie
"eazy_polizei", "stars_elvis", "mttao_chefkoch", "nikolaus", "pirate3_biggrin", "batman_skeptisch", "tubbie1", "tubbie2", "tubbie3", "tubbie4"
];
smileyArray.other = [
"steinwerfen", "herzen02", "scream-if-you-can", "kolobok", "headbash", "liebeskummer", "bussi", "brautpaar-reis", "grab-schaufler2", "boxen2", "aufsmaul",
"sauf", "mttao_kehren", "sm", "weckruf", "klugscheisser2", "karte2_rot", "dagegen", "party", "dafuer", "outofthebox", "pokal_gold", "koepfler", "transformer"
];
SmileyBox.checkHolidaySeason();
if (SmileyBox.isHalloween) {
smileyArray.halloween = [
"zombies_alien", "zombies_lol", "zombies_rolleyes", "zombie01", "zombies_smile", "zombie02", "zombies_skeptisch", "zombies_eek", "zombies_frown",
"scream-if-you-can", "geistani", "pfeildurchkopf01", "grab-schaufler", "kuerbisleuchten", "mummy3",
"kuerbishaufen", "halloweenskulljongleur", "fledermausvampir", "frankenstein_lol", "halloween_confused", "zombies_razz",
"halloweenstars_freddykrueger", "zombies_cool", "geist2", "fledermaus2", "halloweenstars_dracula"
// "batman" "halloweenstars_lastsummer"
];
}
if (SmileyBox.isXmas) {
smileyArray.xmas = [
"schneeballwerfen", "schneeball", "xmas4_advent4", "nikolaus", "weihnachtsmann_junge", "schneewerfen_wald", "weihnachtsmann_nordpol", "xmas_kilroy_kamin",
"xmas4_laola", "xmas4_aufsmaul", "xmas3_smile", "xmas4_paketliebe", "mttao_ruprecht_peitsche", "3hlkoenige", "santa", "xmas4_hurra2", "weihnachtsgeschenk2", "fred_weihnachten-ostern"
//"dafuer", "outofthebox", "pokal_gold", "koepfler", "transformer"
];
}
//smileyArray.other = smileyArray.halloween.slice();
// Forum: Extra smiley
if (SmileyBox.isForum) {
smileyArray.grepolis.push("i/ckajscggscw4s2u60"); // Pacman
smileyArray.grepolis.push("i/cowqyl57t5o255zli"); // Bugpolis
smileyArray.grepolis.push("i/cowquq2foog1qrbee"); // Inno
}
SmileyBox.loadSmileys();
},
deactivate: function () {
$('#dio_smiley').remove();
},
checkHolidaySeason: function () {
// TODO: HolidaySpecial-Klasse stattdessen benutzen
var daystamp = 1000 * 60 * 60 * 24, today = new Date((new Date()) % (daystamp * (365 + 1 / 4))), // without year
// Halloween-Smileys ->15 days
halloween_start = daystamp * 297, // 25. Oktober
halloween_end = daystamp * 321, // 8. November
// Xmas-Smileys -> 28 Tage
xmas_start = daystamp * 334, // 1. Dezember
xmas_end = daystamp * 361; // 28. Dezember
SmileyBox.isHalloween = (today >= halloween_start) ? (today <= halloween_end) : false;
SmileyBox.isXmas = (today >= xmas_start) ? (today <= xmas_end) : false;
},
// preload images
loadSmileys: function () {
// Replace german sign smilies
if (LID !== "de") {
smileyArray.other[17] = "dagegen2";
smileyArray.other[19] = "dafuer2";
}
for (var e in smileyArray) {
if (smileyArray.hasOwnProperty(e)) {
for (var f in smileyArray[e]) {
if (smileyArray[e].hasOwnProperty(f)) {
var src = smileyArray[e][f];
smileyArray[e][f] = new Image();
smileyArray[e][f].className = "smiley";
if (src.substring(0, 2) == "i/") {
smileyArray[e][f].src = "http://666kb.com/" + src + ".gif";
} else {
if (SmileyBox.loading_error == false) {
smileyArray[e][f].src = "http://www.greensmilies.com/smile/smiley_emoticons_" + src + ".gif";
} else {
smileyArray[e][f].src = 'http://s1.directupload.net/images/140128/93x3p4co.gif';
}
}
smileyArray[e][f].onerror = function () {
this.src = 'http://s1.directupload.net/images/140128/93x3p4co.gif';
};
}
}
}
}
},
// Forum smilies
changeForumEditorLayout: function () {
$('.blockrow').css({border: "none"});
// Subject/Title
$($('.section div label[for="title"]').parent()).css({float: "left", width: "36%", marginRight: "20px"});
$($('.section div label[for="subject"]').parent()).css({float: "left", width: "36%", marginRight: "20px"});
$('.section div input').eq(0).css({marginBottom: "-10px", marginTop: "10px"});
$('#display_posticon').remove();
// Posticons
$('.posticons table').css({width: "50%" /* marginTop: "-16px"*/});
$('.posticons').css({marginBottom: "-16px"});
$('.posticons').insertAfter($('.section div label[for="title"]').parent());
$('.posticons').insertAfter($('.section div label[for="subject"]').parent());
// Posticons hint
$('.posticons p').remove();
// Posticons: No Icon - radio button
$(".posticons [colspan='14']").parent().replaceWith($(".posticons [colspan='14']"));
$(".posticons [colspan='14']").children().wrap("<nobr></nobr>");
$(".posticons [colspan='14']").appendTo('.posticons tr:eq(0)');
$(".posticons [colspan='4']").remove();
},
addForum: function () {
$('<div class="smiley_box forum"><div>' +
'<div class="box_header_left">' +
'<span class="group standard active">' + getText("labels", "std") + '</span>' +
'<span class="group grepolis">' + getText("labels", "gre") + '</span>' +
'<span class="group nature">' + getText("labels", "nat") + '</span>' +
'<span class="group people">' + getText("labels", "ppl") + '</span>' +
'<span class="group other">' + getText("labels", "oth") + '</span>' +
(SmileyBox.isHalloween ? '<span class="group halloween">' + getText("labels", "hal") + '</span>' : '') +
(SmileyBox.isXmas ? '<span class="group xmas">' + getText("labels", "xma") + '</span>' : '') +
'</div>' +
'<div class="box_header_right"><a class="smiley_link" href="http://www.greensmilies.com/smilie-album/" target="_blank">WWW.GREENSMILIES.COM</a></div>' +
'<hr>' +
'<div class="box_content" style="overflow: hidden;"><hr></div>' +
'</div></div><br>').insertAfter(".texteditor");
SmileyBox.addSmileys("standard", "");
$('.group').click(function () {
$('.group.active').removeClass("active");
$(this).addClass("active");
// Change smiley group
SmileyBox.addSmileys(this.className.split(" ")[1], "");
});
},
// add smiley box
add: function (e) {
var bbcodeBarId = "";
switch (e) {
case "/alliance_forum/forum":
bbcodeBarId = "#forum";
break;
case "/message/forward":
bbcodeBarId = "#message_bbcodes";
break;
case "/message/new":
bbcodeBarId = "#message_bbcodes";
break;
case "/message/view":
bbcodeBarId = "#message_bbcodes";//setWonderIconsOnMap
break;
case "/player_memo/load_memo_content":
bbcodeBarId = "#memo_edit"; // old notes
break;
case "/frontend_bridge/fetch":
bbcodeBarId = ".notes_container"; // TODO: new notes
break;
}
if (($(bbcodeBarId + ' #emots_popup_7').get(0) || $(bbcodeBarId + ' #emots_popup_15').get(0)) && PID == 84367) {
$(bbcodeBarId + " .bb_button_wrapper").get(0).lastChild.remove();
}
$('<img class="smiley_button" src="http://www.greensmilies.com/smile/smiley_emoticons_smile.gif">').appendTo(bbcodeBarId + ' .bb_button_wrapper');
$('<div class="smiley_box game">' +
'<div class="bbcode_box middle_center"><div class="bbcode_box middle_right"></div><div class="bbcode_box middle_left"></div>' +
'<div class="bbcode_box top_left"></div><div class="bbcode_box top_right"></div><div class="bbcode_box top_center"></div>' +
'<div class="bbcode_box bottom_center"></div><div class="bbcode_box bottom_right"></div><div class="bbcode_box bottom_left"></div>' +
'<div class="box_header">' +
'<span class="group standard active">' + getText("labels", "std") + '</span>' +
'<span class="group grepolis">' + getText("labels", "gre") + '</span>' +
'<span class="group nature">' + getText("labels", "nat") + '</span>' +
'<span class="group people">' + getText("labels", "ppl") + '</span>' +
'<span class="group ' + (SmileyBox.isHalloween ? 'halloween' : (SmileyBox.isXmas ? 'xmas' : 'other')) + '">' + getText("labels", (SmileyBox.isHalloween ? 'hal' : (SmileyBox.isXmas ? 'xma' : 'oth'))) + '</span>' +
'</div>' +
'<hr>' +
'<div class="box_content"></div>' +
'<hr>' +
'<div class="box_footer"><a href="http://www.greensmilies.com/smilie-album/" target="_blank">WWW.GREENSMILIES.COM</a></div>' +
'</div>').appendTo(bbcodeBarId + ' .bb_button_wrapper');
$(bbcodeBarId + ' .group').click(function () {
$('.group.active').removeClass("active");
$(this).addClass("active");
// Change smiley group
SmileyBox.addSmileys(this.className.split(" ")[1], "#" + $(this).closest('.bb_button_wrapper').parent().get(0).id);
});
SmileyBox.addSmileys("standard", bbcodeBarId);
// smiley box toggle
$(bbcodeBarId + " .smiley_button").toggleClick(
function () {
this.src = smileyArray.button[0].src;
$(this).closest('.bb_button_wrapper').find(".smiley_box").get(0).style.display = "block";
},
function () {
this.src = smileyArray.button[1].src;
$(this).closest('.bb_button_wrapper').find(".smiley_box").get(0).style.display = "none";
}
);
},
// insert smileys from arrays into smiley box
addSmileys: function (type, bbcodeBarId) {
// reset smilies
if ($(bbcodeBarId + " .box_content").get(0)) {
$(bbcodeBarId + " .box_content").get(0).innerHTML = '';
}
// add smilies
for (var e in smileyArray[type]) {
if (smileyArray[type].hasOwnProperty(e)) {
$(smileyArray[type][e]).clone().appendTo(bbcodeBarId + " .box_content");
//$('<img class="smiley" src="' + smileyArray[type][e].src + '" alt="" />').appendTo(bbcodeBarId + " .box_content");
}
}
$('.smiley').css({margin: '0px', padding: '2px', maxHeight: '35px', cursor: 'pointer'});
$(bbcodeBarId + " .box_content .smiley").click(function () {
var textarea;
if (uw.location.pathname === "/game/index") {
// hide smiley box
$(this).closest('.bb_button_wrapper').find(".smiley_button").click();
// find textarea
textarea = $(this).closest('.gpwindow_content').find("textarea").get(0);
} else {
if ($('.editor_textbox_container').get(0)) {
textarea = $('.editor_textbox_container .cke_contents textarea').get(0);
} else {
$(this).appendTo('iframe .forum');
}
}
var text = $(textarea).val();
$(textarea).val(text.substring(0, $(textarea).get(0).selectionStart) + "[img]" + this.src + "[/img]" + text.substring($(textarea).get(0).selectionEnd));
});
}
};
if ($(".editor_textbox_container").get(0)) {
SmileyBox.activate();
SmileyBox.changeForumEditorLayout();
SmileyBox.addForum();
}
/*******************************************************************************************************************************
* Biremes counter
* ----------------------------------------------------------------------------------------------------------------------------
* | ● Incremental update when calling a city (experimental, especially intended for siege worlds)
* ----------------------------------------------------------------------------------------------------------------------------
* @deprecated
* *****************************************************************************************************************************/
var BiremeCounter = {
activate: function () {
$(".picomap_container").prepend("<div id='available_bullseye_unit'><div id='bi_count'></div></div>");
$('.picomap_overlayer').tooltip(getText("options", "bir")[0]);
BiremeCounter.update();
// Style
$('<style id="dio_bireme_counter">' +
'#available_bullseye_unit { background: url(https://gpall.innogamescdn.com/images/game/units/units_sprite_90x90_compressed.jpg); height:90px;' +
'width:90px; position: relative; margin: 5px 28px 0px 28px; background-position: -270px 0px; } ' +
'#bi_count { color:#826021; position:relative; top:28px; font-style:italic; width:79px; } ' +
'#sea_id { background: none; font-size:25px; cursor:default; height:50px; width:50px; position:absolute; top:70px; left:157px; z-index: 30; } ' +
'</style>').appendTo('head');
// fs_count: color: #FFC374;position: relative;top: 30px;font-style: italic;width: 101px;text-shadow: 1px 1px 0px rgb(69, 0, 0);
// manti: background-position: -1350px 180px;
// manti-count: color: #ECD181;position: relative;top: 48px;font-style: italic;width: 52px;text-shadow: 2px 2px 0px rgb(0, 0, 0);
// medusa:-1440px 182px;
// med-count: color: #DEECA4;position: relative;top: 50px;font-style: italic;width: 55px;text-shadow: 2px 2px 0px rgb(0, 0, 0);
// Set Sea-ID beside the bull eye
$('#sea_id').prependTo('#ui_box');
},
deactivate: function () {
$('#available_bullseye_unit').remove();
$('#dio_bireme_counter').remove();
$('#sea_id').appendTo('.picomap_container');
},
save: function () {
saveValue(WID + "_biremes", JSON.stringify(biriArray));
},
update: function () {
var sum = 0, e;
if ($('#bi_count').get(0)) {
for (e in biriArray) {
if (biriArray.hasOwnProperty(e)) {
if (!uw.ITowns.getTown(e)) { // town is no longer in possession of user
delete biriArray[e];
BiremeCounter.save();
} else {
sum += parseInt(biriArray[e], 10);
}
}
}
sum = sum.toString();
var str = "", fsize = ['1.4em', '1.2em', '1.15em', '1.1em', '1.0em'], i;
for (i = 0; i < sum.length; i++) {
str += "<span style='font-size:" + fsize[i] + "'>" + sum[i] + "</span>";
}
$('#bi_count').get(0).innerHTML = "<b>" + str + "</b>";
}
},
get: function () {
var biremeIn = parseInt(uw.ITowns.getTown(uw.Game.townId).units().bireme, 10),
biremeOut = parseInt(uw.ITowns.getTown(uw.Game.townId).unitsOuter().bireme, 10);
if (isNaN(biremeIn)) biremeIn = 0;
if (isNaN(biremeOut)) biremeOut = 0;
if (!biriArray[uw.Game.townId] || biriArray[uw.Game.townId] < (biremeIn + biremeOut)) {
biriArray[uw.Game.townId] = biremeIn;
}
BiremeCounter.update();
BiremeCounter.save();
},
getDocks: function () {
var windowID = uw.BuildingWindowFactory.getWnd().getID(),
biremeTotal = parseInt($('#gpwnd_' + windowID + ' #unit_order_tab_bireme .unit_order_total').get(0).innerHTML, 10);
if (!isNaN(biremeTotal)) biriArray[uw.Game.townId] = biremeTotal;
BiremeCounter.update();
BiremeCounter.save();
},
getAgora: function () {
var biremeTotal = parseInt(uw.ITowns.getTown(parseInt(uw.Game.townId, 10)).units().bireme, 10);
if (isNaN(biremeTotal)) biremeTotal = 0;
$('#units_beyond_list .bireme').each(function () {
biremeTotal += parseInt(this.children[0].innerHTML, 10);
});
biriArray[uw.Game.townId] = biremeTotal;
BiremeCounter.update();
BiremeCounter.save();
}
};
/*******************************************************************************************************************************
* Favor Popup
* ----------------------------------------------------------------------------------------------------------------------------
* | ● Improved favor popup
* ----------------------------------------------------------------------------------------------------------------------------
*******************************************************************************************************************************/
var FavorPopup = {
godArray: {
zeus: '0px',
hera: '-152px',
poseidon: '-101px',
athena: '-50px',
hades: '-203px',
artemis: '-305px'
}, godImg: (new Image()).src = "https://diotools.de/images/game/gods.png",
activate: function () {
$('.gods_favor_button_area, #favor_circular_progress').bind('mouseover mouseout', function () {
return false;
});
$('.gods_area').bind('mouseover', function () {
FavorPopup.setFavorPopup();
});
},
deactivate: function () {
$('.gods_favor_button_area, #favor_circular_progress').unbind('mouseover mouseout');
$('.gods_area').unbind('mouseover');
},
setFavorPopup: function () {
var pic_row = "", fav_row = "", prod_row = "", tooltip_str;
for (var g in FavorPopup.godArray) {
if (FavorPopup.godArray.hasOwnProperty(g)) {
if (uw.ITowns.player_gods.attributes.temples_for_gods[g]) {
pic_row += '<td><div style="width:50px;height:51px;background:url(' + FavorPopup.godImg + ');background-position: 0px ' + FavorPopup.godArray[g] + ';"></td>';
fav_row += '<td class="bold" style="color:blue">' + uw.ITowns.player_gods.attributes[g + "_favor"] + '</td>';
prod_row += '<td class="bold">' + uw.ITowns.player_gods.attributes.production_overview[g].production + '</td>';
}
}
}
tooltip_str = $('<table><tr><td></td>' + pic_row + '</tr>' +
'<tr align="center"><td><img src="https://gpall.innogamescdn.com/images/game/res/favor.png"></td>' + fav_row + '</tr>' +
'<tr align="center"><td>+</td>' + prod_row + '</tr>' +
'</table>');
$('.gods_favor_button_area, #favor_circular_progress').tooltip(tooltip_str);
}
};
/*******************************************************************************************************************************
* GUI Optimization
* ----------------------------------------------------------------------------------------------------------------------------
* | ● Modified spell box (smaller, moveable & position memory)
* | ● Larger taskbar and minimize daily reward-window on startup
* | ● Modify chat
* | ● Improved display of troops and trade activity boxes (movable with position memory on startup)
* ----------------------------------------------------------------------------------------------------------------------------
*******************************************************************************************************************************/
var Spellbox = {
observe: function () {
$.Observer(uw.GameEvents.ui.layout_gods_spells.rendered).subscribe('DIO_SPELLBOX_CHANGE_OPEN', function () {
if (spellbox.show == false) {
spellbox.show = true;
saveValue("spellbox", JSON.stringify(spellbox));
}
Spellbox.change();
});
$.Observer(uw.GameEvents.ui.layout_gods_spells.state_changed).subscribe('DIO_SPELLBOX_CLOSE', function () {
spellbox.show = false;
saveValue("spellbox", JSON.stringify(spellbox));
});
// GRCRT Bug-Fix
if(typeof(RepConv) !== "undefined") {
$.Observer(uw.GameEvents.ui.layout_gods_spells.rendered).unsubscribe('GRCRT_GRC_ui_layout_gods_spells_rendered');
$.Observer(uw.GameEvents.ui.layout_gods_spells.rendered).subscribe('GRCRT_GRC_ui_layout_gods_spells_rendered', function () {
// PlayerGods doesn't exists at game start and the function would call an error
if (typeof(RepConv.models.PlayerGods) !== "undefined") {
RepConvTool.loadPower();
}
});
}
},
activate: function () {
Spellbox.observe();
Spellbox.change();
$('<style id="dio_spellbox_style" type="text/css">' +
// Don't hide hero box, unit time box and hero coin box from GRC
'#ui_box .nui_right_box { overflow: visible; } ' +
// Hide negative spells
'#ui_box .bolt, #ui_box .earthquake, #ui_box .pest { display: none } ' +
// Change spell order
'#ui_box .god_container { float: left } ' +
'#ui_box .god_container[data-god_id="zeus"], #ui_box .god_container[data-god_id="athena"] { float: none } ' +
// Remove background
'#ui_box .powers_container { background: none !important } ' +
// Hide god titles
'#ui_box .content .title { display: none !important } ' +
// Hide border elements
'#ui_box .gods_spells_menu .left, #ui_box .gods_spells_menu .right, #ui_box .gods_spells_menu .top, #ui_box .gods_spells_menu .bottom { display: none } ' +
// Layout
'#ui_box .gods_area { height:150px } ' +
'#ui_box .gods_spells_menu { width: 134px; position:absolute; z-index:5000; padding:30px 0px 0px -4px } ' +
'#ui_box .gods_spells_menu .content { background:url(https://gpall.innogamescdn.com/images/game/layout/power_tile.png) 1px 4px; overflow:auto; margin:0 0 0px 0px; border:3px inset rgb(16, 87, 19); border-radius:10px } ' +
'#ui_box .nui_units_box { display:block; margin-top:-8px; position:relative } ' +
'#ui_box .nui_units_box .bottom_ornament { margin-top:-28px; position: relative } ' +
'</style>').appendTo('head');
// Draggable Box
$("#ui_box .gods_spells_menu").draggable({
containment: "body",
distance: 10,
snap: "body, .gods_area, .nui_units_box, .ui_quickbar, .nui_main_menu, .minimized_windows_area, #island_quests_overview",
opacity: 0.7,
stop: function () {
spellbox.top = this.style.top;
spellbox.left = this.style.left;
saveValue("spellbox", JSON.stringify(spellbox));
}
});
$("#ui_box .gods_spells_menu").before($('#ui_box .nui_units_box'));
// Position
$('#ui_box .gods_spells_menu').css({
left: spellbox.left,
top: spellbox.top
});
// Active at game start?
if (spellbox.show && !$('#ui_box .btn_gods_spells').hasClass('active')) {
$('#ui_box .btn_gods_spells').click();
}
},
deactivate: function () {
$('#ui_box .gods_spells_menu').draggable('destroy');
// Position
$('#ui_box .gods_spells_menu').css({
left: "auto",
top: "150px"
});
//$("#ui_box .gods_spells_menu").appendTo('gods_area'); // ?
$('#dio_spellbox_style').remove();
$.Observer(GameEvents.ui.layout_gods_spells.rendered).unsubscribe('DIO_SPELLBOX_CHANGE_OPEN');
$.Observer(GameEvents.ui.layout_gods_spells.state_changed).unsubscribe('DIO_SPELLBOX_CLOSE');
},
change: function () {
//console.log("Unitsbox: "+ $(".nui_units_box").height());
//console.log("Spellbox: "+ $(".gods_spells_menu").height());
// Change spell order
$('#ui_box .god_container[data-god_id="poseidon"]').prependTo('#ui_box .gods_spells_menu .content');
$('#ui_box .god_container[data-god_id="athena"]').appendTo('#ui_box .gods_spells_menu .content');
$('#ui_box .god_container[data-god_id="artemis"]').appendTo('#ui_box .gods_spells_menu .content');
}
};
// Minimize Daily reward window on startup
function minimizeDailyReward() {
/*
$.Observer(uw.GameEvents.window.open).subscribe('DIO_WINDOW', function(u,dato){});
$.Observer(uw.GameEvents.window.reload).subscribe('DIO_WINDOW2', function(f){});
*/
if (MutationObserver) {
var startup = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
if (mutation.addedNodes[0]) {
if ($('.daily_login').get(0)) { // && !uw.GPWindowMgr.getOpenFirst(uw.Layout.wnd.TYPE_SHOW_ON_LOGIN).isMinimized()
$('.daily_login').find(".minimize").click();
//uw.GPWindowMgr.getOpenFirst(uw.Layout.wnd.TYPE_SHOW_ON_LOGIN).minimize();
}
}
});
});
startup.observe($('body').get(0), {attributes: false, childList: true, characterData: false});
setTimeout(function () {
startup.disconnect();
}, 3000);
}
}
// Larger taskbar
var Taskbar = {
activate: function () {
$('.minimized_windows_area').get(0).style.width = "150%";
$('.minimized_windows_area').get(0).style.left = "-25%";
},
deactivate: function () {
$('.minimized_windows_area').get(0).style.width = "100%";
$('.minimized_windows_area').get(0).style.left = "0%";
}
};
// Hide fade out buttons
function hideNavElements() {
if (Game.premium_features.curator <= Timestamp.now()) {
$('.nav').each(function () {
this.style.display = "none";
});
}
}
/*******************************************************************************************************************************
* Modify Chat
*******************************************************************************************************************************/
var Chat = {
interval: null,
activate: function () {
if (!$('#dio_flash').get(0)) {
$('<script id="dio_flash" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>').appendTo('head');
}
$('<style id="dio_chat">.nui_main_menu .chat { filter: "url(#Hue1)"; -webkit-filter: "hue-rotate(65deg)"; }</style>').appendTo('head');
Chat.updateChatUser();
Chat.interval = setInterval(function () {
Chat.updateChatUser();
}, 300000); // 5 minutes
$('.nui_main_menu .chat').mouseover(function () {
//Chat.popupChatUser();
});
// No alliance chat:
if ($('.nui_main_menu .chat').hasClass('disabled')) {
$('.nui_main_menu .chat').removeClass('disabled');
}
},
deactivate: function () {
$('#dio_chat').remove();
$('.nui_main_menu .chat .indicator').get(0).style.display = 'none';
clearInterval(Chat.interval);
if (GPWindowMgr.getOpenFirst(Layout.wnd.TYPE_CHAT)) {
GPWindowMgr.getOpenFirst(Layout.wnd.TYPE_CHAT).close();
}
},
updateChatUser: function () {
var market = uw.Game.market_id;
if (gm) {
// GM-BROWSER:
chatUserRequest();
} else {
// SAFARI:
$.ajax({
url: "https://diotools.de/game/chatuser_count.php?chan=Grepo" + (market === "de" ? "lisDE" : ""),
dataType: 'text',
success: function (text) {
$('.nui_main_menu .chat .indicator').get(0).innerHTML = text;
$('.nui_main_menu .chat .indicator').get(0).style.display = 'block';
},
error: function (xhr, ajaxOptions, thrownError) {
$('.nui_main_menu .chat .indicator').get(0).style.display = 'none';
}
});
}
},
popupChatUser: function () { // not used yet
setTimeout(function () {
GM_xmlhttpRequest({
method: "POST",
url: "http://wwwapi.iz-smart.net/modules.php?name=Chaninfo&file=nicks&chan=Grepolis" + uw.Game.market_id.toUpperCase(),
onload: function (response) {
//$('.nui_main_menu .chat .indicator').get(0).innerHTML =
//console.log(response.responseText);
//$('.nui_main_menu .chat .indicator').get(0).style.display = 'inline';
}
});
}, 0);
},
// Modify chat window
open: function () {
var host = {fr: 'irc.quakenet.org', def: 'flash.afterworkchat.de'},
market = uw.Game.market_id, select_nick = false, chatwnd_id,
nickname = uw.Game.player_name;
setTimeout(function () {
Chat.updateChatUser();
}, 30000); // 30 seconds
//uw.GPWindowMgr.Create(uw.Layout.wnd.TYPE_CHAT);
//uw.GPWindowMgr.getOpenFirst(uw.Layout.wnd.TYPE_CHAT).setWidth(600);
//uw.GPWindowMgr.getOpenFirst(uw.Layout.wnd.TYPE_CHAT).setHeight(300);
//uw.GPWindowMgr.getOpenFirst(uw.Layout.wnd.TYPE_CHAT).setPosition([0,'bottom']);
//console.log(uw.GPWindowMgr.getOpenFirst(uw.Layout.wnd.TYPE_CHAT));
chatwnd_id = '#gpwnd_' + uw.GPWindowMgr.getOpenFirst(uw.Layout.wnd.TYPE_CHAT).getID();
$('#chat').get(0).innerHTML = "";
//$(chatwnd_id).parent().children('.gpwindow_left').remove();
//$(chatwnd_id).parent().children('.gpwindow_right').remove();
//$(chatwnd_id).parent().children('.gpwindow_top').remove();
//$(chatwnd_id).parent().children('.gpwindow_bottom').remove();
//$(chatwnd_id).parent().parent().children('.ui-dialog-titlebar').remove();
var replaceArray = {
// Russian:
"Ё": "YO",
"Й": "I",
"Ц": "TS",
"У": "U",
"К": "K",
"Е": "E",
"Н": "N",
"Г": "G",
"Ш": "SH",
"Щ": "SCH",
"З": "Z",
"Х": "H",
"Ъ": "'",
"ё": "yo",
"й": "i",
"ц": "ts",
"у": "u",
"к": "k",
"е": "e",
"н": "n",
"г": "g",
"ш": "sh",
"щ": "sch",
"з": "z",
"х": "h",
"ъ": "'",
"Ф": "F",
"Ы": "I",
"В": "V",
"А": "a",
"П": "P",
"Р": "R",
"О": "O",
"Л": "L",
"Д": "D",
"Ж": "ZH",
"Э": "E",
"ф": "f",
"ы": "i",
"в": "v",
"а": "a",
"п": "p",
"р": "r",
"о": "o",
"л": "l",
"д": "d",
"ж": "zh",
"э": "e",
"Я": "Ya",
"Ч": "CH",
"С": "S",
"М": "M",
"И": "I",
"Т": "T",
"Ь": "'",
"Б": "B",
"Ю": "YU",
"я": "ya",
"ч": "ch",
"с": "s",
"м": "m",
"и": "i",
"т": "t",
"ь": "'",
"б": "b",
"ю": "yu",
// Greek:
'Α': 'A',
'Β': 'B',
'Γ': 'G',
'Δ': 'D',
'Ε': 'E',
'Ζ': 'Z',
'Η': 'H',
'Θ': 'Th',
'Ι': 'I',
'Κ': 'K',
'Λ': 'L',
'Μ': 'M',
'Ν': 'N',
'Ξ': 'J',
'Ο': 'O',
'Π': 'P',
'Ρ': 'R',
'Σ': 'S',
'Τ': 'T',
'Υ': 'U',
'Φ': 'F',
'Χ': 'Ch',
'Ψ': 'Ps',
'Ω': 'W',
'Ά': 'A',
'Έ': 'E',
'Ή': 'H',
'Ί': 'I',
'Ό': 'O',
'Ύ': 'U',
'Ώ': 'W',
'Ϊ': 'I',
'α': 'a',
'β': 'b',
'γ': 'g',
'δ': 'd',
'ε': 'e',
'ζ': 'z',
'η': 'h',
'θ': 'th',
'ι': 'i',
'κ': 'k',
'λ': 'l',
'μ': 'm',
'ν': 'n',
'ξ': 'j',
'ο': 'o',
'π': 'p',
'ρ': 'r',
'ς': 's',
'σ': 's',
'τ': 't',
'υ': 'u',
'φ': 'f',
'χ': 'ch',
'ψ': 'ps',
'ω': 'w',
'ά': 'a',
'έ': 'e',
'ή': 'h',
'ί': 'i',
'ό': 'o',
'ύ': 'u',
'ώ': 'w',
'ϊ': 'i',
'ΐ': 'i'
};
function replaceNick(word) {
var temp = "", temp2 = "";
// Step 1: Replace Special and some german chars
word = word.replace(/[.,:,+,*]/g, "").replace(/[=,\ ,\-]/g, "_").replace(/ö/gi, "oe").replace(/ä/gi, "ae").replace(/ü/gi, "ue").replace(/ß/g, "ss");
// Step 2: Replace russian and greek chars
if (!word.match(/^[a-zA-Z0-9_]+$/)) {
temp = word.split('').map(function (char) {
var ch = "";
ch = replaceArray[char] || char;
return ch;
}).join("");
// Step 3: Delete all other special chars
if (!temp.match(/^[a-zA-Z0-9_]+$/)) {
for (var c = 0; c < temp.length; c++) {
if (temp[c].match(/^[a-zA-Z0-9_]+$/)) {
temp2 += temp[c];
}
}
select_nick = true;
temp = temp2;
}
word = temp;
}
return word;
}
//nickname = "kνnmδενεί-ναισυνδεδ*εμένος_Ιππέας"; // test nickname
nickname = replaceNick(nickname);
if (PID == 84367) {
nickname = "DionY_";
}
$('<iframe src="http://flash.afterworkchat.de/1.0/FlashChat.swf' + //http://grepodio.heliohost.org/lightIRC/index.php'+
'?host=flash.afterworkchat.de' +
'&languagePath=http://flash.afterworkchat.de/1.0/language/' +
'&port=6667' +
'&policyPort=9000' +
'&styleURL=https://diotools.de/css/green2.css' + //http://grepodio.heliohost.org/style.css'+ //
'&emoticonPath=https://diotools.de/chat/emoticons/' + //http://www.greensmilies.com/smile/smiley_emoticons_'+
'&emoticonList=' +
':)->smile.png,:(->sad.png,:O->baby.swf,:D->biggrin.png,~D->coffee.swf,:P->tongue.swf,8)->cool.png,:|->neutral.png,X)->drunk.swf,%5e%5e->grins.png,:{->cry.swf,:S->verlegen.png,' +
':$->blush.swf,:]->lol.swf,:*->bussi.swf,:[->fluch.swf' +
//'&accessKey=54a2846a460ae1703ac690d21551b997'+
'&nick=' + nickname +
'&nickAlternate=' + nickname + '_' +
'&autojoin=%23GREPO,%23Grepolis' + market.toUpperCase() +
'&showNickSelection=' + select_nick +
'&showNavigation=true' +
'&navigationPosition=top' +
'&showNickSelection=false' +
'&showIdentifySelection=false' +
'&language=' + LID +
'&quitMessage=CYA' +
'&showChannelHeader=false' +
//'&useUserListIcons=true'+
'&userListWidth=100' +
'&soundAlerts=true' +
'&soundOnNewChannelMessage=false' +
'&showServerWindow=false' +
'&fontSize=9' +
'&showJoinPartMessages=false' +
'&showMenuButton=false' +
'&showTranslationButton=false' +
'&showTimestamps=true' +
//'&showInfoMessages=false'+
'&showRegisterNicknameButton=false' +
'&showRichTextControls=false' +
//'&useUserListIcons=true'+
'&showUserListInformationPopup=false' +
'&showNickChangeButton=false' +
'&showChannelCentral=false' +
'&showOptionsButton=false' +
'&showEmoticonsButton=true' +
'&rememberNickname=false' +
'" style="width:518px; height:357px; border:0px;"></iframe>').appendTo("#chat");
/*
$('<html><body><div id="lightIRC"><p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p></div>'+
'<script type="text/javascript">'+
'var params = {};'+
'params.languagePath = "http://flash.afterworkchat.de/1.0/language/";'+
'params.host = "flash.afterworkchat.de";'+
'params.port = 6667;'+
'params.policyPort = 9000;'+
//'params.accessKey = "54a2846a460ae1703ac690d21551b997";'+
'params.styleURL = "http://diotools.de/css/green2.css";'+
'params.emoticonPath = "http://diotools.de/chat/emoticons/";'+
'params.emoticonList = ":)->smile.png,:(->sad.png,:O->baby.swf,:D->biggrin.png,~D->coffee.swf,:P->tongue.swf,8)->cool.png,:|->neutral.png,X)->drunk.swf,%5e%5e->grins.png,:{->cry.swf,:S->verlegen.png,'+
':$->blush.swf,:]->lol.swf,:*->bussi.swf,:[->fluch.swf";'+
'params.nick = "'+ nickname + '";' +
'params.autojoin = "%23GREPO,%23Grepolis'+ market.toUpperCase() + '";' +
'params.showNickSelection = ' + select_nick + ';'+
'params.showIdentifySelection = false;'+
'params.language = "'+ LID +'";'+
'params.soundAlerts = true;'+
'params.fontSize = "10";'+
'params.navigationPosition = "top";'+
'params.showJoinPartMessages = false;'+
'params.showTimestamps = true;'+
'params.showRegisterNicknameButton = false;'+
'params.showNickChangeButton = true;'+
'params.showOptionsButton = true;'+
'params.showServerWindow = false;'+
'params.showOptionsButton = false;'+
'params.showMenuButton = false;'+
'params.showTranslationButton = false;'+
'params.showRichTextControls = false;'+
'params.showChannelHeader = false;'+
'params.rememberNickname = false;'+
'params.userListWidth = 100;' +
'params.soundAlerts = true;'+
'params.soundOnNewChannelMessage = false;'+
'swfobject.embedSWF("http://flash.afterworkchat.de/1.0/FlashChat.swf", "lightIRC", "100%", "100%", "10.0.0", "http://flash.afterworkchat.de/expressinstall.swf", params, {wmode:"transparent"});'+
'</script></body></html>').appendTo("#chat");
*/
}
};
/*******************************************************************************************************************************
* Activity boxes
* ----------------------------------------------------------------------------------------------------------------------------
* | ● Show troops and trade activity boxes
* | ● Boxes are magnetic & movable (position memory)
* ----------------------------------------------------------------------------------------------------------------------------
*******************************************************************************************************************************/
var mut_toolbar, mut_command, mut_trade;
var save_command_mouseout,
save_commandlist_mouseout,
save_trade_mouseout,
save_tradelist_mouseout,
save_command_mouseover,
save_trade_mouseover;
var ActivityBoxes = {
activate: function () {
ActivityBoxes.checkToolbarAtStart();
$('#toolbar_activity_commands_list').css({
left: commandbox.left + "px",
top: commandbox.top + "px"
});
$('<style id="fix_lists" type="text/css">' +
'#toolbar_activity_commands_list, #toolbar_activity_trades_list { width: 160px}' +
'.dropdown-list .content { max-height: 329px}' +
'</style>' +
'<style id="dio_fix_trade" type="text/css">' +
'#toolbar_activity_trades_list {' +
'left:' + tradebox.left + 'px !important;' +
'top: ' + tradebox.top + 'px !important}' +
'</style>').appendTo('head');
ActivityBoxes.draggableTradeBox();
ActivityBoxes.draggableCommandBox();
ActivityBoxes.catchToolbarEvents();
},
deactivate: function () {
ActivityBoxes.hideTradeList();
ActivityBoxes.hideCommandList();
mut_toolbar.disconnect();
mut_command.disconnect();
mut_trade.disconnect();
},
showTradeList: function () {
if (!$('#dio_trades_activity_style').get(0)) {
$('#toolbar_activity_trades').mouseover();
$('<style id="dio_trades_activity_style"> #toolbar_activity_trades_list { display: block !important; } </style>').appendTo("head");
}
},
showCommandList: function () {
if (!$('#dio_commands_activity_style').get(0)) {
$('#toolbar_activity_commands').mouseover();
$('<style id="dio_commands_activity_style"> #toolbar_activity_commands_list { ' +
'display:block !important; left:' + commandbox.left + 'px; top:' + commandbox.top + 'px; }' +
'</style>').appendTo("head");
}
},
hideTradeList: function () {
if ($('#dio_trades_activity_style').get(0)) {
$('#dio_trades_activity_style').remove();
$('#toolbar_activity_trades').mouseout();
}
},
hideCommandList: function () {
if ($('#dio_commands_activity_style').get(0)) {
$('#dio_commands_activity_style').remove();
$('#toolbar_activity_commands').mouseout();
}
},
activate2: function () {
var observe_options = {attributes: false, childList: true, characterData: false};
ActivityBoxes.catchToolbarEvents();
mut_command.observe($('.toolbar_activities .commands .count').get(0), observe_options);
mut_trade.observe($('.toolbar_activities .trades .count').get(0), observe_options);
$('<style id="dio_activity_style"> ' +
'#toolbar_activity_commands_list.active { display: block !important; } ' +
'#toolbar_activity_trades_list.active { display: block !important; } ' +
'</style>').appendTo("head");
$('#toolbar_activity_commands').mouseover();
$('#toolbar_activity_trades').mouseover();
$('#toolbar_activity_commands, #toolbar_activity_trades').off("mouseover");
$('#toolbar_activity_commands, #toolbar_activity_commands_list, #toolbar_activity_trades, #toolbar_activity_trades_list').off("mouseout");
$('#toolbar_activity_trades_list').unbind("click");
//console.log($('#toolbar_activity_commands').data('events')["dd:list:show"][0].handler());
ActivityBoxes.checkToolbarAtStart();
$('#toolbar_activity_commands_list').css({
left: commandbox.left + "px",
top: commandbox.top + "px"
});
$('<style id="fix_lists" type="text/css">' +
'#toolbar_activity_commands_list, #toolbar_activity_trades_list { width: 160px}' +
'.dropdown-list .content { max-height: 329px}' +
'</style>' +
'<style id="dio_fix_trade" type="text/css">' +
'#toolbar_activity_trades_list {' +
'left:' + tradebox.left + 'px !important;' +
'top: ' + tradebox.top + 'px !important}' +
'</style>').appendTo('head');
ActivityBoxes.draggableCommandBox();
ActivityBoxes.draggableTradeBox();
/*
$('.toolbar_activities .commands').on("mouseover.bla", function(){
$('#toolbar_activity_commands_list').addClass("active");
});
$('.toolbar_activities .trades').mouseover(function(){
$('#toolbar_activity_trades_list').addClass("active");
});
*/
},
deactivate2: function () {
mut_toolbar.disconnect();
mut_command.disconnect();
mut_trade.disconnect();
/*
$('#toolbar_activity_commands').on("mouseover", save_command_mouseover);
$('#toolbar_activity_trades').on("mouseover", save_trade_mouseover);
$('#toolbar_activity_commands').on("mouseout", save_command_mouseout);
$('#toolbar_activity_commands_list').on("mouseout", save_commandlist_mouseout);
$('#toolbar_activity_trades').on("mouseout", save_trade_mouseout);
$('#toolbar_activity_trades_list').on("mouseout", save_tradelist_mouseout);
*/
$('#toolbar_activity_commands').mouseover = save_command_mouseover;
$('#toolbar_activity_trades').mouseover = save_trade_mouseover;
$('#toolbar_activity_commands').mouseout = save_command_mouseout;
$('#toolbar_activity_commands_list').mouseout = save_commandlist_mouseout;
$('#toolbar_activity_trades').mouseout = save_trade_mouseout;
$('#toolbar_activity_trades_list').mouseout = save_tradelist_mouseout;
$('#toolbar_activity_trades_list').removeClass("active");
$('#toolbar_activity_commands_list').removeClass("active");
/*
$('.toolbar_activities .commands').off("mouseover.bla");
*/
$('#dio_activity_style').remove();
},
checkToolbarAtStart: function () {
if (parseInt($('.toolbar_activities .commands .count').get(0).innerHTML, 10) > 0) {
ActivityBoxes.showCommandList();
} else {
ActivityBoxes.hideCommandList();
}
if (parseInt($('.toolbar_activities .trades .count').get(0).innerHTML, 10) > 0) {
ActivityBoxes.showTradeList();
} else {
ActivityBoxes.hideTradeList();
}
},
catchToolbarEvents: function () {
var observe_options = {attributes: false, childList: true, characterData: false};
mut_toolbar = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
if (mutation.addedNodes[0]) {
console.debug(mutation.target.id);
if (mutation.target.id === "toolbar_activity_trades_list") {
ActivityBoxes.draggableTradeBox();
} else {
ActivityBoxes.draggableCommandBox();
}
mutation.addedNodes[0].remove();
}
});
});
//mut_toolbar.observe($('#toolbar_activity_commands_list').get(0), observe_options );
//mut_toolbar.observe($('#toolbar_activity_trades_list').get(0), observe_options );
mut_command = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
if (mutation.addedNodes[0]) {
console.debug(mutation.addedNodes[0].nodeValue);
if (mutation.addedNodes[0].nodeValue > 0) {
ActivityBoxes.showCommandList();
} else {
console.debug("hiiiiiiiide commands");
ActivityBoxes.hideCommandList();
}
}
});
});
mut_trade = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
if (mutation.addedNodes[0]) {
if (mutation.addedNodes[0].nodeValue > 0) {
ActivityBoxes.showTradeList();
} else {
ActivityBoxes.hideTradeList();
}
}
});
});
mut_command.observe($('.toolbar_activities .commands .count').get(0), observe_options);
mut_trade.observe($('.toolbar_activities .trades .count').get(0), observe_options);
},
// Moveable boxes
draggableTradeBox: function () {
$("#toolbar_activity_trades_list").draggable({
containment: "body",
distance: 20,
snap: "body, .gods_area, .nui_units_box, .ui_quickbar, .nui_main_menu, .minimized_windows_area, .nui_left_box",
opacity: 0.7,
start: function () {
$("#dio_fix_trade").remove();
},
stop: function () {
var pos = $('#toolbar_activity_trades_list').position();
tradebox.left = pos.left;
tradebox.top = pos.top;
saveValue("tradebox", JSON.stringify(tradebox));
$('<style id="dio_fix_trade" type="text/css">' +
'#toolbar_activity_trades_list { left:' + tradebox.left + 'px !important; top:' + tradebox.top + 'px !important; } ' +
'</style>').appendTo('head');
}
});
},
draggableCommandBox: function () {
$("#toolbar_activity_commands_list").draggable({
containment: "body",
distance: 20,
snap: "body, .gods_area, .nui_units_box, .ui_quickbar, .nui_main_menu, .minimized_windows_area, .nui_left_box",
opacity: 0.7,
stop: function () {
var pos = $('#toolbar_activity_commands_list').position();
commandbox.left = pos.left;
commandbox.top = pos.top;
saveValue("commandbox", JSON.stringify(commandbox));
}
});
}
};
/*******************************************************************************************************************************
* Counter
*******************************************************************************************************************************/
function counter(time) {
var type = "", today, counted, year, month, day;
if (uw.Game.market_id !== "zz") {
counted = DATA.count;
today = new Date((time + 7200) * 1000);
year = today.getUTCFullYear();
month = ((today.getUTCMonth() + 1) < 10 ? "0" : "") + (today.getUTCMonth() + 1);
day = (today.getUTCDate() < 10 ? "0" : "") + today.getUTCDate();
today = year + month + day;
//console.log(today);
if (counted[0] !== today) {
type += "d";
}
if (counted[1] == false) {
type += "t";
}
if ((counted[2] == undefined) || (counted[2] == false)) {
type += "b";
}
if (type !== "") {
$.ajax({
type: "GET",
url: "https://diotools.de/game/count.php?type=" + type + "&market=" + uw.Game.market_id + "&date=" + today + "&browser=" + getBrowser(),
dataType: 'text',
success: function (text) {
if (text.indexOf("dly") > -1) {
counted[0] = today;
}
if (text.indexOf("tot") > -1) {
counted[1] = true;
}
if (text.indexOf("bro") > -1) {
counted[2] = true;
}
saveValue("dio_count", JSON.stringify(counted));
}
});
}
}
}
/*******************************************************************************************************************************
* Political Map
*******************************************************************************************************************************/
var PoliticalMap = {
data: null,
activate: function () {
$('<div id="dio_political_map">' +
'<div class="canvas_wrapper"></div>' +
'<select class="zoom_select">' +
'<option value="0.50">1 : 0.50</option>' +
'<option value="0.75">1 : 0.75</option>' +
'<option value="1.00" selected>1 : 1.00</option>' +
'<option value="1.25">1 : 1.25</option>' +
'<option value="1.50">1 : 1.50</option>' +
'<option value="2.00">1 : 2.00</option>' +
'<option value="3.00">1 : 3.00</option>' +
'</select>' +
'<div class="legend sandy-box">' +
'<div class="corner_tl"></div>' +
'<div class="corner_tr"></div>' +
'<div class="corner_bl"></div>' +
'<div class="corner_br"></div>' +
'<div class="border_t"></div>' +
'<div class="border_b"></div>' +
'<div class="border_l"></div>' +
'<div class="border_r"></div>' +
'<div class="middle"></div>' +
'<div class="content"><div class="item"></div></div>' +
'</div></div>').appendTo('#ui_box');
// Style
$('<style id="dio_political_map_style">' +
'#dio_political_map { width:100%; height:100%; z-index:3; background:#123d70; display:none; position:absolute; top:0; } ' +
'#dio_political_map.active { display: block; } ' +
'#dio_political_map .canvas_wrapper { } ' +
'#dio_political_map canvas { position: absolute; cursor:move; top:0; left:0; } ' +
'#dio_political_map .zoom_select { position:absolute; top:70px; left:300px; font-size: 2em; opacity:0.5; } ' +
'#dio_political_map .zoom_select:hover { opacity:1; } ' +
'#dio_political_map .legend { position:absolute; right:200px; top:50px; width:200px; height:auto; text-align:left; } ' +
'#dio_political_map .legend .color_checker { width:15px; height:15px; float:left; border:1px solid rgb(100, 100, 0); margin:5px; position:relative; cursor:pointer; } ' +
'#dio_political_map .legend .wonder_icon { float: left; margin: 4px; } ' +
'.btn_political_map { top:56px; left:-4px; z-index:10; position:absolute; } ' +
'.btn_political_map .ico_political_map { margin:7px 0px 0px 8px; width:17px; height:17px; background:url(http://s1.directupload.net/images/140408/pltgqlaw.png) no-repeat 0px 0px; background-size:100%; } ' +
// http://s14.directupload.net/images/140408/k4wikrlq.png // http://s7.directupload.net/images/140408/ahfr8227.png
'.btn_political_map .ico_political_map.checked { margin-top:8px; } ' +
'</style>').appendTo('head');
PoliticalMap.addButton();
var zoomSelect = $('.zoom_select');
zoomSelect.change(function () {
//PoliticalMap.zoomToCenter();
});
zoomSelect.on("change", function () {
PoliticalMap.zoomToCenter();
});
ColorPicker.init();
},
deactivate: function () {
$('.btn_political_map').remove();
$('#dio_political_map_style').remove();
},
addButton: function () {
var m_ZoomFactor = 1.0;
$('<div class="btn_political_map circle_button" name="political_map"><div class="ico_political_map js-caption"></div></div>').appendTo(".bull_eye_buttons");
var politicalMapButton = $('.btn_political_map');
// Tooltip
politicalMapButton.tooltip("Political Map"); // TODO: Language
// Events
politicalMapButton.on('mousedown', function () {
//$('.btn_political_map, .ico_political_map').addClass("checked");
}).on('mouseup', function () {
//$('.btn_political_map, .ico_political_map').removeClass("checked");
});
$('.rb_map .option').click(function () {
$('.btn_political_map, .ico_political_map').removeClass("checked");
$('#dio_political_map').removeClass("active");
$(this).addClass("checked");
});
politicalMapButton.click(function () {
$('.rb_map .checked').removeClass("checked");
$('.btn_political_map, .ico_political_map').addClass("checked");
$('#dio_political_map').addClass("active");
if ($('#dio_political_map').hasClass("active")) {
if (PoliticalMap.data == null) {
$('#ajax_loader').css({visibility: "visible"});
// Map-Daten aus DB auslesen
PoliticalMap.loadMapData();
} else {
//PoliticalMap.drawMap(PoliticalMap.data);
}
}
});
},
/**
* Läd die Allianzen und Inseln aus der Datenbank
* @since 3.0
*/
loadMapData: function () {
$.ajax({
type: "GET",
url: "https://diotools.de/php/map.php?world_id=" + WID + "&callback=jsonCallback",
//dataType: 'jsonp',
//async: false,
//jsonpCallback: 'jsonCallback',
//contentType: "application/json",
success: function (response) {
if (response !== "") {
PoliticalMap.data = response;
var m_ZoomFactor = $('.zoom_select').get(0)[$('.zoom_select').get(0).selectedIndex].selected;
PoliticalMap.drawMap(PoliticalMap.data, m_ZoomFactor);
PoliticalMap.drawWonders(PoliticalMap.data, m_ZoomFactor);
$('#ajax_loader').css({visibility: "hidden"});
// Überprüfen, ob die Weltdaten geupdatet werden müssen
$.ajax({
type: "GET",
url: "https://diotools.de/php/update_db.php?world_id=" + WID
});
} else {
// Welt existiert noch nicht in DB
$.ajax({
type: "GET", url: "https://diotools.de/php/update_db.php?world_id=" + WID,
success: function () {
// Map-Daten aus DB auslesen, wenn die Weltdaten erfolgreich in die DB geladen wurden
$.ajax({
type: "GET",
url: "https://diotools.de/php/map.php?world_id=" + WID,
success: function (response) {
PoliticalMap.data = response;
var m_ZoomFactor = $('.zoom_select').get(0)[$('.zoom_select').get(0).selectedIndex].selected;
PoliticalMap.drawMap(PoliticalMap.data, m_ZoomFactor);
PoliticalMap.drawWonders(PoliticalMap.data, m_ZoomFactor);
$('#ajax_loader').css({visibility: "hidden"});
}
});
}
});
}
}
});
},
/**
* Ändert die Zoomstufe der Karte zum Zentrum hin
*
* @param _zoom
* @since 3.0
*/
zoomToCenter: function () {
var _zoom = $('.zoom_select').get(0)[$('.zoom_select').get(0).selectedIndex].value;
var canvas = $('#dio_political_map canvas'),
canvas_size = parseInt($('#dio_political_map canvas').width(), 10); // Breite und Höhe sind immer gleich
var canvas_style = $('#dio_political_map .canvas_wrapper').get(0).style;
// Berechnung: Alter Abstand + (1000 * Zoomänderung / 2)
canvas_style.top = parseInt(canvas_style.top, 10) + (1000 * (canvas_size / 1000 - _zoom)) / 2 + "px";
canvas_style.left = parseInt(canvas_style.left, 10) + (1000 * (canvas_size / 1000 - _zoom)) / 2 + "px";
PoliticalMap.clearMap();
PoliticalMap.drawMap(PoliticalMap.data, _zoom);
PoliticalMap.drawWonders(PoliticalMap.data, _zoom);
},
/**
* Ändert die Zoomstufe der Karte zur Cursorposition hin
*
* @param _zoom
* @param _pos
*
* @since 3.0
*/
zoomToCursorPosition: function (_zoom, _pos) {
},
/**
* Zeichnet die Karte in ein Canvas
*
* @param _islandArray {Array}
* @param _zoom {int}
*
* @since 3.0
*/
drawMap: function (_islandArray, _zoom) {
$('<canvas class="canv_map" height="' + (1000 * _zoom) + 'px" width="' + (1000 * _zoom) + "px\"></canvas>").prependTo('.canvas_wrapper')
// TODO: Weite und Höhe vom Fenster ermitteln, Update Containment bei onResizeWindow
$('#dio_political_map .canvas_wrapper').draggable({
// left, top, right, bottom
//containment: [-500 * _zoom, -300 * _zoom, 500 * _zoom, 300 * _zoom],
distance: 10,
grid: [100 * _zoom, 100 * _zoom],
//limit: 500,
cursor: 'pointer'
});
var ally_ranking = JSON.parse(_islandArray)['ally_ranking'];
var island_array = JSON.parse(_islandArray)['ally_island_array'];
var c = $('#dio_political_map .canv_map')[0].getContext('2d');
// Grid
c.strokeStyle = 'rgb(0,100,0)';
for (var l = 0; l <= 10; l++) {
// Horizontal Line
c.moveTo(0, l * 100 * _zoom);
c.lineTo(1000 * _zoom, l * 100 * _zoom);
c.stroke();
// Vertical Line
c.moveTo(l * 100 * _zoom, 0);
c.lineTo(l * 100 * _zoom, 1000 * _zoom);
c.stroke();
}
// Center Circle
c.beginPath();
c.arc(500 * _zoom, 500 * _zoom, 100 * _zoom, 0, Math.PI * 2, true);
c.fillStyle = 'rgba(0,100,0,0.2)';
c.fill();
c.stroke();
// Sea numbers
c.fillStyle = 'rgb(0,100,0)';
for (var y = 0; y <= 10; y++) {
for (var x = 0; x <= 10; x++) {
c.fillText(y + "" + x, y * 100 * _zoom + 2, x * 100 * _zoom + 10);
}
}
// Alliance Colors
var colorArray = ["#00A000", "yellow", "red", "rgb(255, 116, 0)", "cyan", "#784D00", "white", "purple", "#0078FF", "deeppink", "darkslategrey"];
// Islands
for (var t in island_array) {
if (island_array.hasOwnProperty(t)) {
var tmp_points = 0, dom_ally = "";
for (var ally in island_array[t]) {
if (island_array[t].hasOwnProperty(ally)) {
if (tmp_points < island_array[t][ally] && (ally !== "X") && (ally !== "")) {
tmp_points = island_array[t][ally];
dom_ally = ally;
}
}
}
c.fillStyle = colorArray[parseInt(ally_ranking[dom_ally], 10) - 1] || "darkslategrey";
//c.fillRect(t.split("x")[0] * _zoom, t.split("x")[1] * _zoom, 3 * _zoom, 3 * _zoom);
//c.beginPath();
//console.info(island_array[t]);
//c.arc(t.split("x")[0], t.split("x")[1], 2, 0, Math.PI * 2, true);
//c.fillRect(t.split("x")[0] * _zoom,t.split("x")[1] * _zoom, 3 * _zoom, 3 * _zoom);
//c.fill();
// TEST HEATMAP
console.debug("Blaaa", c.fillStyle);
if (c.fillStyle !== "#2f4f4f") {
var color = c.fillStyle;
console.debug("Hallo");
var radgrad = c.createRadialGradient(t.split("x")[0] * _zoom + 1, t.split("x")[1] * _zoom + 1, 0, t.split("x")[0] * _zoom + 1, t.split("x")[1] * _zoom + 1, 10);
radgrad.addColorStop(0, PoliticalMap.convertHexToRgba(color, 0.2));
radgrad.addColorStop(0.6, PoliticalMap.convertHexToRgba(color, 0.2));
radgrad.addColorStop(1, PoliticalMap.convertHexToRgba(color, 0.0));
// draw shape
c.fillStyle = radgrad;
c.fillRect(t.split("x")[0] * _zoom - 10, t.split("x")[1] * _zoom - 10, 22, 22);
c.fillStyle = PoliticalMap.convertHexToRgba(color, 0.7);
c.fillRect(t.split("x")[0] * _zoom, t.split("x")[1] * _zoom, 3 * _zoom, 3 * _zoom);
}
else {
c.fillRect(t.split("x")[0] * _zoom, t.split("x")[1] * _zoom, 3 * _zoom, 3 * _zoom);
}
}
}
// Legende
var legend = $('#dio_political_map .legend .content');
legend.get(0).innerHTML = "";
for (var ally in ally_ranking) {
if (ally_ranking.hasOwnProperty(ally)) {
//legend.append("<div class='item' style='color:"+ colorAllyArray[ally] +"'><div class='color_checker' style='background-color:"+ colorAllyArray[ally] +"'></div>...</div>");
if (ally_ranking[ally] > 10) {
legend.append("<div class='item' style='color:" + colorArray[ally_ranking[ally] - 1] + "'><div class='color_checker' style='background-color:" + colorArray[ally_ranking[ally] - 1] + "'></div>...</div>");
break;
} else {
legend.append("<div class='item' style='color:" + colorArray[ally_ranking[ally] - 1] + "'><div class='color_checker' style='background-color:" + colorArray[ally_ranking[ally] - 1] + "'></div>" + ally + "</div>");
}
}
}
$('#dio_political_map .legend .color_checker').click(function (event) {
// getting user coordinates
var x = event.pageX - this.offsetLeft;
var y = event.pageY - this.offsetTop;
console.debug("HALLO 0", event.pageX, this.offsetLeft);
ColorPicker.open(x,y);
});
// TODO: Wenn eine Farbe ausgewählt wurde, soll [...]
$(ColorPicker).on("onColorChanged", function(event, color){
console.debug("Farbe setzen", event, color);
$.ajax({
type: "POST",
url: "https://" + Game.world_id + ".grepolis.com/game/alliance?town_id=" + Game.townId + "&action=assign_map_color&h=" + Game.csrfToken,
data: {
"json": "{\"alliance_id\":\"217\",\"color\":"+ color +",\"player_id\":\"8512878\",\"town_id\":\"71047\",\"nl_init\":true}"
},
success: function (response) {
console.debug("Erfolgreich übertragen", response);
}
});
});
},
convertHexToRgba: function (hex, opacity) {
console.debug("hex", hex);
hex = hex.replace('#', '');
r = parseInt(hex.substring(0, 2), 16);
g = parseInt(hex.substring(2, 4), 16);
b = parseInt(hex.substring(4, 6), 16);
result = 'rgba(' + r + ',' + g + ',' + b + ',' + opacity + ')';
return result;
},
/**
* Zeichnet die Weltwunder auf der Karte
*
* @param _islandArray {Array}
* @param _zoom {int}
*
* @since 3.0
*/
drawWonders: function (_islandArray, _zoom) {
$('<canvas class="canv_ww" height="' + (1000 * _zoom) + 'px" width="' + (1000 * _zoom) + 'px"></canvas>').appendTo('.canvas_wrapper')
var c = $('#dio_political_map .canv_ww')[0].getContext('2d');
c.strokeStyle = 'rgb(0,100,0)';
// World Wonders
var wonders = {}, wonderImages = {};
//console.debug(JSON.stringify(wonder.map));
for (var wonderType in wonder.map) {
if (wonder.map.hasOwnProperty(wonderType)) {
var tmp = 0;
for (var wonderCoords in wonder.map[wonderType]) {
if (parseInt(wonder.map[wonderType][wonderCoords], 10) > tmp) {
wonders[wonderType] = wonderCoords;
tmp = parseInt(wonder.map[wonderType][wonderCoords], 10)
}
}
}
}
// Legende
var legend = $('#dio_political_map .legend .content');
legend.append("<div class=\"item no_results\"></div>");
for (var w in wonders) {
if (wonders.hasOwnProperty(w)) {
var _w = w;
wonderImages[_w] = new Image();
wonderImages[_w].onload = function () {
c.drawImage(this, this.pos.split("_")[0] * _zoom - 9, this.pos.split("_")[1] * _zoom - 9);
};
wonderImages[_w].pos = wonders[_w];
wonderImages[_w].src = "https://diotools.de/images/icons/ww/" + _w + ".png";
var wonder_string = _w.split("_of")[0].split("_");
wonder_string = wonder_string[wonder_string.length - 1];
wonder_string = wonder_string.substring(0, 1).toUpperCase() + wonder_string.substring(1);
legend.append("<img class='wonder_icon' src='" + wonderImages[_w].src + "'><div class='item'>" + wonder_string + "</div>");
}
}
},
clearMap: function () {
$('#dio_political_map .canv_map').remove();
$('#dio_political_map .canv_ww').remove();
},
getAllianceColors: function () {
$.ajax({
type: "GET",
url: "https://" + Game.world_id + ".grepolis.com/game/map_data?town_id=" + Game.townId + "&action=get_custom_colors&h=" + Game.csrfToken,
dataType: 'json',
success: function (response) {
// Allianzbox herausfiltern
var html_string = $('#alliance_box', $(response.json.list_html));
var flagArray = $('.flag', html_string);
var linkArray = $('a', html_string);
var allianceColorArray = [];
for (var i = 0; i < flagArray.length; i++) {
allianceColorArray[i] = {
"id": parseInt(linkArray[i].attributes.onclick.value.split(",")[1].split(")")[0], 10),
"color": flagArray[i].style.backgroundColor
};
}
console.debug("ANTWORT", allianceColorArray);
}
});
}
};
var ColorPicker = {
open: function(pos_left, pos_top){
$('#dio_color_picker').removeClass("hidden");
$('#dio_color_picker').css({
left: pos_left,
top: pos_top
});
},
close: function(){
$('#dio_color_picker').addClass("hidden");
},
init: function () {
// Style
$('<style id="dio_color_picker_style">' +
'#dio_color_picker { left:200px;top:300px;position:absolute;z-index:1000;} ' +
'#dio_color_picker.hidden { display:none;} ' +
'#dio_color_picker span.grepo_input, ' +
'#dio_color_picker a.color_table, ' +
'#dio_color_picker a.confirm, ' +
'#dio_color_picker a.cancel' +
' { float:left; } ' +
'</style>').appendTo('head');
$(
'<canvas width="600" height="440" style="left:200px !important;top:100px !important;" id="canvas_picker" onclick="console.debug(this.getContext(\'2d\').getImageData(10, 10, 1, 1).data)"></canvas>' +
'<div id="hex">HEX: <input type="text"></input></div>' +
'<div id="rgb">RGB: <input type="text"></input></div>'
).prependTo('#dio_political_map')
$(
'<div id="dio_color_picker" class="hidden"><table class="bb_popup" cellpadding="0" cellspacing="0"><tbody>' +
'<tr class="bb_popup_top">' +
'<td class="bb_popup_top_left"></td>' +
'<td class="bb_popup_top_middle"></td>' +
'<td class="bb_popup_top_right"></td>' +
'</tr>' +
'<tr>' +
'<td class="bb_popup_middle_left"></td>' +
'<td class="bb_popup_middle_middle">' +
'<div class="bb_color_picker_colors">' +
'<div style="background-color: rgb(255, 0, 0);"></div>' +
'<div style="background-color: rgb(0, 255, 0);"></div>' +
'<div style="background-color: rgb(0, 0, 255);"></div>' +
'</div>' +
'<a href="#" class="cancel"></a>' +
'<span class="grepo_input">' +
'<span class="left">' +
'<span class="right">' +
'<input class="color_string" style="width:50px;" maxlength="6" type="text">' +
'</span>' +
'</span>' +
'</span>' +
'<a href="#" class="color_table"><input type="color" id="c" tabindex=-1 class="hidden"></a>' +
'<a href="#" class="confirm"></a>' +
'</td>' +
'<td class="bb_popup_middle_right"></td>' +
'</tr>' +
'<tr class="bb_popup_bottom">' +
'<td class="bb_popup_bottom_left"></td>' +
'<td class="bb_popup_bottom_middle"></td>' +
'<td class="bb_popup_bottom_right"></td>' +
'</tr>' +
'</tbody></table></div>'
).prependTo('#dio_political_map');
var canvas = document.getElementById('canvas_picker').getContext('2d');
var count = 5, line = 0, width = 16, height = 12, sep = 1;
var offset = (count - 2) * width;
for (var i = 2, j = 0; i < count; i++, j++) {
line = 0;
// Pinktöne (255,0,255)
canvas.fillStyle = "rgb(" + ((i / count * 255) | 0) + ", 0, " + ((i / count * 255) | 0) + ")";
canvas.fillRect(i * width, line, width - sep, height - sep);
canvas.fillStyle = "rgb(255," + ((j / (count - 1) * 255) | 0) + ", 255)";
canvas.fillRect(i * width + offset, line, width - sep, height - sep);
line = line + height;
// Rosatöne (255,0,127)
canvas.fillStyle = "rgb(" + ((i / count * 255) | 0) + ", 0, " + ((i / count * 127) | 0) + ")";
canvas.fillRect(i * width, line, width - sep, height - sep);
canvas.fillStyle = "rgb(255," + ((j / (count - 1) * 255) | 0) + "," + (127 + ((j / (count - 1) * 127) | 0)) + ")";
canvas.fillRect(i * width + offset, line, width - sep, height - sep);
line = line + height;
// Rottöne (255,0,0)
canvas.fillStyle = "rgb(" + ((i / count * 255) | 0) + ", 0, 0)";
canvas.fillRect(i * width, line, width - sep, height - sep);
canvas.fillStyle = "rgb(255," + ((j / (count - 1) * 255) | 0) + "," + ((j / (count - 1) * 255) | 0) + ")";
canvas.fillRect(i * width + offset, line, width - sep, height - sep);
line = line + height;
// Orangetöne (255, 127, 0)
canvas.fillStyle = "rgb(" + ((i / count * 255) | 0) + ", " + ((i / count * 127) | 0) + ", 0)";
canvas.fillRect(i * width, line, width - sep, height - sep);
canvas.fillStyle = "rgb(255, " + (127 + ((j / (count - 1) * 127) | 0)) + "," + ((j / (count - 1) * 255) | 0) + ")";
canvas.fillRect(i * width + offset, line, width - sep, height - sep);
line = line + height;
// Dunkelbrauntöne (170, 85, 0)
canvas.fillStyle = "rgb(" + ((i / count * 170) | 0) + ", " + ((i / count * 85) | 0) + ", 0)";
canvas.fillRect(i * width, line, width - sep, height - sep);
canvas.fillStyle = "rgb(" + (170 + (j / (count - 1) * 85) | 0) + ", " + (85 + ((j / (count - 1) * 170) | 0)) + "," + ((j / (count - 1) * 255) | 0) + ")";
canvas.fillRect(i * width + offset, line, width - sep, height - sep);
line = line + height;
// Brauntöne (191, 127, 0)
canvas.fillStyle = "rgb(" + ((i / count * 191) | 0) + ", " + ((i / count * 127) | 0) + ", 0)";
canvas.fillRect(i * width, line, width - sep, height - sep);
canvas.fillStyle = "rgb(" + (191 + (j / (count - 1) * 64) | 0) + ", " + (127 + ((j / (count - 1) * 127) | 0)) + "," + ((j / (count - 1) * 255) | 0) + ")";
canvas.fillRect(i * width + offset, line, width - sep, height - sep);
line = line + height;
// Gelbtöne (255,255,0)
canvas.fillStyle = "rgb(" + ((i / count * 255) | 0) + ", " + ((i / count * 255) | 0) + ", 0)";
canvas.fillRect(i * width, line, width - sep, height - sep);
canvas.fillStyle = "rgb(255, 255," + ((j / (count - 1) * 255) | 0) + ")";
canvas.fillRect(i * width + offset, line, width - sep, height - sep);
line = line + height;
// Gelbgrüntöne (127,255,0)
canvas.fillStyle = "rgb(" + ((i / count * 127) | 0) + "," + ((i / count * 191) | 0) + ", 0)";
canvas.fillRect(i * width, line, width - sep, height - sep);
canvas.fillStyle = "rgb(" + (127 + (j / (count - 1) * 127) | 0) + "," + (191 + (j / (count - 1) * 64) | 0) + "," + ((j / (count - 1) * 255) | 0) + ")";
canvas.fillRect(i * width + offset, line, width - sep, height - sep);
line = line + height;
// Dunkelgrasgrüntöne (85, 170, 0)
/*
canvas.fillStyle = "rgb("+ ((i/count*85)|0) +", "+ ((i/count*170)|0) +", 0)";
canvas.fillRect(i * width, line, width-sep, height-sep);
canvas.fillStyle = "rgb("+ (85 + (j/(count-1)*170)|0) +", "+ (170 + ((j/(count-1)*85)|0)) +","+ ((j/(count-1)*255)|0) +")";
canvas.fillRect(i * width + offset, line, width-sep, height-sep);
line = line + height;
*/
// Grüntöne (0,255,0)
canvas.fillStyle = "rgb(0," + ((i / count * 255) | 0) + ", 0)";
canvas.fillRect(i * width, line, width - sep, height - sep);
canvas.fillStyle = "rgb(" + ((j / (count - 1) * 255) | 0) + ", 255," + ((j / (count - 1) * 255) | 0) + ")";
canvas.fillRect(i * width + offset, line, width - sep, height - sep);
line = line + height;
// Türkistöne (0,255,127)
/*
canvas.fillStyle = "rgb(0,"+ ((i/count*255)|0) +","+ ((i/count*127)|0) + ")";
canvas.fillRect(i * width, line, width-sep, height-sep);
canvas.fillStyle = "rgb("+ ((j/(count-1)*255)|0) +", 255,"+ (127 + ((j/(count-1)*127)|0)) +")";
canvas.fillRect(i * width + offset, line, width-sep, height-sep);
line = line + height;
*/
// Dunkel-Türkistöne (0,191,127)
canvas.fillStyle = "rgb(0, " + ((i / count * 191) | 0) + "," + ((i / count * 127) | 0) + ")";
canvas.fillRect(i * width, line, width - sep, height - sep);
canvas.fillStyle = "rgb(" + ((j / (count - 1) * 255) | 0) + "," + (191 + (j / (count - 1) * 64) | 0) + ", " + (127 + ((j / (count - 1) * 127) | 0)) + ")";
canvas.fillRect(i * width + offset, line, width - sep, height - sep);
line = line + height;
// Cyantöne (0,255,255)
canvas.fillStyle = "rgb(0, " + ((i / count * 255) | 0) + ", " + ((i / count * 255) | 0) + ")";
canvas.fillRect(i * width, line, width - sep, height - sep);
canvas.fillStyle = "rgb(" + ((j / (count - 1) * 255) | 0) + ",255, 255)";
canvas.fillRect(i * width + offset, line, width - sep, height - sep);
line = line + height;
// Hellblautöne (0,127,255)
canvas.fillStyle = "rgb(0, " + ((i / count * 127) | 0) + "," + ((i / count * 255) | 0) + ")";
canvas.fillRect(i * width, line, width - sep, height - sep);
canvas.fillStyle = "rgb(" + ((j / (count - 1) * 255) | 0) + "," + (127 + ((j / (count - 1) * 127) | 0)) + ", 255)";
canvas.fillRect(i * width + offset, line, width - sep, height - sep);
line = line + height;
// Blautöne (0,0,255)
canvas.fillStyle = "rgb(0, 0, " + ((i / count * 255) | 0) + ")";
canvas.fillRect(i * width, line, width - sep, height - sep);
canvas.fillStyle = "rgb(" + ((j / (count - 1) * 255) | 0) + "," + ((j / (count - 1) * 255) | 0) + ", 255)";
canvas.fillRect(i * width + offset, line, width - sep, height - sep);
line = line + height;
// Lilatöne (127,0,255)
canvas.fillStyle = "rgb(" + ((i / count * 127) | 0) + ", 0, " + ((i / count * 255) | 0) + ")";
canvas.fillRect(i * width, line, width - sep, height - sep);
canvas.fillStyle = "rgb(" + (127 + ((j / (count - 1) * 127) | 0)) + "," + ((j / (count - 1) * 255) | 0) + ", 255)";
canvas.fillRect(i * width + offset, line, width - sep, height - sep);
line = line + height;
// Grautöne
/*
canvas.fillStyle = "rgb("+ ((i/count*127)|0) +", "+ ((i/count*127)|0) +", "+ ((i/count*127)|0) +")";
canvas.fillRect(i * width, line, width-sep, height-sep);
canvas.fillStyle = "rgb("+ (127 + ((j/(count-1)*127)|0)) +","+ (127 + ((j/(count-1)*127)|0)) +","+ (127 + ((j/(count-1)*127)|0)) +")";
canvas.fillRect(i * width + offset, line, width-sep, height-sep);
line = line + height;
*/
}
line = line + height;
for (var i = 0; i <= count; i++) {
// Grautöne
canvas.fillStyle = "rgb(" + ((i / count * 255) | 0) + ", " + ((i / count * 255) | 0) + ", " + ((i / count * 255) | 0) + ")";
canvas.fillRect(i * width + width * 2, line, width - sep, height - sep);
}
// http://www.javascripter.net/faq/rgbtohex.htm
function rgbToHex(R, G, B) {
return toHex(R) + toHex(G) + toHex(B)
}
function toHex(n) {
n = parseInt(n, 10);
if (isNaN(n)) return "00";
n = Math.max(0, Math.min(n, 255));
return "0123456789ABCDEF".charAt((n - n % 16) / 16) + "0123456789ABCDEF".charAt(n % 16);
}
$('#dio_color_picker a.cancel').click(function () {
ColorPicker.close();
});
$('#dio_color_picker a.confirm').click(function () {
// Custom-Event auslösen
$(ColorPicker).trigger("onColorChanged", [$('#dio_color_picker .color_string')[0].value]);
ColorPicker.close();
});
$('#dio_color_picker a.color_table').click(function () {
document.getElementById("c").click();
});
$('#dio_color_picker a.color_table #c').change(function () {
$('#dio_color_picker input.color_string')[0].value = this.value;
$('#dio_color_picker input.color_string')[0].style.color = this.value;
});
}
};
var UnitImages = {
activate : function(){
$('<style id="dio_unit_images">' +
'.unit_icon25x25 { background-image: url(https://diotools.de/images/game/units/unit_icons_25x25_2.91.png);} ' +
'.unit_icon40x40 { background-image: url(https://diotools.de/images/game/units/unit_icons_40x40_2.91.png);} ' +
'.unit_icon50x50 { background-image: url(https://diotools.de/images/game/units/unit_icons_50x50_2.91.png);} ' +
'.unit_icon90x90 { background-image: url(https://diotools.de/images/game/units/unit_icons_90x90_2.91.png);} ' +
'.unit_icon228x165 { background-image: none; height:0px;} ' +
'.unit_card .deco_statue { background-image: none !important;} ' +
'.grepo_box_silver .border_l, .grepo_box_silver .border_r { background-image: none;} ' +
'.box_corner .box_corner_tl, .grepo_box_silver .box_corner_tr { height:31px; } ' +
'.grepo_box_silver .grepo_box_content { padding: 21px 10px 0px; } ' +
'</style>').appendTo('head');
},
deactivate : function(){
$('#dio_unit_images').remove();
}
};
/*******************************************************************************************************************************
* Holiday Special
*******************************************************************************************************************************/
var HolidaySpecial = {
isHalloween : false, isXmas : false, isNewYear : false,
activate : function(){
var daystamp = 1000*60*60*24, today = new Date((new Date())%(daystamp*(365+1/4))), // without year
// Halloween -> 15 days
halloween_start = daystamp * 297, // 25. Oktober
halloween_end = daystamp * 321, // 8. November
// Xmas -> 28 days
xmas_start = daystamp * 334, // 1. Dezember
xmas_end = daystamp * 361, // 28. Dezember
// NewYear -> 7 days
newYear_start = daystamp * 0, // 1. Januar
newYear_end = daystamp * 7; // 7. Januar
HolidaySpecial.isHalloween = (today >= halloween_start) ? (today <= halloween_end) : false;
HolidaySpecial.isXmas = (today >= xmas_start) ? (today <= xmas_end) : false;
HolidaySpecial.isNewYear = (today >= newYear_start) ? (today <= newYear_end) : false;
if(HolidaySpecial.isXmas){ HolidaySpecial.XMas.add(); }
if(HolidaySpecial.isNewYear){ HolidaySpecial.NewYear.add(); }
},
XMas : {
add : function(){
$('<a href="http://www.greensmilies.com/smilie-album/weihnachten-smilies/" target="_blank"><div id="dio_xmas"></div></a>').appendTo('#ui_box');
var dioXMAS = $('#dio_xmas');
dioXMAS.css({
background: 'url("http://www.greensmilies.com/smile/smiley_emoticons_weihnachtsmann_nordpol.gif") no-repeat',
height: '51px',
width: '61px',
position:'absolute',
bottom:'10px',
left:'60px',
zIndex:'2000'
});
dioXMAS.tooltip("Ho Ho Ho, Merry Christmas!");
}
},
NewYear : {
add : function(){
// TODO: Jahreszahl dynamisch setzen
$('<a href="http://www.greensmilies.com/smilie-album/" target="_blank"><div id="dio_newYear">'+
'<img src="http://www.greensmilies.com/smile/sign2_2.gif">'+
'<img src="http://www.greensmilies.com/smile/sign2_0.gif">'+
'<img src="http://www.greensmilies.com/smile/sign2_1.gif">'+
'<img src="http://www.greensmilies.com/smile/sign2_6.gif">'+
'</div></a>').appendTo('#ui_box');
var dioNewYear = $('#dio_newYear');
dioNewYear.css({
position:'absolute',
bottom:'10px',
left:'70px',
zIndex:'10'
});
dioNewYear.tooltip("Happy new year!");
}
}
};
}