// ==UserScript==
// @name WarChiefs - Tiberium Alliances Combat Simulator
// @description Combat Simulator used to plan and strategize attack before going into battle.
// @author Eistee
// @version 13.09.26
// @namespace https://prodgame*.alliances.commandandconquer.com/*/index.aspx*
// @include https://prodgame*.alliances.commandandconquer.com/*/index.aspx*
// @icon http://eistee82.github.io/ta_simv2/icon.png
// ==/UserScript==
/**
* License: CC-BY-NC-SA 3.0
*
* Although I am the author of this script, I want to also give credit to other authors who's methods and ideas are or might appear in this script.
* Credits: Topper42, Eferz98, PythEch, MrHIDEn, Panavia2, Deyhak, CodeEcho, Matthias Fuchs, Enceladus, TheLuminary, Da Xue, Quor, WildKatana, Peluski17, Elda1990, TheStriker, JDuarteDJ, null
*/
(function () {
var injectFunction = function () {
function createClasses() {
qx.Class.define("Simulator", {
type: "singleton",
extend: qx.core.Object,
construct: function () {
try {
var qxApp = qx.core.Init.getApplication();
this.armyBar = qx.core.Init.getApplication().getArmySetupAttackBar();
this.playArea = qx.core.Init.getApplication().getMainOverlay();
this.replayBar = qx.core.Init.getApplication().getReportReplayOverlay();
this.isSimButtonDisabled = false;
this.armyTempFormations = [];
this.armyTempIdx = 0;
this.isSimulation = false;
this.hideArmyTooltips();
/**
* Setup Images
*/
var i, img = {
Arrows: {
Up: "webfrontend/theme/arrows/up.png",
Down: "webfrontend/theme/arrows/down.png",
Left: "webfrontend/theme/arrows/left.png",
Right: "webfrontend/theme/arrows/right.png"
},
Flip: {
H: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOvgAADr4B6kKxwAAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAACo0lEQVQ4T2PABkJq+rjmH7nUdPrV119nXn/9s+7S/R1NCzc4rTx1a8ay41c7WuYsl5WRkWGEKicM4honSux7+Pb42Tdf/4LwwacfP7Wv3pOz8sydVavO3lk5f9cx15jCGhaocsJgys7jAUeffXiGZODn1lW7Claeub16xelb64C4Ma+lnx+qHD/wySpjXnnqeifQq79RDFy5qxBq4PqVp25Ombxmhw4QQHXhAdH1fWL77r++DDToD04Dz9xeteDAuajc1gn4ve0UkciU3zvT4vTrb79ghmEzEOTtNefvL8pomyrExsYG1Y0FxNT18my4dH8KKGYJGLgeGDkrJqzeoR9ZWMMM1Y4Jercctjr46N1NZMNwGQhy5YpTN/PzWvu5oNpRgUdGGdOc/WfST736guJdPAauX3HiekfH4vXyUCNQQVhtn8D2W8+2nEGKDEIGgrw9a+cxeyUlJdRE7pldxZjcOlXj6LOPj9ENw2cgkL9m2dHL2TGljZxQoyAgrKaHdfmZWxVA734jxUAQXnXm9tS6yXMlTG2doKYBQWrrZIHNVx4sBWrG8C4I4zNw5enbi+ftPuGSVNGMiO2edXstjz3/9BabYSBMwMC1y09cr2pbvFEIbJh/RinrlI1744CRAc9q6BifgSC8+tzdpT1rdmuAE3l80yTZ/UglCzZMyECQ+MID58NiyprYGGbuO5t1/MWn99gMgmFCBoLwytO3Wir6ZggzLDpycQJyyYINH3r66WP7mj25wPDCZ+DsSRv2WTAsPHCmChgh7068/PwTGz4OlFtz+npX7/p9LstP3WwA4hZseMXp2w3Td56wYyho6lSdsfNY6YzdJydM330CBYPEQHIVnROVIzMLOIvb+oVq+meIVPVOQ8EgsYqeqUJJpfWcAKWymA2EsiGlAAAAAElFTkSuQmCC",
V: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOvgAADr4B6kKxwAAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAAClklEQVQ4T2MgB/iVd7CH1/SI9G3YF7D4+JUlR59/+nH61dff8w6cnQBVgh+EN01hjGqZxpY9eYlI39YjNvMOni888Ojd0aNP3z8+8/rr77Nvvv498+brn/n7T0+HasEOIlpnMIc1TBIJq+vX3HjtSd/ma4/WnHj59TtQM9gQZAwycO7ekzOhWhHAo6CRKaymh6d69krVWfvOpO19+O700WcfYS75g24QDGMYCPQWS1TzFKmktmkmO26/XLHv3sujwHD5CVSM0xBkDDcwqLJLcMHxa/FLT17rOPz04/PTb779wqaBEIYbOHv/2ZxjLz6/BglgU0gshhu44MDZaUABigwDYbCB+07NZJi29WDFvrsvLu+78/waDnwdixgmBpoxbduhMgav6ETZyNxSm+j8creoPPJwdH4FkC6z9o1NlWaYsnGf0ZpzdyeuOnt3GSUYZMZUoFkMk7ceDV555s6KFadvrQPi9eRioBmrpu44EcLQvHijweJDFzJWnrrRu/LM7VVASbIMBupdPWX78TAGt8Bw1oSsfL6qCbMUp2855Lvk+LXGFaduTgcpACpci64RF4YbCALe3t6MLi4uTC6BEZwhqXnC3Us3ms7acSxi+YlrLaDwgRqO1SAYRjEQGYAMB2JmN08v9vCMAuGWafPVFu4/E7H8+NWaVWduz11x+vYakgyEAaChDEBXM3r5+rOGJmVwlzZ1Svav2m656NDFghWnbk0FGrAEaBAoSMBhTtBAdAByuZOrO4t7eDxfWlWz7IztR70WHDiXA3T1jFVn76wE4hVTtx8PhionDoBc7eDgwODq4ckcFJPEHp9TJNA0e5n6tPU77ZcfvZLaNnupClQpeQDkaktLS2Y3Hz9Ov8h4XltnV3YAMTRvewY5T1wAAAAASUVORK5CYII="
},
DisableUnit: "FactionUI/icons/icon_disable_unit.png",
Undo: "FactionUI/icons/icon_refresh_funds.png"
};
/**
* Setup Buttons
*/
//Simulation Button//
this.simBtn = new qx.ui.form.Button(qxApp.tr("Simulate")).set({toolTipText: qxApp.tr("Opens Simulation Screen."), width: 60, height: 28, alignY: "middle", appearance: "button-text-small"});
this.simBtn.addListener("click", function () { this.__openSimulatorWindow(); }, this);
this.armyBar.add(this.simBtn, {left: null, right: 58, bottom: 119});
//Simulator Stats Button//
this.statBtn = new qx.ui.form.Button(qxApp.tr("Stats")).set({toolTipText: qxApp.tr("Opens Simulator Stats Window."), width: 60, height: 28, alignY: "middle", appearance: "button-text-small"});
this.statBtn.addListener("click", function () { this.__openStatWindow(); }, this);
this.armyBar.add(this.statBtn, {left: null, right: 58, bottom: 81});
//Simulator Options Button//
this.optionBtn = new qx.ui.form.Button(qxApp.tr("Options")).set({toolTipText: qxApp.tr("Opens Simulator Options."), width: 60, height: 28, alignY: "middle", appearance: "button-text-small"});
this.optionBtn.addListener("click", function () { this.__openOptionWindow(); }, this);
this.armyBar.add(this.optionBtn, {left: null, right: 58, bottom: 43});
//Simulator Layout Button//
this.layoutBtn = new qx.ui.form.Button(qxApp.tr("Layout")).set({toolTipText: qxApp.tr("Save/Load/Delete Unit Formations for current city."), width: 60, height: 28, alignY: "middle", appearance: "button-text-small"});
this.layoutBtn.addListener("click", function () { this.__openLayoutWindow(); }, this);
this.armyBar.add(this.layoutBtn, {left: null, right: 58, bottom: 6});
//Simulator Unlock Combat Button//
this.unlockCmtBtn = new qx.ui.form.Button(qxApp.tr("Unlock")).set({toolTipText: qxApp.tr("Unlock Combat Button."), width: 44, height: 44, opacity: 0.4, padding : 0, alignY: "middle", appearance: "button-text-small"});
this.unlockCmtBtn.addListener("click", function () { this.timeoutCmtBtn(); }, this);
this.armyBar.add(this.unlockCmtBtn, {left: null, right: 10, bottom: 8});
//Simulator Unlock Repair Time Button//
this.unlockRTBtn = new qx.ui.form.Button(qxApp.tr("Unlock")).set({toolTipText: qxApp.tr("Unlock Repair Button."), width: 44, height: 44, opacity: 0.4, padding : 0, alignY: "middle", appearance: "button-text-small"});
this.unlockRTBtn.addListener("click", function () { this.timeoutRTBtn(); }, this);
this.armyBar.add(this.unlockRTBtn, {left: null, right: 10, bottom: 100});
//Formation Shift Buttons//
this.shiftUpBtn = new qx.ui.form.Button("", img.Arrows.Up).set({toolTipText: qxApp.tr("Shifts units one space up."), width: 30, height: 20, alignY: "middle", appearance: "button-text-small", gap: 0, iconPosition: "top", show: "icon"});
this.shiftUpBtn.addListener("click", function () { this.shiftFormation("u"); }, this);
this.shiftUpBtn.hide();
this.playArea.add(this.shiftUpBtn, {left: null, right: 75, bottom: 113});
this.shiftDownBtn = new qx.ui.form.Button("", img.Arrows.Down).set({toolTipText: qxApp.tr("Shifts units one space down."), width: 30, height: 20, alignY: "middle", appearance: "button-text-small", gap: 0, iconPosition: "top", show: "icon"});
this.shiftDownBtn.addListener("click", function () { this.shiftFormation("d"); }, this);
this.shiftDownBtn.hide();
this.playArea.add(this.shiftDownBtn, {left: null, right: 75, bottom: 73});
this.shiftLeftBtn = new qx.ui.form.Button("", img.Arrows.Left).set({toolTipText: qxApp.tr("Shifts units one space left."), width: 30, height: 20, alignY: "middle", appearance: "button-text-small", gap: 0, iconPosition: "top", show: "icon"});
this.shiftLeftBtn.addListener("click", function () { this.shiftFormation("l"); }, this);
this.shiftLeftBtn.hide();
this.playArea.add(this.shiftLeftBtn, {left: null, right: 95, bottom: 93});
this.shiftRightBtn = new qx.ui.form.Button("", img.Arrows.Right).set({toolTipText: qxApp.tr("Shifts units one space right."), width: 30, height: 20, alignY: "middle", appearance: "button-text-small", gap: 0, iconPosition: "top", show: "icon"});
this.shiftRightBtn.addListener("click", function () { this.shiftFormation("r"); }, this);
this.shiftRightBtn.hide();
this.playArea.add(this.shiftRightBtn, {left: null, right: 55, bottom: 93});
for (i = 0; i < ClientLib.Base.Util.get_ArmyMaxSlotCountY(); i++) {
var btnMirrorH = new qx.ui.form.Button(i, img.Flip.H).set({toolTipText: qxApp.tr("Mirrors units horizontally."), width: 19, maxHeight: 25, alignY: "middle", show: "icon", iconPosition: "top", appearance: "button-addpoints"});
btnMirrorH.addListener("click", function (e) { this.mirrorFormation("h", parseInt(e.getTarget().getLabel(), 10)); }, this);
btnMirrorH.getChildControl("icon").set({width: 16, height: 16, scale: true});
var shiftLeftBtn = new qx.ui.form.Button(i, img.Arrows.Left).set({toolTipText: qxApp.tr("Shifts units one space left."), width: 20, maxHeight: 25, alignY: "middle", show: "icon", iconPosition: "top", appearance: "button-addpoints"});
shiftLeftBtn.addListener("click", function (e) { this.shiftFormation("l", parseInt(e.getTarget().getLabel(), 10)); }, this);
var shiftRightBtn = new qx.ui.form.Button(i, img.Arrows.Right).set({toolTipText: qxApp.tr("Shifts units one space right."), width: 20, maxHeight: 25, alignY: "middle", show: "icon", iconPosition: "top", appearance: "button-addpoints"});
shiftRightBtn.addListener("click", function (e) { this.shiftFormation("r", parseInt(e.getTarget().getLabel(), 10)); }, this);
var cntWave = this.armyBar.getMainContainer().getChildren()[(i+4)];
cntWave.removeAll();
cntWave.setLayout(new qx.ui.layout.HBox());
cntWave.add(btnMirrorH);
cntWave.add(new qx.ui.core.Spacer(), {flex: 1});
cntWave.add(shiftLeftBtn);
cntWave.add(shiftRightBtn);
}
var formation = this.armyBar.getMainContainer().getChildren()[1].getChildren()[0];
var btnHBox = new qx.ui.container.Composite(new qx.ui.layout.HBox());
var btnHBoxouter = new qx.ui.container.Composite(new qx.ui.layout.HBox());
btnHBoxouter.add(new qx.ui.core.Spacer(), {flex: 1});
btnHBoxouter.add(btnHBox);
btnHBoxouter.add(new qx.ui.core.Spacer(), {flex: 1});
this.armyBar.add(btnHBoxouter, { left : 16, top : 7, right : 0});
formation.bind("changeWidth", btnHBox, "width");
for (i = 0; i < ClientLib.Base.Util.get_ArmyMaxSlotCountX(); i++) {
var btnMirrorV = new qx.ui.form.Button(i, img.Flip.V).set({toolTipText: qxApp.tr("Mirrors units vertically."), width: 25, maxHeight: 19, alignY: "middle", show: "icon", iconPosition: "top", appearance: "button-addpoints", opacity: 0.3});
btnMirrorV.addListener("click", function (e) { this.mirrorFormation("v", parseInt(e.getTarget().getLabel(), 10)); }, this);
btnMirrorV.addListener("mouseover", function (e) { e.getTarget().set({opacity: 1.0}); }, this);
btnMirrorV.addListener("mouseout", function (e) { e.getTarget().set({opacity: 0.3}); }, this);
btnMirrorV.getChildControl("icon").set({width: 14, height: 14, scale: true});
var btnShiftUp = new qx.ui.form.Button(i, img.Arrows.Up).set({toolTipText: qxApp.tr("Shifts units one space up."), width: 25, maxHeight: 19, alignY: "middle", show: "icon", iconPosition: "top", appearance: "button-addpoints", opacity: 0.3});
btnShiftUp.addListener("click", function (e) { this.shiftFormation("u", parseInt(e.getTarget().getLabel(), 10)); }, this);
btnShiftUp.addListener("mouseover", function (e) { e.getTarget().set({opacity: 1.0}); }, this);
btnShiftUp.addListener("mouseout", function (e) { e.getTarget().set({opacity: 0.3}); }, this);
var btnShiftDown = new qx.ui.form.Button(i, img.Arrows.Down).set({toolTipText: qxApp.tr("Shifts units one space down."), width: 25, maxHeight: 19, alignY: "middle", show: "icon", iconPosition: "top", appearance: "button-addpoints", opacity: 0.3});
btnShiftDown.addListener("click", function (e) { this.shiftFormation("d", parseInt(e.getTarget().getLabel(), 10)); }, this);
btnShiftDown.addListener("mouseover", function (e) { e.getTarget().set({opacity: 1.0}); }, this);
btnShiftDown.addListener("mouseout", function (e) { e.getTarget().set({opacity: 0.3}); }, this);
btnHBox.add(new qx.ui.core.Spacer(), {flex: 1});
btnHBox.add(btnMirrorV);
btnHBox.add(new qx.ui.core.Spacer().set({ width: 2 }));
btnHBox.add(btnShiftUp);
btnHBox.add(btnShiftDown);
btnHBox.add(new qx.ui.core.Spacer(), {flex: 1});
}
//Formation Mirror Buttons//
this.mirrorBtnH = new qx.ui.form.Button("", img.Flip.H).set({toolTipText: qxApp.tr("Mirrors units horizontally."), show: "icon", width: 35, height: 35, center: true, alignY: "middle", appearance: "button-text-small"});
this.mirrorBtnH.getChildControl("icon").set({width: 20, height: 20, scale: true});
this.mirrorBtnH.addListener("click", function () { this.mirrorFormation("h"); }, this);
this.mirrorBtnH.hide();
this.playArea.add(this.mirrorBtnH, {left: null, right: 6, bottom: 160});
this.mirrorBtnV = new qx.ui.form.Button("", img.Flip.V).set({toolTipText: qxApp.tr("Mirrors units vertically."), show: "icon", width: 35, height: 35, center: true, alignY: "middle", appearance: "button-text-small"});
this.mirrorBtnV.getChildControl("icon").set({width: 20, height: 20, scale: true});
this.mirrorBtnV.addListener("click", function () { this.mirrorFormation("v"); }, this);
this.mirrorBtnV.hide();
this.playArea.add(this.mirrorBtnV, {left: null, right: 46, bottom: 160});
//Disable all Units Button//
this.disableAllUnitsBtn = new qx.ui.form.Button("", img.DisableUnit).set({toolTipText: qxApp.tr("Enables/Disables all units."), show: "icon", width: 35, height: 35, center: true, alignY: "middle", appearance: "button-text-small"});
this.disableAllUnitsBtn.getChildControl("icon").set({width: 20, height: 20, scale: true});
this.disableAllUnitsBtn.addListener("click", function () { this.shiftFormation("n"); }, this);
this.disableAllUnitsBtn.hide();
this.playArea.add(this.disableAllUnitsBtn, {left: null, right: 6, bottom: 120});
//Undo Button//
this.armyUndoBtn = new qx.ui.form.Button("", img.Undo).set({toolTipText: qxApp.tr("Undo's formation to previous saved formation.<br>Save formations by hitting<br>the Update or Simulate button."), show: "icon", width: 35, height: 35, center: true, alignY: "middle", appearance: "button-text-small"});
this.armyUndoBtn.getChildControl("icon").set({width: 20, height: 20, scale: true});
this.armyUndoBtn.addListener("click", function () { this.undoCurrentFormation(); }, this);
this.armyUndoBtn.setEnabled(false);
this.armyUndoBtn.hide();
this.playArea.add(this.armyUndoBtn, {left: null, right: 6, bottom: 200});
//Quick Save Button//
this.quickSaveBtn = new qx.ui.form.Button(qxApp.tr("QS")).set({toolTipText: qxApp.tr("Saves the current layout<br>without having to open<br>the Formation Saver window.<br>Does not make persistent."), width: 35, height: 35, alignY: "middle", appearance: "button-text-small"});
this.quickSaveBtn.addListener("click", function () { Simulator.LayoutWindow.getInstance().saveNewLayout(true); }, this);
this.quickSaveBtn.hide();
this.playArea.add(this.quickSaveBtn, {left: null, right: 6, bottom: 240});
//Simulator Back Button//
this.backBtn = new qx.ui.form.Button(qxApp.tr("Back")).set({toolTipText: qxApp.tr("Return to Combat Setup."), width: 50, height: 24, appearance: "button-text-small"});
this.backBtn.addListener("click", function () { this.backToCombatSetup(); }, this);
this.replayBar.add(this.backBtn, {top: 37, left: 255});
this.replayStatBtn = new qx.ui.form.Button(qxApp.tr("Stats")).set({toolTipText: qxApp.tr("Opens Simulator Stats Window."), width: 50, height: 24, appearance: "button-text-small"});
this.replayStatBtn.addListener("click", function () { this.__openStatWindow(); }, this);
this.replayBar.add(this.replayStatBtn, {top: 7, left: 255});
phe.cnc.Util.attachNetEvent(ClientLib.Vis.VisMain.GetInstance(), "ViewModeChange", ClientLib.Vis.ViewModeChange, this, this._onViewChanged);
} catch (e) {
console.log("Error setting up Simulator Constructor: ");
console.log(e.toString());
}
},
destruct: function () {},
members: {
armyBar: null,
playArea: null,
replayBar: null,
isSimButtonDisabled: null,
armyTempFormations: null,
armyTempIdx: null,
isSimulation: null,
simBtn: null,
optionBtn: null,
statBtn: null,
layoutBtn: null,
unlockCmtBtn: null,
unlockRTBtn: null,
shiftUpBtn: null,
shiftDownBtn: null,
shiftLeftBtn: null,
shiftRightBtn: null,
disableAllUnitsBtn: null,
armyUndoBtn: null,
quickSaveBtn: null,
backBtn: null,
replayStatBtn: null,
_onViewChanged: function (oldMode, newMode) {
try {
if (newMode != ClientLib.Vis.Mode.CombatSetup && newMode != ClientLib.Vis.Mode.Battleground) {
Simulator.getInstance().armyTempFormations = [];
Simulator.getInstance().armyTempIdx = 0;
Simulator.getInstance().armyUndoBtn.setEnabled(false);
Simulator.getInstance().isSimulation = false;
localStorage['allUnitsDisabled'] = "no";
} else if (newMode == ClientLib.Vis.Mode.CombatSetup && oldMode != ClientLib.Vis.Mode.Battleground) {
Simulator.getInstance().saveTempFormation();
}
var cityId = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCity().get_Id();
var ownCityId = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCity().get_Id();
if (ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCity() !== null) {
if (newMode == ClientLib.Vis.Mode.Battleground || cityId == ownCityId) {
Simulator.getInstance().shiftUpBtn.hide();
Simulator.getInstance().shiftDownBtn.hide();
Simulator.getInstance().shiftLeftBtn.hide();
Simulator.getInstance().shiftRightBtn.hide();
Simulator.getInstance().disableAllUnitsBtn.hide();
Simulator.getInstance().mirrorBtnH.hide();
Simulator.getInstance().mirrorBtnV.hide();
Simulator.getInstance().armyUndoBtn.hide();
Simulator.getInstance().quickSaveBtn.hide();
} else if (cityId != ownCityId) {
Simulator.getInstance().shiftUpBtn.show();
Simulator.getInstance().shiftDownBtn.show();
Simulator.getInstance().shiftLeftBtn.show();
Simulator.getInstance().shiftRightBtn.show();
Simulator.getInstance().disableAllUnitsBtn.show();
Simulator.getInstance().mirrorBtnH.show();
Simulator.getInstance().mirrorBtnV.show();
Simulator.getInstance().armyUndoBtn.show();
Simulator.getInstance().quickSaveBtn.show();
}
}
} catch (e) {
console.log("Error closing windows or hiding buttons on view change");
console.log(e.toString());
}
},
__openSimulatorWindow: function () {
var city = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCity();
if (city != null) {
var ownCity = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCity();
this.isSimulation = true;
this.saveTempFormation();
localStorage.ta_sim_last_city = city.get_Id();
ownCity.get_CityArmyFormationsManager().set_CurrentTargetBaseId(city.get_Id());
ClientLib.API.Battleground.GetInstance().SimulateBattle();
var app = qx.core.Init.getApplication();
app.getPlayArea().setView(ClientLib.Data.PlayerAreaViewMode.pavmCombatReplay, city.get_Id(), 0, 0);
var autoSim = localStorage['autoSimulate'];
if (autoSim !== undefined) {
if (autoSim == "yes") {
var speed = localStorage['simulateSpeed'];
setTimeout(function () {
var battleground = ClientLib.Vis.VisMain.GetInstance().get_Battleground();
battleground.RestartReplay();
battleground.set_ReplaySpeed(parseInt(speed, 10));
}, 1000);
}
}
if (this.isSimButtonDisabled == false) {
this.disableSimulateButtonTimer(10000);
if (typeof Simulator.StatWindow.getInstance().disableSimulateStatButtonTimer === "function") {
Simulator.StatWindow.getInstance().disableSimulateStatButtonTimer(10000);
}
}
if (Simulator.StatWindow.getInstance().simReplayBtn.getEnabled() == false) {
Simulator.StatWindow.getInstance().simReplayBtn.setEnabled(true);
}
}
},
__openOptionWindow: function () {
try {
if (Simulator.OptionWindow.getInstance().isVisible()) {
console.log("Closing Option Window");
Simulator.OptionWindow.getInstance().close();
} else {
console.log("Opening Option Window");
Simulator.OptionWindow.getInstance().open();
}
} catch (e) {
console.log("Error Opening or Closing Option Window");
console.log(e.toString());
}
},
__openStatWindow: function () {
try {
if (Simulator.StatWindow.getInstance().isVisible()) {
console.log("Closing Stat Window");
Simulator.StatWindow.getInstance().close();
} else {
console.log("Opening Stat Window");
Simulator.StatWindow.getInstance().open();
}
} catch (e) {
console.log("Error Opening or Closing Stat Window");
console.log(e.toString());
}
},
__openLayoutWindow: function () {
try {
if (Simulator.LayoutWindow.getInstance().isVisible()) {
console.log("Closing Layout Window");
Simulator.LayoutWindow.getInstance().close();
} else {
console.log("Opening LayoutWindow");
Simulator.LayoutWindow.getInstance().updateLayoutList();
Simulator.LayoutWindow.getInstance().layoutTextBox.setValue("");
Simulator.LayoutWindow.getInstance().persistentCheck.setValue(false);
Simulator.LayoutWindow.getInstance().open();
}
} catch (e) {
console.log("Error Opening or Closing Layout Window");
console.log(e.toString());
}
},
saveTempFormation: function () {
try {
var units = this.getCityPreArmyUnits().get_ArmyUnits().l;
if (this.armyTempFormations.length != 0) {
for (var i = 0; i < units.length; i++) {
var lastForm = this.armyTempFormations[this.armyTempIdx][i];
if ((units[i].get_CoordX() != lastForm.x) || (units[i].get_CoordY() != lastForm.y)) {
break;
} else if ((i + 1) == units.length) {
return;
}
}
}
var formation = new Array();
for (var i = 0; i < units.length; i++) {
var unit = units[i];
var unitInfo = {};
unitInfo.x = unit.get_CoordX();
unitInfo.y = unit.get_CoordY();
unitInfo.id = unit.get_Id();
unitInfo.enabled = unit.get_Enabled();
formation.push(unitInfo);
}
this.armyTempFormations.push(formation);
this.armyTempIdx = this.armyTempFormations.length - 1;
if (this.armyTempFormations.length > 1)
this.armyUndoBtn.setEnabled(true);
} catch (e) {
console.log("Error Saving Temp Formation");
console.log(e.toString());
}
},
undoCurrentFormation: function () {
try {
this.restoreFormation(this.armyTempFormations[(this.armyTempIdx - 1)]);
//get rid of last element now that we have undone it.
this.armyTempFormations.splice(this.armyTempIdx, 1);
this.armyTempIdx--;
if (this.armyTempFormations.length == 1)
this.armyUndoBtn.setEnabled(false);
} catch (e) {
console.log("Error undoing formation");
console.log(e.toString());
}
},
mirrorFormation: function (direction, sel) {
try {
console.log("Shifting Unit Formation");
var units = this.getCityPreArmyUnits().get_ArmyUnits().l;
var newLayout = [];
for (var i = 0; i < units.length; i++) {
var unit = units[i],
armyUnit = {},
x = unit.get_CoordX(),
y = unit.get_CoordY();
if (direction == "h") x = Math.abs(x - 8);
if (direction == "v") y = Math.abs(y - 3);
if (sel !== undefined && unit.get_CoordY() != sel && direction == "h") armyUnit.x = unit.get_CoordX();
else armyUnit.x = x;
if (sel !== undefined && unit.get_CoordX() != sel && direction == "v") armyUnit.y = unit.get_CoordY();
else armyUnit.y = y;
armyUnit.id = unit.get_Id();
armyUnit.enabled = unit.get_Enabled();
newLayout.push(armyUnit);
}
this.restoreFormation(newLayout);
} catch (e) {
console.log("Error Mirroring Formation");
console.log(e.toString());
}
},
shiftFormation: function (direction, sel) {
try {
var v_shift = 0;
var h_shift = 0;
if (direction == "u") var v_shift = -1;
if (direction == "d") var v_shift = 1;
if (direction == "l") var h_shift = -1;
if (direction == "r") var h_shift = 1;
if (v_shift == 0 && h_shift == 0 && direction != "n")
return;
var units = this.getCityPreArmyUnits().get_ArmyUnits().l;
var newLayout = [];
for (var i = 0; i < units.length; i++) {
var unit = units[i];
var armyUnit = {};
var x = unit.get_CoordX() + h_shift;
switch (x) {
case 9:
x = 0;
break;
case -1:
x = 8;
break;
}
var y = unit.get_CoordY() + v_shift;
switch (y) {
case 4:
y = 0;
break;
case -1:
y = 3;
break;
}
if (sel !== undefined && unit.get_CoordY() != sel && (direction == "l" || direction == "r")) armyUnit.x = unit.get_CoordX();
else armyUnit.x = x;
if (sel !== undefined && unit.get_CoordX() != sel && (direction == "u" || direction == "d")) armyUnit.y = unit.get_CoordY();
else armyUnit.y = y;
armyUnit.id = unit.get_Id();
if (direction == "n") {
if (localStorage['allUnitsDisabled'] !== undefined) {
if (localStorage['allUnitsDisabled'] == "yes") {
armyUnit.enabled = unit.set_Enabled(true);
} else {
armyUnit.enabled = unit.set_Enabled(false);
}
} else {
armyUnit.enabled = unit.set_Enabled(false);
}
}
armyUnit.enabled = unit.get_Enabled();
newLayout.push(armyUnit);
}
if (direction == "n") {
if (localStorage['allUnitsDisabled'] == "yes")
localStorage['allUnitsDisabled'] = "no";
else
localStorage['allUnitsDisabled'] = "yes";
}
this.restoreFormation(newLayout);
} catch (e) {
console.log("Error Shifting Units");
console.log(e.toString());
}
},
restoreFormation: function (layout) {
try {
var sUnits = layout;
var units = this.getCityPreArmyUnits();
var units_list = units.get_ArmyUnits().l;
for (var idx = 0; idx < sUnits.length; idx++)
{
var saved_unit = sUnits[idx];
var uid = saved_unit.id;
for (var i = 0; i < units_list.length; i++)
{
if (units_list[i].get_Id() === uid)
{
units_list[i].MoveBattleUnit(saved_unit.x, saved_unit.y);
if (saved_unit.enabled === undefined)
units_list[i].set_Enabled(true);
else
units_list[i].set_Enabled(saved_unit.enabled);
}
}
}
units.UpdateFormation(true);
} catch (e) {
console.log("Error Restoring Formation");
console.log(e.toString());
}
},
getCityPreArmyUnits: function () {
var city = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCity();
var ownCity = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCity();
var formationManager = ownCity.get_CityArmyFormationsManager();
formationManager.set_CurrentTargetBaseId(city.get_Id());
return formationManager.GetFormationByTargetBaseId(formationManager.get_CurrentTargetBaseId());
},
timeoutCmtBtn: function () {
this.unlockCmtBtn.exclude();
setTimeout(function () {
Simulator.getInstance().unlockCmtBtn.show();
}, 3000);
},
timeoutRTBtn: function () {
this.unlockRTBtn.exclude();
setTimeout(function () {
Simulator.getInstance().unlockRTBtn.show();
}, 3000);
},
backToCombatSetup: function () {
try {
var city = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCity();
if (city != null) {
var app = qx.core.Init.getApplication();
app.getPlayArea().setView(ClientLib.Data.PlayerAreaViewMode.pavmCombatSetupDefense, city.get_Id(), 0, 0);
}
} catch (e) {
console.log("Error closing Simulation Window");
console.log(e.toString());
}
},
disableSimulateButtonTimer: function (timer) {
try {
if (timer >= 1000) {
this.isSimButtonDisabled = true;
this.simBtn.setEnabled(false);
this.simBtn.setLabel(Math.floor(timer / 1000));
timer -= 1000;
setTimeout(function () {
Simulator.getInstance().disableSimulateButtonTimer(timer);
}, 1000);
} else {
setTimeout(function () {
var qxApp = qx.core.Init.getApplication();
Simulator.getInstance().simBtn.setEnabled(true);
if (Simulator.OptionWindow.getInstance()._buttonSizeCB.getValue())
Simulator.getInstance().simBtn.setLabel(qxApp.tr("Simulate"));
else
Simulator.getInstance().simBtn.setLabel(qxApp.tr("S"));
}, timer);
this.isSimButtonDisabled = false;
}
} catch (e) {
console.log("Error disabling simulator button");
console.log(e.toString());
}
},
hideArmyTooltips: function () {
try {
if (localStorage["ArmyUnitTooltipDisabled"] === undefined) localStorage["ArmyUnitTooltipDisabled"] = "yes";
var Baseview = ClientLib.Vis.BaseView.BaseView.prototype;
for (var i in Baseview) {
if (typeof Baseview[i] === "function" && Baseview[i] === Baseview.ShowToolTip) {
Baseview.ShowToolTip2 = Baseview[i];
Baseview[i] = function (a) {
if (ClientLib.Vis.VisMain.GetInstance().get_Mode() == ClientLib.Vis.Mode.CombatSetup && localStorage['ArmyUnitTooltipDisabled'] == 'yes') return;
else this.ShowToolTip2(a);
};
break;
}
}
var ArmyUnitTooltipOverlay = qx.core.Init.getApplication().getArmyUnitTooltipOverlay();
ArmyUnitTooltipOverlay.setVisibility2 = ArmyUnitTooltipOverlay.setVisibility;
ArmyUnitTooltipOverlay.setVisibility = function (a) {
if (localStorage["ArmyUnitTooltipDisabled"] == "yes") this.setVisibility2(false);
else this.setVisibility2(a);
};
} catch (e) {
console.log("Error hideArmyTooltips()");
console.log(e.toString());
}
}
}
});
qx.Class.define("Simulator.StatWindow", {
type: "singleton",
extend: qx.ui.window.Window,
construct: function () {
try {
var qxApp = qx.core.Init.getApplication();
this.base(arguments);
this.set({
layout: new qx.ui.layout.VBox().set({
spacing: 0
}),
caption: qxApp.tr("Simulator") + " - " + qxApp.tr("Stats"),
icon: "FactionUI/icons/icon_res_plinfo_command_points.png",
contentPadding: 5,
contentPaddingTop: 0,
allowMaximize: false,
showMaximize: false,
allowMinimize: false,
showMinimize: false,
resizable: true,
resizableTop: false,
resizableBottom: false
});
this.getChildControl("icon").set({ width : 18, height : 18, scale : true, alignY : "middle" });
if (localStorage['statWindowPosLeft'] !== undefined) {
var left = parseInt(localStorage['statWindowPosLeft'], 10);
var top = parseInt(localStorage['statWindowPosTop'], 10);
this.moveTo(left, top);
} else {
this.moveTo(124, 31);
}
if (localStorage['simViews'] !== undefined) {
this.simViews = parseInt(localStorage['simViews'], 10);
} else {
this.simViews = 3;
}
this.isSimStatButtonDisabled = false;
/**
* Setup Images
*/
var img = {
Enemy: {
All: "FactionUI/icons/icon_arsnl_show_all.png",
Base: "FactionUI/icons/icon_arsnl_base_buildings.png",
Defense: "FactionUI/icons/icon_def_army_points.png"
},
Defense: {
Infantry: "FactionUI/icons/icon_arsnl_def_squad.png",
Vehicle: "FactionUI/icons/icon_arsnl_def_vehicle.png",
Building: "FactionUI/icons/icon_arsnl_def_building.png"
},
Offense: {
Infantry: "FactionUI/icons/icon_arsnl_off_squad.png",
Vehicle: "FactionUI/icons/icon_arsnl_off_vehicle.png",
Aircraft: "FactionUI/icons/icon_arsnl_off_plane.png"
},
Repair: {
Storage: "webfrontend/ui/icons/icn_repair_points.png",
Overall: "webfrontend/ui/icons/icn_repair_off_points.png",
Infantry: "webfrontend/ui/icons/icon_res_repair_inf.png",
Vehicle: "webfrontend/ui/icons/icon_res_repair_tnk.png",
Aircraft: "webfrontend/ui/icons/icon_res_repair_air.png"
},
Loot: {
Tiberium: "webfrontend/ui/common/icn_res_tiberium.png",
Crystal: "webfrontend/ui/common/icn_res_chrystal.png",
Credits: "webfrontend/ui/common/icn_res_dollar.png",
RP: "webfrontend/ui/common/icn_res_research_mission.png",
Total: "FactionUI/icons/icon_transfer_resource.png"
}
};
/**
* Setup Stats Window
*/
//Battle Section//
this.Battle = new qx.ui.container.Composite(new qx.ui.layout.HBox(-3)).set({decorator: "pane-light-plain", allowGrowX: true, marginLeft: 0, marginRight: 0});
var BattleLables = new qx.ui.container.Composite(new qx.ui.layout.VBox()).set({width: 29, padding: 5, allowGrowX: true, marginLeft: 0, marginRight: 0});
var BattleOutcome = new qx.ui.basic.Label("O").set({toolTipText: qxApp.tr("tnf:combat report"), alignX: "center", alignY: "middle"});
var BattleDuration = new qx.ui.basic.Label("D").set({toolTipText: qxApp.tr("tnf:combat timer npc: %1", ""), alignX: "center", alignY: "middle"});
var BattleOwnCity = new qx.ui.basic.Label("B").set({toolTipText: qxApp.tr("tnf:base"), alignX: "center", alignY: "middle"});
BattleLables.add(BattleOutcome);
BattleLables.add(BattleDuration);
BattleLables.add(BattleOwnCity);
this.Battle.add(BattleLables);
this.add(this.Battle);
//Enemy Health Section//
var EnemyHealthHeader = new qx.ui.container.Composite(new qx.ui.layout.VBox(5)).set({decorator: "pane-light-opaque"});
EnemyHealthHeader.add(new qx.ui.basic.Label(qxApp.tr("tnf:combat target")).set({alignX: "center", alignY: "middle", paddingBottom: 5, font: "font_size_13_bold"}));
this.add(EnemyHealthHeader);
this.EnemyHealth = new qx.ui.container.Composite(new qx.ui.layout.HBox(-3)).set({decorator: "pane-light-plain", allowGrowX: true, marginLeft: 0, marginRight: 0});
var EnemyHealthLabels = new qx.ui.container.Composite(new qx.ui.layout.VBox()).set({width: 29, padding: 5, allowGrowX: true, marginLeft: 0, marginRight: 0});
var EnemyHealthLabelOverall = new qx.ui.basic.Atom(null, img.Enemy.All).set({toolTipText: qxApp.tr("tnf:total"), toolTipIcon: img.Enemy.All, alignX: "center", alignY: "middle", gap: 0, iconPosition: "top"});
var EnemyHealthLabelBase = new qx.ui.basic.Atom(null, img.Enemy.Base).set({toolTipText: qxApp.tr("tnf:base"), toolTipIcon: img.Enemy.Base, alignX: "center", alignY: "middle", gap: 0, iconPosition: "top"});
var EnemyHealthLabelDefense = new qx.ui.basic.Atom(null, img.Enemy.Defense).set({toolTipText: qxApp.tr("tnf:defense"), toolTipIcon: img.Enemy.Defense, alignX: "center", alignY: "middle", gap: 0, iconPosition: "top"});
var EnemyHealthLabelCY = new qx.ui.basic.Label("CY").set({toolTipText: GAMEDATA.Tech[1].dn, alignX: "center", alignY: "middle"});
var EnemyHealthLabelDF = new qx.ui.basic.Label("DF").set({toolTipText: GAMEDATA.Tech[42].dn, alignX: "center", alignY: "middle"});
var EnemyHealthLabelCC = new qx.ui.basic.Label("CC").set({toolTipText: GAMEDATA.Tech[24].dn, alignX: "center", alignY: "middle"});
EnemyHealthLabelOverall.getChildControl("icon").set({width: 18, height: 18, scale: true, alignY : "middle"});
EnemyHealthLabelBase.getChildControl("icon").set({width: 18, height: 18, scale: true, alignY : "middle"});
EnemyHealthLabelDefense.getChildControl("icon").set({width: 18, height: 18, scale: true, alignY : "middle"});
EnemyHealthLabels.add(EnemyHealthLabelOverall);
EnemyHealthLabels.add(EnemyHealthLabelBase);
EnemyHealthLabels.add(EnemyHealthLabelDefense);
EnemyHealthLabels.add(EnemyHealthLabelCY);
EnemyHealthLabels.add(EnemyHealthLabelDF);
EnemyHealthLabels.add(EnemyHealthLabelCC);
this.EnemyHealth.add(EnemyHealthLabels);
this.add(this.EnemyHealth);
//Repair Section//
var RepairHeader = new qx.ui.container.Composite(new qx.ui.layout.VBox(5)).set({decorator: "pane-light-opaque"});
RepairHeader.add(new qx.ui.basic.Label(qxApp.tr("tnf:own repair cost")).set({alignX: "center", alignY: "middle", paddingBottom: 5, font: "font_size_13_bold"}));
this.add(RepairHeader);
this.Repair = new qx.ui.container.Composite(new qx.ui.layout.HBox(-3)).set({decorator: "pane-light-plain", allowGrowX: true, marginLeft: 0, marginRight: 0});
var RepairLabels = new qx.ui.container.Composite(new qx.ui.layout.VBox()).set({width: 29, padding: 5, allowGrowX: true, marginLeft: 0, marginRight: 0});
var pRLabelStorage = new qx.ui.basic.Atom(null, img.Repair.Storage).set({toolTipText: qxApp.tr("tnf:offense repair time"), toolTipIcon: img.Repair.Storage, alignX: "center", alignY: "middle", gap: 0, iconPosition: "top"});
var pRLabelOverall = new qx.ui.basic.Atom(null, img.Repair.Overall).set({toolTipText: qxApp.tr("tnf:repair points"), toolTipIcon: img.Repair.Overall, alignX: "center", alignY: "middle", gap: 0, iconPosition: "top"});
var pRLabelInf = new qx.ui.basic.Atom(null, img.Repair.Infantry).set({toolTipText: qxApp.tr("tnf:infantry repair title"), toolTipIcon: img.Repair.Infantry, alignX: "center", alignY: "middle", gap: 0, iconPosition: "top"});
var pRLabelVehi = new qx.ui.basic.Atom(null, img.Repair.Vehicle).set({toolTipText: qxApp.tr("tnf:vehicle repair title"), toolTipIcon: img.Repair.Vehicle, alignX: "center", alignY: "middle", gap: 0, iconPosition: "top"});
var pRLabelAir = new qx.ui.basic.Atom(null, img.Repair.Aircraft).set({toolTipText: qxApp.tr("tnf:aircraft repair title"), toolTipIcon: img.Repair.Aircraft, alignX: "center", alignY: "middle", gap: 0, iconPosition: "top"});
pRLabelStorage.getChildControl("icon").set({width: 18, height: 18, scale: true, alignY : "middle"});
pRLabelOverall.getChildControl("icon").set({width: 18, height: 18, scale: true, alignY : "middle"});
pRLabelInf.getChildControl("icon").set({width: 18, height: 18, scale: true, alignY : "middle"});
pRLabelVehi.getChildControl("icon").set({width: 18, height: 18, scale: true, alignY : "middle"});
pRLabelAir.getChildControl("icon").set({width: 18, height: 18, scale: true, alignY : "middle"});
RepairLabels.add(pRLabelStorage);
RepairLabels.add(pRLabelOverall);
RepairLabels.add(pRLabelInf);
RepairLabels.add(pRLabelVehi);
RepairLabels.add(pRLabelAir);
this.Repair.add(RepairLabels);
this.add(this.Repair);
//Loot Section//
var LootHeader = new qx.ui.container.Composite(new qx.ui.layout.VBox(5)).set({decorator: "pane-light-opaque"});
LootHeader.add(new qx.ui.basic.Label(qxApp.tr("tnf:lootable resources:")).set({alignX: "center", alignY: "middle", paddingBottom: 5, font: "font_size_13_bold"}));
this.add(LootHeader);
this.Loot = new qx.ui.container.Composite(new qx.ui.layout.HBox(-3)).set({decorator: "pane-light-plain", allowGrowX: true, marginLeft: 0, marginRight: 0});
var LootLabels = new qx.ui.container.Composite(new qx.ui.layout.VBox()).set({width: 29, padding: 5, allowGrowX: true, marginLeft: 0, marginRight: 0});
var LootLabelTib = new qx.ui.basic.Atom(null, img.Loot.Tiberium).set({toolTipText: qxApp.tr("tnf:tiberium"), toolTipIcon: img.Loot.Tiberium, alignX: "center", alignY: "middle", gap: 0, iconPosition: "top"});
var LootLabelCry = new qx.ui.basic.Atom(null, img.Loot.Crystal).set({toolTipText: qxApp.tr("tnf:crystals"), toolTipIcon: img.Loot.Crystal, alignX: "center", alignY: "middle", gap: 0, iconPosition: "top"});
var LootLabelCred = new qx.ui.basic.Atom(null, img.Loot.Credits).set({toolTipText: qxApp.tr("tnf:credits"), toolTipIcon: img.Loot.Credits, alignX: "center", alignY: "middle", gap: 0, iconPosition: "top"});
var LootLabelRP = new qx.ui.basic.Atom(null, img.Loot.RP).set({toolTipText: qxApp.tr("tnf:research points"), toolTipIcon: img.Loot.RP, alignX: "center", alignY: "middle", gap: 0, iconPosition: "top"});
var LootLabelTotal = new qx.ui.basic.Atom(null, img.Loot.Total).set({toolTipText: qxApp.tr("tnf:total") + " " + qxApp.tr("tnf:loot"), toolTipIcon: img.Loot.Total, alignX: "center", alignY: "middle", gap: 0, iconPosition: "top"});
LootLabelTib.getChildControl("icon").set({width: 18, height: 18, scale: true, alignY : "middle"});
LootLabelCry.getChildControl("icon").set({width: 18, height: 18, scale: true, alignY : "middle"});
LootLabelCred.getChildControl("icon").set({width: 18, height: 18, scale: true, alignY : "middle"});
LootLabelRP.getChildControl("icon").set({width: 18, height: 18, scale: true, alignY : "middle"});
LootLabelTotal.getChildControl("icon").set({width: 18, height: 18, scale: true, alignY : "middle"});
LootLabels.add(LootLabelTib);
LootLabels.add(LootLabelCry);
LootLabels.add(LootLabelCred);
LootLabels.add(LootLabelRP);
LootLabels.add(LootLabelTotal);
this.Loot.add(LootLabels);
this.add(this.Loot);
//Simulate Button//
var simButton = new qx.ui.container.Composite(new qx.ui.layout.HBox(5)).set({decorator: "pane-light-opaque", allowGrowX: true, marginLeft: 0, marginRight: 0, padding: 5});
this.add(simButton);
this.simStatBtn = new qx.ui.form.Button(qxApp.tr("tnf:update")).set({allowGrowX: false});
this.simStatBtn.setToolTipText(qxApp.tr("Updates Simulation Stats."));
this.simStatBtn.addListener("click", this.simulateStats, this);
this.simReplayBtn = new qx.ui.form.Button(qxApp.tr("tnf:show combat")).set({allowGrowX: false});
this.simReplayBtn.setToolTipText(qxApp.tr("tnf:show battle replay"));
this.simReplayBtn.addListener("click", this.doSimReplay, this);
this.simReplayBtn.setEnabled(false);
simButton.add(this.simStatBtn, {width: "50%"});
simButton.add(this.simReplayBtn, {width: "50%"});
//Add Header Events//
EnemyHealthHeader.addListener("click", function () {
if (this.EnemyHealth.isVisible()) this.EnemyHealth.exclude();
else this.EnemyHealth.show();
}, this);
RepairHeader.addListener("click", function () {
if (this.Repair.isVisible()) this.Repair.exclude();
else this.Repair.show();
}, this);
LootHeader.addListener("click", function () {
if (this.Loot.isVisible()) this.Loot.exclude();
else this.Loot.show();
}, this);
//Hide Sections
if (localStorage['hideHealth'] !== undefined) {
if (localStorage['hideHealth'] == "yes") this.EnemyHealth.exclude();
}
if (localStorage['hideRepair'] !== undefined) {
if (localStorage['hideRepair'] == "yes") this.Repair.exclude();
}
if (localStorage['hideLoot'] !== undefined) {
if (localStorage['hideLoot'] == "yes") this.Loot.exclude();
}
/**
* Setup Simulation Storage
*/
for (var i = 0; i < this.simViews; i++) {
this.sim[i] = new this.Simulation(i);
this.sim[i].Select(this.simSelected);
this.Battle.add(this.sim[i].Label.Battle.container, { flex : 1 });
this.EnemyHealth.add(this.sim[i].Label.EnemyHealth.container, { flex : 1 });
this.Repair.add(this.sim[i].Label.Repair.container, { flex : 1 });
this.Loot.add(this.sim[i].Label.Loot.container, { flex : 1 });
}
//Events
phe.cnc.Util.attachNetEvent(ClientLib.API.Battleground.GetInstance(), "OnSimulateBattleFinished", ClientLib.API.OnSimulateBattleFinished, this, this.__OnSimulateBattleFinished);
phe.cnc.Util.attachNetEvent(ClientLib.Vis.VisMain.GetInstance(), "ViewModeChange", ClientLib.Vis.ViewModeChange, this, this._onViewChanged);
phe.cnc.base.Timer.getInstance().addListener("uiTick", this._onTick, this);
} catch (e) {
console.log("Error setting up Simulator.StatWindow Constructor: ");
console.log(e.toString());
}
},
destruct: function () {},
members: {
Battle: null,
EnemyHealth: null,
Repair: null,
Loot: null,
simStatBtn: null,
simReplayBtn: null,
isSimStatButtonDisabled: null,
simSelected: 0,
simViews: 3,
sim: [],
Simulation: function (instance) {
try {
var simulated = false;
this.TargetCity = null;
this.OwnCity = null;
var Formation = null;
this.Result = null;
this.Label = {
Battle: {
container: new qx.ui.container.Composite(new qx.ui.layout.VBox()).set({width: 65, padding: 5, allowGrowX: true, marginLeft: 0, marginRight: 0, decorator: "pane-light-opaque"}),
Outcome: new qx.ui.basic.Atom("-", null).set({alignX: "center", alignY: "middle", gap: 0, iconPosition: "top", show: "label"}),
Duration: new qx.ui.basic.Label("-:--").set({alignX: "center", alignY: "middle"}),
OwnCity: new qx.ui.basic.Label("-").set({alignX: "center", alignY: "middle"})
},
EnemyHealth: {
container: new qx.ui.container.Composite(new qx.ui.layout.VBox()).set({width: 65, padding: 5, allowGrowX: true, marginLeft: 0, marginRight: 0, decorator: "pane-light-opaque"}),
Overall: new qx.ui.basic.Label("-").set({alignX: "right", alignY: "middle"}),
Base: new qx.ui.basic.Label("-").set({alignX: "right", alignY: "middle"}),
Defense: new qx.ui.basic.Label("-").set({alignX: "right", alignY: "middle"}),
CY: new qx.ui.basic.Label("-").set({alignX: "right", alignY: "middle"}),
DF: new qx.ui.basic.Label("-").set({alignX: "right", alignY: "middle"}),
CC: new qx.ui.basic.Label("-").set({alignX: "right", alignY: "middle"})
},
Repair: {
container: new qx.ui.container.Composite(new qx.ui.layout.VBox()).set({width: 65, padding: 5, allowGrowX: true, marginLeft: 0, marginRight: 0, decorator: "pane-light-opaque"}),
Storage: new qx.ui.basic.Label("-").set({alignX: "right", alignY: "middle"}),
Overall: new qx.ui.basic.Label("-").set({alignX: "right", alignY: "middle", rich: true}),
Inf: new qx.ui.basic.Label("-").set({alignX: "right", alignY: "middle"}),
Vehi: new qx.ui.basic.Label("-").set({alignX: "right", alignY: "middle"}),
Air: new qx.ui.basic.Label("-").set({alignX: "right", alignY: "middle"})
},
Loot: {
container: new qx.ui.container.Composite(new qx.ui.layout.VBox()).set({width: 65, padding: 5, allowGrowX: true, marginLeft: 0, marginRight: 0, decorator: "pane-light-opaque"}),
Tib: new qx.ui.basic.Label("-").set({alignX: "right", alignY: "middle"}),
Cry: new qx.ui.basic.Label("-").set({alignX: "right", alignY: "middle"}),
Cred: new qx.ui.basic.Label("-").set({alignX: "right", alignY: "middle"}),
RP: new qx.ui.basic.Label("-").set({alignX: "right", alignY: "middle"}),
Overall: new qx.ui.basic.Label("-").set({alignX: "right", alignY: "middle"})
}
};
var _StatsUnit = function () {
this.StartHealth = 0;
this.EndHealth = 0;
this.MaxHealth = 0;
this.Tib = 0;
this.Cry = 0;
this.RT = 0;
this.getHP = function () {
if (this.EndHealth == 0 && this.StartHealth == 0) return 0;
else if (this.MaxHealth == 0) return 100;
else return (this.EndHealth / this.MaxHealth) * 100;
};
this.getHPrel = function () {
if (this.StartHealth == 0) return 0;
else if (this.MaxHealth == 0) return -100;
else return ((this.StartHealth - this.EndHealth) / this.MaxHealth) * -100;
};
};
var _StatsLoot = function () {
this.Base = 0;
this.Battle = 0;
};
this.Stats = {
Battle: {
Outcome: 0,
Duration: 0,
OwnCity: ""
},
EnemyHealth: {
Overall: new _StatsUnit(),
Base: new _StatsUnit(),
Defense: new _StatsUnit(),
CY: new _StatsUnit(),
DF: new _StatsUnit(),
CC: new _StatsUnit()
},
Repair: {
Storage: 0,
Overall: new _StatsUnit(),
Inf: new _StatsUnit(),
Vehi: new _StatsUnit(),
Air: new _StatsUnit()
},
Loot: {
Tib: new _StatsLoot(),
Cry: new _StatsLoot(),
Cred: new _StatsLoot(),
RP: new _StatsLoot(),
Overall: new _StatsLoot()
}
};
this.getLootFromCurrentCity = function () {
try {
this.Stats.Loot.Tib.Base = 0;
this.Stats.Loot.Cry.Base = 0;
this.Stats.Loot.Cred.Base = 0;
this.Stats.Loot.RP.Base = 0;
this.Stats.Loot.Overall.Base = 0;
var loot = ClientLib.API.Battleground.GetInstance().GetLootFromCurrentCity();
for (var i = 0; i < loot.length; i++) {
this.Stats.Loot.Overall.Base += loot[i].Count;
switch (parseInt(loot[i].Type, 10)) {
case ClientLib.Base.EResourceType.Tiberium:
this.Stats.Loot.Tib.Base += loot[i].Count;
break;
case ClientLib.Base.EResourceType.Crystal:
this.Stats.Loot.Cry.Base += loot[i].Count;
break;
case ClientLib.Base.EResourceType.Gold:
this.Stats.Loot.Cred.Base += loot[i].Count;
break;
case ClientLib.Base.EResourceType.ResearchPoints:
this.Stats.Loot.RP.Base += loot[i].Count;
break;
}
}
} catch (e) {
console.log("Error Getting Loot from Current City");
console.log(e.toString());
}
};
this.setSimulation = function (data) {
simulated = true;
this.OwnCity = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCity();
this.Stats.Battle.OwnCity = this.OwnCity.get_Name();
this.saveFormation();
this.Result = [];
for (var i = 0; i < data.length; i++) this.Result.push(data[i].Value);
};
this.UpdateLabels = function () {
var qxApp = qx.core.Init.getApplication();
var formatTime = function (time) {
return phe.cnc.Util.getTimespanString(time);
};
var setRTLabelColor = function (label, number) {
if (number < 25) label.setTextColor("red");
else if (number < 75) label.setTextColor("orangered");
else label.setTextColor("darkgreen");
};
var setEHLabelColor = function (label, number) {
if (number < 25) label.setTextColor("darkgreen");
else if (number < 75) label.setTextColor("orangered");
else label.setTextColor("red");
};
if (simulated) {
//Battle.Outcome
switch (this.Stats.Battle.Outcome) {
case 1:
this.Label.Battle.Outcome.resetLabel();
this.Label.Battle.Outcome.set({ show: "icon" });
this.Label.Battle.Outcome.setIcon("FactionUI/icons/icon_reports_total_defeat.png");
this.Label.Battle.Outcome.setToolTipIcon("FactionUI/icons/icon_reports_total_defeat.png");
this.Label.Battle.Outcome.setToolTipText(qxApp.tr("tnf:total defeat"));
break;
case 2:
this.Label.Battle.Outcome.resetLabel();
this.Label.Battle.Outcome.set({ show: "icon" });
this.Label.Battle.Outcome.setIcon("FactionUI/icons/icon_reports_victory.png");
this.Label.Battle.Outcome.setToolTipIcon("FactionUI/icons/icon_reports_victory.png");
this.Label.Battle.Outcome.setToolTipText(qxApp.tr("tnf:victory"));
break;
case 3:
this.Label.Battle.Outcome.resetLabel();
this.Label.Battle.Outcome.set({ show: "icon" });
this.Label.Battle.Outcome.setIcon("FactionUI/icons/icon_reports_total_victory.png");
this.Label.Battle.Outcome.setToolTipIcon("FactionUI/icons/icon_reports_total_victory.png");
this.Label.Battle.Outcome.setToolTipText(qxApp.tr("tnf:total victory"));
break;
}
//Battle.Duration
this.Label.Battle.Duration.setValue(formatTime(this.Stats.Battle.Duration/1000));
//Battle.OwnCity
if (this.OwnCity != null) this.Stats.Battle.OwnCity = this.OwnCity.get_Name();
this.Label.Battle.OwnCity.setValue(this.Stats.Battle.OwnCity);
switch (localStorage['getEHSelection']) {
case "hp rel":
//EnemyHealth.Overall
this.Label.EnemyHealth.Overall.setValue(this.Stats.EnemyHealth.Overall.getHPrel().toFixed(2) + "%");
this.Label.EnemyHealth.Overall.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.EnemyHealth.Overall.RT) + "<br>" + qxApp.tr("tnf:tiberium") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.EnemyHealth.Overall.Tib) + "<br>" + qxApp.tr("tnf:crystals") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.EnemyHealth.Overall.Cry));
//EnemyHealth.Base
this.Label.EnemyHealth.Base.setValue(this.Stats.EnemyHealth.Base.getHPrel().toFixed(2) + "%");
this.Label.EnemyHealth.Base.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.EnemyHealth.Base.RT) + "<br>" + qxApp.tr("tnf:tiberium") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.EnemyHealth.Base.Tib));
//EnemyHealth.Defense
this.Label.EnemyHealth.Defense.setValue(this.Stats.EnemyHealth.Defense.getHPrel().toFixed(2) + "%");
this.Label.EnemyHealth.Defense.setToolTipText(qxApp.tr("tnf:tiberium") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.EnemyHealth.Defense.Tib) + "<br>" + qxApp.tr("tnf:crystals") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.EnemyHealth.Defense.Cry));
//EnemyHealth.CY
this.Label.EnemyHealth.CY.setValue(this.Stats.EnemyHealth.CY.getHPrel().toFixed(2) + "%");
this.Label.EnemyHealth.CY.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.EnemyHealth.CY.RT) + "<br>" + qxApp.tr("tnf:tiberium") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.EnemyHealth.CY.Tib));
//EnemyHealth.DF
this.Label.EnemyHealth.DF.setValue(this.Stats.EnemyHealth.DF.getHPrel().toFixed(2) + "%");
this.Label.EnemyHealth.DF.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.EnemyHealth.DF.RT) + "<br>" + qxApp.tr("tnf:tiberium") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.EnemyHealth.DF.Tib));
//EnemyHealth.CC
this.Label.EnemyHealth.CC.setValue(this.Stats.EnemyHealth.CC.getHPrel().toFixed(2) + "%");
this.Label.EnemyHealth.CC.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.EnemyHealth.CC.RT) + "<br>" + qxApp.tr("tnf:tiberium") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.EnemyHealth.CC.Tib));
break;
default: //"hp"
//EnemyHealth.Overall
this.Label.EnemyHealth.Overall.setValue(this.Stats.EnemyHealth.Overall.getHP().toFixed(2) + "%");
this.Label.EnemyHealth.Overall.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.EnemyHealth.Overall.RT) + "<br>" + qxApp.tr("tnf:tiberium") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.EnemyHealth.Overall.Tib) + "<br>" + qxApp.tr("tnf:crystals") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.EnemyHealth.Overall.Cry));
//EnemyHealth.Base
this.Label.EnemyHealth.Base.setValue(this.Stats.EnemyHealth.Base.getHP().toFixed(2) + "%");
this.Label.EnemyHealth.Base.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.EnemyHealth.Base.RT) + "<br>" + qxApp.tr("tnf:tiberium") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.EnemyHealth.Base.Tib));
//EnemyHealth.Defense
this.Label.EnemyHealth.Defense.setValue(this.Stats.EnemyHealth.Defense.getHP().toFixed(2) + "%");
this.Label.EnemyHealth.Defense.setToolTipText(qxApp.tr("tnf:tiberium") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.EnemyHealth.Defense.Tib) + "<br>" + qxApp.tr("tnf:crystals") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.EnemyHealth.Defense.Cry));
//EnemyHealth.CY
this.Label.EnemyHealth.CY.setValue(this.Stats.EnemyHealth.CY.getHP().toFixed(2) + "%");
this.Label.EnemyHealth.CY.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.EnemyHealth.CY.RT) + "<br>" + qxApp.tr("tnf:tiberium") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.EnemyHealth.CY.Tib));
//EnemyHealth.DF
this.Label.EnemyHealth.DF.setValue(this.Stats.EnemyHealth.DF.getHP().toFixed(2) + "%");
this.Label.EnemyHealth.DF.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.EnemyHealth.DF.RT) + "<br>" + qxApp.tr("tnf:tiberium") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.EnemyHealth.DF.Tib));
//EnemyHealth.CC
this.Label.EnemyHealth.CC.setValue(this.Stats.EnemyHealth.CC.getHP().toFixed(2) + "%");
this.Label.EnemyHealth.CC.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.EnemyHealth.CC.RT) + "<br>" + qxApp.tr("tnf:tiberium") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.EnemyHealth.CC.Tib));
break;
}
//EnemyHealth.Overall
setEHLabelColor(this.Label.EnemyHealth.Overall, this.Stats.EnemyHealth.Overall.getHP());
//EnemyHealth.Base
setEHLabelColor(this.Label.EnemyHealth.Base, this.Stats.EnemyHealth.Base.getHP());
//EnemyHealth.Defense
setEHLabelColor(this.Label.EnemyHealth.Defense, this.Stats.EnemyHealth.Defense.getHP());
//EnemyHealth.CY
setEHLabelColor(this.Label.EnemyHealth.CY, this.Stats.EnemyHealth.CY.getHP());
//EnemyHealth.DF
setEHLabelColor(this.Label.EnemyHealth.DF, this.Stats.EnemyHealth.DF.getHP());
//EnemyHealth.CC
setEHLabelColor(this.Label.EnemyHealth.CC, this.Stats.EnemyHealth.CC.getHP());
//Repair.Storage
if (this.OwnCity != null) this.Stats.Repair.Storage = Math.min(this.OwnCity.GetResourceCount(ClientLib.Base.EResourceType.RepairChargeInf), this.OwnCity.GetResourceCount(ClientLib.Base.EResourceType.RepairChargeVeh), this.OwnCity.GetResourceCount(ClientLib.Base.EResourceType.RepairChargeAir));
this.Label.Repair.Storage.setValue(phe.cnc.Util.getTimespanString(ClientLib.Data.MainData.GetInstance().get_Time().GetTimeSpan(this.Stats.Repair.Storage)));
this.Label.Repair.Storage.setTextColor(this.Stats.Repair.Storage > this.Stats.Repair.Overall.RT ? "darkgreen" : "red");
//Repair
switch (localStorage['getRTSelection']) {
case "cry":
//Repair.Overall
this.Label.Repair.Overall.setValue("<span style=\"text-shadow: 0 0 3pt;\">" + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Repair.Overall.Cry) + "</span>");
this.Label.Repair.Overall.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.Repair.Overall.RT) + "</br>" + qxApp.tr("tnf:health") + ": " + this.Stats.Repair.Overall.getHP().toFixed(2) + "%");
//Repair.Inf
this.Label.Repair.Inf.setValue(phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Repair.Inf.Cry));
this.Label.Repair.Inf.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.Repair.Inf.RT) + "</br>" + qxApp.tr("tnf:health") + ": " + this.Stats.Repair.Inf.getHP().toFixed(2) + "%");
//Repair.Vehi
this.Label.Repair.Vehi.setValue(phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Repair.Vehi.Cry));
this.Label.Repair.Vehi.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.Repair.Vehi.RT) + "</br>" + qxApp.tr("tnf:health") + ": " + this.Stats.Repair.Vehi.getHP().toFixed(2) + "%");
//Repair.Air
this.Label.Repair.Air.setValue(phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Repair.Air.Cry));
this.Label.Repair.Air.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.Repair.Air.RT) + "</br>" + qxApp.tr("tnf:health") + ": " + this.Stats.Repair.Air.getHP().toFixed(2) + "%");
break;
case "hp":
//Repair.Overall
this.Label.Repair.Overall.setValue("<span style=\"text-shadow: 0 0 3pt;\">" + this.Stats.Repair.Overall.getHP().toFixed(2) + "%</span>");
this.Label.Repair.Overall.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.Repair.Overall.RT) + "</br>" + qxApp.tr("tnf:crystals") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Repair.Overall.Cry));
//Repair.Inf
this.Label.Repair.Inf.setValue(this.Stats.Repair.Inf.getHP().toFixed(2) + "%");
this.Label.Repair.Inf.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.Repair.Inf.RT) + "</br>" + qxApp.tr("tnf:crystals") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Repair.Inf.Cry));
//Repair.Vehi
this.Label.Repair.Vehi.setValue(this.Stats.Repair.Vehi.getHP().toFixed(2) + "%");
this.Label.Repair.Vehi.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.Repair.Vehi.RT) + "</br>" + qxApp.tr("tnf:crystals") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Repair.Vehi.Cry));
//Repair.Air
this.Label.Repair.Air.setValue(this.Stats.Repair.Air.getHP().toFixed(2) + "%");
this.Label.Repair.Air.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.Repair.Air.RT) + "</br>" + qxApp.tr("tnf:crystals") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Repair.Air.Cry));
break;
case "hp rel":
//Repair.Overall
this.Label.Repair.Overall.setValue("<span style=\"text-shadow: 0 0 3pt;\">" + this.Stats.Repair.Overall.getHPrel().toFixed(2) + "%</span>");
this.Label.Repair.Overall.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.Repair.Overall.RT) + "</br>" + qxApp.tr("tnf:crystals") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Repair.Overall.Cry));
//Repair.Inf
this.Label.Repair.Inf.setValue(this.Stats.Repair.Inf.getHPrel().toFixed(2) + "%");
this.Label.Repair.Inf.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.Repair.Inf.RT) + "</br>" + qxApp.tr("tnf:crystals") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Repair.Inf.Cry));
//Repair.Vehi
this.Label.Repair.Vehi.setValue(this.Stats.Repair.Vehi.getHPrel().toFixed(2) + "%");
this.Label.Repair.Vehi.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.Repair.Vehi.RT) + "</br>" + qxApp.tr("tnf:crystals") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Repair.Vehi.Cry));
//Repair.Air
this.Label.Repair.Air.setValue(this.Stats.Repair.Air.getHPrel().toFixed(2) + "%");
this.Label.Repair.Air.setToolTipText(qxApp.tr("tnf:repair points") + ": " + formatTime(this.Stats.Repair.Air.RT) + "</br>" + qxApp.tr("tnf:crystals") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Repair.Air.Cry));
break;
default: //"rt"
//Repair.Overall
this.Label.Repair.Overall.setValue("<span style=\"text-shadow: 0 0 3pt;\">" + formatTime(this.Stats.Repair.Overall.RT) + "</span>");
this.Label.Repair.Overall.setToolTipText(qxApp.tr("tnf:crystals") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Repair.Overall.Cry) + "</br>" + qxApp.tr("tnf:health") + ": " + this.Stats.Repair.Overall.getHP().toFixed(2) + "%");
//Repair.Inf
this.Label.Repair.Inf.setValue(formatTime(this.Stats.Repair.Inf.RT));
this.Label.Repair.Inf.setToolTipText(qxApp.tr("tnf:crystals") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Repair.Inf.Cry) + "</br>" + qxApp.tr("tnf:health") + ": " + this.Stats.Repair.Inf.getHP().toFixed(2) + "%");
//Repair.Vehi
this.Label.Repair.Vehi.setValue(formatTime(this.Stats.Repair.Vehi.RT));
this.Label.Repair.Vehi.setToolTipText(qxApp.tr("tnf:crystals") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Repair.Vehi.Cry) + "</br>" + qxApp.tr("tnf:health") + ": " + this.Stats.Repair.Vehi.getHP().toFixed(2) + "%");
//Repair.Air
this.Label.Repair.Air.setValue(formatTime(this.Stats.Repair.Air.RT));
this.Label.Repair.Air.setToolTipText(qxApp.tr("tnf:crystals") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Repair.Air.Cry) + "</br>" + qxApp.tr("tnf:health") + ": " + this.Stats.Repair.Air.getHP().toFixed(2) + "%");
break;
}
//Repair.Overall
setRTLabelColor(this.Label.Repair.Overall, this.Stats.Repair.Overall.getHP());
//Repair.Inf
setRTLabelColor(this.Label.Repair.Inf, this.Stats.Repair.Inf.getHP());
if (this.Stats.Repair.Inf.RT === this.Stats.Repair.Overall.RT && this.Stats.Repair.Inf.getHP() < 100) this.Label.Repair.Inf.setTextColor("black");
//Repair.Vehi
setRTLabelColor(this.Label.Repair.Vehi, this.Stats.Repair.Vehi.getHP());
if (this.Stats.Repair.Vehi.RT === this.Stats.Repair.Overall.RT && this.Stats.Repair.Vehi.getHP() < 100) this.Label.Repair.Vehi.setTextColor("black");
//Repair.Air
setRTLabelColor(this.Label.Repair.Air, this.Stats.Repair.Air.getHP());
if (this.Stats.Repair.Air.RT === this.Stats.Repair.Overall.RT && this.Stats.Repair.Air.getHP() < 100) this.Label.Repair.Air.setTextColor("black");
//Loot.Tib
this.Label.Loot.Tib.setToolTipText((this.Stats.Loot.Tib.Battle / this.Stats.Loot.Tib.Base * 100).toFixed(2) + "%<br>" + qxApp.tr("tnf:base") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Loot.Tib.Base));
this.Label.Loot.Tib.setValue(phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Loot.Tib.Battle));
//Loot.Cry
this.Label.Loot.Cry.setToolTipText((this.Stats.Loot.Cry.Battle / this.Stats.Loot.Cry.Base * 100).toFixed(2) + "%<br>" + qxApp.tr("tnf:base") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Loot.Cry.Base));
this.Label.Loot.Cry.setValue(phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Loot.Cry.Battle));
//Loot.Cred
this.Label.Loot.Cred.setToolTipText((this.Stats.Loot.Cred.Battle / this.Stats.Loot.Cred.Base * 100).toFixed(2) + "%<br>" + qxApp.tr("tnf:base") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Loot.Cred.Base));
this.Label.Loot.Cred.setValue(phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Loot.Cred.Battle));
//Loot.RP
this.Label.Loot.RP.setToolTipText((this.Stats.Loot.RP.Battle / this.Stats.Loot.RP.Base * 100).toFixed(2) + "%<br>" + qxApp.tr("tnf:base") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Loot.RP.Base));
this.Label.Loot.RP.setValue(phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Loot.RP.Battle));
//Loot.Overall
this.Label.Loot.Overall.setToolTipText((this.Stats.Loot.Overall.Battle / this.Stats.Loot.Overall.Base * 100).toFixed(2) + "%<br>" + qxApp.tr("tnf:base") + ": " + phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Loot.Overall.Base));
this.Label.Loot.Overall.setValue(phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Loot.Overall.Battle));
} else {
if (this.Stats.Loot.Tib.Base > 0 || this.Stats.Loot.Cry.Base > 0 || this.Stats.Loot.Cred.Base > 0 || this.Stats.Loot.RP.Base > 0 || this.Stats.Loot.Overall.Base > 0) {
//Loot.Tib
this.Label.Loot.Tib.resetToolTipText();
this.Label.Loot.Tib.setValue(phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Loot.Tib.Base));
//Loot.Cry
this.Label.Loot.Cry.resetToolTipText();
this.Label.Loot.Cry.setValue(phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Loot.Cry.Base));
//Loot.Cred
this.Label.Loot.Cred.resetToolTipText();
this.Label.Loot.Cred.setValue(phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Loot.Cred.Base));
//Loot.RP
this.Label.Loot.RP.resetToolTipText();
this.Label.Loot.RP.setValue(phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Loot.RP.Base));
//Loot.Overall
this.Label.Loot.Overall.resetToolTipText();
this.Label.Loot.Overall.setValue(phe.cnc.gui.util.Numbers.formatNumbersCompact(this.Stats.Loot.Overall.Base));
}
}
};
this.ResetStats = function () {
this.Stats.Battle.Outcome = 0;
this.Stats.Battle.Duration = 0;
this.Stats.Battle.OwnCity = "";
this.Stats.EnemyHealth.Overall = new _StatsUnit();
this.Stats.EnemyHealth.Base = new _StatsUnit();
this.Stats.EnemyHealth.Defense = new _StatsUnit();
this.Stats.EnemyHealth.CY = new _StatsUnit();
this.Stats.EnemyHealth.DF = new _StatsUnit();
this.Stats.EnemyHealth.CC = new _StatsUnit();
this.Stats.Repair.Storage = 0;
this.Stats.Repair.Overall = new _StatsUnit();
this.Stats.Repair.Inf = new _StatsUnit();
this.Stats.Repair.Vehi = new _StatsUnit();
this.Stats.Repair.Air = new _StatsUnit();
this.Stats.Loot.Tib.Battle = 0;
this.Stats.Loot.Cry.Battle = 0;
this.Stats.Loot.Cred.Battle = 0;
this.Stats.Loot.RP.Battle = 0;
this.Stats.Loot.Overall.Battle = 0;
};
this.ResetLabels = function () {
this.Label.Battle.Outcome.resetIcon();
this.Label.Battle.Outcome.resetToolTipIcon();
this.Label.Battle.Outcome.resetToolTipText();
this.Label.Battle.Outcome.setShow("label");
this.Label.Battle.Outcome.setLabel("-");
this.Label.Battle.Duration.setValue("-:--");
this.Label.Battle.OwnCity.setValue("-");
this.Label.EnemyHealth.Overall.setValue("-");
this.Label.EnemyHealth.Overall.resetToolTipText();
this.Label.EnemyHealth.Overall.resetTextColor();
this.Label.EnemyHealth.Base.setValue("-");
this.Label.EnemyHealth.Base.resetToolTipText();
this.Label.EnemyHealth.Base.resetTextColor();
this.Label.EnemyHealth.Defense.setValue("-");
this.Label.EnemyHealth.Defense.resetToolTipText();
this.Label.EnemyHealth.Defense.resetTextColor();
this.Label.EnemyHealth.CY.setValue("-");
this.Label.EnemyHealth.CY.resetToolTipText();
this.Label.EnemyHealth.CY.resetTextColor();
this.Label.EnemyHealth.DF.setValue("-");
this.Label.EnemyHealth.DF.resetToolTipText();
this.Label.EnemyHealth.DF.resetTextColor();
this.Label.EnemyHealth.CC.setValue("-");
this.Label.EnemyHealth.CC.resetToolTipText();
this.Label.EnemyHealth.CC.resetTextColor();
this.Label.Repair.Storage.setValue("-");
this.Label.Repair.Storage.resetToolTipText();
this.Label.Repair.Storage.resetTextColor();
this.Label.Repair.Overall.setValue("-");
this.Label.Repair.Overall.resetToolTipText();
this.Label.Repair.Overall.resetTextColor();
this.Label.Repair.Inf.setValue("-");
this.Label.Repair.Inf.resetToolTipText();
this.Label.Repair.Inf.resetTextColor();
this.Label.Repair.Vehi.setValue("-");
this.Label.Repair.Vehi.resetToolTipText();
this.Label.Repair.Vehi.resetTextColor();
this.Label.Repair.Air.setValue("-");
this.Label.Repair.Air.resetToolTipText();
this.Label.Repair.Air.resetTextColor();
this.Label.Loot.Tib.setValue("-");
this.Label.Loot.Tib.resetToolTipText();
this.Label.Loot.Tib.resetTextColor();
this.Label.Loot.Cry.setValue("-");
this.Label.Loot.Cry.resetToolTipText();
this.Label.Loot.Cry.resetTextColor();
this.Label.Loot.Cred.setValue("-");
this.Label.Loot.Cred.resetToolTipText();
this.Label.Loot.Cred.resetTextColor();
this.Label.Loot.RP.setValue("-");
this.Label.Loot.RP.resetToolTipText();
this.Label.Loot.RP.resetTextColor();
this.Label.Loot.Overall.setValue("-");
this.Label.Loot.Overall.resetToolTipText();
this.Label.Loot.Overall.resetTextColor();
};
this.Reset = function () {
var ownCity = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCity();
if (this.TargetCity === null || ownCity.get_CityArmyFormationsManager().get_CurrentTargetBaseId() != this.TargetCity.get_Id()) {
simulated = false;
this.OwnCity = null;
this.TargetCity = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCity();
ownCity.get_CityArmyFormationsManager().set_CurrentTargetBaseId(this.TargetCity.get_Id());
this.ResetStats();
this.ResetLabels();
// this.getLootFromCurrentCity();
}
};
this.Select = function (selected) {
if (selected == instance) {
var j = "pane-light-opaque";
var k = 1;
} else {
var j = "pane-light-plain";
var k = 0.6;
}
this.Label.Battle.container.set({ decorator: j, opacity: k });
this.Label.EnemyHealth.container.set({ decorator: j, opacity: k });
this.Label.Repair.container.set({ decorator: j, opacity: k });
this.Label.Loot.container.set({ decorator: j, opacity: k });
};
this.saveFormation = function () {
try {
Formation = [];
var unitList = Simulator.getInstance().getCityPreArmyUnits().get_ArmyUnits().l;
for (var i = 0; i < unitList.length; i++) {
var unit = unitList[i];
var unitInfo = {};
unitInfo.x = unit.get_CoordX();
unitInfo.y = unit.get_CoordY();
unitInfo.id = unit.get_Id();
unitInfo.enabled = unit.get_Enabled();
Formation.push(unitInfo);
}
} catch (e) {
console.log("Error Saving Stat Formation");
console.log(e.toString());
}
};
this.loadFormation = function () {
try {
var cities = ClientLib.Data.MainData.GetInstance().get_Cities();
cities.set_CurrentOwnCityId(this.OwnCity.get_Id());
Simulator.getInstance().restoreFormation(Formation);
} catch (e) {
console.log("Error loading Stat Formation");
console.log(e.toString());
}
};
// Setup icons
this.Label.Battle.Outcome.getChildControl("icon").set({width: 18, height: 18, scale: true, alignY : "middle"});
// Setup containers
this.Label.Battle.container.add(this.Label.Battle.Outcome);
this.Label.Battle.container.add(this.Label.Battle.Duration);
this.Label.Battle.container.add(this.Label.Battle.OwnCity);
this.Label.EnemyHealth.container.add(this.Label.EnemyHealth.Overall);
this.Label.EnemyHealth.container.add(this.Label.EnemyHealth.Base);
this.Label.EnemyHealth.container.add(this.Label.EnemyHealth.Defense);
this.Label.EnemyHealth.container.add(this.Label.EnemyHealth.CY);
this.Label.EnemyHealth.container.add(this.Label.EnemyHealth.DF);
this.Label.EnemyHealth.container.add(this.Label.EnemyHealth.CC);
this.Label.Repair.container.add(this.Label.Repair.Storage);
this.Label.Repair.container.add(this.Label.Repair.Overall);
this.Label.Repair.container.add(this.Label.Repair.Inf);
this.Label.Repair.container.add(this.Label.Repair.Vehi);
this.Label.Repair.container.add(this.Label.Repair.Air);
this.Label.Loot.container.add(this.Label.Loot.Tib);
this.Label.Loot.container.add(this.Label.Loot.Cry);
this.Label.Loot.container.add(this.Label.Loot.Cred);
this.Label.Loot.container.add(this.Label.Loot.RP);
this.Label.Loot.container.add(this.Label.Loot.Overall);
// Setup Events
this.Label.Battle.container.addListener("click", function () { Simulator.StatWindow.getInstance().simSelected = instance; for (var i = 0; i < Simulator.StatWindow.getInstance().sim.length; i++) { Simulator.StatWindow.getInstance().sim[i].Select(instance); } }, this);
this.Label.EnemyHealth.container.addListener("click", function () { Simulator.StatWindow.getInstance().simSelected = instance; for (var i = 0; i < Simulator.StatWindow.getInstance().sim.length; i++) { Simulator.StatWindow.getInstance().sim[i].Select(instance); } }, this);
this.Label.Repair.container.addListener("click", function () { Simulator.StatWindow.getInstance().simSelected = instance; for (var i = 0; i < Simulator.StatWindow.getInstance().sim.length; i++) { Simulator.StatWindow.getInstance().sim[i].Select(instance); } }, this);
this.Label.Loot.container.addListener("click", function () { Simulator.StatWindow.getInstance().simSelected = instance; for (var i = 0; i < Simulator.StatWindow.getInstance().sim.length; i++) { Simulator.StatWindow.getInstance().sim[i].Select(instance); } }, this);
this.Label.Battle.container.addListener("dblclick", function () { this.loadFormation(); }, this);
this.Label.EnemyHealth.container.addListener("dblclick", function () { this.loadFormation(); }, this);
this.Label.Repair.container.addListener("dblclick", function () { this.loadFormation(); }, this);
this.Label.Loot.container.addListener("dblclick", function () { this.loadFormation(); }, this);
this.Label.EnemyHealth.container.addListener("contextmenu", function () {
if (localStorage['getEHSelection'] == "hp rel") localStorage['getEHSelection'] = "hp";
else localStorage['getEHSelection'] = "hp rel";
}, this);
this.Label.Repair.container.addListener("contextmenu", function () {
if (localStorage['getRTSelection'] == "cry") localStorage['getRTSelection'] = "rt";
else if (localStorage['getRTSelection'] == "hp") localStorage['getRTSelection'] = "hp rel";
else if (localStorage['getRTSelection'] == "hp rel") localStorage['getRTSelection'] = "cry";
else localStorage['getRTSelection'] = "hp";
}, this);
} catch (e) {
console.log("Error init Simulation");
console.log(e.toString());
}
},
simulateStats: function () {
var city = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCity();
if (city != null) {
ClientLib.Vis.VisMain.GetInstance().get_Battleground().Reset();
Simulator.getInstance().isSimulation = true;
Simulator.getInstance().saveTempFormation();
localStorage['ta_sim_last_city'] = city.get_Id();
var ownCity = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCity();
ownCity.get_CityArmyFormationsManager().set_CurrentTargetBaseId(city.get_Id());
ClientLib.API.Battleground.GetInstance().SimulateBattle();
}
},
doSimReplay: function () {
try {
Simulator.getInstance().isSimulation = true;
var app = qx.core.Init.getApplication();
app.getPlayArea().setView(ClientLib.Data.PlayerAreaViewMode.pavmCombatReplay, localStorage['ta_sim_last_city'], 0, 0);
if (localStorage['autoSimulate'] !== undefined) {
if (localStorage['autoSimulate'] == "yes") {
var speed = localStorage['simulateSpeed'];
setTimeout(function () {
var battleground = ClientLib.Vis.VisMain.GetInstance().get_Battleground();
battleground.RestartReplay();
battleground.set_ReplaySpeed(parseInt(speed, 10));
}, 1000);
}
}
} catch (e) {
console.log("Error attempting to show Simulation Replay");
console.log(e.toString());
}
},
calculateRepairCosts: function (id, level, sHealth, eHealth, mHealth) {
var repairCosts = { RT: 0, Cry: 0, Tib: 0 };
var dmgRatio = 1;
if (sHealth != eHealth) {
dmgRatio = (sHealth - eHealth) / mHealth;
var costs = ClientLib.API.Util.GetUnitRepairCosts(level, id, dmgRatio);
for (var idx = 0; idx < costs.length; idx++) {
var uCosts = costs[idx];
var cType = parseInt(uCosts.Type, 10);
switch (cType) {
case ClientLib.Base.EResourceType.Tiberium:
repairCosts.Tib += uCosts.Count;
break;
case ClientLib.Base.EResourceType.Crystal:
repairCosts.Cry += uCosts.Count;
break;
case ClientLib.Base.EResourceType.RepairChargeBase:
case ClientLib.Base.EResourceType.RepairChargeInf:
case ClientLib.Base.EResourceType.RepairChargeVeh:
case ClientLib.Base.EResourceType.RepairChargeAir:
repairCosts.RT += uCosts.Count;
break;
}
}
// Fix Repairtime for Forgotten
switch (ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCity().get_CityFaction()) {
case ClientLib.Base.EFactionType.GDIFaction:
case ClientLib.Base.EFactionType.NODFaction:
break;
default:
repairCosts.RT = dmgRatio * 3600;
break;
}
}
return repairCosts;
},
_onTick: function () {
for (var i = 0; i < this.sim.length; i++) this.sim[i].UpdateLabels();
},
_onViewChanged: function (oldMode, newMode) {
if (newMode == ClientLib.Vis.Mode.CombatSetup && oldMode != ClientLib.Vis.Mode.Battleground) {
this.getLootFromCurrentCity();
// Auto open StatWindow
if (localStorage['autoOpenStat'] !== undefined && localStorage['autoOpenStat'] == "yes") this.open();
else {
this.open();
localStorage['autoOpenStat'] = "yes"; // Default
}
} else if (newMode != ClientLib.Vis.Mode.CombatSetup && newMode != ClientLib.Vis.Mode.Battleground) {
this.close();
}
},
__OnSimulateBattleFinished: function (data) {
//Disable Simulate Button
if (this.isSimStatButtonDisabled == false) {
this.disableSimulateStatButtonTimer(10000);
if (typeof Simulator.getInstance().disableSimulateButtonTimer === "function") {
Simulator.getInstance().disableSimulateButtonTimer(10000);
}
}
if (this.simReplayBtn.getEnabled() == false) this.simReplayBtn.setEnabled(true);
this.sim[this.simSelected].setSimulation(data);
this.calcHealth(this.sim[this.simSelected]);
this.calcLoot(this.sim[this.simSelected]);
this.getBattleDuration(this.sim[this.simSelected]);
},
calcHealth: function (sim) {
try {
sim.ResetStats();
var costs = {};
var targetunits = [];
var ownunits = [];
for (var i = 0; i < sim.Result.length; i++) {
var unit = ClientLib.Res.ResMain.GetInstance().GetUnit_Obj(sim.Result[i].t);
switch (unit.pt) {
case ClientLib.Base.EPlacementType.Structure:
case ClientLib.Base.EPlacementType.Defense:
targetunits.push(sim.Result[i]);
break;
case ClientLib.Base.EPlacementType.Offense:
ownunits.push(sim.Result[i]);
break;
}
}
ClientLib.Data.MainData.GetInstance().get_Cities().set_CurrentCityId(sim.TargetCity.get_Id());
for (var i = 0; i < targetunits.length; i++) {
var unitData = targetunits[i];
var unitMDBID = unitData.t;
var unit = ClientLib.Res.ResMain.GetInstance().GetUnit_Obj(unitMDBID);
var unitLevel = unitData.l;
var unitStartHealth = Math.floor(unitData.sh);
var unitEndHealth = Math.floor(unitData.h);
var unitMaxHealth = Math.floor((ClientLib.API.Util.GetUnitMaxHealthByLevel(unitLevel, unit, false)) * 16);
var unitPlacementType = unit.pt; // ClientLib.Base.EPlacementType
var unitMovementType = unit.mt; // ClientLib.Base.EUnitMovementType
switch (sim.TargetCity.get_CityFaction()) {
case ClientLib.Base.EFactionType.GDIFaction:
case ClientLib.Base.EFactionType.NODFaction:
unitMaxHealth = Math.floor((ClientLib.API.Util.GetUnitMaxHealthByLevel(unitLevel, unit, true)) * 16);
break;
}
costs = this.calculateRepairCosts(unitMDBID, unitLevel, unitStartHealth, unitEndHealth, unitMaxHealth);
switch (unitPlacementType) {
case ClientLib.Base.EPlacementType.Structure:
sim.Stats.EnemyHealth.Overall.StartHealth += unitStartHealth;
sim.Stats.EnemyHealth.Overall.EndHealth += unitEndHealth;
sim.Stats.EnemyHealth.Overall.MaxHealth += unitMaxHealth;
sim.Stats.EnemyHealth.Overall.RT += costs.RT;
sim.Stats.EnemyHealth.Overall.Tib += costs.Tib;
sim.Stats.EnemyHealth.Overall.Cry += costs.Cry;
sim.Stats.EnemyHealth.Base.StartHealth += unitStartHealth;
sim.Stats.EnemyHealth.Base.EndHealth += unitEndHealth;
sim.Stats.EnemyHealth.Base.MaxHealth += unitMaxHealth;
sim.Stats.EnemyHealth.Base.RT += costs.RT;
sim.Stats.EnemyHealth.Base.Tib += costs.Tib;
sim.Stats.EnemyHealth.Base.Cry += costs.Cry;
switch (unitMDBID) {
case 112: // GDI_Construction Yard
case 151: // NOD_Construction Yard
case 177: // FOR_Construction Yard
case 233: // FOR_Fortress_BASE_Construction Yard
sim.Stats.EnemyHealth.CY.StartHealth += unitStartHealth;
sim.Stats.EnemyHealth.CY.EndHealth += unitEndHealth;
sim.Stats.EnemyHealth.CY.MaxHealth += unitMaxHealth;
sim.Stats.EnemyHealth.CY.RT += costs.RT;
sim.Stats.EnemyHealth.CY.Tib += costs.Tib;
sim.Stats.EnemyHealth.CY.Cry += costs.Cry;
break;
case 131: // GDI_Defense Facility
case 158: // NOD_Defense Facility
case 195: // FOR_Defense Facility
sim.Stats.EnemyHealth.DF.StartHealth += unitStartHealth;
sim.Stats.EnemyHealth.DF.EndHealth += unitEndHealth;
sim.Stats.EnemyHealth.DF.MaxHealth += unitMaxHealth;
sim.Stats.EnemyHealth.DF.RT += costs.RT;
sim.Stats.EnemyHealth.DF.Tib += costs.Tib;
sim.Stats.EnemyHealth.DF.Cry += costs.Cry;
break;
case 111: // GDI_Command Center
case 159: // NOD_Command Post
sim.Stats.EnemyHealth.CC.StartHealth += unitStartHealth;
sim.Stats.EnemyHealth.CC.EndHealth += unitEndHealth;
sim.Stats.EnemyHealth.CC.MaxHealth += unitMaxHealth;
sim.Stats.EnemyHealth.CC.RT += costs.RT;
sim.Stats.EnemyHealth.CC.Tib += costs.Tib;
sim.Stats.EnemyHealth.CC.Cry += costs.Cry;
break;
}
break;
case ClientLib.Base.EPlacementType.Defense:
sim.Stats.EnemyHealth.Overall.StartHealth += unitStartHealth;
sim.Stats.EnemyHealth.Overall.EndHealth += unitEndHealth;
sim.Stats.EnemyHealth.Overall.MaxHealth += unitMaxHealth;
sim.Stats.EnemyHealth.Overall.Tib += costs.Tib;
sim.Stats.EnemyHealth.Overall.Cry += costs.Cry;
sim.Stats.EnemyHealth.Defense.StartHealth += unitStartHealth;
sim.Stats.EnemyHealth.Defense.EndHealth += unitEndHealth;
sim.Stats.EnemyHealth.Defense.MaxHealth += unitMaxHealth;
sim.Stats.EnemyHealth.Defense.Tib += costs.Tib;
sim.Stats.EnemyHealth.Defense.Cry += costs.Cry;
break;
}
}
ClientLib.Data.MainData.GetInstance().get_Cities().set_CurrentCityId(sim.OwnCity.get_Id());
for (var i = 0; i < ownunits.length; i++) {
var unitData = ownunits[i];
var unitMDBID = unitData.t;
var unit = ClientLib.Res.ResMain.GetInstance().GetUnit_Obj(unitMDBID);
var unitLevel = unitData.l;
var unitStartHealth = Math.floor(unitData.sh);
var unitEndHealth = Math.floor(unitData.h);
var unitMaxHealth = Math.floor((ClientLib.API.Util.GetUnitMaxHealthByLevel(unitLevel, unit, false)) * 16);
var unitPlacementType = unit.pt; // ClientLib.Base.EPlacementType
var unitMovementType = unit.mt; // ClientLib.Base.EUnitMovementType
costs = this.calculateRepairCosts(unitMDBID, unitLevel, unitStartHealth, unitEndHealth, unitMaxHealth);
switch (unitPlacementType) {
case ClientLib.Base.EPlacementType.Offense:
sim.Stats.Repair.Overall.StartHealth += unitStartHealth;
sim.Stats.Repair.Overall.EndHealth += unitEndHealth;
sim.Stats.Repair.Overall.MaxHealth += unitMaxHealth;
sim.Stats.Repair.Overall.Tib += costs.Tib;
sim.Stats.Repair.Overall.Cry += costs.Cry;
switch (unitMovementType) {
case ClientLib.Base.EUnitMovementType.Feet:
sim.Stats.Repair.Inf.StartHealth += unitStartHealth;
sim.Stats.Repair.Inf.EndHealth += unitEndHealth;
sim.Stats.Repair.Inf.MaxHealth += unitMaxHealth;
sim.Stats.Repair.Inf.RT += costs.RT;
sim.Stats.Repair.Inf.Tib += costs.Tib;
sim.Stats.Repair.Inf.Cry += costs.Cry;
break;
case ClientLib.Base.EUnitMovementType.Wheel:
case ClientLib.Base.EUnitMovementType.Track:
sim.Stats.Repair.Vehi.StartHealth += unitStartHealth;
sim.Stats.Repair.Vehi.EndHealth += unitEndHealth;
sim.Stats.Repair.Vehi.MaxHealth += unitMaxHealth;
sim.Stats.Repair.Vehi.RT += costs.RT;
sim.Stats.Repair.Vehi.Tib += costs.Tib;
sim.Stats.Repair.Vehi.Cry += costs.Cry;
break;
case ClientLib.Base.EUnitMovementType.Air:
case ClientLib.Base.EUnitMovementType.Air2:
sim.Stats.Repair.Air.StartHealth += unitStartHealth;
sim.Stats.Repair.Air.EndHealth += unitEndHealth;
sim.Stats.Repair.Air.MaxHealth += unitMaxHealth;
sim.Stats.Repair.Air.RT += costs.RT;
sim.Stats.Repair.Air.Tib += costs.Tib;
sim.Stats.Repair.Air.Cry += costs.Cry;
break;
}
break;
}
}
ClientLib.Data.MainData.GetInstance().get_Cities().set_CurrentCityId(sim.TargetCity.get_Id());
//Set Repair Overall RT
sim.Stats.Repair.Overall.RT = Math.max(sim.Stats.Repair.Inf.RT, sim.Stats.Repair.Vehi.RT, sim.Stats.Repair.Air.RT);
//Set Battle Outcome
if (sim.Stats.Repair.Overall.EndHealth === 0) sim.Stats.Battle.Outcome = 1;
else if (sim.Stats.EnemyHealth.CY.EndHealth === 0) sim.Stats.Battle.Outcome = 3;
else sim.Stats.Battle.Outcome = 2;
} catch (e) {
console.log("Error Getting Player Unit Damage");
console.log(e.toString());
}
},
calcLoot: function (sim) {
try {
var Ents = (sim.Result);
var lootArray = { 1: 0, 2: 0, 3: 0, 6: 0 };
var i, x, y, unit, Entity , mod = -1, unitMaxHealth = 0;
for (y = 0; y < 16; y++) {
for (x = 8; x >= 0; x--) {
if (y < 8) {
var width = ClientLib.Vis.VisMain.GetInstance().get_City().get_GridWidth();
var height = ClientLib.Vis.VisMain.GetInstance().get_City().get_GridHeight();
} else {
var width = ClientLib.Vis.VisMain.GetInstance().get_DefenseSetup().get_GridWidth();
var height = ClientLib.Vis.VisMain.GetInstance().get_DefenseSetup().get_GridHeight();
}
Entity = ClientLib.Vis.VisMain.GetInstance().GetObjectFromPosition(((x * width) + (width / 2)), ((y * height) + (height / 2)));
if (Entity !== null) {
for (i = 0; i < Ents.length; i++) {
unit = ClientLib.Res.ResMain.GetInstance().GetUnit_Obj(Ents[i].t);
switch (sim.TargetCity.get_CityFaction()) {
case ClientLib.Base.EFactionType.GDIFaction:
case ClientLib.Base.EFactionType.NODFaction:
unitMaxHealth = Math.floor((ClientLib.API.Util.GetUnitMaxHealthByLevel(Ents[i].l, unit, true)) * 16);
break;
default:
unitMaxHealth = Math.floor((ClientLib.API.Util.GetUnitMaxHealthByLevel(Ents[i].l, unit, false)) * 16);
break;
}
mod = (Ents[i].sh - Ents[i].h) / unitMaxHealth;
if (Entity.get_VisObjectType() == ClientLib.Vis.VisObject.EObjectType.CityBuildingType && Ents[i].t == Entity.get_BuildingDetails().get_MdbUnitId() && Ents[i].l == Entity.get_BuildingLevel()) {
var reqs = Entity.get_BuildingDetails().get_UnitLevelRepairRequirements();
for (i = 0; i < reqs.length; i++) lootArray[reqs[i].Type] += Math.floor(mod * reqs[i].Count);
Ents.splice(i, 1);
break;
}
if (Entity.get_VisObjectType() == ClientLib.Vis.VisObject.EObjectType.DefenseUnitType && Ents[i].t == Entity.get_UnitDetails().get_MdbUnitId() && Ents[i].l == Entity.get_UnitLevel()) {
var reqs = Entity.get_UnitDetails().get_UnitLevelRepairRequirements();
for (i = 0; i < reqs.length; i++) lootArray[reqs[i].Type] += Math.floor(mod * reqs[i].Count);
Ents.splice(i, 1);
break;
}
}
}
}
}
var totalLoot = lootArray[1] + lootArray[2] + lootArray[3] + lootArray[6];
if (sim.Stats.Battle.Outcome === 3) {
sim.Stats.Loot.Overall.Battle = sim.Stats.Loot.Overall.Base;
sim.Stats.Loot.Tib.Battle = sim.Stats.Loot.Tib.Base;
sim.Stats.Loot.Cry.Battle = sim.Stats.Loot.Cry.Base;
sim.Stats.Loot.Cred.Battle = sim.Stats.Loot.Cred.Base;
sim.Stats.Loot.RP.Battle = sim.Stats.Loot.RP.Base;
} else {
sim.Stats.Loot.Overall.Battle = totalLoot;
sim.Stats.Loot.Tib.Battle = lootArray[1];
sim.Stats.Loot.Cry.Battle = lootArray[2];
sim.Stats.Loot.Cred.Battle = lootArray[3];
sim.Stats.Loot.RP.Battle = lootArray[6];
}
} catch (e) {
console.log("Error Calculating Resources");
console.log(e);
console.log(e.name + " " + e.message);
}
},
getBattleDuration: function (sim) {
var battleground = ClientLib.Vis.VisMain.GetInstance().get_Battleground();
if (battleground.get_Simulation() !== null) sim.Stats.Battle.Duration = battleground.get_Replay().m_CombatSteps * battleground.get_TimePerStep();
else setTimeout(function () {
Simulator.StatWindow.getInstance().getBattleDuration(sim);
}, 10);
},
getLootFromCurrentCity: function () {
try {
var lootArray = { 1: 0, 2: 0, 3: 0, 6: 0 };
var loot = ClientLib.API.Battleground.GetInstance().GetLootFromCurrentCity();
if (loot !== null && loot.length > 0) {
for (var i = 0; i < loot.length; i++) lootArray[parseInt(loot[i].Type, 10)] += loot[i].Count;
for (var i = 0; i < this.sim.length; i++) {
this.sim[i].Reset();
this.sim[i].Stats.Loot.Overall.Base = lootArray[1] + lootArray[2] + lootArray[3] + lootArray[6];
this.sim[i].Stats.Loot.Tib.Base = lootArray[1];
this.sim[i].Stats.Loot.Cry.Base = lootArray[2];
this.sim[i].Stats.Loot.Cred.Base = lootArray[3];
this.sim[i].Stats.Loot.RP.Base = lootArray[6];
}
} else {
setTimeout(function () {
Simulator.StatWindow.getInstance().getLootFromCurrentCity();
}, 100);
}
} catch (e) {
console.log("Error Getting Loot from Current City");
console.log(e.toString());
}
},
disableSimulateStatButtonTimer: function (timer) {
try {
if (timer >= 1000) {
this.isSimStatButtonDisabled = true;
this.simStatBtn.setEnabled(false);
this.simStatBtn.setLabel(Math.floor(timer / 1000));
timer -= 1000;
setTimeout(function () {
Simulator.StatWindow.getInstance().disableSimulateStatButtonTimer(timer);
}, 1000);
} else {
setTimeout(function () {
Simulator.StatWindow.getInstance().simStatBtn.setEnabled(true);
Simulator.StatWindow.getInstance().simStatBtn.setLabel("Update");
}, timer);
this.isSimStatButtonDisabled = false;
}
} catch (e) {
console.log("Error disabling simulator button");
console.log(e.toString());
}
}
}
});
qx.Class.define("Simulator.OptionWindow", {
type: "singleton",
extend: qx.ui.window.Window,
construct: function () {
var qxApp = qx.core.Init.getApplication();
this.base(arguments);
this.setLayout(new qx.ui.layout.VBox(5));
this.addListener("resize", function () {
this.center();
}, this);
this.set({
caption: qxApp.tr("Simulator") + " - " + qxApp.tr("tnf:options"),
allowMaximize: false,
showMaximize: false,
allowMinimize: false,
showMinimize: false
});
var tabView = new qx.ui.tabview.TabView();
var genPage = new qx.ui.tabview.Page(qxApp.tr("tnf:general"));
genLayout = new qx.ui.layout.VBox(5);
genPage.setLayout(genLayout);
//Add General Page Items
var buttonsHeader = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
buttonsHeader.setThemedFont("bold");
var buttonsTitle = new qx.ui.basic.Label(qxApp.tr("Buttons:"));
buttonsHeader.add(buttonsTitle);
genPage.add(buttonsHeader);
var buttonsBox = new qx.ui.container.Composite(new qx.ui.layout.VBox(5));
this._buttonLocCB = new qx.ui.form.CheckBox(qxApp.tr("Right Side"));
this._buttonSizeCB = new qx.ui.form.CheckBox(qxApp.tr("Normal Size"));
this._buttonLocCB.addListener("changeValue", this._onButtonLocChange, this);
this._buttonSizeCB.addListener("changeValue", this._onButtonSizeChange, this);
if (localStorage['isBtnRight'] !== undefined) {
if (localStorage['isBtnRight'] == "yes")
this._buttonLocCB.setValue(true);
else
this._buttonLocCB.setValue(false);
}
if (localStorage['isBtnNorm'] !== undefined) {
if (localStorage['isBtnNorm'] == "yes")
this._buttonSizeCB.setValue(true);
else
this._buttonSizeCB.setValue(false);
//Need to do this
this.setButtonSize();
}
this._disableRTBtnCB = new qx.ui.form.CheckBox(qxApp.tr("Disable Repair Button"));
this._disableRTBtnCB.addListener("changeValue", this._onDisableRTBtnChange, this);
if (localStorage['isRTBtnDisabled'] !== undefined && localStorage['isRTBtnDisabled'] == "no") this._disableRTBtnCB.setValue(false);
else this._disableRTBtnCB.setValue(true);
this._disableCmtBtnCB = new qx.ui.form.CheckBox(qxApp.tr("Disable Combat Button"));
this._disableCmtBtnCB.addListener("changeValue", this._onDisableCmtBtnChange, this);
if (localStorage['isCmtBtnDisabled'] !== undefined && localStorage['isCmtBtnDisabled'] == "no") this._disableCmtBtnCB.setValue(false);
else this._disableCmtBtnCB.setValue(true);
this._ArmyUnitTooltip = new qx.ui.form.CheckBox(qxApp.tr("Disable Army Unit Tooltip"));
this._ArmyUnitTooltip.addListener("changeValue", this._onArmyUnitTooltipChange, this);
if (localStorage['ArmyUnitTooltipDisabled'] !== undefined) {
if (localStorage['ArmyUnitTooltipDisabled'] == "yes")
this._ArmyUnitTooltip.setValue(true);
else
this._ArmyUnitTooltip.setValue(false);
}
buttonsBox.add(this._buttonSizeCB);
buttonsBox.add(this._buttonLocCB);
buttonsBox.add(this._disableRTBtnCB);
buttonsBox.add(this._disableCmtBtnCB);
buttonsBox.add(this._ArmyUnitTooltip);
genPage.add(buttonsBox);
var simulatorHeader = new qx.ui.container.Composite(new qx.ui.layout.HBox(5)).set({
marginTop: 10
});
simulatorHeader.setThemedFont("bold");
var simulatorTitle = new qx.ui.basic.Label(qxApp.tr("Simulator") + ":");
simulatorHeader.add(simulatorTitle);
genPage.add(simulatorHeader);
var simulatorBox = new qx.ui.container.Composite(new qx.ui.layout.VBox(5));
this._autoSimulateCB = new qx.ui.form.CheckBox(qxApp.tr("Auto Start Simulation"));
if (localStorage['autoSimulate'] !== undefined) {
if (localStorage['autoSimulate'] == "yes")
this._autoSimulateCB.setValue(true);
}
var simulatorBox2 = new qx.ui.container.Composite(new qx.ui.layout.Grid(5)).set({
marginLeft: 20
});
var simSpeedOpt1 = new qx.ui.form.RadioButton("x1");
var simSpeedOpt2 = new qx.ui.form.RadioButton("x2");
var simSpeedOpt4 = new qx.ui.form.RadioButton("x4");
this._simSpeedGroup = new qx.ui.form.RadioGroup(simSpeedOpt1, simSpeedOpt2, simSpeedOpt4);
this._simSpeedGroup.addListener("changeSelection", this._onSimSpeedChange, this);
this._autoSimulateCB.addListener("changeValue", this._onAutoSimulateChange, this);
if (localStorage['simulateSpeed'] !== undefined) {
var options = this._simSpeedGroup.getSelectables(false);
if (localStorage['simulateSpeed'] == "2")
options[1].setValue(true);
else if (localStorage['simulateSpeed'] == "4")
options[2].setValue(true);
else
options[0].setValue(true);
}
if (this._autoSimulateCB.getValue() == false) {
this._simSpeedGroup.setEnabled(false);
}
simulatorBox2.add(simSpeedOpt1, {row: 0, column: 0});
simulatorBox2.add(simSpeedOpt2, {row: 0, column: 1});
simulatorBox2.add(simSpeedOpt4, {row: 0, column: 2});
simulatorBox.add(this._autoSimulateCB);
simulatorBox.add(simulatorBox2);
genPage.add(simulatorBox);
var statsPage = new qx.ui.tabview.Page(qxApp.tr("Stats"));
statsLayout = new qx.ui.layout.VBox(5);
statsPage.setLayout(statsLayout);
var statWindowHeader = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
statWindowHeader.setThemedFont("bold");
var statWindowTitle = new qx.ui.basic.Label(qxApp.tr("Stats Window:"));
statWindowHeader.add(statWindowTitle);
statsPage.add(statWindowHeader);
var statWindowBox = new qx.ui.container.Composite(new qx.ui.layout.VBox(5));
this._autoOpenCB = new qx.ui.form.CheckBox(qxApp.tr("Auto Open"));
this._autoOpenCB.addListener("changeValue", this._onAutoOpenStatsChange, this);
if (localStorage['autoOpenStat'] !== undefined) {
if (localStorage['autoOpenStat'] == "yes")
this._autoOpenCB.setValue(true);
else
this._autoOpenCB.setValue(false);
}
statWindowBox.add(this._autoOpenCB);
statsPage.add(statWindowBox);
var EnemyHealthSecHeader = new qx.ui.container.Composite(new qx.ui.layout.HBox(5)).set({
marginTop: 10
});
EnemyHealthSecHeader.setThemedFont("bold");
var EnemyHealthSecTitle = new qx.ui.basic.Label(qxApp.tr("tnf:combat target"));
EnemyHealthSecHeader.add(EnemyHealthSecTitle);
statsPage.add(EnemyHealthSecHeader);
var EnemyHealthSecBox = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
var EnemyHealthDisplayOpt1 = new qx.ui.form.RadioButton("HP abs");
var EnemyHealthDisplayOpt2 = new qx.ui.form.RadioButton("HP rel");
this._EnemyHealthSecGroup = new qx.ui.form.RadioGroup(EnemyHealthDisplayOpt1, EnemyHealthDisplayOpt2);
this._EnemyHealthSecGroup.addListener("changeSelection", this._onEnemyHealthSelectionChange, this);
if (localStorage['getEHSelection'] !== undefined) {
var options = this._EnemyHealthSecGroup.getSelectables(false);
if (localStorage['getEHSelection'] == "hp")
options[0].setValue(true);
else if (localStorage['getEHSelection'] == "hp rel")
options[1].setValue(true);
else
options[0].setValue(true);
}
EnemyHealthSecBox.add(EnemyHealthDisplayOpt1);
EnemyHealthSecBox.add(EnemyHealthDisplayOpt2);
statsPage.add(EnemyHealthSecBox);
var repairSecHeader = new qx.ui.container.Composite(new qx.ui.layout.HBox(5)).set({
marginTop: 10
});
repairSecHeader.setThemedFont("bold");
var repairSecTitle = new qx.ui.basic.Label(qxApp.tr("tnf:own repair cost"));
repairSecHeader.add(repairSecTitle);
statsPage.add(repairSecHeader);
var repairSecBox = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
var repairDisplayOpt1 = new qx.ui.form.RadioButton("RT");
var repairDisplayOpt2 = new qx.ui.form.RadioButton("C");
var repairDisplayOpt3 = new qx.ui.form.RadioButton("HP abs");
var repairDisplayOpt4 = new qx.ui.form.RadioButton("HP rel");
this._repairSecGroup = new qx.ui.form.RadioGroup(repairDisplayOpt1, repairDisplayOpt2, repairDisplayOpt3, repairDisplayOpt4);
this._repairSecGroup.addListener("changeSelection", this._onRepairSelectionChange, this);
if (localStorage['getRTSelection'] !== undefined) {
var options = this._repairSecGroup.getSelectables(false);
if (localStorage['getRTSelection'] == "rt")
options[0].setValue(true);
else if (localStorage['getRTSelection'] == "cry")
options[1].setValue(true);
else if (localStorage['getRTSelection'] == "hp")
options[2].setValue(true);
else if (localStorage['getRTSelection'] == "hp rel")
options[3].setValue(true);
else
options[0].setValue(true);
}
repairSecBox.add(repairDisplayOpt1);
repairSecBox.add(repairDisplayOpt2);
repairSecBox.add(repairDisplayOpt3);
repairSecBox.add(repairDisplayOpt4);
statsPage.add(repairSecBox);
var simViewsHeader = new qx.ui.container.Composite(new qx.ui.layout.HBox(5)).set({marginTop: 10});
simViewsHeader.setThemedFont("bold");
var simViewsTitle = new qx.ui.basic.Label(qxApp.tr("Simulations shown"));
simViewsHeader.add(simViewsTitle);
statsPage.add(simViewsHeader);
var simViewsBox = new qx.ui.container.Composite(new qx.ui.layout.HBox(10));
this._simViews = new qx.ui.form.Spinner().set({ minimum: 2 });
if (localStorage['simViews'] !== undefined) {
if (!isNaN(parseInt(localStorage['simViews'], 10))) this._simViews.setValue(parseInt(localStorage['simViews'], 10));
else this._simViews.setValue(Simulator.StatWindow.getInstance().simViews);
}
this._simViews.addListener("changeValue", this._onSimViewsChanged, this);
simViewsBox.add(this._simViews);
statsPage.add(simViewsBox);
var hideSecHeader = new qx.ui.container.Composite(new qx.ui.layout.HBox(5)).set({marginTop: 10});
hideSecHeader.setThemedFont("bold");
var hideSecTitle = new qx.ui.basic.Label(qxApp.tr("Hide Sections (on Startup):"));
hideSecHeader.add(hideSecTitle);
statsPage.add(hideSecHeader);
var hideSecBox = new qx.ui.container.Composite(new qx.ui.layout.HBox(10));
this._hideHealthCB = new qx.ui.form.CheckBox(qxApp.tr("Health"));
this._hideRepairCB = new qx.ui.form.CheckBox(qxApp.tr("Repair"));
this._hideLootCB = new qx.ui.form.CheckBox(qxApp.tr("Loot"));
this._hideHealthCB.addListener("changeValue", this._onHideEHChange, this);
this._hideRepairCB.addListener("changeValue", this._onHideRTChange, this);
this._hideLootCB.addListener("changeValue", this._onHideLootChange, this);
if (localStorage['hideHealth'] !== undefined) {
if (localStorage['hideHealth'] == "yes")
this._hideHealthCB.setValue(true);
else
this._hideHealthCB.setValue(false);
}
if (localStorage['hideRepair'] !== undefined) {
if (localStorage['hideRepair'] == "yes")
this._hideRepairCB.setValue(true);
else
this._hideRepairCB.setValue(false);
}
if (localStorage['hideLoot'] !== undefined) {
if (localStorage['hideLoot'] == "yes")
this._hideLootCB.setValue(true);
else
this._hideLootCB.setValue(false);
}
hideSecBox.add(this._hideHealthCB);
hideSecBox.add(this._hideRepairCB);
hideSecBox.add(this._hideLootCB);
statsPage.add(hideSecBox);
var statPosHeader = new qx.ui.container.Composite(new qx.ui.layout.HBox(5)).set({marginTop: 10});
var statPosTitle = new qx.ui.basic.Label(qxApp.tr("Set Stat Window Position:")).set({alignY: "middle"});
statPosTitle.setFont("bold");
var statPosBtn = new qx.ui.form.Button(qxApp.tr("Set")).set({allowGrowX: false, allowGrowY: false, height: 20});
statPosBtn.addListener("click", this._onSetStatWindowPositionChange, this);
statPosHeader.add(statPosTitle);
statPosHeader.add(statPosBtn);
statsPage.add(statPosHeader);
tabView.add(genPage);
tabView.add(statsPage);
this.add(tabView);
phe.cnc.Util.attachNetEvent(ClientLib.Vis.VisMain.GetInstance(), "ViewModeChange", ClientLib.Vis.ViewModeChange, this, function () { this.close(); });
},
destruct: function () {},
members: {
_buttonSizeCB: null,
_buttonLocCB: null,
_disableRTBtnCB: null,
_disableCmtBtnCB: null,
_autoOpenCB: null,
_autoSimulateCB: null,
_simSpeedGroup: null,
_repairSecGroup: null,
_EnemyHealthSecGroup: null,
_simViews: null,
_hideHealthCB: null,
_hideRepairCB: null,
_hideLootCB: null,
_ArmyUnitTooltip: null,
_onButtonSizeChange: function () {
try {
var value = this._buttonSizeCB.getValue();
if (value == true)
localStorage['isBtnNorm'] = "yes";
else
localStorage['isBtnNorm'] = "no";
this.setButtonSize();
} catch (e) {
console.log("Error Button Size Change: " + e.toString());
}
},
_onButtonLocChange: function () {
try {
var value = this._buttonLocCB.getValue();
if (value == true)
localStorage['isBtnRight'] = "yes";
else
localStorage['isBtnRight'] = "no";
this.setButtonLoc();
} catch (e) {
console.log("Error Button Location Change: " + e.toString());
}
},
_onDisableRTBtnChange: function () {
try {
var value = this._disableRTBtnCB.getValue();
if (value == true)
localStorage['isRTBtnDisabled'] = "yes";
else
localStorage['isRTBtnDisabled'] = "no";
this.setRTBtn(value);
} catch (e) {
console.log("Error Disable RT Button Change: " + e.toString());
}
},
_onDisableCmtBtnChange: function () {
try {
var value = this._disableCmtBtnCB.getValue();
if (value == true)
localStorage['isCmtBtnDisabled'] = "yes";
else
localStorage['isCmtBtnDisabled'] = "no";
this.setCmtBtn(value);
} catch (e) {
console.log("Error Disable Cmt Button Change: " + e.toString());
}
},
_onEnemyHealthSelectionChange: function (selection) {
try {
var option = selection.getData()[0];
var label = option.getLabel();
if (label == "HP abs")
localStorage['getEHSelection'] = "hp";
else if (label == "HP rel")
localStorage['getEHSelection'] = "hp rel";
else
localStorage['getEHSelection'] = "hp";
} catch (e) {
console.log("Error Enemy Health Section Selection Change: " + e.toString());
}
},
_onRepairSelectionChange: function (selection) {
try {
var option = selection.getData()[0];
var label = option.getLabel();
if (label == "RT")
localStorage['getRTSelection'] = "rt";
else if (label == "HP abs")
localStorage['getRTSelection'] = "hp";
else if (label == "HP rel")
localStorage['getRTSelection'] = "hp rel";
else if (label == "C")
localStorage['getRTSelection'] = "cry";
else
localStorage['getRTSelection'] = "rt";
} catch (e) {
console.log("Error Repair Section Selection Change: " + e.toString());
}
},
_onAutoOpenStatsChange: function () {
try {
var value = this._autoOpenCB.getValue();
if (value == false)
localStorage['autoOpenStat'] = "no";
else
localStorage['autoOpenStat'] = "yes";
} catch (e) {
console.log("Error Auto Open Stats Change: " + e.toString());
}
},
_onArmyUnitTooltipChange: function () {
try {
var value = this._ArmyUnitTooltip.getValue();
if (value == false)
localStorage['ArmyUnitTooltipDisabled'] = "no";
else
localStorage['ArmyUnitTooltipDisabled'] = "yes";
} catch (e) {
console.log("Error Army Unit Tooltip Change: " + e.toString());
}
},
_onAutoSimulateChange: function () {
try {
var value = this._autoSimulateCB.getValue();
if (value == false) {
this._simSpeedGroup.setEnabled(false);
localStorage['autoSimulate'] = "no";
} else {
this._simSpeedGroup.setEnabled(true);
localStorage['autoSimulate'] = "yes";
}
} catch (e) {
console.log("Error Auto Simulate Change: " + e.toString());
}
},
_onSimSpeedChange: function (selection) {
try {
var option = selection.getData()[0];
var label = option.getLabel();
if (label == "x1")
localStorage['simulateSpeed'] = "1";
else if (label == "x2")
localStorage['simulateSpeed'] = "2";
else
localStorage['simulateSpeed'] = "4";
} catch (e) {
console.log("Error Sim Speed Change: " + e.toString());
}
},
_onSimViewsChanged: function () {
try {
var value = parseInt(this._simViews.getValue(), 10);
if (!isNaN(value)) {
if (value > 0) {
localStorage['simViews'] = value.toString();
Simulator.StatWindow.getInstance().simViews = value;
// Remove Simulations from Stats Window
for (var i = (Simulator.StatWindow.getInstance().sim.length-1); i >= 0; i--) {
if (i > (value-1)) {
Simulator.StatWindow.getInstance().Battle.remove(Simulator.StatWindow.getInstance().sim[i].Label.Battle.container);
Simulator.StatWindow.getInstance().EnemyHealth.remove(Simulator.StatWindow.getInstance().sim[i].Label.EnemyHealth.container);
Simulator.StatWindow.getInstance().Repair.remove(Simulator.StatWindow.getInstance().sim[i].Label.Repair.container);
Simulator.StatWindow.getInstance().Loot.remove(Simulator.StatWindow.getInstance().sim[i].Label.Loot.container);
Simulator.StatWindow.getInstance().sim.pop();
}
}
// Create and add Simulations to Stats Window
for (var i = 0; i < value; i++) {
if (i == Simulator.StatWindow.getInstance().sim.length) {
Simulator.StatWindow.getInstance().sim.push(new (Simulator.StatWindow.getInstance()).Simulation(i));
Simulator.StatWindow.getInstance().Battle.add(Simulator.StatWindow.getInstance().sim[i].Label.Battle.container, { flex : 1 });
Simulator.StatWindow.getInstance().EnemyHealth.add(Simulator.StatWindow.getInstance().sim[i].Label.EnemyHealth.container, { flex : 1 });
Simulator.StatWindow.getInstance().Repair.add(Simulator.StatWindow.getInstance().sim[i].Label.Repair.container, { flex : 1 });
Simulator.StatWindow.getInstance().Loot.add(Simulator.StatWindow.getInstance().sim[i].Label.Loot.container, { flex : 1 });
Simulator.StatWindow.getInstance().sim[i].Select(Simulator.StatWindow.getInstance().simSelected);
}
}
if ((value-1) < Simulator.StatWindow.getInstance().simSelected) {
Simulator.StatWindow.getInstance().simSelected = 0;
for (var i = 0; i < Simulator.StatWindow.getInstance().sim.length; i++) {
Simulator.StatWindow.getInstance().sim[i].Select(0);
}
}
}
}
} catch (e) {
console.log("Error Simulation Views Change: " + e.toString());
}
},
_onHideEHChange: function () {
try {
var value = this._hideHealthCB.getValue();
if (value == true)
localStorage['hideHealth'] = "yes";
else
localStorage['hideHealth'] = "no";
} catch (e) {
console.log("Error Hide Enemy Base Health Change: " + e.toString());
}
},
_onHideRTChange: function () {
try {
var value = this._hideRepairCB.getValue();
if (value == true)
localStorage['hideRepair'] = "yes";
else
localStorage['hideRepair'] = "no";
} catch (e) {
console.log("Error Hide Repair Times Change: " + e.toString());
}
},
_onHideLootChange: function () {
try {
var value = this._hideLootCB.getValue();
if (value == true)
localStorage['hideLoot'] = "yes";
else
localStorage['hideLoot'] = "no";
} catch (e) {
console.log("Error Hide Loot Change: " + e.toString());
}
},
_onSetStatWindowPositionChange: function () {
try {
var props = Simulator.StatWindow.getInstance().getLayoutProperties();
localStorage['statWindowPosLeft'] = props["left"];
localStorage['statWindowPosTop'] = props["top"];
} catch (e) {
console.log("Error Stat Window Position Change: " + e.toString());
}
},
setRTBtn: function (value) {
if (value == true)
Simulator.getInstance().unlockRTBtn.show();
else
Simulator.getInstance().unlockRTBtn.hide();
},
setCmtBtn: function (value) {
if (value == true)
Simulator.getInstance().unlockCmtBtn.show();
else
Simulator.getInstance().unlockCmtBtn.hide();
},
setButtonLoc: function () {
try {
var value = this._buttonLocCB.getValue();
var size = this._buttonSizeCB.getValue();
if (value == true) //Right
{
var pLeft = null;
if (size == true) //Right Normal
var pRight = 70;
else //Right Small
var pRight = 70;
Simulator.getInstance().armyBar.add(Simulator.getInstance().simBtn, {left: pLeft, right: pRight, bottom: 119});
Simulator.getInstance().armyBar.add(Simulator.getInstance().statBtn, {left: pLeft, right: pRight, bottom: 81});
Simulator.getInstance().armyBar.add(Simulator.getInstance().optionBtn, {left: pLeft, right: pRight, bottom: 43});
Simulator.getInstance().armyBar.add(Simulator.getInstance().layoutBtn, {left: pLeft, right: pRight, bottom: 5});
Simulator.getInstance().playArea.add(Simulator.getInstance().shiftUpBtn, {left: pLeft, right: 75, bottom: 113});
Simulator.getInstance().playArea.add(Simulator.getInstance().shiftDownBtn, {left: pLeft, right: 75, bottom: 73});
Simulator.getInstance().playArea.add(Simulator.getInstance().shiftLeftBtn, {left: pLeft, right: 95, bottom: 93});
Simulator.getInstance().playArea.add(Simulator.getInstance().shiftRightBtn, {left: pLeft, right: 55, bottom: 93});
Simulator.getInstance().playArea.add(Simulator.getInstance().disableAllUnitsBtn, {left: pLeft, right: 6, bottom: 120});
Simulator.getInstance().playArea.add(Simulator.getInstance().mirrorBtnH, {left: pLeft, right: 6, bottom: 160});
Simulator.getInstance().playArea.add(Simulator.getInstance().mirrorBtnV, {left: pLeft, right: 46, bottom: 160});
Simulator.getInstance().playArea.add(Simulator.getInstance().armyUndoBtn, {left: pLeft, right: 6, bottom: 200});
Simulator.getInstance().playArea.add(Simulator.getInstance().quickSaveBtn, {left: pLeft, right: 6, bottom: 240});
} else {
var pRight = null;
if (size == true) //Left Normal
var pLeft = 87;
else
var pLeft = 87;
Simulator.getInstance().armyBar.add(Simulator.getInstance().simBtn, {left: pLeft, right: pRight, bottom: 120});
Simulator.getInstance().armyBar.add(Simulator.getInstance().statBtn, {left: pLeft, right: pRight, bottom: 82});
Simulator.getInstance().armyBar.add(Simulator.getInstance().optionBtn, {left: pLeft, right: pRight, bottom: 44});
Simulator.getInstance().armyBar.add(Simulator.getInstance().layoutBtn, {left: pLeft, right: pRight, bottom: 6});
Simulator.getInstance().playArea.add(Simulator.getInstance().shiftUpBtn, {left: 80, right: pRight, bottom: 113});
Simulator.getInstance().playArea.add(Simulator.getInstance().shiftDownBtn, {left: 80, right: pRight, bottom: 73});
Simulator.getInstance().playArea.add(Simulator.getInstance().shiftLeftBtn, {left: 60, right: pRight, bottom: 93});
Simulator.getInstance().playArea.add(Simulator.getInstance().shiftRightBtn, {left: 100, right: pRight, bottom: 93});
Simulator.getInstance().playArea.add(Simulator.getInstance().disableAllUnitsBtn, {left: 6, right: pRight, bottom: 120});
Simulator.getInstance().playArea.add(Simulator.getInstance().mirrorBtnH, {left: 6, right: pRight, bottom: 160});
Simulator.getInstance().playArea.add(Simulator.getInstance().mirrorBtnV, {left: 46, right: pRight, bottom: 160});
Simulator.getInstance().playArea.add(Simulator.getInstance().armyUndoBtn, {left: 6, right: pRight, bottom: 200});
Simulator.getInstance().playArea.add(Simulator.getInstance().quickSaveBtn, {left: 6, right: pRight, bottom: 240});
}
} catch (e) {
console.log("Error Setting Button Location: " + e.toString());
}
},
setButtonSize: function () {
try {
var qxApp = qx.core.Init.getApplication();
value = this._buttonSizeCB.getValue();
if (value == true) {
Simulator.getInstance().simBtn.setLabel(qxApp.tr("Simulate"));
Simulator.getInstance().simBtn.setWidth(60);
Simulator.getInstance().statBtn.setLabel(qxApp.tr("Stats"));
Simulator.getInstance().statBtn.setWidth(60);
Simulator.getInstance().optionBtn.setLabel(qxApp.tr("Options"));
Simulator.getInstance().optionBtn.setWidth(60);
Simulator.getInstance().layoutBtn.setLabel(qxApp.tr("Layout"));
Simulator.getInstance().layoutBtn.setWidth(60);
} else {
Simulator.getInstance().simBtn.setLabel(qxApp.tr("S"));
Simulator.getInstance().simBtn.setWidth(30);
Simulator.getInstance().statBtn.setLabel(qxApp.tr("I"));
Simulator.getInstance().statBtn.setWidth(30);
Simulator.getInstance().optionBtn.setLabel(qxApp.tr("O"));
Simulator.getInstance().optionBtn.setWidth(30);
Simulator.getInstance().layoutBtn.setLabel(qxApp.tr("L"));
Simulator.getInstance().layoutBtn.setWidth(30);
}
this.setButtonLoc();
} catch (e) {
console.log("Error Setting Button Size: " + e.toString());
}
}
}
});
qx.Class.define("Simulator.LayoutWindow", {
type: "singleton",
extend: webfrontend.gui.CustomWindow,
construct: function () {
var qxApp = qx.core.Init.getApplication();
this.base(arguments);
this.setLayout(new qx.ui.layout.VBox());
this.set({
width: 200,
caption: qxApp.tr("Simulator") + " - " + qxApp.tr("Layouts"),
padding: 2,
allowMaximize: false,
showMaximize: false,
allowMinimize: false,
showMinimize: false
});
var layoutListHeader = new qx.ui.container.Composite(new qx.ui.layout.VBox(5)).set({
decorator: "pane-light-opaque"
});
var layoutListTitle = new qx.ui.basic.Label(qxApp.tr("Formation Saver")).set({alignX: "center", alignY: "top", font: "font_size_14_bold"});
layoutListHeader.add(layoutListTitle);
this.add(layoutListHeader);
this.layoutList = new qx.ui.form.List();
this.layoutList.set({selectionMode: "one", height: 100, width: 150, margin: 5});
this.add(this.layoutList);
var listButtonBox = new qx.ui.container.Composite();
var listButtonLayout = new qx.ui.layout.HBox(5, "center");
listButtonBox.setLayout(listButtonLayout);
var loadButton = new qx.ui.form.Button(qxApp.tr("Load"));
var deleteButton = new qx.ui.form.Button(qxApp.tr("Delete"));
loadButton.set({height: 15, width: 70, alignX: "center"});
loadButton.addListener("click", this.loadLayout, this);
deleteButton.set({height: 15, width: 70, alignX: "center"});
deleteButton.addListener("click", this.deleteLayout, this);
listButtonBox.add(loadButton);
listButtonBox.add(deleteButton);
this.add(listButtonBox);
var saveLayoutBox = new qx.ui.container.Composite(new qx.ui.layout.HBox().set({spacing: 10})).set({marginTop: 20, marginLeft: 5});
this.layoutTextBox = new qx.ui.form.TextField("").set({width: 75, maxLength: 15});
var saveButton = new qx.ui.form.Button(qxApp.tr("Save"));
saveButton.set({height: 10, width: 70, alignX: "center"});
saveButton.addListener("click", this.saveNewLayout, this);
saveLayoutBox.add(this.layoutTextBox);
saveLayoutBox.add(saveButton);
this.add(saveLayoutBox);
var checkBox = new qx.ui.container.Composite(new qx.ui.layout.HBox().set({spacing: 10})).set({marginTop: 10, marginLeft: 5});
this.persistentCheck = new qx.ui.form.CheckBox(qxApp.tr("Make Persistent"));
this.persistentCheck.setTextColor("white");
this.persistentCheck.setFont("bold");
this.persistentCheck.setToolTipText(qxApp.tr("If checked, formation will be saved and can be used by this city in any other city."));
checkBox.add(this.persistentCheck);
this.add(checkBox);
var clearAllLayoutsBox = new qx.ui.container.Composite(new qx.ui.layout.VBox()).set({alignX: "center", marginTop: 5, marginLeft: 5, allowGrowX: false});
var clearAllLayoutsBtn = new qx.ui.form.Button(qxApp.tr("Clear All")).set({alignX: "center", width: 70});
clearAllLayoutsBtn.addListener("click", this.clearAllLayouts, this);
clearAllLayoutsBox.add(clearAllLayoutsBtn);
this.add(clearAllLayoutsBox);
this.layoutsArray = [];
phe.cnc.Util.attachNetEvent(ClientLib.Vis.VisMain.GetInstance(), "ViewModeChange", ClientLib.Vis.ViewModeChange, this, function () { this.close(); });
},
destruct: function () {},
members: {
layoutList: null,
layoutTextBox: null,
layoutsArray: null,
persistentCheck: null,
saveNewLayout: function (isQS) {
try {
console.log("Saving Layout");
if ((isQS !== undefined && isQS == true) || this.layoutTextBox.getValue() == "") {
var date = new Date();
var day = date.getDate();
var month = date.getMonth() + 1;
var hour = (date.getHours() < 10) ? "0" + date.getHours() : date.getHours();
var minute = (date.getMinutes() < 10) ? "0" + date.getMinutes() : date.getMinutes();
var second = (date.getSeconds() < 10) ? "0" + date.getSeconds() : date.getSeconds();
var label = month + "/" + day + "@" + hour + ":" + minute + ":" + second;
} else {
var label = this.layoutTextBox.getValue();
}
var cityID = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCityId();
var ownCityID = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCityId();
var model = ownCityID + "." + cityID + "." + label;
var children = this.layoutList.getChildren();
//Check for same layout name if so do NOT save
for (var item = 0; item < children.length; item++) {
thisItem = children[item].getModel();
if (thisItem == model) {
alert("Save Failed: Duplicate Name");
return;
}
}
var units = Simulator.getInstance().getCityPreArmyUnits().get_ArmyUnits().l;
units = this.prepareLayout(units);
var layoutInformation = {};
if (this.persistentCheck.getValue() == true) {
layoutInformation = {
id: model,
label: label,
formation: units,
pers: "yes"
};
} else {
layoutInformation = {
id: model,
label: label,
formation: units,
pers: "no"
};
}
this.layoutsArray.push(layoutInformation);
this.layoutList.add(new qx.ui.form.ListItem(layoutInformation.label, null, layoutInformation.id));
this.layoutTextBox.setValue("");
Simulator.getInstance().quickSaveBtn.setLabel("✔");
setTimeout(function () { Simulator.getInstance().quickSaveBtn.setLabel("QS"); }, 2000);
this.updateStorage();
} catch (e) {
console.log("Error Saving Layout");
console.log(e);
}
},
loadLayout: function () {
try {
console.log("Loading Layout");
var ownCityID = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCityId();
var layout = this.layoutList.getSelection()[0].getModel();
for (var item in this.layoutsArray) {
var thisLayout = this.layoutsArray[item].id;
if (thisLayout == layout) {
Simulator.getInstance().restoreFormation(this.layoutsArray[item].formation);
break;
}
}
} catch (e) {
console.log("Error Loading Layout");
console.log(e);
}
},
deleteLayout: function () {
try {
console.log("Deleting Layout");
//Remove from our array too
var rUSure = confirm('Are you sure you want to delete this layout?');
if (!rUSure) {
return;
}
for (var item in this.layoutsArray) {
if (this.layoutsArray[item].id == this.layoutList.getSelection()[0].getModel()) {
var isRemoved = this.layoutsArray.splice(item, 1);
this.updateStorage();
}
}
//The update will remove all and repopulate so no need to delete individual ones.
this.updateLayoutList();
} catch (e) {
console.log("Error Deleting Layout");
console.log(e);
}
},
updateStorage: function () {
try {
console.log("Updating Storage");
localStorage['savedFormations'] = JSON.stringify(this.layoutsArray);
} catch (e) {
console.log("Error updating localStorage");
console.log(e);
}
},
updateLayoutList: function () {
try {
console.log("Updating Layout List");
var savedLayouts = localStorage['savedFormations'];
if (savedLayouts !== undefined) {
this.layoutsArray = JSON.parse(savedLayouts);
}
this.layoutList.removeAll(); //Clear List
var cityID = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCityId();
var ownCityID = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCityId();
var model = ownCityID + "." + cityID;
for (var item in this.layoutsArray) {
var itemLabel = this.layoutsArray[item].label;
var itemModel = model + "." + itemLabel;
var pers = this.layoutsArray[item].pers;
var match = this.layoutsArray[item].id.match(ownCityID.toString());
if (itemModel == this.layoutsArray[item].id || ((pers !== undefined && pers == "yes") && match != null)) //Match!
{
this.layoutList.add(new qx.ui.form.ListItem(itemLabel, null, this.layoutsArray[item].id));
}
}
} catch (e) {
console.log("Error Updating Layout List");
console.log(e);
}
},
//Function from C&C Tiberium Alliances Combat Simulator script. Works well and does exactly what I need!
//For authors see: http://userscripts.org/scripts/show/145717
prepareLayout: function (units) {
try {
console.log("Preparing Layout for Saving");
saved_units = [];
for (var i = 0; i < units.length; i++) {
var unit = units[i];
var armyUnit = {};
armyUnit.x = unit.get_CoordX();
armyUnit.y = unit.get_CoordY();
armyUnit.id = unit.get_Id();
armyUnit.enabled = unit.get_Enabled();
saved_units.push(armyUnit);
}
return saved_units;
} catch (e) {
console.log("Error Preparing Unit Layout");
console.log(e);
}
},
clearAllLayouts: function () {
try {
console.log("Clearing All Layouts");
var rUSure = confirm("Clicking OK will delete all of your saved layouts from every base!");
if (rUSure) {
localStorage.removeItem('savedFormations');
this.layoutsArray = [];
alert("All saved layouts have been deleted.");
this.updateLayoutList();
} else {
alert("No layouts were deleted.");
}
} catch (e) {
console.log("Error Clearing All Layouts");
console.log(e);
}
}
}
});
}
function translation() {
var localeManager = qx.locale.Manager.getInstance();
// Default language is english (en)
// Available Languages are: ar,ce,cs,da,de,en,es,fi,fr,hu,id,it,nb,nl,pl,pt,ro,ru,sk,sv,ta,tr,uk
// You can send me translations so i can include them in the Script.
// German (incomplete)
localeManager.addTranslation("de", {
"Simulator": "Simulator",
"S": "S",
"Simulate": "Simulate",
"Opens Simulation Screen.": "Startet die Simulation",
"I": "I",
"Stats": "Statistik",
"Opens Simulator Stats Window.": "Öffnet das Statistikfenster.",
"O": "O",
"Options": "Options",
"Opens Simulator Options.": "Öffnet das Optionsfenster.",
"L": "L",
"Layout": "Layout",
"Save/Load/Delete Unit Formations for current city.": "Speichern/Laden/Löschen von Formationen für den aktuellen Gegner",
"Unlock": "Unlock",
"Unlock Combat Button.": "Entsperrt die Angriffsschaltfläche.",
"Unlock Repair Button.": "Entsperrt die Reparaturschaltfläche.",
"Shifts units one space up.": "Verschiebt Einheiten einen Platz nach oben.",
"Shifts units one space down.": "Verschiebt die Einheiten einen Platz nach unten.",
"Shifts units one space left.": "Verschiebt die Einheiten einen Platz nach links.",
"Shifts units one space right.": "Verschiebt die Einheiten einen Platz nach rechts.",
"Mirrors units horizontally.": "Spiegelt die Einheiten horizontal.",
"Mirrors units vertically.": "Spiegelt die Einheiten vertikal.",
"Enables/Disables all units.": "Alle Einheiten de-/aktivieren.",
"Undo's formation to previous saved formation.<br>Save formations by hitting<br>the Update or Simulate button.": "Setzt die Formation auf die vorher gespeicherte zurück.<br>Formationen werden gespeichert,<br>wenn man auf Simulieren oder Aktualisieren drückt.",
"QS": "QS",
"Saves the current layout<br>without having to open<br>the Formation Saver window.<br>Does not make persistent.": "Speichert die aktuelle Formation,<br>ohne das das Formationsfenster<br>geöffnet werden muss.",
"Back": "zurück",
"Return to Combat Setup.": "Zurück zum Angriffsbildschirm.",
"Updates Simulation Stats.": "Aktualisiert die Statistik.",
"Buttons:": "Schaltflächen:",
"Right Side": "Rechte Seite",
"Normal Size": "Normale Größe",
"Disable Repair Button": "Sperre Reparatur-Schaltfläche",
"Disable Combat Button": "Sperre Angriffs-Schaltfläche",
"Disable Army Unit Tooltip": "Deaktiviere Einheiten Tooltips",
"Auto Start Simulation": "Simulation automatisch starten",
"Stats Window:": "Statistik Fenster:",
"Auto Open": "Automatisch öffnen",
"Simulations shown": "Anzuzeigende Simulationen",
"Hide Sections (on Startup):": "Verstecke Bereich (beim starten):",
"Health": "Health",
"Repair": "Repair",
"Loot": "Loot",
"Set Stat Window Position:": "Setze die Statistikfenster Position:",
"Set": "setzen",
"Layouts": "Layouts",
"Formation Saver": "Formationen speichern",
"Load": "Laden",
"Delete": "Löschen",
"Save": "Speichern",
"Make Persistent": "Dauerhaft",
"If checked, formation will be saved and can be used by this city in any other city.": "Wenn angewählt kann die Formation für andere Gegner verwendet werden.",
"Clear All": "Lösche alle"
});
}
function waitForGame() {
try {
if (typeof qx !== "undefined" && typeof qx.core !== "undefined" && typeof qx.core.Init !== "undefined" && typeof ClientLib !== "undefined" && typeof phe !== "undefined") {
var app = qx.core.Init.getApplication();
if (app.initDone == true) {
try {
console.log("WarChiefs - Tiberium Alliances Combat Simulator: Loading");
translation();
createClasses();
Simulator.getInstance();
Simulator.StatWindow.getInstance();
Simulator.OptionWindow.getInstance();
Simulator.LayoutWindow.getInstance();
console.log("WarChiefs - Tiberium Alliances Combat Simulator: Loaded");
} catch (e) {
console.log("WarChiefs - Tiberium Alliances Combat Simulator: initialization error:");
console.log(e);
}
} else
window.setTimeout(waitForGame, 1000);
} else {
window.setTimeout(waitForGame, 1000);
}
} catch (e) {
console.log(e);
}
}
window.setTimeout(waitForGame, 1000);
};
var script = document.createElement("script");
var txt = injectFunction.toString();
script.innerHTML = "(" + txt + ")();";
script.type = "text/javascript";
document.getElementsByTagName("head")[0].appendChild(script);
})();