您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Upgrade your Base,Defense Army to a specific Level.
// ==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); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址