info base.js
À propos du fichier
- Type de fichier
- Fichier JS de 85 Ko (text/html)
- Confidentialité
- Fichier public, envoyé le 21 mai 2014 à 07:58, depuis l'adresse IP 31.34.x.x (France)
- Sécurité
- Ne contient aucun Virus ou Malware connus - Dernière vérification: 16 heures
- Statistiques
- La présente page de téléchargement a été vue 1182 fois depuis l'envoi du fichier
- Page de téléchargement
-
Aperçu du fichier
// ==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]);
Partager le fichier info base.js sur le Web et les réseaux sociaux:
Télécharger le fichier info base.js