Results 1 to 6 of 6
  1. #1
    Thyrius's Avatar
    Join Date
    Jul 2011
    Gender
    male
    Location
    Kill Creek
    Posts
    340
    Reputation
    10
    Thanks
    43
    My Mood
    Bored

    Lightbulb Command and Conquer Alliances Simulator

    Hi everyone, I've been playing C&C Alliances https://alliances.commandandconquer.com/ and found a script that allow us to simulate the battle before it starts... well this script still working very well, but we had a tool that automatic finds the best formation of our army, it was a "pro version" but it have been discontinued by de author because someone hacked his account, so I was thinking if someone here at MPGH can update the SCRIPT to keep it working, I think the language is HTML5 and the sourcecode of script is this: https://******.com/wildkatana/ta-combat-sim-pro
     
    Code:
    // ==UserScript==
    // @NaMe           Tiberium Alliances Combat Simulator
    // @Description    Allows you to simulate combat before actually attacking.
    // @Namespace      https://prodgame*.alliances.commanda.../*/index.aspx* 
    // @include        https://prodgame*.alliances.commanda.../*/index.aspx*
    // @Version        1.3.3.0
    // @Author         WildKatana
    // @Require        https://sizzlemctwizzle.com/updater.php?id=130344&days=1
    // ==/UserScript==
    (function () {
      var TASuite_mainFunction = function () {
          function createTweak() {
            var TASuite = {};
            qx.Class.define("TASuite.main", {
              type: "singleton",
              extend: q*****re.Object,
              members: {
                buttonSimulateCombat: null,
                buttonLayoutSave: null,
                buttonLayoutLoad: null,
                buttonReturnSetup: null,
                buttonUnlockAttack: null,
                buttonTools: null,
                busy: null,
                
                add_ViewModeChange: null,
                add_ArmyChanged: null,
                
                attacker_modules: null,
                defender_modules: null,
                
                lastPercentage: null,
                lastRepairTime: null,
                lastEnemyPercentage: null,
                lastDFPercentage: null,
                lastCYPercentage: null,
                lastInfantryPercentage: null,
                lastVehiclePercentage: null,
                lastAirPercentage: null,
                lastEnemyUnitsPercentage: null,
                lastEnemyBuildingsPercentage: null,
                lastInfantryRepairTime: null,
                lastVehicleRepairTime: null,
                lastAircraftRepairTime: null,
                
                tiberiumSpoils: null,
                crystalSpoils: null,
                creditSpoils: null,
                researchSpoils: null,
                
                units: null,
                units_list: null,
                saved_units: null,
                layoutsList: null,
                layoutsLabelText: null,
                
                battleResultsBox: null,
                statsPage: null,
                
                troopDamageLabel: null,
                enemyTroopStrengthLabel: null,
                enemyBuildingsStrengthLabel: null,
                enemyUnitsStrengthLabel: null,
                airTroopStrengthLabel: null,
                infantryTroopStrengthLabel: null,
                vehicleTroopStrengthLabel: null,
                CYTroopStrengthLabel: null,
                DFTroopStrengthLabel: null,
                simTroopDamageLabel: null,
                simRepairTimeLabel: null,
                simVictoryLabel: null,
                enemySupportLevelLabel: null,
                enemySupportStrengthLabel: null,
                
                initialize: function () {
                  this.add_ViewModeChange = (new ClientLib.Vis.ViewModeChange).GEDTYY(this, this.onViewChange);
                  this.add_ArmyChanged = (new $I.WMJHOK).GEDTYY(this, this.onUnitMoved);
                  this.buttonSimulateCombat = new qx.ui.form.Button("Simulate");
                  this.buttonSimulateCombat.set({
                    width: 80,
                    appearance: "button-text-small",
                    toolTipText: "Start Combat Simulation"
                  });
                  this.buttonSimulateCombat.addListener("click", this.startSimulation, this);
    
                  this.buttonReturnSetup = new qx.ui.form.Button("Setup");
                  this.buttonReturnSetup.set({
                    width: 80,
                    appearance: "button-text-small",
                    toolTipText: "Return to Combat Setup"
                  });
                  this.buttonReturnSetup.addListener("click", this.returnSetup, this);
                  
                  var replayBar = q*****re.Init.getApplication().getReportReplayOverlay();
                  replayBar.add(this.buttonReturnSetup, {
                    top: 10,
                    left: 0
                  });
                  
                  var armyBar = q*****re.Init.getApplication().getUIItem(ClientLib.Data.Missions.PATH.BAR_ATTACKSETUP);
    
                  this.buttonUnlockAttack = new qx.ui.form.Button("Unlock");
                  this.buttonUnlockAttack.set({
                    width: 60,
                    height: 45,
                    appearance: "button-text-small",
                    toolTipText: "Unlock"
                  });
                  this.buttonUnlockAttack.addListener("click", this.unlockAttacks, this);
                  this.buttonUnlockAttack.setOpacity(0.5);
                  armyBar.add(this.buttonUnlockAttack, {
                    top: 103,
                    right: 0
                  });
                  
                  this.buttonTools = new qx.ui.form.Button("Tools");
                  this.buttonTools.set({
                    width: 80,
                    appearance: "button-text-small",
                    toolTipText: "Open Simulator Tools"
                  });
                  this.buttonTools.addListener("click", this.toggleTools, this);
                  
                  busy = false;
    
                  _this = this;
                  setTimeout(function () {
                    try {
                      // Get the active modules
                      // Doing this the hard and unreliable way for now, until we figure out a better way
                      _this.attacker_modules = {};
                      _this.attacker_modules.l = [];
                      var g = ClientLib.Res.ResMain.GetInstance();
                      
                      // Get the player faction
                      // var gdi_unit_ids = g.GetFactionUnitIds(1);
                      // var nod_unit_ids = g.GetFactionUnitIds(2);
                      // var forgotten_unit_ids = g.GetFactionUnitIds(3);
                      
                      var player_research = ClientLib.Data.MainData.GetInstance().get_Player().get_PlayerResearch();
                      
                      for (var i in g.IYHFVG.units) {
                        var ug = g.GetUnit_Obj(i);
                        var research = player_research.GetResearchItemFomMdbId(ug.tl);
                        
                        var modules = ug.m;
                        for (var j in modules) {
                          var module = modules[j];
                          if (research && module.r.length > 0) {
                            try {
                              // This is an upgradeable ability
                              var required_level = module.r[0].l;
                              var current_level = research.get_CurrentLevel();
                              if (current_level >= required_level) {
                                _this.attacker_modules.l.push(module.i);
                              }
                            }
                            catch (e) {
                              console.log(e);
                            }
                          }
                          else {
                            _this.attacker_modules.l.push(module.i);
                          }
                        }
                      }
                      
                      // Get the defender modules
    
                      _this.defender_modules = _this.attacker_modules;
                      ClientLib.Vis.VisMain.GetInstance().add_ViewModeChange(_this.add_ViewModeChange);
                      
                      armyBar.add(_this.buttonTools, {
                        top: 20,
                        left: 0
                      });
                      armyBar.add(_this.buttonSimulateCombat, {
                        top: 50,
                        left: 0
                      });
                    } catch (e) {
                      console.log(e);
                    }
                  }, 10000);
                  
                  // The Battle Simulator box
                  this.battleResultsBox = new qx.ui.window.Window("Battle Simulator");
                  this.battleResultsBo*****tPadding(1);
                  this.battleResultsBo*****tLayout(new qx.ui.layout.VBox(1));
                  this.battleResultsBo*****tShowMaximize(false);
                  this.battleResultsBo*****tShowMinimize(false);
                  this.battleResultsBox.moveTo(125, 125);
                  this.battleResultsBo*****tHeight(300);
                  this.battleResultsBo*****tWidth(200);
                  
                  var tabView = new qx.ui.tabview.TabView();
                  tabView.setPadding(5);
                  this.battleResultsBox.add(tabView);
    
                  ////////////////// Stats ////////////////////
                  this.statsPage = new qx.ui.tabview.Page("Stats");
                  this.statsPage.setLayout(new qx.ui.layout.VBox(5));
                  this.statsPage.setPadding(1);
                  tabView.add(this.statsPage);
    
                  // The Enemy Vertical Box
                  var eVBox = new qx.ui.container.Composite()
                  eVBo*****tLayout(new qx.ui.layout.VBox(5));
                  eVBo*****tThemedFont("bold");
                  eVBo*****tThemedPadding(2);
                  eVBo*****tThemedBackgroundColor("#eef");
                  this.statsPage.add(eVBox);
                  // The Enemy Troop Strength Label
                  var eHBox1 = new qx.ui.container.Composite();
                  eHBox1.setLayout(new qx.ui.layout.HBox(5));
                  eHBox1.add(new qx.ui.basic.Label("Enemy Base: "));
                  this.enemyTroopStrengthLabel = new qx.ui.basic.Label("100");
                  eHBox1.add(this.enemyTroopStrengthLabel);
                  this.enemyTroopStrengthLabel.setTextColor("red");
                  eVBox.add(eHBox1);
                  // Units
                  var eHBox4 = new qx.ui.container.Composite();
                  eHBox4.setLayout(new qx.ui.layout.HBox(5));
                  eHBox4.add(new qx.ui.basic.Label("Defences: "));
                  this.enemyUnitsStrengthLabel = new qx.ui.basic.Label("100");
                  eHBox4.add(this.enemyUnitsStrengthLabel);
                  this.enemyUnitsStrengthLabel.setTextColor("green");
                  eVBox.add(eHBox4);
                  // Buildings
                  var eHBox5 = new qx.ui.container.Composite();
                  eHBox5.setLayout(new qx.ui.layout.HBox(5));
                  eHBox5.add(new qx.ui.basic.Label("Buildings: "));
                  this.enemyBuildingsStrengthLabel = new qx.ui.basic.Label("100");
                  eHBox5.add(this.enemyBuildingsStrengthLabel);
                  this.enemyBuildingsStrengthLabel.setTextColor("green");
                  eVBox.add(eHBox5);
                  // Command Center
                  var eHBox2 = new qx.ui.container.Composite();
                  eHBox2.setLayout(new qx.ui.layout.HBox(5));
                  eHBox2.add(new qx.ui.basic.Label("Construction Yard: "));
                  this.CYTroopStrengthLabel = new qx.ui.basic.Label("100");
                  eHBox2.add(this.CYTroopStrengthLabel);
                  this.CYTroopStrengthLabel.setTextColor("red");
                  eVBox.add(eHBox2);
                  // Defense Facility
                  var eHBox3 = new qx.ui.container.Composite();
                  eHBox3.setLayout(new qx.ui.layout.HBox(5));
                  eHBox3.add(new qx.ui.basic.Label("Defense Facility: "));
                  this.DFTroopStrengthLabel = new qx.ui.basic.Label("100");
                  eHBox3.add(this.DFTroopStrengthLabel);
                  this.DFTroopStrengthLabel.setTextColor("red");
                  eVBox.add(eHBox3);
                  // The Support Horizontal Box
                  var hboxSupportContainer = new qx.ui.container.Composite();
                  hboxSupportContainer.setLayout(new qx.ui.layout.HBox(5));
                  this.enemySupportLevelLabel = new qx.ui.basic.Label("Suport lvl ");
                  hboxSupportContainer.add(this.enemySupportLevelLabel);
                  this.enemySupportStrengthLabel = new qx.ui.basic.Label("--: 100");
                  hboxSupportContainer.add(this.enemySupportStrengthLabel);
                  this.enemySupportStrengthLabel.setTextColor("red");
                  eVBox.add(hboxSupportContainer);
                  // The Troops Vertical Box
                  var tVBox = new qx.ui.container.Composite()
                  tVBo*****tLayout(new qx.ui.layout.VBox(5));
                  tVBo*****tThemedFont("bold");
                  tVBo*****tThemedPadding(2);
                  tVBo*****tThemedBackgroundColor("#eef");
                  this.statsPage.add(tVBox);
                  // The Repair Time Label
                  var tHBox1 = new qx.ui.container.Composite();
                  tHBox1.setLayout(new qx.ui.layout.HBox(5));
                  tHBox1.add(new qx.ui.basic.Label("Repair Time: "));
                  this.simRepairTimeLabel = new qx.ui.basic.Label("0:00:00");
                  tHBox1.add(this.simRepairTimeLabel);
                  this.simRepairTimeLabel.setTextColor("blue");
                  tVBox.add(tHBox1);
                  // The Troop Strength Label
                  var tHBox5 = new qx.ui.container.Composite();
                  tHBox5.setLayout(new qx.ui.layout.HBox(5));
                  tHBox5.add(new qx.ui.basic.Label("Overall: "));
                  this.simTroopDamageLabel = new qx.ui.basic.Label("100");
                  tHBox5.add(this.simTroopDamageLabel);
                  this.simTroopDamageLabel.setTextColor("blue");
                  tVBox.add(tHBox5);
                  // The Infantry Troop Strength Label
                  var tHBox2 = new qx.ui.container.Composite();
                  tHBox2.setLayout(new qx.ui.layout.HBox(5));
                  tHBox2.add(new qx.ui.basic.Label("Infantry: "));
                  this.infantryTroopStrengthLabel = new qx.ui.basic.Label("100");
                  tHBox2.add(this.infantryTroopStrengthLabel);
                  this.infantryTroopStrengthLabel.setTextColor("green");
                  tVBox.add(tHBox2);
                  // The Vehicle Troop Strength Label
                  var tHBox3 = new qx.ui.container.Composite();
                  tHBox3.setLayout(new qx.ui.layout.HBox(5));
                  tHBox3.add(new qx.ui.basic.Label("Vehicle: "));
                  this.vehicleTroopStrengthLabel = new qx.ui.basic.Label("100");
                  tHBox3.add(this.vehicleTroopStrengthLabel);
                  this.vehicleTroopStrengthLabel.setTextColor("green");
                  tVBox.add(tHBox3);
                  // The Air Troop Strength Label
                  var tHBox4 = new qx.ui.container.Composite();
                  tHBox4.setLayout(new qx.ui.layout.HBox(5));
                  tHBox4.add(new qx.ui.basic.Label("Aircraft: "));
                  this.airTroopStrengthLabel = new qx.ui.basic.Label("100");
                  tHBox4.add(this.airTroopStrengthLabel);
                  this.airTroopStrengthLabel.setTextColor("green");
                  tVBox.add(tHBox4);
    
                  // The inner Vertical Box
                  var vBox = new qx.ui.container.Composite()
                  vBo*****tLayout(new qx.ui.layout.VBox(5));
                  vBo*****tThemedFont("bold");
                  vBo*****tThemedPadding(2);
                  vBo*****tThemedBackgroundColor("#eef");
                  // The Victory Label
                  var hBox2 = new qx.ui.container.Composite()
                  hBox2.setLayout(new qx.ui.layout.HBox(5));
                  hBox2.add(new qx.ui.basic.Label("Outcome: "));
                  this.simVictoryLabel = new qx.ui.basic.Label("Unknown");
                  hBox2.add(this.simVictoryLabel);
                  this.simVictoryLabel.setTextColor("green");
                  vBox.add(hBox2);
                  
                  this.statsPage.add(vBox);
                  
                  
                  ////////////////// Layouts ////////////////////
                  var layoutPage = new qx.ui.tabview.Page("Layouts");
                  layoutPage.setLayout(new qx.ui.layout.VBox());
                  tabView.add(layoutPage);
    
                  this.layoutsList = new qx.ui.form.List();
                  this.layoutsList.set({
                    height: 200,
                    width: 180,
                    selectionMode: "one"
                  });
                  layoutPage.add(this.layoutsList);
    
                  // Add the two buttons for save and load
                  var layHBox = new qx.ui.container.Composite();
                  layHBo*****tLayout(new qx.ui.layout.HBox(5));
                  // Load button
                  this.buttonLayoutLoad = new qx.ui.form.Button("Load");
                  this.buttonLayoutLoad.set({
                    width: 80,
                    appearance: "button-text-small",
                    toolTipText: "Load this saved layout."
                  });
                  this.buttonLayoutLoad.addListener("click", this.loadCityLayout, this);
                  layHBox.add(this.buttonLayoutLoad);
                  // Delete button
                  this.buttonLayoutDelete = new qx.ui.form.Button("Delete");
                  this.buttonLayoutDelete.set({
                    width: 80,
                    appearance: "button-text-small",
                    toolTipText: "Delete this saved layout."
                  });
                  this.buttonLayoutDelete.addListener("click", this.deleteCityLayout, this);
                  layHBox.add(this.buttonLayoutDelete);
                  layoutPage.add(layHBox);
    
                  var layVBox = new qx.ui.container.Composite()
                  layVBo*****tLayout(new qx.ui.layout.VBox(5));
                  layVBo*****tThemedFont("bold");
                  layVBo*****tThemedPadding(2);
                  layVBo*****tThemedBackgroundColor("#eef");
                  // The Label Textbox
                  var layHBox2 = new qx.ui.container.Composite()
                  layHBox2.setLayout(new qx.ui.layout.HBox(5));
                  layHBox2.add(new qx.ui.basic.Label("Name: "));
                  this.layoutsLabelText = new qx.ui.form.TextField();
                  layHBox2.add(this.layoutsLabelText);
                  layVBox.add(layHBox2);
    
                  this.buttonLayoutSave = new qx.ui.form.Button("Save");
                  this.buttonLayoutSave.set({
                    width: 80,
                    appearance: "button-text-small",
                    toolTipText: "Save this layout."
                  });
                  this.buttonLayoutSave.addListener("click", this.saveCityLayout, this);
                  layVBox.add(this.buttonLayoutSave);
                  layoutPage.add(layVBox);
    
                  ////////////////// Info ////////////////////
                  var infoPage = new qx.ui.tabview.Page("Info");
                  infoPage.setLayout(new qx.ui.layout.VBox(5));
                  tabView.add(infoPage);
    
                  // The Help Vertical Box
                  var pVBox = new qx.ui.container.Composite()
                  pVBo*****tLayout(new qx.ui.layout.VBox(5));
                  pVBo*****tThemedFont("bold");
                  pVBo*****tThemedPadding(2);
                  pVBo*****tThemedBackgroundColor("#eef");
                  infoPage.add(pVBox);
                  var proHelpBar = new qx.ui.basic.Label().set({
                    value: "<a target='_blank' href='https://userscripts.org/scripts/discuss/130344'>Forums</a>",
                    rich: true
                  });
                  pVBox.add(proHelpBar);
                  // The Spoils
                  var psVBox = new qx.ui.container.Composite()
                  psVBo*****tLayout(new qx.ui.layout.VBox(5));
                  psVBo*****tThemedFont("bold");
                  psVBo*****tThemedPadding(2);
                  psVBo*****tThemedBackgroundColor("#eef");
                  infoPage.add(psVBox);
                  psVBox.add(new qx.ui.basic.Label("Spoils"));
                  // Tiberium
                  this.tiberiumSpoils = new qx.ui.basic.Atom("0", "webfrontend/ui/common/icn_res_tiberium.png");
                  psVBox.add(this.tiberiumSpoils);
                  // Crystal
                  this.crystalSpoils = new qx.ui.basic.Atom("0", "webfrontend/ui/common/icn_res_chrystal.png");
                  psVBox.add(this.crystalSpoils);
                  // Credits
                  this.creditSpoils = new qx.ui.basic.Atom("0", "webfrontend/ui/common/icn_res_dollar.png");
                  psVBox.add(this.creditSpoils);
                  // Research
                  this.researchSpoils = new qx.ui.basic.Atom("0", "webfrontend/ui/common/icn_res_research_mission.png");
                  psVBox.add(this.researchSpoils);
    
                  this.battleResultsBox.add(tabView);
                },
                closeToolsBox: function () {
                  try {
                    var units = this.getCityPreArmyUnits();
                    if (units) {
                      units.remove_ArmyChanged(this.add_ArmyChanged);
                    }
                    this.battleResultsBox.close();
                  } catch (e) {
                    console.log(e);
                  }
                },
                toggleTools: function () {
                  var units = this.getCityPreArmyUnits();
                  this.units = units.get_ArmyUnits().l;
                  if (this.battleResultsBox.isVisible()) {
                    this.closeToolsBox();
                  }
                  else {
                    // Add the event listener for armybar
                    try {
                      units.remove_ArmyChanged(this.add_ArmyChanged);
                      units.add_ArmyChanged(this.add_ArmyChanged);
                    } catch (e) {
                      console.log(e);
                    }
                    
                    this.updateLayoutsList();
                    this.calculateLoot();
                    this.calculateSimResults();
                    this.updateStatsWindow();
                    this.battleResultsBox.open();
                  }
                },
                getCityPreArmyUnits: function () {
                  var armyBar = q*****re.Init.getApplication().getUIItem(ClientLib.Data.Missions.PATH.BAR_ATTACKSETUP);
                  var units = null;
                  for (var key in armyBar) {
                    try {
                      if (armyBar[key] instanceof ClientLib.Data.CityPreArmyUnits) { // ClientLib.Data.CityPreArmyUnits renamed to $I.UIG  = $I.NSVPME *CHECKED*
                        units = armyBar[key];
                        break;
                      }
                    } catch (e) {
    
                    }
                  }
    
                  return units;
                },
                calculateLoot: function () {
                  // Adapted from the CNC Loot script: https://userscripts.org/scripts/show/135953
                  var city = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCity();
                  var num = city.get_CityBuildingsData().RVQBJT(); // m_BuildSlotsCurrent renamed to RVQBJT()
                  var spoils = {
                    1: 0,
                    2: 0,
                    3: 0,
                    6: 0,
                    7: 0
                  };
    
                  for (var j = num; --j >= 0;) {
                    var building = city.get_CityBuildingsData().RSRTMA().l[j]; //m_Buildings renamed to RSRTMA()
                    var mod = building.NRCJKK / building.UBEEJD; //m_CurrentHealth renamed to NRCJKK, m_MaxHealth renamed to UBEEJD
                    for (var i = building.RBGTWS.rer.length; --i >= 0;) { //m_UnitLevelRequirements renamed to RBGTWS
                      spoils[building.RBGTWS.rer[i].t] += mod * building.RBGTWS.rer[i].c;
                    }
                  }
    
                  if (city.get_CityUnitsData().SNVBHX != null) { // m_DefenseUnits renamed to SNVBHX
                    num = city.get_CityUnitsData().SNVBHX.l.length;
                    for (j = num; --j >= 0;) {
                      var unit = city.get_CityUnitsData().SNVBHX.l[j];
                      mod = unit.NRCJKK / unit.UBEEJD;
                      for (i = unit.RBGTWS.rer.length; --i >= 0;) {
                        spoils[unit.RBGTWS.rer[i].t] += mod * unit.RBGTWS.rer[i].c;
                      }
                    }
                  }
                  this.tiberiumSpoils.setLabel(this.formatNumberWithCommas(spoils[1]));
                  this.crystalSpoils.setLabel(this.formatNumberWithCommas(spoils[2]));
                  this.creditSpoils.setLabel(this.formatNumberWithCommas(spoils[3]));
                  this.researchSpoils.setLabel(this.formatNumberWithCommas(spoils[6]));
                },
                calculateSimResults: function () {
                  var battleground = this.setupBattleground(this.getCityPreArmyUnits());
                  
                  // Run the simulation until it's done
                  while (battleground.HXGRQD.ICPGRO(false)) {} // DoStep$0 was renamed to ICPGRO, m_Simulation was renamed to HXGRQD
                  
                  this.calculateTroopStrengths(battleground);
                },
                onUnitMoved: function (sender, e) {
                  if (!busy) {
                    var ta = window.TASuite.main.getInstance();
                    ta.calculateSimResults();
                    ta.updateStatsWindow();
                  }
                },
                onDamageDone: function (sender, e) {
                  var ta = window.TASuite.main.getInstance();
                  battleground = sender.GETXBE.i[0].o; // DamageDone was renamed to GETXBE
                  // For the sake of performance, only run this every 10th step
                  if (battleground.LTUPDH % 10 == 0) { // m_CurrentStep changed to LTUPDH
                    ta.calculateTroopStrengths(battleground);
                    ta.updateStatsWindow();
                  }
                },
                calculateTroopStrengths: function (battleground) {
                  var battleground = ClientLib.Vis.VisMain.GetInstance().get_Battleground();
                  var total_hp = 0;
                  var end_hp = 0;
                  var e_total_hp = 0;
                  var e_end_hp = 0;
                  var eb_total_hp = 0;
                  var eb_end_hp = 0;
                  var eu_total_hp = 0;
                  var eu_end_hp = 0;
                  var i_end_hp = 0;
                  var v_end_hp = 0;
                  var a_end_hp = 0;
                  var v_total_hp = 0;
                  var a_total_hp = 0;
                  var i_total_hp = 0;
                  this.lastDFPercentage = 0;
                  this.lastCYPercentage = 0;
                  this.SupportLevel = 0;
                  this.lastSupportPercentage = 0;
                  this.lastInfantryRepairTime = 0;
                  this.lastVehicleRepairTime = 0;
                  this.lastAircraftRepairTime = 0;
                  
                  var own_city = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCity();
                  var crd = own_city.get_CityRepairData();
                  var cud = own_city.get_CityUnitsData();
                  var repair_times = own_city.get_CityUnitsData().NBLSAX.d; // m_FullRawRepairTimeForUnitGroupTypes renamed to NBLSAX
                  var r_types = ClientLib.Base.EResourceType;
                  
                  var entities = battleground.RMCABE.d; // m_Entities has been renamed to RMCABE
                  
                  for (var i in entities) {
                    var entity = entities[i];
                    var i_entity = entity.HLUBJW; // get_Entity$0() has been removed. Propery is $I.TQL - HLUBJW
                    var a_entity = entity.CMCLEW; // ??? has been renamed to CMCLEW
                    var current_hp = i_entity.XKHWEF; // m_iHitpointsCurrent has been renamed to XKHWEF
                    var max_hp = i_entity.WCJQEN; // m_iHitpoints has been renamed to WCJQEN
                    if (a_entity.PSVMGQ == 2) { // ??? has been renamed to PSVMGQ, Attacker is 2
                      // This is one of the good guys
                      end_hp += current_hp;
                      total_hp += max_hp;
                      switch (a_entity.UXBOFH) { // movement type has been renamed to UXBOFH
                        case ClientLib.Base.EUnitMovementType.Air:
                        case ClientLib.Base.EUnitMovementType.Air2:
                          a_end_hp += current_hp;
                          a_total_hp += max_hp;
                          break;
                        case ClientLib.Base.EUnitMovementType.Feet:
                          i_end_hp += current_hp;
                          i_total_hp += max_hp;
                          break;
                        case ClientLib.Base.EUnitMovementType.Track:
                        case ClientLib.Base.EUnitMovementType.Wheel:
                          v_end_hp += current_hp;
                          v_total_hp += max_hp;
                          break;
                        case ClientLib.Base.EUnitMovementType.Structure:
                          break;
                      }
                    }
                    else {
                      // Enemy Overall
                      e_total_hp += max_hp;
                      e_end_hp += current_hp;
                      
                      switch (a_entity.UXBOFH) {
                        case ClientLib.Base.EUnitMovementType.Structure:
                          // Enemy Building
                          eb_total_hp += max_hp;
                          eb_end_hp += current_hp;
      
                          if (i_entity.UYECHX >= 200 && i_entity.UYECHX <= 205) {
                            this.SupportLevel = parseInt(i_entity.m_iLevel);
                            this.lastSupportPercentage = (current_hp / max_hp) * 100;
                          } else {
                            switch (i_entity.UYECHX) { // m_MDCTypeId has been renamed to UYECHX
                            case 112: // CONSTRUCTION YARD
                            case 151:
                            case 177:
                              this.lastCYPercentage = (current_hp / max_hp) * 100;
                              break;
                            case 158: // DEFENSE FACILITY
                            case 131:
                            case 195:
                              this.lastDFPercentage = (current_hp / max_hp) * 100;
                              break;
                            }
                          }
                          break;
                          
                        default:
                          // Enemy Defence
                          eu_total_hp += max_hp;
                          eu_end_hp += current_hp;
                          break;
                      }
                    }
                  }
    
                  this.lastInfantryPercentage = i_total_hp ? (i_end_hp / i_total_hp) * 100 : 100;
                  this.lastVehiclePercentage = v_total_hp ? (v_end_hp / v_total_hp) * 100 : 100;
                  this.lastAirPercentage = a_total_hp ? (a_end_hp / a_total_hp) * 100 : 100;
    
                  this.lastEnemyUnitsPercentage = (eu_end_hp / eu_total_hp) * 100;
                  this.lastEnemyBuildingsPercentage = (eb_end_hp / eb_total_hp) * 100;
                  this.lastEnemyPercentage = (e_end_hp / e_total_hp) * 100;
                  this.lastPercentage = (end_hp / total_hp) * 100;
                  
                  // Calculate the repair time
                  crd.ConvertRepairCost = crd.RNUKEW;// ConvertRepairCost has been renamed to RNUKEW
                  this.lastInfantryRepairTime = crd.ConvertRepairCost(r_types.RepairChargeInf, repair_times[ClientLib.Data.EUnitGroup.Infantry], (1 - this.lastInfantryPercentage / 100));
                  this.lastAircraftRepairTime = crd.ConvertRepairCost(r_types.RepairChargeAir, repair_times[ClientLib.Data.EUnitGroup.Aircraft], (1 - this.lastAirPercentage / 100));
                  this.lastVehicleRepairTime = crd.ConvertRepairCost(r_types.RepairChargeVeh, repair_times[ClientLib.Data.EUnitGroup.Vehicle], (1 - this.lastVehiclePercentage / 100));
                  this.lastRepairTime = Math.max(this.lastVehicleRepairTime, this.lastAircraftRepairTime, this.lastInfantryRepairTime);
                },
                setLabelColor: function (obj, val, dir) {
                  var colors = ['black', 'blue', 'green', 'red'];
                  var color = colors[0];
                  var v = val;
                  if (dir >= 0) v = 100.0 - v;
                  if (v > 99.99) color = colors[3];
                  else if (v > 50) color = colors[2];
                  else if (v > 0) color = colors[1];
                  obj.setTextColor(color);
                },
                updateLabel100: function (obj, val, dir) {
                  this.setLabelColor(obj, val, dir);
                  obj.setValue(val.toFixed(2).toString());
                },
                updateLabel100time: function (obj, val, dir, time) {
                  var s = val.toFixed(2).toString() + " @ ";
                  s += this.formatSecondsAsTime(time, "h:mm:ss");
                  this.setLabelColor(obj, val, dir);
                  obj.setValue(s);
                },
                updateStatsWindow: function () {
                  var colors = ['black', 'blue', 'green', 'red'];
                  var s = "";
                  var n = 0;
                  // VICTORY
                  if (this.lastCYPercentage == 0) {
                    s = "Total Victory";
                    n = 0;
                  } else if (this.lastEnemyBuildingsPercentage < 100) {
                    s = "Victory";
                    n = 1;
                  } else {
                    s = "Total Defeat";
                    n = 3;
                  }
                  this.simVictoryLabel.setValue(s);
                  this.simVictoryLabel.setTextColor(colors[n]);
                  this.updateLabel100(this.enemyTroopStrengthLabel, this.lastEnemyPercentage, -1);
                  this.updateLabel100(this.enemyUnitsStrengthLabel, this.lastEnemyUnitsPercentage, -1);
                  this.updateLabel100(this.enemyBuildingsStrengthLabel, this.lastEnemyBuildingsPercentage, -1);
                  this.updateLabel100(this.CYTroopStrengthLabel, this.lastCYPercentage, -1);
                  this.updateLabel100(this.DFTroopStrengthLabel, this.lastDFPercentage, -1);
                  // -SUPPORT
                  var SLabel = (this.SupportLevel > 0) ? this.SupportLevel.toString() : '--';
                  this.enemySupportLevelLabel.setValue('Suport lvl ' + SLabel + ': ');
                  this.updateLabel100(this.enemySupportStrengthLabel, this.lastSupportPercentage, -1);
                  // ATTACKER
                  this.setLabelColor(this.simRepairTimeLabel, this.lastRepairTime / 14400.0, -1); //max is 4h
                  this.simRepairTimeLabel.setValue(this.formatSecondsAsTime(this.lastRepairTime, "h:mm:ss"));
                  // OVERALL
                  this.updateLabel100(this.simTroopDamageLabel, this.lastPercentage, 1);
                  // INF
                  this.updateLabel100time(this.infantryTroopStrengthLabel, this.lastInfantryPercentage, 1, this.lastInfantryRepairTime);
                  // VEH
                  this.updateLabel100time(this.vehicleTroopStrengthLabel, this.lastVehiclePercentage, 1, this.lastVehicleRepairTime);
                  // AIR
                  this.updateLabel100time(this.airTroopStrengthLabel, this.lastAirPercentage, 1, this.lastAircraftRepairTime);
                },
                formatNumberWithCommas: function (x) {
                  return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
                },
                formatSecondsAsTime: function (secs, format) {
                  var hr = Math.floor(secs / 3600);
                  var min = Math.floor((secs - (hr * 3600)) / 60);
                  var sec = Math.floor(secs - (hr * 3600) - (min * 60));
    
                  if (hr < 10) {
                    hr = "0" + hr;
                  }
                  if (min < 10) {
                    min = "0" + min;
                  }
                  if (sec < 10) {
                    sec = "0" + sec;
                  }
    
                  if (format != null) {
                    var formatted_time = format.replace('hh', hr);
                    formatted_time = formatted_time.replace('h', hr * 1 + "");
                    formatted_time = formatted_time.replace('mm', min);
                    formatted_time = formatted_time.replace('m', min * 1 + "");
                    formatted_time = formatted_time.replace('ss', sec);
                    formatted_time = formatted_time.replace('s', sec * 1 + "");
                    return formatted_time;
                  } else {
                    return hr + ':' + min + ':' + sec;
                  }
                },
                unlockAttacks: function () {
                  var armyBar = q*****re.Init.getApplication().getUIItem(ClientLib.Data.Missions.PATH.BAR_ATTACKSETUP);
                  armyBar.remove(this.buttonUnlockAttack);
                  var _this = this;
                  setTimeout(function () {
                    armyBar.add(_this.buttonUnlockAttack);
                  }, 2000);
                },
                onViewChange: function (oldMode, newMode) {
                  try {
                    if (oldMode == webfrontend.gui.PlayArea.PlayArea.modes.EMode_CombatSetupDefense && newMode == webfrontend.gui.PlayArea.PlayArea.modes.EMode_PlayerOffense) {
                      // Actually we are doing this when we press the Simulate button instead for now
                      // Switched from Combat Setup to the Simulation, show the stats box
                      //this.battleResultsBox.open();
                      //var battleground = ClientLib.Vis.VisMain.GetInstance().get_Battleground();
                      //this.calculateTroopStrengths(battleground);
                      //this.updateStatsWindow();
                    }
                    else {
                      // Close the stats box
                      this.battleResultsBox.close();
                    }
                  } catch (e) {
                    console.log(e);
                  }
                },
                returnSetup: function () {
                  // Set the scene again, just in case it didn't work the first time
                  var app = q*****re.Init.getApplication();
                  var player_cities = ClientLib.Data.MainData.GetInstance().get_Cities();
                  var current_city = player_cities.get_CurrentCity();
                  try {
                    app.getPlayArea().setView(webfrontend.gui.PlayArea.PlayArea.modes.EMode_CombatSetupDefense, localStorage.ta_sim_last_city, 0, 0);
                  } catch (e) {
                    app.getPlayArea().setView(webfrontend.gui.PlayArea.modes.EMode_CombatSetupDefense, localStorage.ta_sim_last_city, 0, 0);
                  }
                },
                setupBattleground: function (offense_units) {
                  try {
                    var mainData = ClientLib.Data.MainData.GetInstance();
                    var player_cities = mainData.get_Cities();
                    var current_city = player_cities.get_CurrentCity();
                    var own_city = player_cities.get_CurrentOwnCity();
                    
                    // Bust the cache
                    //own_city.get_CityArmyFormationsManager().ZJG.d[own_city.get_CityArmyFormationsManager().XJG].UpdateFormation();
                    
                    localStorage.ta_sim_last_city = current_city.get_Id();
    
                    var alliance = ClientLib.Data.MainData.GetInstance().get_Alliance();
                    var combatData = (new ClientLib.Dat*****mbat).$ctor();
                    //var combatData = (new $I.CM).QB();
                    combatData.TTAUEY = 1; // Version is TTAUEY
                    
                    var unitData = own_city.get_CityUnitsData().HHYWQM().l; // Attacker Units renamed to HHYWQM
                    if (offense_units) {
                      offense_units = offense_units.PFTXHT.l;
                    }
                    else {
                      offense_units = own_city.get_CityArmyFormationsManager().GetFormationByTargetBaseId(current_city.get_Id()).get_ArmyUnits().l;
                    }
                    var data = new Array();
    
                    for (var i = 0; i < unitData.length; i++) {
              if (offense_units[i].get_Enabled()) {
                var info = new Object();
                info.h = unitData[i].get_Health();
                info.i = unitData[i].get_MdbUnitId();
                info.l = unitData[i].get_CurrentLevel();
                info.x = offense_units[i].get_CoordX();
                info.y = offense_units[i].get_CoordY();
                data.push(info);
              }
                    }
    
                    combatData.VVWJIF = data; // Attackers renamed to VVWJIF
    
                    unitData = current_city.get_CityUnitsData().OCYIKN.l; // Defender Units renamed to OCYIKN
                    data = new Array();
                    for (i = 0; i < unitData.length; i++) {
                      info = new Object();
                      info.h = unitData[i].get_Health();
                      info.i = unitData[i].get_MdbUnitId();
                      info.l = unitData[i].get_CurrentLevel();
                      info.x = unitData[i].get_CoordX();
                      info.y = unitData[i].get_CoordY();
                      data.push(info);
                    }
                    combatData.MBBLBJ = data; // Defenders renamed to MBBLBJ
    
                    data = new Array();
                    for (var i = 0; i < 9; i++) {
                      for (var j = 0; j < 8 ; j++) {
                        var terrainType = current_city.GetResourceType(i, (j + 8));
                        var unitType = -1;
                        switch (terrainType) {
                          case ClientLib.Data.ECityTerrainType.FOREST:
                            unitType = ClientLib.Base.EUnit.Forest;
                            break;
                          case ClientLib.Data.ECityTerrainType.BRIAR:
                            unitType = ClientLib.Base.EUnit.Scrub;
                            break;
                          case ClientLib.Data.ECityTerrainType.SWAMP:
                            unitType = ClientLib.Base.EUnit.Swamp;
                            break;
                          case ClientLib.Data.ECityTerrainType.WATER:
                            unitType = ClientLib.Base.EUnit.Water;
                            break;
                        }
                        
                        if (unitType != -1) {
                          info = new Object();
                          info.h = 100;
                          info.i = unitType;
                          info.l = 1;
                          info.x = i;
                          info.y = j;
                          data.push(info);
                        }
                      }
                    }
                    
                    combatData.IPFXEV = data; // Terrain renamed to IPFXEV
    
                    unitData = current_city.get_CityBuildingsData().ZATNVD.l; // City Buildings renamed to ZATNVD
                    data = new Array();
                    for (i = 0; i < unitData.length; i++) {
                      info = new Object();
                      info.h = unitData[i].get_Health();
                      info.i = unitData[i].get_MdbUnitId();
                      info.l = unitData[i].get_CurrentLevel();
                      info.x = unitData[i].get_CoordX();
                      info.y = unitData[i].get_CoordY();
                      data.push(info);
                    }
                    
                    combatData.OQAQXC = data; // Buildings renamed to OQAQXC
    
                    combatData.FOTQBA = null; // Support Structures renamed to FOTQBA
                    combatData.DJWUYH = 8696244; // Start Step - this is just a random number - renamed to DJWUYH
                    combatData.m_CombatSteps = 1;
                    combatData.m_BoostInfantry = alliance.get_POIInfantryBonus();
                    combatData.m_BoostVehicle = alliance.get_POIVehicleBonus();
                    combatData.m_BoostAir = alliance.get_POIAirBonus();
                    combatData.m_BoostDefense = current_city.m_AllianceDefenseBonus ? current_city.m_AllianceDefenseBonus : 0; // This might not be working
                    combatData.m_AttackerBaseId = own_city.get_Id();
                    combatData.m_AttackerBaseName = own_city.get_Name();
                    combatData.m_AttackerPlayerId = own_city.get_PlayerId();
                    combatData.m_AttackerPlayerName = own_city.get_PlayerName();
                    combatData.m_AttackerAllianceId = own_city.get_AllianceId();
                    combatData.m_AttackerAllianceName = own_city.get_AllianceName();
                    combatData.m_DefenderBaseId = current_city.get_Id();
                    combatData.m_DefenderBaseName = current_city.get_Name();
                    combatData.m_DefenderPlayerId = current_city.get_PlayerId();
                    combatData.m_DefenderPlayerName = current_city.get_OwnerName();
                    combatData.m_DefenderAllianceId = current_city.get_AllianceId();
                    combatData.m_DefenderAllianceName = current_city.get_OwnerAllianceName();
                    combatData.m_DefenderBlockStep = 0;
                    combatData.m_AttackTimeStamp = new Date().getTime();
                    var resourceLayout = new Object();
                    resourceLayout.l = new Array();
                    combatData.m_ResourceLayout = resourceLayout;
                    combatData.m_DefenderFaction = current_city.get_CityFaction();
                    combatData.m_AttackerModules = this.attacker_modules;
                    combatData.m_DefenderModules = this.defender_modules;
                    
                    if (((combatData.m_DefenderFaction == ClientLib.Base.EFactionType.FORFaction) || (combatData.m_DefenderFaction == ClientLib.Base.EFactionType.NPCBase)) || (combatData.m_DefenderFaction == ClientLib.Base.EFactionType.NPCCamp)) {
                      combatData.WWAFXZ(); // This might not be needed
                    }
    
                    combatData.m_MaxDuration = 120;
                    combatData.m_Complete = false;
                    combatData.RJXSNR = null; // Debug renamed to RJXSNR
    
                    var battleground = ClientLib.Vis.VisMain.GetInstance().get_Battleground();
                    battleground.Reset();
                    battleground.QYEDFT = combatData; // m_currentreplay
                    battleground.InitBattle();
                    battleground.PRTRPU(combatData); // Set combat data
                    battleground.StartBattle();
    
                    return battleground;
                  } catch (e) {
                    console.log(e);
                  }
                },
                startSimulation: function () {
                  try {
                    var app = q*****re.Init.getApplication();
                    var player_cities = ClientLib.Data.MainData.GetInstance().get_Cities();
                    var current_city = player_cities.get_CurrentCity();
    
                    try {
                      app.getPlayArea().setView(webfrontend.gui.PlayArea.PlayArea.modes.EMode_CombatReplay, current_city.get_Id(), 0, 0);
                    } catch (e) {
                      app.getPlayArea().setView(webfrontend.gui.PlayArea.modes.EMode_CombatReplay, current_city.get_Id(), 0, 0);
                    }
                    var battleground = this.setupBattleground();
                    
                    // Add the event listeners
                    battleground.HXGRQD.GUADUH((new $I.WMJHOK).GEDTYY(this, this.onDamageDone)); // m_Simulation became HXGRQD, The add_DamageDone$0 has been renamed to GUADUH, System.EventHandler.$ctor was renamed to $I.WMJHOK.GEDTYY
    
                    // Set the scene again, just in case it didn't work the first time
                    try {
                      app.getPlayArea().setView(webfrontend.gui.PlayArea.PlayArea.modes.EMode_CombatReplay, current_city.get_Id(), 0, 0);
                    } catch (e) {
                      app.getPlayArea().setView(webfrontend.gui.PlayArea.modes.EMode_CombatReplay, current_city.get_Id(), 0, 0);
                    }
                    
                    this.battleResultsBox.close();
                  } catch (e) {
                    console.log(e);
                  }
                },
                updateLayoutsList: function () {
                  this.layoutsList.removeAll();
                  // Load the saved layouts for this city
                  var city_layouts = this.loadCityLayouts();
                  if (city_layouts) {
                    for (var i in city_layouts) {
                      var layout = city_layouts[i];
                      var item = new qx.ui.form.ListItem(layout.label, null, layout.id);
                      this.layoutsList.add(item);
                    };
                  }
                },
                deleteCityLayout: function () {
                  try {
                    var layouts = this.loadLayouts();
                    var current_city = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCity().get_Id();
                    var own_city = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCity().get_Id();
                    var lid = this.layoutsList.getSelection()[0].getModel();
                    if (layouts && typeof layouts[current_city] != 'undefined' && typeof layouts[current_city][own_city] != 'undefined' && typeof layouts[current_city][own_city][lid] != 'undefined') {
                      delete layouts[current_city][own_city][lid];
                      this.saveLayouts(layouts);
                      this.updateLayoutsList();
                    }
                  } catch (e) {
                    console.log(e);
                  }
                },
                loadCityLayout: function () {
                  try {
                    var city_layouts = this.loadCityLayouts();
                    var lid = this.layoutsList.getSelection()[0].getModel();
                    if (city_layouts && typeof city_layouts[lid] != 'undefined') {
                      // Load the selected city layout
                      var saved_units = city_layouts[lid].layout;
                      this.restoreFormation(saved_units);
                    }
                  } catch (e) {
                    console.log(e);
                  }
                },
                saveCityLayout: function () {
                  try {
                    // Save the current layout for this city
                    var current_city = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCity().get_Id();
                    var own_city = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCity().get_Id();
                    var layouts = this.loadLayouts();
                    this.saveFormation();
                    var lid = new Date().getTime().toString();
                    var title = this.layoutsLabelText.getValue();
                    if (!title) {
                      return;
                    }
                    title += " (TS: " + this.lastPercentage.toFixed(2).toString() + ")";
                    var city_layouts = this.loadCityLayouts();
                    if (!layouts.hasOwnProperty(current_city)) {
                      layouts[current_city] = {};
                    }
                    if (!layouts[current_city].hasOwnProperty(own_city)) {
                      layouts[current_city][own_city] = city_layouts;
                    }
                    layouts[current_city][own_city][lid] = {
                      id: lid,
                      label: title,
                      layout: this.saved_units,
                    };
                    this.saveLayouts(layouts);
                    this.updateLayoutsList();
                    this.layoutsLabelText.setValue("");
                  } catch (e) {
                    console.log(e);
                  }
                },
                loadLayouts: function () {
                  var temp = localStorage.tasim_layouts;
                  if (temp) {
                    return JSON.parse(temp);
                  }
                  return {};
                },
                loadCityLayouts: function () {
                  var temp = localStorage.tasim_layouts;
                  if (temp) {
                    var layouts = JSON.parse(temp);
                    var current_city = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCity().get_Id();
                    var own_city = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCity().get_Id();
    
                    if (layouts.hasOwnProperty(current_city) && layouts[current_city].hasOwnProperty(own_city)) {
                      return layouts[current_city][own_city];
                    }
                  }
                  return {};
                },
                saveLayouts: function (layouts) {
                  // TODO - Remove cities that are no longer existing
                  localStorage.tasim_layouts = JSON.stringify(layouts);
                },
                restoreFormation: function (saved_units) {
                  saved_units = saved_units || this.saved_units;
                  var units = this.getCityPreArmyUnits();
                  var units_list = units.get_ArmyUnits().l;
                  for (var i = 0;
                  (i < units_list.length); i++) {
                    var saved_unit = saved_units[i];
                    units_list[i].set_CoordX(saved_unit.x);
                    units_list[i].set_CoordY(saved_unit.y);
                    units_list[i]****ZGTH = saved_unit.id; // m_UnitId renamed to BZZGTH
                  }
    
                  units.TNEWNF(); // UpdateArmyLayout$0() has been renamed to TNEWNF()
                  units.AOMXAS(); // RefreshData() has been renamed to AOMXAS()
                },
                saveFormation: function () {
                  this.saved_units = [];
                  for (var i = 0;
                  (i < this.units.length); i++) {
                    var unit = this.units[i];
                    var armyUnit = {};
                    armyUnit.x = unit.get_CoordX();
                    armyUnit.y = unit.get_CoordY();
                    armyUnit.id = unit.get_Id();
                    this.saved_units.push(armyUnit);
                  }
                }
              }
            });
          }
    
          function TASuite_checkIfLoaded() {
            try {
              if (typeof qx != 'undefined') {
                a = q*****re.Init.getApplication(); // application
                mb = q*****re.Init.getApplication().getMenuBar();
                if (a && mb) {
                  createTweak();
                  window.TASuite.main.getInstance().initialize();
                } else window.setTimeout(TASuite_checkIfLoaded, 1000);
              } else {
                window.setTimeout(TASuite_checkIfLoaded, 1000);
              }
            } catch (e) {
              if (typeof console != 'undefined') console.log(e);
              else if (window.opera) opera.postError(e);
              else GM_log(e);
            }
          }
    
          if (/commandandconquer\.com/i.test(document.domain)) {
            window.setTimeout(TASuite_checkIfLoaded, 1000);
          }
        }
    
        // injecting, because there seem to be problems when creating game interface with unsafeWindow
      var TASuiteScript = document.createElement("script");
      var txt = TASuite_mainFunction.toString();
      TASuiteScript.innerHTML = "(" + txt + ")();";
      TASuiteScript.type = "text/javascript";
      if (/commandandconquer\.com/i.test(document.domain)) {
        document.getElementsByTagName("head")[0].appendChild(TASuiteScript);
      }
    
    })();
    Last edited by Thyrius; 09-09-2012 at 09:42 PM. Reason: bad english :)
    CABR é um lixo![/SIZE][/B][/CENTER]

  2. #2
    Thyrius's Avatar
    Join Date
    Jul 2011
    Gender
    male
    Location
    Kill Creek
    Posts
    340
    Reputation
    10
    Thanks
    43
    My Mood
    Bored
    Nobody knows?
    CABR é um lixo![/SIZE][/B][/CENTER]

  3. The Following User Says Thank You to Thyrius For This Useful Post:

    amado (03-18-2013)

  4. #3
    BattleForce's Avatar
    Join Date
    Jul 2012
    Gender
    male
    Posts
    2
    Reputation
    10
    Thanks
    4
    Hey, Don't get me wrong but in my eye's this is java 0o well, the code in the spoiler

  5. #4
    amado's Avatar
    Join Date
    Mar 2013
    Gender
    male
    Posts
    8
    Reputation
    10
    Thanks
    0
    the some here hack plssss =)..come on ..i m sure than someone can do it..

    ---------- Post added at 06:53 AM ---------- Previous post was at 06:52 AM ----------

    the same here... hack plssss =)..come on ..i m sure than someone can do it..

  6. #5
    fernandofgv's Avatar
    Join Date
    Sep 2013
    Gender
    male
    Posts
    1
    Reputation
    10
    Thanks
    0
    Nada de hack funcional para C&C?

    anything functional Hack for C & C?

  7. #6
    vik3000's Avatar
    Join Date
    Feb 2015
    Gender
    male
    Posts
    1
    Reputation
    10
    Thanks
    0
    Same here need a hack for this c&c tibarium alliance game will pay 150$ monthly sub

Similar Threads

  1. [Help] command and conquer 3tiberium war hack plz
    By aloha in forum Hack Requests
    Replies: 1
    Last Post: 10-15-2015, 07:18 PM
  2. Command And Conquer [Tiberium Alliances] Free2Play
    By [Pr0]DeaDMaN in forum General Game Hacking
    Replies: 14
    Last Post: 01-23-2014, 04:46 PM
  3. [Request] Command and Conquer Tiberium Alliances
    By golololo in forum Hack Requests
    Replies: 4
    Last Post: 03-18-2013, 06:56 AM
  4. Command and conquer NUKES FTW
    By killer-c in forum General
    Replies: 1
    Last Post: 07-23-2010, 06:43 PM
  5. supreme commander and command&conquer hacking
    By TheDisruptor in forum General Game Hacking
    Replies: 3
    Last Post: 11-26-2006, 10:50 PM