// ==UserScript==
// @name WarChiefs - Tiberium Alliances Upgrade Base/Defense/Army
// @description Upgrade your Base,Defense Army to a specific Level.
// @author Eistee
// @version 2017.06.06
// @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
*
* thx to TheStriker for his API knowledge.
*
*/
(function () {
var injectFunction = function () {
function createClasses() {
qx.Class.define("Upgrade", {
type: "singleton",
extend: qx.core.Object,
construct: function () {
try {
var qxApp = qx.core.Init.getApplication();
var stats = document.createElement('img');
stats.src = "http://goo.gl/BuvwKs"; // http://goo.gl/#analytics/goo.gl/BuvwKs/all_time
var btnUpgrade = new qx.ui.form.Button(qxApp.tr("tnf:toggle upgrade mode"), "FactionUI/icons/icon_building_detail_upgrade.png").set({
toolTipText: qxApp.tr("tnf:toggle upgrade mode"),
alignY: "middle",
show: "icon",
width : 60,
allowGrowX : false,
allowGrowY : false,
appearance : "button"
});
btnUpgrade.addListener("click", this.toggleWindow, this);
var btnTrade = qx.core.Init.getApplication().getPlayArea().getHUD().getUIItem(ClientLib.Data.Missions.PATH.WDG_TRADE);
btnTrade.getLayoutParent().addAfter(btnUpgrade, btnTrade);
} catch (e) {
console.log("Error setting up Upgrade Constructor: ");
console.log(e.toString());
}
},
destruct: function () {},
members: {
toggleWindow: function () {
if (Upgrade.Window.getInstance().isVisible()) Upgrade.Window.getInstance().close();
else Upgrade.Window.getInstance().open();
}
}
});
qx.Class.define("Upgrade.Window", {
type: "singleton",
extend: qx.ui.window.Window,
construct: function () {
try {
this.base(arguments);
this.set({
layout: new qx.ui.layout.VBox().set({ spacing: 0 }),
contentPadding: 5,
contentPaddingTop: 0,
allowMaximize: false,
showMaximize: false,
allowMinimize: false,
showMinimize: false,
resizable: false
});
this.moveTo(124, 31);
this.getChildControl("icon").set({ width : 18, height : 18, scale : true, alignY : "middle" });
this.add(new Upgrade.Current());
this.add(new Upgrade.All());
this.add(new Upgrade.Repairtime());
this.addListener("appear", this.onOpen, this);
this.addListener("close", this.onClose, this);
} catch (e) {
console.log("Error setting up Upgrade.Window Constructor: ");
console.log(e.toString());
}
},
destruct: function () {},
members: {
onOpen: function () {
phe.cnc.Util.attachNetEvent(ClientLib.Vis.VisMain.GetInstance(), "ViewModeChange", ClientLib.Vis.ViewModeChange, this, this.onViewModeChanged);
this.onViewModeChanged(null, ClientLib.Vis.VisMain.GetInstance().get_Mode());
},
onClose: function () {
phe.cnc.Util.detachNetEvent(ClientLib.Vis.VisMain.GetInstance(), "ViewModeChange", ClientLib.Vis.ViewModeChange, this, this.onViewModeChanged);
},
onViewModeChanged: function (oldMode, newMode) {
if (oldMode !== newMode) {
var qxApp = qx.core.Init.getApplication();
switch (newMode) {
case ClientLib.Vis.Mode.City:
this.setCaption(qxApp.tr("tnf:toggle upgrade mode") + ": " + qxApp.tr("tnf:base"));
this.setIcon("FactionUI/icons/icon_arsnl_base_buildings.png");
break;
case ClientLib.Vis.Mode.DefenseSetup:
this.setCaption(qxApp.tr("tnf:toggle upgrade mode") + ": " + qxApp.tr("tnf:defense"));
this.setIcon("FactionUI/icons/icon_def_army_points.png");
break;
case ClientLib.Vis.Mode.ArmySetup:
this.setCaption(qxApp.tr("tnf:toggle upgrade mode") + ": " + qxApp.tr("tnf:offense"));
this.setIcon("FactionUI/icons/icon_army_points.png");
break;
default:
this.close();
break;
}
}
}
}
});
qx.Class.define("Upgrade.All", {
extend: qx.ui.container.Composite,
construct: function () {
try {
qx.ui.container.Composite.call(this);
this.set({
layout : new qx.ui.layout.VBox(5),
padding: 5,
decorator: "pane-light-opaque"
});
this.add(this.title = new qx.ui.basic.Label("").set({ alignX: "center", font: "font_size_14_bold" }));
var level = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
level.add(new qx.ui.basic.Label(this.tr("tnf:level:")).set({ alignY: "middle" }));
level.add(this.txtLevel = new qx.ui.form.Spinner(1).set({ maximum: 150, minimum: 1 }));
this.txtLevel.addListener("changeValue", this.onInput, this);
level.add(this.btnLevel = new qx.ui.form.Button(this.tr("tnf:toggle upgrade mode"), "FactionUI/icons/icon_building_detail_upgrade.png"));
this.btnLevel.addListener("execute", this.onUpgrade, this);
this.add(level);
var requires = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
requires.add(new qx.ui.basic.Label(this.tr("tnf:requires:")));
var resource = new qx.ui.container.Composite(new qx.ui.layout.VBox(5));
resource.add(this.resTiberium = new qx.ui.basic.Atom("-", "webfrontend/ui/common/icn_res_tiberium.png"));
this.resTiberium.setToolTipIcon("webfrontend/ui/common/icn_res_tiberium.png");
this.resTiberium.getChildControl("icon").set({ width: 18, height: 18, scale: true, alignY: "middle" });
resource.add(this.resChrystal = new qx.ui.basic.Atom("-", "webfrontend/ui/common/icn_res_chrystal.png"));
this.resChrystal.setToolTipIcon("webfrontend/ui/common/icn_res_chrystal.png");
this.resChrystal.getChildControl("icon").set({ width: 18, height: 18, scale: true, alignY: "middle" });
resource.add(this.resPower = new qx.ui.basic.Atom("-", "webfrontend/ui/common/icn_res_power.png"));
this.resPower.setToolTipIcon("webfrontend/ui/common/icn_res_power.png");
this.resPower.getChildControl("icon").set({ width: 18, height: 18, scale: true, alignY: "middle" });
requires.add(resource);
this.add(requires);
this.addListener("appear", this.onAppear, this);
this.addListener("disappear", this.onDisappear, this);
} catch (e) {
console.log("Error setting up Upgrade.All Constructor: ");
console.log(e.toString());
}
},
destruct: function () {},
members: {
title: null,
txtLevel: null,
btnLevel: null,
resTiberium: null,
resChrystal: null,
resPower: null,
onAppear: function () {
phe.cnc.Util.attachNetEvent(ClientLib.Vis.VisMain.GetInstance(), "ViewModeChange", ClientLib.Vis.ViewModeChange, this, this.onViewModeChanged);
phe.cnc.Util.attachNetEvent(ClientLib.Data.MainData.GetInstance().get_Cities(), "CurrentOwnChange", ClientLib.Data.CurrentOwnCityChange, this, this.onCurrentCityChange);
phe.cnc.Util.attachNetEvent(ClientLib.Data.MainData.GetInstance().get_Cities(), "CurrentChange", ClientLib.Data.CurrentCityChange, this, this.onCurrentCityChange);
phe.cnc.base.Timer.getInstance().addListener("uiTick", this.onTick, this);
this.onViewModeChanged(null, ClientLib.Vis.VisMain.GetInstance().get_Mode());
},
onDisappear: function () {
phe.cnc.Util.detachNetEvent(ClientLib.Vis.VisMain.GetInstance(), "ViewModeChange", ClientLib.Vis.ViewModeChange, this, this.onViewModeChanged);
phe.cnc.Util.detachNetEvent(ClientLib.Data.MainData.GetInstance().get_Cities(), "CurrentOwnChange", ClientLib.Data.CurrentOwnCityChange, this, this.onCurrentCityChange);
phe.cnc.Util.detachNetEvent(ClientLib.Data.MainData.GetInstance().get_Cities(), "CurrentChange", ClientLib.Data.CurrentCityChange, this, this.onCurrentCityChange);
phe.cnc.base.Timer.getInstance().removeListener("uiTick", this.onTick, this);
},
onViewModeChanged: function (oldViewMode, newViewMode) {
if (oldViewMode !== newViewMode) {
switch (newViewMode) {
case ClientLib.Vis.Mode.City:
this.title.setValue(this.tr("All buildings"));
this.reset();
break;
case ClientLib.Vis.Mode.DefenseSetup:
this.title.setValue(this.tr("All defense units"));
this.reset();
break;
case ClientLib.Vis.Mode.ArmySetup:
this.title.setValue(this.tr("All army units"));
this.reset();
break;
}
}
},
onCurrentCityChange: function (oldCurrentCity, newCurrentCity) {
if (oldCurrentCity !== newCurrentCity) {
this.reset();
}
},
getResTime: function (need, type) {
var CurrentOwnCity = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCity();
var Alliance = ClientLib.Data.MainData.GetInstance().get_Alliance();
need -= CurrentOwnCity.GetResourceCount(type);
need = Math.max(0, need);
var Con = CurrentOwnCity.GetResourceGrowPerHour(type);
var Bonus = CurrentOwnCity.get_hasCooldown() ? 0 : CurrentOwnCity.GetResourceBonusGrowPerHour(type);
var POI = CurrentOwnCity.get_IsGhostMode() ? 0 : Alliance.GetPOIBonusFromResourceType(type);
return (need <= 0 ? 0 : need / (Con + Bonus + POI) * 3600);
},
getUpgradeCostsToLevel: function (newLevel) {
if (newLevel > 0) {
switch (ClientLib.Vis.VisMain.GetInstance().get_Mode()) {
case ClientLib.Vis.Mode.City:
return ClientLib.API.City.GetInstance().GetUpgradeCostsForAllBuildingsToLevel(newLevel);
case ClientLib.Vis.Mode.DefenseSetup:
return ClientLib.API.Defense.GetInstance().GetUpgradeCostsForAllUnitsToLevel(newLevel);
case ClientLib.Vis.Mode.ArmySetup:
return ClientLib.API.Army.GetInstance().GetUpgradeCostsForAllUnitsToLevel(newLevel);
}
}
return null;
},
getLowLevel: function () {
for (var newLevel = 1, Tib = 0, Cry = 0, Pow = 0; Tib === 0 && Cry === 0 && Pow === 0 && newLevel < 1000; newLevel++) {
var costs = this.getUpgradeCostsToLevel(newLevel);
if (costs !== null) {
for (var i = 0; i < costs.length; i++) {
var uCosts = costs[i];
var cType = parseInt(uCosts.Type, 10);
switch (cType) {
case ClientLib.Base.EResourceType.Tiberium:
Tib += uCosts.Count;
break;
case ClientLib.Base.EResourceType.Crystal:
Cry += uCosts.Count;
break;
case ClientLib.Base.EResourceType.Power:
Pow += uCosts.Count;
break;
}
}
}
}
return (newLevel === 1000?0:(newLevel - 1));
},
reset: function () {
var LowLevel = this.getLowLevel();
if (LowLevel > 0) {
this.txtLevel.setMinimum(LowLevel);
this.txtLevel.setMaximum(LowLevel + 50);
this.txtLevel.setValue(LowLevel);
this.txtLevel.setEnabled(true);
this.btnLevel.setEnabled(true);
} else {
this.txtLevel.setMinimum(0);
this.txtLevel.setMaximum(0);
this.txtLevel.resetValue();
this.txtLevel.setEnabled(false);
this.btnLevel.setEnabled(false);
}
this.onInput();
},
onTick: function () {
this.onInput();
},
onInput: function () {
var newLevel = parseInt(this.txtLevel.getValue(), 10);
var costs = this.getUpgradeCostsToLevel(newLevel);
if (newLevel > 0 && costs !== null) {
for (var i = 0, Tib = 0, Cry = 0, Pow = 0, TibTime = 0, CryTime = 0, PowTime = 0; i < costs.length; i++) {
var uCosts = costs[i];
switch (parseInt(uCosts.Type, 10)) {
case ClientLib.Base.EResourceType.Tiberium:
Tib += uCosts.Count;
TibTime += this.getResTime(uCosts.Count, ClientLib.Base.EResourceType.Tiberium);
break;
case ClientLib.Base.EResourceType.Crystal:
Cry += uCosts.Count;
CryTime += this.getResTime(uCosts.Count, ClientLib.Base.EResourceType.Crystal);
break;
case ClientLib.Base.EResourceType.Power:
Pow += uCosts.Count;
PowTime += this.getResTime(uCosts.Count, ClientLib.Base.EResourceType.Power);
break;
}
}
this.resTiberium.setLabel(phe.cnc.gui.util.Numbers.formatNumbersCompact(Tib) + (TibTime > 0 ? " @ " + phe.cnc.Util.getTimespanString(TibTime) : ""));
this.resTiberium.setToolTipText(phe.cnc.gui.util.Numbers.formatNumbers(Tib));
if (Tib === 0) this.resTiberium.exclude();
else this.resTiberium.show();
this.resChrystal.setLabel(phe.cnc.gui.util.Numbers.formatNumbersCompact(Cry) + (CryTime > 0 ? " @ " + phe.cnc.Util.getTimespanString(CryTime) : ""));
this.resChrystal.setToolTipText(phe.cnc.gui.util.Numbers.formatNumbers(Cry));
if (Cry === 0) this.resChrystal.exclude();
else this.resChrystal.show();
this.resPower.setLabel(phe.cnc.gui.util.Numbers.formatNumbersCompact(Pow) + (PowTime > 0 ? " @ " + phe.cnc.Util.getTimespanString(PowTime) : ""));
this.resPower.setToolTipText(phe.cnc.gui.util.Numbers.formatNumbers(Pow));
if (Pow === 0) this.resPower.exclude();
else this.resPower.show();
} else {
this.resTiberium.setLabel("-");
this.resTiberium.resetToolTipText();
this.resTiberium.show();
this.resChrystal.setLabel("-");
this.resChrystal.resetToolTipText();
this.resChrystal.show();
this.resPower.setLabel("-");
this.resPower.resetToolTipText();
this.resPower.show();
}
},
onUpgrade: function () {
var newLevel = parseInt(this.txtLevel.getValue(), 10);
if (newLevel > 0) {
switch (ClientLib.Vis.VisMain.GetInstance().get_Mode()) {
case ClientLib.Vis.Mode.City:
ClientLib.API.City.GetInstance().UpgradeAllBuildingsToLevel(newLevel);
this.reset();
break;
case ClientLib.Vis.Mode.DefenseSetup:
ClientLib.API.Defense.GetInstance().UpgradeAllUnitsToLevel(newLevel);
this.reset();
break;
case ClientLib.Vis.Mode.ArmySetup:
ClientLib.API.Army.GetInstance().UpgradeAllUnitsToLevel(newLevel);
this.reset();
break;
}
}
}
}
});
qx.Class.define("Upgrade.Current", {
extend: qx.ui.container.Composite,
construct: function () {
try {
qx.ui.container.Composite.call(this);
this.set({
layout : new qx.ui.layout.VBox(5),
padding: 5,
decorator: "pane-light-opaque"
});
this.add(this.title = new qx.ui.basic.Label("").set({ alignX: "center", font: "font_size_14_bold" }));
this.add(this.txtSelected = new qx.ui.basic.Label("").set({ alignX: "center" }));
var level = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
level.add(new qx.ui.basic.Label(this.tr("tnf:level:")).set({ alignY: "middle" }));
level.add(this.txtLevel = new qx.ui.form.Spinner(1).set({ maximum: 150, minimum: 1 }));
this.txtLevel.addListener("changeValue", this.onInput, this);
level.add(this.btnLevel = new qx.ui.form.Button(this.tr("tnf:toggle upgrade mode"), "FactionUI/icons/icon_building_detail_upgrade.png"));
this.btnLevel.addListener("execute", this.onUpgrade, this);
this.add(level);
var requires = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
requires.add(new qx.ui.basic.Label(this.tr("tnf:requires:")));
var resource = new qx.ui.container.Composite(new qx.ui.layout.VBox(5));
resource.add(this.resTiberium = new qx.ui.basic.Atom("-", "webfrontend/ui/common/icn_res_tiberium.png"));
this.resTiberium.setToolTipIcon("webfrontend/ui/common/icn_res_tiberium.png");
this.resTiberium.getChildControl("icon").set({ width: 18, height: 18, scale: true, alignY: "middle" });
resource.add(this.resChrystal = new qx.ui.basic.Atom("-", "webfrontend/ui/common/icn_res_chrystal.png"));
this.resChrystal.setToolTipIcon("webfrontend/ui/common/icn_res_chrystal.png");
this.resChrystal.getChildControl("icon").set({ width: 18, height: 18, scale: true, alignY: "middle" });
resource.add(this.resPower = new qx.ui.basic.Atom("-", "webfrontend/ui/common/icn_res_power.png"));
this.resPower.setToolTipIcon("webfrontend/ui/common/icn_res_power.png");
this.resPower.getChildControl("icon").set({ width: 18, height: 18, scale: true, alignY: "middle" });
requires.add(resource);
this.add(requires);
this.addListener("appear", this.onAppear, this);
this.addListener("disappear", this.onDisappear, this);
} catch (e) {
console.log("Error setting up Upgrade.Current Constructor: ");
console.log(e.toString());
}
},
destruct: function () {},
members: {
title: null,
txtSelected: null,
txtLevel: null,
btnLevel: null,
resTiberium: null,
resChrystal: null,
resPower: null,
Selection: null,
onAppear: function () {
phe.cnc.Util.attachNetEvent(ClientLib.Vis.VisMain.GetInstance(), "ViewModeChange", ClientLib.Vis.ViewModeChange, this, this.onViewModeChanged);
phe.cnc.Util.attachNetEvent(ClientLib.Vis.VisMain.GetInstance(), "SelectionChange", ClientLib.Vis.SelectionChange, this, this.onSelectionChange);
phe.cnc.Util.attachNetEvent(ClientLib.Data.MainData.GetInstance().get_Cities(), "CurrentOwnChange", ClientLib.Data.CurrentOwnCityChange, this, this.onCurrentCityChange);
phe.cnc.Util.attachNetEvent(ClientLib.Data.MainData.GetInstance().get_Cities(), "CurrentChange", ClientLib.Data.CurrentCityChange, this, this.onCurrentCityChange);
phe.cnc.base.Timer.getInstance().addListener("uiTick", this.onTick, this);
this.onViewModeChanged(null, ClientLib.Vis.VisMain.GetInstance().get_Mode());
},
onDisappear: function () {
phe.cnc.Util.detachNetEvent(ClientLib.Vis.VisMain.GetInstance(), "ViewModeChange", ClientLib.Vis.ViewModeChange, this, this.onViewModeChanged);
phe.cnc.Util.detachNetEvent(ClientLib.Vis.VisMain.GetInstance(), "SelectionChange", ClientLib.Vis.SelectionChange, this, this.onSelectionChange);
phe.cnc.Util.detachNetEvent(ClientLib.Data.MainData.GetInstance().get_Cities(), "CurrentOwnChange", ClientLib.Data.CurrentOwnCityChange, this, this.onCurrentCityChange);
phe.cnc.Util.detachNetEvent(ClientLib.Data.MainData.GetInstance().get_Cities(), "CurrentChange", ClientLib.Data.CurrentCityChange, this, this.onCurrentCityChange);
phe.cnc.base.Timer.getInstance().removeListener("uiTick", this.onTick, this);
},
onViewModeChanged: function (oldViewMode, newViewMode) {
if (oldViewMode !== newViewMode) {
switch (newViewMode) {
case ClientLib.Vis.Mode.City:
this.title.setValue(this.tr("Selected building"));
this.reset();
break;
case ClientLib.Vis.Mode.DefenseSetup:
this.title.setValue(this.tr("Selected defense unit"));
this.reset();
break;
case ClientLib.Vis.Mode.ArmySetup:
this.title.setValue(this.tr("Selected army unit"));
this.reset();
break;
}
}
},
onSelectionChange: function (oldSelection, newSelection) {
if (newSelection !== null) {
var name, level;
switch (newSelection.get_VisObjectType()) {
case ClientLib.Vis.VisObject.EObjectType.CityBuildingType:
this.Selection = newSelection;
name = newSelection.get_BuildingName();
level = newSelection.get_BuildingLevel();
this.txtSelected.setValue(name + " (" + level + ")");
this.txtLevel.setMinimum(level + 1);
this.txtLevel.setMaximum(level + 51);
this.txtLevel.setValue(level + 1);
this.txtLevel.setEnabled(true);
this.btnLevel.setEnabled(true);
this.onInput();
break;
case ClientLib.Vis.VisObject.EObjectType.DefenseUnitType:
case ClientLib.Vis.VisObject.EObjectType.ArmyUnitType:
this.Selection = newSelection;
name = newSelection.get_UnitName();
level = newSelection.get_UnitLevel();
this.txtSelected.setValue(name + " (" + level + ")");
this.txtLevel.setMinimum(level + 1);
this.txtLevel.setMaximum(level + 51);
this.txtLevel.setValue(level + 1);
this.txtLevel.setEnabled(true);
this.btnLevel.setEnabled(true);
this.onInput();
break;
}
}
},
onCurrentCityChange: function (oldCurrentCity, newCurrentCity) {
if (oldCurrentCity !== newCurrentCity) {
this.reset();
}
},
getResTime: function (need, type) {
var CurrentOwnCity = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCity();
var Alliance = ClientLib.Data.MainData.GetInstance().get_Alliance();
need -= CurrentOwnCity.GetResourceCount(type);
need = Math.max(0, need);
var Con = CurrentOwnCity.GetResourceGrowPerHour(type);
var Bonus = CurrentOwnCity.get_hasCooldown() ? 0 : CurrentOwnCity.GetResourceBonusGrowPerHour(type);
var POI = CurrentOwnCity.get_IsGhostMode() ? 0 : Alliance.GetPOIBonusFromResourceType(type);
return (need <= 0 ? 0 : need / (Con + Bonus + POI) * 3600);
},
getUpgradeCostsToLevel: function (unit, newLevel) {
var costs = null;
if (unit !== null && newLevel > 0) {
switch (unit.get_VisObjectType()) {
case ClientLib.Vis.VisObject.EObjectType.CityBuildingType:
if (newLevel > unit.get_BuildingLevel())
costs = ClientLib.API.City.GetInstance().GetUpgradeCostsForBuildingToLevel(unit.get_BuildingDetails(), newLevel);
break;
case ClientLib.Vis.VisObject.EObjectType.DefenseUnitType:
if (newLevel > unit.get_UnitLevel())
costs = ClientLib.API.Defense.GetInstance().GetUpgradeCostsForUnitToLevel(unit.get_UnitDetails(), newLevel);
break;
case ClientLib.Vis.VisObject.EObjectType.ArmyUnitType:
if (newLevel > unit.get_UnitLevel())
costs = ClientLib.API.Army.GetInstance().GetUpgradeCostsForUnitToLevel(unit.get_UnitDetails(), newLevel);
break;
}
}
return costs;
},
reset: function () {
this.Selection = null;
this.txtSelected.setValue("-");
this.txtLevel.setMinimum(0);
this.txtLevel.setMaximum(0);
this.txtLevel.resetValue();
this.txtLevel.setEnabled(false);
this.btnLevel.setEnabled(false);
this.onInput();
},
onTick: function () {
this.onInput();
},
onInput: function () {
var costs = this.getUpgradeCostsToLevel(this.Selection, parseInt(this.txtLevel.getValue(), 10));
if (costs !== null) {
for (var i = 0, Tib = 0, Cry = 0, Pow = 0, TibTime = 0, CryTime = 0, PowTime = 0; i < costs.length; i++) {
var uCosts = costs[i];
switch (parseInt(uCosts.Type, 10)) {
case ClientLib.Base.EResourceType.Tiberium:
Tib += uCosts.Count;
TibTime += this.getResTime(uCosts.Count, ClientLib.Base.EResourceType.Tiberium);
break;
case ClientLib.Base.EResourceType.Crystal:
Cry += uCosts.Count;
CryTime += this.getResTime(uCosts.Count, ClientLib.Base.EResourceType.Crystal);
break;
case ClientLib.Base.EResourceType.Power:
Pow += uCosts.Count;
PowTime += this.getResTime(uCosts.Count, ClientLib.Base.EResourceType.Power);
break;
}
}
this.resTiberium.setLabel(phe.cnc.gui.util.Numbers.formatNumbersCompact(Tib) + (TibTime > 0 ? " @ " + phe.cnc.Util.getTimespanString(TibTime) : ""));
this.resTiberium.setToolTipText(phe.cnc.gui.util.Numbers.formatNumbers(Tib));
if (Tib === 0) this.resTiberium.exclude();
else this.resTiberium.show();
this.resChrystal.setLabel(phe.cnc.gui.util.Numbers.formatNumbersCompact(Cry) + (CryTime > 0 ? " @ " + phe.cnc.Util.getTimespanString(CryTime) : ""));
this.resChrystal.setToolTipText(phe.cnc.gui.util.Numbers.formatNumbers(Cry));
if (Cry === 0) this.resChrystal.exclude();
else this.resChrystal.show();
this.resPower.setLabel(phe.cnc.gui.util.Numbers.formatNumbersCompact(Pow) + (PowTime > 0 ? " @ " + phe.cnc.Util.getTimespanString(PowTime) : ""));
this.resPower.setToolTipText(phe.cnc.gui.util.Numbers.formatNumbers(Pow));
if (Pow === 0) this.resPower.exclude();
else this.resPower.show();
} else {
this.resTiberium.setLabel("-");
this.resTiberium.resetToolTipText();
this.resTiberium.show();
this.resChrystal.setLabel("-");
this.resChrystal.resetToolTipText();
this.resChrystal.show();
this.resPower.setLabel("-");
this.resPower.resetToolTipText();
this.resPower.show();
}
},
onUpgrade: function() {
var newLevel = parseInt(this.txtLevel.getValue(), 10);
if (newLevel > 0 && this.Selection !== null) {
switch (this.Selection.get_VisObjectType()) {
case ClientLib.Vis.VisObject.EObjectType.CityBuildingType:
if (newLevel > this.Selection.get_BuildingLevel()) {
ClientLib.API.City.GetInstance().UpgradeBuildingToLevel(this.Selection.get_BuildingDetails(), newLevel);
this.onSelectionChange(null, this.Selection);
}
break;
case ClientLib.Vis.VisObject.EObjectType.DefenseUnitType:
if (newLevel > this.Selection.get_UnitLevel()) {
ClientLib.API.Defense.GetInstance().UpgradeUnitToLevel(this.Selection.get_UnitDetails(), newLevel);
this.onSelectionChange(null, this.Selection);
}
break;
case ClientLib.Vis.VisObject.EObjectType.ArmyUnitType:
if (newLevel > this.Selection.get_UnitLevel()) {
ClientLib.API.Army.GetInstance().UpgradeUnitToLevel(this.Selection.get_UnitDetails(), newLevel);
this.onSelectionChange(null, this.Selection);
}
break;
}
}
}
}
});
qx.Class.define("Upgrade.Repairtime", {
extend: qx.ui.container.Composite,
construct: function () {
try {
qx.ui.container.Composite.call(this);
this.set({
layout : new qx.ui.layout.VBox(5),
padding: 5,
decorator: "pane-light-opaque"
});
this.add(this.title = new qx.ui.basic.Label(this.tr("tnf:repair points")).set({ alignX: "center", font: "font_size_14_bold" }));
this.add(this.grid = new qx.ui.container.Composite(new qx.ui.layout.Grid()));
this.grid.add(this.basRT = new qx.ui.basic.Atom("", "FactionUI/icons/icon_arsnl_base_buildings.png").set({toolTipText: this.tr("tnf:base")}), {row: 0, column: 0});
this.basRT.getChildControl("icon").set({ width: 18, height: 18, scale: true, alignY: "middle" });
this.grid.add(new qx.ui.basic.Label("").set({ alignX: "right", alignY: "middle" }), {row: 0, column: 2});
this.grid.add(new qx.ui.basic.Label("").set({ alignX: "right", alignY: "middle" }), {row: 0, column: 4});
this.grid.add(this.btnBuildings = new qx.ui.form.Button(null, "FactionUI/icons/icon_building_detail_upgrade.png").set({toolTipText: this.tr("tnf:toggle upgrade mode"), width: 25, maxHeight: 17, alignY: "middle", show: "icon", iconPosition: "top", appearance: "button-addpoints"}), {row: 0, column: 6});
this.btnBuildings.getChildControl("icon").set({width: 14, height: 14, scale: true});
this.btnBuildings.addListener("execute", function () { this.upgradeBuilding(ClientLib.Base.ETechName.Construction_Yard); }, this);
this.grid.add(this.infRT = new qx.ui.basic.Atom("", "FactionUI/icons/icon_arsnl_off_squad.png").set({toolTipText: this.tr("tnf:infantry repair title")}), {row: 1, column: 0});
this.infRT.getChildControl("icon").set({ width: 18, height: 18, scale: true, alignY: "middle" });
this.grid.add(new qx.ui.basic.Label("").set({ alignX: "right", alignY: "middle" }), {row: 1, column: 2});
this.grid.add(new qx.ui.basic.Label("").set({ alignX: "right", alignY: "middle" }), {row: 1, column: 4});
this.grid.add(this.btnInfantry = new qx.ui.form.Button(null, "FactionUI/icons/icon_building_detail_upgrade.png").set({toolTipText: this.tr("tnf:toggle upgrade mode"), width: 25, maxHeight: 17, alignY: "middle", show: "icon", iconPosition: "top", appearance: "button-addpoints"}), {row: 1, column: 6});
this.btnInfantry.getChildControl("icon").set({width: 14, height: 14, scale: true});
this.btnInfantry.addListener("execute", function () { this.upgradeBuilding(ClientLib.Base.ETechName.Barracks); }, this);
this.grid.add(this.vehRT = new qx.ui.basic.Atom("", "FactionUI/icons/icon_arsnl_off_vehicle.png").set({toolTipText: this.tr("tnf:vehicle repair title")}), {row: 2, column: 0});
this.vehRT.getChildControl("icon").set({ width: 18, height: 18, scale: true, alignY: "middle" });
this.grid.add(new qx.ui.basic.Label("").set({ alignX: "right", alignY: "middle" }), {row: 2, column: 2});
this.grid.add(new qx.ui.basic.Label("").set({ alignX: "right", alignY: "middle" }), {row: 2, column: 4});
this.grid.add(this.btnVehicle = new qx.ui.form.Button(null, "FactionUI/icons/icon_building_detail_upgrade.png").set({toolTipText: this.tr("tnf:toggle upgrade mode"), width: 25, maxHeight: 17, alignY: "middle", show: "icon", iconPosition: "top", appearance: "button-addpoints"}), {row: 2, column: 6});
this.btnVehicle.getChildControl("icon").set({width: 14, height: 14, scale: true});
this.btnVehicle.addListener("execute", function () { this.upgradeBuilding(ClientLib.Base.ETechName.Factory); }, this);
this.grid.add(this.airRT = new qx.ui.basic.Atom("", "FactionUI/icons/icon_arsnl_off_plane.png").set({toolTipText: this.tr("tnf:aircraft repair title")}), {row: 3, column: 0});
this.airRT.getChildControl("icon").set({ width: 18, height: 18, scale: true, alignY: "middle" });
this.grid.add(new qx.ui.basic.Label("").set({ alignX: "right", alignY: "middle" }), {row: 3, column: 2});
this.grid.add(new qx.ui.basic.Label("").set({ alignX: "right", alignY: "middle" }), {row: 3, column: 4});
this.grid.add(this.btnAircraft = new qx.ui.form.Button(null, "FactionUI/icons/icon_building_detail_upgrade.png").set({toolTipText: this.tr("tnf:toggle upgrade mode"), width: 25, maxHeight: 17, alignY: "middle", show: "icon", iconPosition: "top", appearance: "button-addpoints"}), {row: 3, column: 6});
this.btnAircraft.getChildControl("icon").set({width: 14, height: 14, scale: true});
this.btnAircraft.addListener("execute", function () { this.upgradeBuilding(ClientLib.Base.ETechName.Airport); }, this);
this.grid.getLayout().setRowFlex(0, 0);
this.grid.getLayout().setRowFlex(1, 0);
this.grid.getLayout().setRowFlex(2, 0);
this.grid.getLayout().setRowFlex(3, 0);
this.grid.getLayout().setColumnFlex(1, 200);
this.grid.getLayout().setColumnFlex(3, 200);
this.grid.getLayout().setColumnFlex(5, 200);
this.addListener("appear", this.onAppear, this);
this.addListener("disappear", this.onDisappear, this);
} catch (e) {
console.log("Error setting up Upgrade.Repairtime Constructor: ");
console.log(e.toString());
}
},
destruct: function () {},
members: {
title: null,
grid: null,
btnBuildings: null,
btnInfantry: null,
btnVehicle: null,
btnAircraft: null,
onAppear: function () {
phe.cnc.Util.attachNetEvent(ClientLib.Data.MainData.GetInstance().get_Cities(), "CurrentOwnChange", ClientLib.Data.CurrentOwnCityChange, this, this.onCurrentCityChange);
phe.cnc.Util.attachNetEvent(ClientLib.Data.MainData.GetInstance().get_Cities(), "CurrentChange", ClientLib.Data.CurrentCityChange, this, this.onCurrentCityChange);
phe.cnc.base.Timer.getInstance().addListener("uiTick", this.onTick, this);
this.getInfo();
},
onDisappear: function () {
phe.cnc.Util.detachNetEvent(ClientLib.Data.MainData.GetInstance().get_Cities(), "CurrentOwnChange", ClientLib.Data.CurrentOwnCityChange, this, this.onCurrentCityChange);
phe.cnc.Util.detachNetEvent(ClientLib.Data.MainData.GetInstance().get_Cities(), "CurrentChange", ClientLib.Data.CurrentCityChange, this, this.onCurrentCityChange);
phe.cnc.base.Timer.getInstance().removeListener("uiTick", this.onTick, this);
},
onTick: function () {
this.getInfo();
},
onCurrentCityChange: function (oldCurrentCity, newCurrentCity) {
if (oldCurrentCity !== newCurrentCity) {
this.getInfo();
}
},
canUpgradeBuilding: function (ETechName) {
var city = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCity();
var building = city.get_CityBuildingsData().GetUniqueBuildingByTechName(ETechName);
if (building) {
var ResourceRequirements_Obj = ClientLib.Base.Util.GetUnitLevelResourceRequirements_Obj(building.get_CurrentLevel() + 1, building.get_UnitGameData_Obj());
return (building.get_CurrentDamage() === 0 && !city.get_IsLocked() && city.HasEnoughResources(ResourceRequirements_Obj));
} else return false;
},
upgradeBuilding: function (ETechName) {
var city = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCity();
var building = city.get_CityBuildingsData().GetUniqueBuildingByTechName(ETechName);
if (building) {
ClientLib.Net.CommunicationManager.GetInstance().SendCommand("UpgradeBuilding", {
cityid : city.get_Id(),
posX : building.get_CoordX(),
posY : building.get_CoordY()
}, null, null, true);
}
},
getInfo: function () {
try {
var lvl, win, city = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCity();
lvl = city.get_CityBuildingsData().GetUniqueBuildingByTechName(ClientLib.Base.ETechName.Construction_Yard).get_CurrentLevel();
win = (city.get_CityBuildingsData().GetFullRepairTime(true) - city.get_CityBuildingsData().GetFullRepairTime(false)) * -1;
this.grid.getLayout().getCellWidget(0, 0).setLabel("("+ lvl +")");
this.grid.getLayout().getCellWidget(0, 2).setValue(phe.cnc.Util.getTimespanString(city.get_CityBuildingsData().GetFullRepairTime()));
this.grid.getLayout().getCellWidget(0, 4).setValue("-"+ phe.cnc.Util.getTimespanString(win));
if (city.get_CityUnitsData().GetRepairTimeFromEUnitGroup(ClientLib.Data.EUnitGroup.Infantry, false) > 0) {
lvl = city.get_CityBuildingsData().GetUniqueBuildingByTechName(ClientLib.Base.ETechName.Barracks).get_CurrentLevel();
win = (city.get_CityUnitsData().GetRepairTimeFromEUnitGroup(ClientLib.Data.EUnitGroup.Infantry, true) - city.get_CityUnitsData().GetRepairTimeFromEUnitGroup(ClientLib.Data.EUnitGroup.Infantry, false)) * -1;
this.grid.getLayout().getCellWidget(1, 0).setLabel("("+ lvl +")");
this.grid.getLayout().getCellWidget(1, 2).setValue(phe.cnc.Util.getTimespanString(city.get_CityUnitsData().GetRepairTimeFromEUnitGroup(ClientLib.Data.EUnitGroup.Infantry, false)));
this.grid.getLayout().getCellWidget(1, 4).setValue("-"+ phe.cnc.Util.getTimespanString(win));
this.grid.getLayout().setRowHeight(1, 18);
} else {
this.grid.getLayout().setRowHeight(1, 0);
}
if (city.get_CityUnitsData().GetRepairTimeFromEUnitGroup(ClientLib.Data.EUnitGroup.Vehicle, false) > 0) {
lvl = city.get_CityBuildingsData().GetUniqueBuildingByTechName(ClientLib.Base.ETechName.Factory).get_CurrentLevel();
win = (city.get_CityUnitsData().GetRepairTimeFromEUnitGroup(ClientLib.Data.EUnitGroup.Vehicle, true) - city.get_CityUnitsData().GetRepairTimeFromEUnitGroup(ClientLib.Data.EUnitGroup.Vehicle, false)) * -1;
this.grid.getLayout().getCellWidget(2, 0).setLabel("("+ lvl +")");
this.grid.getLayout().getCellWidget(2, 2).setValue(phe.cnc.Util.getTimespanString(city.get_CityUnitsData().GetRepairTimeFromEUnitGroup(ClientLib.Data.EUnitGroup.Vehicle, false)));
this.grid.getLayout().getCellWidget(2, 4).setValue("-"+ phe.cnc.Util.getTimespanString(win));
this.grid.getLayout().setRowHeight(2, 18);
} else {
this.grid.getLayout().setRowHeight(2, 0);
}
if (city.get_CityUnitsData().GetRepairTimeFromEUnitGroup(ClientLib.Data.EUnitGroup.Aircraft, false) > 0) {
lvl = city.get_CityBuildingsData().GetUniqueBuildingByTechName(ClientLib.Base.ETechName.Airport).get_CurrentLevel();
win = (city.get_CityUnitsData().GetRepairTimeFromEUnitGroup(ClientLib.Data.EUnitGroup.Aircraft, true) - city.get_CityUnitsData().GetRepairTimeFromEUnitGroup(ClientLib.Data.EUnitGroup.Aircraft, false)) * -1;
this.grid.getLayout().getCellWidget(3, 0).setLabel("("+ lvl +")");
this.grid.getLayout().getCellWidget(3, 2).setValue(phe.cnc.Util.getTimespanString(city.get_CityUnitsData().GetRepairTimeFromEUnitGroup(ClientLib.Data.EUnitGroup.Aircraft, false)));
this.grid.getLayout().getCellWidget(3, 4).setValue("-"+ phe.cnc.Util.getTimespanString(win));
this.grid.getLayout().setRowHeight(3, 18);
} else {
this.grid.getLayout().setRowHeight(3, 0);
}
if (this.canUpgradeBuilding(ClientLib.Base.ETechName.Construction_Yard)) this.btnBuildings.setEnabled(true);
else this.btnBuildings.setEnabled(false);
if (this.canUpgradeBuilding(ClientLib.Base.ETechName.Barracks)) this.btnInfantry.setEnabled(true);
else this.btnInfantry.setEnabled(false);
if (this.canUpgradeBuilding(ClientLib.Base.ETechName.Factory)) this.btnVehicle.setEnabled(true);
else this.btnVehicle.setEnabled(false);
if (this.canUpgradeBuilding(ClientLib.Base.ETechName.Airport)) this.btnAircraft.setEnabled(true);
else this.btnAircraft.setEnabled(false);
} catch (e) {
console.log("Error in Upgrade.Repairtime.getInfo: ");
console.log(e.toString());
}
}
}
});
}
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
localeManager.addTranslation("de", {
"Selected building": "Markiertes Gebäude",
"All buildings": "Alle Gebäude",
"Selected defense unit": "Markierte Abwehrstellung",
"All defense units": "Alle Abwehrstellungen",
"Selected army unit": "Markierte Armee-Einheit",
"All army units": "Alle Armee-Einheiten"
});
// Hungarian
localeManager.addTranslation("hu", {
"Selected building": "Kiválasztott létesítmény",
"All buildings": "Összes létesítmény",
"Selected defense unit": "Kiválasztott védelmi egység",
"All defense units": "Minden védelmi egység",
"Selected army unit": "Kiválasztott katonai egység",
"All army units": "Minden katonai egység"
});
// Russian
localeManager.addTranslation("ru", {
"Selected building": "Вывбранное здание",
"All buildings": "Все здания",
"Selected defense unit": "Выбранный оборонный юнит",
"All defense units": "Все оборонные юниты",
"Selected army unit": "Выделенный юнит атаки",
"All army units": "Все юниты атаки"
});
}
function waitForGame() {
try {
if (typeof qx != 'undefined' && typeof qx.core != 'undfined' && typeof qx.core.Init != 'undefined') {
var app = qx.core.Init.getApplication();
if (app.initDone === true) {
try {
console.log("WarChiefs - Tiberium Alliances Upgrade Base/Defense/Army: Loading");
translation();
createClasses();
Upgrade.getInstance();
console.log("WarChiefs - Tiberium Alliances Upgrade Base/Defense/Army: Loaded");
} catch (e) {
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);
})();