C&C:TA CnC-Eco

Sammelt Informationen ueber Basenausbau der Allianzmitglieder (basierend auf Skripte / Routinen von neobsen, JimBeamJD, KRS_L, F.D, und Dooki)

目前为 2021-10-20 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name C&C:TA CnC-Eco
  3. // @version 1.2.0
  4. // @namespace http://cnc-eco.herokuapp.com
  5. // @homepage http://cnc-eco.herokuapp.com
  6. // @description Sammelt Informationen ueber Basenausbau der Allianzmitglieder (basierend auf Skripte / Routinen von neobsen, JimBeamJD, KRS_L, F.D, und Dooki)
  7. // @author F.D, J.L.
  8. // @include http*://*.alliances.commandandconquer.com/*/index.aspx*
  9. // @icon https://cnc-eco.herokuapp.com/favicon.ico
  10. // @copyright 2018, J.L.
  11. // @grant GM_setValue
  12. // @grant GM_getValue
  13. // @grant GM_registerMenuCommand
  14. // @grant GM_xmlhttpRequest
  15. // @grant GM_updatingEnabled
  16. // @grant unsafeWindow
  17. // @license CC BY-NC-SA 4.0 - http://creativecommons.org/licenses/by-nc-sa/4.0/
  18. // ==/UserScript==
  19.  
  20. (function() {
  21. var CncEco_mainFunction = function() {
  22. function Y() {
  23. var l = {};
  24. Array.isarray ||
  25. (Array.isarray = function(c) {
  26. return c instanceof Array ? !0 : !1;
  27. });
  28. Object.isobj ||
  29. (Object.isobj = function(c) {
  30. return c instanceof Object && !0 !== c instanceof Array ? !0 : !1;
  31. });
  32. JSON.isjson ||
  33. (JSON.isjson = function(c) {
  34. try {
  35. return JSON.parse(c), 'parse';
  36. } catch (f) {
  37. try {
  38. return JSON.stringify(c), 'stringify';
  39. } catch (b) {
  40. return !1;
  41. }
  42. }
  43. });
  44. qx.Class.define('CncEcomain', {
  45. type: 'singleton',
  46. extend: qx.core.Object,
  47. construct: function() {
  48. this.mainMenuContent = new qx.ui.menu.Menu();
  49. this.mainMenuButton = new qx.ui.form.MenuButton(
  50. 'CncEco',
  51. null,
  52. this.mainMenuContent
  53. );
  54. this.mainMenuButton.set({
  55. width: 70,
  56. appearance: 'button-bar-right',
  57. toolTipText: 'List of MemberStatsCommands',
  58. });
  59. this.mainMenuButton.addListener(
  60. 'execute',
  61. function(b) {
  62. this.mainMenuContent.open();
  63. },
  64. this
  65. );
  66. for (
  67. var c = qx.core.Init.getApplication().getUIItem(
  68. ClientLib.Data.Missions.PATH.BAR_MENU
  69. ),
  70. f = c.getChildren()[1].getChildren(),
  71. b = f.length - 1;
  72. 0 <= b;
  73. b--
  74. )
  75. 'function' === typeof f[b].setAppearance &&
  76. 'button-bar-right' == f[b].getAppearance() &&
  77. f[b].setAppearance('button-bar-center');
  78. c.getChildren()[1].add(this.mainMenuButton);
  79. c.getChildren()[0].setScale(!0);
  80. c.getChildren()[0].setWidth(834);
  81. },
  82. members: {
  83. mainMenuContent: null,
  84. mainMenuButton: null,
  85. poiwindow: null,
  86. poiInfoWindow: null,
  87. AddMainMenu: function(c, f, b) {
  88. null === c
  89. ? h('CncEco.AddSubMenu: name empty')
  90. : null === f
  91. ? h('CncEco.AddMainMenu: command empty')
  92. : (null !== b
  93. ? ((b = new qx.ui.command.Command(b)),
  94. b.addListener('execute', f, this),
  95. (c = new qx.ui.menu.Button(c)),
  96. c.setCommand(b))
  97. : ((c = new qx.ui.menu.Button(c)),
  98. c.addListener('execute', f)),
  99. this.mainMenuContent.add(c));
  100. },
  101. AddSubMainMenu: function(c) {
  102. if (null === c) h('Mest.AddSubMainMenu: name empty');
  103. else {
  104. var f = new qx.ui.menu.Menu();
  105. c = new qx.ui.menu.Button(c, null, null, f);
  106. this.mainMenuContent.add(c);
  107. return f;
  108. }
  109. },
  110. AddSubMenu: function(c, f, b, d) {
  111. if (null === f) h('CncEco.AddSubMenu: name empty');
  112. else if (null === b) h('CncEco.AddSubMenu: command empty');
  113. else if (null === c) h('CncEco.AddSubMenu: subMenu empty');
  114. else {
  115. if (null !== d) {
  116. var g = new qx.ui.command.Command(d);
  117. g.addListener('execute', b, this);
  118. d = new qx.ui.menu.Button(f);
  119. d.setCommand(g);
  120. } else (d = new qx.ui.menu.Button(f)), d.addListener('execute', b);
  121. c.add(d);
  122. c = new qx.ui.menu.Menu();
  123. new qx.ui.menu.Button(f, null, null, c);
  124. return c;
  125. }
  126. },
  127. initialize: function() {
  128. try {
  129. var c = ClientLib.Data.MainData.GetInstance();
  130. c.get_Player().get_Name();
  131. c.get_Server().get_WorldId();
  132. c.get_Alliance().get_Id();
  133. addEventListener('keyup', this.onKey, !1);
  134. h('init done');
  135. CncEcomain.getInstance().doAtLogin();
  136. CncEcomain.getInstance().doAfter();
  137. Array.isArray ||
  138. (Array.isArray = function(c) {
  139. return (
  140. '[object Array]' === Object.prototype.toString.call(c)
  141. );
  142. });
  143. Object.isObj ||
  144. (Object.isObj = function(c) {
  145. return (
  146. '[object Object]' === Object.prototype.toString.call(c)
  147. );
  148. });
  149. } catch (f) {
  150. h(f);
  151. }
  152. },
  153. onKey: function(c) {
  154. console.log(c);
  155. },
  156. doMenu: function() {
  157. var c = CncEcomain.getInstance(),
  158. f; //= c.AddSubMainMenu('MainOptions');
  159. c.AddMainMenu('open CnCEco', function() {
  160. CncEcomain.getInstance().openurl();
  161. });
  162. // c.AddMainMenu('send reports', function() {
  163. // CncEcoReports.getInstance().onAllReportsLoaded();
  164. // });
  165. c.AddMainMenu('add player', function() {
  166. CncEcomain.getInstance().getToken();
  167. });
  168. c.AddMainMenu(
  169. 'update data',
  170. function() {
  171. CncEcomain.getInstance().doAfter();
  172. },
  173. 'Alt+y'
  174. );
  175. !0 ===
  176. ClientLib.Data.MainData.GetInstance()
  177. .get_Alliance()
  178. .get_IsAdmin() &&
  179. false && // todo remove false
  180. ((f = c.AddSubMainMenu('State of War')),
  181. c.AddSubMenu(
  182. f,
  183. 'set State of War',
  184. function() {
  185. CncEcomain.getInstance().remoteRequest('stateofwar');
  186. },
  187. 'Alt+p'
  188. ),
  189. c.AddSubMenu(
  190. f,
  191. 'unset State of War',
  192. function() {
  193. CncEcomain.getInstance().remoteRequest('unsetstateofwar');
  194. },
  195. 'Alt+o'
  196. ));
  197. },
  198. doAtLogin: function() {
  199. this.checkWar();
  200. this.doMenu();
  201. this.isPoiMinister();
  202. },
  203. doAfter: function() {
  204. CncEcomain.getInstance().checkVersion();
  205. CncEcomain.getInstance().PlayerUpdate();
  206. },
  207. checkWar: function() {
  208. CncEcomain.getInstance().getIsWar();
  209. },
  210. checkVersion: function() {
  211. CncEcomain.getInstance().remoteRequest('version');
  212. },
  213. openurl: function() {
  214. CncEcomain.getInstance().remoteRequest('new_check');
  215. },
  216. getToken() {
  217. CncEcomain.getInstance().remoteRequest('get_token');
  218. },
  219. askOtherButton: function() {
  220. CncEcomain.getInstance().remoteRequest('button_check');
  221. },
  222. setSubstitution: function(c, f) {
  223. CncEcomain.getInstance().substitutionXhr('set', f, c);
  224. },
  225. removeSubstitution: function(c, f) {
  226. CncEcomain.getInstance().substitutionXhr('unset', c, f);
  227. },
  228. poiInfo: function() {
  229. CncEcomain.getInstance()
  230. .getWindow()
  231. .open();
  232. this.getWindow().push('Create PoiInfo\nplease wait\n\n');
  233. CncEcomain.getInstance().getPoiInfo();
  234. },
  235. isPoiMinister: function() {
  236. // h('check if poiminister i');
  237. // CncEcomain.getInstance().remoteRequest('poiminister');
  238. },
  239. substitutionXhr: function(c, f, b) {
  240. var d = ClientLib.Data.MainData.GetInstance()
  241. .get_Server()
  242. .get_WorldId(),
  243. g = ClientLib.Net.CommunicationManager.GetInstance().get_InstanceId(),
  244. n = new qx.bom.request.Xhr();
  245. 'set' == c &&
  246. ((n.onload = function() {
  247. '0' == n.responseText && h('WarSubstitution is set!');
  248. '1' == n.responseText && h('WarSubstitution is Error!');
  249. if ('2' == n.responseText) {
  250. n.abort();
  251. h('substitution ist nicht richtig gesetzt');
  252. var c = ClientLib.Data.MainData.GetInstance()
  253. .get_PlayerSubstitution()
  254. .getOutgoing();
  255. c.n !== b &&
  256. (h('Substitution to ' + c.n + ' delet'),
  257. (c =
  258. '{"session":"' +
  259. g +
  260. '","id":"' +
  261. c.i +
  262. '","pid":"' +
  263. c.p1 +
  264. '"}'),
  265. CncEcomain.getInstance().removeSubstitution(c, b));
  266. }
  267. '3' == n.responseText &&
  268. h('WarSubstitution Account nicht auf dieser Welt!');
  269. '4' == n.responseText &&
  270. h(
  271. 'WarSubstitution kann nicht auf eigenen account gesetzt werden!'
  272. );
  273. }),
  274. n.open(
  275. 'POST',
  276. '/' +
  277. d +
  278. '/Presentation/Service.svc/ajaxEndpoint/SubstitutionCreateReq'
  279. ),
  280. n.setRequestHeader('Content-Type', 'application/json'),
  281. n.send(f));
  282. 'unset' == c &&
  283. ((n.onload = function() {
  284. if ('0' == n.responseText) {
  285. var c =
  286. '{"session":"' +
  287. ClientLib.Net.CommunicationManager.GetInstance().get_InstanceId() +
  288. '","name":"' +
  289. b +
  290. '"}';
  291. CncEcomain.getInstance().setSubstitution(b, c);
  292. }
  293. }),
  294. n.open(
  295. 'POST',
  296. '/' +
  297. d +
  298. '/Presentation/Service.svc/ajaxEndpoint/SubstitutionCancelReq'
  299. ),
  300. n.setRequestHeader('Content-Type', 'application/json'),
  301. n.send(f));
  302. },
  303. getIsWar: function() {
  304. h('Check if is War');
  305. 'true' !== B.get_IsSubstituteLogin()
  306. ? (h('Player is not substitutionLogin'),
  307. CncEcomain.getInstance().remoteRequest('war'))
  308. : h('Player is substitutionLogin');
  309. },
  310. PlayerUpdate: function() {
  311. var c = ClientLib.Data.MainData.GetInstance();
  312. c.get_Player().get_Name();
  313. var f = c.get_Alliance(),
  314. b = c.get_Player().get_Id();
  315. c.get_Server();
  316. ClientLib.Net.CommunicationManager.GetInstance().get_InstanceId();
  317. f.get_OwnedPOIs();
  318. ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
  319. 'GetPublicPlayerInfo',
  320. { id: b },
  321. phe.cnc.Util.createEventDelegate(
  322. ClientLib.Net.CommandResult,
  323. this,
  324. Z
  325. ),
  326. null
  327. );
  328. },
  329. remoteRequest: function(c, f) {
  330. h('remoteRequest: ' + c);
  331. var b = ClientLib.Data.MainData.GetInstance();
  332. var d = b.get_Player().get_Name(),
  333. g = b.get_Alliance(),
  334. n = b.get_Player().get_Id(),
  335. s = b.get_Player().get_IsSubstituteLogin(),
  336. q = b.get_Server(),
  337. k = ClientLib.Net.CommunicationManager.GetInstance().get_InstanceId(),
  338. u = g.get_OwnedPOIs(),
  339. p = new qx.io.remote.Request(
  340. 'https://cnc-eco.herokuapp.com/api/v1/ingameData',
  341. 'POST',
  342. 'text/html'
  343. );
  344. p.setTimeout(3e3);
  345. p.setProhibitCaching(!1);
  346. p.setRequestHeader('Content-Type', 'text/html');
  347. p.setTimeout('3600000');
  348. p.setResponseType('text/html');
  349. p._ontimeout = function() {
  350. p.abort();
  351. h('req abort');
  352. };
  353. 'version' == c &&
  354. (h('version check'),
  355. p.setData('version'),
  356. p.setParameter('version', '4.7.5'),
  357. p.addListener('completed', function(b) {
  358. 'version' === b.getContent()
  359. ? (h('UPDATE is vorhanden'),
  360. CncEcomain.getInstance().UpdateWindow())
  361. : h('Kein Script Update');
  362. }),
  363. p.send());
  364. 'update' == c &&
  365. (p.setData('UPDATE'),
  366. p.setParameter('update', '1'),
  367. console.log('PlayerInfoData= null ______________________'),
  368. CncEcomain.getInstance().Playerinfo(p, f),
  369. p.addListener('completed', function(b) {
  370. h('PlayerDataUpdate');
  371. 'UPDATED' === b.getContent() && h('PlayerData Up To Date');
  372. }));
  373. 'new_check' == c &&
  374. (p.setData('new_check'),
  375. p.setParameter('new_check', d),
  376. p.addListener('completed', function(b) {
  377. '' === b.getContent()
  378. ? (h('new Account:: ' + b.getContent()),
  379. CncEcomain.getInstance().winOpen('', d))
  380. : (h('NOT new :: ' + b.getContent()),
  381. CncEcomain.getInstance().winOpen('', ''));
  382. }),
  383. p.send());
  384. 'get_token' == c &&
  385. (s
  386. ? CncEcomain.getInstance().winOpen(
  387. '',
  388. 'error=You cannot add account from substitutions'
  389. )
  390. : p.setData('get_token', d),
  391. p.setParameter('get_token', d),
  392. p.addListener('completed', function(b) {
  393. const content = b.getContent();
  394. h('content from get_token');
  395. h(content);
  396. // content ? CncEcomain.getInstance().winOpen('', content) : h('token missing - add your account ingame first')
  397. content
  398. ? CncEcomain.getInstance().AuthWindow(content)
  399. : h('token missing - add your account ingame first');
  400. }),
  401. p.send());
  402. 'war' == c &&
  403. (p.setData('WAR'),
  404. p.setParameter('name', d),
  405. p.setParameter('alli', g.get_Id()),
  406. p.setParameter('world', q.get_WorldId()),
  407. p.addListener('completed', function(b) {
  408. var c =
  409. '{"session":"' + k + '","name":"' + b.getContent() + '"}';
  410. if (
  411. '' !== b.getContent() &&
  412. d !== b.getContent() &&
  413. !0 !==
  414. ClientLib.Data.MainData.GetInstance()
  415. .get_Player()
  416. .get_IsSubstituteLogin()
  417. ) {
  418. var f = ClientLib.Data.MainData.GetInstance()
  419. .get_PlayerSubstitution()
  420. .getOutgoing();
  421. null !== f
  422. ? (h(f),
  423. f.n !== b.getContent() &&
  424. CncEcomain.getInstance().CncEcoUvWindow(
  425. b.getContent(),
  426. c
  427. ))
  428. : CncEcomain.getInstance().CncEcoUvWindow(
  429. b.getContent(),
  430. c
  431. );
  432. } else h('No War');
  433. }),
  434. p.send());
  435. 'stateofwar' == c &&
  436. (p.setData('stateofwar'),
  437. p.setParameter('stateofwar', d),
  438. p.setParameter('token', n),
  439. p.setParameter('alli', g.get_Id()),
  440. p.setParameter('world', q.get_WorldId()),
  441. p.addListener('completed', function(b) {
  442. 'stateofwar' === b.getContent()
  443. ? (h('State of War is set'),
  444. CncEcomain.getInstance().stateofwarwin(d, 'set'))
  445. : h('State of War ERROR :: ' + b.getContent());
  446. }),
  447. (b = ClientLib.Data.MainData.GetInstance()
  448. .get_Alliance()
  449. .get_IsAdmin()),
  450. !0 === b ? p.send() : h('State of War ERROR :: You are no admin!'));
  451. 'unsetstateofwar' == c &&
  452. (p.setData('unsetstateofwar'),
  453. p.setParameter('unsetstateofwar', d),
  454. p.setParameter('token', n),
  455. p.setParameter('alli', g.get_Id()),
  456. p.setParameter('world', q.get_WorldId()),
  457. p.addListener('completed', function(b) {
  458. 'unsetstateofwar' === b.getContent()
  459. ? (h('State of War is unset'),
  460. CncEcomain.getInstance().stateofwarwin(d, 'unset'))
  461. : h('State of War ERROR :: ' + b.getContent());
  462. }),
  463. (b = ClientLib.Data.MainData.GetInstance()
  464. .get_Alliance()
  465. .get_IsAdmin()),
  466. !0 === b ? p.send() : h('State of War ERROR :: You are no admin!'));
  467. 'poiminister' == c &&
  468. (p.setData('poiminister'),
  469. p.setParameter('poiminister', d),
  470. p.setParameter('token', n),
  471. p.setParameter('alli', g.get_Id()),
  472. p.setParameter('world', q.get_WorldId()),
  473. p.addListener('completed', function(b) {
  474. b.getContent() === d
  475. ? '0' < u.length
  476. ? (h('you are PoiMinister'),
  477. CncEcomain.getInstance().AddMainMenu(
  478. 'PoiInfo',
  479. function() {
  480. CncEcomain.getInstance().poiInfo();
  481. },
  482. 'Alt+x'
  483. ))
  484. : h("you are PoiMinister but alli have 0 Poi's ")
  485. : h('you are not PoiMinister :: ' + b.getContent());
  486. }),
  487. p.send());
  488. },
  489. Playerinfo: function(c, f) {
  490. qx.core.Init.getApplication()
  491. .getBackgroundArea()
  492. .closeCityInfo();
  493. var b = ClientLib.Data.MainData.GetInstance();
  494. var d = b.get_Alliance().get_MemberDataAsArray();
  495. var g = b
  496. .get_Server()
  497. .get_Name()
  498. .trim(),
  499. n = b.get_Server().get_WorldId(),
  500. q = b.get_Cities(),
  501. k = q.get_CurrentOwnCity().get_AllianceName(),
  502. q = q.get_CurrentOwnCity().get_AllianceId();
  503. c.setFormField('version', '4.7.5');
  504. c.setFormField('worldId', n);
  505. c.setFormField('serverName', g);
  506. c.setFormField('allianceId', q);
  507. c.setFormField('allianceName', k);
  508. c.setFormField('count', d.length);
  509. for (g = 0; g < d.length; g++)
  510. (n = d[g].Id),
  511. (k = d[g].Name),
  512. (q = d[g].RoleName),
  513. c.setFormField('playerId' + g, n),
  514. c.setFormField('name' + g, k),
  515. c.setFormField('ro' + g, q);
  516. d = b.get_Cities();
  517. n = d.get_CurrentOwnCity().get_PlayerId();
  518. c.setFormField('currentplayerId', n);
  519. n = ClientLib.Data.MainData.GetInstance().get_Player().accountId;
  520. c.setFormField('accountId', n);
  521. n = ClientLib.Data.MainData.GetInstance()
  522. .get_Alliance()
  523. .get_FirstLeaders().l;
  524. k = ClientLib.Data.MainData.GetInstance()
  525. .get_Alliance()
  526. .get_SecondLeaders().l;
  527. c.setFormField('cic', n);
  528. c.setFormField('sc', k);
  529. n = d.get_CurrentOwnCity().get_PlayerName();
  530. c.setFormField('currentplayerName', n);
  531. n = f.c.length;
  532. c.setFormField('basecount', n);
  533. c.setFormField('fraction', f.f);
  534. c.setFormField('basekills', f.bd);
  535. c.setFormField('pvekills', f.bde);
  536. c.setFormField('pvpkills', f.bd - f.bde);
  537. c.setFormField('points', f.p);
  538. c.setFormField('rank', f.r);
  539. c.setFormField('hascode', f.hchc);
  540. c.setFormField('maxcp', B.GetCommandPointMaxStorage());
  541. c.setFormField('actcp', Math.round(B.GetCommandPointCount()));
  542. c.setFormField('funds', b.get_Inventory().get_PlayerFunds());
  543. c.setFormField('schirme', Math.round(B.GetSupplyPointCount()));
  544. c.setFormField('RPoints', B.get_ResearchPoints());
  545. c.setFormField('CreditsCount', Math.round(B.GetCreditsCount()));
  546. b = ClientLib.Data.MainData.GetInstance().get_Player();
  547. k = b.get_Faction();
  548. k = ClientLib.Base.Tech.GetTechIdFromTechNameAndFaction(
  549. ClientLib.Base.ETechName.Research_BaseFound,
  550. k
  551. );
  552. k = b
  553. .get_PlayerResearch()
  554. .GetResearchItemFomMdbId(k)
  555. .get_NextLevelInfo_Obj();
  556. b = [];
  557. for (g in k.rr) 0 < k.rr[g].t && (b[k.rr[g].t] = k.rr[g].c);
  558. g = b[ClientLib.Base.EResourceType.Gold];
  559. b = b[ClientLib.Base.EResourceType.ResearchPoints];
  560. k = B.get_Credits();
  561. k =
  562. (k.Delta + k.ExtraBonusDelta) *
  563. ClientLib.Data.MainData.GetInstance()
  564. .get_Time()
  565. .get_StepsPerHour();
  566. g = (g - B.GetCreditsCount()) / k;
  567. c.setFormField('timeTOmcv', Math.round(3600 * g));
  568. c.setFormField('rpNeeded', b);
  569. for (g = 0; g < n; g++) {
  570. var k = d.GetCity(f.c[g].i),
  571. b = [];
  572. b.Id = f.c[g].i;
  573. b.Na = k.get_Name();
  574. b.Po = f.c[g].p;
  575. b.Lvl = k.get_LvlBase().toFixed(2);
  576. b.Off = k.get_LvlOffense().toFixed(2);
  577. b.Def = k.get_LvlDefense().toFixed(2);
  578. b.PosX = f.c[g].x;
  579. b.PosY = f.c[g].y;
  580. q = k.get_CityUnitsData();
  581. b.repInf =
  582. 0 < b.Off
  583. ? q.GetRepairTimeFromEUnitGroup(
  584. ClientLib.Data.EUnitGroup.Infantry,
  585. !1
  586. )
  587. : 0;
  588. b.repVeh =
  589. 0 < b.Off
  590. ? q.GetRepairTimeFromEUnitGroup(
  591. ClientLib.Data.EUnitGroup.Vehicle,
  592. !1
  593. )
  594. : 0;
  595. b.repAir =
  596. 0 < b.Off
  597. ? q.GetRepairTimeFromEUnitGroup(
  598. ClientLib.Data.EUnitGroup.Aircraft,
  599. !1
  600. )
  601. : 0;
  602. b.maxRep =
  603. 0 < b.Off
  604. ? k.GetResourceMaxStorage(
  605. ClientLib.Base.EResourceType.RepairChargeInf
  606. )
  607. : 0;
  608. b.availRep =
  609. 0 < b.Off
  610. ? ClientLib.Base.Resource.GetResourceCount(
  611. k
  612. .get_RepairOffenseResources()
  613. .get_RepairChargeOffense()
  614. )
  615. : 0;
  616. var u = k.get_SupportWeapon();
  617. b.supWp = null !== u ? u.n : '';
  618. u = k.get_SupportData();
  619. b.SL = null !== u ? u.get_Level() : 0;
  620. q = k.get_CityBuildingsData();
  621. u = q.GetUniqueBuildingByTechName(
  622. ClientLib.Base.ETechName.Construction_Yard
  623. );
  624. b.CY = null !== u ? u.get_CurrentLevel() : 0;
  625. u = q.GetUniqueBuildingByTechName(
  626. ClientLib.Base.ETechName.Defense_Facility
  627. );
  628. b.DF = null !== u ? u.get_CurrentLevel() : 0;
  629. u = q.GetUniqueBuildingByTechName(
  630. ClientLib.Base.ETechName.Defense_HQ
  631. );
  632. b.DHQ = null !== u ? u.get_CurrentLevel() : 0;
  633. b.PP = Math.round(
  634. k.GetResourceGrowPerHour(
  635. ClientLib.Base.EResourceType.Power,
  636. !1,
  637. !1
  638. )
  639. );
  640. b.PBP = Math.round(
  641. k.GetResourceBonusGrowPerHour(
  642. ClientLib.Base.EResourceType.Power
  643. )
  644. );
  645. b.PAB = ClientLib.Data.MainData.GetInstance()
  646. .get_Alliance()
  647. .GetPOIBonusFromResourceType(
  648. ClientLib.Base.EResourceType.Power
  649. );
  650. b.CP = Math.round(
  651. ClientLib.Base.Resource.GetResourceGrowPerHour(
  652. k.get_CityCreditsProduction(),
  653. !1
  654. )
  655. );
  656. b.CBP = Math.round(
  657. ClientLib.Base.Resource.GetResourceBonusGrowPerHour(
  658. k.get_CityCreditsProduction(),
  659. !1
  660. )
  661. );
  662. b.Tall = Math.round(
  663. k.GetResourceGrowPerHour(
  664. ClientLib.Base.EResourceType.Tiberium,
  665. !1,
  666. !1
  667. ) +
  668. k.GetResourceBonusGrowPerHour(
  669. ClientLib.Base.EResourceType.Tiberium
  670. ) +
  671. ClientLib.Data.MainData.GetInstance()
  672. .get_Alliance()
  673. .GetPOIBonusFromResourceType(
  674. ClientLib.Base.EResourceType.Tiberium
  675. )
  676. );
  677. b.Call = Math.round(
  678. k.GetResourceGrowPerHour(
  679. ClientLib.Base.EResourceType.Crystal,
  680. !1,
  681. !1
  682. ) +
  683. k.GetResourceBonusGrowPerHour(
  684. ClientLib.Base.EResourceType.Crystal
  685. ) +
  686. ClientLib.Data.MainData.GetInstance()
  687. .get_Alliance()
  688. .GetPOIBonusFromResourceType(
  689. ClientLib.Base.EResourceType.Crystal
  690. )
  691. );
  692. b.PPall = b.PP + b.PBP + b.PAB;
  693. b.CPall = b.CP + b.CBP;
  694. c.setFormField('basename' + g, b.Na);
  695. c.setFormField('baseid' + g, b.Id);
  696. c.setFormField('punkte' + g, b.Po);
  697. c.setFormField('level' + g, b.Lvl);
  698. c.setFormField('off' + g, b.Off);
  699. c.setFormField('def' + g, b.Def);
  700. c.setFormField('repinf' + g, b.repInf);
  701. c.setFormField('repveh' + g, b.repVeh);
  702. c.setFormField('repair' + g, b.repAir);
  703. c.setFormField('repmax' + g, b.maxRep);
  704. c.setFormField('availrep' + g, b.availRep);
  705. c.setFormField('suptype' + g, b.supWp);
  706. c.setFormField('suplvl' + g, b.SL);
  707. c.setFormField('cylvl' + g, b.CY);
  708. c.setFormField('dflvl' + g, b.DF);
  709. c.setFormField('dfhqlvl' + g, b.DHQ);
  710. c.setFormField('power' + g, b.PPall);
  711. c.setFormField('tib' + g, b.Tall);
  712. c.setFormField('cris' + g, b.Call);
  713. c.setFormField('cash' + g, b.CPall);
  714. c.setFormField('x' + g, b.PosX);
  715. c.setFormField('y' + g, b.PosY);
  716. V(b.Id, g, c);
  717. }
  718. c.send();
  719. },
  720. stateofwarwin: function(c, f) {
  721. var b = new qx.ui.window.Window('Alliance on war');
  722. if ('set' == f) {
  723. var d = 'You "' + c + '" have set State of War';
  724. var g = 'Set State of War';
  725. }
  726. 'unset' == f &&
  727. ((d = 'You "' + c + '" have delet State of War'),
  728. (g = 'UnSet State of War'));
  729. b.set({
  730. caption: g,
  731. icon: 'webfrontend/ui/common/icon_moral_alert_red.png',
  732. layout: new qx.ui.layout.HBox(4),
  733. width: 250,
  734. height: 75,
  735. contentPaddingTop: 0,
  736. contentPaddingBottom: 6,
  737. contentPaddingRight: 6,
  738. contentPaddingLeft: 6,
  739. showMaximize: !1,
  740. showMinimize: !1,
  741. allowMaximize: !1,
  742. allowMinimize: !1,
  743. resizable: !1,
  744. visibility: 'visible',
  745. textColor: '#bfbfbf',
  746. });
  747. b.setPadding(10);
  748. b.setLayout(new qx.ui.layout.VBox(10));
  749. g = new qx.ui.container.Composite(
  750. new qx.ui.layout.VBox(4).set({ alignX: 'left' })
  751. );
  752. g.add(new qx.ui.basic.Label(d));
  753. d = new qx.ui.container.Composite(
  754. new qx.ui.layout.VBox(1).set({ alignX: 'center' })
  755. );
  756. var n = new qx.ui.form.Button('close');
  757. n.set({
  758. toolTipText: 'close',
  759. width: 70,
  760. height: 20,
  761. maxWidth: 200,
  762. maxHeight: 32,
  763. center: !0,
  764. rich: !0,
  765. });
  766. d.add(n);
  767. n.addListener(
  768. 'execute',
  769. function(c) {
  770. b.close();
  771. },
  772. this
  773. );
  774. b.add(g);
  775. b.add(d);
  776. b.center();
  777. b.open();
  778. },
  779. CncEcoUvWindow: function(c, f) {
  780. var b = new qx.ui.window.Window('Alliance on war'),
  781. d =
  782. 'Your commander has declared war status!|It was sent a substitution to:|' +
  783. c;
  784. b.set({
  785. caption: 'Alliance on war',
  786. icon: 'webfrontend/ui/common/icon_moral_alert_red.png',
  787. layout: new qx.ui.layout.HBox(4),
  788. width: 300,
  789. height: 150,
  790. contentPaddingTop: 0,
  791. contentPaddingBottom: 6,
  792. contentPaddingRight: 6,
  793. contentPaddingLeft: 6,
  794. showMaximize: !1,
  795. showMinimize: !1,
  796. allowMaximize: !1,
  797. allowMinimize: !1,
  798. resizable: !1,
  799. visibility: 'visible',
  800. textColor: '#bfbfbf',
  801. });
  802. b.setPadding(10);
  803. b.setLayout(new qx.ui.layout.VBox(10));
  804. var g = new qx.ui.container.Composite(
  805. new qx.ui.layout.VBox(4).set({ alignX: 'left' })
  806. ),
  807. n = new qx.ui.container.Composite(
  808. new qx.ui.layout.VBox(1).set({ alignX: 'center' })
  809. ),
  810. q = new qx.ui.form.Button('send Substitution'),
  811. k = new qx.ui.form.Button('abort');
  812. q.set({
  813. toolTipText: 'send Substitution',
  814. width: 120,
  815. height: 20,
  816. maxWidth: 200,
  817. maxHeight: 32,
  818. center: !0,
  819. rich: !0,
  820. });
  821. k.set({
  822. toolTipText: 'dont send substitution',
  823. width: 120,
  824. height: 20,
  825. maxWidth: 200,
  826. maxHeight: 32,
  827. center: !0,
  828. rich: !0,
  829. });
  830. n.add(q);
  831. n.add(k);
  832. q.addListener(
  833. 'execute',
  834. function(d) {
  835. b.close();
  836. CncEcomain.getInstance().substitutionXhr('set', f, c);
  837. },
  838. this
  839. );
  840. k.addListener(
  841. 'execute',
  842. function(c) {
  843. b.close();
  844. },
  845. this
  846. );
  847. d = d.split('|');
  848. for (i = 0; '3' > i; i++) g.add(new qx.ui.basic.Label(d[i]));
  849. b.add(g);
  850. b.add(n);
  851. b.center();
  852. b.open();
  853. },
  854. UpdateWindow: function() {
  855. var c = new qx.ui.window.Window('CnCEco Update!');
  856. c.set({
  857. caption: 'CnCEco Update!',
  858. icon: 'webfrontend/ui/common/icon_moral_alert_red.png',
  859. layout: new qx.ui.layout.HBox(4),
  860. width: 450,
  861. height: 170,
  862. contentPaddingTop: 0,
  863. contentPaddingBottom: 6,
  864. contentPaddingRight: 6,
  865. contentPaddingLeft: 6,
  866. showMaximize: !1,
  867. showMinimize: !1,
  868. allowMaximize: !1,
  869. allowMinimize: !1,
  870. resizable: !0,
  871. visibility: 'excluded',
  872. textColor: '#bfbfbf',
  873. });
  874. c.setPadding(10);
  875. c.setLayout(new qx.ui.layout.VBox(10));
  876. var f = new qx.ui.container.Composite(
  877. new qx.ui.layout.VBox(2).set({ alignX: 'left' })
  878. ),
  879. b = new qx.ui.basic.Label('CnCEco script "4.7.5" is to old');
  880. f.add(b);
  881. b = new qx.ui.basic.Label(
  882. 'Please disable/deinstall the old script and get new version'
  883. );
  884. f.add(b);
  885. b = new qx.ui.basic.Label('');
  886. f.add(b);
  887. b = new qx.ui.basic.Label(
  888. 'Click button below to open link to get new version'
  889. );
  890. f.add(b);
  891. var b = new qx.ui.container.Composite(
  892. new qx.ui.layout.VBox(2).set({ alignX: 'right' })
  893. ),
  894. d = new qx.ui.form.Button('Get new Script');
  895. b.add(d);
  896. d.addListener(
  897. 'execute',
  898. function() {
  899. c.close();
  900. qx.core.Init.getApplication().showExternal(
  901. 'https://www.member-stats.de/?link=new_version',
  902. '.member-stats'
  903. );
  904. },
  905. this
  906. );
  907. c.add(f);
  908. c.add(b);
  909. c.center();
  910. c.open();
  911. },
  912. AuthWindow: function(content) {
  913. var c = new qx.ui.window.Window('CnCEco add player!');
  914. c.set({
  915. caption: 'CnCEco add player!',
  916. icon: 'webfrontend/ui/common/icon_moral_alert_red.png',
  917. layout: new qx.ui.layout.HBox(4),
  918. width: 450,
  919. height: 170,
  920. contentPaddingTop: 0,
  921. contentPaddingBottom: 6,
  922. contentPaddingRight: 6,
  923. contentPaddingLeft: 6,
  924. showMaximize: !1,
  925. showMinimize: !1,
  926. allowMaximize: !1,
  927. allowMinimize: !1,
  928. resizable: !0,
  929. visibility: 'excluded',
  930. textColor: '#bfbfbf',
  931. });
  932. c.setPadding(10);
  933. c.setLayout(new qx.ui.layout.VBox(10));
  934. var f = new qx.ui.container.Composite(
  935. new qx.ui.layout.VBox(2).set({ alignX: 'left' })
  936. ),
  937. b = new qx.ui.basic.Label('You can now add your player to CnCEco');
  938. f.add(b);
  939. b = new qx.ui.basic.Label('');
  940. f.add(b);
  941. b = new qx.ui.basic.Label(
  942. 'Click button below to add your player to your CnCEco account'
  943. );
  944. f.add(b);
  945. var b = new qx.ui.container.Composite(
  946. new qx.ui.layout.VBox(2).set({ alignX: 'right' })
  947. ),
  948. d = new qx.ui.form.Button('add player');
  949. b.add(d);
  950. d.addListener(
  951. 'execute',
  952. function() {
  953. c.close();
  954. // CncEcomain.getInstance().winOpen('', content)
  955. qx.core.Init.getApplication().showExternal(
  956. 'https://www.cnc-eco.de/user?' + content
  957. );
  958. },
  959. this
  960. );
  961. c.add(f);
  962. c.add(b);
  963. c.center();
  964. c.open();
  965. },
  966. getPoiInfo: function() {
  967. function c(b, c) {
  968. try {
  969. var f = c.c;
  970. M = {};
  971. for (var d in f) {
  972. var g = f[d];
  973. M[d] = {};
  974. M[d].x = g.x;
  975. M[d].y = g.y;
  976. M[d].n = g.n;
  977. I.push([M[d].n, M[d].x, M[d].y, c.n]);
  978. }
  979. } catch (C) {
  980. h('onPlayerInfo: ', C);
  981. }
  982. }
  983. x = [];
  984. I = [];
  985. var f = ClientLib.Data.MainData.GetInstance(),
  986. b = f.get_Alliance().get_OwnedPOIs(),
  987. d = b.length,
  988. g = this.getWindow();
  989. g.push('search all Pois from Alliance\n');
  990. for (var n = 0; n < d; n++) {
  991. if (null !== b[n] && 'undefined' !== b[n]) {
  992. var q = phe.cnc.gui.util.Text.getPoiInfosByType(b[n].t).name,
  993. k = b[n].t,
  994. u = b[n].l,
  995. p = b[n].i,
  996. l = ClientLib.Base.PointOfInterestTypes.GetScoreByLevel(
  997. b[n].l
  998. ),
  999. O = phe.cnc.gui.util.Numbers.formatCoordinates(
  1000. b[n].x,
  1001. b[n].y
  1002. );
  1003. x.push([p, q, u, l, b[n].x, b[n].y, O, k]);
  1004. }
  1005. if (n + 1 == d)
  1006. for (
  1007. h('AlliancePois scanned'),
  1008. g.push('AlliancePois scanned\n'),
  1009. q = [],
  1010. q = f.get_Alliance().get_MemberDataAsArray(),
  1011. g.push('search all Playerbases\n'),
  1012. k = 0;
  1013. k < q.length;
  1014. k++
  1015. )
  1016. (W = q[k].Name),
  1017. ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
  1018. 'GetPublicPlayerInfoByName',
  1019. { name: W },
  1020. phe.cnc.Util.createEventDelegate(
  1021. ClientLib.Net.CommandResult,
  1022. this,
  1023. c
  1024. ),
  1025. !0
  1026. ),
  1027. k + 1 === q.length &&
  1028. (h('save all Playerbases'),
  1029. g.push('all Playerbases saved\n'),
  1030. CncEcomain.getInstance().getBasesOnPoi());
  1031. }
  1032. },
  1033. getBasesOnPoi: function() {
  1034. h('scan if Playerbase is in range of a AlliancePoi');
  1035. var c = this.getWindow();
  1036. c.push('scan if Playerbase is in range of a AlliancePoi\n');
  1037. E = [];
  1038. ClientLib.Data.MainData.GetInstance()
  1039. .get_Alliance()
  1040. .get_MemberDataAsArray();
  1041. window.setTimeout(function() {
  1042. for (var f = 0; f < I.length; f++) {
  1043. for (var b = 0; b < x.length; b++) {
  1044. var d = Math.abs(I[f][1] - x[b][4]),
  1045. g = Math.abs(I[f][2] - x[b][5]);
  1046. 2 < d ||
  1047. 2 < g ||
  1048. (2 == d && 2 == g) ||
  1049. E.push([
  1050. x[b][0],
  1051. x[b][1],
  1052. x[b][2],
  1053. x[b][3],
  1054. x[b][6],
  1055. I[f][0],
  1056. I[f][3],
  1057. x[b][4],
  1058. x[b][5],
  1059. x[b][7],
  1060. ]);
  1061. }
  1062. f + 1 === I.length &&
  1063. b === x.length &&
  1064. (h('Scan complete'),
  1065. c.push('Scan complete\n'),
  1066. CncEcomain.getInstance().SendPoiInfo());
  1067. }
  1068. }, 2e3);
  1069. },
  1070. SendPoiInfo: function() {
  1071. var c = this.getWindow();
  1072. c.push('Preparing to Send PoiInfo to Memberstats.de\n');
  1073. h('Preparing to Send PoiInfo');
  1074. window.setTimeout(function() {
  1075. function f() {
  1076. b.addListener('completed', function(b) {
  1077. '' !== b.getContent()
  1078. ? (h('hab was bekommen ' + b.getContent()),
  1079. c.push('complete Send PoiInfo to Memberstats.de\n'),
  1080. 'none' != CncEcomain.getInstance().getForumId()
  1081. ? ((b = CncEcomain.getInstance().getForumId()),
  1082. CncEcomain.getInstance().PoiForum(E, b))
  1083. : CncEcomain.getInstance().CreatePoiForum(E))
  1084. : h('hab nix bekommen ' + b.getContent());
  1085. });
  1086. b.send();
  1087. }
  1088. var b = new qx.io.remote.Request(
  1089. 'https://www.member-stats.de/poi/',
  1090. 'POST',
  1091. 'text/html'
  1092. );
  1093. b.setProhibitCaching(!1);
  1094. b.setRequestHeader('Content-Type', 'text/html');
  1095. b.setTimeout('3600000');
  1096. b.setResponseType('text/html');
  1097. if (null !== E) {
  1098. var d = ClientLib.Data.MainData.GetInstance(),
  1099. g = d.get_Server().get_WorldId(),
  1100. d = d.get_Alliance().get_Id();
  1101. b.setFormField('worldId', g);
  1102. b.setFormField('allianceId', d);
  1103. b.setData('PoiData');
  1104. b.setParameter('version', '4.7.5');
  1105. b.setFormField('count', E.length);
  1106. for (g = 0; g < E.length; g++)
  1107. b.setFormField('id' + g, E[g][0]),
  1108. b.setFormField('name' + g, E[g][1]),
  1109. b.setFormField('level' + g, E[g][2]),
  1110. b.setFormField('score' + g, E[g][3]),
  1111. b.setFormField('coords' + g, E[g][4]),
  1112. b.setFormField('playerBase' + g, E[g][5]),
  1113. b.setFormField('player' + g, E[g][6]),
  1114. b.setFormField('x' + g, E[g][7]),
  1115. b.setFormField('y' + g, E[g][8]),
  1116. b.setFormField('type' + g, E[g][9]),
  1117. g + 1 === E.length &&
  1118. (h('Send PoiInfo to https://www.member-stats.de'),
  1119. window.setTimeout(f, 1e3));
  1120. }
  1121. }, 2e3);
  1122. },
  1123. winOpen: function(c, f) {
  1124. var b = CncEcoScanner.Layout.window.getInstance(),
  1125. d = 'https://www.member-stats.de';
  1126. '' !== f && (d = 'https://www.cnc-eco.de/user?' + f);
  1127. if ('layout' == f) {
  1128. var g = ClientLib.Data.MainData.GetInstance();
  1129. var n = g.get_Player().get_Name();
  1130. d =
  1131. 'https://www.cnc-eco.de/layouts/' +
  1132. g.get_Server().get_WorldId();
  1133. }
  1134. var g = qx.core.Init.getApplication(),
  1135. q = new webfrontend.gui.CustomWindow(g.tr('tnf:external link')).set(
  1136. {
  1137. resizable: !1,
  1138. showClose: !1,
  1139. showMaximize: !1,
  1140. showMinimize: !1,
  1141. }
  1142. );
  1143. q.setLayout(new qx.ui.layout.VBox(10));
  1144. q.addListenerOnce('resize', q.center, q);
  1145. q.add(
  1146. new qx.ui.basic.Label(
  1147. g.tr('tnf:link will lead to an external page?') +
  1148. '<br />' +
  1149. g.tr('tnf:do you want to continue?')
  1150. ).set({ rich: !0, maxWidth: 360, wrap: !0, textColor: 'white' })
  1151. );
  1152. c = new qx.ui.container.Composite(
  1153. new qx.ui.layout.HBox(10).set({ alignX: 'right' })
  1154. );
  1155. var k = new webfrontend.ui.SoundButton(g.tr('tnf:no'));
  1156. k.addListener(
  1157. 'execute',
  1158. function(c) {
  1159. q.close();
  1160. 'layout' == f &&
  1161. (CncEcoScanner.getInstance().win.close(),
  1162. !0 !== b.active &&
  1163. CncEcoScanner.Layout.window
  1164. .getInstance()
  1165. .openWindow('CncEco Scan result'));
  1166. },
  1167. this
  1168. );
  1169. g = new webfrontend.ui.SoundButton(g.tr('tnf:yes'));
  1170. g.addListener(
  1171. 'execute',
  1172. function(c) {
  1173. q.close();
  1174. 'layout' == f &&
  1175. (CncEcoScanner.getInstance().win.close(),
  1176. !0 !== b.active &&
  1177. CncEcoScanner.Layout.window
  1178. .getInstance()
  1179. .openWindow('CncEco Scan result'));
  1180. c =
  1181. "<form name='LaunchForm' id='LaunchForm' action='" +
  1182. d +
  1183. "' method='POST'>";
  1184. c += "<input type='hidden' name='dummy' value='dummy' />";
  1185. 'layout' == f &&
  1186. (c +=
  1187. "<input type='hidden' name='name' value='" +
  1188. n +
  1189. "' />");
  1190. c +=
  1191. "</form><script type='text/javascript'>document.LaunchForm.submit();\x3c/script>";
  1192. var g = window.open('', '');
  1193. g.document.write(c);
  1194. g.document.close();
  1195. },
  1196. this
  1197. );
  1198. c.add(k);
  1199. c.add(g);
  1200. q.add(c);
  1201. q.setModal(!0);
  1202. q.open();
  1203. },
  1204. getForumId: function(c) {
  1205. c = ClientLib.Data.MainData.GetInstance()
  1206. .get_Forum()
  1207. .get_Forums();
  1208. var f = c.c,
  1209. b = 'none',
  1210. d = 1,
  1211. g;
  1212. for (g in c.d) {
  1213. if ('CncEco PoiInfo' == c.d[g].Title) return (b = c.d[g].Id);
  1214. if ('none' == b && d === f && d <= f) return b;
  1215. d++;
  1216. }
  1217. },
  1218. SortAlliancePois: function(c, f) {
  1219. function b(b, c) {
  1220. !0 === c && 0 === g
  1221. ? (d.push('Post all AlliancePois to Forum\n'), g++)
  1222. : !0 === c &&
  1223. (0 === U
  1224. ? U++
  1225. : 1 === U
  1226. ? h('do something postInfoAll')
  1227. : 2 < R && h('postInfoAll do is was schiaf glafn ' + R));
  1228. !0 !== c &&
  1229. d.push('ERROR: Post all AlliancePois to Forum\n' + c + '\n');
  1230. }
  1231. var d = CncEcomain.getInstance().getWindow();
  1232. d.push('Try to insert a post to "List of Alliance Poi"\n');
  1233. h('forumid: ' + c + ' threadid: ' + f);
  1234. for (
  1235. var g = 0,
  1236. n = [],
  1237. q = [],
  1238. k = [],
  1239. u = [],
  1240. p = [],
  1241. l = [],
  1242. O = [],
  1243. m = '',
  1244. A = 0;
  1245. A < x.length;
  1246. A++
  1247. ) {
  1248. var D = x[A][1],
  1249. w = x[A][7],
  1250. t = x[A][2],
  1251. C = x[A][0],
  1252. v = x[A][3],
  1253. z = x[A][6],
  1254. y = x[A][4],
  1255. r = x[A][5];
  1256. 2 === x[A][7] && n.push([C, D, t, v, y, r, z, w]);
  1257. 3 === x[A][7] && q.push([C, D, t, v, y, r, z, w]);
  1258. 4 === x[A][7] && k.push([C, D, t, v, y, r, z, w]);
  1259. 5 === x[A][7] && u.push([C, D, t, v, y, r, z, w]);
  1260. 6 === x[A][7] && p.push([C, D, t, v, y, r, z, w]);
  1261. 7 === x[A][7] && l.push([C, D, t, v, y, r, z, w]);
  1262. 8 === x[A][7] && O.push([C, D, t, v, y, r, z, w]);
  1263. if (A + 1 == x.length)
  1264. for (r = y = z = v = C = t = w = D = 0; r <= n.length; r++)
  1265. if (
  1266. (0 === r && (m += '[b][u]Tiberium[/u][/b]\n'),
  1267. r == n.length)
  1268. )
  1269. for (
  1270. var m = m + '\n',
  1271. m = m + '\n',
  1272. m = m + '[u]Tiberium TotalScore:[/u]\n',
  1273. m = m + ('[b]' + D + '[/b]\n'),
  1274. m = m + '[hr]\n',
  1275. F = 0;
  1276. F <= q.length;
  1277. F++
  1278. )
  1279. if (
  1280. (0 === F && (m += '[b][u]Crystal[/u][/b]\n'),
  1281. F == q.length)
  1282. )
  1283. for (
  1284. var m = m + '\n',
  1285. m = m + '\n',
  1286. m = m + '[u]Crystal TotalScore:[/u]\n',
  1287. m = m + ('[b]' + w + '[/b]\n'),
  1288. m = m + '[hr]\n',
  1289. G = 0;
  1290. G <= k.length;
  1291. G++
  1292. )
  1293. if (
  1294. (0 === G &&
  1295. (m += '[b][u]Reactor[/u][/b]\n'),
  1296. G == k.length)
  1297. )
  1298. for (
  1299. var m = m + '\n',
  1300. m = m + '\n',
  1301. m =
  1302. m +
  1303. '[u]Power TotalScore:[/u]\n',
  1304. m = m + ('[b]' + t + '[/b]\n'),
  1305. m = m + '[hr]\n',
  1306. B = 0;
  1307. B <= u.length;
  1308. B++
  1309. )
  1310. if (
  1311. (0 === B &&
  1312. (m +=
  1313. '[b][u]Tungsten[/u][/b]\n'),
  1314. B == u.length)
  1315. )
  1316. for (
  1317. var m = m + '\n',
  1318. m = m + '\n',
  1319. m =
  1320. m +
  1321. '[u]Tung TotalScore:[/u]\n',
  1322. m =
  1323. m +
  1324. ('[b]' +
  1325. C +
  1326. '[/b]\n'),
  1327. m = m + '[hr]\n',
  1328. E = 0;
  1329. E <= p.length;
  1330. E++
  1331. )
  1332. if (
  1333. (0 === E &&
  1334. (m +=
  1335. '[b][u]Uranium[/u][/b]\n'),
  1336. E == p.length)
  1337. )
  1338. for (
  1339. var m = m + '\n',
  1340. m = m + '\n',
  1341. m =
  1342. m +
  1343. '[u]Uran TotalScore:[/u]\n',
  1344. m =
  1345. m +
  1346. ('[b]' +
  1347. v +
  1348. '[/b]\n'),
  1349. m =
  1350. m +
  1351. '[hr]\n',
  1352. J = 0;
  1353. J <= l.length;
  1354. J++
  1355. )
  1356. if (
  1357. (0 === J &&
  1358. (m +=
  1359. '[b][u]Aircraft[/u][/b]\n'),
  1360. J == l.length)
  1361. )
  1362. for (
  1363. var m =
  1364. m +
  1365. '\n',
  1366. m =
  1367. m +
  1368. '\n',
  1369. m =
  1370. m +
  1371. '[u]Air TotalScore:[/u]\n',
  1372. m =
  1373. m +
  1374. ('[b]' +
  1375. z +
  1376. '[/b]\n'),
  1377. m =
  1378. m +
  1379. '[hr]\n',
  1380. K = 0;
  1381. K <=
  1382. O.length;
  1383. K++
  1384. )
  1385. 0 === K &&
  1386. (m +=
  1387. '[b][u]Resonator[/u][/b]\n'),
  1388. K ==
  1389. O.length
  1390. ? ((m +=
  1391. '\n'),
  1392. (m +=
  1393. '\n'),
  1394. (m +=
  1395. '[u]Reso TotalScore:[/u]\n'),
  1396. (m +=
  1397. '[b]' +
  1398. y +
  1399. '[/b]\n'))
  1400. : ((m +=
  1401. 'Level: ' +
  1402. O[
  1403. K
  1404. ][2] +
  1405. ' Score: ' +
  1406. O[
  1407. K
  1408. ][3] +
  1409. ' Coords: [coords]' +
  1410. O[
  1411. K
  1412. ][6] +
  1413. '[/coords]\n'),
  1414. (y +=
  1415. O[
  1416. K
  1417. ][3]));
  1418. else
  1419. (m +=
  1420. 'Level: ' +
  1421. l[J][2] +
  1422. ' Score: ' +
  1423. l[J][3] +
  1424. ' Coords: [coords]' +
  1425. l[J][6] +
  1426. '[/coords]\n'),
  1427. (z +=
  1428. l[
  1429. J
  1430. ][3]);
  1431. else
  1432. (m +=
  1433. 'Level: ' +
  1434. p[E][2] +
  1435. ' Score: ' +
  1436. p[E][3] +
  1437. ' Coords: [coords]' +
  1438. p[E][6] +
  1439. '[/coords]\n'),
  1440. (v += p[E][3]);
  1441. else
  1442. (m +=
  1443. 'Level: ' +
  1444. u[B][2] +
  1445. ' Score: ' +
  1446. u[B][3] +
  1447. ' Coords: [coords]' +
  1448. u[B][6] +
  1449. '[/coords]\n'),
  1450. (C += u[B][3]);
  1451. else
  1452. (m +=
  1453. 'Level: ' +
  1454. k[G][2] +
  1455. ' Score: ' +
  1456. k[G][3] +
  1457. ' Coords: [coords]' +
  1458. k[G][6] +
  1459. '[/coords]\n'),
  1460. (t += k[G][3]);
  1461. else
  1462. (m +=
  1463. 'Level: ' +
  1464. q[F][2] +
  1465. ' Score: ' +
  1466. q[F][3] +
  1467. ' Coords: [coords]' +
  1468. q[F][6] +
  1469. '[/coords]\n'),
  1470. (w += q[F][3]);
  1471. else
  1472. (m +=
  1473. 'Level: ' +
  1474. n[r][2] +
  1475. ' Score: ' +
  1476. n[r][3] +
  1477. ' Coords: [coords]' +
  1478. n[r][6] +
  1479. '[/coords]\n'),
  1480. (D += n[r][3]);
  1481. }
  1482. if (A == x.length)
  1483. if (2999 >= m.length)
  1484. ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
  1485. 'CreateForumPost',
  1486. { forumID: c, threadID: f, postMessage: m },
  1487. phe.cnc.Util.createEventDelegate(
  1488. ClientLib.Net.CommandResult,
  1489. this,
  1490. b
  1491. ),
  1492. !0
  1493. ),
  1494. h('All Pois inserted to Forum');
  1495. else
  1496. for (A in ((n = m.split('[hr]\n')), n))
  1497. ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
  1498. 'CreateForumPost',
  1499. { forumID: c, threadID: f, postMessage: n[A] },
  1500. phe.cnc.Util.createEventDelegate(
  1501. ClientLib.Net.CommandResult,
  1502. this,
  1503. b
  1504. ),
  1505. !0
  1506. ),
  1507. h('All Pois inserted to Forum');
  1508. },
  1509. SortWhoPois: function(c, f) {
  1510. function b(b, c) {
  1511. !0 === c && 0 === d
  1512. ? (g.push('Post "Who is at POI X" to Forum\n'), d++)
  1513. : !0 === c &&
  1514. (0 === R
  1515. ? R++
  1516. : 1 === R
  1517. ? (g.close(), h('do something postInfoWho'))
  1518. : 1 < R && h('postInfoWho do is was schiaf glafn ' + R));
  1519. !0 !== c &&
  1520. g.push('ERROR: Post "Who is at POI X" to Forum\n' + c + '\n');
  1521. }
  1522. var d = 0;
  1523. h('Try to insert a post to "Who is at POI X"');
  1524. var g = CncEcomain.getInstance().getWindow();
  1525. g.push('Try to insert a post to "Who is at POI X"\n');
  1526. for (
  1527. var n = [],
  1528. q = [],
  1529. k = [],
  1530. u = [],
  1531. p = [],
  1532. l = [],
  1533. r = [],
  1534. m = '',
  1535. A = 0,
  1536. D = 0,
  1537. w = 0,
  1538. t = 0,
  1539. C = 0,
  1540. v = 0,
  1541. z = 0,
  1542. y = 0;
  1543. y < x.length;
  1544. y++
  1545. ) {
  1546. for (
  1547. var B = x[y][0],
  1548. F = x[y][1],
  1549. G = x[y][2],
  1550. H = x[y][3],
  1551. N = x[y][4],
  1552. J = x[y][5],
  1553. K = x[y][6],
  1554. L = x[y][7],
  1555. M = 0;
  1556. M < E.length;
  1557. M++
  1558. ) {
  1559. var I = E[M][5],
  1560. P = E[M][6];
  1561. x[y][0] == E[M][0] &&
  1562. (2 == L &&
  1563. ('undefined' === typeof n[A] && (n[A] = []),
  1564. n[A].push([B, F, G, H, N, J, K, L, I, P])),
  1565. 3 == L &&
  1566. ('undefined' === typeof q[D] && (q[D] = []),
  1567. q[D].push([B, F, G, H, N, J, K, L, I, P])),
  1568. 4 == L &&
  1569. ('undefined' === typeof k[w] && (k[w] = []),
  1570. k[w].push([B, F, G, H, N, J, K, L, I, P])),
  1571. 5 == L &&
  1572. ('undefined' === typeof u[t] && (u[t] = []),
  1573. u[t].push([B, F, G, H, N, J, K, L, I, P])),
  1574. 6 == L &&
  1575. ('undefined' === typeof p[C]
  1576. ? ((p[C] = []),
  1577. p[C].push([B, F, G, H, N, J, K, L, I, P]),
  1578. C++)
  1579. : p[C].push([B, F, G, H, N, J, K, L, I, P])),
  1580. 7 == L &&
  1581. ('undefined' === typeof l[v] && (l[v] = []),
  1582. l[v].push([B, F, G, H, N, J, K, L, I, P])),
  1583. 8 == L &&
  1584. ('undefined' === typeof r[z] && (r[z] = []),
  1585. r[z].push([B, F, G, H, N, J, K, L, I, P])));
  1586. }
  1587. 'undefined' !== typeof n[A] && A++;
  1588. 'undefined' !== typeof q[D] && D++;
  1589. 'undefined' !== typeof k[w] && w++;
  1590. 'undefined' !== typeof u[t] && t++;
  1591. 'undefined' !== typeof p[C] && C++;
  1592. 'undefined' !== typeof l[v] && v++;
  1593. 'undefined' !== typeof r[z] && z++;
  1594. }
  1595. if (y == x.length) {
  1596. for (A = 0; A < n.length; A++)
  1597. for (
  1598. 0 === A && (m += '[b][u]Tiberium[/u][/b]\n'), D = 0;
  1599. D < n[A].length;
  1600. D++
  1601. )
  1602. 0 === D &&
  1603. (m +=
  1604. 'Level: ' +
  1605. n[A][D][2] +
  1606. ' Score: ' +
  1607. n[A][D][3] +
  1608. ' Coords [coords]' +
  1609. n[A][D][6] +
  1610. '[/coords]\n'),
  1611. (m +=
  1612. 'Player: [player]' +
  1613. n[A][D][9] +
  1614. '[/player] base: ' +
  1615. n[A][D][8] +
  1616. '\n'),
  1617. D + 1 == n[A].length && (m += '\n');
  1618. for (D = 0; D < q.length; D++)
  1619. for (
  1620. 0 === D && (m += '[hr]\n[b][u]Crystal[/u][/b]\n'), w = 0;
  1621. w < q[D].length;
  1622. w++
  1623. )
  1624. 0 === w &&
  1625. (m +=
  1626. 'Level: ' +
  1627. q[D][w][2] +
  1628. ' Score: ' +
  1629. q[D][w][3] +
  1630. ' Coords [coords]' +
  1631. q[D][w][6] +
  1632. '[/coords]\n'),
  1633. (m +=
  1634. 'Player: [player]' +
  1635. q[D][w][9] +
  1636. '[/player] base: ' +
  1637. q[D][w][8] +
  1638. '\n'),
  1639. w + 1 == q[D].length && (m += '\n');
  1640. for (w = 0; w < k.length; w++)
  1641. for (
  1642. 0 === w && (m += '[hr]\n[b][u]Reactor[/u][/b]\n'), t = 0;
  1643. t < k[w].length;
  1644. t++
  1645. )
  1646. 0 === t &&
  1647. (m +=
  1648. 'Level: ' +
  1649. k[w][t][2] +
  1650. ' Score: ' +
  1651. k[w][t][3] +
  1652. ' Coords [coords]' +
  1653. k[w][t][6] +
  1654. '[/coords]\n'),
  1655. (m +=
  1656. 'Player: [player]' +
  1657. k[w][t][9] +
  1658. '[/player] base: ' +
  1659. k[w][t][8] +
  1660. '\n'),
  1661. t + 1 == k[w].length && (m += '\n');
  1662. for (t = 0; t < u.length; t++)
  1663. for (
  1664. 0 === t && (m += '[hr]\n[b][u]Tungsten[/u][/b]\n'), C = 0;
  1665. C < u[t].length;
  1666. C++
  1667. )
  1668. 0 === C &&
  1669. (m +=
  1670. 'Level: ' +
  1671. u[t][C][2] +
  1672. ' Score: ' +
  1673. u[t][C][3] +
  1674. ' Coords [coords]' +
  1675. u[t][C][6] +
  1676. '[/coords]\n'),
  1677. (m +=
  1678. 'Player: [player]' +
  1679. u[t][C][9] +
  1680. '[/player] base: ' +
  1681. u[t][C][8] +
  1682. '\n'),
  1683. C + 1 == u[t].length && (m += '\n');
  1684. for (C = 0; C < p.length; C++)
  1685. for (
  1686. 0 === C && (m += '[hr]\n[b][u]Uranium[/u][/b]\n'), v = 0;
  1687. v < p[C].length;
  1688. v++
  1689. )
  1690. 0 === v &&
  1691. (m +=
  1692. 'Level: ' +
  1693. p[C][v][2] +
  1694. ' Score: ' +
  1695. p[C][v][3] +
  1696. ' Coords [coords]' +
  1697. p[C][v][6] +
  1698. '[/coords]\n'),
  1699. (m +=
  1700. 'Player: [player]' +
  1701. p[C][v][9] +
  1702. '[/player] base: ' +
  1703. p[C][v][8] +
  1704. '\n'),
  1705. v + 1 == p[C].length && (m += '\n');
  1706. for (v = 0; v < l.length; v++)
  1707. for (
  1708. 0 === v && (m += '[hr]\n[b][u]Aircraft[/u][/b]\n'), z = 0;
  1709. z < l[v].length;
  1710. z++
  1711. )
  1712. 0 === z &&
  1713. (m +=
  1714. 'Level: ' +
  1715. l[v][z][2] +
  1716. ' Score: ' +
  1717. l[v][z][3] +
  1718. ' Coords [coords]' +
  1719. l[v][z][6] +
  1720. '[/coords]\n'),
  1721. (m +=
  1722. 'Player: [player]' +
  1723. l[v][z][9] +
  1724. '[/player] base: ' +
  1725. l[v][z][8] +
  1726. '\n'),
  1727. z + 1 == l[v].length && (m += '\n');
  1728. for (z = 0; z < r.length; z++)
  1729. for (
  1730. 0 === z && (m += '[hr]\n[b][u]Resonator[/u][/b]\n'), y = 0;
  1731. y < r[z].length;
  1732. y++
  1733. )
  1734. 0 === y &&
  1735. (m +=
  1736. 'Level: ' +
  1737. r[z][y][2] +
  1738. ' Score: ' +
  1739. r[z][y][3] +
  1740. ' Coords [coords]' +
  1741. r[z][y][6] +
  1742. '[/coords]\n'),
  1743. (m +=
  1744. 'Player: [player]' +
  1745. r[z][y][9] +
  1746. '[/player] base: ' +
  1747. r[z][y][8] +
  1748. '\n'),
  1749. y + 1 == r[z].length && (m += '\n');
  1750. if (
  1751. A == n.length &&
  1752. D == q.length &&
  1753. w == k.length &&
  1754. t == u.length &&
  1755. C == p.length &&
  1756. v == l.length &&
  1757. z == r.length
  1758. )
  1759. if (((n = m.length), console.log(n), 2999 >= n))
  1760. ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
  1761. 'CreateForumPost',
  1762. { forumID: c, threadID: f, postMessage: m },
  1763. phe.cnc.Util.createEventDelegate(
  1764. ClientLib.Net.CommandResult,
  1765. this,
  1766. b
  1767. ),
  1768. !0
  1769. ) && h('who Pois inserted to Forum');
  1770. else {
  1771. var m = m.split('[hr]\n'),
  1772. Q;
  1773. for (Q in m)
  1774. ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
  1775. 'CreateForumPost',
  1776. { forumID: c, threadID: f, postMessage: m[Q] },
  1777. phe.cnc.Util.createEventDelegate(
  1778. ClientLib.Net.CommandResult,
  1779. this,
  1780. b
  1781. ),
  1782. !0
  1783. ),
  1784. h('who Pois inserted to Forum');
  1785. }
  1786. else
  1787. console.log(
  1788. 'tib ' +
  1789. A +
  1790. ' ' +
  1791. n.length +
  1792. ' cris ' +
  1793. D +
  1794. ' ' +
  1795. q.length +
  1796. ' reaktor ' +
  1797. w +
  1798. ' ' +
  1799. k.length +
  1800. ' tung ' +
  1801. t +
  1802. ' ' +
  1803. u.length +
  1804. ' uran ' +
  1805. C +
  1806. ' ' +
  1807. p.length +
  1808. ' luft ' +
  1809. v +
  1810. ' ' +
  1811. l.length +
  1812. ' reso ' +
  1813. z +
  1814. ' ' +
  1815. r.length
  1816. );
  1817. }
  1818. },
  1819. PoiForum: function(c, f) {
  1820. function b(b, c) {
  1821. !0 === b &&
  1822. '0' == c &&
  1823. ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
  1824. 'GetForumThreads',
  1825. { forumId: f, skip: 0, take: 10 },
  1826. phe.cnc.Util.createEventDelegate(
  1827. ClientLib.Net.CommandResult,
  1828. this,
  1829. d
  1830. ),
  1831. !0
  1832. );
  1833. }
  1834. function d(c, d) {
  1835. console.log(d);
  1836. for (var k in d) {
  1837. var h = d[k].i;
  1838. 'List of Alliance Poi' == d[k].t &&
  1839. 0 == n &&
  1840. (CncEcomain.getInstance().SortAlliancePois(f, h), (n = 1));
  1841. 'Who is at POI X' == d[k].t &&
  1842. 0 == q &&
  1843. (CncEcomain.getInstance().SortWhoPois(f, h), (q = 1));
  1844. }
  1845. 0 == n
  1846. ? (g.push('Try to create Thread "List of Alliance Poi"\n'),
  1847. ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
  1848. 'CreateForumThread',
  1849. {
  1850. forumID: f,
  1851. threadTitle: 'List of Alliance Poi',
  1852. firstPostMessage: '.',
  1853. subscribe: !0,
  1854. },
  1855. phe.cnc.Util.createEventDelegate(
  1856. ClientLib.Net.CommandResult,
  1857. this,
  1858. b
  1859. ),
  1860. !0
  1861. ))
  1862. : 0 == q &&
  1863. (g.push('Try to create Thread2 "Who is at POI X"\n'),
  1864. ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
  1865. 'CreateForumThread',
  1866. {
  1867. forumID: f,
  1868. threadTitle: 'Who is at POI X',
  1869. firstPostMessage: '.',
  1870. subscribe: !0,
  1871. },
  1872. phe.cnc.Util.createEventDelegate(
  1873. ClientLib.Net.CommandResult,
  1874. this,
  1875. b
  1876. ),
  1877. !0
  1878. ));
  1879. }
  1880. ClientLib.Data.MainData.GetInstance()
  1881. .get_Forum()
  1882. .get_Forums();
  1883. var g = this.getWindow(),
  1884. n = 0,
  1885. q = 0;
  1886. ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
  1887. 'GetForumThreads',
  1888. { forumId: f, skip: 0, take: 10 },
  1889. phe.cnc.Util.createEventDelegate(
  1890. ClientLib.Net.CommandResult,
  1891. this,
  1892. d
  1893. ),
  1894. !0
  1895. );
  1896. },
  1897. CreatePoiForum: function(c, f) {
  1898. if (
  1899. !0 ===
  1900. ClientLib.Data.MainData.GetInstance()
  1901. .get_Alliance()
  1902. .get_CanCreateForum()
  1903. ) {
  1904. var b = function() {
  1905. n.push('Try to create Thread "List of Alliance Poi"\n');
  1906. var b = CncEcomain.getInstance().getForumId(c),
  1907. b =
  1908. '{"session":"' +
  1909. k +
  1910. '", "forumID":' +
  1911. b +
  1912. ',"threadTitle":"List of Alliance Poi","subscribe":true,"firstPostMessage":"."}';
  1913. l.onload = function() {
  1914. '0' == l.responseText
  1915. ? (l.abort(),
  1916. h('Thread erstellt!!!'),
  1917. n.push(
  1918. 'Thread "List of Alliance Poi" created!\n'
  1919. ),
  1920. window.setTimeout(d, 1e3))
  1921. : h('ERROR: thread erstellen!');
  1922. };
  1923. l.open(
  1924. 'POST',
  1925. '/' +
  1926. q +
  1927. '/Presentation/Service.svc/ajaxEndpoint/CreateForumThread'
  1928. );
  1929. l.setRequestHeader('Content-Type', 'application/json');
  1930. l.send(b);
  1931. },
  1932. d = function() {
  1933. n.push('Try to create Thread2 "Who is at POI X"\n');
  1934. var b = CncEcomain.getInstance().getForumId(c),
  1935. b =
  1936. '{"session":"' +
  1937. k +
  1938. '", "forumID":' +
  1939. b +
  1940. ',"threadTitle":"Who is at POI X","subscribe":true,"firstPostMessage":"."}';
  1941. l.onload = function() {
  1942. '0' == l.responseText
  1943. ? (l.abort(),
  1944. h('Thread2 erstellt!!!'),
  1945. n.push('Thread "Who is at POI X" created!\n'),
  1946. window.setTimeout(g, 1e3))
  1947. : h('ERROR: Thread2 erstellen!');
  1948. };
  1949. l.open(
  1950. 'POST',
  1951. '/' +
  1952. q +
  1953. '/Presentation/Service.svc/ajaxEndpoint/CreateForumThread'
  1954. );
  1955. l.setRequestHeader('Content-Type', 'application/json');
  1956. l.send(b);
  1957. },
  1958. g = function() {
  1959. var b = CncEcomain.getInstance().getForumId(c);
  1960. CncEcomain.getInstance().PoiForum(c, b);
  1961. };
  1962. h('CreatePoiForum');
  1963. var n = this.getWindow();
  1964. n.push('Try to create PoiForum\n');
  1965. var q = ClientLib.Data.MainData.GetInstance()
  1966. .get_Server()
  1967. .get_WorldId(),
  1968. k = ClientLib.Net.CommunicationManager.GetInstance().get_InstanceId(),
  1969. l = new qx.bom.request.Xhr();
  1970. l.onload = function() {
  1971. '0' == l.responseText
  1972. ? (l.abort(),
  1973. h('forum erstellt!!!'),
  1974. n.push('created PoiForum\n'),
  1975. window.setTimeout(b, 1e3))
  1976. : h('ERROR: forum erstellt!');
  1977. };
  1978. var p =
  1979. '{"session":"' +
  1980. k +
  1981. '", "sharedAlliance":null,"Title":"CncEco PoiInfo","Description":"List of AlliancePois"}';
  1982. l.open(
  1983. 'POST',
  1984. '/' + q + '/Presentation/Service.svc/ajaxEndpoint/CreateForum'
  1985. );
  1986. l.setRequestHeader('Content-Type', 'application/json');
  1987. l.send(p);
  1988. } else n.push('no rights to create PoiForum\n');
  1989. },
  1990. getWindow: function() {
  1991. null === this.poiwindow &&
  1992. ((this.poiwindow = new CncEcoreport.window()),
  1993. this.poiwindow.moveTo(
  1994. window.innerWidth - 150 - this.poiwindow.getWidth() - 200,
  1995. 40
  1996. ));
  1997. return this.poiwindow;
  1998. },
  1999. getPoiWindow: function() {
  2000. null === this.poiInfoWindow &&
  2001. ((this.poiInfowindow = new CncEcoreport.window()),
  2002. this.poiInfoWindow.center());
  2003. return this.poiwindow;
  2004. },
  2005. _Allisupport: function() {
  2006. for (
  2007. var c = ClientLib.Data.MainData.GetInstance()
  2008. .get_AllianceSupportState()
  2009. .get_Bases().d,
  2010. f,
  2011. b = Object.keys(c),
  2012. d = b.length,
  2013. g = {},
  2014. n = 0,
  2015. q = 0,
  2016. k = d;
  2017. d--;
  2018.  
  2019. )
  2020. (f = c[b[d]]),
  2021. g.hasOwnProperty(f.get_Type()) || (g[f.get_Type()] = 0),
  2022. g[f.get_Type()]++,
  2023. 30 <= f.get_Level() && q++,
  2024. (n += f.get_Level());
  2025. n /= k;
  2026. c = ClientLib.Data.MainData.GetInstance()
  2027. .get_Alliance()
  2028. .get_MemberData().d;
  2029. g = 0;
  2030. b = Object.keys(c);
  2031. for (d = b.length; d--; ) (f = c[b[d]]), (g += f.Bases);
  2032. b =
  2033. 'Bases: ' +
  2034. g +
  2035. ' SupCount: ' +
  2036. k +
  2037. '(' +
  2038. ((k / g) * 100).toFixed(0) +
  2039. '%) \u00d8: ' +
  2040. n.toFixed(2) +
  2041. ' 30+: ' +
  2042. q +
  2043. '(' +
  2044. ((q / g) * 100).toFixed(0) +
  2045. '%)';
  2046. CncEcomain.getInstance()
  2047. .getWindow()
  2048. .push(b);
  2049. },
  2050. },
  2051. });
  2052. qx.Class.define('CncEcoPlayerinfo', {
  2053. type: 'singleton',
  2054. extend: qx.core.Object,
  2055. members: {
  2056. windowinterval: null,
  2057. windowbevoreunload: null,
  2058. get_info: function() {
  2059. try {
  2060. var c = ClientLib.Data.MainData.GetInstance();
  2061. B = c.get_Player();
  2062. B.get_Name();
  2063. B.get_AccountId();
  2064. T = c.get_Alliance();
  2065. c.get_Server().get_WorldId();
  2066. return !0;
  2067. } catch (f) {
  2068. (c = { func: 'get_info', class: 'CncEco5main' }),
  2069. (c.error = f),
  2070. h(f),
  2071. beta && H(f, c);
  2072. }
  2073. },
  2074. initialize: function() {
  2075. try {
  2076. return (
  2077. h('CncEcoPlayerinfo load'),
  2078. h('CncEcoPlayerinfo load'),
  2079. h('CncEcoPlayerinfo load'),
  2080. h('CncEcoPlayerinfo load'),
  2081. this.get_info() &&
  2082. ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
  2083. 'GetPublicPlayerInfo',
  2084. { id: playerId },
  2085. phe.cnc.Util.createEventDelegate(
  2086. ClientLib.Net.CommandResult,
  2087. this,
  2088. this.Playerinfo
  2089. ),
  2090. null
  2091. ),
  2092. (this.windowinterval = window.setInterval(function() {
  2093. CncEcoPlayerinfo.getInstance().interval();
  2094. }, 18e5)),
  2095. (this.windowbevoreunload = window.addEventListener(
  2096. 'beforeunload',
  2097. function() {
  2098. CncEcoPlayerinfo.getInstance().interval();
  2099. }
  2100. )),
  2101. !0
  2102. );
  2103. } catch (f) {
  2104. var c = { func: 'ini', class: 'CncEcoPlayerinfo' };
  2105. c.error = f;
  2106. h(f);
  2107. beta && H(f, c);
  2108. }
  2109. },
  2110. interval: function() {
  2111. try {
  2112. if (Main.get_info())
  2113. return (
  2114. ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
  2115. 'GetPublicPlayerInfo',
  2116. { id: playerId },
  2117. phe.cnc.Util.createEventDelegate(
  2118. ClientLib.Net.CommandResult,
  2119. this,
  2120. this.Playerinfo
  2121. ),
  2122. null
  2123. ),
  2124. !0
  2125. );
  2126. } catch (f) {
  2127. var c = { func: 'interval', class: 'CncEcoPlayerinfo' };
  2128. c.error = f;
  2129. h(f);
  2130. beta && H(f, c);
  2131. }
  2132. },
  2133. Playerinfo: function(c, f) {
  2134. try {
  2135. var b = { server: {} };
  2136. b.server.serverid = worldId;
  2137. b.server.serverName = MainData.get_Server()
  2138. .get_Name()
  2139. .trim();
  2140. if (0 < f.a) {
  2141. b.alli = {};
  2142. b.alli.alliId = f.a;
  2143. b.alli.alliName = f.an;
  2144. b.alli.cic = T.get_FirstLeaders().l;
  2145. b.alli.sc = T.get_SecondLeaders().l;
  2146. b.alli.roleinfo = T.get_Roles().d;
  2147. var d = MainData.get_Alliance().get_MemberData();
  2148. b.alli.member = d;
  2149. }
  2150. b.player = {};
  2151. b.player.name = playerName;
  2152. b.player.id = playerId;
  2153. b.player.accountid = accountId;
  2154. b.player.creationDate = B.get_CreationDate();
  2155. b.player.fraction = B.get_Faction();
  2156. b.player.bases = {};
  2157. b.player.pve = f.bd;
  2158. b.player.pvp = f.bd - f.bde;
  2159. b.player.points = f.p;
  2160. b.player.rank = f.r;
  2161. b.player.hascode = f.hchc;
  2162. b.player.maxcp = B.GetCommandPointMaxStorage();
  2163. b.player.actcp = Math.round(B.GetCommandPointCount());
  2164. b.player.funds = MainData.get_Inventory().get_PlayerFunds();
  2165. b.player.schirme = Math.round(B.GetSupplyPointCount());
  2166. b.player.RPoints = B.get_ResearchPoints();
  2167. b.player.CreditsCount = Math.round(B.GetCreditsCount());
  2168. var g = MainData.get_Player(),
  2169. n = g.get_Faction(),
  2170. q = ClientLib.Base.Tech.GetTechIdFromTechNameAndFaction(
  2171. ClientLib.Base.ETechName.Research_BaseFound,
  2172. n
  2173. ),
  2174. k = g
  2175. .get_PlayerResearch()
  2176. .GetResearchItemFomMdbId(q)
  2177. .get_NextLevelInfo_Obj(),
  2178. d = [],
  2179. u;
  2180. for (u in k.rr) 0 < k.rr[u].t && (d[k.rr[u].t] = k.rr[u].c);
  2181. var p = d[ClientLib.Base.EResourceType.Gold],
  2182. r = d[ClientLib.Base.EResourceType.ResearchPoints],
  2183. x = g.get_Credits(),
  2184. m =
  2185. (x.Delta + x.ExtraBonusDelta) *
  2186. ClientLib.Data.MainData.GetInstance()
  2187. .get_Time()
  2188. .get_StepsPerHour(),
  2189. A = (p - B.GetCreditsCount()) / m;
  2190. b.player.timeTOmcv = Math.round(3600 * A);
  2191. b.player.rpNeeded = r;
  2192. var D = MainData.get_Cities(),
  2193. w = f.c.length;
  2194. b.player.basecount = w;
  2195. for (u = 0; u < w; u++) {
  2196. var t = D.GetCity(f.c[u].i),
  2197. g = {};
  2198. g.Id = f.c[u].i;
  2199. g.Na = t.get_Name();
  2200. g.Po = f.c[u].p;
  2201. g.Lvl = parseFloat(t.get_LvlBase().toFixed(2));
  2202. g.Off = parseFloat(t.get_LvlOffense().toFixed(2));
  2203. g.Def = parseFloat(t.get_LvlDefense().toFixed(2));
  2204. g.PosX = f.c[u].x;
  2205. g.PosY = f.c[u].y;
  2206. var C = t.get_CityUnitsData();
  2207. g.repInf =
  2208. 0 < g.Off
  2209. ? C.GetRepairTimeFromEUnitGroup(
  2210. ClientLib.Data.EUnitGroup.Infantry,
  2211. !1
  2212. )
  2213. : 0;
  2214. g.repVeh =
  2215. 0 < g.Off
  2216. ? C.GetRepairTimeFromEUnitGroup(
  2217. ClientLib.Data.EUnitGroup.Vehicle,
  2218. !1
  2219. )
  2220. : 0;
  2221. g.repAir =
  2222. 0 < g.Off
  2223. ? C.GetRepairTimeFromEUnitGroup(
  2224. ClientLib.Data.EUnitGroup.Aircraft,
  2225. !1
  2226. )
  2227. : 0;
  2228. g.maxRep =
  2229. 0 < g.Off
  2230. ? t.GetResourceMaxStorage(
  2231. ClientLib.Base.EResourceType.RepairChargeInf
  2232. )
  2233. : 0;
  2234. g.availRep =
  2235. 0 < g.Off
  2236. ? ClientLib.Base.Resource.GetResourceCount(
  2237. t
  2238. .get_RepairOffenseResources()
  2239. .get_RepairChargeOffense()
  2240. )
  2241. : 0;
  2242. var v = t.get_SupportWeapon();
  2243. g.supWp = null !== v ? v.n : '';
  2244. v = t.get_SupportData();
  2245. g.supWplvl = null !== v ? v.get_Level() : 0;
  2246. var z = t.get_CityBuildingsData();
  2247. v = z.GetUniqueBuildingByTechName(
  2248. ClientLib.Base.ETechName.Construction_Yard
  2249. );
  2250. g.CY = null !== v ? v.get_CurrentLevel() : 0;
  2251. v = z.GetUniqueBuildingByTechName(
  2252. ClientLib.Base.ETechName.Defense_Facility
  2253. );
  2254. g.DF = null !== v ? v.get_CurrentLevel() : 0;
  2255. v = z.GetUniqueBuildingByTechName(
  2256. ClientLib.Base.ETechName.Defense_HQ
  2257. );
  2258. g.DHQ = null !== v ? v.get_CurrentLevel() : 0;
  2259. g.PP = Math.round(
  2260. t.GetResourceGrowPerHour(
  2261. ClientLib.Base.EResourceType.Power,
  2262. !1,
  2263. !1
  2264. )
  2265. );
  2266. g.PBP = Math.round(
  2267. t.GetResourceBonusGrowPerHour(
  2268. ClientLib.Base.EResourceType.Power
  2269. )
  2270. );
  2271. g.PAB = ClientLib.Data.MainData.GetInstance()
  2272. .get_Alliance()
  2273. .GetPOIBonusFromResourceType(
  2274. ClientLib.Base.EResourceType.Power
  2275. );
  2276. g.CP = Math.round(
  2277. ClientLib.Base.Resource.GetResourceGrowPerHour(
  2278. t.get_CityCreditsProduction(),
  2279. !1
  2280. )
  2281. );
  2282. g.CBP = Math.round(
  2283. ClientLib.Base.Resource.GetResourceBonusGrowPerHour(
  2284. t.get_CityCreditsProduction(),
  2285. !1
  2286. )
  2287. );
  2288. g.Tall = Math.round(
  2289. t.GetResourceGrowPerHour(
  2290. ClientLib.Base.EResourceType.Tiberium,
  2291. !1,
  2292. !1
  2293. ) +
  2294. t.GetResourceBonusGrowPerHour(
  2295. ClientLib.Base.EResourceType.Tiberium
  2296. ) +
  2297. ClientLib.Data.MainData.GetInstance()
  2298. .get_Alliance()
  2299. .GetPOIBonusFromResourceType(
  2300. ClientLib.Base.EResourceType.Tiberium
  2301. )
  2302. );
  2303. g.Call = Math.round(
  2304. t.GetResourceGrowPerHour(
  2305. ClientLib.Base.EResourceType.Crystal,
  2306. !1,
  2307. !1
  2308. ) +
  2309. t.GetResourceBonusGrowPerHour(
  2310. ClientLib.Base.EResourceType.Crystal
  2311. ) +
  2312. ClientLib.Data.MainData.GetInstance()
  2313. .get_Alliance()
  2314. .GetPOIBonusFromResourceType(
  2315. ClientLib.Base.EResourceType.Crystal
  2316. )
  2317. );
  2318. g.PPall = g.PP + g.PBP + g.PAB;
  2319. g.CPall = g.CP + g.CBP;
  2320. b.player.bases[u] = g;
  2321. b.player.bases[u].cncopt = V(g.Id, u);
  2322. }
  2323. b.player.mainoff = 0;
  2324. b.player.maindef = 0;
  2325. b.player.mainavailrep = 0;
  2326. b.player.mainrepinf = 0;
  2327. b.player.mainrepveh = 0;
  2328. b.player.mainrepair = 0;
  2329. b.player.supschnitt = 0;
  2330. b.player.defschnitt = 0;
  2331. b.player.tibgesamt = 0;
  2332. b.player.crigesamt = 0;
  2333. b.player.cashgesamt = 0;
  2334. b.player.powergesamt = 0;
  2335. b.player.mainpower = 0;
  2336. for (var y in b.player.bases)
  2337. delete b.player.bases[y].PP,
  2338. delete b.player.bases[y].PBP,
  2339. delete b.player.bases[y].PAB,
  2340. delete b.player.bases[y].CP,
  2341. delete b.player.bases[y].CBP,
  2342. b.player.bases[y].Off > b.player.mainoff &&
  2343. ((b.player.mainoff = b.player.bases[y].Off),
  2344. (b.player.mainpower = b.player.bases[y].PPall),
  2345. (b.player.maindef = b.player.bases[y].Def),
  2346. (b.player.mainavailrep = b.player.bases[y].availRep),
  2347. (b.player.mainrepinf = b.player.bases[y].repInf),
  2348. (b.player.mainrepveh = b.player.bases[y].repVeh),
  2349. (b.player.mainrepair = b.player.bases[y].repAir)),
  2350. (b.player.supschnitt += b.player.bases[y].supWplvl),
  2351. (b.player.defschnitt += b.player.bases[y].Def),
  2352. (b.player.tibgesamt += b.player.bases[y].Tall),
  2353. (b.player.crigesamt += b.player.bases[y].Call),
  2354. (b.player.cashgesamt += b.player.bases[y].CPall),
  2355. (b.player.powergesamt += b.player.bases[y].PPall);
  2356. b.player.supschnitt /= b.player.basecount;
  2357. b.player.defschnitt /= b.player.basecount;
  2358. b.player.supschnitt = b.player.supschnitt.toFixed(2);
  2359. b.player.defschnitt = b.player.defschnitt.toFixed(2);
  2360. var E = b.player.bases;
  2361. delete b.player.bases;
  2362. b.player.bases = E;
  2363. if (null !== l.xhr._xhr)
  2364. (xhr = l.xhr),
  2365. xhr.send(
  2366. 'https://www.member-stats.de/playerinfo.php?i=playerinfos',
  2367. 'POST',
  2368. null,
  2369. b,
  2370. this.callback
  2371. );
  2372. else {
  2373. var F = {
  2374. func: 'playerinfo',
  2375. class: 'CncEcoPlayerinfo',
  2376. error: 'CncEco.xhr.req !== null',
  2377. };
  2378. h('CncEco.xhr.req !== null');
  2379. beta && H('CncEco.xhr.req !== null', F);
  2380. }
  2381. } catch (G) {
  2382. (F = { func: 'playerinfo', class: 'CncEcoPlayerinfo' }),
  2383. (F.error = G),
  2384. h(G),
  2385. beta && H(G, F);
  2386. }
  2387. },
  2388. callback: function(c) {
  2389. try {
  2390. !1 !== JSON.isjson(c) &&
  2391. ('parse' === JSON.isjson(c)
  2392. ? JSON.parse(c)
  2393. : 'stringify' === JSON.isjson(c) && JSON.stringify(c));
  2394. } catch (f) {
  2395. (c = { func: 'callback', class: 'CncEcoPlayerinfo' }),
  2396. (c.error = f),
  2397. h(f),
  2398. beta && H(f, c);
  2399. }
  2400. },
  2401. },
  2402. });
  2403. qx.Class.define('CncEcoreport.window', {
  2404. extend: qx.ui.window.Window,
  2405. construct: function() {
  2406. qx.ui.window.Window.call(this);
  2407. this.set({
  2408. caption: 'CncEco Info',
  2409. icon: 'webfrontend/ui/icons/icn_show_combat_active.png',
  2410. layout: new qx.ui.layout.VBox(4),
  2411. width: 300,
  2412. height: 50,
  2413. contentPaddingTop: 0,
  2414. contentPaddingBottom: 6,
  2415. contentPaddingRight: 6,
  2416. contentPaddingLeft: 6,
  2417. showMaximize: !1,
  2418. showMinimize: !1,
  2419. allowMaximize: !1,
  2420. allowMinimize: !1,
  2421. resizable: !0,
  2422. visibility: 'excluded',
  2423. textColor: '#bfbfbf',
  2424. });
  2425. this.getChildControl('icon').set({
  2426. scale: !0,
  2427. width: 18,
  2428. height: 17,
  2429. alignY: 'middle',
  2430. marginLeft: 8,
  2431. });
  2432. this.add(
  2433. (this.logContainer = new qx.ui.container.Composite(
  2434. new qx.ui.layout.VBox()
  2435. ))
  2436. );
  2437. this.add(new qx.ui.core.Spacer(), { flex: 1 });
  2438. this.addListener('close', function() {
  2439. this.onClose();
  2440. });
  2441. },
  2442. members: {
  2443. logContainer: null,
  2444. onClose: function() {
  2445. this.removeAll();
  2446. this.add(
  2447. (this.logContainer = new qx.ui.container.Composite(
  2448. new qx.ui.layout.VBox()
  2449. ))
  2450. );
  2451. },
  2452. push: function(c, f) {
  2453. this.isActive() || this.open();
  2454. this.logContainer.add(new qx.ui.basic.Label(c.toString()));
  2455. f && this.logContainer.add(f);
  2456. },
  2457. delall: function() {
  2458. this.removeAll();
  2459. this.add(
  2460. (this.logContainer = new qx.ui.container.Composite(
  2461. new qx.ui.layout.VBox()
  2462. ))
  2463. );
  2464. },
  2465. initialize: function() {
  2466. try {
  2467. h('CncEcoreport.window loadet');
  2468. } catch (c) {
  2469. h(c);
  2470. }
  2471. },
  2472. },
  2473. });
  2474. var r = {
  2475. _g: function(c, f, b, d) {
  2476. c = c.toString().replace(/\s/gim, '');
  2477. f = c.match(f);
  2478. var g;
  2479. for (g = 1; g < d + 1; g++)
  2480. null !== f && 6 === f[g].length
  2481. ? console.debug(b, g, f[g])
  2482. : null !== f && 0 < f[g].length
  2483. ? console.warn(b, g, f[g])
  2484. : (console.error('Error - ', b, g, 'not found'),
  2485. console.warn(b, c));
  2486. return f;
  2487. },
  2488. patch: function() {
  2489. if (!d._patched) {
  2490. var c = ClientLib.Data.WorldSector.WorldObjectCity.prototype,
  2491. c = ClientLib.Data.WorldSector.WorldObjectNPCBase.prototype;
  2492. re = /100\){0,1};this\.(.{6})=Math.floor.*d\+=f;this\.(.{6})=\(/;
  2493. var f = r._g(
  2494. c.$ctor,
  2495. re,
  2496. 'ClientLib.Data.WorldSector.WorldObjectNPCBase',
  2497. 2
  2498. );
  2499. null !== f && 6 === f[1].length
  2500. ? (c.getLevel = function() {
  2501. return this[f[1]];
  2502. })
  2503. : console.error(
  2504. 'Error - ClientLib.Data.WorldSector.WorldObjectNPCBase.Level undefined'
  2505. );
  2506. null !== f && 6 === f[2].length
  2507. ? (c.getID = function() {
  2508. return this[f[2]];
  2509. })
  2510. : console.error(
  2511. 'Error - ClientLib.Data.WorldSector.WorldObjectNPCBase.ID undefined'
  2512. );
  2513. c = ClientLib.Data.WorldSector.WorldObjectNPCCamp.prototype;
  2514. re = /100\){0,1};this\.(.{6})=Math.floor.*this\.(.{6})=\(*g\>\>(22|0x16)\)*\&.*=-1;\}this\.(.{6})=\(/;
  2515. var b = r._g(
  2516. c.$ctor,
  2517. re,
  2518. 'ClientLib.Data.WorldSector.WorldObjectNPCCamp',
  2519. 4
  2520. );
  2521. null !== b && 6 === b[1].length
  2522. ? (c.getLevel = function() {
  2523. return this[b[1]];
  2524. })
  2525. : console.error(
  2526. 'Error - ClientLib.Data.WorldSector.WorldObjectNPCCamp.Level undefined'
  2527. );
  2528. null !== b && 6 === b[2].length
  2529. ? (c.getCampType = function() {
  2530. return this[b[2]];
  2531. })
  2532. : console.error(
  2533. 'Error - ClientLib.Data.WorldSector.WorldObjectNPCCamp.CampType undefined'
  2534. );
  2535. null !== b && 6 === b[4].length
  2536. ? (c.getID = function() {
  2537. return this[b[4]];
  2538. })
  2539. : console.error(
  2540. 'Error - ClientLib.Data.WorldSector.WorldObjectNPCCamp.ID undefined'
  2541. );
  2542. d._patched = !0;
  2543. }
  2544. },
  2545. },
  2546. d = null;
  2547. qx.Class.define('CncEcoScanner', {
  2548. type: 'singleton',
  2549. extend: qx.core.Object,
  2550. members: {
  2551. initialize: function() {
  2552. try {
  2553. h('Scanner loadet\n'),
  2554. CncEcomain.getInstance().AddMainMenu(
  2555. 'scan layouts',
  2556. function() {
  2557. CncEcoScanner.getInstance().scan();
  2558. },
  2559. 'Alt+s'
  2560. ),
  2561. (d = CncEcoScanner.getInstance()),
  2562. (d.win = CncEcomain.getInstance().getWindow()),
  2563. (d.storage = CncEcostorage.getInstance()),
  2564. (d.xhr = l.xhr),
  2565. (d.winOpen = CncEcomain.getInstance()),
  2566. d.startup();
  2567. } catch (c) {
  2568. h(c);
  2569. }
  2570. },
  2571. _patched: !1,
  2572. _bases: {},
  2573. _selectionBases: {},
  2574. _scanned: [],
  2575. _toScan: [],
  2576. _scanning: !1,
  2577. failCount: 0,
  2578. wincounter: 0,
  2579. basecounter: 0,
  2580. button: function() {
  2581. if (!0 === d._abort) {
  2582. var c = new qx.ui.form.Button('resume');
  2583. c.addListener(
  2584. 'execute',
  2585. function() {
  2586. d.resume();
  2587. },
  2588. this
  2589. );
  2590. } else
  2591. (c = new qx.ui.form.Button('stop')),
  2592. c.addListener(
  2593. 'execute',
  2594. function(c) {
  2595. d.abort();
  2596. var b = ClientLib.Data.MainData.GetInstance();
  2597. c = b.get_Player().get_Name();
  2598. var f = b.get_Server().get_WorldId(),
  2599. b = b.get_Alliance().get_Id();
  2600. d.xhr.send(
  2601. 'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' +
  2602. c +
  2603. '&w=' +
  2604. f +
  2605. '&a=' +
  2606. b,
  2607. 'POST',
  2608. null,
  2609. d._bases,
  2610. h
  2611. );
  2612. },
  2613. this
  2614. );
  2615. return c;
  2616. },
  2617. scan: function(c) {
  2618. h('start scan');
  2619. if (d._scanning) h('BaseScanner._scanning');
  2620. else if (
  2621. (null == c &&
  2622. (d.win.isActive() && (d.win.delall(), d.win.close()),
  2623. d.win.open()),
  2624. !0 === d._abort)
  2625. )
  2626. d.resume();
  2627. else {
  2628. d.win.push('start Scanning');
  2629. d._bases = {};
  2630. d._scanning = !0;
  2631. d._count = 0;
  2632. d._done = 0;
  2633. d.index = -1;
  2634. d._toScanMap = {};
  2635. d._toScan = [];
  2636. d.basecounter = 0;
  2637. c = d.storage.get('scan');
  2638. Array.isArray(c) ||
  2639. (d.storage.set('scan', '[]'), (c = d.storage.get('scan')));
  2640. for (var f = d.storage.get('scan').length; 800 <= f; )
  2641. c.shift(), f--, 800 >= f && d.storage.set('scan', c);
  2642. c = ClientLib.Data.MainData.GetInstance()
  2643. .get_Cities()
  2644. .get_AllCities().d;
  2645. for (var b in c)
  2646. c.hasOwnProperty(b) &&
  2647. ((f = c[b]),
  2648. void 0 === f && h('unable to find base: ' + b),
  2649. d.getNearByBases(f));
  2650. d.scanNextBase();
  2651. }
  2652. },
  2653. getNearByBases: function(c) {
  2654. for (
  2655. var f,
  2656. b = c.get_PosX(),
  2657. l = c.get_PosY(),
  2658. g =
  2659. ClientLib.Data.MainData.GetInstance()
  2660. .get_Server()
  2661. .get_MaxAttackDistance() - 0.5,
  2662. n = ClientLib.Data.MainData.GetInstance().get_World(),
  2663. q = 0,
  2664. k = l - 11;
  2665. k <= l + 11;
  2666. k++
  2667. )
  2668. for (var h = b - 11; h <= b + 11; h++) {
  2669. var p = Math.abs(b - h),
  2670. r = Math.abs(l - k),
  2671. p = Math.sqrt(p * p + r * r);
  2672. if (
  2673. !(
  2674. p >= g ||
  2675. void 0 !== d._toScanMap[h + ':' + k] ||
  2676. void 0 !== d._bases[h + ':' + k] ||
  2677. ((r = n.GetObjectFromPosition(h, k)),
  2678. null === r ||
  2679. (r.Type !==
  2680. ClientLib.Data.WorldSector.ObjectType.NPCBase &&
  2681. r.Type !==
  2682. ClientLib.Data.WorldSector.ObjectType
  2683. .NPCCamp) ||
  2684. ('function' === typeof r.getCampType &&
  2685. r.getCampType() ===
  2686. ClientLib.Data.Reports.ENPCCampType
  2687. .Destroyed))
  2688. )
  2689. ) {
  2690. var x = 0;
  2691. if (null !== d.storage.get('scan'))
  2692. if (
  2693. ((f = d.storage.get('scan')),
  2694. !0 === Array.isArray(f))
  2695. )
  2696. for (
  2697. var m = d.storage.get('scan').length, A = 0;
  2698. A < m;
  2699. A++
  2700. )
  2701. r.getID() === f[A] && (x = 1);
  2702. else d.storage.set('scan', '[]');
  2703. else d.storage.set('scan', '[]');
  2704. 0 < x ||
  2705. ((f = d.storage.get('scan')),
  2706. f.push(r.getID()),
  2707. CncEcostorage.getInstance().set('scan', f),
  2708. (m = ClientLib.Data.MainData.GetInstance()),
  2709. (f = m.get_Player().get_Name()),
  2710. (x = m.get_Server().get_WorldId()),
  2711. (m = m.get_Alliance().get_Id()),
  2712. (p = {
  2713. x: h,
  2714. y: k,
  2715. level: r.getLevel(),
  2716. id: r.getID(),
  2717. distance: p,
  2718. selectedBaseID: c.get_Id(),
  2719. alliance: m,
  2720. world: x,
  2721. player: f,
  2722. failCount: 0,
  2723. }),
  2724. d._toScan.push(p),
  2725. (d._toScanMap[h + ':' + k] = p),
  2726. q++);
  2727. }
  2728. }
  2729. },
  2730. abort: function() {
  2731. d._scanning = !1;
  2732. d._abort = !0;
  2733. d.win.delall();
  2734. d.win.push('stop scan');
  2735. d.win.push((' ' + d.index).slice(-3) + '/' + d._toScan.length);
  2736. d.win.push('', d.button());
  2737. },
  2738. resume: function() {
  2739. d._scanning = !0;
  2740. d._abort = !1;
  2741. d.win.delall();
  2742. d.win.push('resume scan');
  2743. d.win.push((' ' + d.index).slice(-3) + '/' + d._toScan.length);
  2744. d.win.push('', d.button());
  2745. d.scanNextBase();
  2746. },
  2747. done: function() {
  2748. d._done++;
  2749. var c = ClientLib.Data.MainData.GetInstance();
  2750. var f = c.get_Player().get_Name(),
  2751. b = c.get_Server().get_WorldId(),
  2752. l = c.get_Alliance().get_Id();
  2753. !1 === d._scanning && d._count === d._done && !1 === d._abort
  2754. ? (d.win.push(''),
  2755. 0 < d._count
  2756. ? (d.win.push('Done! (' + d._count + ')'),
  2757. d.win.push(''),
  2758. d.xhr.send(
  2759. 'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' +
  2760. f +
  2761. '&w=' +
  2762. b +
  2763. '&a=' +
  2764. l,
  2765. 'POST',
  2766. null,
  2767. d._bases,
  2768. h
  2769. ),
  2770. d.winOpen.winOpen('layout', 'layout'),
  2771. 5 > Object.keys(d._bases).length &&
  2772. ((c = CncEcoScanner.Layout.window.getInstance()),
  2773. !0 !== c.active &&
  2774. ((c.active = !0),
  2775. c.openWindow('CncEco Scan result', null, 1)),
  2776. c.FO(d._bases),
  2777. d.xhr.send(
  2778. 'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' +
  2779. f +
  2780. '&w=' +
  2781. b +
  2782. '&a=' +
  2783. l,
  2784. 'POST',
  2785. null,
  2786. d._bases,
  2787. h
  2788. ),
  2789. (d._bases = {})))
  2790. : (d.win.push('Done! 0 new layouts to scan'), d.win.push('')))
  2791. : !1 === d._scanning && d._count + 1 === d._done && !1 === d._abort
  2792. ? (d.win.delall(),
  2793. d.win.push(''),
  2794. 0 < d._count
  2795. ? (d.win.push('Done! (' + d._count + ')'),
  2796. d.win.push(''),
  2797. d.xhr.send(
  2798. 'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' +
  2799. f +
  2800. '&w=' +
  2801. b +
  2802. '&a=' +
  2803. l,
  2804. 'POST',
  2805. null,
  2806. d._bases,
  2807. h
  2808. ),
  2809. d.winOpen.winOpen('layout', 'layout'),
  2810. 5 > Object.keys(d._bases).length &&
  2811. ((c = CncEcoScanner.Layout.window.getInstance()),
  2812. !0 !== c.active &&
  2813. ((c.active = !0),
  2814. c.openWindow('CncEco Scan result', null, 1)),
  2815. c.FO(d._bases),
  2816. d.xhr.send(
  2817. 'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' +
  2818. f +
  2819. '&w=' +
  2820. b +
  2821. '&a=' +
  2822. l,
  2823. 'POST',
  2824. null,
  2825. d._bases,
  2826. h
  2827. ),
  2828. (d._bases = {})))
  2829. : (d.win.push('Done! 0 new layouts to scan'), d.win.push('')))
  2830. : !1 === d._scanning && !1 === d._abort && d.win.push('Scan');
  2831. },
  2832. getBaseLayout: function(c) {
  2833. var f = ClientLib.Data.MainData.GetInstance(),
  2834. b = f.get_Player().get_Name(),
  2835. l = f.get_Server().get_WorldId(),
  2836. f = f.get_Alliance().get_Id();
  2837. if (!d._abort)
  2838. if (void 0 === c)
  2839. (d._abort = !1),
  2840. (d._scanning = !1),
  2841. !1 === d._abort && d.done(),
  2842. h('[BaseScanner] base undefined');
  2843. else {
  2844. d._lastBaseID !== c.selectedBaseID &&
  2845. d.setCurrentBase(c.selectedBaseID);
  2846. ClientLib.Data.MainData.GetInstance()
  2847. .get_Cities()
  2848. .set_CurrentCityId(c.id);
  2849. var g = ClientLib.Data.MainData.GetInstance()
  2850. .get_Cities()
  2851. .GetCity(c.id);
  2852. ClientLib.Net.CommunicationManager.GetInstance().UserAction();
  2853. if (g.get_IsGhostMode()) return d.scanNextBase();
  2854. if (0 === g.GetBuildingsConditionInPercent())
  2855. return (
  2856. c.failCount++,
  2857. 30 === c.failCount
  2858. ? (h('[BaseScanner] max_fails'), d.scanNextBase())
  2859. : setTimeout(function() {
  2860. d.getBaseLayout(c);
  2861. }, 99)
  2862. );
  2863. var n = g.get_Name();
  2864. c.layout = d.getLayout(g);
  2865. c.name = n;
  2866. d._bases[c.x + ':' + c.y] = c;
  2867. d.basecounter++;
  2868. g = CncEcoScanner.Layout.window.getInstance();
  2869. !0 !== g.active &&
  2870. ((g.active = !0),
  2871. g.openWindow('CncEco Scan result', null, 1));
  2872. 4 < d.basecounter &&
  2873. ((d.basecounter = 0),
  2874. g.FO(d._bases),
  2875. d.xhr.send(
  2876. 'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' +
  2877. b +
  2878. '&w=' +
  2879. l +
  2880. '&a=' +
  2881. f,
  2882. 'POST',
  2883. null,
  2884. d._bases,
  2885. h
  2886. ),
  2887. (d._bases = {}));
  2888. ClientLib.Data.MainData.GetInstance()
  2889. .get_Server()
  2890. .get_WorldId();
  2891. ClientLib.Data.MainData.GetInstance()
  2892. .get_Player()
  2893. .get_Name();
  2894. d._count++;
  2895. d.printScanResults(c);
  2896. d.done();
  2897. d.scanNextBase();
  2898. }
  2899. },
  2900. scanNextBase: function() {
  2901. !0 !== d._abort &&
  2902. (void 0 === d.index ? (d.index = 0) : d.index++,
  2903. d.getBaseLayout(d._toScan[d.index]));
  2904. },
  2905. isScanning: function() {
  2906. return !0 === d._scanning;
  2907. },
  2908. printScanResults: function(c) {
  2909. d.win.delall();
  2910. if (!1 === d._abort)
  2911. switch (d.wincounter) {
  2912. case 0:
  2913. d.wincounter++;
  2914. d.win.push('Scanning');
  2915. break;
  2916. case 1:
  2917. d.wincounter++;
  2918. d.win.push('Scanning.');
  2919. break;
  2920. case 2:
  2921. d.wincounter++;
  2922. d.win.push('Scanning..');
  2923. break;
  2924. case 3:
  2925. d.wincounter = 0;
  2926. d.win.push('Scanning...');
  2927. break;
  2928. default:
  2929. d.win.push('Scanning');
  2930. }
  2931. else d.win.push('Scanning');
  2932. d.win.push((' ' + d.index).slice(-3) + '/' + d._toScan.length);
  2933. d.win.push('', d.button());
  2934. },
  2935. getLayout: function(c) {
  2936. for (var f = [], b = 0; 16 > b; b++)
  2937. for (var d = 0; 9 > d; d++)
  2938. switch (c.GetResourceType(d, b)) {
  2939. case 0:
  2940. f.push('.');
  2941. break;
  2942. case 1:
  2943. f.push('c');
  2944. break;
  2945. case 2:
  2946. f.push('t');
  2947. break;
  2948. case 4:
  2949. f.push('j');
  2950. break;
  2951. case 5:
  2952. f.push('h');
  2953. break;
  2954. case 6:
  2955. f.push('l');
  2956. break;
  2957. case 7:
  2958. f.push('k');
  2959. }
  2960. return f.join('');
  2961. },
  2962. setCurrentBase: function(c) {
  2963. var f = ClientLib.Data.MainData.GetInstance()
  2964. .get_Cities()
  2965. .get_AllCities().d[c];
  2966. ClientLib.Vis.VisMain.GetInstance().CenterGridPosition(
  2967. f.get_PosX(),
  2968. f.get_PosY()
  2969. );
  2970. ClientLib.Vis.VisMain.GetInstance().Update();
  2971. ClientLib.Vis.VisMain.GetInstance().ViewUpdate();
  2972. d._lastBaseID = c;
  2973. },
  2974. startup: function() {
  2975. r.patch();
  2976. phe.cnc.Util.attachNetEvent(
  2977. ClientLib.Vis.VisMain.GetInstance(),
  2978. 'ViewModeChange',
  2979. ClientLib.Vis.SelectionChange,
  2980. d,
  2981. d.onSelectionChange
  2982. );
  2983. },
  2984. destroy: function() {
  2985. phe.cnc.Util.detachNetEvent(
  2986. ClientLib.Vis.VisMain.GetInstance(),
  2987. 'ViewModeChange',
  2988. ClientLib.Vis.SelectionChange,
  2989. d,
  2990. d.onSelectionChange
  2991. );
  2992. },
  2993. onSelectionChange: function() {
  2994. try {
  2995. if (!d.isScanning() && !0 !== d._abort) {
  2996. d.failCount = 0;
  2997. d._bases = {};
  2998. d._count = 0;
  2999. d._done = 0;
  3000. d.index = -1;
  3001. d._toScanMap = {};
  3002. d._toScan = [];
  3003. void 0 !== d.selectionChange &&
  3004. (clearTimeout(d.selectionChange),
  3005. (d.selectionChange = void 0));
  3006. var c = ClientLib.Vis.VisMain.GetInstance().get_SelectedObject(),
  3007. c = ClientLib.Data.MainData.GetInstance()
  3008. .get_Cities()
  3009. .get_CurrentCity();
  3010. if (
  3011. null !== c &&
  3012. !0 ===
  3013. ClientLib.Data.MainData.GetInstance()
  3014. .get_Cities()
  3015. .get_CurrentCity()
  3016. .IsNPC()
  3017. ) {
  3018. for (id in d._scanned)
  3019. if (d._scanned[id] == c.get_Id()) {
  3020. console.log('already scanned');
  3021. return;
  3022. }
  3023. d._scanned.push(c.get_Id());
  3024. d.scanCurrentBase();
  3025. }
  3026. }
  3027. } catch (f) {
  3028. console.log(f);
  3029. }
  3030. },
  3031. scanCurrentBase: function() {
  3032. var c = ClientLib.Data.MainData.GetInstance().get_Cities(),
  3033. f = c.get_CurrentCity(),
  3034. b = c.get_CurrentOwnCity();
  3035. d.failCount++;
  3036. if (!(30 < d.failCount)) {
  3037. if (null === f)
  3038. return (
  3039. h('base = 0'),
  3040. (d.selectionChange = setTimeout(d.scanCurrentBase, 100)),
  3041. d.selectionChange
  3042. );
  3043. void 0 !== d.selectionChange &&
  3044. (clearTimeout(d.selectionChange), (d.selectionChange = void 0));
  3045. var c = f.get_PosX(),
  3046. l = f.get_PosY();
  3047. f.get_Id();
  3048. if (f.get_IsGhostMode()) d.failCount = 0;
  3049. else if (0 === f.GetBuildingsConditionInPercent())
  3050. d.selectionChange = setTimeout(d.scanCurrentBase, 100);
  3051. else {
  3052. d.failCount = 0;
  3053. var g = ClientLib.Data.MainData.GetInstance(),
  3054. n = g.get_Player().get_Name(),
  3055. q = g.get_Server().get_WorldId(),
  3056. g = g.get_Alliance().get_Id(),
  3057. k = ClientLib.Base.Util.CalculateDistance(
  3058. f.get_PosX(),
  3059. f.get_PosY(),
  3060. b.get_PosX(),
  3061. b.get_PosY()
  3062. ),
  3063. b = {
  3064. x: f.get_PosX(),
  3065. y: f.get_PosY(),
  3066. level: f.get_BaseLevel(),
  3067. id: f.get_Id(),
  3068. distance: k,
  3069. selectedBaseID: b.get_Id(),
  3070. alliance: g,
  3071. world: q,
  3072. player: n,
  3073. failCount: 0,
  3074. },
  3075. k = f.get_Name();
  3076. b.layout = d.getLayout(f);
  3077. b.name = k;
  3078. b.alliance = ClientLib.Data.MainData.GetInstance()
  3079. .get_Alliance()
  3080. .get_Id();
  3081. d._bases[c + ':' + l] = b;
  3082. d._selectionBases[c + ':' + l] = b;
  3083. ClientLib.Data.MainData.GetInstance()
  3084. .get_Server()
  3085. .get_WorldId();
  3086. ClientLib.Data.MainData.GetInstance()
  3087. .get_Player()
  3088. .get_Name();
  3089. ClientLib.Data.MainData.GetInstance()
  3090. .get_Alliance()
  3091. .get_Id();
  3092. d.xhr.send(
  3093. 'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' +
  3094. n +
  3095. '&w=' +
  3096. q +
  3097. '&a=' +
  3098. g,
  3099. 'POST',
  3100. null,
  3101. d._bases,
  3102. h
  3103. );
  3104. }
  3105. }
  3106. },
  3107. },
  3108. });
  3109. qx.Class.define('CncEcostorage', {
  3110. type: 'singleton',
  3111. extend: qx.core.Object,
  3112. members: {
  3113. get: function(c) {
  3114. c = localStorage.getItem('CncEco:' + c);
  3115. return null === c ? c : JSON.parse(c);
  3116. },
  3117. set: function(c, f) {
  3118. if (null === f || void 0 === f) return l.storage.remove(c);
  3119. 'string' !== typeof f && (f = JSON.stringify(f));
  3120. return localStorage.setItem('CncEco:' + c, f);
  3121. },
  3122. remove: function(c) {
  3123. return localStorage.removeItem('CncEco:' + c);
  3124. },
  3125. initialize: function() {
  3126. try {
  3127. h('CncEcostorage loadet');
  3128. } catch (c) {
  3129. h(c);
  3130. }
  3131. },
  3132. },
  3133. });
  3134. qx.Class.define('CncEcoReports', {
  3135. type: 'singleton',
  3136. extend: qx.core.Object,
  3137. statics: {
  3138. ResourceTypes: {},
  3139. },
  3140. defer: function(statics) {
  3141. // var fileManager = ClientLib.File.FileManager.GetInstance();
  3142. statics.ResourceTypes[
  3143. ClientLib.Base.EResourceType.Tiberium
  3144. ] = 1; // fileManager.GetPhysicalPath('ui/common/icn_res_tiberium.png');
  3145. statics.ResourceTypes[
  3146. ClientLib.Base.EResourceType.Crystal
  3147. ] = 1; // fileManager.GetPhysicalPath('ui/common/icn_res_chrystal.png');
  3148. statics.ResourceTypes[
  3149. ClientLib.Base.EResourceType.Gold
  3150. ] = 1; // fileManager.GetPhysicalPath('ui/common/icn_res_dollar.png');
  3151. statics.ResourceTypes[
  3152. ClientLib.Base.EResourceType.Power
  3153. ] = 1; // fileManager.GetPhysicalPath('ui/common/icn_res_power.png');
  3154. statics.ResourceTypes[
  3155. ClientLib.Base.EResourceType.ResearchPoints
  3156. ] = 1; // fileManager.GetPhysicalPath('ui/common/icn_res_research.png');
  3157. // const savedReports = CncEcostorage.getInstance().get('reports') || {}
  3158. // const date = new Date();
  3159. // date.setDate(date.getDate() - 15);
  3160. //
  3161. // Object.keys(savedReports).forEach(id => {
  3162. // console.log(id, savedReports[id], data)
  3163. // })
  3164. //
  3165. // CncEcostorage.getInstance().set('reports', savedReports)
  3166. },
  3167. members: {
  3168. reports: null,
  3169. newReports: [],
  3170. init: function() {
  3171. this.destroy()
  3172. const reports = ClientLib.Data.MainData.GetInstance().get_Reports();
  3173. this.reports = reports;
  3174. console.log('init reports', reports)
  3175.  
  3176. phe.cnc.Util.attachNetEvent(
  3177. reports,
  3178. 'ReportsDelivered',
  3179. ClientLib.Data.Reports.ReportsDelivered,
  3180. this,
  3181. this.onReportsDelivered
  3182. );
  3183. },
  3184. destroy: function() {
  3185. phe.cnc.Util.detachNetEvent(
  3186. ClientLib.Data.MainData.GetInstance().get_Reports(),
  3187. 'ReportDelivered',
  3188. ClientLib.Data.Reports.ReportDelivered,
  3189. this,
  3190. this.onReportDelivered
  3191. );
  3192. } ,
  3193. onReportsDelivered: function(reports) {
  3194. console.log('all reports delivered');
  3195. const savedReports = CncEcostorage.getInstance().get('reports') || {}
  3196. // console.log('savedReports - before', savedReports)
  3197. this.newReports = []; // reset reports
  3198. reports.forEach(report => {
  3199. const id = report.get_Id()
  3200. if(!savedReports[id]) {
  3201. savedReports[id] = report.get_Time()
  3202. this.newReports.push(report)
  3203. }
  3204. })
  3205. CncEcostorage.getInstance().set('reports', savedReports)
  3206. // console.log('savedReports', savedReports)
  3207. console.log('newReports', this.newReports)
  3208. this.newReports.length && this.onAllReportsLoaded()
  3209. },
  3210.  
  3211. onAllReportsLoaded: function() {
  3212. console.time('onAllReportsLoaded')
  3213. // console.log('all loaded reports');
  3214. // console.log(this.newReports);
  3215. if (this.newReports.length > 0) {
  3216. // this.newReports.forEach(report => {
  3217. // this.reports.RequestReportData(report);
  3218. // });
  3219.  
  3220. // var attackerBaseIds = [];
  3221. // var defenderBaseIds = [];
  3222. var repairTimeCosts = 0;
  3223. var minCommandPointCosts = 0;
  3224. var maxCommandPointCosts = 0;
  3225. // var firstAttack = null;
  3226. // var lastAttack = 0;
  3227.  
  3228. var loot = {};
  3229. var getTotalLootMethod, getRepairCostsMethod;
  3230.  
  3231. var reports = [];
  3232.  
  3233. // off
  3234. const { CombatReport } = ClientLib.Data.Reports;
  3235. if (
  3236. this.newReports[0].get_PlayerReportType() ===
  3237. ClientLib.Data.Reports.EPlayerReportType.CombatOffense
  3238. ) {
  3239. getTotalLootMethod =
  3240. CombatReport.prototype.GetAttackerTotalResourceReceived;
  3241. getRepairCostsMethod = CombatReport.prototype.GetAttackerRepairCosts;
  3242. }
  3243. // def
  3244. else {
  3245. getTotalLootMethod =
  3246. CombatReport.prototype.GetDefenderTotalResourceCosts;
  3247. getRepairCostsMethod = CombatReport.prototype.GetDefenderRepairCosts;
  3248. }
  3249.  
  3250. // init sever configs for cp costs
  3251. var server = ClientLib.Data.MainData.GetInstance().get_Server();
  3252. var player = ClientLib.Data.MainData.GetInstance().get_Player();
  3253. var combatCostMinimum = server.get_CombatCostMinimum();
  3254. var combatCostMinimumPvP = server.get_UsesRebalancingI()
  3255. ? server.get_PvPCombatCostMinimum()
  3256. : combatCostMinimum;
  3257. var combatCostPerFieldInside = server.get_CombatCostPerField();
  3258. var combatCostPerFieldOutside = server.get_CombatCostPerFieldOutsideTerritory();
  3259.  
  3260. // console.log({player, server})
  3261.  
  3262. // loop through all reports
  3263. for (var i = 0; i < this.newReports.length; i++) {
  3264. var report = this.newReports[i];
  3265. // console.log({ report });
  3266.  
  3267. var rapport = {};
  3268. rapport.id = report.get_Id();
  3269.  
  3270. if (!(report instanceof CombatReport)) {
  3271. continue;
  3272. }
  3273.  
  3274. rapport.attackerBaseId = report.get_AttackerBaseId();
  3275. rapport.defenderBaseId = report.get_DefenderBaseId();
  3276.  
  3277. // if (attackerBaseIds.indexOf(report.get_AttackerBaseId()) === -1) {
  3278. // attackerBaseIds.push(report.get_AttackerBaseId());
  3279. // }
  3280. //
  3281. // if (defenderBaseIds.indexOf(report.get_DefenderBaseId()) === -1) {
  3282. // defenderBaseIds.push(report.get_DefenderBaseId());
  3283. // }
  3284.  
  3285. // add repair time
  3286. repairTimeCosts += report.GetAttackerMaxRepairTime();
  3287. rapport.maxRep = report.GetAttackerMaxRepairTime();
  3288. rapport.infRep = report.GetAttackerInfantryRepairCosts();
  3289. rapport.vehRep = report.GetAttackerVehicleRepairCosts();
  3290. rapport.airRep = report.GetAttackerAirRepairCosts();
  3291.  
  3292. var distance = Math.sqrt(
  3293. Math.pow(
  3294. report.get_AttackerBaseXCoord() -
  3295. report.get_DefenderBaseXCoord(),
  3296. 2
  3297. ) +
  3298. Math.pow(
  3299. report.get_AttackerBaseYCoord() -
  3300. report.get_DefenderBaseYCoord(),
  3301. 2
  3302. )
  3303. );
  3304.  
  3305. rapport.distance = distance; // total distane between coords
  3306. let cost
  3307. switch (report.get_Type()) {
  3308. case ClientLib.Data.Reports.EReportType.Combat: // 1, pvp
  3309. var isFriendlyTerritory =
  3310. report.get_AttackerAllianceName() ===
  3311. report.get_DefenderAllianceName();
  3312. cost = Math.floor(
  3313. combatCostMinimumPvP +
  3314. (isFriendlyTerritory
  3315. ? combatCostPerFieldInside
  3316. : combatCostPerFieldOutside) *
  3317. distance
  3318. );
  3319. // minCommandPointCosts += cost;
  3320. // maxCommandPointCosts += cost;
  3321. rapport.def = true;
  3322. rapport.minCp = cost;
  3323. rapport.maxCp = cost;
  3324. break;
  3325. case ClientLib.Data.Reports.EReportType.NPCRaid: // 2, pvp
  3326. switch (parseInt(report.get_DefenderBaseName(), 10)) {
  3327. case ClientLib.Data.Reports.ENPCCampType.Base: // 4
  3328. case ClientLib.Data.Reports.ENPCCampType.Fortress: // 6
  3329. cost = Math.floor(
  3330. combatCostMinimum +
  3331. combatCostPerFieldOutside * distance
  3332. );
  3333. // minCommandPointCosts += cost;
  3334. // maxCommandPointCosts += cost;
  3335. rapport.off = true;
  3336. rapport.minCp = cost;
  3337. rapport.maxCp = cost;
  3338. break;
  3339. default:
  3340. const minCp = Math.floor(
  3341. combatCostMinimum +
  3342. combatCostPerFieldInside * distance
  3343. );
  3344. const maxCp = Math.floor(
  3345. combatCostMinimum +
  3346. combatCostPerFieldOutside * distance
  3347. );
  3348. // minCommandPointCosts += minCp;
  3349. // maxCommandPointCosts += maxCp;
  3350. rapport.off = true;
  3351. rapport.minCp = minCp;
  3352. rapport.maxCp = maxCp;
  3353. }
  3354. break;
  3355. case ClientLib.Data.Reports.EReportType.NPCPlayerCombat: // 5
  3356. // No repair time or command point cost for Forgotten attacks
  3357. break;
  3358. default:
  3359. throw 'Unexpected report type (' + report.get_Type() + ')';
  3360. }
  3361.  
  3362. rapport.time = report.get_Time();
  3363.  
  3364. /**
  3365. @discroption: calc the loot with out the rep res costs
  3366. */
  3367. for (var resourceType in CncEcoReports.ResourceTypes) {
  3368. var resourceCount =
  3369. getTotalLootMethod.call(report, resourceType) -
  3370. getRepairCostsMethod.call(report, resourceType);
  3371.  
  3372. if (resourceCount !== 0) {
  3373. if (!(resourceType in loot)) {
  3374. loot[resourceType] = 0;
  3375. }
  3376.  
  3377. loot[resourceType] += resourceCount;
  3378. }
  3379. }
  3380. rapport.loot = loot;
  3381.  
  3382. reports.push(rapport);
  3383. }
  3384.  
  3385. // console.log({
  3386. // server,
  3387. // player,
  3388. // combatCostMinimum,
  3389. // combatCostMinimumPvP,
  3390. // combatCostPerFieldInside,
  3391. // combatCostPerFieldOutside,
  3392. //
  3393. // minCommandPointCosts,
  3394. // maxCommandPointCosts,
  3395. // // firstAttack,
  3396. // // lastAttack,
  3397. // getTotalLootMethod,
  3398. // getRepairCostsMethod,
  3399. //
  3400. // // attackerBaseIds, // id off attacker bases, the player pvp attacker maybe
  3401. // // defenderBaseIds, // id of defender bases, the bases who got attacked, maybe the player also in pvp
  3402. //
  3403. // repairTimeCosts, // total time in s
  3404. // loot, //
  3405. // });
  3406. //
  3407. // console.warn('All reports');
  3408.  
  3409. fetch('https://cnc-eco.herokuapp.com/api/v1/reports/update', {
  3410. // fetch('http://localhost:8000/api/v1/reports/update', {
  3411. method: 'POST',
  3412. headers: {
  3413. "content-type": "application/json",
  3414. },
  3415. body: JSON.stringify({
  3416. reports,
  3417. world: server.get_WorldId(),
  3418. player: player.get_Name(),
  3419. playerId: player.get_Id(),
  3420. accountId: player.get_AccountId(),
  3421. })
  3422. }).then(async r => {
  3423. const data = await r.json()
  3424. console.log('all reports delivered', reports, data)
  3425. }).catch(e => console.warn(e))
  3426. }
  3427. console.timeEnd('onAllReportsLoaded')
  3428. },
  3429.  
  3430. initialize: function() {
  3431. this.init();
  3432. try {
  3433. h('CncEcoReports loaded');
  3434. } catch (c) {
  3435. h(c);
  3436. }
  3437. },
  3438. },
  3439. });
  3440. qx.Class.define('CncEcoxhr', {
  3441. type: 'singleton',
  3442. extend: qx.core.Object,
  3443. members: {
  3444. send: function(c, f) {
  3445. var b = new qx.bom.request.Xhr()._createNativeXhr();
  3446. b.timeout = 3e3;
  3447. b.onload = function() {
  3448. 1 == b.responseText
  3449. ? h('CncEcoxhr Send true!')
  3450. : 0 == b.responseText
  3451. ? h('CncEcoxhr is Error :: ' + b.responseText)
  3452. : 1 !== b.responseText;
  3453. b.abort();
  3454. };
  3455. b.ontimeout = function() {
  3456. h('xhr timeout');
  3457. b.abort();
  3458. };
  3459. b.onloadend = function() {
  3460. h('xhr timeout');
  3461. b.abort();
  3462. };
  3463. b.open('POST', c, !0);
  3464. b.setRequestHeader('Method', 'POST');
  3465. b.setRequestHeader('Content-Type', 'application/json');
  3466. b.send(JSON.stringify(f));
  3467. },
  3468. initialize: function() {
  3469. try {
  3470. h('CncEcoxhr loadet');
  3471. } catch (c) {
  3472. h(c);
  3473. }
  3474. },
  3475. },
  3476. });
  3477. l.xhr = {
  3478. _load: !1,
  3479. _xhr: null,
  3480. _timeout: 3e3,
  3481. start: function() {
  3482. var c = null;
  3483. if (window.XMLHttpRequest) c = new XMLHttpRequest();
  3484. else if (window.ActiveXObject)
  3485. try {
  3486. c = new ActiveXObject('Msxml2.XMLHTTP.6.0');
  3487. } catch (f) {
  3488. try {
  3489. c = new ActiveXObject('Msxml2.XMLHTTP.3.0');
  3490. } catch (b) {
  3491. h(b);
  3492. }
  3493. }
  3494. if (null === c) return !1;
  3495. l.xhr._load = !0;
  3496. l.xhr._xhr = c;
  3497. l.xhr._xhr.timeout = l.xhr._timeout;
  3498. return l.xhr._load;
  3499. },
  3500. send: function(c, f, b, d, g) {
  3501. try {
  3502. if (null !== l.xhr._xhr)
  3503. if (!1 !== l.xhr._load && null !== l.xhr._xhr) {
  3504. l.xhr._xhr.open(f, c, !0);
  3505. if (null !== b && 'object' == typeof b)
  3506. for (var n in b)
  3507. b[n].hasOwnProperty('name') &&
  3508. b[n].hasOwnProperty('value') &&
  3509. l.xhr._xhr.setRequestHeader(b[n].name, b[n].value);
  3510. l.xhr._xhr.onload = function() {
  3511. try {
  3512. 4 == l.xhr._xhr.readyState &&
  3513. 200 == l.xhr._xhr.status &&
  3514. 'function' == typeof g &&
  3515. g(l.xhr._xhr.responseText);
  3516. } catch (q) {
  3517. h(q);
  3518. }
  3519. };
  3520. null !== d
  3521. ? ('stringify' == JSON.isjson(d) &&
  3522. !0 === Array.isarray(d)) ||
  3523. (!0 === Object.isobj(d) && 'stringify' == JSON.isjson(d))
  3524. ? l.xhr._xhr.send(JSON.stringify(d))
  3525. : h(e)
  3526. : l.xhr._xhr.send(null);
  3527. } else alert('Ihr Browser unterstuetzt kein Ajax!');
  3528. } catch (q) {
  3529. h(q);
  3530. }
  3531. },
  3532. };
  3533. qx.Class.define('CncEcoScanner.Layout.window', {
  3534. type: 'singleton',
  3535. extend: qx.ui.window.Window,
  3536. construct: function() {
  3537. try {
  3538. this.base(arguments),
  3539. this.setWidth(925),
  3540. this.setHeight(700),
  3541. this.setContentPadding(10),
  3542. this.setShowMinimize(!1),
  3543. this.setShowMaximize(!0),
  3544. this.setShowClose(!0),
  3545. this.setResizable(!0),
  3546. this.setAllowMaximize(!0),
  3547. this.setAllowMinimize(!1),
  3548. this.setAllowClose(!0),
  3549. this.setShowStatusbar(!1),
  3550. this.setDecorator(null),
  3551. this.setPadding(10),
  3552. this.setLayout(new qx.ui.layout.Grow()),
  3553. this.addListener(
  3554. 'close',
  3555. function() {
  3556. this.active = !1;
  3557. this.row = 0;
  3558. this.ZW = [];
  3559. this.removeAll();
  3560. this.ZZ = new qx.ui.container.Scroll();
  3561. this.ZY = new qx.ui.container.Composite(
  3562. new qx.ui.layout.Flow()
  3563. );
  3564. this.add(this.ZZ, { flex: 3 });
  3565. this.ZZ.add(this.ZY);
  3566. },
  3567. this
  3568. ),
  3569. (this.ZW = []),
  3570. this.removeAll(),
  3571. (this.ZZ = new qx.ui.container.Scroll()),
  3572. (this.ZY = new qx.ui.container.Composite(new qx.ui.layout.Flow())),
  3573. this.add(this.ZZ, { flex: 3 }),
  3574. this.ZZ.add(this.ZY);
  3575. } catch (c) {
  3576. console.debug('CncEcoScanner.Layout.window construct: ', c);
  3577. }
  3578. },
  3579. members: {
  3580. ZW: null,
  3581. ZZ: null,
  3582. ZY: null,
  3583. ZX: null,
  3584. row: 0,
  3585. openWindow: function(c, f, b) {
  3586. try {
  3587. '' !== c && this.setCaption(c),
  3588. this.isVisible() && null === f
  3589. ? this.close()
  3590. : null !== b
  3591. ? (this.open(), this.moveTo(30, 100))
  3592. : (this.open(),
  3593. this.moveTo(30, 100),
  3594. null !== f ? this.FO(f) : this.FO());
  3595. } catch (S) {
  3596. console.log('CncEcoScanner.Layout.window.openWindow: ', S);
  3597. }
  3598. },
  3599. listener: function(c) {
  3600. var f = qx.core.Init.getApplication();
  3601. f.getBackgroundArea().closeCityInfo();
  3602. f.getPlayArea().setView(
  3603. ClientLib.Data.PlayerAreaViewMode.pavmCombatSetupDefense,
  3604. c,
  3605. 0,
  3606. 0
  3607. );
  3608. f = ClientLib.Data.MainData.GetInstance()
  3609. .get_Cities()
  3610. .get_CurrentOwnCity();
  3611. null != f &&
  3612. f.get_CityArmyFormationsManager().set_CurrentTargetBaseId(c);
  3613. },
  3614. FO: function(c) {
  3615. try {
  3616. if (!0 !== this.active)
  3617. return setTimeout(function() {
  3618. this.openWindow('', c);
  3619. }, 90);
  3620. var f = {
  3621. '.':
  3622. 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAADUExURQAAAKd6PdoAAAABdFJOUwBA5thmAAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==',
  3623. c:
  3624. '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',
  3625. t:
  3626. '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==',
  3627. },
  3628. b,
  3629. d = CncEcoScanner.getInstance()._bases;
  3630. null !== c && (d = c);
  3631. for (b in d) {
  3632. var g = d[b].layout,
  3633. n = g.match(/t/g).length,
  3634. l = g.match(/c/g).length;
  3635. switch (
  3636. ClientLib.Data.MainData.GetInstance()
  3637. .get_Player()
  3638. .get_Faction()
  3639. ) {
  3640. case ClientLib.Base.EFactionType.GDIFaction:
  3641. var k = 'G';
  3642. break;
  3643. case ClientLib.Base.EFactionType.NODFaction:
  3644. k = 'N';
  3645. }
  3646. for (
  3647. var h =
  3648. 'https://www.cnc-eco.de/b/map=2|' +
  3649. k +
  3650. '|' +
  3651. k +
  3652. '||' +
  3653. g +
  3654. '....................................|newEconomy',
  3655. p =
  3656. '<table border="2" cellspacing="0" cellpadding="0" onclick="CncEcoScanner.Layout.window.getInstance().listener(' +
  3657. d[b].id +
  3658. ')">',
  3659. p =
  3660. p +
  3661. ('<tr><td colspan="9"><font color="#FFF">' +
  3662. d[b].x +
  3663. ':' +
  3664. d[b].y +
  3665. '&nbsp;&nbsp;<img width="14" height="14" src="' +
  3666. f.t +
  3667. '"> ' +
  3668. n +
  3669. ' &nbsp;&nbsp; <img width="14" height="14" src="' +
  3670. f.c +
  3671. '"> ' +
  3672. l +
  3673. '</font></td></tr>'),
  3674. r = 0;
  3675. 72 > r;
  3676. r++
  3677. ) {
  3678. var x = r - 9 * Math.floor(r / 9);
  3679. 0 == x && (p += '<tr>');
  3680. p +=
  3681. '<td><img width="14" height="14" src="' +
  3682. f[g.charAt(r)] +
  3683. '"></td>';
  3684. 8 == x && (p += '</tr>');
  3685. }
  3686. p +=
  3687. '</table><a href="' +
  3688. h +
  3689. '" target="_blank" style="color:#FFFFFF;">CnCEco';
  3690. this.resourceLayout = new qx.ui.basic.Label().set({
  3691. backgroundColor: '#303030',
  3692. value: p,
  3693. padding: 10,
  3694. rich: !0,
  3695. });
  3696. 7 == n
  3697. ? this.resourceLayout.setBackgroundColor('#202820')
  3698. : 5 == n &&
  3699. this.resourceLayout.setBackgroundColor('#202028');
  3700. this.ZW.push(this.resourceLayout);
  3701. }
  3702. this.ZY.removeAll();
  3703. k = 0;
  3704. this.row > k && (k = this.row);
  3705. for (a = f = 0; a < this.ZW.length; a++)
  3706. this.ZY.add(this.ZW[a], { row: k, column: f }),
  3707. f++,
  3708. 5 < f && ((f = 0), k++, this.row++);
  3709. } catch (m) {
  3710. console.log(m);
  3711. }
  3712. },
  3713. },
  3714. });
  3715. qx.Class.define('CncEcoHIDE.window.container', {
  3716. extend: qx.ui.container.Composite,
  3717. construct: function(c) {
  3718. try {
  3719. qx.ui.container.Composite.call(this);
  3720. this.set({
  3721. layout: new qx.ui.layout.VBox(5),
  3722. padding: 5,
  3723. decorator: 'pane-light-opaque',
  3724. });
  3725. switch (c) {
  3726. case 'o':
  3727. console.log('add container o');
  3728. this.add(
  3729. new qx.ui.basic.Label('Hide Outposts').set({
  3730. alignX: 'center',
  3731. font: 'font_size_14_bold',
  3732. })
  3733. );
  3734. var f = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
  3735. f.add(
  3736. new qx.ui.basic.Label(this.tr('level < ')).set({
  3737. alignY: 'middle',
  3738. })
  3739. );
  3740. f.add(
  3741. (this.oLevel = new qx.ui.form.Spinner(1).set({
  3742. maximum: 65,
  3743. minimum: 1,
  3744. }))
  3745. );
  3746. this.oLevel.addListener('changeValue', this.onInputo, this);
  3747. f.add(
  3748. (this.btnLevelo = new qx.ui.form.Button('del').set({
  3749. toolTipText: 'delete outposts from view',
  3750. }))
  3751. );
  3752. this.btnLevelo.addListener('execute', this.delo, this);
  3753. f.add(
  3754. (this.btnhideo = new qx.ui.form.Button('hide').set({
  3755. toolTipText: 'hide targetinfo from view',
  3756. }))
  3757. );
  3758. this.btnhideo.addListener('execute', this.hideo, this);
  3759. this.add(f);
  3760. break;
  3761. case 'c':
  3762. console.log('add container c');
  3763. this.add(
  3764. new qx.ui.basic.Label('Hide Camps').set({
  3765. alignX: 'center',
  3766. font: 'font_size_14_bold',
  3767. })
  3768. );
  3769. f = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
  3770. f.add(
  3771. new qx.ui.basic.Label(this.tr('level < ')).set({
  3772. alignY: 'middle',
  3773. })
  3774. );
  3775. f.add(
  3776. (this.cLevel = new qx.ui.form.Spinner(1).set({
  3777. maximum: 65,
  3778. minimum: 1,
  3779. }))
  3780. );
  3781. this.cLevel.addListener('changeValue', this.onInputc, this);
  3782. f.add(
  3783. (this.btnLevelc = new qx.ui.form.Button('del').set({
  3784. toolTipText: 'delete camps from view',
  3785. }))
  3786. );
  3787. this.btnLevelc.addListener('execute', this.delc, this);
  3788. f.add(
  3789. (this.btnhidec = new qx.ui.form.Button('hide').set({
  3790. toolTipText: 'hide targetinfo from view',
  3791. }))
  3792. );
  3793. this.btnhidec.addListener('execute', this.hidec, this);
  3794. this.add(f);
  3795. break;
  3796. case 'b':
  3797. console.log('add container b');
  3798. this.add(
  3799. new qx.ui.basic.Label('Hide Bases').set({
  3800. alignX: 'center',
  3801. font: 'font_size_14_bold',
  3802. })
  3803. );
  3804. f = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
  3805. f.add(
  3806. new qx.ui.basic.Label(this.tr('level < ')).set({
  3807. alignY: 'middle',
  3808. })
  3809. );
  3810. f.add(
  3811. (this.bLevel = new qx.ui.form.Spinner(1).set({
  3812. maximum: 47,
  3813. minimum: 1,
  3814. }))
  3815. );
  3816. this.bLevel.addListener('changeValue', this.onInputb, this);
  3817. f.add(
  3818. (this.btnLevelb = new qx.ui.form.Button('del').set({
  3819. toolTipText: 'delete bases from view',
  3820. }))
  3821. );
  3822. this.btnLevelb.addListener('execute', this.delb, this);
  3823. f.add(
  3824. (this.btnhideb = new qx.ui.form.Button('hide').set({
  3825. toolTipText: 'hide targetinfo from view',
  3826. }))
  3827. );
  3828. this.btnhideb.addListener('execute', this.hideb, this);
  3829. this.add(f);
  3830. break;
  3831. case 'p':
  3832. console.log('add container p');
  3833. this.add(
  3834. new qx.ui.basic.Label('Hide Player').set({
  3835. alignX: 'center',
  3836. font: 'font_size_14_bold',
  3837. })
  3838. );
  3839. f = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
  3840. f.add(
  3841. new qx.ui.basic.Label(this.tr('level < ')).set({
  3842. alignY: 'middle',
  3843. })
  3844. );
  3845. f.add(
  3846. (this.pLevel = new qx.ui.form.Spinner(1).set({
  3847. maximum: 65,
  3848. minimum: 1,
  3849. }))
  3850. );
  3851. this.pLevel.addListener('changeValue', this.onInputp, this);
  3852. f.add(
  3853. (this.btnLevelp = new qx.ui.form.Button('del').set({
  3854. toolTipText: 'delete player from viev',
  3855. }))
  3856. );
  3857. this.btnLevelp.addListener('execute', this.delp, this);
  3858. f.add(
  3859. (this.btnhidep = new qx.ui.form.Button('hide').set({
  3860. toolTipText: 'hide targetinfo from view',
  3861. }))
  3862. );
  3863. this.btnhidep.addListener('execute', this.hidep, this);
  3864. this.add(f);
  3865. break;
  3866. case 'reset':
  3867. console.log('add container p');
  3868. this.add(
  3869. new qx.ui.basic.Label('Reset all').set({
  3870. alignX: 'center',
  3871. font: 'font_size_14_bold',
  3872. })
  3873. );
  3874. f = new qx.ui.container.Composite(
  3875. new qx.ui.layout.HBox(5, 'center')
  3876. );
  3877. f.add(
  3878. (this.btnReset = new qx.ui.form.Button('reset').set({
  3879. toolTipText: 'Reset view',
  3880. }))
  3881. );
  3882. this.btnReset.addListener('execute', this.reset, this);
  3883. this.add(f);
  3884. break;
  3885. default:
  3886. console.log('add container default'),
  3887. this.add(
  3888. new qx.ui.basic.Label('Hide all').set({
  3889. alignX: 'center',
  3890. font: 'font_size_14_bold',
  3891. })
  3892. ),
  3893. (f = new qx.ui.container.Composite(
  3894. new qx.ui.layout.HBox(5)
  3895. )),
  3896. f.add(
  3897. new qx.ui.basic.Label(this.tr('level < ')).set({
  3898. alignY: 'middle',
  3899. })
  3900. ),
  3901. f.add(
  3902. (this.aLevel = new qx.ui.form.Spinner(1).set({
  3903. maximum: 65,
  3904. minimum: 1,
  3905. }))
  3906. ),
  3907. this.aLevel.addListener('changeValue', this.onInputa, this),
  3908. f.add(
  3909. (this.btnLevela = new qx.ui.form.Button('del').set({
  3910. toolTipText: 'delete all targets from view',
  3911. }))
  3912. ),
  3913. this.btnLevela.addListener('execute', this.dela, this),
  3914. f.add(
  3915. (this.btnhidea = new qx.ui.form.Button('hide').set({
  3916. toolTipText: 'hide targetinfo from view',
  3917. }))
  3918. ),
  3919. this.btnhidea.addListener('execute', this.hidea, this),
  3920. this.add(f);
  3921. }
  3922. this.dirtySectors = {};
  3923. } catch (b) {
  3924. console.log(
  3925. 'Error setting up CncEcoHIDE.window.container Constructor: '
  3926. ),
  3927. console.log(b.toString());
  3928. }
  3929. },
  3930. destruct: function() {},
  3931. members: {
  3932. dirtySectors: null,
  3933. oLevel: null,
  3934. btnHideCurrent: null,
  3935. btndelCurrent: null,
  3936. cLevel: null,
  3937. bLevel: null,
  3938. pLevel: null,
  3939. aLevel: null,
  3940. btnLevelo: null,
  3941. btnLevelc: null,
  3942. btnLevelb: null,
  3943. btnLevelp: null,
  3944. btnLevela: null,
  3945. btnReset: null,
  3946. btnhideo: null,
  3947. btnhidec: null,
  3948. btnhideb: null,
  3949. btnhidep: null,
  3950. btnhidea: null,
  3951. markDirty: function(c) {
  3952. c.get_Id() in this.dirtySectors ||
  3953. (this.dirtySectors[c.get_Id()] = { alliance: [], player: [] });
  3954. },
  3955. onTick: function() {
  3956. this.onInput();
  3957. },
  3958. onInputo: function() {
  3959. this.onInput('o');
  3960. },
  3961. onInputc: function() {
  3962. this.onInput('c');
  3963. },
  3964. onInputb: function() {
  3965. this.onInput('b');
  3966. },
  3967. onInputp: function() {
  3968. this.onInput('p');
  3969. },
  3970. onInputa: function() {
  3971. this.onInput('a');
  3972. },
  3973. hideo: function() {
  3974. this.hide('o');
  3975. },
  3976. hidec: function() {
  3977. this.hide('c');
  3978. },
  3979. hideb: function() {
  3980. this.hide('b');
  3981. },
  3982. hidep: function() {
  3983. this.hide('p');
  3984. },
  3985. hidea: function() {
  3986. this.hide('a');
  3987. },
  3988. delo: function() {
  3989. this.del('o');
  3990. },
  3991. delc: function() {
  3992. this.del('c');
  3993. },
  3994. delb: function() {
  3995. this.del('b');
  3996. },
  3997. delp: function() {
  3998. this.del('p');
  3999. },
  4000. dela: function() {
  4001. this.del('a');
  4002. },
  4003. onInput: function(c) {
  4004. switch (c) {
  4005. case 'o':
  4006. var f = parseInt(this.oLevel.getValue(), 10);
  4007. break;
  4008. case 'c':
  4009. f = parseInt(this.cLevel.getValue(), 10);
  4010. break;
  4011. case 'p':
  4012. f = parseInt(this.pLevel.getValue(), 10);
  4013. break;
  4014. case 'b':
  4015. f = parseInt(this.bLevel.getValue(), 10);
  4016. break;
  4017. case 'a':
  4018. f = parseInt(this.aLevel.getValue(), 10);
  4019. }
  4020. console.log('value is ' + f + ' from ' + c);
  4021. },
  4022. del: function(c) {
  4023. for (
  4024. var f = ClientLib.Data.MainData.GetInstance()
  4025. .get_Cities()
  4026. .get_CurrentOwnCity(),
  4027. b = f.get_X(),
  4028. f = f.get_Y(),
  4029. d = ClientLib.Data.MainData.GetInstance().get_World(),
  4030. g = ClientLib.Vis.VisMain.GetInstance().get_Region(),
  4031. n = b - 16;
  4032. n < b + 16;
  4033. n++
  4034. )
  4035. for (var l = f - 16; l < f + 16; l++) {
  4036. var k = g.GetObjectFromPosition(
  4037. n * g.get_GridWidth(),
  4038. l * g.get_GridHeight()
  4039. );
  4040. if (null != k) {
  4041. var h = d.GetWorldSectorByCoords(n, l);
  4042. 'function' === typeof k.get_BaseLevel &&
  4043. (k.get_VisObjectType() ==
  4044. ClientLib.Vis.VisObject.EObjectType.RegionNPCCamp &&
  4045. (2 === k.get_CampType() &&
  4046. 'c' == c &&
  4047. Math.floor(k.get_BaseLevel()) <
  4048. parseInt(this.cLevel.getValue(), 10) &&
  4049. (k.Dispose(), this.markDirty(h)),
  4050. 3 === k.get_CampType() &&
  4051. 'o' == c &&
  4052. Math.floor(k.get_BaseLevel()) <
  4053. parseInt(this.oLevel.getValue(), 10) &&
  4054. (k.Dispose(), this.markDirty(h)),
  4055. 0 === k.get_CampType() &&
  4056. (k.Dispose(), this.markDirty(h))),
  4057. k.get_VisObjectType() ==
  4058. ClientLib.Vis.VisObject.EObjectType
  4059. .RegionCityType &&
  4060. 'p' == c &&
  4061. Math.floor(k.get_BaseLevel()) <
  4062. parseInt(this.pLevel.getValue(), 10) &&
  4063. !k.IsOwnBase() &&
  4064. (k.Dispose(), this.markDirty(h)),
  4065. k.get_VisObjectType() ==
  4066. ClientLib.Vis.VisObject.EObjectType.RegionNPCBase &&
  4067. 'b' == c &&
  4068. Math.floor(k.get_BaseLevel()) <
  4069. parseInt(this.bLevel.getValue(), 10) &&
  4070. (k.Dispose(), this.markDirty(h)),
  4071. 'a' == c &&
  4072. Math.floor(k.get_BaseLevel()) <
  4073. parseInt(this.aLevel.getValue(), 10) &&
  4074. ('function' === typeof k.IsOwnBase
  4075. ? k.IsOwnBase() ||
  4076. (k.Dispose(), this.markDirty(h))
  4077. : (k.Dispose(), this.markDirty(h))));
  4078. }
  4079. }
  4080. console.log(this.dirtySectors);
  4081. },
  4082. hide: function(c) {
  4083. for (
  4084. var f = ClientLib.Data.MainData.GetInstance()
  4085. .get_Cities()
  4086. .get_CurrentOwnCity(),
  4087. b = f.get_X(),
  4088. f = f.get_Y(),
  4089. d = ClientLib.Vis.VisMain.GetInstance().get_Region(),
  4090. g = b - 16;
  4091. g < b + 16;
  4092. g++
  4093. )
  4094. for (var l = f - 16; l < f + 16; l++) {
  4095. var h = d.GetObjectFromPosition(
  4096. g * d.get_GridWidth(),
  4097. l * d.get_GridHeight()
  4098. );
  4099. null != h &&
  4100. 'function' === typeof h.get_BaseLevel &&
  4101. (h.get_VisObjectType() ==
  4102. ClientLib.Vis.VisObject.EObjectType.RegionNPCCamp &&
  4103. (2 === h.get_CampType() &&
  4104. 'c' == c &&
  4105. Math.floor(h.get_BaseLevel()) <
  4106. parseInt(this.cLevel.getValue(), 10) &&
  4107. h.HideInfos(),
  4108. 3 === h.get_CampType() &&
  4109. 'o' == c &&
  4110. Math.floor(h.get_BaseLevel()) <
  4111. parseInt(this.oLevel.getValue(), 10) &&
  4112. h.HideInfos(),
  4113. 0 === h.get_CampType() && h.HideInfos()),
  4114. h.get_VisObjectType() ==
  4115. ClientLib.Vis.VisObject.EObjectType.RegionCityType &&
  4116. 'p' == c &&
  4117. Math.floor(h.get_BaseLevel()) <
  4118. parseInt(this.pLevel.getValue(), 10) &&
  4119. (h.IsOwnBase() || h.HideInfos()),
  4120. h.get_VisObjectType() ==
  4121. ClientLib.Vis.VisObject.EObjectType.RegionNPCBase &&
  4122. 'b' == c &&
  4123. Math.floor(h.get_BaseLevel()) <
  4124. parseInt(this.bLevel.getValue(), 10) &&
  4125. h.HideInfos(),
  4126. 'a' == c &&
  4127. Math.floor(h.get_BaseLevel()) <
  4128. parseInt(this.aLevel.getValue(), 10) &&
  4129. ('function' === typeof h.IsOwnBase
  4130. ? h.IsOwnBase() || h.HideInfos()
  4131. : h.HideInfos()));
  4132. }
  4133. },
  4134. reset: function(c) {
  4135. console.log('reset view');
  4136. this.showAll();
  4137. },
  4138. showAll: function() {
  4139. try {
  4140. ClientLib.Vis.VisMain.GetInstance()
  4141. .get_Region()
  4142. .ShowAllPlates();
  4143. } catch (c) {
  4144. console.log(c);
  4145. }
  4146. },
  4147. },
  4148. });
  4149. qx.Class.define('CncEcoHIDE.window.Window', {
  4150. type: 'singleton',
  4151. extend: qx.ui.window.Window,
  4152. construct: function() {
  4153. try {
  4154. this.base(arguments),
  4155. this.set({
  4156. layout: new qx.ui.layout.VBox().set({ spacing: 0 }),
  4157. contentPadding: 5,
  4158. contentPaddingTop: 0,
  4159. allowMaximize: !1,
  4160. showMaximize: !1,
  4161. allowMinimize: !1,
  4162. showMinimize: !1,
  4163. resizable: !1,
  4164. }),
  4165. this.setCaption('Hide targets'),
  4166. this.moveTo(150, 50),
  4167. this.add(new CncEcoHIDE.window.container('o')),
  4168. this.add(new CncEcoHIDE.window.container('c')),
  4169. this.add(new CncEcoHIDE.window.container('b')),
  4170. this.add(new CncEcoHIDE.window.container('p')),
  4171. this.add(new CncEcoHIDE.window.container('a')),
  4172. this.add(new CncEcoHIDE.window.container('reset')),
  4173. this.addListener('appear', this.onOpen, this),
  4174. this.addListener('close', this.onClose, this);
  4175. } catch (c) {
  4176. console.log('Error setting up CncEcoHIDE.window.Window Constructor: '),
  4177. console.log(c.toString());
  4178. }
  4179. },
  4180. destruct: function() {},
  4181. members: {
  4182. view: {},
  4183. onOpen: function() {
  4184. console.log('Window onOpen ');
  4185. },
  4186. onClose: function() {
  4187. console.log('Window onClose ');
  4188. },
  4189. initialize: function() {
  4190. try {
  4191. CncEcomain.getInstance().AddMainMenu(
  4192. 'hide targets',
  4193. function() {
  4194. CncEcoHIDE.window.Window.getInstance().open();
  4195. },
  4196. 'Alt+h'
  4197. ),
  4198. phe.cnc.Util.attachNetEvent(
  4199. ClientLib.Vis.VisMain.GetInstance(),
  4200. 'ViewModeChange',
  4201. ClientLib.Vis.ViewModeChange,
  4202. this,
  4203. this.viewChangeHandler
  4204. ),
  4205. (this.btnHideCurrent = new qx.ui.form.Button('Hide')),
  4206. this.btnHideCurrent.set({
  4207. width: 50,
  4208. appearance: 'button-text-small',
  4209. toolTipText: 'Hide From Map',
  4210. }),
  4211. this.btnHideCurrent.addListener(
  4212. 'click',
  4213. this.hideCurrent,
  4214. this
  4215. ),
  4216. (this.btndelCurrent = new qx.ui.form.Button('del')),
  4217. this.btndelCurrent.set({
  4218. width: 50,
  4219. appearance: 'button-text-small',
  4220. toolTipText: 'Delete From Map',
  4221. }),
  4222. this.btndelCurrent.addListener('click', this.delCurrent, this);
  4223. } catch (c) {
  4224. h(c);
  4225. }
  4226. },
  4227. viewChangeHandler: function(c, f) {
  4228. try {
  4229. var b = qx.core.Init.getApplication().getUIItem(
  4230. ClientLib.Data.Missions.PATH.OVL_PLAYAREA
  4231. ),
  4232. d = ClientLib.Data.MainData.GetInstance()
  4233. .get_Cities()
  4234. .get_CurrentCity();
  4235. null != d &&
  4236. (((this.view.ownCity =
  4237. d ===
  4238. ClientLib.Data.MainData.GetInstance()
  4239. .get_Cities()
  4240. .get_CurrentOwnCity()),
  4241. this.view.ownCity || f !== ClientLib.Vis.Mode.CombatSetup)
  4242. ? c === ClientLib.Vis.Mode.CombatSetup &&
  4243. (b.remove(this.btnHideCurrent),
  4244. b.remove(this.btndelCurrent))
  4245. : (b.add(this.btnHideCurrent, { right: 1, top: 33 }),
  4246. b.add(this.btndelCurrent, { right: 1, top: 60 })));
  4247. } catch (g) {
  4248. console.log(g);
  4249. }
  4250. },
  4251. hideCurrent: function() {
  4252. try {
  4253. var c = ClientLib.Data.MainData.GetInstance()
  4254. .get_Cities()
  4255. .get_CurrentCity(),
  4256. d = c.get_PosX(),
  4257. b = c.get_PosY(),
  4258. h = ClientLib.Vis.VisMain.GetInstance().get_Region();
  4259. h.GetObjectFromPosition(
  4260. d * h.get_GridWidth(),
  4261. b * h.get_GridHeight()
  4262. ).HideInfos();
  4263. qx.core.Init.getApplication()
  4264. .getMainOverlay()
  4265. ._onClose();
  4266. } catch (g) {
  4267. console.log(g);
  4268. }
  4269. },
  4270. delCurrent: function() {
  4271. console.log('___________del___________');
  4272. try {
  4273. var c = ClientLib.Data.MainData.GetInstance()
  4274. .get_Cities()
  4275. .get_CurrentCity(),
  4276. d = c.get_PosX(),
  4277. b = c.get_PosY(),
  4278. h = ClientLib.Vis.VisMain.GetInstance().get_Region();
  4279. h.GetObjectFromPosition(
  4280. d * h.get_GridWidth(),
  4281. b * h.get_GridHeight()
  4282. ).Dispose();
  4283. qx.core.Init.getApplication()
  4284. .getMainOverlay()
  4285. ._onClose();
  4286. } catch (g) {
  4287. console.log(g);
  4288. }
  4289. },
  4290. },
  4291. });
  4292. l.xhr = {
  4293. _load: !1,
  4294. _xhr: null,
  4295. _timeout: 3e3,
  4296. start: function() {
  4297. var c = null;
  4298. if (window.XMLHttpRequest) c = new XMLHttpRequest();
  4299. else if (window.ActiveXObject)
  4300. try {
  4301. c = new ActiveXObject('Msxml2.XMLHTTP.6.0');
  4302. } catch (b) {
  4303. try {
  4304. c = new ActiveXObject('Msxml2.XMLHTTP.3.0');
  4305. } catch (S) {
  4306. var d = { func: 'start', class: 'CncEco.xhr' };
  4307. d.error = S;
  4308. h(S);
  4309. beta && H(S, d);
  4310. }
  4311. }
  4312. if (null === c) return !1;
  4313. l.xhr._load = !0;
  4314. l.xhr._xhr = c;
  4315. l.xhr._xhr.timeout = l.xhr._timeout;
  4316. return l.xhr._load;
  4317. },
  4318. send: function(c, d, b, r, g) {
  4319. try {
  4320. if (null !== l.xhr._xhr)
  4321. if (!1 !== l.xhr._load && null !== l.xhr._xhr) {
  4322. l.xhr._xhr.open(d, c, !0);
  4323. if (null !== b && 'object' == typeof b)
  4324. for (var f in b)
  4325. b[f].hasOwnProperty('name') &&
  4326. b[f].hasOwnProperty('value') &&
  4327. l.xhr._xhr.setRequestHeader(b[f].name, b[f].value);
  4328. l.xhr._xhr.onload = function() {
  4329. try {
  4330. if (4 == l.xhr._xhr.readyState)
  4331. if (200 == l.xhr._xhr.status)
  4332. if ('function' == typeof g)
  4333. g(l.xhr._xhr.responseText);
  4334. else {
  4335. var b = {
  4336. func: 'send',
  4337. class: 'CncEco.xhr',
  4338. };
  4339. var c = 'typeof callback !== function';
  4340. b.error = c;
  4341. h(c);
  4342. beta && H(c, b);
  4343. }
  4344. else
  4345. (b = { func: 'send', class: 'CncEco.xhr' }),
  4346. (c = 'CncEco.xhr._xhr.status !== 200'),
  4347. (b.error = c),
  4348. h(c),
  4349. beta && H(c, b);
  4350. } catch (p) {
  4351. (b = {
  4352. func: 'send CncEco.xhr._xhr.onreadystatechange',
  4353. class: 'CncEco.xhr',
  4354. }),
  4355. (b.error = p),
  4356. h(p),
  4357. beta && H(p, b);
  4358. }
  4359. };
  4360. l.xhr._xhr.ontimeout = function() {
  4361. var b = {
  4362. func: 'CncEco.xhr._xhr.onerror',
  4363. class: 'CncEco.xhr',
  4364. error: 'ontimeout',
  4365. };
  4366. h('ontimeout');
  4367. beta && H('ontimeout', b);
  4368. };
  4369. if (null !== r)
  4370. if (
  4371. ('stringify' == JSON.isjson(r) &&
  4372. !0 === Array.isarray(r)) ||
  4373. (!0 === Object.isobj(r) &&
  4374. 'stringify' == JSON.isjson(r))
  4375. )
  4376. l.xhr._xhr.send(JSON.stringify(r));
  4377. else {
  4378. var q = {
  4379. func: 'send',
  4380. class: 'CncEco.xhr',
  4381. error:
  4382. "Array.isarray(data) && JSON.isjson(data) === 'stringify' || Object.isabj(data) JSON.isjson(data) === 'stringify'",
  4383. };
  4384. h(
  4385. "Array.isarray(data) && JSON.isjson(data) === 'stringify' || Object.isabj(data) JSON.isjson(data) === 'stringify'"
  4386. );
  4387. beta &&
  4388. H(
  4389. "Array.isarray(data) && JSON.isjson(data) === 'stringify' || Object.isabj(data) JSON.isjson(data) === 'stringify'",
  4390. q
  4391. );
  4392. }
  4393. else l.xhr._xhr.send(null);
  4394. } else alert('Ihr Browser unterstuetzt kein Ajax!');
  4395. } catch (k) {
  4396. (q = {
  4397. func: 'send CncEco.xhr._xhr.onreadystatechange',
  4398. class: 'CncEco.xhr',
  4399. }),
  4400. (q.error = k),
  4401. h(k),
  4402. beta && H(k, q);
  4403. }
  4404. },
  4405. };
  4406. l.xhr = l.xhr;
  4407. l.xhr.start = l.xhr.start;
  4408. l.xhr.name = 'CncEco.xhr';
  4409. window.CncEco = l;
  4410. return !0;
  4411. }
  4412. function X(h) {
  4413. var l = [],
  4414. d;
  4415. for (d in h)
  4416. if ('object' == typeof h[d] && h[d])
  4417. for (var c in h[d])
  4418. if (376877 <= PerforceChangelist) {
  4419. if ('object' == typeof h[d][c] && h[d][c] && 'd' in h[d][c]) {
  4420. var f = h[d][c].d;
  4421. if ('object' == typeof f && f)
  4422. for (var b in f)
  4423. 'object' == typeof f[b] &&
  4424. f[b] &&
  4425. 'get_CurrentLevel' in f[b] &&
  4426. l.push(f);
  4427. }
  4428. } else if (
  4429. 'object' == typeof h[d][c] &&
  4430. h[d][c] &&
  4431. 'l' in h[d][c] &&
  4432. ((f = h[d][c].l), 'object' == typeof f && f)
  4433. )
  4434. for (b in f)
  4435. 'object' == typeof f[b] &&
  4436. f[b] &&
  4437. 'get_CurrentLevel' in f[b] &&
  4438. l.push(f);
  4439. return l;
  4440. }
  4441. function V(baseId, r, d) {
  4442. h('CNCOpt Link loaded');
  4443. var c = {
  4444. selected_base: null,
  4445. keymap: {
  4446. GDI_Accumulator: 'a',
  4447. GDI_Refinery: 'r',
  4448. 'GDI_Trade Center': 'u',
  4449. GDI_Silo: 's',
  4450. 'GDI_Power Plant': 'p',
  4451. 'GDI_Construction Yard': 'y',
  4452. GDI_Airport: 'd',
  4453. GDI_Barracks: 'b',
  4454. GDI_Factory: 'f',
  4455. 'GDI_Defense HQ': 'q',
  4456. 'GDI_Defense Facility': 'w',
  4457. 'GDI_Command Center': 'e',
  4458. GDI_Support_Art: 'z',
  4459. GDI_Support_Air: 'x',
  4460. GDI_Support_Ion: 'i',
  4461. FOR_Silo: 's',
  4462. FOR_Refinery: 'r',
  4463. 'FOR_Tiberium Booster': 'b',
  4464. 'FOR_Crystal Booster': 'v',
  4465. 'FOR_Trade Center': 'u',
  4466. 'FOR_Defense Facility': 'w',
  4467. 'FOR_Construction Yard': 'y',
  4468. FOR_Harvester_Tiberium: 'h',
  4469. 'FOR_Defense HQ': 'q',
  4470. FOR_Harvester_Crystal: 'n',
  4471. NOD_Refinery: 'r',
  4472. 'NOD_Power Plant': 'p',
  4473. NOD_Harvester: 'h',
  4474. 'NOD_Construction Yard': 'y',
  4475. NOD_Airport: 'd',
  4476. 'NOD_Trade Center': 'u',
  4477. 'NOD_Defense HQ': 'q',
  4478. NOD_Barracks: 'b',
  4479. NOD_Silo: 's',
  4480. NOD_Factory: 'f',
  4481. NOD_Harvester_Crystal: 'n',
  4482. 'NOD_Command Post': 'e',
  4483. NOD_Support_Art: 'z',
  4484. NOD_Support_Ion: 'i',
  4485. NOD_Accumulator: 'a',
  4486. NOD_Support_Air: 'x',
  4487. 'NOD_Defense Facility': 'w',
  4488. GDI_Wall: 'w',
  4489. GDI_Cannon: 'c',
  4490. 'GDI_Antitank Barrier': 't',
  4491. GDI_Barbwire: 'b',
  4492. GDI_Turret: 'm',
  4493. GDI_Flak: 'f',
  4494. 'GDI_Art Inf': 'r',
  4495. 'GDI_Art Air': 'e',
  4496. 'GDI_Art Tank': 'a',
  4497. 'GDI_Def_APC Guardian': 'g',
  4498. 'GDI_Def_Missile Squad': 'q',
  4499. GDI_Def_Pitbull: 'p',
  4500. GDI_Def_Predator: 'd',
  4501. GDI_Def_Sniper: 's',
  4502. 'GDI_Def_Zone Trooper': 'z',
  4503. 'NOD_Def_Antitank Barrier': 't',
  4504. 'NOD_Def_Art Air': 'e',
  4505. 'NOD_Def_Art Inf': 'r',
  4506. 'NOD_Def_Art Tank': 'a',
  4507. 'NOD_Def_Attack Bike': 'p',
  4508. NOD_Def_Barbwire: 'b',
  4509. 'NOD_Def_Black Hand': 'z',
  4510. NOD_Def_Cannon: 'c',
  4511. NOD_Def_Confessor: 's',
  4512. NOD_Def_Flak: 'f',
  4513. 'NOD_Def_MG Nest': 'm',
  4514. 'NOD_Def_Militant Rocket Soldiers': 'q',
  4515. NOD_Def_Reckoner: 'g',
  4516. 'NOD_Def_Scorpion Tank': 'd',
  4517. NOD_Def_Wall: 'w',
  4518. FOR_Wall: 'w',
  4519. FOR_Barbwire_VS_Inf: 'b',
  4520. FOR_Barrier_VS_Veh: 't',
  4521. FOR_Inf_VS_Inf: 'g',
  4522. FOR_Inf_VS_Veh: 'r',
  4523. FOR_Inf_VS_Air: 'q',
  4524. FOR_Sniper: 'n',
  4525. FOR_Mammoth: 'y',
  4526. FOR_Veh_VS_Inf: 'o',
  4527. FOR_Veh_VS_Veh: 's',
  4528. FOR_Veh_VS_Air: 'u',
  4529. FOR_Turret_VS_Inf: 'm',
  4530. FOR_Turret_VS_Inf_ranged: 'a',
  4531. FOR_Turret_VS_Veh: 'v',
  4532. FOR_Turret_VS_Veh_ranged: 'd',
  4533. FOR_Turret_VS_Air: 'f',
  4534. FOR_Turret_VS_Air_ranged: 'e',
  4535. 'GDI_APC Guardian': 'g',
  4536. GDI_Commando: 'c',
  4537. GDI_Firehawk: 'f',
  4538. GDI_Juggernaut: 'j',
  4539. GDI_Kodiak: 'k',
  4540. GDI_Mammoth: 'm',
  4541. 'GDI_Missile Squad': 'q',
  4542. GDI_Orca: 'o',
  4543. GDI_Paladin: 'a',
  4544. GDI_Pitbull: 'p',
  4545. GDI_Predator: 'd',
  4546. GDI_Riflemen: 'r',
  4547. 'GDI_Sniper Team': 's',
  4548. 'GDI_Zone Trooper': 'z',
  4549. 'NOD_Attack Bike': 'b',
  4550. NOD_Avatar: 'a',
  4551. 'NOD_Black Hand': 'z',
  4552. NOD_Cobra: 'r',
  4553. NOD_Commando: 'c',
  4554. NOD_Confessor: 's',
  4555. 'NOD_Militant Rocket Soldiers': 'q',
  4556. NOD_Militants: 'm',
  4557. NOD_Reckoner: 'k',
  4558. NOD_Salamander: 'l',
  4559. 'NOD_Scorpion Tank': 'o',
  4560. 'NOD_Specter Artilery': 'p',
  4561. NOD_Venom: 'v',
  4562. NOD_Vertigo: 't',
  4563. '<last>': '.',
  4564. },
  4565. make_sharelink: function() {
  4566. try {
  4567. var f = c.selected_base,
  4568. b = ClientLib.Data.MainData.GetInstance()
  4569. .get_Cities()
  4570. .GetCity(f),
  4571. l = ClientLib.Data.MainData.GetInstance()
  4572. .get_Cities()
  4573. .get_CurrentOwnCity(),
  4574. g = ClientLib.Data.MainData.GetInstance().get_Alliance(),
  4575. n = ClientLib.Data.MainData.GetInstance().get_Server();
  4576. tbase = f;
  4577. tcity = b;
  4578. scity = l;
  4579. f = 'http://cncopt.com/?map=';
  4580. f += '3|';
  4581. switch (b.get_CityFaction()) {
  4582. case 1:
  4583. f += 'G|';
  4584. break;
  4585. case 2:
  4586. f += 'N|';
  4587. break;
  4588. case 3:
  4589. case 4:
  4590. case 5:
  4591. case 6:
  4592. f += 'F|';
  4593. break;
  4594. default:
  4595. h('cncopt: Unknown faction: ' + b.get_CityFaction()),
  4596. (f += 'E|');
  4597. }
  4598. switch (l.get_CityFaction()) {
  4599. case 1:
  4600. f += 'G|';
  4601. break;
  4602. case 2:
  4603. f += 'N|';
  4604. break;
  4605. case 3:
  4606. case 4:
  4607. case 5:
  4608. case 6:
  4609. f += 'F|';
  4610. break;
  4611. default:
  4612. h('cncopt: Unknown faction: ' + l.get_CityFaction()),
  4613. (f += 'E|');
  4614. }
  4615. f += b.get_Name() + '|';
  4616. defense_units = [];
  4617. for (l = 0; 20 > l; ++l) {
  4618. var q = [];
  4619. for (var k = 0; 9 > k; ++k) q.push(null);
  4620. defense_units.push(q);
  4621. }
  4622. a: {
  4623. for (var u = X(b), p = 0; p < u.length; ++p)
  4624. for (var x in u[p])
  4625. if (u[p][x].get_UnitGameData_Obj().n in aa) {
  4626. var B = u[p];
  4627. break a;
  4628. }
  4629. B = [];
  4630. }
  4631. if (376877 <= PerforceChangelist)
  4632. for (l in B) {
  4633. var m = B[l];
  4634. defense_units[m.get_CoordX()][m.get_CoordY() + 8] = m;
  4635. }
  4636. else
  4637. for (l = 0; l < B.length; ++l)
  4638. (m = B[l]),
  4639. (defense_units[m.get_CoordX()][m.get_CoordY() + 8] = m);
  4640. offense_units = [];
  4641. for (l = 0; 20 > l; ++l) {
  4642. q = [];
  4643. for (k = 0; 9 > k; ++k) q.push(null);
  4644. offense_units.push(q);
  4645. }
  4646. a: {
  4647. var A = X(b);
  4648. for (q = 0; q < A.length; ++q)
  4649. for (var D in A[q])
  4650. if (A[q][D].get_UnitGameData_Obj().n in ba) {
  4651. var w = A[q];
  4652. break a;
  4653. }
  4654. w = [];
  4655. }
  4656. if (376877 <= PerforceChangelist)
  4657. for (l in w)
  4658. (m = w[l]),
  4659. (offense_units[m.get_CoordX()][m.get_CoordY() + 16] = m);
  4660. else
  4661. for (l = 0; l < w.length; ++l)
  4662. (m = w[l]),
  4663. (offense_units[m.get_CoordX()][m.get_CoordY() + 16] = m);
  4664. a: {
  4665. for (var t in b)
  4666. if (
  4667. 'object' == typeof b[t] &&
  4668. b[t] &&
  4669. 0 in b[t] &&
  4670. 8 in b[t] &&
  4671. 'object' == typeof b[t][0] &&
  4672. b[t][0] &&
  4673. b[t][0] &&
  4674. 0 in b[t][0] &&
  4675. 15 in b[t][0] &&
  4676. 'object' == typeof b[t][0][0] &&
  4677. b[t][0][0] &&
  4678. 'BuildingIndex' in b[t][0][0]
  4679. ) {
  4680. var C = b[t];
  4681. break a;
  4682. }
  4683. C = null;
  4684. }
  4685. a: {
  4686. var v = b.get_CityBuildingsData(),
  4687. z;
  4688. for (z in v)
  4689. if (376877 <= PerforceChangelist) {
  4690. if (
  4691. 'object' === typeof v[z] &&
  4692. v[z] &&
  4693. 'd' in v[z] &&
  4694. 'c' in v[z] &&
  4695. 0 < v[z].c
  4696. ) {
  4697. var y = v[z].d;
  4698. break a;
  4699. }
  4700. } else if ('object' === typeof v[z] && v[z] && 'l' in v[z]) {
  4701. y = v[z].l;
  4702. break a;
  4703. }
  4704. y = void 0;
  4705. }
  4706. for (l = 0; 20 > l; ++l)
  4707. for (row = [], k = 0; 9 > k; ++k) {
  4708. var E = 16 < l ? null : C[k][l];
  4709. m = 0;
  4710. w = null;
  4711. E &&
  4712. 0 <= E.BuildingIndex &&
  4713. ((w = y[E.BuildingIndex]), (m = w.get_CurrentLevel()));
  4714. var F = defense_units[k][l];
  4715. F && (m = F.get_CurrentLevel());
  4716. var G = offense_units[k][l];
  4717. G && (m = G.get_CurrentLevel());
  4718. 1 < m && (f += m);
  4719. switch (16 < l ? 0 : b.GetResourceType(k, l)) {
  4720. case 0:
  4721. if (w) {
  4722. var H = w.get_MdbBuildingId();
  4723. GAMEDATA.Tech[H].n in c.keymap
  4724. ? (f += c.keymap[GAMEDATA.Tech[H].n])
  4725. : (h('cncopt [5]: Unhandled building: ' + H, w),
  4726. (f += '.'));
  4727. } else
  4728. F
  4729. ? F.get_UnitGameData_Obj().n in c.keymap
  4730. ? (f +=
  4731. c.keymap[F.get_UnitGameData_Obj().n])
  4732. : (h(
  4733. 'cncopt [5]: Unhandled unit: ' +
  4734. F.get_UnitGameData_Obj().n
  4735. ),
  4736. (f += '.'))
  4737. : G
  4738. ? G.get_UnitGameData_Obj().n in c.keymap
  4739. ? (f +=
  4740. c.keymap[G.get_UnitGameData_Obj().n])
  4741. : (h(
  4742. 'cncopt [5]: Unhandled unit: ' +
  4743. G.get_UnitGameData_Obj().n
  4744. ),
  4745. (f += '.'))
  4746. : (f += '.');
  4747. break;
  4748. case 1:
  4749. f = 0 > E.BuildingIndex ? f + 'c' : f + 'n';
  4750. break;
  4751. case 2:
  4752. f = 0 > E.BuildingIndex ? f + 't' : f + 'h';
  4753. break;
  4754. case 4:
  4755. f += 'j';
  4756. break;
  4757. case 5:
  4758. f += 'h';
  4759. break;
  4760. case 6:
  4761. f += 'l';
  4762. break;
  4763. case 7:
  4764. f += 'k';
  4765. break;
  4766. default:
  4767. h(
  4768. 'cncopt [4]: Unhandled resource type: ' +
  4769. b.GetResourceType(k, l)
  4770. ),
  4771. (f += '.');
  4772. }
  4773. }
  4774. g &&
  4775. scity.get_AllianceId() == tcity.get_AllianceId() &&
  4776. ((f += '|' + g.get_POITiberiumBonus()),
  4777. (f += '|' + g.get_POICrystalBonus()),
  4778. (f += '|' + g.get_POIPowerBonus()),
  4779. (f += '|' + g.get_POIInfantryBonus()),
  4780. (f += '|' + g.get_POIVehicleBonus()),
  4781. (f += '|' + g.get_POIAirBonus()),
  4782. (f += '|' + g.get_POIDefenseBonus()));
  4783. 1.2 !== n.get_TechLevelUpgradeFactorBonusAmount() &&
  4784. (f += '|newEconomy');
  4785. d.setFormField('opt' + r, f);
  4786. return f;
  4787. } catch (N) {
  4788. h('cncopt [1]: ', N);
  4789. }
  4790. },
  4791. };
  4792. c.selected_base = baseId;
  4793. c.make_sharelink();
  4794. }
  4795. function Z(h, r) {
  4796. CncEcomain.getInstance().remoteRequest('update', r);
  4797. }
  4798. function H(h, r) {
  4799. var d = {};
  4800. d.func = r.func;
  4801. d['class'] = r['class'];
  4802. d.message = h.message;
  4803. d.error = h.stack;
  4804. MainData = ClientLib.Data.MainData.GetInstance();
  4805. B = MainData.get_Player();
  4806. d.playerName = B.get_Name();
  4807. d.accountId = B.get_AccountId();
  4808. server = MainData.get_Server();
  4809. d.worldId = server.get_WorldId();
  4810. d.clientinfo = ca();
  4811. var c = null;
  4812. console.log(
  4813. '____________________________Mest5-errorreport->send______________________________________'
  4814. );
  4815. console.log(d);
  4816. console.log(
  4817. '_________________________________________________________________________________________'
  4818. );
  4819. if (window.XMLHttpRequest) c = new XMLHttpRequest();
  4820. else if (window.ActiveXObject)
  4821. try {
  4822. c = new ActiveXObject('Msxml2.XMLHTTP.6.0');
  4823. } catch (f) {
  4824. try {
  4825. c = new ActiveXObject('Msxml2.XMLHTTP.3.0');
  4826. } catch (b) {
  4827. console.log(b);
  4828. }
  4829. }
  4830. null !== c &&
  4831. c.open('POST', 'https://www.member-stats.de/playerinfo.php?i=error', !0);
  4832. c.onreadystatechange = function() {
  4833. 4 == this.readyState &&
  4834. (200 == this.status ? console.log(h) : console.log(this.statusText));
  4835. };
  4836. c.send(JSON.stringify(d));
  4837. }
  4838. function ca() {
  4839. var h,
  4840. r = navigator.userAgent.toLowerCase(),
  4841. d = function(b) {
  4842. return b.test(r);
  4843. },
  4844. c = d(/opera/),
  4845. f = d(/chrome/),
  4846. b = d(/webkit/),
  4847. x = !f && d(/safari/);
  4848. x && d(/applewebkit\/4/);
  4849. x && d(/version\/3/);
  4850. x && d(/version\/4/);
  4851. var g = !c && d(/msie/),
  4852. n = g && d(/msie 7/),
  4853. q = g && d(/msie 8/),
  4854. k = g && !n && !q,
  4855. u = !b && d(/gecko/);
  4856. var p = u && d(/rv:1\.8/);
  4857. var B = u && d(/rv:1\.9/),
  4858. E = d(/windows|win32/),
  4859. m = d(/macintosh|mac os x/);
  4860. d(/adobeair/);
  4861. var A = d(/linux/);
  4862. /^https/i.test(window.location.protocol);
  4863. var D = '',
  4864. w = (h = d = ''),
  4865. r = navigator.userAgent.toLowerCase(),
  4866. d = function(b) {
  4867. return b.test(r);
  4868. };
  4869. E
  4870. ? ((w = 'Windows'),
  4871. d(/windows nt/) &&
  4872. ((w = r.indexOf('windows nt')),
  4873. (E = r.indexOf(';', w)),
  4874. (w = r.substring(w, E))))
  4875. : (w = m ? 'Mac' : A ? 'Linux' : 'Other');
  4876. g
  4877. ? ((D = d = 'IE'),
  4878. (p = r.indexOf('msie') + 5),
  4879. (h = r.indexOf(';', p)),
  4880. (h = r.substring(p, h)),
  4881. (D = k ? 'IE6' : n ? 'IE7' : q ? 'IE8' : 'IE'))
  4882. : u
  4883. ? ((d = (n = d(/firefox/)) ? 'Firefox' : 'Others'),
  4884. (D = p ? 'Gecko2' : B ? 'Gecko3' : 'Gecko'),
  4885. n &&
  4886. ((p = r.indexOf('firefox') + 8),
  4887. (h = r.indexOf(' ', p)),
  4888. -1 == h && (h = r.length),
  4889. (h = r.substring(p, h))))
  4890. : f
  4891. ? ((d = 'Chrome'),
  4892. (D = b ? 'Web Kit' : 'Other'),
  4893. (p = r.indexOf('chrome') + 7),
  4894. (h = r.indexOf(' ', p)),
  4895. (h = r.substring(p, h)))
  4896. : (d = c ? 'Opera' : x ? 'Safari' : '');
  4897. n = {};
  4898. n.javascript = D;
  4899. n.browserType = d;
  4900. n.browserVersion = h;
  4901. n.osName = w;
  4902. return n;
  4903. }
  4904. function Q() {
  4905. try {
  4906. if ('undefined' !== typeof qx) {
  4907. var l = qx.core.Init.getApplication(),
  4908. r = qx.core.Init.getApplication().getMenuBar();
  4909. l && r
  4910. ? ((B = ClientLib.Data.MainData.GetInstance().get_Player()),
  4911. 0 !== B.id
  4912. ? (Y(),
  4913. window.CncEcomain.getInstance().initialize(),
  4914. window.CncEcoScanner.getInstance().initialize(),
  4915. window.CncEcostorage.getInstance().initialize(),
  4916. window.CncEcoReports.getInstance().initialize(),
  4917. window.CncEcoxhr.getInstance().initialize(),
  4918. CncEcoHIDE.window.Window.getInstance().initialize(),
  4919. window.CncEco.xhr.start())
  4920. : window.setTimeout(Q, 1e3))
  4921. : window.setTimeout(Q, 1e3);
  4922. } else window.setTimeout(Q, 1e3);
  4923. } catch (d) {
  4924. h(d), window.setTimeout(Q, 1e3);
  4925. }
  4926. }
  4927. function h(h) {
  4928. h = '[CncEco] ' + h;
  4929. 'undefined' !== typeof console
  4930. ? console.log(h)
  4931. : window.opera && opera.postError(h);
  4932. }
  4933. var B = 0,
  4934. T = 0,
  4935. M = null,
  4936. x = null,
  4937. W = null,
  4938. I = null,
  4939. E = null,
  4940. R = 0,
  4941. U = 0,
  4942. aa = {
  4943. GDI_Wall: 'w',
  4944. GDI_Cannon: 'c',
  4945. 'GDI_Antitank Barrier': 't',
  4946. GDI_Barbwire: 'b',
  4947. GDI_Turret: 'm',
  4948. GDI_Flak: 'f',
  4949. 'GDI_Art Inf': 'r',
  4950. 'GDI_Art Air': 'e',
  4951. 'GDI_Art Tank': 'a',
  4952. 'GDI_Def_APC Guardian': 'g',
  4953. 'GDI_Def_Missile Squad': 'q',
  4954. GDI_Def_Pitbull: 'p',
  4955. GDI_Def_Predator: 'd',
  4956. GDI_Def_Sniper: 's',
  4957. 'GDI_Def_Zone Trooper': 'z',
  4958. 'NOD_Def_Antitank Barrier': 't',
  4959. 'NOD_Def_Art Air': 'e',
  4960. 'NOD_Def_Art Inf': 'r',
  4961. 'NOD_Def_Art Tank': 'a',
  4962. 'NOD_Def_Attack Bike': 'p',
  4963. NOD_Def_Barbwire: 'b',
  4964. 'NOD_Def_Black Hand': 'z',
  4965. NOD_Def_Cannon: 'c',
  4966. NOD_Def_Confessor: 's',
  4967. NOD_Def_Flak: 'f',
  4968. 'NOD_Def_MG Nest': 'm',
  4969. 'NOD_Def_Militant Rocket Soldiers': 'q',
  4970. NOD_Def_Reckoner: 'g',
  4971. 'NOD_Def_Scorpion Tank': 'd',
  4972. NOD_Def_Wall: 'w',
  4973. FOR_Wall: 'w',
  4974. FOR_Barbwire_VS_Inf: 'b',
  4975. FOR_Barrier_VS_Veh: 't',
  4976. FOR_Inf_VS_Inf: 'g',
  4977. FOR_Inf_VS_Veh: 'r',
  4978. FOR_Inf_VS_Air: 'q',
  4979. FOR_Sniper: 'n',
  4980. FOR_Mammoth: 'y',
  4981. FOR_Veh_VS_Inf: 'o',
  4982. FOR_Veh_VS_Veh: 's',
  4983. FOR_Veh_VS_Air: 'u',
  4984. FOR_Turret_VS_Inf: 'm',
  4985. FOR_Turret_VS_Inf_ranged: 'a',
  4986. FOR_Turret_VS_Veh: 'v',
  4987. FOR_Turret_VS_Veh_ranged: 'd',
  4988. FOR_Turret_VS_Air: 'f',
  4989. FOR_Turret_VS_Air_ranged: 'e',
  4990. '': '',
  4991. },
  4992. ba = {
  4993. 'GDI_APC Guardian': 'g',
  4994. GDI_Commando: 'c',
  4995. GDI_Firehawk: 'f',
  4996. GDI_Juggernaut: 'j',
  4997. GDI_Kodiak: 'k',
  4998. GDI_Mammoth: 'm',
  4999. 'GDI_Missile Squad': 'q',
  5000. GDI_Orca: 'o',
  5001. GDI_Paladin: 'a',
  5002. GDI_Pitbull: 'p',
  5003. GDI_Predator: 'd',
  5004. GDI_Riflemen: 'r',
  5005. 'GDI_Sniper Team': 's',
  5006. 'GDI_Zone Trooper': 'z',
  5007. 'NOD_Attack Bike': 'b',
  5008. NOD_Avatar: 'a',
  5009. 'NOD_Black Hand': 'z',
  5010. NOD_Cobra: 'r',
  5011. NOD_Commando: 'c',
  5012. NOD_Confessor: 's',
  5013. 'NOD_Militant Rocket Soldiers': 'q',
  5014. NOD_Militants: 'm',
  5015. NOD_Reckoner: 'k',
  5016. NOD_Salamander: 'l',
  5017. 'NOD_Scorpion Tank': 'o',
  5018. 'NOD_Specter Artilery': 'p',
  5019. NOD_Venom: 'v',
  5020. NOD_Vertigo: 't',
  5021. '': '',
  5022. };
  5023. /commandandconquer\.com/i.test(document.domain) && window.setTimeout(Q, 1e3);
  5024. },
  5025. CncEcoScript = document.createElement('script'),
  5026. txt = CncEco_mainFunction.toString();
  5027. CncEcoScript.innerHTML = '(' + txt + ')();';
  5028. CncEcoScript.type = 'text/javascript';
  5029. /commandandconquer\.com/i.test(document.domain) &&
  5030. document.getElementsByTagName('head')[0].appendChild(CncEcoScript);
  5031. })();