您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Sammelt Informationen ueber Basenausbau der Allianzmitglieder (basierend auf Skripte / Routinen von neobsen, JimBeamJD, KRS_L, F.D, und Dooki)
// ==UserScript== // @name C&C:TA CnC-Eco // @version 1.2.0 // @namespace http://cnc-eco.herokuapp.com // @homepage http://cnc-eco.herokuapp.com // @description Sammelt Informationen ueber Basenausbau der Allianzmitglieder (basierend auf Skripte / Routinen von neobsen, JimBeamJD, KRS_L, F.D, und Dooki) // @author F.D, J.L. // @include http*://*.alliances.commandandconquer.com/*/index.aspx* // @icon https://cnc-eco.herokuapp.com/favicon.ico // @copyright 2018, J.L. // @grant GM_setValue // @grant GM_getValue // @grant GM_registerMenuCommand // @grant GM_xmlhttpRequest // @grant GM_updatingEnabled // @grant unsafeWindow // @license CC BY-NC-SA 4.0 - http://creativecommons.org/licenses/by-nc-sa/4.0/ // ==/UserScript== (function() { var CncEco_mainFunction = function() { function Y() { var l = {}; Array.isarray || (Array.isarray = function(c) { return c instanceof Array ? !0 : !1; }); Object.isobj || (Object.isobj = function(c) { return c instanceof Object && !0 !== c instanceof Array ? !0 : !1; }); JSON.isjson || (JSON.isjson = function(c) { try { return JSON.parse(c), 'parse'; } catch (f) { try { return JSON.stringify(c), 'stringify'; } catch (b) { return !1; } } }); qx.Class.define('CncEcomain', { type: 'singleton', extend: qx.core.Object, construct: function() { this.mainMenuContent = new qx.ui.menu.Menu(); this.mainMenuButton = new qx.ui.form.MenuButton( 'CncEco', null, this.mainMenuContent ); this.mainMenuButton.set({ width: 70, appearance: 'button-bar-right', toolTipText: 'List of MemberStatsCommands', }); this.mainMenuButton.addListener( 'execute', function(b) { this.mainMenuContent.open(); }, this ); for ( var c = qx.core.Init.getApplication().getUIItem( ClientLib.Data.Missions.PATH.BAR_MENU ), f = c.getChildren()[1].getChildren(), b = f.length - 1; 0 <= b; b-- ) 'function' === typeof f[b].setAppearance && 'button-bar-right' == f[b].getAppearance() && f[b].setAppearance('button-bar-center'); c.getChildren()[1].add(this.mainMenuButton); c.getChildren()[0].setScale(!0); c.getChildren()[0].setWidth(834); }, members: { mainMenuContent: null, mainMenuButton: null, poiwindow: null, poiInfoWindow: null, AddMainMenu: function(c, f, b) { null === c ? h('CncEco.AddSubMenu: name empty') : null === f ? h('CncEco.AddMainMenu: command empty') : (null !== b ? ((b = new qx.ui.command.Command(b)), b.addListener('execute', f, this), (c = new qx.ui.menu.Button(c)), c.setCommand(b)) : ((c = new qx.ui.menu.Button(c)), c.addListener('execute', f)), this.mainMenuContent.add(c)); }, AddSubMainMenu: function(c) { if (null === c) h('Mest.AddSubMainMenu: name empty'); else { var f = new qx.ui.menu.Menu(); c = new qx.ui.menu.Button(c, null, null, f); this.mainMenuContent.add(c); return f; } }, AddSubMenu: function(c, f, b, d) { if (null === f) h('CncEco.AddSubMenu: name empty'); else if (null === b) h('CncEco.AddSubMenu: command empty'); else if (null === c) h('CncEco.AddSubMenu: subMenu empty'); else { if (null !== d) { var g = new qx.ui.command.Command(d); g.addListener('execute', b, this); d = new qx.ui.menu.Button(f); d.setCommand(g); } else (d = new qx.ui.menu.Button(f)), d.addListener('execute', b); c.add(d); c = new qx.ui.menu.Menu(); new qx.ui.menu.Button(f, null, null, c); return c; } }, initialize: function() { try { var c = ClientLib.Data.MainData.GetInstance(); c.get_Player().get_Name(); c.get_Server().get_WorldId(); c.get_Alliance().get_Id(); addEventListener('keyup', this.onKey, !1); h('init done'); CncEcomain.getInstance().doAtLogin(); CncEcomain.getInstance().doAfter(); Array.isArray || (Array.isArray = function(c) { return ( '[object Array]' === Object.prototype.toString.call(c) ); }); Object.isObj || (Object.isObj = function(c) { return ( '[object Object]' === Object.prototype.toString.call(c) ); }); } catch (f) { h(f); } }, onKey: function(c) { console.log(c); }, doMenu: function() { var c = CncEcomain.getInstance(), f; //= c.AddSubMainMenu('MainOptions'); c.AddMainMenu('open CnCEco', function() { CncEcomain.getInstance().openurl(); }); // c.AddMainMenu('send reports', function() { // CncEcoReports.getInstance().onAllReportsLoaded(); // }); c.AddMainMenu('add player', function() { CncEcomain.getInstance().getToken(); }); c.AddMainMenu( 'update data', function() { CncEcomain.getInstance().doAfter(); }, 'Alt+y' ); !0 === ClientLib.Data.MainData.GetInstance() .get_Alliance() .get_IsAdmin() && false && // todo remove false ((f = c.AddSubMainMenu('State of War')), c.AddSubMenu( f, 'set State of War', function() { CncEcomain.getInstance().remoteRequest('stateofwar'); }, 'Alt+p' ), c.AddSubMenu( f, 'unset State of War', function() { CncEcomain.getInstance().remoteRequest('unsetstateofwar'); }, 'Alt+o' )); }, doAtLogin: function() { this.checkWar(); this.doMenu(); this.isPoiMinister(); }, doAfter: function() { CncEcomain.getInstance().checkVersion(); CncEcomain.getInstance().PlayerUpdate(); }, checkWar: function() { CncEcomain.getInstance().getIsWar(); }, checkVersion: function() { CncEcomain.getInstance().remoteRequest('version'); }, openurl: function() { CncEcomain.getInstance().remoteRequest('new_check'); }, getToken() { CncEcomain.getInstance().remoteRequest('get_token'); }, askOtherButton: function() { CncEcomain.getInstance().remoteRequest('button_check'); }, setSubstitution: function(c, f) { CncEcomain.getInstance().substitutionXhr('set', f, c); }, removeSubstitution: function(c, f) { CncEcomain.getInstance().substitutionXhr('unset', c, f); }, poiInfo: function() { CncEcomain.getInstance() .getWindow() .open(); this.getWindow().push('Create PoiInfo\nplease wait\n\n'); CncEcomain.getInstance().getPoiInfo(); }, isPoiMinister: function() { // h('check if poiminister i'); // CncEcomain.getInstance().remoteRequest('poiminister'); }, substitutionXhr: function(c, f, b) { var d = ClientLib.Data.MainData.GetInstance() .get_Server() .get_WorldId(), g = ClientLib.Net.CommunicationManager.GetInstance().get_InstanceId(), n = new qx.bom.request.Xhr(); 'set' == c && ((n.onload = function() { '0' == n.responseText && h('WarSubstitution is set!'); '1' == n.responseText && h('WarSubstitution is Error!'); if ('2' == n.responseText) { n.abort(); h('substitution ist nicht richtig gesetzt'); var c = ClientLib.Data.MainData.GetInstance() .get_PlayerSubstitution() .getOutgoing(); c.n !== b && (h('Substitution to ' + c.n + ' delet'), (c = '{"session":"' + g + '","id":"' + c.i + '","pid":"' + c.p1 + '"}'), CncEcomain.getInstance().removeSubstitution(c, b)); } '3' == n.responseText && h('WarSubstitution Account nicht auf dieser Welt!'); '4' == n.responseText && h( 'WarSubstitution kann nicht auf eigenen account gesetzt werden!' ); }), n.open( 'POST', '/' + d + '/Presentation/Service.svc/ajaxEndpoint/SubstitutionCreateReq' ), n.setRequestHeader('Content-Type', 'application/json'), n.send(f)); 'unset' == c && ((n.onload = function() { if ('0' == n.responseText) { var c = '{"session":"' + ClientLib.Net.CommunicationManager.GetInstance().get_InstanceId() + '","name":"' + b + '"}'; CncEcomain.getInstance().setSubstitution(b, c); } }), n.open( 'POST', '/' + d + '/Presentation/Service.svc/ajaxEndpoint/SubstitutionCancelReq' ), n.setRequestHeader('Content-Type', 'application/json'), n.send(f)); }, getIsWar: function() { h('Check if is War'); 'true' !== B.get_IsSubstituteLogin() ? (h('Player is not substitutionLogin'), CncEcomain.getInstance().remoteRequest('war')) : h('Player is substitutionLogin'); }, PlayerUpdate: function() { var c = ClientLib.Data.MainData.GetInstance(); c.get_Player().get_Name(); var f = c.get_Alliance(), b = c.get_Player().get_Id(); c.get_Server(); ClientLib.Net.CommunicationManager.GetInstance().get_InstanceId(); f.get_OwnedPOIs(); ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand( 'GetPublicPlayerInfo', { id: b }, phe.cnc.Util.createEventDelegate( ClientLib.Net.CommandResult, this, Z ), null ); }, remoteRequest: function(c, f) { h('remoteRequest: ' + c); var b = ClientLib.Data.MainData.GetInstance(); var d = b.get_Player().get_Name(), g = b.get_Alliance(), n = b.get_Player().get_Id(), s = b.get_Player().get_IsSubstituteLogin(), q = b.get_Server(), k = ClientLib.Net.CommunicationManager.GetInstance().get_InstanceId(), u = g.get_OwnedPOIs(), p = new qx.io.remote.Request( 'https://cnc-eco.herokuapp.com/api/v1/ingameData', 'POST', 'text/html' ); p.setTimeout(3e3); p.setProhibitCaching(!1); p.setRequestHeader('Content-Type', 'text/html'); p.setTimeout('3600000'); p.setResponseType('text/html'); p._ontimeout = function() { p.abort(); h('req abort'); }; 'version' == c && (h('version check'), p.setData('version'), p.setParameter('version', '4.7.5'), p.addListener('completed', function(b) { 'version' === b.getContent() ? (h('UPDATE is vorhanden'), CncEcomain.getInstance().UpdateWindow()) : h('Kein Script Update'); }), p.send()); 'update' == c && (p.setData('UPDATE'), p.setParameter('update', '1'), console.log('PlayerInfoData= null ______________________'), CncEcomain.getInstance().Playerinfo(p, f), p.addListener('completed', function(b) { h('PlayerDataUpdate'); 'UPDATED' === b.getContent() && h('PlayerData Up To Date'); })); 'new_check' == c && (p.setData('new_check'), p.setParameter('new_check', d), p.addListener('completed', function(b) { '' === b.getContent() ? (h('new Account:: ' + b.getContent()), CncEcomain.getInstance().winOpen('', d)) : (h('NOT new :: ' + b.getContent()), CncEcomain.getInstance().winOpen('', '')); }), p.send()); 'get_token' == c && (s ? CncEcomain.getInstance().winOpen( '', 'error=You cannot add account from substitutions' ) : p.setData('get_token', d), p.setParameter('get_token', d), p.addListener('completed', function(b) { const content = b.getContent(); h('content from get_token'); h(content); // content ? CncEcomain.getInstance().winOpen('', content) : h('token missing - add your account ingame first') content ? CncEcomain.getInstance().AuthWindow(content) : h('token missing - add your account ingame first'); }), p.send()); 'war' == c && (p.setData('WAR'), p.setParameter('name', d), p.setParameter('alli', g.get_Id()), p.setParameter('world', q.get_WorldId()), p.addListener('completed', function(b) { var c = '{"session":"' + k + '","name":"' + b.getContent() + '"}'; if ( '' !== b.getContent() && d !== b.getContent() && !0 !== ClientLib.Data.MainData.GetInstance() .get_Player() .get_IsSubstituteLogin() ) { var f = ClientLib.Data.MainData.GetInstance() .get_PlayerSubstitution() .getOutgoing(); null !== f ? (h(f), f.n !== b.getContent() && CncEcomain.getInstance().CncEcoUvWindow( b.getContent(), c )) : CncEcomain.getInstance().CncEcoUvWindow( b.getContent(), c ); } else h('No War'); }), p.send()); 'stateofwar' == c && (p.setData('stateofwar'), p.setParameter('stateofwar', d), p.setParameter('token', n), p.setParameter('alli', g.get_Id()), p.setParameter('world', q.get_WorldId()), p.addListener('completed', function(b) { 'stateofwar' === b.getContent() ? (h('State of War is set'), CncEcomain.getInstance().stateofwarwin(d, 'set')) : h('State of War ERROR :: ' + b.getContent()); }), (b = ClientLib.Data.MainData.GetInstance() .get_Alliance() .get_IsAdmin()), !0 === b ? p.send() : h('State of War ERROR :: You are no admin!')); 'unsetstateofwar' == c && (p.setData('unsetstateofwar'), p.setParameter('unsetstateofwar', d), p.setParameter('token', n), p.setParameter('alli', g.get_Id()), p.setParameter('world', q.get_WorldId()), p.addListener('completed', function(b) { 'unsetstateofwar' === b.getContent() ? (h('State of War is unset'), CncEcomain.getInstance().stateofwarwin(d, 'unset')) : h('State of War ERROR :: ' + b.getContent()); }), (b = ClientLib.Data.MainData.GetInstance() .get_Alliance() .get_IsAdmin()), !0 === b ? p.send() : h('State of War ERROR :: You are no admin!')); 'poiminister' == c && (p.setData('poiminister'), p.setParameter('poiminister', d), p.setParameter('token', n), p.setParameter('alli', g.get_Id()), p.setParameter('world', q.get_WorldId()), p.addListener('completed', function(b) { b.getContent() === d ? '0' < u.length ? (h('you are PoiMinister'), CncEcomain.getInstance().AddMainMenu( 'PoiInfo', function() { CncEcomain.getInstance().poiInfo(); }, 'Alt+x' )) : h("you are PoiMinister but alli have 0 Poi's ") : h('you are not PoiMinister :: ' + b.getContent()); }), p.send()); }, Playerinfo: function(c, f) { qx.core.Init.getApplication() .getBackgroundArea() .closeCityInfo(); var b = ClientLib.Data.MainData.GetInstance(); var d = b.get_Alliance().get_MemberDataAsArray(); var g = b .get_Server() .get_Name() .trim(), n = b.get_Server().get_WorldId(), q = b.get_Cities(), k = q.get_CurrentOwnCity().get_AllianceName(), q = q.get_CurrentOwnCity().get_AllianceId(); c.setFormField('version', '4.7.5'); c.setFormField('worldId', n); c.setFormField('serverName', g); c.setFormField('allianceId', q); c.setFormField('allianceName', k); c.setFormField('count', d.length); for (g = 0; g < d.length; g++) (n = d[g].Id), (k = d[g].Name), (q = d[g].RoleName), c.setFormField('playerId' + g, n), c.setFormField('name' + g, k), c.setFormField('ro' + g, q); d = b.get_Cities(); n = d.get_CurrentOwnCity().get_PlayerId(); c.setFormField('currentplayerId', n); n = ClientLib.Data.MainData.GetInstance().get_Player().accountId; c.setFormField('accountId', n); n = ClientLib.Data.MainData.GetInstance() .get_Alliance() .get_FirstLeaders().l; k = ClientLib.Data.MainData.GetInstance() .get_Alliance() .get_SecondLeaders().l; c.setFormField('cic', n); c.setFormField('sc', k); n = d.get_CurrentOwnCity().get_PlayerName(); c.setFormField('currentplayerName', n); n = f.c.length; c.setFormField('basecount', n); c.setFormField('fraction', f.f); c.setFormField('basekills', f.bd); c.setFormField('pvekills', f.bde); c.setFormField('pvpkills', f.bd - f.bde); c.setFormField('points', f.p); c.setFormField('rank', f.r); c.setFormField('hascode', f.hchc); c.setFormField('maxcp', B.GetCommandPointMaxStorage()); c.setFormField('actcp', Math.round(B.GetCommandPointCount())); c.setFormField('funds', b.get_Inventory().get_PlayerFunds()); c.setFormField('schirme', Math.round(B.GetSupplyPointCount())); c.setFormField('RPoints', B.get_ResearchPoints()); c.setFormField('CreditsCount', Math.round(B.GetCreditsCount())); b = ClientLib.Data.MainData.GetInstance().get_Player(); k = b.get_Faction(); k = ClientLib.Base.Tech.GetTechIdFromTechNameAndFaction( ClientLib.Base.ETechName.Research_BaseFound, k ); k = b .get_PlayerResearch() .GetResearchItemFomMdbId(k) .get_NextLevelInfo_Obj(); b = []; for (g in k.rr) 0 < k.rr[g].t && (b[k.rr[g].t] = k.rr[g].c); g = b[ClientLib.Base.EResourceType.Gold]; b = b[ClientLib.Base.EResourceType.ResearchPoints]; k = B.get_Credits(); k = (k.Delta + k.ExtraBonusDelta) * ClientLib.Data.MainData.GetInstance() .get_Time() .get_StepsPerHour(); g = (g - B.GetCreditsCount()) / k; c.setFormField('timeTOmcv', Math.round(3600 * g)); c.setFormField('rpNeeded', b); for (g = 0; g < n; g++) { var k = d.GetCity(f.c[g].i), b = []; b.Id = f.c[g].i; b.Na = k.get_Name(); b.Po = f.c[g].p; b.Lvl = k.get_LvlBase().toFixed(2); b.Off = k.get_LvlOffense().toFixed(2); b.Def = k.get_LvlDefense().toFixed(2); b.PosX = f.c[g].x; b.PosY = f.c[g].y; q = k.get_CityUnitsData(); b.repInf = 0 < b.Off ? q.GetRepairTimeFromEUnitGroup( ClientLib.Data.EUnitGroup.Infantry, !1 ) : 0; b.repVeh = 0 < b.Off ? q.GetRepairTimeFromEUnitGroup( ClientLib.Data.EUnitGroup.Vehicle, !1 ) : 0; b.repAir = 0 < b.Off ? q.GetRepairTimeFromEUnitGroup( ClientLib.Data.EUnitGroup.Aircraft, !1 ) : 0; b.maxRep = 0 < b.Off ? k.GetResourceMaxStorage( ClientLib.Base.EResourceType.RepairChargeInf ) : 0; b.availRep = 0 < b.Off ? ClientLib.Base.Resource.GetResourceCount( k .get_RepairOffenseResources() .get_RepairChargeOffense() ) : 0; var u = k.get_SupportWeapon(); b.supWp = null !== u ? u.n : ''; u = k.get_SupportData(); b.SL = null !== u ? u.get_Level() : 0; q = k.get_CityBuildingsData(); u = q.GetUniqueBuildingByTechName( ClientLib.Base.ETechName.Construction_Yard ); b.CY = null !== u ? u.get_CurrentLevel() : 0; u = q.GetUniqueBuildingByTechName( ClientLib.Base.ETechName.Defense_Facility ); b.DF = null !== u ? u.get_CurrentLevel() : 0; u = q.GetUniqueBuildingByTechName( ClientLib.Base.ETechName.Defense_HQ ); b.DHQ = null !== u ? u.get_CurrentLevel() : 0; b.PP = Math.round( k.GetResourceGrowPerHour( ClientLib.Base.EResourceType.Power, !1, !1 ) ); b.PBP = Math.round( k.GetResourceBonusGrowPerHour( ClientLib.Base.EResourceType.Power ) ); b.PAB = ClientLib.Data.MainData.GetInstance() .get_Alliance() .GetPOIBonusFromResourceType( ClientLib.Base.EResourceType.Power ); b.CP = Math.round( ClientLib.Base.Resource.GetResourceGrowPerHour( k.get_CityCreditsProduction(), !1 ) ); b.CBP = Math.round( ClientLib.Base.Resource.GetResourceBonusGrowPerHour( k.get_CityCreditsProduction(), !1 ) ); b.Tall = Math.round( k.GetResourceGrowPerHour( ClientLib.Base.EResourceType.Tiberium, !1, !1 ) + k.GetResourceBonusGrowPerHour( ClientLib.Base.EResourceType.Tiberium ) + ClientLib.Data.MainData.GetInstance() .get_Alliance() .GetPOIBonusFromResourceType( ClientLib.Base.EResourceType.Tiberium ) ); b.Call = Math.round( k.GetResourceGrowPerHour( ClientLib.Base.EResourceType.Crystal, !1, !1 ) + k.GetResourceBonusGrowPerHour( ClientLib.Base.EResourceType.Crystal ) + ClientLib.Data.MainData.GetInstance() .get_Alliance() .GetPOIBonusFromResourceType( ClientLib.Base.EResourceType.Crystal ) ); b.PPall = b.PP + b.PBP + b.PAB; b.CPall = b.CP + b.CBP; c.setFormField('basename' + g, b.Na); c.setFormField('baseid' + g, b.Id); c.setFormField('punkte' + g, b.Po); c.setFormField('level' + g, b.Lvl); c.setFormField('off' + g, b.Off); c.setFormField('def' + g, b.Def); c.setFormField('repinf' + g, b.repInf); c.setFormField('repveh' + g, b.repVeh); c.setFormField('repair' + g, b.repAir); c.setFormField('repmax' + g, b.maxRep); c.setFormField('availrep' + g, b.availRep); c.setFormField('suptype' + g, b.supWp); c.setFormField('suplvl' + g, b.SL); c.setFormField('cylvl' + g, b.CY); c.setFormField('dflvl' + g, b.DF); c.setFormField('dfhqlvl' + g, b.DHQ); c.setFormField('power' + g, b.PPall); c.setFormField('tib' + g, b.Tall); c.setFormField('cris' + g, b.Call); c.setFormField('cash' + g, b.CPall); c.setFormField('x' + g, b.PosX); c.setFormField('y' + g, b.PosY); V(b.Id, g, c); } c.send(); }, stateofwarwin: function(c, f) { var b = new qx.ui.window.Window('Alliance on war'); if ('set' == f) { var d = 'You "' + c + '" have set State of War'; var g = 'Set State of War'; } 'unset' == f && ((d = 'You "' + c + '" have delet State of War'), (g = 'UnSet State of War')); b.set({ caption: g, icon: 'webfrontend/ui/common/icon_moral_alert_red.png', layout: new qx.ui.layout.HBox(4), width: 250, height: 75, contentPaddingTop: 0, contentPaddingBottom: 6, contentPaddingRight: 6, contentPaddingLeft: 6, showMaximize: !1, showMinimize: !1, allowMaximize: !1, allowMinimize: !1, resizable: !1, visibility: 'visible', textColor: '#bfbfbf', }); b.setPadding(10); b.setLayout(new qx.ui.layout.VBox(10)); g = new qx.ui.container.Composite( new qx.ui.layout.VBox(4).set({ alignX: 'left' }) ); g.add(new qx.ui.basic.Label(d)); d = new qx.ui.container.Composite( new qx.ui.layout.VBox(1).set({ alignX: 'center' }) ); var n = new qx.ui.form.Button('close'); n.set({ toolTipText: 'close', width: 70, height: 20, maxWidth: 200, maxHeight: 32, center: !0, rich: !0, }); d.add(n); n.addListener( 'execute', function(c) { b.close(); }, this ); b.add(g); b.add(d); b.center(); b.open(); }, CncEcoUvWindow: function(c, f) { var b = new qx.ui.window.Window('Alliance on war'), d = 'Your commander has declared war status!|It was sent a substitution to:|' + c; b.set({ caption: 'Alliance on war', icon: 'webfrontend/ui/common/icon_moral_alert_red.png', layout: new qx.ui.layout.HBox(4), width: 300, height: 150, contentPaddingTop: 0, contentPaddingBottom: 6, contentPaddingRight: 6, contentPaddingLeft: 6, showMaximize: !1, showMinimize: !1, allowMaximize: !1, allowMinimize: !1, resizable: !1, visibility: 'visible', textColor: '#bfbfbf', }); b.setPadding(10); b.setLayout(new qx.ui.layout.VBox(10)); var g = new qx.ui.container.Composite( new qx.ui.layout.VBox(4).set({ alignX: 'left' }) ), n = new qx.ui.container.Composite( new qx.ui.layout.VBox(1).set({ alignX: 'center' }) ), q = new qx.ui.form.Button('send Substitution'), k = new qx.ui.form.Button('abort'); q.set({ toolTipText: 'send Substitution', width: 120, height: 20, maxWidth: 200, maxHeight: 32, center: !0, rich: !0, }); k.set({ toolTipText: 'dont send substitution', width: 120, height: 20, maxWidth: 200, maxHeight: 32, center: !0, rich: !0, }); n.add(q); n.add(k); q.addListener( 'execute', function(d) { b.close(); CncEcomain.getInstance().substitutionXhr('set', f, c); }, this ); k.addListener( 'execute', function(c) { b.close(); }, this ); d = d.split('|'); for (i = 0; '3' > i; i++) g.add(new qx.ui.basic.Label(d[i])); b.add(g); b.add(n); b.center(); b.open(); }, UpdateWindow: function() { var c = new qx.ui.window.Window('CnCEco Update!'); c.set({ caption: 'CnCEco Update!', icon: 'webfrontend/ui/common/icon_moral_alert_red.png', layout: new qx.ui.layout.HBox(4), width: 450, height: 170, contentPaddingTop: 0, contentPaddingBottom: 6, contentPaddingRight: 6, contentPaddingLeft: 6, showMaximize: !1, showMinimize: !1, allowMaximize: !1, allowMinimize: !1, resizable: !0, visibility: 'excluded', textColor: '#bfbfbf', }); c.setPadding(10); c.setLayout(new qx.ui.layout.VBox(10)); var f = new qx.ui.container.Composite( new qx.ui.layout.VBox(2).set({ alignX: 'left' }) ), b = new qx.ui.basic.Label('CnCEco script "4.7.5" is to old'); f.add(b); b = new qx.ui.basic.Label( 'Please disable/deinstall the old script and get new version' ); f.add(b); b = new qx.ui.basic.Label(''); f.add(b); b = new qx.ui.basic.Label( 'Click button below to open link to get new version' ); f.add(b); var b = new qx.ui.container.Composite( new qx.ui.layout.VBox(2).set({ alignX: 'right' }) ), d = new qx.ui.form.Button('Get new Script'); b.add(d); d.addListener( 'execute', function() { c.close(); qx.core.Init.getApplication().showExternal( 'https://www.member-stats.de/?link=new_version', '.member-stats' ); }, this ); c.add(f); c.add(b); c.center(); c.open(); }, AuthWindow: function(content) { var c = new qx.ui.window.Window('CnCEco add player!'); c.set({ caption: 'CnCEco add player!', icon: 'webfrontend/ui/common/icon_moral_alert_red.png', layout: new qx.ui.layout.HBox(4), width: 450, height: 170, contentPaddingTop: 0, contentPaddingBottom: 6, contentPaddingRight: 6, contentPaddingLeft: 6, showMaximize: !1, showMinimize: !1, allowMaximize: !1, allowMinimize: !1, resizable: !0, visibility: 'excluded', textColor: '#bfbfbf', }); c.setPadding(10); c.setLayout(new qx.ui.layout.VBox(10)); var f = new qx.ui.container.Composite( new qx.ui.layout.VBox(2).set({ alignX: 'left' }) ), b = new qx.ui.basic.Label('You can now add your player to CnCEco'); f.add(b); b = new qx.ui.basic.Label(''); f.add(b); b = new qx.ui.basic.Label( 'Click button below to add your player to your CnCEco account' ); f.add(b); var b = new qx.ui.container.Composite( new qx.ui.layout.VBox(2).set({ alignX: 'right' }) ), d = new qx.ui.form.Button('add player'); b.add(d); d.addListener( 'execute', function() { c.close(); // CncEcomain.getInstance().winOpen('', content) qx.core.Init.getApplication().showExternal( 'https://www.cnc-eco.de/user?' + content ); }, this ); c.add(f); c.add(b); c.center(); c.open(); }, getPoiInfo: function() { function c(b, c) { try { var f = c.c; M = {}; for (var d in f) { var g = f[d]; M[d] = {}; M[d].x = g.x; M[d].y = g.y; M[d].n = g.n; I.push([M[d].n, M[d].x, M[d].y, c.n]); } } catch (C) { h('onPlayerInfo: ', C); } } x = []; I = []; var f = ClientLib.Data.MainData.GetInstance(), b = f.get_Alliance().get_OwnedPOIs(), d = b.length, g = this.getWindow(); g.push('search all Pois from Alliance\n'); for (var n = 0; n < d; n++) { if (null !== b[n] && 'undefined' !== b[n]) { var q = phe.cnc.gui.util.Text.getPoiInfosByType(b[n].t).name, k = b[n].t, u = b[n].l, p = b[n].i, l = ClientLib.Base.PointOfInterestTypes.GetScoreByLevel( b[n].l ), O = phe.cnc.gui.util.Numbers.formatCoordinates( b[n].x, b[n].y ); x.push([p, q, u, l, b[n].x, b[n].y, O, k]); } if (n + 1 == d) for ( h('AlliancePois scanned'), g.push('AlliancePois scanned\n'), q = [], q = f.get_Alliance().get_MemberDataAsArray(), g.push('search all Playerbases\n'), k = 0; k < q.length; k++ ) (W = q[k].Name), ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand( 'GetPublicPlayerInfoByName', { name: W }, phe.cnc.Util.createEventDelegate( ClientLib.Net.CommandResult, this, c ), !0 ), k + 1 === q.length && (h('save all Playerbases'), g.push('all Playerbases saved\n'), CncEcomain.getInstance().getBasesOnPoi()); } }, getBasesOnPoi: function() { h('scan if Playerbase is in range of a AlliancePoi'); var c = this.getWindow(); c.push('scan if Playerbase is in range of a AlliancePoi\n'); E = []; ClientLib.Data.MainData.GetInstance() .get_Alliance() .get_MemberDataAsArray(); window.setTimeout(function() { for (var f = 0; f < I.length; f++) { for (var b = 0; b < x.length; b++) { var d = Math.abs(I[f][1] - x[b][4]), g = Math.abs(I[f][2] - x[b][5]); 2 < d || 2 < g || (2 == d && 2 == g) || E.push([ x[b][0], x[b][1], x[b][2], x[b][3], x[b][6], I[f][0], I[f][3], x[b][4], x[b][5], x[b][7], ]); } f + 1 === I.length && b === x.length && (h('Scan complete'), c.push('Scan complete\n'), CncEcomain.getInstance().SendPoiInfo()); } }, 2e3); }, SendPoiInfo: function() { var c = this.getWindow(); c.push('Preparing to Send PoiInfo to Memberstats.de\n'); h('Preparing to Send PoiInfo'); window.setTimeout(function() { function f() { b.addListener('completed', function(b) { '' !== b.getContent() ? (h('hab was bekommen ' + b.getContent()), c.push('complete Send PoiInfo to Memberstats.de\n'), 'none' != CncEcomain.getInstance().getForumId() ? ((b = CncEcomain.getInstance().getForumId()), CncEcomain.getInstance().PoiForum(E, b)) : CncEcomain.getInstance().CreatePoiForum(E)) : h('hab nix bekommen ' + b.getContent()); }); b.send(); } var b = new qx.io.remote.Request( 'https://www.member-stats.de/poi/', 'POST', 'text/html' ); b.setProhibitCaching(!1); b.setRequestHeader('Content-Type', 'text/html'); b.setTimeout('3600000'); b.setResponseType('text/html'); if (null !== E) { var d = ClientLib.Data.MainData.GetInstance(), g = d.get_Server().get_WorldId(), d = d.get_Alliance().get_Id(); b.setFormField('worldId', g); b.setFormField('allianceId', d); b.setData('PoiData'); b.setParameter('version', '4.7.5'); b.setFormField('count', E.length); for (g = 0; g < E.length; g++) b.setFormField('id' + g, E[g][0]), b.setFormField('name' + g, E[g][1]), b.setFormField('level' + g, E[g][2]), b.setFormField('score' + g, E[g][3]), b.setFormField('coords' + g, E[g][4]), b.setFormField('playerBase' + g, E[g][5]), b.setFormField('player' + g, E[g][6]), b.setFormField('x' + g, E[g][7]), b.setFormField('y' + g, E[g][8]), b.setFormField('type' + g, E[g][9]), g + 1 === E.length && (h('Send PoiInfo to https://www.member-stats.de'), window.setTimeout(f, 1e3)); } }, 2e3); }, winOpen: function(c, f) { var b = CncEcoScanner.Layout.window.getInstance(), d = 'https://www.member-stats.de'; '' !== f && (d = 'https://www.cnc-eco.de/user?' + f); if ('layout' == f) { var g = ClientLib.Data.MainData.GetInstance(); var n = g.get_Player().get_Name(); d = 'https://www.cnc-eco.de/layouts/' + g.get_Server().get_WorldId(); } var g = qx.core.Init.getApplication(), q = new webfrontend.gui.CustomWindow(g.tr('tnf:external link')).set( { resizable: !1, showClose: !1, showMaximize: !1, showMinimize: !1, } ); q.setLayout(new qx.ui.layout.VBox(10)); q.addListenerOnce('resize', q.center, q); q.add( new qx.ui.basic.Label( g.tr('tnf:link will lead to an external page?') + '<br />' + g.tr('tnf:do you want to continue?') ).set({ rich: !0, maxWidth: 360, wrap: !0, textColor: 'white' }) ); c = new qx.ui.container.Composite( new qx.ui.layout.HBox(10).set({ alignX: 'right' }) ); var k = new webfrontend.ui.SoundButton(g.tr('tnf:no')); k.addListener( 'execute', function(c) { q.close(); 'layout' == f && (CncEcoScanner.getInstance().win.close(), !0 !== b.active && CncEcoScanner.Layout.window .getInstance() .openWindow('CncEco Scan result')); }, this ); g = new webfrontend.ui.SoundButton(g.tr('tnf:yes')); g.addListener( 'execute', function(c) { q.close(); 'layout' == f && (CncEcoScanner.getInstance().win.close(), !0 !== b.active && CncEcoScanner.Layout.window .getInstance() .openWindow('CncEco Scan result')); c = "<form name='LaunchForm' id='LaunchForm' action='" + d + "' method='POST'>"; c += "<input type='hidden' name='dummy' value='dummy' />"; 'layout' == f && (c += "<input type='hidden' name='name' value='" + n + "' />"); c += "</form><script type='text/javascript'>document.LaunchForm.submit();\x3c/script>"; var g = window.open('', ''); g.document.write(c); g.document.close(); }, this ); c.add(k); c.add(g); q.add(c); q.setModal(!0); q.open(); }, getForumId: function(c) { c = ClientLib.Data.MainData.GetInstance() .get_Forum() .get_Forums(); var f = c.c, b = 'none', d = 1, g; for (g in c.d) { if ('CncEco PoiInfo' == c.d[g].Title) return (b = c.d[g].Id); if ('none' == b && d === f && d <= f) return b; d++; } }, SortAlliancePois: function(c, f) { function b(b, c) { !0 === c && 0 === g ? (d.push('Post all AlliancePois to Forum\n'), g++) : !0 === c && (0 === U ? U++ : 1 === U ? h('do something postInfoAll') : 2 < R && h('postInfoAll do is was schiaf glafn ' + R)); !0 !== c && d.push('ERROR: Post all AlliancePois to Forum\n' + c + '\n'); } var d = CncEcomain.getInstance().getWindow(); d.push('Try to insert a post to "List of Alliance Poi"\n'); h('forumid: ' + c + ' threadid: ' + f); for ( var g = 0, n = [], q = [], k = [], u = [], p = [], l = [], O = [], m = '', A = 0; A < x.length; A++ ) { var D = x[A][1], w = x[A][7], t = x[A][2], C = x[A][0], v = x[A][3], z = x[A][6], y = x[A][4], r = x[A][5]; 2 === x[A][7] && n.push([C, D, t, v, y, r, z, w]); 3 === x[A][7] && q.push([C, D, t, v, y, r, z, w]); 4 === x[A][7] && k.push([C, D, t, v, y, r, z, w]); 5 === x[A][7] && u.push([C, D, t, v, y, r, z, w]); 6 === x[A][7] && p.push([C, D, t, v, y, r, z, w]); 7 === x[A][7] && l.push([C, D, t, v, y, r, z, w]); 8 === x[A][7] && O.push([C, D, t, v, y, r, z, w]); if (A + 1 == x.length) for (r = y = z = v = C = t = w = D = 0; r <= n.length; r++) if ( (0 === r && (m += '[b][u]Tiberium[/u][/b]\n'), r == n.length) ) for ( var m = m + '\n', m = m + '\n', m = m + '[u]Tiberium TotalScore:[/u]\n', m = m + ('[b]' + D + '[/b]\n'), m = m + '[hr]\n', F = 0; F <= q.length; F++ ) if ( (0 === F && (m += '[b][u]Crystal[/u][/b]\n'), F == q.length) ) for ( var m = m + '\n', m = m + '\n', m = m + '[u]Crystal TotalScore:[/u]\n', m = m + ('[b]' + w + '[/b]\n'), m = m + '[hr]\n', G = 0; G <= k.length; G++ ) if ( (0 === G && (m += '[b][u]Reactor[/u][/b]\n'), G == k.length) ) for ( var m = m + '\n', m = m + '\n', m = m + '[u]Power TotalScore:[/u]\n', m = m + ('[b]' + t + '[/b]\n'), m = m + '[hr]\n', B = 0; B <= u.length; B++ ) if ( (0 === B && (m += '[b][u]Tungsten[/u][/b]\n'), B == u.length) ) for ( var m = m + '\n', m = m + '\n', m = m + '[u]Tung TotalScore:[/u]\n', m = m + ('[b]' + C + '[/b]\n'), m = m + '[hr]\n', E = 0; E <= p.length; E++ ) if ( (0 === E && (m += '[b][u]Uranium[/u][/b]\n'), E == p.length) ) for ( var m = m + '\n', m = m + '\n', m = m + '[u]Uran TotalScore:[/u]\n', m = m + ('[b]' + v + '[/b]\n'), m = m + '[hr]\n', J = 0; J <= l.length; J++ ) if ( (0 === J && (m += '[b][u]Aircraft[/u][/b]\n'), J == l.length) ) for ( var m = m + '\n', m = m + '\n', m = m + '[u]Air TotalScore:[/u]\n', m = m + ('[b]' + z + '[/b]\n'), m = m + '[hr]\n', K = 0; K <= O.length; K++ ) 0 === K && (m += '[b][u]Resonator[/u][/b]\n'), K == O.length ? ((m += '\n'), (m += '\n'), (m += '[u]Reso TotalScore:[/u]\n'), (m += '[b]' + y + '[/b]\n')) : ((m += 'Level: ' + O[ K ][2] + ' Score: ' + O[ K ][3] + ' Coords: [coords]' + O[ K ][6] + '[/coords]\n'), (y += O[ K ][3])); else (m += 'Level: ' + l[J][2] + ' Score: ' + l[J][3] + ' Coords: [coords]' + l[J][6] + '[/coords]\n'), (z += l[ J ][3]); else (m += 'Level: ' + p[E][2] + ' Score: ' + p[E][3] + ' Coords: [coords]' + p[E][6] + '[/coords]\n'), (v += p[E][3]); else (m += 'Level: ' + u[B][2] + ' Score: ' + u[B][3] + ' Coords: [coords]' + u[B][6] + '[/coords]\n'), (C += u[B][3]); else (m += 'Level: ' + k[G][2] + ' Score: ' + k[G][3] + ' Coords: [coords]' + k[G][6] + '[/coords]\n'), (t += k[G][3]); else (m += 'Level: ' + q[F][2] + ' Score: ' + q[F][3] + ' Coords: [coords]' + q[F][6] + '[/coords]\n'), (w += q[F][3]); else (m += 'Level: ' + n[r][2] + ' Score: ' + n[r][3] + ' Coords: [coords]' + n[r][6] + '[/coords]\n'), (D += n[r][3]); } if (A == x.length) if (2999 >= m.length) ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand( 'CreateForumPost', { forumID: c, threadID: f, postMessage: m }, phe.cnc.Util.createEventDelegate( ClientLib.Net.CommandResult, this, b ), !0 ), h('All Pois inserted to Forum'); else for (A in ((n = m.split('[hr]\n')), n)) ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand( 'CreateForumPost', { forumID: c, threadID: f, postMessage: n[A] }, phe.cnc.Util.createEventDelegate( ClientLib.Net.CommandResult, this, b ), !0 ), h('All Pois inserted to Forum'); }, SortWhoPois: function(c, f) { function b(b, c) { !0 === c && 0 === d ? (g.push('Post "Who is at POI X" to Forum\n'), d++) : !0 === c && (0 === R ? R++ : 1 === R ? (g.close(), h('do something postInfoWho')) : 1 < R && h('postInfoWho do is was schiaf glafn ' + R)); !0 !== c && g.push('ERROR: Post "Who is at POI X" to Forum\n' + c + '\n'); } var d = 0; h('Try to insert a post to "Who is at POI X"'); var g = CncEcomain.getInstance().getWindow(); g.push('Try to insert a post to "Who is at POI X"\n'); for ( var n = [], q = [], k = [], u = [], p = [], l = [], r = [], m = '', A = 0, D = 0, w = 0, t = 0, C = 0, v = 0, z = 0, y = 0; y < x.length; y++ ) { for ( var B = x[y][0], F = x[y][1], G = x[y][2], H = x[y][3], N = x[y][4], J = x[y][5], K = x[y][6], L = x[y][7], M = 0; M < E.length; M++ ) { var I = E[M][5], P = E[M][6]; x[y][0] == E[M][0] && (2 == L && ('undefined' === typeof n[A] && (n[A] = []), n[A].push([B, F, G, H, N, J, K, L, I, P])), 3 == L && ('undefined' === typeof q[D] && (q[D] = []), q[D].push([B, F, G, H, N, J, K, L, I, P])), 4 == L && ('undefined' === typeof k[w] && (k[w] = []), k[w].push([B, F, G, H, N, J, K, L, I, P])), 5 == L && ('undefined' === typeof u[t] && (u[t] = []), u[t].push([B, F, G, H, N, J, K, L, I, P])), 6 == L && ('undefined' === typeof p[C] ? ((p[C] = []), p[C].push([B, F, G, H, N, J, K, L, I, P]), C++) : p[C].push([B, F, G, H, N, J, K, L, I, P])), 7 == L && ('undefined' === typeof l[v] && (l[v] = []), l[v].push([B, F, G, H, N, J, K, L, I, P])), 8 == L && ('undefined' === typeof r[z] && (r[z] = []), r[z].push([B, F, G, H, N, J, K, L, I, P]))); } 'undefined' !== typeof n[A] && A++; 'undefined' !== typeof q[D] && D++; 'undefined' !== typeof k[w] && w++; 'undefined' !== typeof u[t] && t++; 'undefined' !== typeof p[C] && C++; 'undefined' !== typeof l[v] && v++; 'undefined' !== typeof r[z] && z++; } if (y == x.length) { for (A = 0; A < n.length; A++) for ( 0 === A && (m += '[b][u]Tiberium[/u][/b]\n'), D = 0; D < n[A].length; D++ ) 0 === D && (m += 'Level: ' + n[A][D][2] + ' Score: ' + n[A][D][3] + ' Coords [coords]' + n[A][D][6] + '[/coords]\n'), (m += 'Player: [player]' + n[A][D][9] + '[/player] base: ' + n[A][D][8] + '\n'), D + 1 == n[A].length && (m += '\n'); for (D = 0; D < q.length; D++) for ( 0 === D && (m += '[hr]\n[b][u]Crystal[/u][/b]\n'), w = 0; w < q[D].length; w++ ) 0 === w && (m += 'Level: ' + q[D][w][2] + ' Score: ' + q[D][w][3] + ' Coords [coords]' + q[D][w][6] + '[/coords]\n'), (m += 'Player: [player]' + q[D][w][9] + '[/player] base: ' + q[D][w][8] + '\n'), w + 1 == q[D].length && (m += '\n'); for (w = 0; w < k.length; w++) for ( 0 === w && (m += '[hr]\n[b][u]Reactor[/u][/b]\n'), t = 0; t < k[w].length; t++ ) 0 === t && (m += 'Level: ' + k[w][t][2] + ' Score: ' + k[w][t][3] + ' Coords [coords]' + k[w][t][6] + '[/coords]\n'), (m += 'Player: [player]' + k[w][t][9] + '[/player] base: ' + k[w][t][8] + '\n'), t + 1 == k[w].length && (m += '\n'); for (t = 0; t < u.length; t++) for ( 0 === t && (m += '[hr]\n[b][u]Tungsten[/u][/b]\n'), C = 0; C < u[t].length; C++ ) 0 === C && (m += 'Level: ' + u[t][C][2] + ' Score: ' + u[t][C][3] + ' Coords [coords]' + u[t][C][6] + '[/coords]\n'), (m += 'Player: [player]' + u[t][C][9] + '[/player] base: ' + u[t][C][8] + '\n'), C + 1 == u[t].length && (m += '\n'); for (C = 0; C < p.length; C++) for ( 0 === C && (m += '[hr]\n[b][u]Uranium[/u][/b]\n'), v = 0; v < p[C].length; v++ ) 0 === v && (m += 'Level: ' + p[C][v][2] + ' Score: ' + p[C][v][3] + ' Coords [coords]' + p[C][v][6] + '[/coords]\n'), (m += 'Player: [player]' + p[C][v][9] + '[/player] base: ' + p[C][v][8] + '\n'), v + 1 == p[C].length && (m += '\n'); for (v = 0; v < l.length; v++) for ( 0 === v && (m += '[hr]\n[b][u]Aircraft[/u][/b]\n'), z = 0; z < l[v].length; z++ ) 0 === z && (m += 'Level: ' + l[v][z][2] + ' Score: ' + l[v][z][3] + ' Coords [coords]' + l[v][z][6] + '[/coords]\n'), (m += 'Player: [player]' + l[v][z][9] + '[/player] base: ' + l[v][z][8] + '\n'), z + 1 == l[v].length && (m += '\n'); for (z = 0; z < r.length; z++) for ( 0 === z && (m += '[hr]\n[b][u]Resonator[/u][/b]\n'), y = 0; y < r[z].length; y++ ) 0 === y && (m += 'Level: ' + r[z][y][2] + ' Score: ' + r[z][y][3] + ' Coords [coords]' + r[z][y][6] + '[/coords]\n'), (m += 'Player: [player]' + r[z][y][9] + '[/player] base: ' + r[z][y][8] + '\n'), y + 1 == r[z].length && (m += '\n'); if ( A == n.length && D == q.length && w == k.length && t == u.length && C == p.length && v == l.length && z == r.length ) if (((n = m.length), console.log(n), 2999 >= n)) ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand( 'CreateForumPost', { forumID: c, threadID: f, postMessage: m }, phe.cnc.Util.createEventDelegate( ClientLib.Net.CommandResult, this, b ), !0 ) && h('who Pois inserted to Forum'); else { var m = m.split('[hr]\n'), Q; for (Q in m) ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand( 'CreateForumPost', { forumID: c, threadID: f, postMessage: m[Q] }, phe.cnc.Util.createEventDelegate( ClientLib.Net.CommandResult, this, b ), !0 ), h('who Pois inserted to Forum'); } else console.log( 'tib ' + A + ' ' + n.length + ' cris ' + D + ' ' + q.length + ' reaktor ' + w + ' ' + k.length + ' tung ' + t + ' ' + u.length + ' uran ' + C + ' ' + p.length + ' luft ' + v + ' ' + l.length + ' reso ' + z + ' ' + r.length ); } }, PoiForum: function(c, f) { function b(b, c) { !0 === b && '0' == c && ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand( 'GetForumThreads', { forumId: f, skip: 0, take: 10 }, phe.cnc.Util.createEventDelegate( ClientLib.Net.CommandResult, this, d ), !0 ); } function d(c, d) { console.log(d); for (var k in d) { var h = d[k].i; 'List of Alliance Poi' == d[k].t && 0 == n && (CncEcomain.getInstance().SortAlliancePois(f, h), (n = 1)); 'Who is at POI X' == d[k].t && 0 == q && (CncEcomain.getInstance().SortWhoPois(f, h), (q = 1)); } 0 == n ? (g.push('Try to create Thread "List of Alliance Poi"\n'), ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand( 'CreateForumThread', { forumID: f, threadTitle: 'List of Alliance Poi', firstPostMessage: '.', subscribe: !0, }, phe.cnc.Util.createEventDelegate( ClientLib.Net.CommandResult, this, b ), !0 )) : 0 == q && (g.push('Try to create Thread2 "Who is at POI X"\n'), ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand( 'CreateForumThread', { forumID: f, threadTitle: 'Who is at POI X', firstPostMessage: '.', subscribe: !0, }, phe.cnc.Util.createEventDelegate( ClientLib.Net.CommandResult, this, b ), !0 )); } ClientLib.Data.MainData.GetInstance() .get_Forum() .get_Forums(); var g = this.getWindow(), n = 0, q = 0; ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand( 'GetForumThreads', { forumId: f, skip: 0, take: 10 }, phe.cnc.Util.createEventDelegate( ClientLib.Net.CommandResult, this, d ), !0 ); }, CreatePoiForum: function(c, f) { if ( !0 === ClientLib.Data.MainData.GetInstance() .get_Alliance() .get_CanCreateForum() ) { var b = function() { n.push('Try to create Thread "List of Alliance Poi"\n'); var b = CncEcomain.getInstance().getForumId(c), b = '{"session":"' + k + '", "forumID":' + b + ',"threadTitle":"List of Alliance Poi","subscribe":true,"firstPostMessage":"."}'; l.onload = function() { '0' == l.responseText ? (l.abort(), h('Thread erstellt!!!'), n.push( 'Thread "List of Alliance Poi" created!\n' ), window.setTimeout(d, 1e3)) : h('ERROR: thread erstellen!'); }; l.open( 'POST', '/' + q + '/Presentation/Service.svc/ajaxEndpoint/CreateForumThread' ); l.setRequestHeader('Content-Type', 'application/json'); l.send(b); }, d = function() { n.push('Try to create Thread2 "Who is at POI X"\n'); var b = CncEcomain.getInstance().getForumId(c), b = '{"session":"' + k + '", "forumID":' + b + ',"threadTitle":"Who is at POI X","subscribe":true,"firstPostMessage":"."}'; l.onload = function() { '0' == l.responseText ? (l.abort(), h('Thread2 erstellt!!!'), n.push('Thread "Who is at POI X" created!\n'), window.setTimeout(g, 1e3)) : h('ERROR: Thread2 erstellen!'); }; l.open( 'POST', '/' + q + '/Presentation/Service.svc/ajaxEndpoint/CreateForumThread' ); l.setRequestHeader('Content-Type', 'application/json'); l.send(b); }, g = function() { var b = CncEcomain.getInstance().getForumId(c); CncEcomain.getInstance().PoiForum(c, b); }; h('CreatePoiForum'); var n = this.getWindow(); n.push('Try to create PoiForum\n'); var q = ClientLib.Data.MainData.GetInstance() .get_Server() .get_WorldId(), k = ClientLib.Net.CommunicationManager.GetInstance().get_InstanceId(), l = new qx.bom.request.Xhr(); l.onload = function() { '0' == l.responseText ? (l.abort(), h('forum erstellt!!!'), n.push('created PoiForum\n'), window.setTimeout(b, 1e3)) : h('ERROR: forum erstellt!'); }; var p = '{"session":"' + k + '", "sharedAlliance":null,"Title":"CncEco PoiInfo","Description":"List of AlliancePois"}'; l.open( 'POST', '/' + q + '/Presentation/Service.svc/ajaxEndpoint/CreateForum' ); l.setRequestHeader('Content-Type', 'application/json'); l.send(p); } else n.push('no rights to create PoiForum\n'); }, getWindow: function() { null === this.poiwindow && ((this.poiwindow = new CncEcoreport.window()), this.poiwindow.moveTo( window.innerWidth - 150 - this.poiwindow.getWidth() - 200, 40 )); return this.poiwindow; }, getPoiWindow: function() { null === this.poiInfoWindow && ((this.poiInfowindow = new CncEcoreport.window()), this.poiInfoWindow.center()); return this.poiwindow; }, _Allisupport: function() { for ( var c = ClientLib.Data.MainData.GetInstance() .get_AllianceSupportState() .get_Bases().d, f, b = Object.keys(c), d = b.length, g = {}, n = 0, q = 0, k = d; d--; ) (f = c[b[d]]), g.hasOwnProperty(f.get_Type()) || (g[f.get_Type()] = 0), g[f.get_Type()]++, 30 <= f.get_Level() && q++, (n += f.get_Level()); n /= k; c = ClientLib.Data.MainData.GetInstance() .get_Alliance() .get_MemberData().d; g = 0; b = Object.keys(c); for (d = b.length; d--; ) (f = c[b[d]]), (g += f.Bases); b = 'Bases: ' + g + ' SupCount: ' + k + '(' + ((k / g) * 100).toFixed(0) + '%) \u00d8: ' + n.toFixed(2) + ' 30+: ' + q + '(' + ((q / g) * 100).toFixed(0) + '%)'; CncEcomain.getInstance() .getWindow() .push(b); }, }, }); qx.Class.define('CncEcoPlayerinfo', { type: 'singleton', extend: qx.core.Object, members: { windowinterval: null, windowbevoreunload: null, get_info: function() { try { var c = ClientLib.Data.MainData.GetInstance(); B = c.get_Player(); B.get_Name(); B.get_AccountId(); T = c.get_Alliance(); c.get_Server().get_WorldId(); return !0; } catch (f) { (c = { func: 'get_info', class: 'CncEco5main' }), (c.error = f), h(f), beta && H(f, c); } }, initialize: function() { try { return ( h('CncEcoPlayerinfo load'), h('CncEcoPlayerinfo load'), h('CncEcoPlayerinfo load'), h('CncEcoPlayerinfo load'), this.get_info() && ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand( 'GetPublicPlayerInfo', { id: playerId }, phe.cnc.Util.createEventDelegate( ClientLib.Net.CommandResult, this, this.Playerinfo ), null ), (this.windowinterval = window.setInterval(function() { CncEcoPlayerinfo.getInstance().interval(); }, 18e5)), (this.windowbevoreunload = window.addEventListener( 'beforeunload', function() { CncEcoPlayerinfo.getInstance().interval(); } )), !0 ); } catch (f) { var c = { func: 'ini', class: 'CncEcoPlayerinfo' }; c.error = f; h(f); beta && H(f, c); } }, interval: function() { try { if (Main.get_info()) return ( ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand( 'GetPublicPlayerInfo', { id: playerId }, phe.cnc.Util.createEventDelegate( ClientLib.Net.CommandResult, this, this.Playerinfo ), null ), !0 ); } catch (f) { var c = { func: 'interval', class: 'CncEcoPlayerinfo' }; c.error = f; h(f); beta && H(f, c); } }, Playerinfo: function(c, f) { try { var b = { server: {} }; b.server.serverid = worldId; b.server.serverName = MainData.get_Server() .get_Name() .trim(); if (0 < f.a) { b.alli = {}; b.alli.alliId = f.a; b.alli.alliName = f.an; b.alli.cic = T.get_FirstLeaders().l; b.alli.sc = T.get_SecondLeaders().l; b.alli.roleinfo = T.get_Roles().d; var d = MainData.get_Alliance().get_MemberData(); b.alli.member = d; } b.player = {}; b.player.name = playerName; b.player.id = playerId; b.player.accountid = accountId; b.player.creationDate = B.get_CreationDate(); b.player.fraction = B.get_Faction(); b.player.bases = {}; b.player.pve = f.bd; b.player.pvp = f.bd - f.bde; b.player.points = f.p; b.player.rank = f.r; b.player.hascode = f.hchc; b.player.maxcp = B.GetCommandPointMaxStorage(); b.player.actcp = Math.round(B.GetCommandPointCount()); b.player.funds = MainData.get_Inventory().get_PlayerFunds(); b.player.schirme = Math.round(B.GetSupplyPointCount()); b.player.RPoints = B.get_ResearchPoints(); b.player.CreditsCount = Math.round(B.GetCreditsCount()); var g = MainData.get_Player(), n = g.get_Faction(), q = ClientLib.Base.Tech.GetTechIdFromTechNameAndFaction( ClientLib.Base.ETechName.Research_BaseFound, n ), k = g .get_PlayerResearch() .GetResearchItemFomMdbId(q) .get_NextLevelInfo_Obj(), d = [], u; for (u in k.rr) 0 < k.rr[u].t && (d[k.rr[u].t] = k.rr[u].c); var p = d[ClientLib.Base.EResourceType.Gold], r = d[ClientLib.Base.EResourceType.ResearchPoints], x = g.get_Credits(), m = (x.Delta + x.ExtraBonusDelta) * ClientLib.Data.MainData.GetInstance() .get_Time() .get_StepsPerHour(), A = (p - B.GetCreditsCount()) / m; b.player.timeTOmcv = Math.round(3600 * A); b.player.rpNeeded = r; var D = MainData.get_Cities(), w = f.c.length; b.player.basecount = w; for (u = 0; u < w; u++) { var t = D.GetCity(f.c[u].i), g = {}; g.Id = f.c[u].i; g.Na = t.get_Name(); g.Po = f.c[u].p; g.Lvl = parseFloat(t.get_LvlBase().toFixed(2)); g.Off = parseFloat(t.get_LvlOffense().toFixed(2)); g.Def = parseFloat(t.get_LvlDefense().toFixed(2)); g.PosX = f.c[u].x; g.PosY = f.c[u].y; var C = t.get_CityUnitsData(); g.repInf = 0 < g.Off ? C.GetRepairTimeFromEUnitGroup( ClientLib.Data.EUnitGroup.Infantry, !1 ) : 0; g.repVeh = 0 < g.Off ? C.GetRepairTimeFromEUnitGroup( ClientLib.Data.EUnitGroup.Vehicle, !1 ) : 0; g.repAir = 0 < g.Off ? C.GetRepairTimeFromEUnitGroup( ClientLib.Data.EUnitGroup.Aircraft, !1 ) : 0; g.maxRep = 0 < g.Off ? t.GetResourceMaxStorage( ClientLib.Base.EResourceType.RepairChargeInf ) : 0; g.availRep = 0 < g.Off ? ClientLib.Base.Resource.GetResourceCount( t .get_RepairOffenseResources() .get_RepairChargeOffense() ) : 0; var v = t.get_SupportWeapon(); g.supWp = null !== v ? v.n : ''; v = t.get_SupportData(); g.supWplvl = null !== v ? v.get_Level() : 0; var z = t.get_CityBuildingsData(); v = z.GetUniqueBuildingByTechName( ClientLib.Base.ETechName.Construction_Yard ); g.CY = null !== v ? v.get_CurrentLevel() : 0; v = z.GetUniqueBuildingByTechName( ClientLib.Base.ETechName.Defense_Facility ); g.DF = null !== v ? v.get_CurrentLevel() : 0; v = z.GetUniqueBuildingByTechName( ClientLib.Base.ETechName.Defense_HQ ); g.DHQ = null !== v ? v.get_CurrentLevel() : 0; g.PP = Math.round( t.GetResourceGrowPerHour( ClientLib.Base.EResourceType.Power, !1, !1 ) ); g.PBP = Math.round( t.GetResourceBonusGrowPerHour( ClientLib.Base.EResourceType.Power ) ); g.PAB = ClientLib.Data.MainData.GetInstance() .get_Alliance() .GetPOIBonusFromResourceType( ClientLib.Base.EResourceType.Power ); g.CP = Math.round( ClientLib.Base.Resource.GetResourceGrowPerHour( t.get_CityCreditsProduction(), !1 ) ); g.CBP = Math.round( ClientLib.Base.Resource.GetResourceBonusGrowPerHour( t.get_CityCreditsProduction(), !1 ) ); g.Tall = Math.round( t.GetResourceGrowPerHour( ClientLib.Base.EResourceType.Tiberium, !1, !1 ) + t.GetResourceBonusGrowPerHour( ClientLib.Base.EResourceType.Tiberium ) + ClientLib.Data.MainData.GetInstance() .get_Alliance() .GetPOIBonusFromResourceType( ClientLib.Base.EResourceType.Tiberium ) ); g.Call = Math.round( t.GetResourceGrowPerHour( ClientLib.Base.EResourceType.Crystal, !1, !1 ) + t.GetResourceBonusGrowPerHour( ClientLib.Base.EResourceType.Crystal ) + ClientLib.Data.MainData.GetInstance() .get_Alliance() .GetPOIBonusFromResourceType( ClientLib.Base.EResourceType.Crystal ) ); g.PPall = g.PP + g.PBP + g.PAB; g.CPall = g.CP + g.CBP; b.player.bases[u] = g; b.player.bases[u].cncopt = V(g.Id, u); } b.player.mainoff = 0; b.player.maindef = 0; b.player.mainavailrep = 0; b.player.mainrepinf = 0; b.player.mainrepveh = 0; b.player.mainrepair = 0; b.player.supschnitt = 0; b.player.defschnitt = 0; b.player.tibgesamt = 0; b.player.crigesamt = 0; b.player.cashgesamt = 0; b.player.powergesamt = 0; b.player.mainpower = 0; for (var y in b.player.bases) delete b.player.bases[y].PP, delete b.player.bases[y].PBP, delete b.player.bases[y].PAB, delete b.player.bases[y].CP, delete b.player.bases[y].CBP, b.player.bases[y].Off > b.player.mainoff && ((b.player.mainoff = b.player.bases[y].Off), (b.player.mainpower = b.player.bases[y].PPall), (b.player.maindef = b.player.bases[y].Def), (b.player.mainavailrep = b.player.bases[y].availRep), (b.player.mainrepinf = b.player.bases[y].repInf), (b.player.mainrepveh = b.player.bases[y].repVeh), (b.player.mainrepair = b.player.bases[y].repAir)), (b.player.supschnitt += b.player.bases[y].supWplvl), (b.player.defschnitt += b.player.bases[y].Def), (b.player.tibgesamt += b.player.bases[y].Tall), (b.player.crigesamt += b.player.bases[y].Call), (b.player.cashgesamt += b.player.bases[y].CPall), (b.player.powergesamt += b.player.bases[y].PPall); b.player.supschnitt /= b.player.basecount; b.player.defschnitt /= b.player.basecount; b.player.supschnitt = b.player.supschnitt.toFixed(2); b.player.defschnitt = b.player.defschnitt.toFixed(2); var E = b.player.bases; delete b.player.bases; b.player.bases = E; if (null !== l.xhr._xhr) (xhr = l.xhr), xhr.send( 'https://www.member-stats.de/playerinfo.php?i=playerinfos', 'POST', null, b, this.callback ); else { var F = { func: 'playerinfo', class: 'CncEcoPlayerinfo', error: 'CncEco.xhr.req !== null', }; h('CncEco.xhr.req !== null'); beta && H('CncEco.xhr.req !== null', F); } } catch (G) { (F = { func: 'playerinfo', class: 'CncEcoPlayerinfo' }), (F.error = G), h(G), beta && H(G, F); } }, callback: function(c) { try { !1 !== JSON.isjson(c) && ('parse' === JSON.isjson(c) ? JSON.parse(c) : 'stringify' === JSON.isjson(c) && JSON.stringify(c)); } catch (f) { (c = { func: 'callback', class: 'CncEcoPlayerinfo' }), (c.error = f), h(f), beta && H(f, c); } }, }, }); qx.Class.define('CncEcoreport.window', { extend: qx.ui.window.Window, construct: function() { qx.ui.window.Window.call(this); this.set({ caption: 'CncEco Info', icon: 'webfrontend/ui/icons/icn_show_combat_active.png', layout: new qx.ui.layout.VBox(4), width: 300, height: 50, contentPaddingTop: 0, contentPaddingBottom: 6, contentPaddingRight: 6, contentPaddingLeft: 6, showMaximize: !1, showMinimize: !1, allowMaximize: !1, allowMinimize: !1, resizable: !0, visibility: 'excluded', textColor: '#bfbfbf', }); this.getChildControl('icon').set({ scale: !0, width: 18, height: 17, alignY: 'middle', marginLeft: 8, }); this.add( (this.logContainer = new qx.ui.container.Composite( new qx.ui.layout.VBox() )) ); this.add(new qx.ui.core.Spacer(), { flex: 1 }); this.addListener('close', function() { this.onClose(); }); }, members: { logContainer: null, onClose: function() { this.removeAll(); this.add( (this.logContainer = new qx.ui.container.Composite( new qx.ui.layout.VBox() )) ); }, push: function(c, f) { this.isActive() || this.open(); this.logContainer.add(new qx.ui.basic.Label(c.toString())); f && this.logContainer.add(f); }, delall: function() { this.removeAll(); this.add( (this.logContainer = new qx.ui.container.Composite( new qx.ui.layout.VBox() )) ); }, initialize: function() { try { h('CncEcoreport.window loadet'); } catch (c) { h(c); } }, }, }); var r = { _g: function(c, f, b, d) { c = c.toString().replace(/\s/gim, ''); f = c.match(f); var g; for (g = 1; g < d + 1; g++) null !== f && 6 === f[g].length ? console.debug(b, g, f[g]) : null !== f && 0 < f[g].length ? console.warn(b, g, f[g]) : (console.error('Error - ', b, g, 'not found'), console.warn(b, c)); return f; }, patch: function() { if (!d._patched) { var c = ClientLib.Data.WorldSector.WorldObjectCity.prototype, c = ClientLib.Data.WorldSector.WorldObjectNPCBase.prototype; re = /100\){0,1};this\.(.{6})=Math.floor.*d\+=f;this\.(.{6})=\(/; var f = r._g( c.$ctor, re, 'ClientLib.Data.WorldSector.WorldObjectNPCBase', 2 ); null !== f && 6 === f[1].length ? (c.getLevel = function() { return this[f[1]]; }) : console.error( 'Error - ClientLib.Data.WorldSector.WorldObjectNPCBase.Level undefined' ); null !== f && 6 === f[2].length ? (c.getID = function() { return this[f[2]]; }) : console.error( 'Error - ClientLib.Data.WorldSector.WorldObjectNPCBase.ID undefined' ); c = ClientLib.Data.WorldSector.WorldObjectNPCCamp.prototype; re = /100\){0,1};this\.(.{6})=Math.floor.*this\.(.{6})=\(*g\>\>(22|0x16)\)*\&.*=-1;\}this\.(.{6})=\(/; var b = r._g( c.$ctor, re, 'ClientLib.Data.WorldSector.WorldObjectNPCCamp', 4 ); null !== b && 6 === b[1].length ? (c.getLevel = function() { return this[b[1]]; }) : console.error( 'Error - ClientLib.Data.WorldSector.WorldObjectNPCCamp.Level undefined' ); null !== b && 6 === b[2].length ? (c.getCampType = function() { return this[b[2]]; }) : console.error( 'Error - ClientLib.Data.WorldSector.WorldObjectNPCCamp.CampType undefined' ); null !== b && 6 === b[4].length ? (c.getID = function() { return this[b[4]]; }) : console.error( 'Error - ClientLib.Data.WorldSector.WorldObjectNPCCamp.ID undefined' ); d._patched = !0; } }, }, d = null; qx.Class.define('CncEcoScanner', { type: 'singleton', extend: qx.core.Object, members: { initialize: function() { try { h('Scanner loadet\n'), CncEcomain.getInstance().AddMainMenu( 'scan layouts', function() { CncEcoScanner.getInstance().scan(); }, 'Alt+s' ), (d = CncEcoScanner.getInstance()), (d.win = CncEcomain.getInstance().getWindow()), (d.storage = CncEcostorage.getInstance()), (d.xhr = l.xhr), (d.winOpen = CncEcomain.getInstance()), d.startup(); } catch (c) { h(c); } }, _patched: !1, _bases: {}, _selectionBases: {}, _scanned: [], _toScan: [], _scanning: !1, failCount: 0, wincounter: 0, basecounter: 0, button: function() { if (!0 === d._abort) { var c = new qx.ui.form.Button('resume'); c.addListener( 'execute', function() { d.resume(); }, this ); } else (c = new qx.ui.form.Button('stop')), c.addListener( 'execute', function(c) { d.abort(); var b = ClientLib.Data.MainData.GetInstance(); c = b.get_Player().get_Name(); var f = b.get_Server().get_WorldId(), b = b.get_Alliance().get_Id(); d.xhr.send( 'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' + c + '&w=' + f + '&a=' + b, 'POST', null, d._bases, h ); }, this ); return c; }, scan: function(c) { h('start scan'); if (d._scanning) h('BaseScanner._scanning'); else if ( (null == c && (d.win.isActive() && (d.win.delall(), d.win.close()), d.win.open()), !0 === d._abort) ) d.resume(); else { d.win.push('start Scanning'); d._bases = {}; d._scanning = !0; d._count = 0; d._done = 0; d.index = -1; d._toScanMap = {}; d._toScan = []; d.basecounter = 0; c = d.storage.get('scan'); Array.isArray(c) || (d.storage.set('scan', '[]'), (c = d.storage.get('scan'))); for (var f = d.storage.get('scan').length; 800 <= f; ) c.shift(), f--, 800 >= f && d.storage.set('scan', c); c = ClientLib.Data.MainData.GetInstance() .get_Cities() .get_AllCities().d; for (var b in c) c.hasOwnProperty(b) && ((f = c[b]), void 0 === f && h('unable to find base: ' + b), d.getNearByBases(f)); d.scanNextBase(); } }, getNearByBases: function(c) { for ( var f, b = c.get_PosX(), l = c.get_PosY(), g = ClientLib.Data.MainData.GetInstance() .get_Server() .get_MaxAttackDistance() - 0.5, n = ClientLib.Data.MainData.GetInstance().get_World(), q = 0, k = l - 11; k <= l + 11; k++ ) for (var h = b - 11; h <= b + 11; h++) { var p = Math.abs(b - h), r = Math.abs(l - k), p = Math.sqrt(p * p + r * r); if ( !( p >= g || void 0 !== d._toScanMap[h + ':' + k] || void 0 !== d._bases[h + ':' + k] || ((r = n.GetObjectFromPosition(h, k)), null === r || (r.Type !== ClientLib.Data.WorldSector.ObjectType.NPCBase && r.Type !== ClientLib.Data.WorldSector.ObjectType .NPCCamp) || ('function' === typeof r.getCampType && r.getCampType() === ClientLib.Data.Reports.ENPCCampType .Destroyed)) ) ) { var x = 0; if (null !== d.storage.get('scan')) if ( ((f = d.storage.get('scan')), !0 === Array.isArray(f)) ) for ( var m = d.storage.get('scan').length, A = 0; A < m; A++ ) r.getID() === f[A] && (x = 1); else d.storage.set('scan', '[]'); else d.storage.set('scan', '[]'); 0 < x || ((f = d.storage.get('scan')), f.push(r.getID()), CncEcostorage.getInstance().set('scan', f), (m = ClientLib.Data.MainData.GetInstance()), (f = m.get_Player().get_Name()), (x = m.get_Server().get_WorldId()), (m = m.get_Alliance().get_Id()), (p = { x: h, y: k, level: r.getLevel(), id: r.getID(), distance: p, selectedBaseID: c.get_Id(), alliance: m, world: x, player: f, failCount: 0, }), d._toScan.push(p), (d._toScanMap[h + ':' + k] = p), q++); } } }, abort: function() { d._scanning = !1; d._abort = !0; d.win.delall(); d.win.push('stop scan'); d.win.push((' ' + d.index).slice(-3) + '/' + d._toScan.length); d.win.push('', d.button()); }, resume: function() { d._scanning = !0; d._abort = !1; d.win.delall(); d.win.push('resume scan'); d.win.push((' ' + d.index).slice(-3) + '/' + d._toScan.length); d.win.push('', d.button()); d.scanNextBase(); }, done: function() { d._done++; var c = ClientLib.Data.MainData.GetInstance(); var f = c.get_Player().get_Name(), b = c.get_Server().get_WorldId(), l = c.get_Alliance().get_Id(); !1 === d._scanning && d._count === d._done && !1 === d._abort ? (d.win.push(''), 0 < d._count ? (d.win.push('Done! (' + d._count + ')'), d.win.push(''), d.xhr.send( 'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' + f + '&w=' + b + '&a=' + l, 'POST', null, d._bases, h ), d.winOpen.winOpen('layout', 'layout'), 5 > Object.keys(d._bases).length && ((c = CncEcoScanner.Layout.window.getInstance()), !0 !== c.active && ((c.active = !0), c.openWindow('CncEco Scan result', null, 1)), c.FO(d._bases), d.xhr.send( 'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' + f + '&w=' + b + '&a=' + l, 'POST', null, d._bases, h ), (d._bases = {}))) : (d.win.push('Done! 0 new layouts to scan'), d.win.push(''))) : !1 === d._scanning && d._count + 1 === d._done && !1 === d._abort ? (d.win.delall(), d.win.push(''), 0 < d._count ? (d.win.push('Done! (' + d._count + ')'), d.win.push(''), d.xhr.send( 'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' + f + '&w=' + b + '&a=' + l, 'POST', null, d._bases, h ), d.winOpen.winOpen('layout', 'layout'), 5 > Object.keys(d._bases).length && ((c = CncEcoScanner.Layout.window.getInstance()), !0 !== c.active && ((c.active = !0), c.openWindow('CncEco Scan result', null, 1)), c.FO(d._bases), d.xhr.send( 'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' + f + '&w=' + b + '&a=' + l, 'POST', null, d._bases, h ), (d._bases = {}))) : (d.win.push('Done! 0 new layouts to scan'), d.win.push(''))) : !1 === d._scanning && !1 === d._abort && d.win.push('Scan'); }, getBaseLayout: function(c) { var f = ClientLib.Data.MainData.GetInstance(), b = f.get_Player().get_Name(), l = f.get_Server().get_WorldId(), f = f.get_Alliance().get_Id(); if (!d._abort) if (void 0 === c) (d._abort = !1), (d._scanning = !1), !1 === d._abort && d.done(), h('[BaseScanner] base undefined'); else { d._lastBaseID !== c.selectedBaseID && d.setCurrentBase(c.selectedBaseID); ClientLib.Data.MainData.GetInstance() .get_Cities() .set_CurrentCityId(c.id); var g = ClientLib.Data.MainData.GetInstance() .get_Cities() .GetCity(c.id); ClientLib.Net.CommunicationManager.GetInstance().UserAction(); if (g.get_IsGhostMode()) return d.scanNextBase(); if (0 === g.GetBuildingsConditionInPercent()) return ( c.failCount++, 30 === c.failCount ? (h('[BaseScanner] max_fails'), d.scanNextBase()) : setTimeout(function() { d.getBaseLayout(c); }, 99) ); var n = g.get_Name(); c.layout = d.getLayout(g); c.name = n; d._bases[c.x + ':' + c.y] = c; d.basecounter++; g = CncEcoScanner.Layout.window.getInstance(); !0 !== g.active && ((g.active = !0), g.openWindow('CncEco Scan result', null, 1)); 4 < d.basecounter && ((d.basecounter = 0), g.FO(d._bases), d.xhr.send( 'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' + b + '&w=' + l + '&a=' + f, 'POST', null, d._bases, h ), (d._bases = {})); ClientLib.Data.MainData.GetInstance() .get_Server() .get_WorldId(); ClientLib.Data.MainData.GetInstance() .get_Player() .get_Name(); d._count++; d.printScanResults(c); d.done(); d.scanNextBase(); } }, scanNextBase: function() { !0 !== d._abort && (void 0 === d.index ? (d.index = 0) : d.index++, d.getBaseLayout(d._toScan[d.index])); }, isScanning: function() { return !0 === d._scanning; }, printScanResults: function(c) { d.win.delall(); if (!1 === d._abort) switch (d.wincounter) { case 0: d.wincounter++; d.win.push('Scanning'); break; case 1: d.wincounter++; d.win.push('Scanning.'); break; case 2: d.wincounter++; d.win.push('Scanning..'); break; case 3: d.wincounter = 0; d.win.push('Scanning...'); break; default: d.win.push('Scanning'); } else d.win.push('Scanning'); d.win.push((' ' + d.index).slice(-3) + '/' + d._toScan.length); d.win.push('', d.button()); }, getLayout: function(c) { for (var f = [], b = 0; 16 > b; b++) for (var d = 0; 9 > d; d++) switch (c.GetResourceType(d, b)) { case 0: f.push('.'); break; case 1: f.push('c'); break; case 2: f.push('t'); break; case 4: f.push('j'); break; case 5: f.push('h'); break; case 6: f.push('l'); break; case 7: f.push('k'); } return f.join(''); }, setCurrentBase: function(c) { var f = ClientLib.Data.MainData.GetInstance() .get_Cities() .get_AllCities().d[c]; ClientLib.Vis.VisMain.GetInstance().CenterGridPosition( f.get_PosX(), f.get_PosY() ); ClientLib.Vis.VisMain.GetInstance().Update(); ClientLib.Vis.VisMain.GetInstance().ViewUpdate(); d._lastBaseID = c; }, startup: function() { r.patch(); phe.cnc.Util.attachNetEvent( ClientLib.Vis.VisMain.GetInstance(), 'ViewModeChange', ClientLib.Vis.SelectionChange, d, d.onSelectionChange ); }, destroy: function() { phe.cnc.Util.detachNetEvent( ClientLib.Vis.VisMain.GetInstance(), 'ViewModeChange', ClientLib.Vis.SelectionChange, d, d.onSelectionChange ); }, onSelectionChange: function() { try { if (!d.isScanning() && !0 !== d._abort) { d.failCount = 0; d._bases = {}; d._count = 0; d._done = 0; d.index = -1; d._toScanMap = {}; d._toScan = []; void 0 !== d.selectionChange && (clearTimeout(d.selectionChange), (d.selectionChange = void 0)); var c = ClientLib.Vis.VisMain.GetInstance().get_SelectedObject(), c = ClientLib.Data.MainData.GetInstance() .get_Cities() .get_CurrentCity(); if ( null !== c && !0 === ClientLib.Data.MainData.GetInstance() .get_Cities() .get_CurrentCity() .IsNPC() ) { for (id in d._scanned) if (d._scanned[id] == c.get_Id()) { console.log('already scanned'); return; } d._scanned.push(c.get_Id()); d.scanCurrentBase(); } } } catch (f) { console.log(f); } }, scanCurrentBase: function() { var c = ClientLib.Data.MainData.GetInstance().get_Cities(), f = c.get_CurrentCity(), b = c.get_CurrentOwnCity(); d.failCount++; if (!(30 < d.failCount)) { if (null === f) return ( h('base = 0'), (d.selectionChange = setTimeout(d.scanCurrentBase, 100)), d.selectionChange ); void 0 !== d.selectionChange && (clearTimeout(d.selectionChange), (d.selectionChange = void 0)); var c = f.get_PosX(), l = f.get_PosY(); f.get_Id(); if (f.get_IsGhostMode()) d.failCount = 0; else if (0 === f.GetBuildingsConditionInPercent()) d.selectionChange = setTimeout(d.scanCurrentBase, 100); else { d.failCount = 0; var g = ClientLib.Data.MainData.GetInstance(), n = g.get_Player().get_Name(), q = g.get_Server().get_WorldId(), g = g.get_Alliance().get_Id(), k = ClientLib.Base.Util.CalculateDistance( f.get_PosX(), f.get_PosY(), b.get_PosX(), b.get_PosY() ), b = { x: f.get_PosX(), y: f.get_PosY(), level: f.get_BaseLevel(), id: f.get_Id(), distance: k, selectedBaseID: b.get_Id(), alliance: g, world: q, player: n, failCount: 0, }, k = f.get_Name(); b.layout = d.getLayout(f); b.name = k; b.alliance = ClientLib.Data.MainData.GetInstance() .get_Alliance() .get_Id(); d._bases[c + ':' + l] = b; d._selectionBases[c + ':' + l] = b; ClientLib.Data.MainData.GetInstance() .get_Server() .get_WorldId(); ClientLib.Data.MainData.GetInstance() .get_Player() .get_Name(); ClientLib.Data.MainData.GetInstance() .get_Alliance() .get_Id(); d.xhr.send( 'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' + n + '&w=' + q + '&a=' + g, 'POST', null, d._bases, h ); } } }, }, }); qx.Class.define('CncEcostorage', { type: 'singleton', extend: qx.core.Object, members: { get: function(c) { c = localStorage.getItem('CncEco:' + c); return null === c ? c : JSON.parse(c); }, set: function(c, f) { if (null === f || void 0 === f) return l.storage.remove(c); 'string' !== typeof f && (f = JSON.stringify(f)); return localStorage.setItem('CncEco:' + c, f); }, remove: function(c) { return localStorage.removeItem('CncEco:' + c); }, initialize: function() { try { h('CncEcostorage loadet'); } catch (c) { h(c); } }, }, }); qx.Class.define('CncEcoReports', { type: 'singleton', extend: qx.core.Object, statics: { ResourceTypes: {}, }, defer: function(statics) { // var fileManager = ClientLib.File.FileManager.GetInstance(); statics.ResourceTypes[ ClientLib.Base.EResourceType.Tiberium ] = 1; // fileManager.GetPhysicalPath('ui/common/icn_res_tiberium.png'); statics.ResourceTypes[ ClientLib.Base.EResourceType.Crystal ] = 1; // fileManager.GetPhysicalPath('ui/common/icn_res_chrystal.png'); statics.ResourceTypes[ ClientLib.Base.EResourceType.Gold ] = 1; // fileManager.GetPhysicalPath('ui/common/icn_res_dollar.png'); statics.ResourceTypes[ ClientLib.Base.EResourceType.Power ] = 1; // fileManager.GetPhysicalPath('ui/common/icn_res_power.png'); statics.ResourceTypes[ ClientLib.Base.EResourceType.ResearchPoints ] = 1; // fileManager.GetPhysicalPath('ui/common/icn_res_research.png'); // const savedReports = CncEcostorage.getInstance().get('reports') || {} // const date = new Date(); // date.setDate(date.getDate() - 15); // // Object.keys(savedReports).forEach(id => { // console.log(id, savedReports[id], data) // }) // // CncEcostorage.getInstance().set('reports', savedReports) }, members: { reports: null, newReports: [], init: function() { this.destroy() const reports = ClientLib.Data.MainData.GetInstance().get_Reports(); this.reports = reports; console.log('init reports', reports) phe.cnc.Util.attachNetEvent( reports, 'ReportsDelivered', ClientLib.Data.Reports.ReportsDelivered, this, this.onReportsDelivered ); }, destroy: function() { phe.cnc.Util.detachNetEvent( ClientLib.Data.MainData.GetInstance().get_Reports(), 'ReportDelivered', ClientLib.Data.Reports.ReportDelivered, this, this.onReportDelivered ); } , onReportsDelivered: function(reports) { console.log('all reports delivered'); const savedReports = CncEcostorage.getInstance().get('reports') || {} // console.log('savedReports - before', savedReports) this.newReports = []; // reset reports reports.forEach(report => { const id = report.get_Id() if(!savedReports[id]) { savedReports[id] = report.get_Time() this.newReports.push(report) } }) CncEcostorage.getInstance().set('reports', savedReports) // console.log('savedReports', savedReports) console.log('newReports', this.newReports) this.newReports.length && this.onAllReportsLoaded() }, onAllReportsLoaded: function() { console.time('onAllReportsLoaded') // console.log('all loaded reports'); // console.log(this.newReports); if (this.newReports.length > 0) { // this.newReports.forEach(report => { // this.reports.RequestReportData(report); // }); // var attackerBaseIds = []; // var defenderBaseIds = []; var repairTimeCosts = 0; var minCommandPointCosts = 0; var maxCommandPointCosts = 0; // var firstAttack = null; // var lastAttack = 0; var loot = {}; var getTotalLootMethod, getRepairCostsMethod; var reports = []; // off const { CombatReport } = ClientLib.Data.Reports; if ( this.newReports[0].get_PlayerReportType() === ClientLib.Data.Reports.EPlayerReportType.CombatOffense ) { getTotalLootMethod = CombatReport.prototype.GetAttackerTotalResourceReceived; getRepairCostsMethod = CombatReport.prototype.GetAttackerRepairCosts; } // def else { getTotalLootMethod = CombatReport.prototype.GetDefenderTotalResourceCosts; getRepairCostsMethod = CombatReport.prototype.GetDefenderRepairCosts; } // init sever configs for cp costs var server = ClientLib.Data.MainData.GetInstance().get_Server(); var player = ClientLib.Data.MainData.GetInstance().get_Player(); var combatCostMinimum = server.get_CombatCostMinimum(); var combatCostMinimumPvP = server.get_UsesRebalancingI() ? server.get_PvPCombatCostMinimum() : combatCostMinimum; var combatCostPerFieldInside = server.get_CombatCostPerField(); var combatCostPerFieldOutside = server.get_CombatCostPerFieldOutsideTerritory(); // console.log({player, server}) // loop through all reports for (var i = 0; i < this.newReports.length; i++) { var report = this.newReports[i]; // console.log({ report }); var rapport = {}; rapport.id = report.get_Id(); if (!(report instanceof CombatReport)) { continue; } rapport.attackerBaseId = report.get_AttackerBaseId(); rapport.defenderBaseId = report.get_DefenderBaseId(); // if (attackerBaseIds.indexOf(report.get_AttackerBaseId()) === -1) { // attackerBaseIds.push(report.get_AttackerBaseId()); // } // // if (defenderBaseIds.indexOf(report.get_DefenderBaseId()) === -1) { // defenderBaseIds.push(report.get_DefenderBaseId()); // } // add repair time repairTimeCosts += report.GetAttackerMaxRepairTime(); rapport.maxRep = report.GetAttackerMaxRepairTime(); rapport.infRep = report.GetAttackerInfantryRepairCosts(); rapport.vehRep = report.GetAttackerVehicleRepairCosts(); rapport.airRep = report.GetAttackerAirRepairCosts(); var distance = Math.sqrt( Math.pow( report.get_AttackerBaseXCoord() - report.get_DefenderBaseXCoord(), 2 ) + Math.pow( report.get_AttackerBaseYCoord() - report.get_DefenderBaseYCoord(), 2 ) ); rapport.distance = distance; // total distane between coords let cost switch (report.get_Type()) { case ClientLib.Data.Reports.EReportType.Combat: // 1, pvp var isFriendlyTerritory = report.get_AttackerAllianceName() === report.get_DefenderAllianceName(); cost = Math.floor( combatCostMinimumPvP + (isFriendlyTerritory ? combatCostPerFieldInside : combatCostPerFieldOutside) * distance ); // minCommandPointCosts += cost; // maxCommandPointCosts += cost; rapport.def = true; rapport.minCp = cost; rapport.maxCp = cost; break; case ClientLib.Data.Reports.EReportType.NPCRaid: // 2, pvp switch (parseInt(report.get_DefenderBaseName(), 10)) { case ClientLib.Data.Reports.ENPCCampType.Base: // 4 case ClientLib.Data.Reports.ENPCCampType.Fortress: // 6 cost = Math.floor( combatCostMinimum + combatCostPerFieldOutside * distance ); // minCommandPointCosts += cost; // maxCommandPointCosts += cost; rapport.off = true; rapport.minCp = cost; rapport.maxCp = cost; break; default: const minCp = Math.floor( combatCostMinimum + combatCostPerFieldInside * distance ); const maxCp = Math.floor( combatCostMinimum + combatCostPerFieldOutside * distance ); // minCommandPointCosts += minCp; // maxCommandPointCosts += maxCp; rapport.off = true; rapport.minCp = minCp; rapport.maxCp = maxCp; } break; case ClientLib.Data.Reports.EReportType.NPCPlayerCombat: // 5 // No repair time or command point cost for Forgotten attacks break; default: throw 'Unexpected report type (' + report.get_Type() + ')'; } rapport.time = report.get_Time(); /** @discroption: calc the loot with out the rep res costs */ for (var resourceType in CncEcoReports.ResourceTypes) { var resourceCount = getTotalLootMethod.call(report, resourceType) - getRepairCostsMethod.call(report, resourceType); if (resourceCount !== 0) { if (!(resourceType in loot)) { loot[resourceType] = 0; } loot[resourceType] += resourceCount; } } rapport.loot = loot; reports.push(rapport); } // console.log({ // server, // player, // combatCostMinimum, // combatCostMinimumPvP, // combatCostPerFieldInside, // combatCostPerFieldOutside, // // minCommandPointCosts, // maxCommandPointCosts, // // firstAttack, // // lastAttack, // getTotalLootMethod, // getRepairCostsMethod, // // // attackerBaseIds, // id off attacker bases, the player pvp attacker maybe // // defenderBaseIds, // id of defender bases, the bases who got attacked, maybe the player also in pvp // // repairTimeCosts, // total time in s // loot, // // }); // // console.warn('All reports'); fetch('https://cnc-eco.herokuapp.com/api/v1/reports/update', { // fetch('http://localhost:8000/api/v1/reports/update', { method: 'POST', headers: { "content-type": "application/json", }, body: JSON.stringify({ reports, world: server.get_WorldId(), player: player.get_Name(), playerId: player.get_Id(), accountId: player.get_AccountId(), }) }).then(async r => { const data = await r.json() console.log('all reports delivered', reports, data) }).catch(e => console.warn(e)) } console.timeEnd('onAllReportsLoaded') }, initialize: function() { this.init(); try { h('CncEcoReports loaded'); } catch (c) { h(c); } }, }, }); qx.Class.define('CncEcoxhr', { type: 'singleton', extend: qx.core.Object, members: { send: function(c, f) { var b = new qx.bom.request.Xhr()._createNativeXhr(); b.timeout = 3e3; b.onload = function() { 1 == b.responseText ? h('CncEcoxhr Send true!') : 0 == b.responseText ? h('CncEcoxhr is Error :: ' + b.responseText) : 1 !== b.responseText; b.abort(); }; b.ontimeout = function() { h('xhr timeout'); b.abort(); }; b.onloadend = function() { h('xhr timeout'); b.abort(); }; b.open('POST', c, !0); b.setRequestHeader('Method', 'POST'); b.setRequestHeader('Content-Type', 'application/json'); b.send(JSON.stringify(f)); }, initialize: function() { try { h('CncEcoxhr loadet'); } catch (c) { h(c); } }, }, }); l.xhr = { _load: !1, _xhr: null, _timeout: 3e3, start: function() { var c = null; if (window.XMLHttpRequest) c = new XMLHttpRequest(); else if (window.ActiveXObject) try { c = new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch (f) { try { c = new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch (b) { h(b); } } if (null === c) return !1; l.xhr._load = !0; l.xhr._xhr = c; l.xhr._xhr.timeout = l.xhr._timeout; return l.xhr._load; }, send: function(c, f, b, d, g) { try { if (null !== l.xhr._xhr) if (!1 !== l.xhr._load && null !== l.xhr._xhr) { l.xhr._xhr.open(f, c, !0); if (null !== b && 'object' == typeof b) for (var n in b) b[n].hasOwnProperty('name') && b[n].hasOwnProperty('value') && l.xhr._xhr.setRequestHeader(b[n].name, b[n].value); l.xhr._xhr.onload = function() { try { 4 == l.xhr._xhr.readyState && 200 == l.xhr._xhr.status && 'function' == typeof g && g(l.xhr._xhr.responseText); } catch (q) { h(q); } }; null !== d ? ('stringify' == JSON.isjson(d) && !0 === Array.isarray(d)) || (!0 === Object.isobj(d) && 'stringify' == JSON.isjson(d)) ? l.xhr._xhr.send(JSON.stringify(d)) : h(e) : l.xhr._xhr.send(null); } else alert('Ihr Browser unterstuetzt kein Ajax!'); } catch (q) { h(q); } }, }; qx.Class.define('CncEcoScanner.Layout.window', { type: 'singleton', extend: qx.ui.window.Window, construct: function() { try { this.base(arguments), this.setWidth(925), this.setHeight(700), this.setContentPadding(10), this.setShowMinimize(!1), this.setShowMaximize(!0), this.setShowClose(!0), this.setResizable(!0), this.setAllowMaximize(!0), this.setAllowMinimize(!1), this.setAllowClose(!0), this.setShowStatusbar(!1), this.setDecorator(null), this.setPadding(10), this.setLayout(new qx.ui.layout.Grow()), this.addListener( 'close', function() { this.active = !1; this.row = 0; this.ZW = []; this.removeAll(); this.ZZ = new qx.ui.container.Scroll(); this.ZY = new qx.ui.container.Composite( new qx.ui.layout.Flow() ); this.add(this.ZZ, { flex: 3 }); this.ZZ.add(this.ZY); }, this ), (this.ZW = []), this.removeAll(), (this.ZZ = new qx.ui.container.Scroll()), (this.ZY = new qx.ui.container.Composite(new qx.ui.layout.Flow())), this.add(this.ZZ, { flex: 3 }), this.ZZ.add(this.ZY); } catch (c) { console.debug('CncEcoScanner.Layout.window construct: ', c); } }, members: { ZW: null, ZZ: null, ZY: null, ZX: null, row: 0, openWindow: function(c, f, b) { try { '' !== c && this.setCaption(c), this.isVisible() && null === f ? this.close() : null !== b ? (this.open(), this.moveTo(30, 100)) : (this.open(), this.moveTo(30, 100), null !== f ? this.FO(f) : this.FO()); } catch (S) { console.log('CncEcoScanner.Layout.window.openWindow: ', S); } }, listener: function(c) { var f = qx.core.Init.getApplication(); f.getBackgroundArea().closeCityInfo(); f.getPlayArea().setView( ClientLib.Data.PlayerAreaViewMode.pavmCombatSetupDefense, c, 0, 0 ); f = ClientLib.Data.MainData.GetInstance() .get_Cities() .get_CurrentOwnCity(); null != f && f.get_CityArmyFormationsManager().set_CurrentTargetBaseId(c); }, FO: function(c) { try { if (!0 !== this.active) return setTimeout(function() { this.openWindow('', c); }, 90); var f = { '.': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAADUExURQAAAKd6PdoAAAABdFJOUwBA5thmAAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==', c: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAMAAABF0y+mAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAGMUExURQAAAJvj+p3l+57m+5vj+prj+p7m+5nh+pni+pri+pni+pri+pvj+5ri+pzl+57n+57m+5ff+Z7m+5nh+qDv/Zvj+57m+6Hr/KL6/pni+p30/Zrl+53z/aLt/KL9/pf0/Zn3/Zv4/pfr+6L0/Zf3/Z7n+5fs+6L1/Zf6/qL8/qL2/pfm+qLw/AlQf5n8/BJVbwlTq3HQ05P29wRFaGzY3hZnhAtRn4zu7h2JtBVxnQMtShFidgZMdQdIk5/9/gY7eQI5YAY9lgY6QghmnAZIUQtUlUe26RmQzwhHXAqAvBFzwg9WjRXM4AtpkTGZowtbZwQscWSt3SuF2SiKk3/j5pLb8WD29UiZpFzR1VzP4htnmjS0xiVpdR2VswpIiSCb6Tap6Ac1g33s7kCq0CeDswQxYjSx2cf2/GrQ6x5mrGfH8izk9UzCyzWEmyuouw+XpAuPyi6ApDqLkF7GzWS9wxbD8TKJzEmPwB+x7ShDQRS90zKGmXHl9wdYtX3M6KHo+k6stWzoymS0yB9GXksjNTkAAAAzdFJOUwAHHxQLFxsBBQMkDQkoMUZCTyw3fBA9VOVYqWWhS/W53sh3sM9ok43r2b52cP///////t3sG3QAAAIISURBVCjPrZJVc9tAFEazwpVkkRljOw23smzZlpkZYjvMzFBmTOGPd5VkAtO+dKb3UWe+785dnaGhfxgazd8Jw0ATQQDIPOQ0AwEAhI2kMIy0EfBBBKLvCJgtksdq4UmCuZeDNooVJbvoGPMvRPyimQR3xQxBCVYt5LY+ckbWkwm3yHJ3UYibfVNHmyHnwupSvfE0MWIhb7fSJkzyxpZ29rW1xcW5udRyUEbRm2KG4x1TK1p9O7ZWa8/OJjcSjy0kuKEMLow568c7794fhPVOPK4mxmXeBq7XQkrKx051vVR4Ga4pivJZC3jtmA1et7KO/MZhKVwqbClKLhv9Hll+My6QwGAAFzzTkfRgd1dVy9Fcpv3tx+r+qISZjFIOEyece83BYGbzeTodz54eX54dTMosgSAKPgldrMd/9T91u61oOqe3z05mQjLPGUdS9umLlLqlds/P31aKh/rX2s8jBI0kTWBivpct6J3Glw/blWIh11H6/VdBu7GTIbCJlUyxFC5+TDVeVNRqtdXqRUZHzDg6hTFRPi2WiSrJeLmZypab0eTJpNclUMbb0wDnHW6tF8sP7z3LVOfnX4f8HhExSF+dQpkla9BrRT9seDgQcHtkC0sSVwxZwJFIAbsk+hwul0uWBJbkIHPrD+BsOEliGMvzPEvhHLhvGI38YiAESD3C9Id8/31+A0POUa1xABFzAAAAAElFTkSuQmCC', t: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAMAAABF0y+mAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAGbUExURQAAAJri+pvj+prj+pnh+pjg+prj+pjh+pri+pzk+5rj+pni+pzl+5ri+pjh+pnh+prj+pnh+pni+pni+pjw/Jzl+5/s/Jrn+5ff+Zzl+5fz/Z/p/Jzw/Zf0/Jrm+5r3/aL4/Zfh+p7t/Jvt/Jv1/Zfv/Jvw/Jf6/aL6/gtsLQ6IVBKiXghkNm/Sw5H49ARQHJj7+g+FNwhdLYzx7ByrThCNQXvo1w1/OAt2NSvNZhKgRxCdURFyPAdlJRe/ZA2TToPt4y+yZxBsNh2YXA6RW2jcvxW3TTXykCqAWkachqD+/oLk3UeogUCeeWDEplSxnCJwVBKlWBqPNwMyFA2SKAqAUhyGPn71qDSTYhxfPC/liFHFdiTjbqr4sFnFiyCWSRCaQzrCfg1/Rz3ubGj0sVbTp7v7yBC8LBvmNBNKOSrtbxLKKV7xgkvenV3AoHzZzk6/mFHXTAtXLGndrVq5Wcr8zUvvjF+9e2HkmnTmr0fWem7m0C2nfxnVSFKPbRvUakbehimOUz3ORRbDbmveyTnfjnH1hFnMph+1ZunFEtoAAAApdFJOUwAUEBgJCw4CBAYkKC4bPR80RzddoExze1NB0FWIxWrv1GWUmdyvu93GYZ5Q7AAAAgFJREFUKM+tUtVy2wAQjJhZZrZjJ5LMzAxhJoeZy8zc767kNqk7zVOn+3g7eze3uyMj/wcYhuvA7poSBAICEAAixB80TsAoCAAMSYsiTzEoMawjQIikad5mkuSxoEPkUHxIiHK0edzpNvu92cZ9lyQy8O/FBMQ74gdZrzf+5NFR+oHLSoG3UgylTKHOUSFVL+ys9wpr004Wur2KA6I5/vl779vXva3N4+3ijN1KoTcPEYwQqF+f9o5PtHR6q7u04TGzDPJrMUw6xt9s7lZbbxvVUiKRn/UE3TSEDKQ4SJujfVX7oqmt4mIpo8xFIymJAvDBk5DNMjURbmtqrhkr1fL7L56mOzLLwMZFkHL4PZOPV9XESmW5vJZ/9Wzn+YnLROokBjOscyp70FxQzq7OcrGyuvFy/XXLY6UQ40nSFN9dShz2r87P32XCYW2xcVrIxK2kQYK0L6qUD9XM5fXldjPZ1mr5vZWJMYGDB6Q8p6y2tYv3Hz90c+GkUswpkyk/b5ike+eMLITVWvKiv99txmKV6r2U3cKSRjIYwrFydDb5MBv5lKwsx5SZ+mhAYklgEAwBUDaLfdoeckU78/ORyKjsM/Ec+DM0HIFIUXBLPrcl6ArJAUngSQC58R2HQYgjKZpnbYIgsDQHDJcI0ysEI3qJGB0ACBPYHb00+vd3Mf8JPwDEQVFKmgSbiAAAAABJRU5ErkJggg==', }, b, d = CncEcoScanner.getInstance()._bases; null !== c && (d = c); for (b in d) { var g = d[b].layout, n = g.match(/t/g).length, l = g.match(/c/g).length; switch ( ClientLib.Data.MainData.GetInstance() .get_Player() .get_Faction() ) { case ClientLib.Base.EFactionType.GDIFaction: var k = 'G'; break; case ClientLib.Base.EFactionType.NODFaction: k = 'N'; } for ( var h = 'https://www.cnc-eco.de/b/map=2|' + k + '|' + k + '||' + g + '....................................|newEconomy', p = '<table border="2" cellspacing="0" cellpadding="0" onclick="CncEcoScanner.Layout.window.getInstance().listener(' + d[b].id + ')">', p = p + ('<tr><td colspan="9"><font color="#FFF">' + d[b].x + ':' + d[b].y + ' <img width="14" height="14" src="' + f.t + '"> ' + n + ' <img width="14" height="14" src="' + f.c + '"> ' + l + '</font></td></tr>'), r = 0; 72 > r; r++ ) { var x = r - 9 * Math.floor(r / 9); 0 == x && (p += '<tr>'); p += '<td><img width="14" height="14" src="' + f[g.charAt(r)] + '"></td>'; 8 == x && (p += '</tr>'); } p += '</table><a href="' + h + '" target="_blank" style="color:#FFFFFF;">CnCEco'; this.resourceLayout = new qx.ui.basic.Label().set({ backgroundColor: '#303030', value: p, padding: 10, rich: !0, }); 7 == n ? this.resourceLayout.setBackgroundColor('#202820') : 5 == n && this.resourceLayout.setBackgroundColor('#202028'); this.ZW.push(this.resourceLayout); } this.ZY.removeAll(); k = 0; this.row > k && (k = this.row); for (a = f = 0; a < this.ZW.length; a++) this.ZY.add(this.ZW[a], { row: k, column: f }), f++, 5 < f && ((f = 0), k++, this.row++); } catch (m) { console.log(m); } }, }, }); qx.Class.define('CncEcoHIDE.window.container', { extend: qx.ui.container.Composite, construct: function(c) { try { qx.ui.container.Composite.call(this); this.set({ layout: new qx.ui.layout.VBox(5), padding: 5, decorator: 'pane-light-opaque', }); switch (c) { case 'o': console.log('add container o'); this.add( new qx.ui.basic.Label('Hide Outposts').set({ alignX: 'center', font: 'font_size_14_bold', }) ); var f = new qx.ui.container.Composite(new qx.ui.layout.HBox(5)); f.add( new qx.ui.basic.Label(this.tr('level < ')).set({ alignY: 'middle', }) ); f.add( (this.oLevel = new qx.ui.form.Spinner(1).set({ maximum: 65, minimum: 1, })) ); this.oLevel.addListener('changeValue', this.onInputo, this); f.add( (this.btnLevelo = new qx.ui.form.Button('del').set({ toolTipText: 'delete outposts from view', })) ); this.btnLevelo.addListener('execute', this.delo, this); f.add( (this.btnhideo = new qx.ui.form.Button('hide').set({ toolTipText: 'hide targetinfo from view', })) ); this.btnhideo.addListener('execute', this.hideo, this); this.add(f); break; case 'c': console.log('add container c'); this.add( new qx.ui.basic.Label('Hide Camps').set({ alignX: 'center', font: 'font_size_14_bold', }) ); f = new qx.ui.container.Composite(new qx.ui.layout.HBox(5)); f.add( new qx.ui.basic.Label(this.tr('level < ')).set({ alignY: 'middle', }) ); f.add( (this.cLevel = new qx.ui.form.Spinner(1).set({ maximum: 65, minimum: 1, })) ); this.cLevel.addListener('changeValue', this.onInputc, this); f.add( (this.btnLevelc = new qx.ui.form.Button('del').set({ toolTipText: 'delete camps from view', })) ); this.btnLevelc.addListener('execute', this.delc, this); f.add( (this.btnhidec = new qx.ui.form.Button('hide').set({ toolTipText: 'hide targetinfo from view', })) ); this.btnhidec.addListener('execute', this.hidec, this); this.add(f); break; case 'b': console.log('add container b'); this.add( new qx.ui.basic.Label('Hide Bases').set({ alignX: 'center', font: 'font_size_14_bold', }) ); f = new qx.ui.container.Composite(new qx.ui.layout.HBox(5)); f.add( new qx.ui.basic.Label(this.tr('level < ')).set({ alignY: 'middle', }) ); f.add( (this.bLevel = new qx.ui.form.Spinner(1).set({ maximum: 47, minimum: 1, })) ); this.bLevel.addListener('changeValue', this.onInputb, this); f.add( (this.btnLevelb = new qx.ui.form.Button('del').set({ toolTipText: 'delete bases from view', })) ); this.btnLevelb.addListener('execute', this.delb, this); f.add( (this.btnhideb = new qx.ui.form.Button('hide').set({ toolTipText: 'hide targetinfo from view', })) ); this.btnhideb.addListener('execute', this.hideb, this); this.add(f); break; case 'p': console.log('add container p'); this.add( new qx.ui.basic.Label('Hide Player').set({ alignX: 'center', font: 'font_size_14_bold', }) ); f = new qx.ui.container.Composite(new qx.ui.layout.HBox(5)); f.add( new qx.ui.basic.Label(this.tr('level < ')).set({ alignY: 'middle', }) ); f.add( (this.pLevel = new qx.ui.form.Spinner(1).set({ maximum: 65, minimum: 1, })) ); this.pLevel.addListener('changeValue', this.onInputp, this); f.add( (this.btnLevelp = new qx.ui.form.Button('del').set({ toolTipText: 'delete player from viev', })) ); this.btnLevelp.addListener('execute', this.delp, this); f.add( (this.btnhidep = new qx.ui.form.Button('hide').set({ toolTipText: 'hide targetinfo from view', })) ); this.btnhidep.addListener('execute', this.hidep, this); this.add(f); break; case 'reset': console.log('add container p'); this.add( new qx.ui.basic.Label('Reset all').set({ alignX: 'center', font: 'font_size_14_bold', }) ); f = new qx.ui.container.Composite( new qx.ui.layout.HBox(5, 'center') ); f.add( (this.btnReset = new qx.ui.form.Button('reset').set({ toolTipText: 'Reset view', })) ); this.btnReset.addListener('execute', this.reset, this); this.add(f); break; default: console.log('add container default'), this.add( new qx.ui.basic.Label('Hide all').set({ alignX: 'center', font: 'font_size_14_bold', }) ), (f = new qx.ui.container.Composite( new qx.ui.layout.HBox(5) )), f.add( new qx.ui.basic.Label(this.tr('level < ')).set({ alignY: 'middle', }) ), f.add( (this.aLevel = new qx.ui.form.Spinner(1).set({ maximum: 65, minimum: 1, })) ), this.aLevel.addListener('changeValue', this.onInputa, this), f.add( (this.btnLevela = new qx.ui.form.Button('del').set({ toolTipText: 'delete all targets from view', })) ), this.btnLevela.addListener('execute', this.dela, this), f.add( (this.btnhidea = new qx.ui.form.Button('hide').set({ toolTipText: 'hide targetinfo from view', })) ), this.btnhidea.addListener('execute', this.hidea, this), this.add(f); } this.dirtySectors = {}; } catch (b) { console.log( 'Error setting up CncEcoHIDE.window.container Constructor: ' ), console.log(b.toString()); } }, destruct: function() {}, members: { dirtySectors: null, oLevel: null, btnHideCurrent: null, btndelCurrent: null, cLevel: null, bLevel: null, pLevel: null, aLevel: null, btnLevelo: null, btnLevelc: null, btnLevelb: null, btnLevelp: null, btnLevela: null, btnReset: null, btnhideo: null, btnhidec: null, btnhideb: null, btnhidep: null, btnhidea: null, markDirty: function(c) { c.get_Id() in this.dirtySectors || (this.dirtySectors[c.get_Id()] = { alliance: [], player: [] }); }, onTick: function() { this.onInput(); }, onInputo: function() { this.onInput('o'); }, onInputc: function() { this.onInput('c'); }, onInputb: function() { this.onInput('b'); }, onInputp: function() { this.onInput('p'); }, onInputa: function() { this.onInput('a'); }, hideo: function() { this.hide('o'); }, hidec: function() { this.hide('c'); }, hideb: function() { this.hide('b'); }, hidep: function() { this.hide('p'); }, hidea: function() { this.hide('a'); }, delo: function() { this.del('o'); }, delc: function() { this.del('c'); }, delb: function() { this.del('b'); }, delp: function() { this.del('p'); }, dela: function() { this.del('a'); }, onInput: function(c) { switch (c) { case 'o': var f = parseInt(this.oLevel.getValue(), 10); break; case 'c': f = parseInt(this.cLevel.getValue(), 10); break; case 'p': f = parseInt(this.pLevel.getValue(), 10); break; case 'b': f = parseInt(this.bLevel.getValue(), 10); break; case 'a': f = parseInt(this.aLevel.getValue(), 10); } console.log('value is ' + f + ' from ' + c); }, del: function(c) { for ( var f = ClientLib.Data.MainData.GetInstance() .get_Cities() .get_CurrentOwnCity(), b = f.get_X(), f = f.get_Y(), d = ClientLib.Data.MainData.GetInstance().get_World(), g = ClientLib.Vis.VisMain.GetInstance().get_Region(), n = b - 16; n < b + 16; n++ ) for (var l = f - 16; l < f + 16; l++) { var k = g.GetObjectFromPosition( n * g.get_GridWidth(), l * g.get_GridHeight() ); if (null != k) { var h = d.GetWorldSectorByCoords(n, l); 'function' === typeof k.get_BaseLevel && (k.get_VisObjectType() == ClientLib.Vis.VisObject.EObjectType.RegionNPCCamp && (2 === k.get_CampType() && 'c' == c && Math.floor(k.get_BaseLevel()) < parseInt(this.cLevel.getValue(), 10) && (k.Dispose(), this.markDirty(h)), 3 === k.get_CampType() && 'o' == c && Math.floor(k.get_BaseLevel()) < parseInt(this.oLevel.getValue(), 10) && (k.Dispose(), this.markDirty(h)), 0 === k.get_CampType() && (k.Dispose(), this.markDirty(h))), k.get_VisObjectType() == ClientLib.Vis.VisObject.EObjectType .RegionCityType && 'p' == c && Math.floor(k.get_BaseLevel()) < parseInt(this.pLevel.getValue(), 10) && !k.IsOwnBase() && (k.Dispose(), this.markDirty(h)), k.get_VisObjectType() == ClientLib.Vis.VisObject.EObjectType.RegionNPCBase && 'b' == c && Math.floor(k.get_BaseLevel()) < parseInt(this.bLevel.getValue(), 10) && (k.Dispose(), this.markDirty(h)), 'a' == c && Math.floor(k.get_BaseLevel()) < parseInt(this.aLevel.getValue(), 10) && ('function' === typeof k.IsOwnBase ? k.IsOwnBase() || (k.Dispose(), this.markDirty(h)) : (k.Dispose(), this.markDirty(h)))); } } console.log(this.dirtySectors); }, hide: function(c) { for ( var f = ClientLib.Data.MainData.GetInstance() .get_Cities() .get_CurrentOwnCity(), b = f.get_X(), f = f.get_Y(), d = ClientLib.Vis.VisMain.GetInstance().get_Region(), g = b - 16; g < b + 16; g++ ) for (var l = f - 16; l < f + 16; l++) { var h = d.GetObjectFromPosition( g * d.get_GridWidth(), l * d.get_GridHeight() ); null != h && 'function' === typeof h.get_BaseLevel && (h.get_VisObjectType() == ClientLib.Vis.VisObject.EObjectType.RegionNPCCamp && (2 === h.get_CampType() && 'c' == c && Math.floor(h.get_BaseLevel()) < parseInt(this.cLevel.getValue(), 10) && h.HideInfos(), 3 === h.get_CampType() && 'o' == c && Math.floor(h.get_BaseLevel()) < parseInt(this.oLevel.getValue(), 10) && h.HideInfos(), 0 === h.get_CampType() && h.HideInfos()), h.get_VisObjectType() == ClientLib.Vis.VisObject.EObjectType.RegionCityType && 'p' == c && Math.floor(h.get_BaseLevel()) < parseInt(this.pLevel.getValue(), 10) && (h.IsOwnBase() || h.HideInfos()), h.get_VisObjectType() == ClientLib.Vis.VisObject.EObjectType.RegionNPCBase && 'b' == c && Math.floor(h.get_BaseLevel()) < parseInt(this.bLevel.getValue(), 10) && h.HideInfos(), 'a' == c && Math.floor(h.get_BaseLevel()) < parseInt(this.aLevel.getValue(), 10) && ('function' === typeof h.IsOwnBase ? h.IsOwnBase() || h.HideInfos() : h.HideInfos())); } }, reset: function(c) { console.log('reset view'); this.showAll(); }, showAll: function() { try { ClientLib.Vis.VisMain.GetInstance() .get_Region() .ShowAllPlates(); } catch (c) { console.log(c); } }, }, }); qx.Class.define('CncEcoHIDE.window.Window', { type: 'singleton', extend: qx.ui.window.Window, construct: function() { try { this.base(arguments), this.set({ layout: new qx.ui.layout.VBox().set({ spacing: 0 }), contentPadding: 5, contentPaddingTop: 0, allowMaximize: !1, showMaximize: !1, allowMinimize: !1, showMinimize: !1, resizable: !1, }), this.setCaption('Hide targets'), this.moveTo(150, 50), this.add(new CncEcoHIDE.window.container('o')), this.add(new CncEcoHIDE.window.container('c')), this.add(new CncEcoHIDE.window.container('b')), this.add(new CncEcoHIDE.window.container('p')), this.add(new CncEcoHIDE.window.container('a')), this.add(new CncEcoHIDE.window.container('reset')), this.addListener('appear', this.onOpen, this), this.addListener('close', this.onClose, this); } catch (c) { console.log('Error setting up CncEcoHIDE.window.Window Constructor: '), console.log(c.toString()); } }, destruct: function() {}, members: { view: {}, onOpen: function() { console.log('Window onOpen '); }, onClose: function() { console.log('Window onClose '); }, initialize: function() { try { CncEcomain.getInstance().AddMainMenu( 'hide targets', function() { CncEcoHIDE.window.Window.getInstance().open(); }, 'Alt+h' ), phe.cnc.Util.attachNetEvent( ClientLib.Vis.VisMain.GetInstance(), 'ViewModeChange', ClientLib.Vis.ViewModeChange, this, this.viewChangeHandler ), (this.btnHideCurrent = new qx.ui.form.Button('Hide')), this.btnHideCurrent.set({ width: 50, appearance: 'button-text-small', toolTipText: 'Hide From Map', }), this.btnHideCurrent.addListener( 'click', this.hideCurrent, this ), (this.btndelCurrent = new qx.ui.form.Button('del')), this.btndelCurrent.set({ width: 50, appearance: 'button-text-small', toolTipText: 'Delete From Map', }), this.btndelCurrent.addListener('click', this.delCurrent, this); } catch (c) { h(c); } }, viewChangeHandler: function(c, f) { try { var b = qx.core.Init.getApplication().getUIItem( ClientLib.Data.Missions.PATH.OVL_PLAYAREA ), d = ClientLib.Data.MainData.GetInstance() .get_Cities() .get_CurrentCity(); null != d && (((this.view.ownCity = d === ClientLib.Data.MainData.GetInstance() .get_Cities() .get_CurrentOwnCity()), this.view.ownCity || f !== ClientLib.Vis.Mode.CombatSetup) ? c === ClientLib.Vis.Mode.CombatSetup && (b.remove(this.btnHideCurrent), b.remove(this.btndelCurrent)) : (b.add(this.btnHideCurrent, { right: 1, top: 33 }), b.add(this.btndelCurrent, { right: 1, top: 60 }))); } catch (g) { console.log(g); } }, hideCurrent: function() { try { var c = ClientLib.Data.MainData.GetInstance() .get_Cities() .get_CurrentCity(), d = c.get_PosX(), b = c.get_PosY(), h = ClientLib.Vis.VisMain.GetInstance().get_Region(); h.GetObjectFromPosition( d * h.get_GridWidth(), b * h.get_GridHeight() ).HideInfos(); qx.core.Init.getApplication() .getMainOverlay() ._onClose(); } catch (g) { console.log(g); } }, delCurrent: function() { console.log('___________del___________'); try { var c = ClientLib.Data.MainData.GetInstance() .get_Cities() .get_CurrentCity(), d = c.get_PosX(), b = c.get_PosY(), h = ClientLib.Vis.VisMain.GetInstance().get_Region(); h.GetObjectFromPosition( d * h.get_GridWidth(), b * h.get_GridHeight() ).Dispose(); qx.core.Init.getApplication() .getMainOverlay() ._onClose(); } catch (g) { console.log(g); } }, }, }); l.xhr = { _load: !1, _xhr: null, _timeout: 3e3, start: function() { var c = null; if (window.XMLHttpRequest) c = new XMLHttpRequest(); else if (window.ActiveXObject) try { c = new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch (b) { try { c = new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch (S) { var d = { func: 'start', class: 'CncEco.xhr' }; d.error = S; h(S); beta && H(S, d); } } if (null === c) return !1; l.xhr._load = !0; l.xhr._xhr = c; l.xhr._xhr.timeout = l.xhr._timeout; return l.xhr._load; }, send: function(c, d, b, r, g) { try { if (null !== l.xhr._xhr) if (!1 !== l.xhr._load && null !== l.xhr._xhr) { l.xhr._xhr.open(d, c, !0); if (null !== b && 'object' == typeof b) for (var f in b) b[f].hasOwnProperty('name') && b[f].hasOwnProperty('value') && l.xhr._xhr.setRequestHeader(b[f].name, b[f].value); l.xhr._xhr.onload = function() { try { if (4 == l.xhr._xhr.readyState) if (200 == l.xhr._xhr.status) if ('function' == typeof g) g(l.xhr._xhr.responseText); else { var b = { func: 'send', class: 'CncEco.xhr', }; var c = 'typeof callback !== function'; b.error = c; h(c); beta && H(c, b); } else (b = { func: 'send', class: 'CncEco.xhr' }), (c = 'CncEco.xhr._xhr.status !== 200'), (b.error = c), h(c), beta && H(c, b); } catch (p) { (b = { func: 'send CncEco.xhr._xhr.onreadystatechange', class: 'CncEco.xhr', }), (b.error = p), h(p), beta && H(p, b); } }; l.xhr._xhr.ontimeout = function() { var b = { func: 'CncEco.xhr._xhr.onerror', class: 'CncEco.xhr', error: 'ontimeout', }; h('ontimeout'); beta && H('ontimeout', b); }; if (null !== r) if ( ('stringify' == JSON.isjson(r) && !0 === Array.isarray(r)) || (!0 === Object.isobj(r) && 'stringify' == JSON.isjson(r)) ) l.xhr._xhr.send(JSON.stringify(r)); else { var q = { func: 'send', class: 'CncEco.xhr', error: "Array.isarray(data) && JSON.isjson(data) === 'stringify' || Object.isabj(data) JSON.isjson(data) === 'stringify'", }; h( "Array.isarray(data) && JSON.isjson(data) === 'stringify' || Object.isabj(data) JSON.isjson(data) === 'stringify'" ); beta && H( "Array.isarray(data) && JSON.isjson(data) === 'stringify' || Object.isabj(data) JSON.isjson(data) === 'stringify'", q ); } else l.xhr._xhr.send(null); } else alert('Ihr Browser unterstuetzt kein Ajax!'); } catch (k) { (q = { func: 'send CncEco.xhr._xhr.onreadystatechange', class: 'CncEco.xhr', }), (q.error = k), h(k), beta && H(k, q); } }, }; l.xhr = l.xhr; l.xhr.start = l.xhr.start; l.xhr.name = 'CncEco.xhr'; window.CncEco = l; return !0; } function X(h) { var l = [], d; for (d in h) if ('object' == typeof h[d] && h[d]) for (var c in h[d]) if (376877 <= PerforceChangelist) { if ('object' == typeof h[d][c] && h[d][c] && 'd' in h[d][c]) { var f = h[d][c].d; if ('object' == typeof f && f) for (var b in f) 'object' == typeof f[b] && f[b] && 'get_CurrentLevel' in f[b] && l.push(f); } } else if ( 'object' == typeof h[d][c] && h[d][c] && 'l' in h[d][c] && ((f = h[d][c].l), 'object' == typeof f && f) ) for (b in f) 'object' == typeof f[b] && f[b] && 'get_CurrentLevel' in f[b] && l.push(f); return l; } function V(baseId, r, d) { h('CNCOpt Link loaded'); var c = { selected_base: null, keymap: { GDI_Accumulator: 'a', GDI_Refinery: 'r', 'GDI_Trade Center': 'u', GDI_Silo: 's', 'GDI_Power Plant': 'p', 'GDI_Construction Yard': 'y', GDI_Airport: 'd', GDI_Barracks: 'b', GDI_Factory: 'f', 'GDI_Defense HQ': 'q', 'GDI_Defense Facility': 'w', 'GDI_Command Center': 'e', GDI_Support_Art: 'z', GDI_Support_Air: 'x', GDI_Support_Ion: 'i', FOR_Silo: 's', FOR_Refinery: 'r', 'FOR_Tiberium Booster': 'b', 'FOR_Crystal Booster': 'v', 'FOR_Trade Center': 'u', 'FOR_Defense Facility': 'w', 'FOR_Construction Yard': 'y', FOR_Harvester_Tiberium: 'h', 'FOR_Defense HQ': 'q', FOR_Harvester_Crystal: 'n', NOD_Refinery: 'r', 'NOD_Power Plant': 'p', NOD_Harvester: 'h', 'NOD_Construction Yard': 'y', NOD_Airport: 'd', 'NOD_Trade Center': 'u', 'NOD_Defense HQ': 'q', NOD_Barracks: 'b', NOD_Silo: 's', NOD_Factory: 'f', NOD_Harvester_Crystal: 'n', 'NOD_Command Post': 'e', NOD_Support_Art: 'z', NOD_Support_Ion: 'i', NOD_Accumulator: 'a', NOD_Support_Air: 'x', 'NOD_Defense Facility': 'w', GDI_Wall: 'w', GDI_Cannon: 'c', 'GDI_Antitank Barrier': 't', GDI_Barbwire: 'b', GDI_Turret: 'm', GDI_Flak: 'f', 'GDI_Art Inf': 'r', 'GDI_Art Air': 'e', 'GDI_Art Tank': 'a', 'GDI_Def_APC Guardian': 'g', 'GDI_Def_Missile Squad': 'q', GDI_Def_Pitbull: 'p', GDI_Def_Predator: 'd', GDI_Def_Sniper: 's', 'GDI_Def_Zone Trooper': 'z', 'NOD_Def_Antitank Barrier': 't', 'NOD_Def_Art Air': 'e', 'NOD_Def_Art Inf': 'r', 'NOD_Def_Art Tank': 'a', 'NOD_Def_Attack Bike': 'p', NOD_Def_Barbwire: 'b', 'NOD_Def_Black Hand': 'z', NOD_Def_Cannon: 'c', NOD_Def_Confessor: 's', NOD_Def_Flak: 'f', 'NOD_Def_MG Nest': 'm', 'NOD_Def_Militant Rocket Soldiers': 'q', NOD_Def_Reckoner: 'g', 'NOD_Def_Scorpion Tank': 'd', NOD_Def_Wall: 'w', FOR_Wall: 'w', FOR_Barbwire_VS_Inf: 'b', FOR_Barrier_VS_Veh: 't', FOR_Inf_VS_Inf: 'g', FOR_Inf_VS_Veh: 'r', FOR_Inf_VS_Air: 'q', FOR_Sniper: 'n', FOR_Mammoth: 'y', FOR_Veh_VS_Inf: 'o', FOR_Veh_VS_Veh: 's', FOR_Veh_VS_Air: 'u', FOR_Turret_VS_Inf: 'm', FOR_Turret_VS_Inf_ranged: 'a', FOR_Turret_VS_Veh: 'v', FOR_Turret_VS_Veh_ranged: 'd', FOR_Turret_VS_Air: 'f', FOR_Turret_VS_Air_ranged: 'e', 'GDI_APC Guardian': 'g', GDI_Commando: 'c', GDI_Firehawk: 'f', GDI_Juggernaut: 'j', GDI_Kodiak: 'k', GDI_Mammoth: 'm', 'GDI_Missile Squad': 'q', GDI_Orca: 'o', GDI_Paladin: 'a', GDI_Pitbull: 'p', GDI_Predator: 'd', GDI_Riflemen: 'r', 'GDI_Sniper Team': 's', 'GDI_Zone Trooper': 'z', 'NOD_Attack Bike': 'b', NOD_Avatar: 'a', 'NOD_Black Hand': 'z', NOD_Cobra: 'r', NOD_Commando: 'c', NOD_Confessor: 's', 'NOD_Militant Rocket Soldiers': 'q', NOD_Militants: 'm', NOD_Reckoner: 'k', NOD_Salamander: 'l', 'NOD_Scorpion Tank': 'o', 'NOD_Specter Artilery': 'p', NOD_Venom: 'v', NOD_Vertigo: 't', '<last>': '.', }, make_sharelink: function() { try { var f = c.selected_base, b = ClientLib.Data.MainData.GetInstance() .get_Cities() .GetCity(f), l = ClientLib.Data.MainData.GetInstance() .get_Cities() .get_CurrentOwnCity(), g = ClientLib.Data.MainData.GetInstance().get_Alliance(), n = ClientLib.Data.MainData.GetInstance().get_Server(); tbase = f; tcity = b; scity = l; f = 'http://cncopt.com/?map='; f += '3|'; switch (b.get_CityFaction()) { case 1: f += 'G|'; break; case 2: f += 'N|'; break; case 3: case 4: case 5: case 6: f += 'F|'; break; default: h('cncopt: Unknown faction: ' + b.get_CityFaction()), (f += 'E|'); } switch (l.get_CityFaction()) { case 1: f += 'G|'; break; case 2: f += 'N|'; break; case 3: case 4: case 5: case 6: f += 'F|'; break; default: h('cncopt: Unknown faction: ' + l.get_CityFaction()), (f += 'E|'); } f += b.get_Name() + '|'; defense_units = []; for (l = 0; 20 > l; ++l) { var q = []; for (var k = 0; 9 > k; ++k) q.push(null); defense_units.push(q); } a: { for (var u = X(b), p = 0; p < u.length; ++p) for (var x in u[p]) if (u[p][x].get_UnitGameData_Obj().n in aa) { var B = u[p]; break a; } B = []; } if (376877 <= PerforceChangelist) for (l in B) { var m = B[l]; defense_units[m.get_CoordX()][m.get_CoordY() + 8] = m; } else for (l = 0; l < B.length; ++l) (m = B[l]), (defense_units[m.get_CoordX()][m.get_CoordY() + 8] = m); offense_units = []; for (l = 0; 20 > l; ++l) { q = []; for (k = 0; 9 > k; ++k) q.push(null); offense_units.push(q); } a: { var A = X(b); for (q = 0; q < A.length; ++q) for (var D in A[q]) if (A[q][D].get_UnitGameData_Obj().n in ba) { var w = A[q]; break a; } w = []; } if (376877 <= PerforceChangelist) for (l in w) (m = w[l]), (offense_units[m.get_CoordX()][m.get_CoordY() + 16] = m); else for (l = 0; l < w.length; ++l) (m = w[l]), (offense_units[m.get_CoordX()][m.get_CoordY() + 16] = m); a: { for (var t in b) if ( 'object' == typeof b[t] && b[t] && 0 in b[t] && 8 in b[t] && 'object' == typeof b[t][0] && b[t][0] && b[t][0] && 0 in b[t][0] && 15 in b[t][0] && 'object' == typeof b[t][0][0] && b[t][0][0] && 'BuildingIndex' in b[t][0][0] ) { var C = b[t]; break a; } C = null; } a: { var v = b.get_CityBuildingsData(), z; for (z in v) if (376877 <= PerforceChangelist) { if ( 'object' === typeof v[z] && v[z] && 'd' in v[z] && 'c' in v[z] && 0 < v[z].c ) { var y = v[z].d; break a; } } else if ('object' === typeof v[z] && v[z] && 'l' in v[z]) { y = v[z].l; break a; } y = void 0; } for (l = 0; 20 > l; ++l) for (row = [], k = 0; 9 > k; ++k) { var E = 16 < l ? null : C[k][l]; m = 0; w = null; E && 0 <= E.BuildingIndex && ((w = y[E.BuildingIndex]), (m = w.get_CurrentLevel())); var F = defense_units[k][l]; F && (m = F.get_CurrentLevel()); var G = offense_units[k][l]; G && (m = G.get_CurrentLevel()); 1 < m && (f += m); switch (16 < l ? 0 : b.GetResourceType(k, l)) { case 0: if (w) { var H = w.get_MdbBuildingId(); GAMEDATA.Tech[H].n in c.keymap ? (f += c.keymap[GAMEDATA.Tech[H].n]) : (h('cncopt [5]: Unhandled building: ' + H, w), (f += '.')); } else F ? F.get_UnitGameData_Obj().n in c.keymap ? (f += c.keymap[F.get_UnitGameData_Obj().n]) : (h( 'cncopt [5]: Unhandled unit: ' + F.get_UnitGameData_Obj().n ), (f += '.')) : G ? G.get_UnitGameData_Obj().n in c.keymap ? (f += c.keymap[G.get_UnitGameData_Obj().n]) : (h( 'cncopt [5]: Unhandled unit: ' + G.get_UnitGameData_Obj().n ), (f += '.')) : (f += '.'); break; case 1: f = 0 > E.BuildingIndex ? f + 'c' : f + 'n'; break; case 2: f = 0 > E.BuildingIndex ? f + 't' : f + 'h'; break; case 4: f += 'j'; break; case 5: f += 'h'; break; case 6: f += 'l'; break; case 7: f += 'k'; break; default: h( 'cncopt [4]: Unhandled resource type: ' + b.GetResourceType(k, l) ), (f += '.'); } } g && scity.get_AllianceId() == tcity.get_AllianceId() && ((f += '|' + g.get_POITiberiumBonus()), (f += '|' + g.get_POICrystalBonus()), (f += '|' + g.get_POIPowerBonus()), (f += '|' + g.get_POIInfantryBonus()), (f += '|' + g.get_POIVehicleBonus()), (f += '|' + g.get_POIAirBonus()), (f += '|' + g.get_POIDefenseBonus())); 1.2 !== n.get_TechLevelUpgradeFactorBonusAmount() && (f += '|newEconomy'); d.setFormField('opt' + r, f); return f; } catch (N) { h('cncopt [1]: ', N); } }, }; c.selected_base = baseId; c.make_sharelink(); } function Z(h, r) { CncEcomain.getInstance().remoteRequest('update', r); } function H(h, r) { var d = {}; d.func = r.func; d['class'] = r['class']; d.message = h.message; d.error = h.stack; MainData = ClientLib.Data.MainData.GetInstance(); B = MainData.get_Player(); d.playerName = B.get_Name(); d.accountId = B.get_AccountId(); server = MainData.get_Server(); d.worldId = server.get_WorldId(); d.clientinfo = ca(); var c = null; console.log( '____________________________Mest5-errorreport->send______________________________________' ); console.log(d); console.log( '_________________________________________________________________________________________' ); if (window.XMLHttpRequest) c = new XMLHttpRequest(); else if (window.ActiveXObject) try { c = new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch (f) { try { c = new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch (b) { console.log(b); } } null !== c && c.open('POST', 'https://www.member-stats.de/playerinfo.php?i=error', !0); c.onreadystatechange = function() { 4 == this.readyState && (200 == this.status ? console.log(h) : console.log(this.statusText)); }; c.send(JSON.stringify(d)); } function ca() { var h, r = navigator.userAgent.toLowerCase(), d = function(b) { return b.test(r); }, c = d(/opera/), f = d(/chrome/), b = d(/webkit/), x = !f && d(/safari/); x && d(/applewebkit\/4/); x && d(/version\/3/); x && d(/version\/4/); var g = !c && d(/msie/), n = g && d(/msie 7/), q = g && d(/msie 8/), k = g && !n && !q, u = !b && d(/gecko/); var p = u && d(/rv:1\.8/); var B = u && d(/rv:1\.9/), E = d(/windows|win32/), m = d(/macintosh|mac os x/); d(/adobeair/); var A = d(/linux/); /^https/i.test(window.location.protocol); var D = '', w = (h = d = ''), r = navigator.userAgent.toLowerCase(), d = function(b) { return b.test(r); }; E ? ((w = 'Windows'), d(/windows nt/) && ((w = r.indexOf('windows nt')), (E = r.indexOf(';', w)), (w = r.substring(w, E)))) : (w = m ? 'Mac' : A ? 'Linux' : 'Other'); g ? ((D = d = 'IE'), (p = r.indexOf('msie') + 5), (h = r.indexOf(';', p)), (h = r.substring(p, h)), (D = k ? 'IE6' : n ? 'IE7' : q ? 'IE8' : 'IE')) : u ? ((d = (n = d(/firefox/)) ? 'Firefox' : 'Others'), (D = p ? 'Gecko2' : B ? 'Gecko3' : 'Gecko'), n && ((p = r.indexOf('firefox') + 8), (h = r.indexOf(' ', p)), -1 == h && (h = r.length), (h = r.substring(p, h)))) : f ? ((d = 'Chrome'), (D = b ? 'Web Kit' : 'Other'), (p = r.indexOf('chrome') + 7), (h = r.indexOf(' ', p)), (h = r.substring(p, h))) : (d = c ? 'Opera' : x ? 'Safari' : ''); n = {}; n.javascript = D; n.browserType = d; n.browserVersion = h; n.osName = w; return n; } function Q() { try { if ('undefined' !== typeof qx) { var l = qx.core.Init.getApplication(), r = qx.core.Init.getApplication().getMenuBar(); l && r ? ((B = ClientLib.Data.MainData.GetInstance().get_Player()), 0 !== B.id ? (Y(), window.CncEcomain.getInstance().initialize(), window.CncEcoScanner.getInstance().initialize(), window.CncEcostorage.getInstance().initialize(), window.CncEcoReports.getInstance().initialize(), window.CncEcoxhr.getInstance().initialize(), CncEcoHIDE.window.Window.getInstance().initialize(), window.CncEco.xhr.start()) : window.setTimeout(Q, 1e3)) : window.setTimeout(Q, 1e3); } else window.setTimeout(Q, 1e3); } catch (d) { h(d), window.setTimeout(Q, 1e3); } } function h(h) { h = '[CncEco] ' + h; 'undefined' !== typeof console ? console.log(h) : window.opera && opera.postError(h); } var B = 0, T = 0, M = null, x = null, W = null, I = null, E = null, R = 0, U = 0, aa = { GDI_Wall: 'w', GDI_Cannon: 'c', 'GDI_Antitank Barrier': 't', GDI_Barbwire: 'b', GDI_Turret: 'm', GDI_Flak: 'f', 'GDI_Art Inf': 'r', 'GDI_Art Air': 'e', 'GDI_Art Tank': 'a', 'GDI_Def_APC Guardian': 'g', 'GDI_Def_Missile Squad': 'q', GDI_Def_Pitbull: 'p', GDI_Def_Predator: 'd', GDI_Def_Sniper: 's', 'GDI_Def_Zone Trooper': 'z', 'NOD_Def_Antitank Barrier': 't', 'NOD_Def_Art Air': 'e', 'NOD_Def_Art Inf': 'r', 'NOD_Def_Art Tank': 'a', 'NOD_Def_Attack Bike': 'p', NOD_Def_Barbwire: 'b', 'NOD_Def_Black Hand': 'z', NOD_Def_Cannon: 'c', NOD_Def_Confessor: 's', NOD_Def_Flak: 'f', 'NOD_Def_MG Nest': 'm', 'NOD_Def_Militant Rocket Soldiers': 'q', NOD_Def_Reckoner: 'g', 'NOD_Def_Scorpion Tank': 'd', NOD_Def_Wall: 'w', FOR_Wall: 'w', FOR_Barbwire_VS_Inf: 'b', FOR_Barrier_VS_Veh: 't', FOR_Inf_VS_Inf: 'g', FOR_Inf_VS_Veh: 'r', FOR_Inf_VS_Air: 'q', FOR_Sniper: 'n', FOR_Mammoth: 'y', FOR_Veh_VS_Inf: 'o', FOR_Veh_VS_Veh: 's', FOR_Veh_VS_Air: 'u', FOR_Turret_VS_Inf: 'm', FOR_Turret_VS_Inf_ranged: 'a', FOR_Turret_VS_Veh: 'v', FOR_Turret_VS_Veh_ranged: 'd', FOR_Turret_VS_Air: 'f', FOR_Turret_VS_Air_ranged: 'e', '': '', }, ba = { 'GDI_APC Guardian': 'g', GDI_Commando: 'c', GDI_Firehawk: 'f', GDI_Juggernaut: 'j', GDI_Kodiak: 'k', GDI_Mammoth: 'm', 'GDI_Missile Squad': 'q', GDI_Orca: 'o', GDI_Paladin: 'a', GDI_Pitbull: 'p', GDI_Predator: 'd', GDI_Riflemen: 'r', 'GDI_Sniper Team': 's', 'GDI_Zone Trooper': 'z', 'NOD_Attack Bike': 'b', NOD_Avatar: 'a', 'NOD_Black Hand': 'z', NOD_Cobra: 'r', NOD_Commando: 'c', NOD_Confessor: 's', 'NOD_Militant Rocket Soldiers': 'q', NOD_Militants: 'm', NOD_Reckoner: 'k', NOD_Salamander: 'l', 'NOD_Scorpion Tank': 'o', 'NOD_Specter Artilery': 'p', NOD_Venom: 'v', NOD_Vertigo: 't', '': '', }; /commandandconquer\.com/i.test(document.domain) && window.setTimeout(Q, 1e3); }, CncEcoScript = document.createElement('script'), txt = CncEco_mainFunction.toString(); CncEcoScript.innerHTML = '(' + txt + ')();'; CncEcoScript.type = 'text/javascript'; /commandandconquer\.com/i.test(document.domain) && document.getElementsByTagName('head')[0].appendChild(CncEcoScript); })();