Nos partenaires et nous-mêmes utilisons différentes technologies, telles que les cookies, pour personnaliser les contenus et les publicités, proposer des fonctionnalités sur les réseaux sociaux et analyser le trafic. Merci de cliquer sur le bouton ci-dessous pour donner votre accord. Vous pouvez changer d’avis et modifier vos choix à tout moment. Informations RGPD
// ==UserScript== // @name CnC: MHTools Tiberium Alliances Available Loot Summary + Info // @namespace MHTools.Loot // @description CROSS SERVERS Loot & troops & bases & distance info. // @author MrHIDEn based on Yaeger & Panavia code. Totaly recoded. // @grant none // @include http*://prodgame*.alliances.commandandconquer.com/*/index.aspx* // @version 1.8.3 // ==/UserScript== (function () { var MHLootMain = function () { function MHToolsLootCreate() { //console.log('MHToolsLootCreate'); // Classes //======================================================= //Extending webfrontend.gui.options.OptionsPage with new ManagementOptionsPage function OptionsPage() { try { qx.Class.define("MHTools.OptionsPage", { type: 'singleton', extend: webfrontend.gui.options.OptionsPage, construct: function() { console.log('Create MHTools.OptionsPage at Loot+Info'); this.base(arguments); this.setLabel('MHTools'); this.extendOptionsWindow(); //Add Content var container = this.getContentContainer(); this.tabView = new qx.ui.tabview.TabView(); container.add(this.tabView);//, {left:40, top:40}); this.removeButtons(); this.addPageAbout(); console.log('MHTools: OptionsPage loaded.'); }, statics: { VERSION: '1.0.0', AUTHOR: 'MrHIDEn', CLASS: 'OptionsPage' }, members: { pageCreated: null, tabView: null, getTabView: function() { return this.tabView; }, addPage: function(name) { var c = this.tabView.getChildren(); this.tabView.remove(c[c.length-1]);//remove PageAbout var page = new qx.ui.tabview.Page(name); page.set({height:220}); this.tabView.add(page); this.addPageAbout(); return page; }, addPageAbout: function() { var page = new qx.ui.tabview.Page("About"); page.set({height:220}); this.tabView.add(page); page.setLayout(new qx.ui.layout.VBox()); page.add(new qx.ui.basic.Label("<b>MHTools</b>").set({rich: true}));//, textColor: red page.add(new qx.ui.basic.Label("Created: <span style='color:blue'>2012</span>").set({rich: true,marginLeft:10})); page.add(new qx.ui.basic.Label("Author: <span style='color:blue'><b>MrHIDEn</b></span>").set({rich: true,marginLeft:10})); page.add(new qx.ui.basic.Label("Email: <a href='mailto:mrhiden@outlook.com'>mrhiden@outlook.com</a>").set({rich: true,marginLeft:10})); page.add(new qx.ui.basic.Label("Public: <a href='https://userscripts.org/users/471241'>userscripts.org - MrHIDEn</a></br> ").set({rich: true,marginLeft:10})); page.add(new qx.ui.basic.Label("<b>Scripts:</b>").set({rich: true,marginTop:5})); page.add(new qx.ui.basic.Label("<a href='https://userscripts.org/scripts/show/137978'>Aviable Loot +Info</a>").set({rich: true,marginLeft:10})); page.add(new qx.ui.basic.Label("<a href='https://userscripts.org/scripts/show/135806'>Shortcuts +Coords</a>").set({rich: true,marginLeft:10})); page.add(new qx.ui.basic.Label("<b>Shorten Scripts:</b>").set({rich: true,marginTop:5})); page.add(new qx.ui.basic.Label("<a href='https://userscripts.org/scripts/show/136743'>Coords 500:500</a>").set({rich: true,marginLeft:10})); page.add(new qx.ui.basic.Label("<a href='https://userscripts.org/scripts/show/145657'>Pure Loot summary</a>").set({rich: true,marginLeft:10})); page.add(new qx.ui.basic.Label("<a href='https://userscripts.org/scripts/show/137955'>Login x9 + Logout</a>").set({rich: true,marginLeft:10})); }, removeButtons: function() { this.getChildren()[2].removeAll(); }, getContentContainer: function() { if(!this.contentCnt) { this.contentCnt = this.getChildren()[0].getChildren()[0]; } return this.contentCnt; }, extendOptionsWindow: function() { var self = this; if(!webfrontend.gui.options.OptionsWidget.prototype.baseShow) { webfrontend.gui.options.OptionsWidget.prototype.baseShow = webfrontend.gui.options.OptionsWidget.prototype.show; } webfrontend.gui.options.OptionsWidget.prototype.show = function() { try { var tabView = this.clientArea.getChildren()[0]; tabView.add(self); webfrontend.gui.options.OptionsWidget.prototype.show = webfrontend.gui.options.OptionsWidget.prototype.baseShow; self.pageCreated = true; this.show(); } catch (e) { console.warn("MHTools.OptionsPage.extendOptionsWindow: ", e); } }; } } }); } catch (e) { console.warn("qx.Class.define(MHTools.OptionsPage: ", e); } } //======================================================= try { qx.Class.define("MHTools.Loot", { type: 'singleton', extend: qx.core.Object, construct: function() { console.log('Create MHTools.Loot'); this.stats.src = 'http://goo.gl/m9I3B';//1.8.0 //this.base(arguments); for(var k in this.resPaths) { this.resImages.push(new qx.ui.basic.Image("webfrontend/ui/common/"+this.resPaths[k]).set({Scale:true,Width:16,Height:16})); } for(var k in this.troopPaths) { this.troopImages.push(new qx.ui.basic.Image("https://eaassets-a.akamaihd.net/cncalliancesgame/cdn/data/"+this.troopPaths[k]).set({Scale:true,Width:16,Height:16})); } //this.reloadList(); this.lootList.reloadList(); //console.log(this.lootList); // extend this.extendOwnBase(); this.extendAllianceBase(); this.extendForgottenCamp(); this.extendForgottenBase(); this.extendPlayerBase(); //this.extendOptionsWindow(); this.extendPOI(); this.extendHUB(); this.extendHUBServer(); this.extendRUIN(); this.extendSelectionChange(); this.addLootPage(); //bypass this.loadBypass(); //rdy console.log('MHTools: Loot+Info loaded.'); }, statics : { VERSION: '1.8.3', AUTHOR: 'MrHIDEn', CLASS: 'Loot', DATA: this.Data }, properties: { }, members : { // setttings settings: { showLoot: {v:true, d:true, l:'Shows Loot resources info'}, showTroops: {v:false, d:false, l:'Shows overall Hitpoints for Troops'}, showTroopsExtra: {v:false, d:false, l:'Shows Troops Hitpoints for Vehicles/Aircrafts/Infantry'}, showInfo: {v:true, d:true, l:'Shows HP/HC/DF/CY info'}, showColumnCondition: {v:false, d:false, l:'Shows your progress against DF/CY'}, showRepairTime: {v:true, d:true, l:'Shows Repair Times info for Enemy Base/Camp/Outpost'}, showAllyRepairTimeInfo: {v:true, d:true, l:'Shows Ally/Your Repair Times info'}, showLevels: {v:true, d:true, l:'Shows Levels of Base/Defence/Offence info'}, showColumnLetter: {v:false, d:false, l:'Shows columns letters for DF/CY position Ex A-1 or E-4. If \'false\' shows only 1 or 4'}, showDistance: {v:true, d:true, l:'Shows distance from selected base to the selected object'} }, // pictures stats: document.createElement('img'), resPaths: [ "icn_res_research_mission.png", "icn_res_tiberium.png", "icn_res_chrystal.png", "icn_res_dollar.png" ], resImages: [], troopPaths: [ "d8d4e71d9de051135a7f5baf1f799d77.png",//inf "af8d7527e441e1721ee8953d73287e9e.png",//veh "5f889719f06aad76f06d51863f8eb524.png",//stu "6962b667bd797fc2e9e74267e1b3e7c3.png" //air ], troopImages: [], // store v2 - compact //UNDERCONSTRUCTION lootList: { list: { l: [], max: 50,//na idx: 0,//na }, storeName: 'MHToolsLootList2', getIndex: function() {//in use var res = -1; try { var l = this.list.l; var id = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCityId(); for(i=0;i<this.list.max;i++) { if(typeof(l[i])=='undefined') continue; if(l[i]===null) continue; if(l[i].id == id) { res = i; break; } } } catch (e) { console.warn("save: ", e); } return res; }, reloadList: function() {//in use var S = ClientLib.Base.LocalStorage; var l; if (S.get_IsSupported()) l = S.GetItem(this.storeName); if(l!==null) this.list = l; console.log('MHTools: LootList reloaded/created'); }, save: function(d) {//in use try { var l = this.list.l; var id = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCityId(); var c = {id:id, Data:d}; var S = ClientLib.Base.LocalStorage; for(var i=0;i<this.list.max;i++) { if(typeof(l[i])=='undefined') continue; if(l[i]===null) continue; if(l[i].id == id) { // found l[i] = c; // JSON if (S.get_IsSupported()) S.SetItem(this.storeName, this.list); // done return; } } // new l[this.list.idx] = c; if(++this.list.idx >= this.list.max) this.list.idx = 0; // JSON if (S.get_IsSupported()) S.SetItem(this.storeName, this.list); } catch (e) { console.warn("save: ", e); } }, load: function() {//in use try { var id = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCityId(); var i = this.getIndex(); if(i>=0) return this.list.l[i]; return {id:id,Data:{}}; } catch (e) { console.warn("load: ", e); } }, store: function(k, d) {//in use try { var mem = this.load().Data; mem[k] = d; this.save(mem); } catch (e) { console.warn("store: ", e); } }, restore: function(k) {//?? not in use console.log('this.lootList.restore'); try { var mem = this.load().Data; if(typeof(mem[k])=='undefined') return 'undefined'; return mem[k]; } catch (e) { console.warn("restore: ", e); } } }, // store /* // list: [], // listStoreName: 'MHToolsLootList', // reloadList: function() { // var S = ClientLib.Base.LocalStorage; // var l; // if (S.get_IsSupported()) l = S.GetItem(this.listStoreName); // if(l!==null) this.list = l; // this.list.max = 50; // this.list.idx = 0; // for(var i=0;i<this.list.max;i++) { // this.list.idx = i; // if(typeof(this.list[i])=='undefined') break; // } // console.log('MHTools: LootList reloaded/created'); // }, // getIndex: function() { // var l = this.list; // var id = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCityId(); // //console.log('getIndex id=',id); // for(i=0;i<this.list.max;i++) { // if(typeof(l[i])=='undefined') continue; // if(l[i]===null) continue; // if(l[i].id == id) return i; // } // return -1; // }, // save: function(d) { // //TODO some problems with refreshing // try { // var l = this.list; // var id = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCityId(); // var c = {id:id, Data:d}; // var S = ClientLib.Base.LocalStorage; // for(var i=0;i<l.max;i++) { // if(typeof(l[i])=='undefined') continue; // if(l[i]===null) continue; // if(l[i].id == id) // { // // found // l[i] = c; // // JSON // if (S.get_IsSupported()) S.SetItem(this.listStoreName, l); // // done // return; // } // } // // new // l[l.idx] = c; // if(++l.idx >= l.max) l.idx = 0; // // JSON // if (S.get_IsSupported()) S.SetItem(this.listStoreName, l); // } catch (e) { // console.warn("save: ", e); // } // }, // load: function() { // try { // var l = this.list; // var id = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCityId(); // for(var i=0;i<l.max;i++) { // if(typeof(l[i])=='undefined') continue; // if(l[i]===null) continue; // if(l[i].id == id) return l[i]; // } // return {id:id,Data:{}}; // } catch (e) { // console.warn("load: ", e); // } // }, // store: function(k, d) { // try { // var mem = this.load().Data; // mem[k] = d; // this.save(mem); // } catch (e) { // console.warn("store: ", e); // } // }, // restore: function(k) {//?? not in use // try { // var mem = this.load().Data; // if(typeof(mem[k])=='undefined') return 'undefined'; // return mem[k]; // } catch (e) { // console.warn("restore: ", e); // } // }, */ // bases Data: {}, // display containers lootWindowPlayer: null, lootWindowBase: null, lootWindowCamp: null, lootWindowOwn: null, lootWindowAlly: null, lootWindowPOI: null, lootWindowRUIN: null, lootWindowHUBServer: null, //waiting: [1,'','.','..','...','...?'], waiting: [1,'>-','->','--','-<','<-','??'], Display: { troopsArray: [], lootArray: [], iconArrays: [], infoArrays: [], twoLineInfoArrays: [], distanceArray: [] }, // HELPERS kMG: function(v) { var t = [ '', 'k', 'M', 'G', 'T', 'P' ]; var i = 0; while (v > 1000 && i < t.length) { v = (v / 1000).toFixed(1); i++; } return v.toString().replace('.',',') + t[i]; }, numberFormat: function(val,fixed) { return val.toFixed(fixed).replace('.',','); }, hms: function(s) { var h = Math.floor(s/3600); s%=3600; var m = Math.floor(s/60); s%=60; var r = (h<10?"0"+h.toString():h.toString()) + ":"; r += (m<10?"0"+m.toString():m.toString()) + ":"; s = s.toFixed(0); r += (s<10?"0"+s.toString():s.toString()); return r; }, dhms: function(s) { var d = Math.floor(s/86400); s%=86400; var h = Math.floor(s/3600); s%=3600; var m = Math.floor(s/60); s%=60; var r = (d<1?"":d.toString() + ":"); r += (h<10?"0"+h.toString():h.toString()) + ":"; r += (m<10?"0"+m.toString():m.toString()) + ":"; s = s.toFixed(0); r += (s<10?"0"+s.toString():s.toString()); return r; }, dhms2: function(s) { var d = Math.floor(s/86400); s%=86400; var h = Math.floor(s/3600); s%=3600; var m = Math.floor(s/60); s%=60; var r = (d<1?"":d.toString() + "d ");// 3:01:23:45 r += (h<10?"0"+h.toString():h.toString()) + ":"; r += (m<10?"0"+m.toString():m.toString()) + ":"; s = s.toFixed(0); r += (s<10?"0"+s.toString():s.toString()) + ""; return r; }, hmsRT: function(city, type) { var nextLevelFlag = false; var s = city.get_CityUnitsData().GetRepairTimeFromEUnitGroup(type, nextLevelFlag); var h = Math.floor(s/3600); s%=3600; var m = Math.floor(s/60); s%=60; var r = (h<10?"0"+h.toString():h.toString()) + ":"; r += (m<10?"0"+m.toString():m.toString()) + ":"; r += (s<10?"0"+s.toString():s.toString()); return r; }, // BYPASS getBypass: function(c,d) { try { function getKeys(obj, d) { for (var k in obj) { var o = obj[k]; if (o === null) continue; if (typeof(o.c) == 'undefined') continue;//count if (o.c === 0) continue;//empty if (typeof(o.d) == 'undefined') continue;//data {} var ks = Object.keys(o.d); if (ks.length != o.c) continue; var u = o.d[ks[0]]; if(typeof(u) != 'object') continue; if(typeof(u.get_UnitLevelRepairRequirements) != 'function') continue; if(typeof(u.GetUnitGroupType) == 'undefined') { // buildings d.Keys.Buildings = k; //c.GetNumBuildings.toString()==return this.XUQAIB.YYZSYN().c; //YYZSYN()==return this.GBZDQJ; //==this.XUQAIB.GBZDQJ.c } else { // units 3-attack if(u.GetUnitGroupType()) { d.Keys.Offences = k; } else { // units 0-defend d.Keys.Defences = k; } } } if(typeof(d.Keys.Buildings)!='undefined') { //ClientLib.Data.CityBuildings.prototype.kBuildings = d.Keys.Buildings; //ClientLib.Data.CityBuildings.prototype.get_Buildings = function(){return this[this.kBuildings];}; ClientLib.Data.City.prototype.kBuildings = d.Keys.Buildings; ClientLib.Data.City.prototype.get_Buildings = function(){return this.get_CityBuildingsData()[this.kBuildings];}; } if(typeof(d.Keys.Offences)!='undefined') { //ClientLib.Data.CityUnits.prototype.kOffenseUnits = d.Keys.Offences; //ClientLib.Data.CityUnits.prototype.get_OffenseUnits = function(){return this[this.kOffenseUnits];}; ClientLib.Data.City.prototype.kOffenseUnits = d.Keys.Offences; ClientLib.Data.City.prototype.get_OffenseUnits = function(){return this.get_CityUnitsData()[this.kOffenseUnits];}; } if(typeof(d.Keys.Defences)!='undefined') { //ClientLib.Data.CityUnits.prototype.kDefenseUnits = d.Keys.Defences; //ClientLib.Data.CityUnits.prototype.get_DefenseUnits = function(){return this[this.kDefenseUnits];}; ClientLib.Data.City.prototype.kDefenseUnits = d.Keys.Defences; ClientLib.Data.City.prototype.get_DefenseUnits = function(){return this.get_CityUnitsData()[this.kDefenseUnits];}; } } if(typeof(d.Keys)=='undefined') d.Keys={}; getKeys(c.get_CityBuildingsData(), d); getKeys(c.get_CityUnitsData(), d); var cnt=Object.keys(d.Keys).length; if(cnt==3) { //console.log('MHTools.Loot Helpers are ready'); //console.log('MHTools.Loot Helpers are ready:',d.Keys.Buildings,d.Keys.Defences,d.Keys.Offences); console.log('MHTools.Loot Helpers are ready:'); console.log(d.Keys); delete d.Keys; this.getBypass = function(){return true;}; return true; } else console.log('#Keys(!=3): ',cnt); } catch (e) { console.warn("MHTools.Loot.",arguments.callee.name,': ', e); } //return d.Bypass.Rdy; return false; }, loadBypass: function(self) { try { if(typeof(self)=='undefined') self = this; var ac=ClientLib.Data.MainData.GetInstance().get_Cities().get_AllCities().d; if(Object.keys(ac).length<1) { window.setTimeout(self.loadBypass, 5000, self); // check again return; } for(k in ac) if(self.getBypass(ac[k],self.Data)) break; } catch (e) { console.warn("MHTools.Loot.",arguments.callee.name,': ', e); } }, getData: function(city) { try { var l = {}; if(!this.getBypass(city,this.Data)) return l; l.Buildings = city.get_Buildings(); l.Defences = city.get_DefenseUnits(); l.Offences = city.get_OffenseUnits(); l.rdy = true; } catch (e) { console.warn("MHTools.Loot.",arguments.callee.name,': ', e); } return l; }, loadBase: function() { try { if (typeof(this.Data.lastSelectedBaseId)=='undefined') this.Data.lastSelectedBaseId = -1;//, Bypass: {}}; var d = this.Data; d.selectedBaseId = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCityId(); d.selectedOwnBaseId = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCityId(); if (d.lastSelectedBaseId !== d.selectedBaseId) d.loaded = false; d.lastSelectedBaseId = d.selectedBaseId; d.IsOwnBase = d.selectedBaseId === d.selectedOwnBaseId; d.cc = ClientLib.Data.MainData.GetInstance().get_Cities(); //d.ec = d.cc.GetCity(d.selectedBaseId);// this is very nice function d.ec = d.cc.get_CurrentCity(); if(d.ec === null) return false; if(d.ec.get_CityBuildingsData() === null) return false; if(d.ec.get_CityUnitsData() === null) return false; d.oc = d.cc.get_CurrentOwnCity(); if(d.oc === null) return false; if(d.oc.get_CityBuildingsData() === null) return false; if(d.oc.get_CityUnitsData() === null) return false; d.ol = this.getData(d.oc); d.el = this.getData(d.ec);// Buildings Defence Offence if(typeof(d.ol)=='undefined') return false; if(typeof(d.el)=='undefined') return false; if(d.el.Buildings.c === 0) return false; if(d.ol.Buildings.c === 0) return false; //TEST //console.log('loadBase.el:',d.el); //console.log('loadBase.ol:',d.ol); d.loaded = true; return true; } catch (e) { console.warn("MHTools.Loot.",arguments.callee.name,': ', e); console.dir("MHTools.Loot.Data: ",this.Data); return false; } }, getImportants: function(list) { list.Support = {Condition: '-',Row: '-',Column: '-'}; list.CY = {Condition: '-',Row: '-',Column: '-'}; list.DF = {Condition: '-',Row: '-',Column: '-'}; if(!this.settings.showInfo.v) return; for (var j in list.Buildings.d) { var building = list.Buildings.d[j]; var mod = building.get_HitpointsPercent(); var id = building.get_MdbUnitId(); if(id >= 200 && id <= 205) { list.Support.Condition = 100*mod; list.Support.Row = 8-parseInt(building.get_CoordY()); list.Support.Column = building.get_CoordX(); } else { switch (id) { case 112: // CONSTRUCTION YARD case 151: case 177: list.CY.Condition = 100*mod; list.CY.Row = 8-parseInt(building.get_CoordY()); list.CY.Column = building.get_CoordX(); break; case 158: // DEFENSE FACILITY case 131: case 195: list.DF.Condition = 100*mod; list.DF.Row = 8-parseInt(building.get_CoordY()); list.DF.Column = building.get_CoordX(); break; default: break; } } } }, getLoots: function (ul,r) { if(typeof(r)=='undefined') r={}; //console.log('r',r); var t={1:'T',2:'C',3:'G',6:'RP',7:'RCB',8:'RCA',9:'RCI',10:'RCV'};//translate, ClientLib.Base.EResourceType.XXX for (var j in ul.d) { var u = ul.d[j];// unit/building //here are key infos about units ranges and behavior and more //console.log(u.get_UnitGameData_Obj().n,u.get_UnitGameData_Obj());// unit/building var p = u.get_HitpointsPercent();// 0-1 , 1 means 100% var cl = u.get_UnitLevelRepairRequirements();// EA API Resources/Repair Costs for (var i in cl) { var c = cl[i];//Requirement/Cost if(typeof(c)!='object') continue; var k = (typeof(t[c.Type])=='undefined')?c.Type:t[c.Type];//translate if possible if(typeof(r[k])=='undefined') r[k] = 0;//add branch r[k] += p * c.Count; } } return r; }, calcResources: function () { try { if (!this.settings.showLoot.v) return; if (!this.Data.loaded) return; this.Display.lootArray = []; var el = this.Data.el; var ec = this.Data.ec; var loots = {RP:0, T:0, C:0, G:0};//for getLoots this.getLoots(el.Buildings,loots); this.getLoots(el.Defences,loots); if(el.Offences.c>0) { var off = this.getLoots(el.Offences); //console.log('Offences: ',off); } this.Display.lootArray[0] = loots.RP; this.Display.lootArray[1] = loots.T; this.Display.lootArray[2] = loots.C; this.Display.lootArray[3] = loots.G; this.lootList.store('lootArray',this.Display.lootArray); } catch (e) { console.warn("MHTools.Loot.calcResources: ", e); console.dir("MHTools.Loot.~.Data:",this.Data); } }, calcTroops: function () { try { if (!this.settings.showTroops.v) return; if (!this.Data.loaded) return; var troops = [0, 0, 0, 0, 0]; var el = this.Data.el; // enemy defence units for (var j in el.Defences.d) { var unit = el.Defences.d[j]; var current_hp = unit.get_Health();//EA API troops[0] += current_hp; if (this.settings.showTroopsExtra.v) { switch (unit.get_UnitGameData_Obj().mt) {//keyTroop // TODO check .mt case ClientLib.Base.EUnitMovementType.Feet: troops[1] += current_hp; break; case ClientLib.Base.EUnitMovementType.Track: case ClientLib.Base.EUnitMovementType.Wheel: troops[2] += current_hp; break; case ClientLib.Base.EUnitMovementType.Structure: troops[3] += current_hp; break; case ClientLib.Base.EUnitMovementType.Air: case ClientLib.Base.EUnitMovementType.Air2: troops[4] += current_hp; break; } } } this.Display.troopsArray = troops; this.lootList.store('troopsArray',this.Display.troopsArray); } catch (e) { console.warn("MHTools.Loot.calcTroops: ", e); console.dir("MHTools.Loot.~.Data:",this.Data); } }, calcInfo: function () { this.Display.infoArrays = []; this.Display.twoLineInfoArrays = []; if (!this.Data.loaded) return; var hp; var t; //var cc = this.Data.cc; var oc = this.Data.oc; var ec = this.Data.ec; var ol = this.Data.ol; var el = this.Data.el; if(this.settings.showInfo.v) { try { var ohp=0, dhp=0; for (var k in ol.Offences.d) ohp += ol.Offences.d[k].get_Health();//own of units for (var k in el.Defences.d) dhp += el.Defences.d[k].get_Health();//ene df units // find CY & DF row/line this.getImportants(el); hp = {}; hp.name = '<b>Info</b> (HP,HC - D/O ratio. Row.)'; hp.lbs = ['HP:','HC:','DF:','CY:']; t = []; t.push(this.numberFormat(dhp/ohp, 2)); t.push(this.numberFormat(ec.get_TotalDefenseHeadCount()/oc.get_TotalOffenseHeadCount(), 2)); var abc = "ABCDEFGHI";//abc[column] if(this.settings.showColumnLetter.v) { if(el.DF !== undefined) {t.push(abc[el.DF.Column]+ '-' + el.DF.Row);} else { t.push('??');} if(el.CY !== undefined) {t.push(abc[el.CY.Column]+ '-' + el.CY.Row);} else { t.push('??');} } else { if(el.DF !== undefined) {t.push(el.DF.Row);} else { t.push('??');} if(el.CY !== undefined) {t.push(el.CY.Row);} else { t.push('??');} } hp.val = t; this.Display.infoArrays.push(hp); // store this.lootList.store('infoArrays',this.Display.infoArrays); } catch (e) { console.log("MHTools.Loot.calcInfo 1: ", e); } } if(this.settings.showColumnCondition.v) { try { var bl = el.Buildings.d; var dl = el.Defences.d; for(var k in bl) { var b = bl[k]; if(b.get_TechName() == ClientLib.Base.ETechName.Defense_Facility) df = b; if(b.get_TechName() == ClientLib.Base.ETechName.Construction_Yard) cy = b; } var tb; var tbhp; var cnt; var mi; var ma; var dc; // CY tb = cy; cnt = 0; tbhp = 0; dc = 1; mi = tb.get_CoordX() - dc; ma = tb.get_CoordX() + dc; // scan for(var k in bl) { var o = bl[k]; if(o.get_CoordX() >= mi && o.get_CoordX() <= ma) { if(o.get_CoordY() >= tb.get_CoordY()) { cnt++; tbhp += o.get_HitpointsPercent(); } } } for(var k in dl) { var o = dl[k]; //if(o.get_CoordX() == tb.get_CoordX()) { if(o.get_CoordX() >= mi && o.get_CoordX() <= ma) { if(o.get_CoordY() >= tb.get_CoordY()) { cnt++; tbhp += o.get_HitpointsPercent(); } } } tbhp = 100 * tbhp / cnt; var cyhp = tbhp; // DF tb = df; cnt = 0; tbhp = 0; dc = 1; mi = tb.get_CoordX() - dc; ma = tb.get_CoordX() + dc; for(var k in bl) { var o = bl[k]; if(o.get_CoordX() >= mi && o.get_CoordX() <= ma) { if(o.get_CoordY() >= tb.get_CoordY()) { cnt++; tbhp += o.get_HitpointsPercent(); } } } for(var k in dl) { var o = dl[k]; if(o.get_CoordX() >= mi && o.get_CoordX() <= ma) { if(o.get_CoordY() >= tb.get_CoordY()) { cnt++; tbhp += o.get_HitpointsPercent(); } } } tbhp = 100 * tbhp / cnt; var dfhp = tbhp; hp = {}; hp.name = '<b>CY & DF column HP [%]</b>'; hp.lbs = ['CY:','DF:']; t = []; t.push(this.numberFormat(cyhp, 0)); t.push(this.numberFormat(dfhp, 0)); hp.val = t; this.Display.infoArrays.push(hp); //this.Display.twoLineInfoArrays.push(hp); // store this.lootList.store('infoArrays',this.Display.infoArrays); } catch (e) { console.log("MHTools.Loot.calcInfo 2: ", e); } } if(this.settings.showRepairTime.v) { try { var a = oc.get_CityUnitsData().GetRepairTimeFromEUnitGroup(ClientLib.Data.EUnitGroup.Aircraft, false);//false // RT Defense var v = oc.get_CityUnitsData().GetRepairTimeFromEUnitGroup(ClientLib.Data.EUnitGroup.Vehicle, false);//false // RT Defense var i = oc.get_CityUnitsData().GetRepairTimeFromEUnitGroup(ClientLib.Data.EUnitGroup.Infantry, false);//false // RT Defense var m = Math.max(a,v,i); var aa = oc.GetResourceCount(ClientLib.Base.EResourceType.RepairChargeAir); var av = oc.GetResourceCount(ClientLib.Base.EResourceType.RepairChargeVeh); var ai = oc.GetResourceCount(ClientLib.Base.EResourceType.RepairChargeInf); var am = Math.min(aa,av,ai); var ohp=0; //CHECK //my //for (var k in ol.Offences.d) ohp += ol.Offences.d[k].get_HitpointsPercent();//0-1 means 0-100% //ohp = 100.0 * ohp / ol.Offences.c; //console.log('Health',ohp,oc.GetOffenseConditionInPercent()); //ohp = this.numberFormat(ohp, 0); //ea ohp = oc.GetOffenseConditionInPercent(); var ool = this.numberFormat(oc.get_LvlOffense(), 1); //console.log('oc',oc,'oc.get_LvlOffense()',oc.get_LvlOffense()); hp = {}; hp.name = '<b>Repair time (Your offence)</b>'; hp.lbs = ['Maximum:','Available:','Health:','Level:']; t = []; t.push(this.hms(m)); t.push(this.hms(am)); t.push(ohp); t.push(ool); hp.val = t; //this.Display.infoArrays.push(hp); this.Display.twoLineInfoArrays.push(hp); // store this.lootList.store('twoLineInfoArrays',this.Display.twoLineInfoArrays); } catch (e) { console.log("MHTools.Loot.calcInfo 3: ", e); } } }, calcFriendlyInfo: function() { this.Display.twoLineInfoArrays = []; if(!this.settings.showLevels.v && !this.settings.showAllyRepairTimeInfo.v) return; try { if (!this.Data.loaded) return; //var cc = this.Data.cc; var oc = this.Data.oc; var ec = this.Data.ec; var ol = this.Data.ol; var el = this.Data.el; var IsOwn = this.Data.IsOwnBase; if(this.settings.showLevels.v) { var sd = ec.get_SupportData(); var sn; var sl; if(sd !== null) { sl = sd.get_Level(); sn = ec.get_SupportWeapon().dn; } hp = {}; hp.name = '<b>Levels</b>'; hp.lbs = ['Base:','Defence:','Offence:','Support:']; t = []; if(el.Buildings.c>0) t.push(this.numberFormat(ec.get_LvlBase(), 1)); else t.push('--'); if(el.Defences.c>0) t.push(this.numberFormat(ec.get_LvlDefense(), 1)); else t.push('--'); if(el.Offences.c>0) t.push(this.numberFormat(ec.get_LvlOffense(), 1)); else t.push('--'); if(sd !== null) t.push(this.numberFormat(sl, 1)); else t.push('--'); hp.val = t; this.Display.twoLineInfoArrays.push(hp); } if(this.settings.showAllyRepairTimeInfo.v) { var a = ec.get_CityUnitsData().GetRepairTimeFromEUnitGroup(ClientLib.Data.EUnitGroup.Aircraft, false);//false // RT Defense var v = ec.get_CityUnitsData().GetRepairTimeFromEUnitGroup(ClientLib.Data.EUnitGroup.Vehicle, false);//false // RT Defense var i = ec.get_CityUnitsData().GetRepairTimeFromEUnitGroup(ClientLib.Data.EUnitGroup.Infantry, false);//false // RT Defense var m = Math.max(a,v,i); var aa = ec.GetResourceCount(ClientLib.Base.EResourceType.RepairChargeAir); var av = ec.GetResourceCount(ClientLib.Base.EResourceType.RepairChargeVeh); var ai = ec.GetResourceCount(ClientLib.Base.EResourceType.RepairChargeInf); var am = Math.min(aa,av,ai); var ofl; var ohp=0; if(el.Offences.c>0) { //my //for (var k in el.Offences.d) ohp += el.Offences.d[k].get_HitpointsPercent();//get_Health();//Health - hitpoints //ohp = 100.0 * ohp / el.Offences.c; //console.log('Health',ohp,ec.GetOffenseConditionInPercent()); //ohp = this.numberFormat(ohp, 0); //ea ohp = ec.GetOffenseConditionInPercent(); //ohp = ec.GetOffenseConditionInPercent();//GetOffenseConditionInPercent () ofl = this.numberFormat(ec.get_LvlOffense(), 1); //console.log('ec',ec,'ec.get_LvlOffense()',ec.get_LvlOffense()); } else { ohp = '---'; ofl = '---'; } hp = {}; hp.name = IsOwn?'<b>Repair time (Your offence)</b>':'<b>Repair time (Ally offence)</b>'; hp.lbs = ['Maximum:','Available:','Health:','Level:']; t = []; t.push(this.hms(m)); //t.push('---'); t.push(this.hms(am)); t.push(ohp); t.push(ofl); hp.val = t; this.Display.twoLineInfoArrays.push(hp); } //this.Display.twoLineInfoArrays = twoLineInfoArrays; this.lootList.store('twoLineInfoArrays',this.Display.twoLineInfoArrays); } catch (e) { console.warn("MHTools.Loot.calcFriendlyInfo: ", e); } }, calcDistance: function () { this.Display.distanceArray = []; if(!this.settings.showDistance.v) return; //console.log('calcDistance'); try { var visObject = ClientLib.Vis.VisMain.GetInstance().get_SelectedObject(); if (visObject != null)// && visObject.get_VisObjectType() == ClientLib.Vis.VisObject.EObjectType.RegionCityType) { //if (this.Data === null) this.Data = {}; var t = visObject.get_VisObjectType(); var LObjectType = []; for(k in ClientLib.Vis.VisObject.EObjectType) LObjectType[ClientLib.Vis.VisObject.EObjectType[k]] = k; //console.log('Vis Object Type:',t,', ',LObjectType[t]);