GoR BoTTols

GoR BoTTols (Bot+Tools) for Glory Of Rome

  1. // ==UserScript==
  2. // @name GoR BoTTols
  3. // @version 1.1
  4. // @namespace Tiestoale
  5. // @description GoR BoTTols (Bot+Tools) for Glory Of Rome
  6. // @resource URL_CASTLE_BUT http://i.imgur.com/MPlZr.png
  7. // @resource URL_CASTLE_BUT_SEL http://i.imgur.com/XWR4B.png
  8. // @include *facebook.com/gloryofrome/*
  9. // @include *gloryofrome.com/iframeCanvas.php*
  10. // @include *facebook.com/dialog/feed*
  11. // @include *facebook.com/dialog/apprequests*
  12. // @icon http://www.kocbottols.tiestoale.com/Tools/Addon/Icon.jpg
  13. // @resource smileys http://www.kocbottols.tiestoale.com/Tools/Addon/smileys.js
  14. // ==/UserScript==
  15.  
  16. var Version = '1.1';
  17. var Autore = 'Tiestoale';
  18. var ScriptName = 'Gor BoTTols';
  19. var miseajour = ScriptName+" "+Version +" - by "+Autore;
  20. var sitesupport="http://kocbottols.tiestoale.com";
  21. var pubblicity="<iframe src=http://kocbottols.tiestoale.com/Pubblicita/Tools.php width=320 marginwidth=0 marginheight=0 height=50 scrolling=no frameborder=0></iframe>";
  22. var DISABLE_BULKADD_LIST = false;
  23. var DEBUG_TRACE = true;
  24. var SWF_PLAYER_URL = 'http://beworld.perso.sfr.fr/bao/miniplayer.swf';
  25. var URL_CASTLE_BUT = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAXCAMAAAGkBsQ5AAABa1BMVEX%2F%2F8X%2F98X%2F973%2F97X%2F77X%2F7633773%2F76X377X3763%2F5q3%2F5qX%2F5pz35q335qX%2F3pz%2F3pT33pz%2F1pT%2F1oz%2F1oT31pT31oz%2FzoT%2Fznv3zoT%2FxXv%2FxXP%2FxWv3xXv3xXP%2FvWv%2FvWP3vWv3vWP%2FtWP%2FtVr%2FtVLmvWv3tWP3tVr3tVL%2FrVL%2FrUrmtWP3rVL3rUrvrVL%2FpUrvrUr%2FpULmrVrmrVL3pUr3pULmpUL3nDrepULWpVLWpUrmnDrFpUK1pVrOnDqcnFKcnEqMnEp7lHN7lGtzlGNrlGtjjEpajFpShFJSe2NChEJKe1o6hDohjDFCc1oZjDEhhDEQjDEAlDEpezoZhDEhezoQhDEAjDEpczoZezoIhDEhc0IhczoAhDEZczoIezEhazoAezEhY0IAczEAcykIazEhWkIAazEAaykIYzEhUkIAYzEAWjEAUjEAUikASjEASikAQjEAQikAOjEAOikAMTEAMSkAKSlOGAcLAAAACXBIWXMAAAsSAAALEgHS3X78AAABVklEQVQYGQXBPW4TYRiF0ee%2B3x2DRSxRIFJTGIkVUFDQIbEDlkE5%2B8kWWEKKIBSB5AohXBGUSAaCIdgz3x%2FnaARztjS3RSPodPkmfuzReLbOh1fm72a4h3kxyWgE8NXPz8%2F%2FhC%2FzRXLM3cmeqvGDl7Mfa9ztT9pvp3%2FDOpjOr7Yft9PXjPHxE%2Bl6p4SJqSq5RsL4EAtZaUAjAABoBADAt%2Fty8ovVnhQ%2Bfx%2BbDTfXQ9Bz5H7IdWGV9k588NJWrQiXjMkdly6Fo9beRap29F4QJBxTE%2Bo9bF7XuUpJsp8BAGjcATSgADOQWRsfLu8WT0%2B33wcePknfJj%2B6j3Hb17m5HQsr1%2Fm4aGBEbtp8uXPWzcSBlhYYXKunObLoOyU1jFH02oVRZNFJQ2CCko26MIrC3MAEpRdcSVkYFYzBuaAuQFFAgzFBK0GVZhYoaUYYVm8b0IAGNDr8B8ZXpEbZNGQ6AAAAAElFTkSuQmCC";
  26. var URL_CASTLE_BUT_SEL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAXAgMAAAHuttyYAAAACVBMVEX%2F%2F%2F8AOjEAKSnbo5E5AAAACXBIWXMAAAsSAAALEgHS3X78AAAAW0lEQVQI12NYwdAAhCsYOICwQQGEpiYwrGpgCHRgcIChUAeGqaERDBMZJRgmMCDwqlUrgHgBQ2hoAIMjiwAYOzBgxyA1ILVTQ4GggWEKK4MIK4JiYGAgiYKYAgBFlyWR9CCfyAAAAABJRU5ErkJggg%3D%3D";
  27.  
  28. var DEFAULT_ALERT_SOUND_URL = 'http://www.universal-soundbank.com/mp3/sounds/2935.mp3';
  29.  
  30.  
  31. var Options = {
  32. Langue:1,
  33. ptWinIsOpen : false,pbEveryEnable:false,pbEveryMins:60,
  34. ptWinDrag : true,
  35. enableFoodWarnTchat: false,
  36. pbGoldEnable : false,
  37. foodWarnHours : 2,
  38. pbChatOnRight: false,
  39. pbGoldHappy : 75,
  40. pbRessTime: 15,
  41. pbRessEnable:false,
  42. arPageFrom:1,
  43. arPageTo:4,
  44. srcMinLevel:1,
  45. Smiley:true,
  46. transportinterval:60,
  47. minwagons:5000,
  48. lasttransport:0,
  49. srcMaxLevel:10,
  50. filPuissance:0,
  51. filPuissanceMax:100000000,
  52. filfiltreAlliance:'',
  53. filfiltreJoueur:'',
  54. ptWinPos : {},
  55. alertConfig : {
  56. aChat:true,
  57. aPrefix:"*** I am under attack !!! ***",
  58. },
  59. alertSound : {
  60. enabled:false,
  61. soundUrl:DEFAULT_ALERT_SOUND_URL,
  62. repeat:true,
  63. repeatDelay:10,
  64. playLength:20,
  65. volume:100,
  66. alarmActive:false,
  67. expireTime:0,
  68. },
  69. towerMarches : {},
  70. Chuchoenabled:true,
  71. urlChucho:'http://www.universal-soundbank.com/mp3/sounds/735.mp3',
  72. Attackenabled:true,
  73. urlAttack:'http://www.universal-soundbank.com/mp3/sounds/217.mp3',
  74. HelpRequest: true,
  75. DeleteRequest: false,
  76. DeleteRules:false,
  77. maxIdlePop:true,
  78. AttackAutoTest:false,
  79. AttackAutoTestX:0,
  80. TroopsNum:1,
  81. AttackAutoTestY:0,
  82. AttackInterval:15,
  83. AttackUnit:0,
  84. AttackCity:{0:false,1:false,2:false,3:false,4:false,5:false,6:false,7:false,8:false,},
  85. spamconfig:{aspam:false,spamvert:"Type your spam here",spammins:"10",atime:10,spamstate:"a"}
  86. };
  87.  
  88.  
  89. var GlobalOptions = {
  90. autoPublishGamePopups : true,
  91. autoPublishPrivacySetting : 80,
  92. autoPublishKDO: false,
  93. autoPublishKDOWho: 0,
  94. BOAutomateKDO: false,
  95. BOAutomateKDOsec: 10,
  96. BOAutomateKDOChoice: 1005,
  97.  
  98. };
  99.  
  100. var TrainOptions = {
  101. Running : false,
  102. list:{},
  103. listactif:{},
  104. timelauch:60,
  105. pourcpop:75,
  106. pourctot:100,
  107. unitemin:100,
  108. };
  109.  
  110. var translateITAArray = {
  111. //Tools
  112. 'Please support the KoC BoTTols by clicking the ads on the KoC BoTTols website from time to time':'Si prega di sostenere il KoC BoTTols cliccando gli annunci sul sito web Koc BoTTols di volta in volta',
  113. //Time
  114. 'minutes':'minuti',
  115. 'seconds':'secondi',
  116. //Options
  117. 'Configuration of the':'Configurazione del',
  118. 'Language':'Lingua',
  119. 'Allow the toolbox window to be moved freely':'Abilita il movimento del tools con il mouse',
  120. 'Refresh GoR every':'Ricarica GoR ogni',
  121. 'Organize a Tax event (if happiness':'Organizza il Giorno delle Tasse (se la felicità è',
  122. 'Auto-collect resources every':'Raccogli le risorse ogni',
  123. 'Allow to publish your helpings automatically to Facebook':'Abilita la pubblicazione su facebook in automatico',
  124. 'Configuration of chat':'Configurazioni della chat',
  125. 'Move the chat window to the right of the game':'Muovi la chat nella parte della destra del gioco',
  126. 'Allow to publish an alert in chat when your food level is low':'Abilita l\'auto post in chat in caso di mancanza di cibo',
  127. 'Auto-click help requests, such as building help':'Auto-Clicca le richieste di aiuto, come le costruzioni',
  128. 'Hide all help requests in chat':'Nascondi le richieste di aiuto in chat',
  129. 'Hide the rules of the chat':'Nascondi le regole della chat',
  130. 'Show smileys':'Mostra nella chat le faccine',
  131. 'Open':'Apri',
  132. 'Warning sound when receiving a whisper':'Avvisa con un suono quando ricevi un bisbiglio',
  133. 'Enable audio in case of ATTACK (Alliance)':'Avvisa con un suono se un alleato viene attaccato',
  134. 'Sound file (URL MP3)':'File audio (URL MP3)',
  135. 'Configuration of the Tower alert':'Configurazione della Torre di Allerta',
  136. 'Allow to post attack alerts in chat':'Posta in chat ally gli avvisi di attacco',
  137. 'Allow to sound an alarm when under attack (handy when you are away from keyboard)':'Abilita un suono di allarme quando sei sotto attacco (utile quando si è lontani dalla tastiera)',
  138. 'Message':'Messaggio',
  139. 'Loading the SWF player':'Caricamento del SWF player',
  140. 'LOAD':'CARICA',
  141. 'DEFAULT':'PREDEFINITO',
  142. 'Repeat every':'Ripeti ogni',
  143. 'Length of sounding alarm':'Lunghezza del file audio',
  144. 'Tester':'Prova',
  145. 'Stop Sound Alert':'Ferma Audio',
  146. 'Error':'Errore',
  147. 'Loaded':'Caricato',
  148. '':''
  149. };
  150.  
  151. var JSON;if(!JSON){JSON={};}(function(){"use strict";function f(n){return n<10?'0'+n:n;}if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+'-'+f(this.getUTCMonth()+1)+'-'+f(this.getUTCDate())+'T'+f(this.getUTCHours())+':'+f(this.getUTCMinutes())+':'+f(this.getUTCSeconds())+'Z':null;};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf();};}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);})+'"':'"'+string+'"';}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key);}if(typeof rep==='function'){value=rep.call(holder,key,value);}switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==='[object Array]'){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null';}v=partial.length===0?'[]':gap?'[\n'+gap+partial.join(',\n'+gap)+'\n'+mind+']':'['+partial.join(',')+']';gap=mind;return v;}if(rep&&typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==='string'){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+mind+'}':'{'+partial.join(',')+'}';gap=mind;return v;}}if(typeof JSON.stringify!=='function'){JSON.stringify=function(value,replacer,space){var i;gap='';indent='';if(typeof space==='number'){for(i=0;i<space;i+=1){indent+=' ';}}else if(typeof space==='string'){indent=space;}rep=replacer;if(replacer&&typeof replacer!=='function'&&(typeof replacer!=='object'||typeof replacer.length!=='number')){throw new Error('JSON.stringify');}return str('',{'':value});};}if(typeof JSON.parse!=='function'){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v;}else{delete value[k];}}}}return reviver.call(holder,key,value);}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);});}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof reviver==='function'?walk({'':j},''):j;}throw new SyntaxError('JSON.parse');};}}());
  152. var JSON2 = JSON;
  153. var FBsecondTimer = null;
  154. var pbStartupTimer = null;
  155. var my = {};
  156. var Cities = {};
  157. var currentName = 'Overview';
  158. var Seed = unsafeWindow;
  159. var currentPage ='';
  160. var mainPop;
  161. var Smileys = {};
  162. eval(GM_getResourceText("smileys"));
  163.  
  164. var myServerId = null;
  165. function getServerId() {
  166. if (myServerId == null){
  167. var m=/^[a-zA-Z]+([0-9]+)\./.exec(document.location.hostname);
  168. if (m)
  169. myServerId = m[1];
  170. else
  171. myServerId = '??';
  172. }
  173. return myServerId;
  174. }
  175.  
  176.  
  177. var nHtml={
  178. FindByXPath:function(obj,xpath,nodetype) {
  179. if(!nodetype){
  180. nodetype = XPathResult.FIRST_ORDERED_NODE_TYPE;
  181. }
  182. try {
  183. var q=document.evaluate(xpath,obj,null,nodetype,null);
  184. } catch(e) {
  185. GM_log('bad xpath:'+xpath);
  186. }
  187. if(nodetype == XPathResult.FIRST_ORDERED_NODE_TYPE){
  188. if(q && q.singleNodeValue) { return q.singleNodeValue; }
  189. }else{
  190. if(q){
  191. return q;
  192. }
  193. }
  194. return null;
  195. },
  196. ClickWin:function(win,obj,evtName) {
  197. var evt = win.document.createEvent("MouseEvents");
  198. evt.initMouseEvent(evtName, true, true, win,
  199. 0, 0, 0, 0, 0, false, false, false, false, 0, null);
  200. return !obj.dispatchEvent(evt);
  201. },
  202.  
  203. Click:function(obj) {
  204. return this.ClickWin(window,obj,'click');
  205. },
  206. ClickTimeout:function(obj,millisec) {
  207. window.setTimeout(function() {
  208. return nHtml.ClickWin(window,obj,'click');
  209. },millisec+Math.floor(Math.random()*500));
  210. },
  211.  
  212. SetSelect:function(obj,v) {
  213. for(var o=0; o<obj.options.length; o++) {
  214. if(v==obj.options[o].value) { obj.options[o].selected=true; return true; }
  215. }
  216. return false;
  217. },
  218.  
  219. }
  220.  
  221. function readGlobalOptions (){
  222. GlobalOptions = JSON2.parse (GM_getValue ('Options_??', '{}'));
  223. }
  224.  
  225. readGlobalOptions ();
  226.  
  227. function setWide (){
  228. var iFrame = null;
  229. var e = document.body;
  230. if(e){
  231. for (var c=0; c<e.childNodes.length; c++){
  232. if (e.childNodes[c].tagName=='DIV') {
  233. if (e.childNodes[c].firstChild.tagName == 'IFRAME'){
  234. iFrame=e.childNodes[c].firstChild;
  235. break;
  236. }
  237. }
  238. }
  239. }
  240. if (iFrame) {
  241. iFrame.style.width = '100%';
  242. iFrame.style.height = '1400px';
  243. if (ById("mainbody")) ById("mainbody").backgroundColor="black";
  244. }
  245. }
  246.  
  247. if (document.URL.search(/gloryofrome.com\/iframeCanvas/i) >= 0){
  248. setTimeout (setWide, 1000);
  249. return false;
  250. }
  251. if (document.URL.search(/apps.facebook.com\/gloryofrome/i) >= 0){
  252. facebookInstance ();
  253. return false;
  254. }
  255.  
  256. if (document.URL.search(/www.facebook.com\/dialog\/feed/i) >= 0){
  257. HandlePublishPopup();
  258. return false;
  259. }
  260.  
  261. function HandlePublishPopup() {
  262. if(GlobalOptions.autoPublishGamePopups){
  263. // Check the app id (we only want to handle the popup for kingdoms of camelot)
  264. var FBInputForm = document.getElementById('uiserver_form');
  265. if(FBInputForm){
  266. var channel_input = nHtml.FindByXPath(FBInputForm,".//input[contains(@name,'channel')]");
  267. if(channel_input){
  268. var current_channel_url = channel_input.value;
  269. //if (current_channel_url.match(/gloryofrome/i) >= 0) {
  270. var publish_button = nHtml.FindByXPath(FBInputForm,".//input[@type='submit' and contains(@name,'publish')]");
  271. //var privacy_setting = nHtml.FindByXPath(FBInputForm,".//input[@type='hidden' and contains(@name, 'privacy_data') and contains(@name, 'value')]");
  272. if(publish_button){ // && privacy_setting
  273. nHtml.Click(publish_button);
  274. }
  275. //}
  276. }
  277. }
  278. }
  279. setTimeout(HandlePublishPopup, 2000);
  280. }
  281.  
  282. /*** Run only in "apps.facebook.com" instance ... ***/
  283. function facebookInstance (){
  284. function setWide (){
  285. var iFrame = null;
  286. var e = document.getElementById('app_content_140956165916773');
  287. if (!iFrame){
  288. var iframes = document.getElementsByTagName('iframe');
  289. for (var i=0; i<iframes.length; i++){
  290. if (iframes[i].className=='canvas_iframe_util noresize'){
  291. iFrame = iframes[i];
  292. break;
  293. }
  294. }
  295. }
  296. if (!iFrame){
  297. setTimeout (setWide, 1000);
  298. return;
  299. }
  300.  
  301. var e = document.getElementById('mainContainer');
  302. if(e){
  303. document.getElementById('content').style.minWidth = '1280px';
  304. document.getElementById('content').style.width='100%';
  305. for(i=0; i<e.childNodes.length; i++){
  306. if(e.childNodes[i].id == 'contentCol'){
  307. e.childNodes[i].style.width = '100%';
  308. e.childNodes[i].style.margin = '0px';
  309. e.childNodes[i].style.paddingTop = '5px';
  310. e.childNodes[i].childNodes[1].style.width = '99%';
  311. break;
  312. }
  313. }
  314. }
  315. var e = document.getElementById('globalContainer');
  316. if(e){
  317. e.style.width = '100%';
  318. if(e.firstChild){
  319. e.firstChild.style.width = '100%';
  320. e.firstChild.style.margin = '0 0%';
  321. }
  322. }
  323. var e = document.getElementById('bottomContent');
  324. if(e){
  325. e.style.padding = "0px 0px 12px 0px";
  326. }
  327. var e = document.getElementById('contentArea');
  328. if(e){
  329. e.style.width = '100%';
  330. for(i=0; i<e.childNodes.length; i++){
  331. if(e.childNodes[i].tagName == 'div'){
  332. e.childNodes[i].style.width = '100%';
  333. e.childNodes[i].firstChild.style.width = '100%';
  334. break;
  335. }
  336. }
  337. }
  338. var e = document.getElementById('pagelet_canvas_content');
  339. if(e){
  340. e.style.width = '100%';
  341. }
  342. iFrame.style.width = '100%';
  343. var div = searchDOM (document.getElementById('content'), 'node.tagName=="DIV" && node.className=="UIStandardFrame_Content"', 7);
  344. if (div){
  345. div.style.width ='100%';
  346. }
  347. var div = searchDOM (document.getElementById('content'), 'node.tagName=="DIV" && node.className.indexOf("SidebarAds")>=0', 7);
  348. if (div){
  349. div.style.display ='none';
  350. }
  351. }
  352. document.getElementById("pagelet_canvas_content").style.width="100%";
  353. try{
  354. document.getElementById('rightCol').parentNode.removeChild(document.getElementById('rightCol'));
  355. document.getElementById('leftColContainer').parentNode.removeChild(document.getElementById('leftColContainer'));
  356. document.getElementById('sidebar_ads').parentNode.removeChild(document.getElementById('sidebar_ads'));
  357. document.getElementById('canvas_nav_content').parentNode.removeChild(document.getElementById('canvas_nav_content'));
  358. } catch (e){
  359. // toolkit may have removed them already!
  360. }
  361. setWide();
  362. }
  363.  
  364. var WideScreen = {
  365. chatIsRight : false,
  366. rail : null,
  367. init : function (){
  368. t = WideScreen;
  369.  
  370. try {
  371. document.getElementById('mainCrossBar').parentNode.removeChild(document.getElementById('mainCrossBar'));
  372. } catch (e) {
  373. }
  374.  
  375. },
  376. setChatOnRight : function (tf){
  377. t = WideScreen;
  378. if (tf == t.chatIsRight)
  379. return;
  380. if (tf){
  381. var chat = document.getElementById('kocmain_bottom');
  382. if (!chat || chat.className!='mod_comm')
  383. setTimeout (function (){t.setChatOnRight(tf)}, 1200);
  384. if (getMyAlliance()[1]!="Aucune")
  385. document.getElementById("chat_button2").innerHTML="<span>" +getMyAlliance()[1]+ "</span>";
  386. document.getElementById("comm_tabs").style.left = '761px';
  387. document.getElementById("comm_tabs").style.top = '-590px';
  388. document.getElementById("comm_tabs").style.backgroundColor="#60533E";
  389. var div = searchDOM (document.getElementById('kocmain_bottom'), 'node.tagName=="DIV" && node.className.indexOf("comm_body comm_global")>=0', 7);
  390. if (div){
  391. //alert('troue!!');
  392. div.style.left = '761px';
  393. div.style.top = '-565px';
  394. div.style.height= '700px';
  395. div.style.backgroundColor="#60533E";
  396. var div1 = searchDOM (div, 'node.tagName=="DIV" && node.className.indexOf("chat-wrapper")>=0', 7);
  397. if (div1){
  398. div1.style.height='700px';
  399. div1.style.width='347px';
  400. }
  401. }
  402. document.getElementById("mod_comm_list1").style.height= '650px';
  403. document.getElementById("mod_comm_list2").style.height= '650px';
  404. } else {
  405. document.getElementById("comm_tabs").style.left = '';
  406. document.getElementById("comm_tabs").style.top = '';
  407. document.getElementById("comm_tabs").style.backgroundColor="";
  408. var div = searchDOM (document.getElementById('kocmain_bottom'), 'node.tagName=="DIV" && node.className.indexOf("comm_body comm_global")>=0', 7);
  409. if (div){
  410. div.style.left = '';
  411. div.style.top = '';
  412. div.style.backgroundColor="";
  413. var div1 = searchDOM (div, 'node.tagName=="DIV" && node.className.indexOf("chat-wrapper")>=0', 7);
  414. if (div1){
  415. div1.style.height= '';
  416. }
  417. }
  418. document.getElementById("mod_comm_list1").style.height= '100%';
  419. document.getElementById("mod_comm_list2").style.height= '100%';
  420. }
  421. t.chatIsRight = tf;
  422. }
  423. }
  424.  
  425. var Tabs = [];
  426. function ptStartup() {
  427.  
  428. clearTimeout (pbStartupTimer);
  429. if (unsafeWindow.BOGpbLoaded)
  430. return;
  431. var metc = getClientCoords(document.getElementById('main_engagement_tabs'));
  432. if (metc.width==null || metc.width==0){
  433. pbStartupTimer = setTimeout (ptStartup, 1000);
  434. return;
  435. }
  436. Tabs = [
  437. ['Overview', unsafeWindow.arStrings.Common.Overview],
  438. ['Hud', unsafeWindow.arStrings.Common.Reports],
  439. ['marches', unsafeWindow.arStrings.Common.Marches],
  440. ['AllianceList', unsafeWindow.arStrings.Common.Player],
  441. ['Search', unsafeWindow.arStrings.Common.Search],
  442. ['TranspAuto', unsafeWindow.arStrings.Common.Transport],
  443. ['Reassign', unsafeWindow.arStrings.Common.Reassign],
  444. ['Wilds', unsafeWindow.arStrings.Common.Wilds],
  445. ['Generals', unsafeWindow.arStrings.Common.Generals],
  446. ['autoFormation', "Auto"+unsafeWindow.arStrings.Common.Train],
  447. ['Train', unsafeWindow.arStrings.Common.Train],
  448. ['testattack', 'AutoAttack'],
  449. ['Crests', 'Info'],
  450. ['KDO', unsafeWindow.arStrings.Common.Gift],
  451. ['Spam','Spam'],
  452. ['Options' , 'Options'],
  453. ['perso' , 'KoC BoTTols']
  454. ];
  455.  
  456.  
  457. GM_addStyle ('.xtab {padding: 2px; border:none; background:none; white-space:nowrap;}\
  458. .sc1 { background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC0AAAAtCAYAAAA6GuKaAAALe0lEQVR42u1ZC3SNVxY+9+Yh74jkJpHnjbxDCAmSiRAJxqMqCEKi3jURkohgGK3oKqFWh2prlHquNkilNdqK0GmN1mM8FlUtLVWPiSEeiUqQ5579ndz/rpubG3Ta6Zi1utfa6/7/Oef//+/ss/e39zlXiN/kN/nFxYzVQaeqpx5tKwuR5a8R50PbirrWNqKGm7axWj5NGGHFMWZmZkWtW7f+m1qt3tjJS1yb+3tB0Ny+gkLdBfGYlKcGsZWVVf60adPo008/pSNHjtCWLVuodzCD7dMIGjqlhyBztTjNw9VPA+aE3NzcOoCFfv7557R8+XIaFSVoNlt4Zu9G0Pjt6CmtPeZ/DdiiY8eOZw8ePCgBf/TRR1RUVERTp06lhOBGsLMSGy0OnRwjyMJMXODnbEy8y5lV+2uAngarKoA3b95MBQUFtHPnTnJ3d6P4oEbgOQmC5vQTlNlTUIyftPZCo/dsdBa+9Vp1ZING+B82ExYTdBOzZm3POpp1KetUVpefA9gyKCjo+8OHD9Mnn3wiASugcb9p0yaytbXRA1csnh4ryMlGVPLzYazerJFqYV42WJNNYwPzaIT3HynWLoVchLZMJVR33UUIBZn1oK42SeRv3p3shGsVtxfxc0m6Sf0kSZ49ezYdOnRIAgVguAbuv/32Wzp79iwtWbKE1GoVJYY0WjqHgQ8ME+TuoCJr4fjASXjVtRHe5KLSUlrAQhrgNJ3iLMbL3yFuORRu2Zc0oh31sZ9Cqf4v0mi/BTTMI5cSnCaQv0U3sheaGxzXbzKW7k+UB+zs7Pbs3buXPv74Ywn4gw8+IFj90qVLpAiura2tSaUS5xGEbVrZUpB5D+qv+YO06Cjf+ZSi/ZMEMy74JUq0fZ6iRarUGFUa9XNIp172z5GPiKDuYrS+73fqsZRgM4X62E2lOLtU8jOLIgthWfA4ZvLs27dvNaz6zjvv0HvvvScBw7dLS0v1oG/evEk8OfiwH+sV9lWKtEiiJPccgjsYggCAYR6zpcLaSl9PywnU32kaRatS9W3Gign6iM74TtqjQE9ZvHgx7dmzR4IGzSmUB6CK3LlzhzQaDemewRLWsj9S+6BO1MUvjrSqKOooBvKHxzQBmeQ+i+KtJunbMAnDSZrSbmIUW9v6bItuYmNj81e4xvbt2yXwK1euUG1tLVVXV0uwDQ0NdPnyZcnXjo6OAJ2gUqku8+rICSpy69YtyTSZ6TOpi09PClTFUqQYbhIUJhNr9pz+PlKMbDbGWQTiWzEmi6DIyMiKAwcO0NatW6Vb3L59Ww+krq5OZkRPT89rPDaftdjFxaV227ZtcjKKPHjwQE5UEVyD72dkZFKAJpz8RFfqIJ5hHcJWHM0+PYY68XWUGCEBoj2U+7sZ+Lqf6AnQL5kC3XHChAm0e/dugrXhErA0pL6+nlasWEGc1jfyOEfW7MDAwPrvvvuOjAVthv5vKFVVVXIV+yT2JRuVC7mKcApjgJ3EMPIVvaitiCRPVg8RQ16snUWyBI1JmAubElOgJ7766quSLQAY1AarQd5//33mZttXdH71rI+PT50yIWPBs3fv3jXZhwmtXLmSFi1aRAsWLKCIiAhycnQhR6GlAJFAWpFI3mzVNiKYqdOZWjMthnBstBfPko1wvWoK9Ipdu3bJDIhAUwRWCw4O3qmroV1btWpVhuU2JdevX6cvv/yS5s2bJyetiOI+xcXFdPz4cX37+fPn6cKFC3ISGo0b2Qo3tnY3Zoze/NudVEJdby+8G3DvIHyrwMhNELN/Fn/22We0f/9+feDBLbKzs29zt5tu2JZZs2aZBFxZWUlHjx6VscAlLK1evVofC6dOnZLXx44do7KysmbPPnz4UK5mVlYWx4yXBO8homHdWv7mKmcRWuckAutAyU1AR0VFndu3b5/8qGLpr776imsN9+m6Ib2YMeoNV8Ew+E6ePElffPEFubm5IWho8uTJeivjnT/++KNkFcOgNQxysBVWGav9wgsvUPuwDnhPPWvX1sL/HgPHfTtDzOYDBgyoQN2M5bt//760ck5OziWU1Tpf3peRkdHsgxj7zTffyNTOlCkBQ3v06CH7v/76a0pNTZWWNGQjQwHDgAAAGoprrIiOVns5Cr8KF9Ee1x0MQTulpaU9hKUU17h69SoxQ+Tq+oNY65ApjZcVqT48PFwPVlGmRmlBALW0tCQnJyeaP38+nT59mioqKppYGf6vAFYUvj58+HC8ay7783Ud6MAm6Zt3KPXwOUXeeOONSoNyMcfLy6sJ/wJwly5dmoFVlLdnkkUAysPDQ98eFhYmVwVBCSPh1xgw9MSJE7Rw4UI8s8JBeF1yFmENfO1jCFo7c+ZMPV0BUHJycqFB/7tDhw5tYuUffvihRcBQLO2NGzfkWK1W26yfOZ86d+5MI0eOpMzMTEL5YAgacYDcwGOX2wuvs0yD1cY1txZLB9BYTiwXF0TDDPqLmUWasQVveFsE3bZtWz1TmAJtapJI/QporHpeXh76suyFx3Hm7Hs4DGgGWkkYnADuc5utQX8BB2WzABo8eHCLIBCIYAywBScj2YZJ4joxMZHGjRtHWF0wBXg6Pz+f3v7wJGUWltPbOw/RuXPnsNp4LtpWuB9wEN5XjBOLD4NugGvU1NTQxIkTi436pyYlJcm+e/fuSfeBgDXgu8aAuYiSIMBAAM0bZBoyZAitW7eume+WlJTIoENS2rBhI6VtKqeUDeV0q/weKklkQQsr4VTCetAYtGbOnDk1YAz4YUhIyCyjfnsGd/HMmTMyQLCTQQ2Bj+HD9vb2esCgPdQwsBToUElSKMSMASOZlZeXU3p6Olm3MieVWl2av/tW/YDXr1NgRBze97Lu+2+xLmpWlXIwVOJDKJYsLCwiTaT5iOjo6Cve3t4b+HocGMXV1fXMa3/ZQOuKDhBWYu3atTIhXbt2jUJDQ2Udg30lAGMCmLTCx2ANrOzYsWkU6y9oRrwgf08HWn2gkp5dc/uavWc4StE2j9xmTZo0qRT8uXTp0nJdQjF5fmN4E/n8Wy5Jb5ZWLd9xWm4SlGyHrNm/f3+5kcBhD34Nt2oKpSH7aexVtTipwuY4k4F36BxFbmE9859oN5uSkvIPMAL789+fdAf8fBF1mb+rkgJ6T6pF8WOY1mFZ+CveaSiICZQLSNvYOJibmx/q7icoq1fjIVAG/7o5CNQckx8LoF+/fu9iVxIbG/vnJwWdW0K2eSW1B6PTtyyAa0DYeg3sXhnMCt/Dl9n/q5kpTly8eFEmJ+beuhkzZtSgXNBt2z5Uq8XrQyMaz08U4C52su54NHDm0hcRwRxw4031j99K2uxdNGB0AbmN2kb+qQU0z/BEikFWATS71w00sI+vxH1MTMx27KY5Cx5FHuDrIcjAXEsfRNnLdfprcDt7K3FkSmyjxXEsMa0ROCw+5VG4h65atQov7dqsh0iVt5dOnyqto6Hrq2qS3q6sS978sMhwyMCBA3fBp9esWXMX93FxcYvBDKgdcM+TWc9bM31Wc3BwyOR6B+WmEvT+Pm3Enaz4xvNBAM+I1wNv0eI+gwYNqtadvTWT1IL6V/qtKqvts+Jf9MyainNj3qVAoxPWXuyr9fBTHC3wfnMego2vx6KfOXob74zKDM4wVMYFEMtIZpIGWBtHbjjBmh6vd5VMk6iZb4896kQnZSt5s3uEjCgkU4foKq7Jl8HFAgICJjPXTwd96o65xPr164/OnTv36GNPPtViy+iuTIFxjf4N4M9Fyxxwq6VnZv7Mg0t1u3btsn19fdfy5mH8jh078LH+aF+2bNlNLo4Kn+Adzm1sxD8zdS4C0OBxbt/f0gMu4hcSrjOSCwsLFdDg9yW6U9InkRHtPURDdmIjYLVKIJ2H/hrHxfG8G0JQDvpPVgw7JSsLcY5/81qKs/+WWBuXkz/lP6mn5S+R3+T/Sv4NiSN8/hMVXJ4AAAAASUVORK5CYII%3D") no-repeat scroll 0px 0 transparent !important; }\
  459. .hostile td { background:crimson; }.friendly td{background:lightblue; }.ally td{background:royalblue; }\
  460. .Hostile td { background:crimson; }.Friendly td{background:lightblue; }.Ally td{background:royalblue; }\
  461. .neutral td { background:lightgreen; }.unaligned td { background:gold; }\
  462. .Neutral td { background:lightgreen; }.Unaligned td { background:gold; }\
  463. .xtabBR {padding-right: 5px; border:none; background:none;}\
  464. div.ptDiv {background-color:#f0f0f0;}\
  465. table.marches tr td {padding:4px;border:1px black solid; background:none; white-space:nowrap;}\
  466. table.ptTab tr td {padding:2px;border:none; background:none; white-space:nowrap;}\
  467. table.ptTabPad tr td {border:none; background:none; white-space:nowrap; padding: 2px 4px 2px 8px;}\
  468. table.ptTabBR tr td {border:none; background:none;}\
  469. table.ptTabLined tr td {border:1px none none solid none;}\
  470. table.ptTabPad tr td.ptentry {background-color:#ffeecc; padding-left: 8px;}\
  471. table.ptTabOverview tr td {border:1px none none solid none; white-space:nowrap; padding: 1px 2px; font-size:12px;}\
  472. .xxtab{background-color:none; padding-left:5px; padding-right:5px;}\
  473. .xxtab_even{background-color:#ccc; padding-left:5px; padding-right:5px;}\
  474. table.ptNoPad tr td {border:none; background:none; white-space:nowrap; padding:0px}\
  475. .ptOddrow {background-color:#eee}\
  476. .ptstat {border:1px solid; border-color:#ffffff; font-weight:bold; padding-top:2px; padding-bottom:2px; text-align:center; color:#ffffff; background-color:#357}\
  477. .ptStatLight {color:#ddd}\
  478. .ptentry {padding: 7px; border:1px solid; border-color:#000000; background-color:#ffeecc; white-space:nowrap;}\
  479. .ptErrText {font-weight:bold; color:#600000}\
  480. .castleBut {outline:0px; margin-left:0px; margin-right:0px; width:24px; height:26px; font-size:12px; font-weight:bold;}\
  481. .castleBut:hover {border-size:3px; border-color:#000;}\
  482. .castleButNon {background-image:url("'+ URL_CASTLE_BUT +'")}\
  483. .castleButSel {background-image:url("'+ URL_CASTLE_BUT_SEL +'")}\
  484. button::-moz-focus-inner, input[type="submit"]::-moz-focus-inner { border: none; }\
  485. .ptChatWhisper {}\
  486. .ptChatAttack {color: #000; font-weight:bold; background-color: #FF7D7D; }\
  487. .ptChatAlliance {}\
  488. .ptChatGlobal {background-color: #fdd}\
  489. .ptChatIcon {border: 2px inset blue}\
  490. input.BODefButOn {cursor:pointer; border:1px solid black; background-color:red;}\
  491. input.BODefButOff {cursor:pointer; border:1px solid black; background-color:#0a0;}\
  492. span.whiteOnRed {padding-left:3px; padding-right:3px; background-color:#700; color:white; font-weight:bold}\
  493. span.boldRed {color:#800; font-weight:bold}\
  494. .emoicon {width:19px !important;height:19px !important;float:none !important;}\
  495. .tx{ color:black !important;}\
  496. .content.off { background-color:#ECECEC !important;border-bottom:1px solid #AAAAAA;}\
  497. .content.on { background-color:#F1F2E1 !important;border-bottom:1px solid #AAAAAA;}\
  498. .frame.on { background-color:#ffe !important;}\
  499. .frame.off { background-color:#ffe !important;}\
  500. .info .nm{ color:#114684 !important;}\
  501. .comm_body.comm_global { border:1px solid black !important;background-color:#ECECEC !important;}\
  502. .comm_body { width:350px !important;}\
  503. .chat-wrapper { width:347px !important:}\
  504. span.boldDarkRed {color:#600; font-weight:bold}\
  505. a.ptButton20 {color:#ffff80}\
  506. .matTab {}\
  507. .matTabNotSel { padding:0 0 0 20px; color : #2F230E; font: bold 11px Georgia; white-space: nowrap; cursur:pointer; padding:0 0px 0 0;height: 17px; }\
  508. .matTabNotSel span { background: url("http://cdn1.kingdomsofcamelot.com/fb/e2/src/img/nav/tab_unselected.png") no-repeat scroll left 0 transparent; display: inline-block; height: 16px; padding: 1px 2px 0 7px; text-decoration: none; }\
  509. .matTabSel { color : #2F230E; font: bold 11px Georgia; white-space: nowrap; cursur:pointer; padding:0 0px 0 0;height: 17px; }\
  510. .matTabSel span { background: url("http://cdn1.kingdomsofcamelot.com/fb/e2/src/img/nav/tab_selected.png") no-repeat scroll left top transparent; display: inline-block; height: 16px; padding: 1px 2px 0 7px; text-decoration: none; }\
  511. tr.CPopupTop td { background-color:#dde; border:none; height: 15px; padding:0px; }\
  512. .BOptretry_top { background-color:#a00; color:#fff; border:none; height: 21px; padding:0px; }\
  513. input.ptButCancel {background-color:#a00; font-weight:bold; color:#fff}\
  514. .idp_CPopup .idp2_CPopup { opacity:0.9; }\
  515. .CPopup .CPopMain { opacity:0.9;-moz-box-shadow:inset 0px 0px 20px #006000; -moz-border-radius:3px; border:1px solid #141516; padding:3px; } ');
  516.  
  517. unsafeWindow.BOGpbLoaded = true;
  518. readOptions();
  519. readTrainingOptions ();
  520. var Seed = unsafeWindow;
  521.  
  522. setCities();
  523. if (Options.ptWinPos==null || Options.ptWinPos.x==null|| Options.ptWinPos.x=='' || isNaN(Options.ptWinPos.x)){
  524. var c = getClientCoords (document.getElementById('main_engagement_tabs'));
  525. Options.ptWinPos.x = c.x+4;
  526. Options.ptWinPos.y = c.y+c.height;
  527. saveOptions ();
  528. }
  529. mainPop = new CPopup ('idp', Options.ptWinPos.x, Options.ptWinPos.y, 760,730, true,
  530. function (){
  531. my[currentName].hide();
  532. Options.ptWinIsOpen=false;
  533. saveOptions()
  534. });
  535. var mainDiv = mainPop.getMainDiv();
  536. mainPop.getTopDiv().innerHTML = '<TABLE cellspacing=0 width=100%><TR class=CPopupTop valign=bottom><TD><SPAN id=idTabs></span></td><TD align=right rowspan=2>'+ Version +'&nbsp;<iframe src="" id="BOsound" frameborder=0 height=0 width=0></iframe></td></tr><tr><td><span id=idTabs3></span></tr></table>';
  537.  
  538. var eTabs = document.getElementById('idTabs');
  539. for (k=0; k<Tabs.length; k++){
  540. var a=document.createElement('a');
  541. a.className='matTabNotSel';
  542. a.id = 'aa'+ Tabs[k][0];
  543. a.innerHTML='<span id="sp'+ Tabs[k][0] +'" class="matTab">'+ Tabs[k][1] +'</span>';
  544. if (k==9) {
  545. var eTabs = document.getElementById('idTabs3');
  546. eTabs.innerHTML+="</tr><tr><td>";
  547. }
  548. eTabs.appendChild(a);
  549. a.addEventListener('click', clickedTab, false);
  550. my[Tabs[k][0]].init();
  551. cont = my[Tabs[k][0]].getContent();
  552. cont.style.display = 'none';
  553. mainDiv.appendChild(cont);
  554. }
  555.  
  556. setTabStyle (document.getElementById ('aaOverview'), true);
  557. my.Overview.getContent().style.display = 'block';
  558. if (Options.ptWinIsOpen){
  559. mainPop.show (true);
  560. my["Options"].show();
  561. my["Options"].hide();
  562. my[currentName].show();
  563. }
  564. window.addEventListener('unload', onUnload, false);
  565. AddMainTabLink("BoTTols", eventHideShow, mouseMainTab);
  566. CollectGold.init();
  567. CollectRessource.init();
  568. RefreshEvery.init();
  569. FoodAlerts.init();
  570. TowerAlerts.init();
  571. TowerAlerts.setPostToChatOptions(Options.alertConfig);
  572.  
  573. WideScreen.init ();
  574. WideScreen.setChatOnRight (Options.pbChatOnRight);
  575. ChatStuff.init();
  576. setInterval (HandleChatPane,2500);
  577. SpamEvery.init();
  578.  
  579. }
  580.  
  581. function onUnload (){
  582. Options.ptWinPos = mainPop.getLocation();
  583. saveOptions();
  584. }
  585.  
  586. /************ Special Tchat ***********************/
  587. var CalterUwFunc = function (funcName, findReplace) {
  588. var t = this;
  589. this.isEnabled = false;
  590. this.isAvailable = isAvailable;
  591. this.setEnable = setEnable;
  592. this.funcName = funcName;
  593. this.funcOld = unsafeWindow.Chat.chatDivContent;
  594. this.funcNew = null;
  595. try {
  596. var funcText = unsafeWindow.Chat.chatDivContent.toString();
  597. var rt = funcText.replace ('function '+ funcName, 'function');
  598. for (var i=0; i<findReplace.length; i++){
  599. x = rt.replace(findReplace[i][0], findReplace[i][1]);
  600. if (x == rt)
  601. return false;
  602. rt = x;
  603. }
  604. this.funcNew = rt;
  605. } catch (err) {
  606. }
  607. function setEnable (tf){
  608. if (t.funcNew == null)
  609. return;
  610. if (t.isEnabled != tf){
  611. if (tf){
  612. var scr=document.createElement('script');
  613. scr.innerHTML = funcName +' = '+ t.funcNew;
  614. document.body.appendChild(scr);
  615. setTimeout ( function (){document.body.removeChild(scr);}, 0);
  616. t.isEnabled = true;
  617. } else {
  618. unsafeWindow.Chat.chatDivContent = t.funcOld;
  619. t.isEnabled = false;
  620. }
  621. }
  622. }
  623. function isAvailable (){
  624. if (t.funcNew == null)
  625. return false;
  626. return true;
  627. }
  628. };
  629.  
  630.  
  631. /************************ ChatStuff************************/
  632. var ChatStuff = {
  633. chatDivContentFunc : null,
  634. getChatFunc : null,
  635. leaders : {},
  636. init : function (){
  637. var t = ChatStuff;
  638. // if(getMyAlliance()[0] > 0)
  639. // t.getAllianceLeaders();
  640. t.chatDivContentFunc = new CalterUwFunc ('Chat.chatDivContent', [['return f.join("")', 'var msg = f.join("");\n msg=chatDivContent_hook(msg);\n return msg;']]);
  641. unsafeWindow.chatDivContent_hook = t.chatDivContentHook;
  642. unsafeWindow.ptChatIconClicked = t.e_iconClicked;
  643. t.setEnable (true);
  644. },
  645. isAvailable : function (){
  646. var t = ChatStuff;
  647. t.chatDivContentFunc.isAvailable ();
  648. },
  649. setEnable : function (tf){
  650. var t = ChatStuff;
  651. t.chatDivContentFunc.setEnable (tf);
  652. if(ById("mod_comm_list1"))
  653. ById("mod_comm_list1").style.backgroundColor = "#5C0E3A";
  654. if(ById("mod_comm_list2"))
  655. ById("mod_comm_list2").style.backgroundColor = "#679183";
  656. ById("comm_tabs").style.backgroundColor = "#ECECEC";
  657. },
  658. e_iconClicked : function (name){
  659. ById('mod_comm_input').value='';
  660. var e = ById('mod_comm_input');
  661. name = name.replace(/°°/g,"'");
  662. e.value = '@'+ name +' ';
  663. e.focus();
  664. },
  665. chatDivContentHook : function (msg){
  666. var t = ChatStuff;
  667. var classs = '';
  668. var classsinfo='';
  669. var scripters = ["1691470"];
  670. var m = /div class='info'>.*<\/div>/im.exec(msg);
  671. if (m == null)
  672. return msg;
  673. if (m[0].indexOf("s'adresse \u00e0 toi") >= 0 || m[0].indexOf("Ti sussurra") >= 0 || m[0].indexOf("Whispers to you") >= 0)
  674. classs = 'ptChatWhisper';
  675. if (m[0].indexOf("** ARRIVEE **") >= 0 || m[0].indexOf("** ARRIVAL **") >= 0 || m[0].indexOf("** ARRIVANO **") >= 0)
  676. classs = 'ptChatAttack';
  677. var suid = /viewProfile\(this,([0-9]+),false,([0-9]+),/i.exec(m[0]);
  678. if (suid)
  679. if (scripters.indexOf(suid[1]) > -1 && m[0].indexOf("Murmure \u00e0")<0)
  680. msg = msg.replace ("<div class='avatar", "<div class='avatar sc1");
  681. var m = /(Domina|Dominus) (.*?)</im.exec(msg);
  682. if (m != null)
  683. msg = msg.replace ("<div class='avatar", "<div onclick=ptChatIconClicked(\'"+ m[2] +"\'); class='avatar");
  684. msg = msg.replace ("class='content'", "class='content "+ classs +"'");
  685. if (classs.indexOf('ptChatWhisper')>=0 && Options.Chuchoenabled) {
  686. msg = msg.replace ("Ti sussurra",'<font color=red> Ti sussurra </font><span style="visibility:hidden"><object type="application/x-shockwave-flash" data="'+SWF_PLAYER_URL+'" width="10" height="10" id="dewplayer" name="dewplayer"><param name="wmode" value="transparent" /><param name="movie" value="'+SWF_PLAYER_URL+'" /><param name="flashvars" value="mp3='+Options.urlChucho+'&amp;autostart=1&amp;showtime=1&amp;volume=100" /></object></span>');
  687. msg = msg.replace ("s'adresse \u00e0 toi",'<font color=red> s\'adresse \u00e0 toi </font><span style="visibility:hidden"><object type="application/x-shockwave-flash" data="'+SWF_PLAYER_URL+'" width="10" height="10" id="dewplayer" name="dewplayer"><param name="wmode" value="transparent" /><param name="movie" value="'+SWF_PLAYER_URL+'" /><param name="flashvars" value="mp3='+Options.urlChucho+'&amp;autostart=1&amp;showtime=1&amp;volume=100" /></object></span>');
  688. msg = msg.replace ("Whispers to you",'<font color=red> Whispers to you </font><span style="visibility:hidden"><object type="application/x-shockwave-flash" data="'+SWF_PLAYER_URL+'" width="10" height="10" id="dewplayer" name="dewplayer"><param name="wmode" value="transparent" /><param name="movie" value="'+SWF_PLAYER_URL+'" /><param name="flashvars" value="mp3='+Options.urlChucho+'&amp;autostart=1&amp;showtime=1&amp;volume=100" /></object></span>');
  689. }
  690. if (classs.indexOf('ptChatAttack')>=0 && Options.Attackenabled) {
  691. msg = msg.replace ("** ARRIVEE **",'<font color=red>** ARRIVEE **</font><span style="visibility:hidden"><object type="application/x-shockwave-flash" data="'+SWF_PLAYER_URL+'" width="10" height="10" id="dewplayer" name="dewplayer"><param name="wmode" value="transparent" /><param name="movie" value="'+SWF_PLAYER_URL+'" /><param name="flashvars" value="mp3='+Options.urlAttack+'&amp;autostart=1&amp;showtime=1&amp;volume=100" /></object></span>');
  692. msg = msg.replace ("** ARRIVAL **",'<font color=red>** ARRIVAL **</font><span style="visibility:hidden"><object type="application/x-shockwave-flash" data="'+SWF_PLAYER_URL+'" width="10" height="10" id="dewplayer" name="dewplayer"><param name="wmode" value="transparent" /><param name="movie" value="'+SWF_PLAYER_URL+'" /><param name="flashvars" value="mp3='+Options.urlAttack+'&amp;autostart=1&amp;showtime=1&amp;volume=100" /></object></span>');
  693. msg = msg.replace ("** ARRIVANO **",'<font color=red>** ARRIVANO **</font><span style="visibility:hidden"><object type="application/x-shockwave-flash" data="'+SWF_PLAYER_URL+'" width="10" height="10" id="dewplayer" name="dewplayer"><param name="wmode" value="transparent" /><param name="movie" value="'+SWF_PLAYER_URL+'" /><param name="flashvars" value="mp3='+Options.urlAttack+'&amp;autostart=1&amp;showtime=1&amp;volume=100" /></object></span>');
  694. }
  695. if (m[0].indexOf('a besoin de pommes') >= 0 || m[0].indexOf('ha bisogno di cibo') >= 0 || m[0].indexOf('is running out of food') >= 0) {
  696. var testt = /;'> ([0-9]+),<span><\/span>([0-9]+) <\/a>#/i.exec(m[0]);
  697. if (testt) {
  698. msg +='<div onclick="BOTransportDetect('+parseIntNan(testt[1])+','+parseIntNan(testt[2])+')" style="position: absolute; background-image: url(\'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAB2RJREFUeNrsVltvXFcV/s79nDlzv/mS2HHjxKkCATUQWkRKylWtAEWCB0BCSCn0ideCEO8I8QsQQkhIEfBEVYlLVbUoqtKmkJKLHcepk7h2HN9mPPaM58y5XzbfOI1QEC88oD7QLa25nLP3Xnut9X3f2pIQAh/EkPEBjf8/x6okSbANHcV8HrJpwfB9iGIRzXoVf//HVXzly5/DmdNPNS5eung6eOv6k0eKuclLsnZ+aeC9Muh2Uedau1RCzLXTEpBlGfDYNJ4/dw4zUyP49a9+id/+7mU0azW0+33kcjkMcaX++0mGUIsg7RtoS/c3oF6bN0Wr89WZLDl9PGc1u5IU3HXE3zihG+/P5zoGIEn/RcQPf6Tvb2AL8bWTIj07ItJylM9dXmh1rjXXNr991u2fk2wFx1QdJyeb59Z2uoffBF57AsKuSShc9rw5V1OXVU1rS7J8TzOMPcM0IVQFw8MFaarGWZY89Ld/RlXXcKBc/vQhXf/+Fza3nv9UIQ9p4iBaUYQ/LK+Kz6SxNCmy/dkaU9KcfgzvBD5m72/hO7YJe3oaVySB3q3b2bhp9d8ytM7Ng5Nb41OHFrB44/DEert26PCk9sfNzqV3XP9FVZYdSTdMHM1ZP38hjn40M1aFXynj8vUFdKIUk4aGmWoeW16Inb4Hi46rD4CBNUWBFCUoDKMxDByemcbqygqSKIBVLuLVVg8+331JAcaLFk4+9Un0efgXry/97Mr29k+U737zWz8Yuzn3Uyv0YdDRkSPHsK6qMNsdfDzNUJs4gKknTmCjtYNbfoj7jLhP2+W7QrGAxngTolHG/NIy5kWEFUnBqKKjTr6cThMcHhYzSDC4t4FypYS2aozOe/55xfK8Pz3dbtsTjMYc+Mh6fbRY8FJ/D2UuCnsOUifAwPMxYho4dvxx7GkKUs/FGSuHqiqjbhsIGendIMYzsolTo00gSTFwfWIGMLi3xIPGG238uefU5KMzE4qwtR/KA9eeZAnznLDuenivtweDTlMNKMYZOnsOlqIYR2WBohRiPQxRcgMU/QCJO8Bmvws3jjFKdDY4T+F7k+lfJjUdOta5b4WBv00fb+pAbbzkKFOj1ufNKfPo3CDGQpChzQl8jzZT1eWiKekBAlf4YScZjMhH6oaIOEnhswItx7kN4nX4bH6IATrPBwHuZQJ/5f9heRZps0cK+PqzY1i8755XWzvxG5MV/bngkIm9SEbQj5nGFJthilNBine50KT1aHO0J4mYUX4v4sHBhs6a75PkCu0mrTXkNVO7nddgjllozBQxccDCGYMp8WIsbXgL6iBIFqNEh56m0DUJjY9VUC7oOEHkmn6CrhPDZ6QpU77FrFzloVRZwirrrSgaVlnXhppCLppQtAzPFFXUKiYaoxYmGyoK5P4e192952BjtQ9faAM/zBZV3w9mgzTfUoQYEXGCsB8wVwLVmgmtrGH0RBHjdQPjNXKbXI0y1lAh6o08hFEmsQ2odKwKPk9j0inGoO8jN8QIg+n2XbgDj84TxInAnR0su4P+nCqydKXnirURUx1x3QghJzuEf9mPkCYy7IZO5KYQRLVWLCNvV6hyChyPICnYMEsjUHiAOHIR+g6SzMGuuw5PDTkrQWuPFOtE8MIMY1Udr9zOZmVFiVXTygk3FNftqvYJj6DJSCWTFMmZMlRFRqfPaCimBT2C5VPcjRC5Sh1eYiCfUfAjhS2OKoE8wiSAS1bEBFXAvUQSwnETyNx0rCzDC3Tc63Rf2lfLKAyw25NelydL37MNFywfBn4KZgxjNQ2Neg4lRqaKlFyN4bEjyaSUqhfQ3tiFmbOgGzYxo0KnjqssQ6NRQhay0bg9BEEImQFsdzx0AyNOJfNWwWZQwzbmBenVQawnhmWoFC3kWaAoFbi77oOqCJltrGLJsAg+haCrF3WY9TokzWKLk5BJGhSfUcsW5HAXe5vraO/2GG1ELKgomgoy6u27nWwuCOMNU1f2c0QQJDutXvRezra+mNdhcC/USvo+JXIUEU3V4DgJAorEkDmpUODHKXpOiB7B6Dg+VSpgAARn4CGKQuIjQ7OqMgMSnEHIDqXg9fngpbXN7ssBOa48bFNxHN/YdsQbiaR/tFrQD/I/gaTxgmAQRCpGyxZKdo70yMOwCyiwzqqWo7ooGKdeF6vj1OIGs6XB0rPhfvuliZMEvUDGa/PJ7YvXtn7MS8CQ5v9yPByarq11uv7vW33RZs1mIMsVQd3yw4gbkfxSAomNQMpYYxFA1wVVToVmFpg1ZR9MHiU0ZjYUgmWYjQtzzvpvXm3/4u3ZzRfodPmRfvxwDIGS8KSyJDNdScWyjLMHm9Y3jk8VPntiyiweGSd4pAwVgoNlQq5ATdPy5HaOYDMQZBZu3N4JVza6/YU77QtXF7f/stvzLlAAVlm3R24g/9Gxyl6bsLskyb4WNjRd/8hozX768an6KRWD6tSIIVULlBGGRdbEu4HWHwRyfL/lbtxZ6VxJUzHX98I7aRx3Nd5AeCNhIPGjjj+80H/o+H81/inAAPD+pq3c2maWAAAAAElFTkSuQmCC\'); background-repeat: no-repeat; border-radius: 3px 3px 3px 3px; height: 18px; width: 18px; border: 2px inset rgb(96, 0, 0); box-shadow: 0px 0px 2px rgb(255, 255, 255); left: 3px; top: 30px; "></div>';
  699. }
  700. }
  701. if (Options.Smiley) {
  702. for (k in Smileys) {
  703. if (k=="(massage)")
  704. msg=msg.replace(k, '<img style="width:32px !important;height:24px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  705. else if (k=="*kissing*")
  706. msg=msg.replace(k, '<img style="width:47px !important;height:30px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  707. else if (k=="(fouet)")
  708. msg=msg.replace(k, '<img style="width:60px !important;height:30px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  709. else if (k=="(sonic)")
  710. msg=msg.replace(k, '<img style="width:64px !important;height:64px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  711. else if ( k=="(renne)" || k=="(tigre)" || k=="(girafe)" || k=="(elephant)" || k=="(rat)")
  712. msg=msg.replace(k, '<img style="width:60px !important;height:60px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  713. else if (k=="(spider)")
  714. msg=msg.replace(k, '<img style="width:95px !important;height:57px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  715. else if (k=="(hamta)" || k=="(cat)")
  716. msg=msg.replace(k, '<img style="width:31px !important;height:40px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  717. else if (k=="(shark2)")
  718. msg=msg.replace(k, '<img style="width:117px !important;height:50px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  719. else if (k=="(concombre)")
  720. msg=msg.replace(k, '<img style="width:100px !important;height:50px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  721. else if (k=="(baby)")
  722. msg=msg.replace(k, '<img style="width:56px !important;height:40px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  723. else if (k=="]:->" || k=="(pingouin)" || k=="(shark)")
  724. msg=msg.replace(k, '<img style="width:35px !important;height:35px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  725. else if (k=="(bath)" || k=="(emotlove2)" || k=="(smyno)")
  726. msg=msg.replace(k, '<img style="width:40px !important;height:40px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  727. else if (k=="(miroir)")
  728. msg=msg.replace(k, '<img style="width:45px !important;height:45px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  729. else if (k=="(caribou)")
  730. msg=msg.replace(k, '<img style="width:65px !important;height:33px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  731. else if (k=="(magebarbe)")
  732. msg=msg.replace(k, '<img style="width:45px !important;height:45px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  733. else if (k=="(couette)" || k=="(ver)")
  734. msg=msg.replace(k, '<img style="width:60px !important;height:45px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  735. else if (k=="(fox)" || k=="(heidy)")
  736. msg=msg.replace(k, '<img style="width:30px !important;height:30px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  737. else if (k=="(autruche)")
  738. msg=msg.replace(k, '<img style="width:93px !important;height:84px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  739. else if (k=="(panda)" || k=="(crabe)" || k=="(tortue)"|| k=="(vache)" || k=="(singe)" || k=="(bravo2)" || k=="(bubulle)" || k=="(chien)" || k=="(cuicui)" || k=="(bubulle)" || k=="(cochon)" || k=="(lapin)" || k=="(grenouille)")
  740. msg=msg.replace(k, '<img style="width:66px !important;height:66px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  741. else if (k=="(herisson)" || k=="(lion)" || k=="(chat)" || k=="(papillon)" || k=="(serpent)" || k=="(dragon)" || k=="(camelot)")
  742. msg=msg.replace(k, '<img style="width:77px !important;height:77px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  743. else if (k=="(ours)" || k=="(taupe)" )
  744. msg=msg.replace(k, '<img style="width:88px !important;height:88px !important" class=emoicon src=\"'+Smileys[k]+'\">')
  745. else if (k=="(bienmal)")
  746. msg=msg.replace(k, '<img style="width:109px !important;height:60px !important" class=emoicon src=\"'+Smileys[k]+'\">')
  747. else if (k=="(aigle)")
  748. msg=msg.replace(k, '<img style="width:65px !important;height:100px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  749. else if (k=="(hippo)")
  750. msg=msg.replace(k, '<img style="width:73px !important;height:115px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  751. else if (k=="(Jolly)")
  752. msg=msg.replace(k, '<img style="width:85px !important;height:52px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  753. else if (k=="(lapin1)" || k=="(lapin2)" || k=="(lapin3)")
  754. msg=msg.replace(k, '<img style="width:96px !important;height:96px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  755. else if (k=="(Italy)")
  756. msg=msg.replace(k, '<img style="width:120px !important;height:90px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  757. else if (k=="(SpiderPig)")
  758. msg=msg.replace(k, '<img style="width:265px !important;height:110px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  759. else if (k=="(Wolf)")
  760. msg=msg.replace(k, '<img style="width:192px !important;height:122px !important" class=emoicon src=\"'+Smileys[k]+'\">');
  761. else
  762. msg=msg.replace(k, '<img class=emoicon src=\"'+Smileys[k]+'\">');
  763. }
  764.  
  765. }
  766. return msg;
  767. }
  768. }
  769. /************************ Tower Alerts ************************/
  770. var TowerAlerts = {
  771. viewImpendingFunc : null,
  772. generateIncomingFunc : null,
  773. AlarmeTimer: null,
  774. fixTargetEnabled : false,
  775. compteur: 0,
  776. init : function (){
  777. var t = TowerAlerts;
  778. },
  779. secondTimer : null,
  780. setPostToChatOptions : function (obj){
  781. var t = TowerAlerts;
  782. clearTimeout(t.secondTimer);
  783. if (Options.alertConfig.aChat)
  784. t.e_eachSecond();
  785. },
  786. e_eachSecond : function (){ // check for incoming marches
  787. var t = TowerAlerts;
  788. var now = unixTime();
  789. unsafeWindow.player.allCities().sortBy(function(c){return c.number}).each(function(f,c){
  790. var d="",e="";
  791. if(f.underAttack()) {
  792. Cities.byID[f.id].c.incomingAttackMarches().each(function(c){
  793. var b=Cities.byID[f.id].c.marches.incoming[c.id];
  794. var arrivalTime = b.secondsToDestination()>0?b.secondsToDestination():0;
  795. if ((arrivalTime>0) && (t.getTowerMarch(b.id)==null || t.getTowerMarch(b.id)==undefined))
  796. {
  797. t.addTowerMarch (b.id, arrivalTime);
  798. if (Options.alertSound.enabled){
  799. my.Options.soundTheAlert();
  800. if (arrivalTime > Options.alertSound.expireTime)
  801. Options.alertSound.expireTime = arrivalTime;
  802. }
  803. t.postToChat (f, c, false);
  804. saveOptions ();
  805. }
  806. });
  807. }
  808. });
  809. t.secondTimer = setTimeout (t.e_eachSecond, 5000);
  810. },
  811. addTowerMarch : function (id, arrivalTime){
  812. var t = TowerAlerts;
  813. var now = unixTime();
  814.  
  815. for (k in Options.towerMarches){
  816. if ((Options.towerMarches[k].arrival+Options.towerMarches[k].added) < now) {
  817. //Options.towerMarches[k] = null;
  818. delete Options.towerMarches[k];
  819. }
  820. }
  821. Options.towerMarches['m' + id] = { added:now, arrival:arrivalTime };
  822. },
  823. getTowerMarch : function (mid){
  824. var t = TowerAlerts;
  825. return Options.towerMarches['m'+mid];
  826. },
  827. postToChat: function(f, c, force){
  828. var t = TowerAlerts;
  829. var e="";
  830. if(c.from.allianceId>0&&Seed.allianceNames&&Seed.allianceNames["a"+b.from.allianceId]){
  831. e="(" + Seed.allianceNames["a"+b.from.allianceId] +")";
  832. }else{
  833. if(c.from.allianceName!==null){e="(" + c.from.allianceName+")";}
  834. }
  835. if(Cities.byID[f.id].c.wilds[c.to.tileId]){
  836. var a=unsafeWindow.arStrings.Common.Wilderness+" " + unsafeWindow.Watchtower.generateCoords(c.to.cityId,c.to.tileId)
  837. } else{
  838. var a=unsafeWindow.arStrings.Common.City+" " + unsafeWindow.player.cities[c.to.cityId].name + ' ('+unsafeWindow.player.cities[c.to.cityId].x +','+ unsafeWindow.player.cities[c.to.cityId].y +')';
  839. if (Cities.byID[f.id].c.defending!=0)
  840. a+=" (DEFENDS) ";
  841. else
  842. a+=" (SANCTUARY) ";
  843. }
  844. var b=Cities.byID[f.id].c.marches.incoming[c.id];
  845. var attaquant=unsafeWindow.GOR.players[c.from.playerId]?unsafeWindow.GOR.players[c.from.playerId].name:"?";
  846.  
  847. var arrivalTime = b.secondsToDestination()>0?timestr(b.secondsToDestination()):message;
  848. var msg ='';
  849. msg += b.general.level?" "+unsafeWindow.arStrings.Common.General+" : "+b.general.level:"";
  850. msg +=' *** ARRIVAL *** ';
  851. unsafeWindow.Object.keys(b.units).each(function(h){
  852. if(b.units[h].sent>0) {
  853. msg += b.units[h].sent + ' ' + unsafeWindow.arStrings.unitName["u"+h] + ', ';
  854. }
  855. });
  856. msg = msg.slice(0, -2);
  857. msg += " ("+unsafeWindow.arStrings.Common.Arrival+" " + arrivalTime + "). " ;
  858. var mess = Options.alertConfig.aPrefix +" "+unsafeWindow.arStrings.Common.Target+" : " + a +" "+unsafeWindow.arStrings.Common.Attacker+" : " + " " +attaquant + " "+e+" " + msg;
  859.  
  860. var lancement=0;
  861. sendChat("/a " + mess);
  862.  
  863. }
  864. }
  865. /************* MARCHES ***************/
  866. my.marches = {
  867. cont:null,
  868. state : null,
  869. displayTimer:null,
  870. getContent : function (){
  871. var t = my.marches;
  872. return t.cont;
  873. },
  874. init : function (){
  875. var t = my.marches;
  876. t.cont = document.createElement('div');
  877. return this.cont;
  878. },
  879. show : function () {
  880. var t = my.marches;
  881. clearTimeout (t.displayTimer);
  882. if (t.state == null){
  883. t.cont.innerHTML = '<DIV id=marchesContent style="height:660px; max-height:660px; overflow-y:auto"></div>';
  884. t.state = 1;
  885. }
  886. var m = "";
  887. var ma ="";
  888. var roww=0;
  889. unsafeWindow.player.allCities().sortBy(function(c){return c.number}).each(function(f,c){
  890. var d="",e="";
  891. if(f.underAttack()) {
  892. Cities.byID[f.id].c.incomingAttackMarches().each(function(c){
  893. var b=Cities.byID[f.id].c.marches.incoming[c.id];
  894. var arrivalTime = b.secondsToDestination()>0?b.secondsToDestination():0;
  895. if ((arrivalTime>0))
  896. {
  897. roww++;
  898. couleur="";
  899. if (roww%2) couleur=" style='background:#e8e8e8'";
  900. var arrivalTime = b.secondsToDestination()>0?timestr(b.secondsToDestination()):"unknown";
  901. var attaquant=unsafeWindow.GOR.players[c.from.playerId]?unsafeWindow.GOR.players[c.from.playerId].name:"?";
  902. if(Cities.byID[f.id].c.wilds[c.to.tileId]){
  903. var a='TS ' + unsafeWindow.Watchtower.generateCoords(c.to.cityId,c.to.tileId)
  904. } else{
  905. var a='Ville ' + unsafeWindow.player.cities[c.to.cityId].name + ' ('+unsafeWindow.player.cities[c.to.cityId].x +','+ unsafeWindow.player.cities[c.to.cityId].y +')';
  906. }
  907. ma += "<tr><td "+couleur+">" + a + "</td><td "+couleur+">" + arrivalTime +"</td>";
  908. var e="";
  909. if(c.from.allianceId>0&&Seed.allianceNames&&Seed.allianceNames["a"+b.from.allianceId]){
  910. e="" + Seed.allianceNames["a"+b.from.allianceId] +"";
  911. }else{
  912. if(c.from.allianceName!==null){e="" + c.from.allianceName+"";}
  913. }
  914. ma += "<td "+couleur+">" + attaquant + "</td><td "+couleur+">"+e+"</td>";
  915. ma +="<td "+couleur+">" +(b.general.level?" Niv "+b.general.level:" unknown ") + "</td>";
  916. var unt="";
  917. unsafeWindow.Object.keys(b.units).each(function(h){
  918. if(b.units[h].sent>0) {
  919. unt += b.units[h].sent + ' ' + unsafeWindow.arStrings.unitName["u"+h] + '<br>';
  920. }
  921. });
  922. unt = unt.slice(0, -2);
  923. ma +="<td "+couleur+">" + unt + "</td>";
  924. ma +="</tr>";
  925. }
  926. });
  927. }
  928. });
  929. if (ma!="") {
  930. m += '<DIV class=ptstat>INCOMING ATTACK(S)</div>';
  931. m += "<table class='marches' width=100% cellspacing=0 bordercolor=black cellpadding=4><tr style='height:30px'><td><b>Target's Coordinates</td><td><b>Times</td><td><b>Attacker</td><td><b>Alliance</td><td><b>General</td><td><b>Troops</td><tr>";
  932. m += ma;
  933. m += "</table><br>";
  934. }
  935. var roww=0;
  936. var ms="";
  937. unsafeWindow.player.allCities().sortBy(function(c){return c.number}).each(function(f,c){
  938. var a=unsafeWindow.Object.values(Cities.byID[f.id].c.marches.outgoing).compact();
  939. a=a.concat(unsafeWindow.Object.values(Cities.byID[f.id].c.marches.bgReinforcements).compact());
  940. a.each(function(d){
  941. var g="",e='<a onclick="KB.Controllers.MapHelper.gotoCoord('+d.to.x +','+ d.to.y +');">('+d.to.x+','+ d.to.y +')</a>';
  942. roww++;
  943. couleur=""
  944. if (roww%2) couleur=" style='background:#e8e8e8'";
  945. var now = unixTime();
  946. var arrivalTime = d.secondsToDestination()>0?timestr(d.secondsToDestination()):d.secondsToReturn()>0?timestr(d.secondsToReturn()):"unknown";
  947. ms+="<tr>"
  948. ms+="<td "+couleur+">" + Cities.byID[f.id].c.name + "</td><td "+couleur+">"+arrivalTime+"</td><td "+couleur+">"+d.typeString()+"</td><td "+couleur+">"+d.statusString()+"</td><td "+couleur+">"+e+"</td>";
  949. gen=Cities.byID[f.id].c.generals[d.general.id];
  950. if (gen!=undefined) {
  951. ms+="<td "+couleur+">"+gen.name +" ("+gen.level()+")</td>"
  952. }else {
  953. ms+="<td "+couleur+">??</td>";
  954. }
  955. ms+="<td "+couleur+">";
  956. unsafeWindow.Barracks.allUnitIds.each(function(j){
  957. var i=(d.returning()||d.defending())?d.units[j].returning:d.units[j].sent;
  958. if (i>0)
  959. ms +=addCommas(i)+ " "+ unsafeWindow.arStrings.unitName["u"+j] +"<br>";
  960. });
  961. ms+="</td></tr>";
  962. });
  963. });
  964. if (ms!="") {
  965. m+= '<DIV class=ptstat>OUTGOING MARCHES</div>';
  966. m += "<table class='marches' width=100% cellspacing=0 bordercolor=black cellpadding=4><tr style='height:30px'><td><b>City</td><td><b>Times</td><td><b>Type</td><td><b>Status</td><td><b>Coordinates</td><td><b>General</td><td><b>Troops</td></tr>";
  967. m += ms;
  968. m += "</table><br>";
  969. }
  970. var ms="";
  971. var roww=0;
  972. unsafeWindow.player.allCities().sortBy(function(c){return c.number}).each(function(f,c){
  973. Cities.byID[f.id].c.incomingDefendingMarches().each(function(e){
  974. var g=unsafeWindow.GOR.players[e.from.playerId]?unsafeWindow.GOR.players[e.from.playerId].name:e.from.playerName;
  975. var zz=addCommasInt(e.upkeep());
  976. var XCoord=e.from.x;
  977. var YCoord=e.from.y;
  978. var MarchId=e.id;
  979. roww++;
  980. couleur=""
  981. if (roww%2) couleur=" style='background:#e8e8e8'";
  982. ms +="<tr><td></td>";
  983. ms+='<td '+couleur+'>' + Cities.byID[f.id].c.name + '</td><td '+couleur+'><a onclick="KB.Controllers.MapHelper.gotoCoord('+ XCoord +','+ YCoord +');">('+ XCoord +','+ YCoord +')</a>&nbsp;'+g+'</td>';
  984. ms+="<td "+couleur+">"+zz+"</td><td>";
  985. var a=Cities.byID[f.id].c.marches.incoming[MarchId];
  986. unsafeWindow.Barracks.allUnitIds.each(function(i){
  987. gg=a.units[i].sent;
  988. if (gg>0)
  989. ms +=addCommas(gg)+ " "+ unsafeWindow.arStrings.unitName["u"+i] +"<br>";
  990. });
  991. var now = unixTime();
  992. var arrivalTime = a.getTimeLeftBeforeDecamping()>0?timestr(a.getTimeLeftBeforeDecamping()):"unknown";
  993. ms+="</td><td>"+ arrivalTime +"</td></tr>";
  994. });
  995. });
  996. if (ms!="") {
  997. m += '<DIV class=ptstat>RECEIVED REINFORCEMENTS</div>';
  998. m += "<table class='marches' width=100% cellspacing=0 bordercolor=black cellpadding=4><tr style='height:30px'><td></td><td><b>City reinforcements;</td><td><b>"+unsafeWindow.arStrings.Embassy.SentFrom+"</td><td><b>"+unsafeWindow.arStrings.Common.UpKeep+"</td><td>Troops</td><td>Times</td></tr>";
  999. m += ms;
  1000. m += "</table><br>";
  1001. }
  1002. document.getElementById('marchesContent').innerHTML = m;
  1003. t.displayTimer=setTimeout(t.show, 4000);
  1004. },
  1005. hide : function (){
  1006. var t = my.marches;
  1007. clearTimeout (t.displayTimer);
  1008. },
  1009. };
  1010. /************* RAPPORTS **************/
  1011. my.Hud = {
  1012. cont:null,
  1013. state : null,
  1014. popReport :null,
  1015. minPages: parseInt(Options.arPageFrom),
  1016. maxPages: parseInt(Options.arPageTo),
  1017. totalPages: parseInt(Options.arPageTo),
  1018. data:[],
  1019. getContent : function (){
  1020. var t = my.Hud;
  1021. return t.cont;
  1022. },
  1023. init : function (){
  1024. var t = my.Hud;
  1025. t.cont = document.createElement('div');
  1026. return this.cont;
  1027. },
  1028. deleteAllReports:function() {
  1029. var g={};
  1030. g.requestType="deleteAll";
  1031. unsafeWindow.AjaxCall.gPostRequest("deleteCheckedReports.php",g,function(i){
  1032. unsafeWindow.seed.newReportCount = 0;
  1033. })
  1034. },
  1035. show : function () {
  1036. var t = my.Hud;
  1037. t.minPages=parseInt(Options.arPageFrom);
  1038. t.maxPages=parseInt(Options.arPageTo);
  1039. t.getAllianceReports();
  1040. unsafeWindow.getReport = t.getReportBody;
  1041. t.cont.innerHTML = '\
  1042. <DIV class=ptstat>CHECK ALLIANCE REPORTS </div>\
  1043. <DIV class=ptentry style="height:30px"><table>\
  1044. <tr><td class=xtab> Pages :&nbsp;<INPUT id="idRptPageFrom" size=1 value="' + t.minPages + '">&#8211;<INPUT id="idRptPageTo" size=1 value="' + t.maxPages + '"> \
  1045. <span id=idSpanNumPages></span>\
  1046. </td>\
  1047. <TD class=xtab><INPUT id="idHudSearch" type=submit value="OK" />\
  1048. <span id=idSpanHudErrorMsg></span><td><select id="idHudTypeSearch"><option value="">All reports</option><option value="0">Incoming attacks</option><option value="1">Outgoing attacks</option><option value="2">Reinforcements</option></select>\
  1049. <select id="idHudMedSearch"><option value="">All reports</option><option value=1>My reports only</option></select></td><td><input type="button" value="Delete all reports " id="BOSuppRapp1"></tr>\
  1050. </table></div>\
  1051. <DIV id="hudResultsDiv" style="height:620px; max-height:620px; overflow-y:auto;"></div>';
  1052. document.getElementById('idHudSearch').addEventListener ('click', t.handleHudSearch, false);
  1053. document.getElementById('idHudMedSearch').addEventListener ('click', t.DisplayReports, false);
  1054. document.getElementById('idHudTypeSearch').addEventListener ('click', t.DisplayReports, false);
  1055. document.getElementById('idRptPageFrom').addEventListener ('change', t.handleRptPages, false);
  1056. document.getElementById('idRptPageTo').addEventListener ('change', t.handleRptPages, false);
  1057. document.getElementById("BOSuppRapp1").addEventListener('click', t.deleteAllReports, false);
  1058. },
  1059. getReportBody : function(Date1,ID,TileId,SideNum, Nom1, Coord1, Nom2, Coord2){
  1060. var t = my.Hud;
  1061. if(SideNum=="Ent") SideNum=0;
  1062. if(SideNum=="Sor") SideNum=1;
  1063. if(SideNum=="Ren") SideNum=0;
  1064. var c = {};
  1065. c.rid=ID;
  1066. c.side=SideNum;
  1067. if (SideNum=="Ren") SideNum = 2;
  1068. unsafeWindow.AjaxCall.gPostRequest("fetchReport.php",c,
  1069. function(rslt){
  1070. t.showReportBody(Date1, rslt.data,TileId,SideNum,Nom1, Coord1, Nom2, Coord2);
  1071. },
  1072. function (rslt) {
  1073. }
  1074. );
  1075. },
  1076. handleRptPages: function(){
  1077. var t = my.Hud;
  1078. t.minPages=parseInt(document.getElementById("idRptPageFrom").value);
  1079. t.maxPages=parseInt(document.getElementById("idRptPageTo").value);
  1080. if (t.maxPages < t.minPages) {
  1081. t.maxPages = t.minPages;
  1082. document.getElementById("idRptPageTo").value = t.maxPages;
  1083. }
  1084. Options.arPageFrom = t.minPages;
  1085. Options.arPageTo = t.maxPages;
  1086. saveOptions();
  1087. t.totalPages=t.maxPages;
  1088. },
  1089. showReportBody: function (Date1,rslt,TileId,SideNum,Nom1,Coord1,Nom2,Coord2) {
  1090. var t = my.Hud;
  1091. if (t.popReport == null) {
  1092. t.popReport = new CPopup('pbShowBarbs', 0, 0, 520, 600, true, function() {clearTimeout (1000);});
  1093. t.popReport.centerMe (mainPop.getMainDiv());
  1094. }
  1095. var m = '';
  1096. m+='<TABLE class=ptTab cellpadding=3>';
  1097. if (SideNum==0) {
  1098. // Seulement les attaques entrantes
  1099. if (TileId < 51 && rslt['tileLevel']!=undefined) m+='<TD><FONT size="4px">Wild level '+rslt['tileLevel']+'</font></td>';
  1100. if (TileId < 51 && rslt['tileLevel']==undefined) m+='<TD><FONT size="4px">Wild</font></td>';
  1101. if (rslt['conquered']==1) m+='<TD><FONT color="#CC0000" size="4px">Conquered</font></td></tr>';
  1102. if (rslt['winner']==1) m+='<TR><TD><FONT color="#CC0000" size="4px"><b>Defeat</b><br></font></td></tr></table>';
  1103. if (rslt['winner']==0) m+='<TR><TD><FONT color="green" size="4px"><b>Victory</b><br></font></td></tr></table>';
  1104. if (rslt['fght'] != undefined){
  1105. m+='<TABLE style="float:left;width:45%;" class=ptTab><tr><td colspan=3><b>Attacker : '+Nom1+' <a href="javascript:void(0)" onclick="KB.Controllers.MapHelper.gotoCoord('+ Coord1 +');" class="coordinateLink">('+ Coord1 +')</a></b><br>General : '+ rslt['s1KCombatLv'] +'<br>Number of tour(s) : '+rslt['rnds']+'<br>Bonus : '+ parseInt(rslt['s1atkBoost']*100) +' % attack - '+ parseInt(rslt['s1defBoost']*100) +' % Defence</td></tr>\
  1106. <TR style="background-color:#E5DDC9;color: #422714;font-size: 12px;font-weight: bold;"><TD align="center">Troops</td><TD align="center">Killed</td><TD align="center">Survived</td></tr>';
  1107. if (rslt['fght']["s1"] != undefined) {
  1108. unsafeWindow.Barracks.allUnitIds.each(function(i){
  1109. if (rslt['fght']["s1"]['u'+i] != undefined) {
  1110. if (rslt['fght']["s1"]['u'+i][0] > rslt['fght']["s1"]['u'+i][1]) m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+rslt['fght']["s1"]['u'+i][0]+'</td><TD align="center"><FONT color="#CC0000">'+rslt['fght']["s1"]['u'+i][1]+'</font></td></tr>';
  1111. else m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></div></td><TD align="center">'+rslt['fght']["s1"]['u'+i][0]+'</td><TD align="center">'+rslt['fght']["s1"]['u'+i][1]+'</td></tr>';
  1112. }
  1113. });
  1114. }
  1115. m+='</table><TABLE style="float:right;width:45%;" class=ptTab><tr><td colspan=3><b>Defender : '+Nom2+' <a href="javascript:void(0)" onclick="KB.Controllers.MapHelper.gotoCoord('+ Coord2 +');" class="coordinateLink">('+ Coord2 +')</a></b><br>General : '+ rslt['s0KCombatLv'] +'<br><br>Bonus : '+ parseInt(rslt['s0atkBoost']*100) +' % attack - '+ parseInt(rslt['s0defBoost']*100) +' % Defence</td></tr>';
  1116. if (rslt['fght']["s0"] != undefined) {
  1117. m+='<TR style="background-color:#E5DDC9;color: #422714;font-size: 12px;font-weight: bold;"><TD align="center">Troops</td><TD align="center">Killed</td><TD align="center">Survived</td></tr>';
  1118. for (var i=60;i<=63;i++) {
  1119. if (rslt['fght']["s0"]['f'+i] != undefined) {
  1120. if (rslt['fght']["s0"]['f'+i][0] > rslt['fght']["s0"]['f'+i][1]) m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+rslt['fght']["s0"]['f'+i][0]+'</td><TD align="center"><FONT color="#CC0000">'+rslt['fght']["s0"]['f'+i][1]+'</font></td></tr>';
  1121. else m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+rslt['fght']["s0"]['f'+i][0]+'</td><TD align="center">'+rslt['fght']["s0"]['f'+i][1]+'</td></tr>';
  1122. }
  1123. }
  1124. unsafeWindow.Barracks.allUnitIds.each(function(i){
  1125. if (rslt['fght']["s0"]['u'+i] != undefined) {
  1126. if (rslt['fght']["s0"]['u'+i][0] > rslt['fght']["s0"]['u'+i][1]) m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+rslt['fght']["s0"]['u'+i][0]+'</td><TD align="center"><FONT color="#CC0000">'+rslt['fght']["s0"]['u'+i][1]+'</font></td></tr>';
  1127. else m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+rslt['fght']["s0"]['u'+i][0]+'</td><TD align="center">'+rslt['fght']["s0"]['u'+i][1]+'</td></tr>';
  1128. }
  1129. });
  1130. for (var i=50;i<=55;i++) {
  1131. if (rslt['fght']["s0"]['f'+i] != undefined) {
  1132. if (rslt['fght']["s0"]['f'+i][0] > rslt['fght']["s0"]['f'+i][1]) m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+rslt['fght']["s0"]['f'+i][0]+'</td><TD align="center"><FONT color="#CC0000">'+rslt['fght']["s0"]['f'+i][1]+'</font></td></tr>';
  1133. else m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+rslt['fght']["s0"]['f'+i][0]+'</td><TD align="center">'+rslt['fght']["s0"]['f'+i][1]+'</td></tr>';
  1134. }
  1135. }
  1136. } else {
  1137. m+="<tr><td><br>No troops defending</td></tr>";
  1138. }
  1139. m+='<TR><TD></TD></TR></table>';
  1140. }
  1141. if (rslt['unts']!= undefined) { // pour les renforts :) lol ca sert pas pour le moment
  1142. // Renfort !
  1143. m+='<TABLE style="float:right;width:45%;" class=ptTab><TR style="background-color:#E5DDC9;color: #422714;font-size: 12px;font-weight: bold;"><TD align="center">Troops</td><TD align="center">Reinforcements;</td></tr>';
  1144. unsafeWindow.Barracks.allUnitIds.each(function(i){
  1145. if (rslt['unts']['u'+i] != undefined) m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+rslt['unts']['u'+i]+'</td></tr>';
  1146. });
  1147. m+="</table>";
  1148. }
  1149. m+='<TR><TD></TD></TR><TR><TD></TD></TR></table>';
  1150. if (rslt['loot'] != undefined) {
  1151. m+='<TABLE class=ptTab cellpadding=3><tr><td colspan=4><b><u>Resources :</u></b><br>\
  1152. </tr><TR><TD>Silver : </td><TD><FONT color="#CC0000">'+addCommas(parseInt(rslt['loot'][0]))+'</td>';
  1153. m+='<TD>Food : </td><TD><FONT color="#CC0000">'+addCommas(parseInt(rslt['loot'][1]))+'</td>';
  1154. m+='<TD>Wood : </td><TD><FONT color="#CC0000">'+addCommas(parseInt(rslt['loot'][2]))+'</td>';
  1155. m+='<TD>Stones : </td><TD><FONT color="#CC0000">'+addCommas(parseInt(rslt['loot'][3]))+'</td>';
  1156. m+='<TD>Iron : </td><TD><FONT color="#CC0000">'+addCommas(parseInt(rslt['loot'][4]))+'</td></table>';
  1157. }
  1158. if (rslt['rsc'] != undefined) {
  1159. m+='<TABLE class=ptTab cellpadding=3><tr><td colspan=4><b><u>Resources :</u></b><br></tr><TR>'
  1160. if (rslt['gld']!= undefined) m+='<TD>Silver : </td><TD>'+addCommas(parseInt(rslt['gld']))+'</td>';
  1161. m+='<TD>Food : </td><TD>'+addCommas(parseInt(rslt['rsc']['r1']))+'</td>';
  1162. m+='<TD>Wood : </td><TD>'+addCommas(parseInt(rslt['rsc']['r2']))+'</td>';
  1163. m+='<TD>Stones : </td><TD>'+addCommas(parseInt(rslt['rsc']['r3']))+'</td>';
  1164. m+='<TD>Iron : </td><TD>'+addCommas(parseInt(rslt['rsc']['r4']))+'</td></table>';
  1165. }
  1166.  
  1167. } else {
  1168. m+='<table border=0 bgcolor=white width=100% cellpadding=3><tr><td colspan=2 style="background-color:white;"><table>';
  1169. // attaquantes sortantes
  1170. if (TileId < 51 && rslt['tileLevel']!=undefined) m+='<TD><FONT size="3px">Wild level '+rslt['tileLevel']+'</font></td>';
  1171. if (TileId < 51 && rslt['tileLevel']==undefined) m+='<TD><FONT size="3px">Wild</font></td>';
  1172. if (TileId == 51 && Nom2==undefined) m+='<TD><FONT size="3px">Barbarian Camp</font></td>';
  1173. if (rslt['conquered']==1) m+='<TD><FONT color="#CC0000" size="3px">Conquered</font></td></tr>';
  1174. if (rslt['winner']==0) m+='<TR><TD style="background-color:white;"><FONT color="#CC0000" size="3px"><b>Defeat&eacute;faite<br><br></font>';
  1175. if (rslt['winner']==1 || rslt['winner']==2) m+='<TR><TD style="background-color:white;"><FONT color="green" size="3px"><b>Victory<br><br></font>';
  1176. m+="</table>";
  1177. m+='<TABLE style="float:left;width:45%;" class=ptTab><tr><td colspan=3><b>Attacker : '+Nom1+' <a href="javascript:void(0)" onclick="KB.Controllers.MapHelper.gotoCoord('+ Coord1 +')" class="coordinateLink">('+ Coord1 +')</a></b>';
  1178. if (rslt['s1KCombatLv']!=undefined) m+='<br>General : '+ rslt['s1KCombatLv'] +'';
  1179. if (rslt['rnds']!=undefined) m+='<br>Number of tour(s) : '+rslt['rnds']+'<br>';
  1180. if (rslt['s1atkBoost']!=undefined || rslt['s1defBoost']!=undefined) m+='Bonus : '+ parseInt(rslt['s1atkBoost']*100) +' % attack - '+ parseInt(rslt['s1defBoost']*100) +' % defense';
  1181. m+='</td></tr>';
  1182. if (rslt['fght'] != undefined){
  1183. m+='<TR style="background-color:#E5DDC9;color: #422714;font-size: 12px;font-weight: bold;"><TD align="center">Troops</td><TD align="center">Killed</td><TD align="center">Survived</td></tr>';
  1184. if (rslt['fght']["s1"] != undefined) {
  1185. unsafeWindow.Barracks.allUnitIds.each(function(i){
  1186. if (rslt['fght']["s1"]['u'+i] != undefined) {
  1187. if (rslt['fght']["s1"]['u'+i][0] > rslt['fght']["s1"]['u'+i][1]) m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+addCommas(rslt['fght']["s1"]['u'+i][0])+'</td><TD align="center"><FONT color="#CC0000">'+addCommas(rslt['fght']["s1"]['u'+i][1])+'</font></td></tr>';
  1188. else m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+addCommas(rslt['fght']["s1"]['u'+i][0])+'</td><TD align="center">'+addCommas(rslt['fght']["s1"]['u'+i][1])+'</td></tr>';
  1189. }
  1190. });
  1191. }
  1192. }
  1193. if (Nom2==undefined) Nom2="barbare";
  1194. m+='</table><TABLE style="float:right;width:45%;" class=ptTab><tr><td colspan=3><b>Defender : '+Nom2+' <a href="javascript:void(0)" onclick="KB.Controllers.MapHelper.gotoCoord('+ Coord2 +');" class="coordinateLink">('+ Coord2 +')</a></b>';
  1195. if (rslt['s0KCombatLv']!=undefined) m+='<br>General : '+ rslt['s0KCombatLv'];
  1196. if (rslt['lstlgn'] != undefined)
  1197. {
  1198. m+="<br>Derni&egrave;re connexion : " + unsafeWindow.formatDateByUnixTime(rslt['lstlgn'])+"<br>";
  1199. } else {
  1200. m+="<br>";
  1201. }
  1202. if (rslt['s0atkBoost']!=undefined || rslt['s0defBoost']!=undefined) {
  1203. m+='Bonus : '+ parseInt(rslt['s0atkBoost']*100) +' % attack - '+ parseInt(rslt['s0defBoost']*100) +' % Defence';
  1204. }
  1205. m+='</td></tr>';
  1206. if (rslt['fght'] != undefined){
  1207. if (rslt['fght']["s0"] != undefined) {
  1208. m+='<TR style="background-color:#E5DDC9;color: #422714;font-size: 12px;font-weight: bold;"><TD align="center">Troops</td><TD align="center">Killed</td><TD align="center">Survived</td></tr>';
  1209. for (var i=60;i<=63;i++) {
  1210. if (rslt['fght']["s0"]['f'+i] != undefined) {
  1211. if (rslt['fght']["s0"]['f'+i][0] > rslt['fght']["s0"]['f'+i][1]) m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+rslt['fght']["s0"]['f'+i][0]+'</td><TD align="center"><FONT color="#CC0000">'+rslt['fght']["s0"]['f'+i][1]+'</font></td></tr>';
  1212. else m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+rslt['fght']["s0"]['f'+i][0]+'</td><TD align="center">'+rslt['fght']["s0"]['f'+i][1]+'</td></tr>';
  1213. }
  1214. }
  1215. unsafeWindow.Barracks.allUnitIds.each(function(i){
  1216. if (rslt['fght']["s0"]['u'+i] != undefined) {
  1217. if (rslt['fght']["s0"]['u'+i][0] > rslt['fght']["s0"]['u'+i][1]) m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+addCommas(rslt['fght']["s0"]['u'+i][0])+'</td><TD align="center"><FONT color="#CC0000">'+addCommas(rslt['fght']["s0"]['u'+i][1])+'</font></td></tr>';
  1218. else m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+addCommas(rslt['fght']["s0"]['u'+i][0])+'</td><TD align="center">'+addCommas(rslt['fght']["s0"]['u'+i][1])+'</td></tr>';
  1219. }
  1220. });
  1221. for (var i=50;i<=55;i++) {
  1222. if (rslt['fght']["s0"]['f'+i] != undefined) {
  1223. if (rslt['fght']["s0"]['f'+i][0] > rslt['fght']["s0"]['f'+i][1]) m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+rslt['fght']["s0"]['f'+i][0]+'</td><TD align="center"><FONT color="#CC0000">'+rslt['fght']["s0"]['f'+i][1]+'</font></td></tr>';
  1224. else m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+rslt['fght']["s0"]['f'+i][0]+'</td><TD align="center">'+rslt['fght']["s0"]['f'+i][1]+'</td></tr>';
  1225. }
  1226. }
  1227. }
  1228. if ((rslt['unts']!=undefined) || (rslt['frt']!=undefined)) {
  1229. if (rslt['frt']!=undefined) {
  1230. m+='<TR style="background-color:#E5DDC9;color: #422714;font-size: 12px;font-weight: bold;"><TD align="center">D&eacute;fenses</td><TD align="center">Amount</td></tr>';
  1231. for (var i=60;i<=63;i++) {
  1232. if (rslt['frt']['f'+i] != undefined) {
  1233. m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+addCommas(rslt['frt']['f'+i])+'</td></tr>';
  1234. }
  1235. }
  1236. for (var i=50;i<=55;i++) {
  1237. if (rslt['frt']['f'+i] != undefined) {
  1238. m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+addCommas(rslt['frt']['f'+i])+'</td></tr>';
  1239. }
  1240. }
  1241. }
  1242. if (rslt['frt']!=undefined) {
  1243. m+='<TR style="background-color:#E5DDC9;color: #422714;font-size: 12px;font-weight: bold;"><TD align="center">Troops</td><TD align="center">Amount</td></tr>';
  1244. unsafeWindow.Barracks.allUnitIds.each(function(i){
  1245. if (rslt['unts']['u'+i] != undefined) {
  1246. m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+addCommas(rslt['unts']['u'+i])+'</td></tr>';
  1247. }
  1248. });
  1249. }
  1250. } else {
  1251. m+="<tr><td><br>No troops defending</td></tr>";
  1252. }
  1253. m+='<TR><TD></TD></TR></table>';
  1254. }
  1255. m+="</td></tr><tr><td><br></tr>";
  1256. if (rslt['pop'] != undefined) {
  1257. m += '</table><tr><td style="background-color:white;"><b><u>Results found</u></b><br><br>';
  1258. m+='<table style="float:left;width:45%;"class=ptTab cellpadding=3>';
  1259. if ((rslt['unts']!=undefined) || (rslt['frt']!=undefined)) {
  1260. if (rslt['frt']!=undefined) {
  1261. m+='<TR style="background-color:#E5DDC9;color: #422714;font-size: 12px;font-weight: bold;"><TD align="center">Defending</td><TD align="center">Amount</td></tr>';
  1262. for (var i=60;i<=63;i++) {
  1263. if (rslt['frt']['frt'+i] != undefined) {
  1264. if (parseInt(rslt['frt']['frt'+i]) >0)
  1265. m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+addCommas(rslt['frt']['frt'+i])+'</td></tr>';
  1266. }
  1267. }
  1268. for (var i=50;i<=55;i++) {
  1269. if (rslt['frt']['frt'+i] != undefined) {
  1270. if (parseInt(rslt['frt']['frt'+i]) >0)
  1271. m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+addCommas(rslt['frt']['frt'+i])+'</td></tr>';
  1272. }
  1273. }
  1274. }
  1275. if (rslt['unts']!=undefined) {
  1276. m+='<TR style="background-color:#E5DDC9;color: #422714;font-size: 12px;font-weight: bold;"><TD align="center">Troops</td><TD align="center">Amount</td></tr>';
  1277. unsafeWindow.Barracks.allUnitIds.each(function(i){
  1278. if (rslt['unts']['u'+i] != undefined) {
  1279. if (parseInt(rslt['unts']['u'+i]) >0)
  1280. m+='<TR><TD align="center"><div class="pic px30 units unit_'+i+'"></td><TD align="center">'+addCommas(rslt['unts']['u'+i])+'</td></tr>';
  1281. }
  1282. });
  1283. }
  1284. }
  1285. }
  1286. m+='</table><table style="float:right;width:45%;"class=ptTab cellpadding=3>';
  1287. if (rslt['pop'] != undefined || rslt['knght'] != undefined ||rslt['hap'] != undefined) {
  1288. m+='<TR style="background-color:#E5DDC9;color: #422714;font-size: 12px;font-weight: bold;"><td align="center">City<td align="center">&nbsp;</tr>';
  1289. if (rslt['pop'] != undefined) {
  1290. m+='<TR><TD>Population</TD><TD>'+addCommas(parseInt(rslt['pop']))+'</td></tr>';
  1291. }
  1292. if (rslt['hap'] != undefined) {
  1293. m+='<tr><td>Happiness<td>'+rslt['hap'] +'</td><tr>';
  1294. }
  1295. if (rslt['knght'] != undefined) {
  1296. m+='<tr><td>General<td>'+rslt['knght']['cbt']+'</td></tr><tr><td>&nbsp;</tr>';
  1297. }
  1298. }
  1299. if (rslt['blds'] != undefined) {
  1300. m+='<TR style="background-color:#E5DDC9;color: #422714;font-size: 12px;font-weight: bold;"><td align="center">Building<td align="center">Level</tr>';
  1301. for (var i=1; i<100; i++){
  1302. if (rslt['blds']['b'+i] != undefined) {
  1303. var blds = rslt['blds']['b'+i];
  1304. //var couleur='';
  1305. //if (bType==8) couleur=' style="background-color:red"';
  1306. m += '<TR><TD>';
  1307. arField = [], firstbld = true;
  1308. m += unsafeWindow.arStrings.buildingName["b"+i] +'</TD><TD>';
  1309. for (var zz=1; zz<12; zz++)
  1310. arField[zz]=0;
  1311. for (var zz=0; zz < blds.length; zz++)
  1312. arField[blds[zz]]++
  1313. for (var zz=11; zz>0; zz--) {
  1314. if (arField[zz] > 0) {
  1315. if (firstbld)
  1316. firstbld = false;
  1317. else
  1318. m+=', ';
  1319. if (arField[zz] > 1)
  1320. m+=arField[zz] + ' x ';
  1321. m+=' ' + zz;
  1322. }
  1323. }
  1324. m+='</TD></TR>';
  1325. }
  1326. }
  1327. }
  1328.  
  1329. m+='</table>';
  1330. if (rslt['tch'] != undefined) {
  1331. m+='<table style="float:left;width:45%;" class=ptTab><TR style="background-color:#E5DDC9;color: #422714;font-size: 12px;font-weight: bold;"><TD align="center">Technical level</td><TD align="center">Level</td></tr>';
  1332. for (var i=1;i<=16;i++) {
  1333. if (rslt['tch']['t'+i]!=undefined) {
  1334. m+='<tr><TD>' + unsafeWindow.arStrings.techName['t'+i] + '</td><TD>'+rslt['tch']['t'+i]+'</td></tr>';
  1335. }
  1336. }
  1337. m+='</table>';
  1338. }
  1339. var typebutin ='';
  1340. if (rslt['loot'] != undefined) {
  1341. m+='</td><tr><td style="background-color:white;"><b><u>Resources '+typebutin+' :</u></b><br>';
  1342. m+='<TABLE class=ptTab cellpadding=3><TR><TD>Silver : </td><TD>'+addCommas(parseInt(rslt['loot'][0]))+'</td>';
  1343. m+='<TD>Food : </td><TD>'+addCommas(parseInt(rslt['loot'][1]))+'</td>';
  1344. m+='<TD>Wood : </td><TD>'+addCommas(parseInt(rslt['loot'][2]))+'</td>';
  1345. m+='<TD>Stones : </td><TD>'+addCommas(parseInt(rslt['loot'][3]))+'</td>';
  1346. m+='<TD>Iron : </td><TD>'+addCommas(parseInt(rslt['loot'][4]))+'</td>';
  1347. if (rslt['loot'][5]) {
  1348. m+='<tr><td>Objet trouv&eacute;:</td>';
  1349. for (var i=1;i<10;i++) {
  1350. if (rslt['loot'][5]['110'+i]==1)
  1351. m+='<td colspan=3>' + unsafeWindow.arStrings.itemName["i110"+i] + '<div class="item-icon pic px70 items item_110'+i+'"></td>';
  1352. }
  1353. }
  1354. m+='</tr></table>';
  1355. }
  1356. if (rslt['rsc'] != undefined) {
  1357. m+='<TABLE class=ptTab cellpadding=3><tr><td colspan=4><b><u>Resources :</u></b><br></tr><TR>';
  1358. if (rslt['gld']!= undefined) m+='<TD>Silver : </td><TD>'+addCommas(parseInt(rslt['gld']))+'</td>';
  1359. m+='<TD>Food : </td><TD>'+addCommas(parseInt(rslt['rsc']['r1']))+'</td>';
  1360. m+='<TD>Wood : </td><TD>'+addCommas(parseInt(rslt['rsc']['r2']))+'</td>';
  1361. m+='<TD>Stones : </td><TD>'+addCommas(parseInt(rslt['rsc']['r3']))+'</td>';
  1362. m+='<TD>Iron : </td><TD>'+addCommas(parseInt(rslt['rsc']['r4']))+'</td></table>';
  1363. }
  1364. m+="<br><br></table>";
  1365. }
  1366. t.popReport.getMainDiv().innerHTML = '<DIV style="max-height:520px; height:520px; overflow-y:scroll">' + m + '</div>';
  1367. t.popReport.getTopDiv().innerHTML = '<TD align="center"><B>Battle reports - '+unsafeWindow.formatDateByUnixTime(Date1)+'</td>';
  1368. t.popReport.show(true);
  1369. },
  1370. DisplayReports : function (){
  1371. var t = my.Hud;
  1372. var data = t.data;
  1373. var filtre = document.getElementById("idHudTypeSearch").value;
  1374. var filtre2 = document.getElementById('idHudMedSearch').value;
  1375. var results=document.getElementById("hudResultsDiv");
  1376. if(!t.data.length) {
  1377. results.innerHTML = '<center><b>No reports found</b></center>';
  1378. return;
  1379. }
  1380. var m = '<center><table width=100% cellspacing=0 cellpadding=3><thead><th>Page</th><th>R.</th><th>Date</th><th colspan=3>Attacker</th><th>Type</th><th colspan=4>Target</th></thead>';
  1381. m += '<tbody>';
  1382. for ( var i=0; i<t.data.length;i++) {
  1383. var rpt = data[i];
  1384. if (rpt.side0Name===undefined) {
  1385. rpt.side0Name = "-";
  1386. }
  1387. // continue;
  1388. style='padding:2px;' ;
  1389. if (rpt.TypeName=="Ent") {
  1390. style=' style="background-color:#EF9999;padding:2px;"';
  1391. }
  1392. if (rpt.TypeName=="Ren") {
  1393. style=' style="background-color:#99EF99;padding:2px;"';
  1394. }
  1395. if (((filtre2=="" || filtre2=="1" && (rpt.side1Name==Seed.player.name|| rpt.side0Name==Seed.player.name))) && (filtre=="" || (filtre=="0" && rpt.TypeName=="Ent") || (filtre=="1" && rpt.TypeName=="Sor") || (filtre=="2" && rpt.TypeName=="Ren"))) {
  1396. m += '<tr ><td '+style+'><SPAN onclick="ptAllianceReports('+rpt.page+')"> <a>'+rpt.page+'</a></span></td>\
  1397. <td '+style+'>';
  1398. if (rpt.marchType == 3 && rpt.TypeName=="Ent") {
  1399. } else {
  1400.  
  1401. m+='<img onclick="getReport('+rpt.reportUnixTime+','+ rpt.marchReportId +','+rpt.side0TileType +',\''+rpt.TypeName+'\',\''+rpt.side1Name.replace(/\'/g,"_")+'\',\''+ rpt.side1XCoord +','+ rpt.side1YCoord +'\',\''+rpt.side0Name.replace(/\'/g,"_")+'\',\''+ rpt.side0XCoord +','+ rpt.side0YCoord +'\');" border=0 src="http://cdn1.iconfinder.com/data/icons/woothemesiconset/16/search_button.png">';
  1402. }
  1403. m+='&nbsp;</td>\
  1404. <td '+style+'>'+unsafeWindow.formatDateByUnixTime(rpt.reportUnixTime)+'</td>\
  1405. <td '+style+'>'+rpt.side1Name+'</td>\
  1406. <td '+style+'>'+rpt.side1AllianceName.replace('unaligned','-')+'</td>\
  1407. <td '+style+'><a href="javascript:void(0)" onclick="KB.Controllers.MapHelper.gotoCoord('+ rpt.side1XCoord +','+ rpt.side1YCoord +')" class="coordinateLink">('+ rpt.side1XCoord +','+ rpt.side1YCoord +')</a></td>';
  1408. if (rpt.marchType == 3)
  1409. m +='<TD '+style+'><FONT color="FF9933">'+rpt.marchName+'</font></td>';
  1410. else if (rpt.marchType == 4)
  1411. m +='<TD '+style+'><FONT color="FF0033">'+rpt.marchName+'</font></td>';
  1412. else
  1413. m +='<TD '+style+'><FONT color="339933">'+rpt.marchName+'</font></td>';
  1414. if (rpt.side0Name!=undefined) {
  1415. m+='<td '+style+'>'+rpt.side0Name+'</td>';
  1416. }else{
  1417. m+='<td '+style+'>-</td>';
  1418. }
  1419. m+='<td '+style+'>'+rpt.side0AllianceName.replace('unaligned','-')+'</td>\
  1420. <td '+style+'><a href="javascript:void(0)" onclick="KB.Controllers.MapHelper.gotoCoord('+ rpt.side0XCoord +','+ rpt.side0YCoord +')" class="coordinateLink">('+ rpt.side0XCoord +','+ rpt.side0YCoord +')</a></td>';
  1421. if (rpt.side0TileType < 51 && rpt.side0TileLevel!=undefined) {
  1422. m+='<td '+style+'>TS '+rpt.side0TileLevel+'</td>';
  1423. } else {
  1424. if (rpt.side0TileType = 51 && rpt.side0CityId==0 && rpt.side0PlayerId==0) {
  1425. m+='<td '+style+'>CB</td>';
  1426. }else {
  1427. m+='<td '+style+'>City</td>';
  1428. }
  1429. }
  1430. m+='</tr>';
  1431. }
  1432. }
  1433. m += '</tbody></table></center>';
  1434. results.innerHTML = m;
  1435. },
  1436. handleHudSearchCB : function(rslt, page) {
  1437. var t = my.Hud;
  1438. if (rslt) {
  1439. if (!rslt.ok) {
  1440. document.getElementById("idSpanHudErrorMsg").innerHTML = rslt.errorMsg;
  1441. return;
  1442. }
  1443. t.totalPages=parseInt(rslt.totalPages);
  1444. if (t.totalPages < t.maxPages)
  1445. t.maxPages = t.totalPages;
  1446. if (rslt.arReports && page) {
  1447. var ar = rslt.arReports;
  1448. var rptkeys = unsafeWindow.Object.keys(ar);
  1449. var myAllianceId = getMyAlliance()[0];
  1450. for (var i = 0; i < rptkeys.length; i++) {
  1451. var rpt = ar[rptkeys[i]];
  1452. rpt.page = page;
  1453. var side0Name = rslt.arPlayerNames['p'+rpt.side0PlayerId];
  1454. rpt.side0Name = side0Name;
  1455. rpt.side1Name = rslt.arPlayerNames['p'+rpt.side1PlayerId];
  1456. if (rpt.side0AllianceId > 0)
  1457. rpt.side0AllianceName = rslt.arAllianceNames['a'+rpt.side0AllianceId];
  1458. else
  1459. rpt.side0AllianceName = 'unaligned';
  1460. if (rpt.side1AllianceId > 0)
  1461. rpt.side1AllianceName = rslt.arAllianceNames['a'+rpt.side1AllianceId];
  1462. else
  1463. rpt.side1AllianceName = 'unaligned';
  1464. if (rpt.side0CityId > 0)
  1465. rpt.side0CityName = rslt.arCityNames['c'+rpt.side0CityId];
  1466. else
  1467. rpt.side0CityName = 'none';
  1468. if (rpt.side1CityId > 0)
  1469. rpt.side1CityName = rslt.arCityNames['c'+rpt.side1CityId];
  1470. else
  1471. rpt.side1CityName = 'none';
  1472. if (rpt.marchType == 1)
  1473. rpt.marchName = 'Transport';
  1474. else if (rpt.marchType == 3)
  1475. rpt.marchName = 'Scout';
  1476. else if (rpt.marchType == 2)
  1477. rpt.marchName = 'Reinforce';
  1478. else if (rpt.marchType == 4)
  1479. rpt.marchName = 'Attack';
  1480. else rpt.marchName = 'unknown';
  1481. rpt.targetDiplomacy = getDiplomacy (rpt.side0AllianceId);
  1482. if (myAllianceId != rpt.side1AllianceId) {
  1483. rpt.TypeName = "Ent";
  1484. }
  1485. if (myAllianceId == rpt.side1AllianceId) {
  1486. rpt.TypeName = "Sor";
  1487. }
  1488. if (rpt.marchType == 2) {
  1489. rpt.TypeName = "Ren";
  1490. }
  1491. t.data.push(rpt);
  1492. }
  1493. }
  1494. if (parseInt(page)+1 <= t.maxPages) {
  1495. var results=document.getElementById("hudResultsDiv");
  1496. results.innerHTML = 'Searching pages ' + (parseInt(page)+1) + ' of ' + t.maxPages;
  1497. t.getAllianceReports(parseInt(page)+1);
  1498. }
  1499. else if (page)
  1500. t.DisplayReports();
  1501. }
  1502. },
  1503. handleHudSearch : function() {
  1504. var t = my.Hud;
  1505. var results=document.getElementById("hudResultsDiv");
  1506. results.innerHTML = 'Searching pages ' + t.minPages + ' of ' + t.maxPages;
  1507. t.data=[];
  1508. t.getAllianceReports(t.minPages);
  1509. },
  1510. getAllianceReports : function (pageNum){
  1511. var t = my.Hud;
  1512. var c= {};
  1513. c.pageNo = pageNum;
  1514. c.group = "a";
  1515.  
  1516. unsafeWindow.AjaxCall.gPostRequest("listReports.php",c,
  1517. function(rslt){
  1518. t.handleHudSearchCB (rslt, pageNum);
  1519. },
  1520. function (rslt) {
  1521. t.handleHudSearchCB (rslt, pageNum);
  1522. }
  1523. );
  1524. },
  1525. hide : function (){
  1526. },
  1527. }
  1528. /* onlget des généraux !! */
  1529. my.Generals = {
  1530. cont : null,
  1531. state : null,
  1532. init : function (){
  1533. var t = my.Generals;
  1534. t.cont = document.createElement('div');
  1535. unsafeWindow.BOTerres = t.show;
  1536. return t.cont;
  1537. },
  1538.  
  1539. getContent : function (){
  1540. var t = my.Generals;
  1541. return t.cont;
  1542. },
  1543.  
  1544. hide : function (){
  1545. var t = my.Generals;
  1546.  
  1547. },
  1548. publi :function(cityId,fbid,name,idk) {
  1549. var t = my.Generals;
  1550. var c=[];
  1551. c.push(["REPLACE_KnIgHtNaMe",name]);
  1552. c.push(["REPLACE_KnIgHtId",idk]);
  1553. c.push(["REPLACE_CiTyId",cityId]);
  1554. unsafeWindow.common_postToProfile('601',c,fbid,'601_energy')
  1555. },
  1556. show : function (){
  1557. var t = my.Generals;
  1558. unsafeWindow.BOGenePubl = t.publi
  1559. clearTimeout (t.displayTimer);
  1560. if (t.state == null){
  1561. t.cont.innerHTML = '<DIV id=BOGeneralContent style="height:640px; max-height:640px; overflow-y:auto">';
  1562. t.state = 1;
  1563. }
  1564. m = "<DIV class=ptstat>"+unsafeWindow.arStrings.Common["Generals"]+"</div>";
  1565. for (var c=0; c<Cities.numCities; c++){
  1566. var city = Cities.cities[c];
  1567. m += '<TABLE cellspacing=0 cellpadding=0 class=ptTabPad width=99%>';
  1568. m += '<TR><TD colspan=6><DIV class=ptstat>'+ city.c.name +' &nbsp;&nbsp;<a href="javascript:void(0)" onclick="KB.Controllers.MapHelper.gotoCoord('+ city.c.x +','+ city.c.y+');">('+ city.c.x +','+ city.c.y +')</a></div></td></tr>';
  1569. if (Cities.cities[c].c.generalsCount()>0) {
  1570. m+="<tr><td colspan=2 width=160>Name</td><td width=40>Exp</td><td width=30>Level</td><td width=30>Energy</td><td>Actions</td></tr>";
  1571. Cities.cities[c].c.generalsSorted().each(function(b){
  1572. var f = b.experience() - b.expNeededForCurrentLevel(), e = b.expNeededForNextLevel() - b.expNeededForCurrentLevel();
  1573. m+="<tr><td><img width=25 src='https://graph.facebook.com/"+b.fbuid+"/picture'/></td><td>"+b.name+"</td><td>" + addCommas(f) + " / " + addCommas(e) + "</td><td>"+b.level()+" </td><td>"+b.energy()+" / "+b.maxEnergy+"</td>";
  1574. m+="<td>";
  1575. if (unsafeWindow.seed.appFriends[b.fbuid]) {
  1576. m+="<a href=# onclick='NeighborPanel.postOffering("+b.fbuid+");'>Send offerings</a><br>";
  1577. }
  1578. if(b.idle()) {
  1579. if(b.energy()<b.maxEnergy) {
  1580.  
  1581. m+="<a href=# onclick=\"BOGenePubl("+city.c.id+","+b.fbuid+",'"+b.name+"',"+b.id+");return false;\">Request more energy</a><br>";
  1582. }
  1583. } else {
  1584. m+="<b><i>Outside the city...</i></b>";
  1585. }
  1586. m+="</td></tr>";
  1587. });
  1588. } else {
  1589. m+="<tr><td>No general present</td></tr>";
  1590. }
  1591. m+"</table>";
  1592. }
  1593. document.getElementById('BOGeneralContent').innerHTML = m + '</div>';
  1594. t.displayTimer = setTimeout (t.show, 20000);
  1595. }
  1596.  
  1597. }
  1598. /******** REGIONS SAUVAGES ***********/
  1599. my.Wilds = {
  1600. cont : null,
  1601. state : null,
  1602. upGoldTimer : null,
  1603. wildList : [],
  1604. buildList : {},
  1605. init : function (){
  1606. var t = my.Wilds;
  1607. t.cont = document.createElement('div');
  1608. unsafeWindow.BOTerres = t.show;
  1609. return t.cont;
  1610. },
  1611.  
  1612. getContent : function (){
  1613. var t = my.Wilds;
  1614. return t.cont;
  1615. },
  1616.  
  1617. hide : function (){
  1618. var t = my.Wilds;
  1619.  
  1620. },
  1621. show : function (){
  1622. var t = my.Wilds;
  1623. clearTimeout (t.displayTimer);
  1624. if (t.state == null){
  1625. t.cont.innerHTML = '<DIV id=wildContent style="height:640px; max-height:640px; overflow-y:auto">';
  1626. t.state = 1;
  1627. }
  1628. m = "<DIV class=ptstat>"+unsafeWindow.arStrings.Common["Wilds"]+"</div>";
  1629.  
  1630. for (var c=0; c<Cities.numCities; c++){
  1631. var city = Cities.cities[c];
  1632. var row = 0;
  1633. var position = "right";
  1634. if ((c+1)%2) position="left";
  1635. m += '<TABLE cellspacing=0 cellpadding=0 class=ptTabPad width=45% style="float:'+position+'">';
  1636. m += '<TR><TD colspan=20><DIV class=ptstat>'+ city.c.name +' &nbsp; <a href="javascript:void(0)" onclick="KB.Controllers.MapHelper.gotoCoord('+ city.c.x +','+ city.c.y+');">('+ city.c.x +','+ city.c.y +')</a></div></td></tr>';
  1637. if(city.c.wildernessCount()===0){
  1638. }else {
  1639. m += '<TR style="background-color:white; font-weight:bold;" align=right><TD align=left>'+unsafeWindow.arStrings.Common.Abandon+'</td><TD align=left>Type</td><td align=left>'+unsafeWindow.arStrings.Common.Level+'</td><TD align=left>'+unsafeWindow.arStrings.Common.Coordinates+'</td></tr>';
  1640. city.c.wilderness().each(function(wild)
  1641. {
  1642. m += '<TR align=right'+ (row++%2?'':' class=ptOddrow') +'><TD align=left>\
  1643. <a onclick="this.style.display=\'none\';setTimeout (function (){Castle.abandonWild('+wild.id+');setTimeout(function() { BOTerres() },1000); },500);return false;"><img src="http://cdn1.iconfinder.com/data/icons/musthave/16/Remove.png" border=0></a></td><td align=left>'+wild.name +'</td>\
  1644. <TD>'+ wild.level +'</td><TD align=center><a href="javascript:void(0)" onclick="KB.Controllers.MapHelper.gotoCoord('+wild.x +','+ wild.y+');">('+ wild.x +','+ wild.y +')</a></td></tr>';
  1645. });
  1646. }
  1647. m+="</table>";
  1648. }
  1649. document.getElementById('wildContent').innerHTML = m + '</div>';
  1650. t.displayTimer = setTimeout (t.show, 20000);
  1651. },
  1652. }
  1653.  
  1654. /************************ Food Alerts *************************/
  1655. var FoodAlerts = {
  1656.  
  1657. init : function (){
  1658. var f = FoodAlerts;
  1659. f.e_eachMinute();
  1660. },
  1661.  
  1662. minuteTimer : null,
  1663.  
  1664. e_eachMinute : function (){
  1665. var f = FoodAlerts;
  1666. var now = unixTime();
  1667. row = [];
  1668. if (Options.enableFoodWarnTchat) {
  1669. for(i=0; i < Cities.numCities; i++) {
  1670. //var rp = getResourceProduction (Cities.cities[i].id);
  1671. var foodleft = parseInt(Cities.cities[i].c.resources[1].count);
  1672. var usage = parseInt(Cities.cities[i].c.resources[1].hourlyTotalRate()) - parseInt(Cities.cities[i].c.upkeep());
  1673. //row[i] = rp[1] - usage;
  1674. var timeLeft = parseInt(Cities.cities[i].c.resources[1].count) / (0-usage) * 3600;
  1675. var msg = '';
  1676. if (timeLeft<0){
  1677. }
  1678. else if (timeLeft<(Options.foodWarnHours*3600)) {
  1679. msg += 'My city ' + Cities.cities[i].c.name.substring(0,15) + ' (' +
  1680. Cities.cities[i].c.x +','+ Cities.cities[i].c.y + ') ';
  1681. msg += ' is running out of food, so please send some? Current stock : '+addCommasWhole(foodleft).replace(',',' ').replace(',',' ').replace(',',' ').replace(',',' ')+' ('+timestrShort(timeLeft)+') Production shortage p/hr : '+addCommas(usage).replace(',',' ').replace(',',' ').replace(',',' ').replace(',',' ');
  1682. sendChat ("/a " + msg);
  1683. //alert(msg);
  1684. }
  1685. }
  1686. f.minuteTimer = setTimeout (f.e_eachMinute, 1800000);
  1687. }
  1688. },
  1689. }
  1690.  
  1691. function sendChat (msg){
  1692. document.getElementById ("mod_comm_input").value = msg;
  1693. unsafeWindow.Chat.sendChat ();
  1694. }
  1695.  
  1696.  
  1697.  
  1698. /*************** REASSIGNER **********/
  1699. my.Reassign = {
  1700. cont : null,
  1701. displayTimer : null,
  1702. state : null,
  1703. curTabBut : null,
  1704. curTabName : null,
  1705. sourceCity : {},
  1706. destinationCity : {},
  1707. rows : [],
  1708.  
  1709. init : function (){
  1710. var t = my.Reassign;
  1711. t.cont = document.createElement('div');
  1712. t.state = null;
  1713. return t.cont;
  1714. },
  1715. getContent : function (){
  1716. var t = my.Reassign;
  1717. return t.cont;
  1718. },
  1719. hide : function (){
  1720. var t = my.Reassign;
  1721. t.state = null;
  1722. clearTimeout (t.displayTimer);
  1723. },
  1724. show : function (){
  1725. var t = my.Reassign;
  1726. var ModelCity = {};
  1727. var rownum = 0;
  1728. var rownum2 = 0;
  1729. clearTimeout (t.displayTimer);
  1730. if (t.state == null) {
  1731. m = "<DIV class=ptstat>"+unsafeWindow.arStrings.Common.Reassign+" Troops</div>";
  1732. m +="<div id='statpourREA'></div>";
  1733. m += "<TABLE align=center width='450px' class=ptTab border=0 align=left cellpadding=2>\
  1734. <tr align=center valign=middle><td colspan=1 width=100><b><u>Source</b></u><br><span id=REAsrcRptspeedcity></span></td>\
  1735. <td colspan=1 width='100px'><input type=button style='font-weight:bold' id=REAaction value='"+unsafeWindow.arStrings.Common.Reassign+"'></td>\
  1736. <td colspan=1 width='100px'><b><u>Destination</b></u><br><span id=REAdesRptspeedcity></span></td>\
  1737. <td width=150 colspan=1>&nbsp;</td></tr>\
  1738. <tr align=center valign=top><td width=100><div id=REAstatsource></div></td>\
  1739. <td ><table cellspacing=0 cellpadding=0 width=99%>";
  1740. unsafeWindow.Barracks.allUnitIds.each(function(r){
  1741. if (unsafeWindow.arStrings.unitName["u"+r]) {
  1742. if (rownum++ % 2)
  1743. style = '';
  1744. else
  1745. style = ' style = "background: #e8e8e8"';
  1746. m += '<tr '+style+'><td align=right>&nbsp;</td><td align=left><input style="border:1px solid black;height:16px;font-size:11px;" id="REAnbunit'+r+'" type=text size=7 value="0"></td></tr>';
  1747. }
  1748. });
  1749. m += "</table></td><td><div id=REAstatdest></div></td>";
  1750. m += "<td colspan=2><table cellspacing=0 cellpadding=0 width=80%><tr><td>&nbsp;</table>";
  1751.  
  1752. m += "</tr><tr><td colspan=4><div id='ptREAStatus' style='text-align:center;overflow-y:auto; max-height:30px; height: 30px;'></div></td></tr></table>";
  1753. t.cont.innerHTML = m;
  1754. t.statpourREA = document.getElementById ('statpourREA');
  1755. t.statutREA = document.getElementById ('ptREAStatus');
  1756. t.actionREA = document.getElementById ('REAaction');
  1757. t.actionREA.addEventListener ('click', t.clickReassigneDo, false);
  1758. var dcp1 = new CdispCityPicker ('ptREA1', document.getElementById('REAdesRptspeedcity'), false, t.clickREACityDestinationSelect, 1);
  1759. var dcp0 = new CdispCityPicker ('ptREA0', document.getElementById('REAsrcRptspeedcity'), false, t.clickREACitySourceSelect, Cities.byID[unsafeWindow.currentcityid].idx);
  1760. t.state = 1;
  1761. }
  1762. var str = "<TABLE class=ptTabLined cellspacing=0><TR valign=top align=right><TD width=120></td><TD width=88 style='background: #ffc'><B>TOTALS</b></td>";
  1763. for(i=0; i<Cities.numCities; i++) {
  1764. Gate = Cities.cities[i].c.defending;
  1765. if(Gate == 0) var couleurr="#77EE77";
  1766. if(Gate != 0) var couleurr="#EE7777";
  1767. str += "<TD width=81 style='background-color:"+couleurr+"' align=center><B>"+ Cities.cities[i].c.name +'</b><BR><a onclick="KB.Controllers.MapHelper.gotoCoord('+Cities.cities[i].c.x +','+ Cities.cities[i].c.y+');">('+Cities.cities[i].c.x +','+ Cities.cities[i].c.y+')</A></td>';
  1768. }
  1769. str +="</tr>";
  1770. str += "<tr><td><br></td></tr>";
  1771.  
  1772. unsafeWindow.Barracks.allUnitIds.each(function(r){
  1773. var unitTotal=0;
  1774. var m="";
  1775. if (unsafeWindow.arStrings.unitName["u"+r]) {
  1776. style = " style = 'background: #e8e8e8'";
  1777. for(var i=0; i<Cities.numCities; i++) {
  1778. m += "<TD width=81 "+style+" align=right>"+ addCommas(Cities.cities[i].c.troops[r].count()) +'</td>';
  1779. unitTotal+=parseInt(Cities.cities[i].c.troops[r].count());
  1780. }
  1781. str += "<tr><td "+style+" align=right><b>"+unsafeWindow.arStrings.unitName["u"+r]+"</td><td "+style+" align=right>"+addCommas(unitTotal)+" "+ m + "</tr>";
  1782. }
  1783. });
  1784. t.statpourREA.innerHTML = str;
  1785. t.displayTimer = setTimeout (t.show, 10000);
  1786. },
  1787. clickREACitySourceSelect : function (city){
  1788. var t = my.Reassign;
  1789. var rownum=0;
  1790. t.sourceCity = city;
  1791. var SourceId = t.sourceCity.c.id;
  1792. // on remplit les stat du DIV source
  1793. //on efface le nbunit
  1794. unsafeWindow.Barracks.allUnitIds.each(function(r){
  1795. if (ById("REAnbunit"+r)) ById("REAnbunit"+r).value="0";
  1796. });
  1797. t.actionREA.disabled=false;
  1798. var m="";
  1799. m="<table cellspacing=0 cellpadding=0 width=80%>";
  1800. unsafeWindow.Barracks.allUnitIds.each(function(r){
  1801. if (unsafeWindow.arStrings.unitName["u"+r]) {
  1802. if (rownum++ % 2)
  1803. style = '';
  1804. else
  1805. style = 'background: #e8e8e8;';
  1806. m += '<tr style="'+style+'"><td align=right><b>'+unsafeWindow.arStrings.unitName["u"+r]+'</b></td>\
  1807. <td align=left><input style="border:1px solid black;height:16px;font-size:11px;" id="REAdestunit'+r+'" type=text size=7 readonly value="'+parseInt(Cities.cities[t.sourceCity.idx].c.troops[r].count())+'">&nbsp;\
  1808. <input type=button value=">" id="REApdestunit'+r+'" style="border:1px solid black;height:16px;font-size:11px;"></td></tr>';
  1809. }
  1810. });
  1811. m += "</table>";
  1812. ById("REAstatsource").innerHTML = m;
  1813. unsafeWindow.Barracks.allUnitIds.each(function(r){
  1814. if (unsafeWindow.arStrings.unitName["u"+r]) {
  1815. ById("REApdestunit"+r).addEventListener ('click', function() {
  1816. var nomcha=this.id.replace("REApdest","REAdest");
  1817. var nomcha2=this.id.replace("REApdestunit","REAnbunit");
  1818. ById(nomcha2).value=0; // on met à 0
  1819. var maxtroupe=getTroopMax(SourceId);
  1820. var nbunitto=0;
  1821. unsafeWindow.Barracks.allUnitIds.each(function(r){
  1822. if (ById("REAnbunit"+r)) nbunitto+=parseInt(ById("REAnbunit"+r).value);
  1823. });
  1824.  
  1825. var libre = parseInt(maxtroupe - nbunitto);
  1826.  
  1827. if (ById(nomcha).value>=libre) {
  1828. ById(nomcha2).value = libre;
  1829. } else {
  1830. ById(nomcha2).value= ById(nomcha).value;
  1831. }
  1832. }, false);
  1833. }
  1834. });
  1835. // t.estimerTemps();
  1836. },
  1837. clickREACityDestinationSelect : function (city){
  1838. var t = my.Reassign;
  1839. var rownum=0;
  1840. t.destinationCity = city;
  1841. // on remplit les stat du DIV destination
  1842. var m="";
  1843. m="<table cellspacing=0 cellpadding=0 width=80%>";
  1844. unsafeWindow.Barracks.allUnitIds.each(function(r){
  1845. if (unsafeWindow.arStrings.unitName["u"+r]) {
  1846. if (rownum++ % 2)
  1847. style = '';
  1848. else
  1849. style = 'background: #e8e8e8;';
  1850.  
  1851. m += '<tr style="'+style+'"><td align=right>&nbsp;</td><td align=left><input style="border:1px solid black;height:16px;font-size:11px;" type=text size=7 readonly value="'+parseInt(Cities.cities[t.destinationCity.idx].c.troops[r].count())+'"></td></tr>';
  1852. }
  1853. });
  1854. m += "</table>";
  1855. ById("REAstatdest").innerHTML = m;
  1856. // t.estimerTemps();
  1857. },
  1858. clickReassigneDo: function() {
  1859. var t = my.Reassign;
  1860. var totalunit=0;
  1861. var SourceId = t.sourceCity.c.id;
  1862. var DestinationId = t.destinationCity.c.id;
  1863. unsafeWindow.Barracks.allUnitIds.each(function(r){
  1864. if (document.getElementById("REAnbunit"+r)) {
  1865. if (parseInt(document.getElementById("REAnbunit"+r).value) > parseInt(document.getElementById("REAdestunit"+r).value)) {
  1866. document.getElementById("REAnbunit"+r).style.backgroundColor="red";
  1867. return false;
  1868. }
  1869. totalunit=totalunit+parseInt(document.getElementById("REAnbunit"+r).value);
  1870. document.getElementById("REAnbunit"+r).style.backgroundColor="";
  1871. }
  1872. });
  1873. if (t.sourceCity.c.id==t.destinationCity.c.id) {
  1874. t.statutREA.innerHTML = '<FONT COLOR=#550000>Not possible to send to same city!.</font>';
  1875. return;
  1876. }
  1877. if (totalunit==0) {
  1878. t.statutREA.innerHTML = '<FONT COLOR=#550000>Impossible to '+unsafeWindow.arStrings.Common.Reassign+' with 0 troops... pfff, wake up !.</font>';
  1879. return;
  1880. }
  1881. var maxtroupe=getTroopMax(SourceId);
  1882.  
  1883. if (totalunit>maxtroupe) {
  1884. t.statutREA.innerHTML = '<FONT COLOR=#550000>Impossible to '+unsafeWindow.arStrings.Common.Reassign+' more than '+maxtroupe+' troops at a time.</font>';
  1885. return;
  1886. }
  1887. t.actionREA.disabled=true;
  1888. var x=t.destinationCity.c.x;
  1889. var y=t.destinationCity.c.y;
  1890. t.statutREA.innerHTML = "<i><b>Processing........</b></i>";
  1891. if (Cities.byID[SourceId].c.canMarch()) {
  1892. var f=Cities.byID[SourceId].c;
  1893. var id=f.id;
  1894. var d=unsafeWindow.Building.getMaxLevelForType(50,id);
  1895. var a=new unsafeWindow.March({marchId:Cities.byID[id].c.emptyMarchSlots()[0],toXCoord:x,toYCoord:y,fromCityId:id,marchType:5,knightId:0,fromHealLevel:d,apothecaryHealPercent:unsafeWindow.KB.Controllers.Apothecary.getHealPercent(d),gold:0,resource1:0,resource2:0,resource3:0,resource4:0});
  1896. var g={mid:a.id,xcoord:a.to.x,ycoord:a.to.y,cid:id,type:5,kid:0,gold:a.gold,r1:a.resources[1],r2:a.resources[2],r3:a.resources[3],r4:a.resources[4],camp:0,et:t.calculateTime(id,7,x,y)};
  1897. unsafeWindow.Barracks.allUnitIds.each(function(r){
  1898. if (document.getElementById("REAnbunit"+r) && parseIntNan(document.getElementById("REAnbunit"+r).value)>0) {
  1899. a.units[r].sent=parseIntNan(document.getElementById("REAnbunit"+r).value);
  1900. g["u"+r]=parseIntNan(document.getElementById("REAnbunit"+r).value);
  1901. }
  1902. });
  1903. unsafeWindow.AjaxCall.gPostRequest("march.php",g,function(zz){
  1904. var now = unixTime();
  1905. var i="reinforce",j=Number(zz.eta)-Number(zz.initTS);
  1906. unsafeWindow.Chrome.ResourcesBar.update();
  1907. unsafeWindow.Object.keys(a.units).each(function(k){Cities.byID[id].c.troops[k].subtract(a.units[k].sent)});
  1908. a.id=Number(zz.marchId);
  1909. a.to.tileId=Number(zz.tileId);
  1910. a.to.tileType=Number(zz.tileType);
  1911. a.to.tileLevel=Number(zz.tileLevel);
  1912. a.to.playerId=Number(zz.tileUserId);
  1913. a.to.cityId=Number(zz.tileCityId);
  1914. a.setStatus(unsafeWindow.Constant.MarchStatus.OUTBOUND);
  1915. a.setMarchTime(unsafeWindow.unixtime(),unsafeWindow.unixtime()+j,0);
  1916. Cities.byID[id].c.marches.outgoing[a.id]=a;
  1917. unsafeWindow.KTrack.event(["_trackEvent","March",i,unsafeWindow.player.level]);
  1918. t.statutREA.innerHTML ="<font color=red size='3px'><b>Succeeded<b></font>";
  1919. t.actionREA.disabled=false;
  1920. },
  1921. function(zz){
  1922. t.statutREA.innerHTML ="<font color=red size='3px'><b>Error !!<b></font>";
  1923. t.actionREA.disabled=false;
  1924. }, false);
  1925. }else{
  1926. t.statutREA.innerHTML ="<font color=red size='3px'><b>Error<b></font>";
  1927. t.actionREA.disabled=false;
  1928. }
  1929. },
  1930. calculateTime: function(id,b,g,e) {
  1931. var c=65535,a=Math.abs(Cities.byID[id].c.x-g),f=Math.abs(Cities.byID[id].c.y-e),d=Math.sqrt((a*a)+(f*f));
  1932. h=unsafeWindow.Unit.stats[b].speed*1;
  1933. if(h<c){c=h;}
  1934. return Math.ceil(d*6000/c)+30;
  1935. },
  1936. }
  1937. //
  1938. function getTroopMax(id) {
  1939.  
  1940. var TROOPS_PER_RALLY_LEVEL={1:10000,2:25000,3:35000,4:50000,5:60000,6:75000,7:80000,8:100000,9:150000,10:200000};
  1941. return TROOPS_PER_RALLY_LEVEL[unsafeWindow.Building.getMaxLevelForType(unsafeWindow.Constant.Building.RALLY_SPOT,id)];
  1942.  
  1943. }
  1944.  
  1945. // returns {count, maxlevel}
  1946. function getCityBuilding (cityId, buildingId){
  1947. var b = Seed.buildings['city'+cityId];
  1948. var ret = {count:0, maxLevel:0};
  1949. for (var i=1; i<33; i++){
  1950. if (b['pos'+i] && b['pos'+i][0] == buildingId){
  1951. ++ret.count;
  1952. if (parseInt(b['pos'+i][1]) > ret.maxLevel)
  1953. ret.maxLevel = parseInt(b['pos'+i][1]);
  1954. }
  1955. }
  1956. return ret;
  1957. }
  1958.  
  1959. /*************** TRANSPORT **********/
  1960. my.TranspAuto = {
  1961. cont : null,
  1962. displayTimer : null,
  1963. state : null,
  1964. curTabBut : null,
  1965. curTabName : null,
  1966. sourceCity : {},
  1967. destinationCity : {},
  1968. rows : [],
  1969.  
  1970. init : function (){
  1971. var t = my.TranspAuto;
  1972. t.cont = document.createElement('div');
  1973. t.state = null;
  1974. t.tradeRoutes= [];
  1975. t.traderState = {running: false,};
  1976. setTimeout(function() {
  1977. t.readTraderState();
  1978. t.readTradeRoutes();
  1979. t.e_tradeRoutes();
  1980. },1000);
  1981. //window.addEventListener('unload', t.onUnload, false);
  1982.  
  1983. return t.cont;
  1984. },
  1985. getContent : function (){
  1986. var t = my.TranspAuto;
  1987. return t.cont;
  1988. },
  1989. hide : function (){
  1990. var t = my.TranspAuto;
  1991. t.state = null;
  1992. t.saveTradeRoutes();
  1993. t.saveTraderState();
  1994. clearTimeout (t.displayTimer);
  1995. },
  1996. show : function (){
  1997. var t = my.TranspAuto;
  1998. var rownum = 0;
  1999.  
  2000. var ModelCity = {};
  2001. t.cont.innerHTML = '<TABLE class=ptTab align=center><TR><TD><INPUT class=bopbSubtab ID=BoTrpSubM type=submit value="Manuel"></td>\
  2002. <TD><INPUT class=bopbSubtab ID=BoTrpSubA type=submit value="Automatique"></td><TD><INPUT class=bopbSubtab ID=BoTrpSubR type=submit DISABLED value="Approvisionner"></td></tr></table>\
  2003. <DIV id="BoTrpOutput" style="margin-top:5px; background-color:white; height:'+(Options.HauteurBoite-65)+'px;max-height:600px;overflow-y:auto"></div>';
  2004. t.TransportDiv = ById('BoTrpOutput');
  2005. ById('BoTrpSubA').addEventListener('click', e_butSubtab, false);
  2006. ById('BoTrpSubM').addEventListener('click', e_butSubtab, false);
  2007. ById('BoTrpSubR').addEventListener('click', e_butSubtab, false);
  2008. changeSubtab (ById('BoTrpSubM'));
  2009. function e_butSubtab (evt){
  2010. changeSubtab (evt.target);
  2011. }
  2012. function changeSubtab (but){
  2013. if (but == t.curTabBut)
  2014. return;
  2015. if (t.curTabBut){
  2016. t.curTabBut.className='bopbSubtab';
  2017. t.curTabBut.disabled=false;
  2018. }
  2019. t.curTabBut = but;
  2020. but.className='bopbSubtab bopbSubtabSel';
  2021. but.disabled=true;
  2022. t.curTabName = but.id.substr(8);
  2023. t.show2();
  2024. }
  2025. },
  2026. show2 : function (){
  2027. var t = my.TranspAuto;
  2028. t.state = null;
  2029. clearTimeout (t.displayTimer);
  2030. clearTimeout (t.timer);
  2031. if (t.curTabName == 'M')
  2032. t.showManuel();
  2033. else if (t.curTabName == 'R')
  2034. t.showReappro();
  2035. else {
  2036. t.showAuto();
  2037. t.showTimer();
  2038. }
  2039. },
  2040. showTimer: function() {
  2041. var t = my.TranspAuto;
  2042. t.updateTroops();
  2043. t.updateResources();
  2044. t.timer = setTimeout (t.showTimer, 1000);
  2045. },
  2046. showAuto: function() {
  2047. var t = my.TranspAuto;
  2048. var m = '<DIV id=pbTowrtDivF class=ptstat>TRANSPORT AUTOMATIQUE - CONFIGURATION</div><TABLE id=pbtraderfunctions width=100% height=0% class=pbTab><TR align="center">';
  2049. logit(t.traderState.running);
  2050. if (t.traderState.running == false) {
  2051. m += '<TD><INPUT id=pbTraderState type=submit value="Transport = OFF"></td>';
  2052. } else {
  2053. m += '<TD><INPUT id=pbTraderState type=submit value="Transport = ON"></td>';
  2054. }
  2055. m += '<TD><INPUT id=pbShowRoutes type=submit value="Voir les Routes"></td>';
  2056. m += '</tr></table></div>';
  2057. m += '<DIV id=pbTraderDivDRoute class=ptstat>OPTIONS DU TRANSPORT</div>';
  2058. m += '<TABLE id=pbtraderfunctions width=100% height=0% class=pbTab><TR align="left">';
  2059. m += '<TD colspan=2>Envoyer les transports toutes les <INPUT id=pbtransportinterval type=text size=4 value="'+Options.transportinterval+'"\> minutes</td>';
  2060. m += '<TD colspan=4>Envoyer les transports avec un minumum de <INPUT id=pbminwagons type=text size=2 value="'+Options.minwagons+'"\> troupes</td></tr></table>';
  2061. m += '</table>';
  2062. m += '<DIV id=pbTraderDivDRoute class=ptstat>AJOUTER UN TRANSPORT</div>';
  2063. m += '<TABLE id=pbaddtraderoute width=95% height=0% class=pbTab><TR align="left">';
  2064. m += '<TR align="left"><TD>Source :</td> <TD colspan=4><DIV style="margin-bottom:10px;"><span id=ptrescity></span></div></td></tr>';
  2065. m += '<TR align="left">';
  2066. m += '<TD>DEstination :</td> <TD width=310px><DIV style="margin-bottom:10px;"><span id=ptcityTo></span></div></td>';
  2067. m += '<TD>OU</td>';
  2068. m += '<TD>X:<INPUT id=ptcityX type=text size=3\></td>';
  2069. m += '<TD>Y:<INPUT id=ptcityY type=text size=3\></td></tr>';
  2070. m += '<TABLE id=pbaddtraderoute height=0% class=pbTab><TR align="left">';
  2071. m += '<TD width=75px>troupes :</td><TD width=150px><SELECT id="TransportTroop">';
  2072. unsafeWindow.Barracks.allUnitIds.each(function(r){
  2073. if (unsafeWindow.arStrings.unitName["u"+r])
  2074. m+= "<option value='u"+r+"'>"+unsafeWindow.arStrings.unitName["u"+r]+"</option>";
  2075. });
  2076. //for (y in uW.unitcost) m+='<option value="'+y+'">'+unsafeWindow.unitcost[y][0]+'</option>';
  2077. m+='</select></td><TD width=75px>Dispo :&nbsp;</td><TD id=TroopAmount align=left width=75px></td>';
  2078. m+='<TD width=75px>Estimation ::&nbsp;</td><TD id=CarryAmount align=left width=75px></td>';
  2079. //m += '<TR><TD >Troupes : </td><TD><INPUT id=TroopsToSend type=text size=6 maxlength=6 value="0">&nbsp;&nbsp;</td>';
  2080. m += '<TD width=50px></td>';
  2081. m +='<TD id=Calc colspan=3></td></tr>';
  2082. m += '<TABLE id=pbaddtraderoute height=0% class=pbTab><TR align="center">';
  2083. m += '<TD width=5%>'+ unsafeWindow.arStrings.ResourceName[1] +'</td>';
  2084. m += '<TD id=TransRec1 align=right width=110px></td>';
  2085. m += '<TD id=HaveRec1 align=right width=110px></td>';
  2086. m += '<TD width=55px align=right><INPUT id=pbshipFood type=checkbox unchecked=true\></td>';
  2087. m += '<TD width=180px align=left>Garder : <INPUT id=pbtargetamountFood type=text size=11 maxlength=12 value="0" disabled=true\></td>';
  2088. //m += '<TD width=100px>Transporter: <INPUT id=pbtradeamountFood type=text size=11 maxlength=12 value="0"\></td>';
  2089. m += '<TD width=50px></td></tr>';
  2090. m += '<TR align="center">';
  2091. m += '<TD width=5%>'+ unsafeWindow.arStrings.ResourceName[2] +'</td>';
  2092. m += '<TD id=TransRec2 align=right width=110px></td>';
  2093. m += '<TD id=HaveRec2 align=right width=110px></td>';
  2094. m += '<TD width=55px align=right><INPUT id=pbshipWood type=checkbox unchecked=true\></td>';
  2095. m += '<TD width=180px align=left>Garder : <INPUT id=pbtargetamountWood type=text size=11 maxlength=12 value="0" disabled=true\></td>';
  2096. //m += '<TD width=100px>Transporter: <INPUT id=pbtradeamountWood type=text size=11 maxlength=12 value="0"\></td>';
  2097. m += '<TD width=50px></td></tr>';
  2098. m += '<TR align="center">';
  2099. m += '<TD width=5%>'+ unsafeWindow.arStrings.ResourceName[3] +'</td>';
  2100. m += '<TD id=TransRec3 align=right width=110px></td>';
  2101. m += '<TD id=HaveRec3 align=right width=110px></td>';
  2102. m += '<TD width=55px align=right><INPUT id=pbshipStone type=checkbox unchecked=true\></td>';
  2103. m += '<TD width=180px align=left>Garder : <INPUT id=pbtargetamountStone type=text size=11 maxlength=12 value="0" disabled=true\></td>';
  2104. //m += '<TD width=100px>Transporter: <INPUT id=pbtradeamountStone type=text size=11 maxlength=12 value="0"\></td>';
  2105. m += '<TD width=50px></td></tr>';
  2106. m += '<TR align="center">';
  2107. m += '<TD width=5%>'+ unsafeWindow.arStrings.ResourceName[4] +'</td>';
  2108. m += '<TD id=TransRec4 align=right width=110px></td>';
  2109. m += '<TD id=HaveRec4 align=right width=110px></td>';
  2110. m += '<TD width=55px align=right><INPUT id=pbshipOre type=checkbox unchecked=true\></td>';
  2111. m += '<TD width=180px align=left>Garder : <INPUT id=pbtargetamountOre type=text size=11 maxlength=12 value="0" disabled=true\></td>';
  2112. //m += '<TD width=100px>Transporter: <INPUT id=pbtradeamountOre type=text size=11 maxlength=12 value="0"\></td>';
  2113. m += '<TD width=50px></td></tr>';
  2114. m += '<TD width=5%>'+ unsafeWindow.arStrings.ResourceName[0] +'</td>';
  2115. m += '<TD id=TransGold align=right width=110px></td>';
  2116. m += '<TD id=HaveGold align=right width=110px></td>';
  2117. m += '<TD width=55px align=right><INPUT id=pbshipGold type=checkbox unchecked=true\></td>';
  2118. m += '<TD width=180px align=left>Garder : <INPUT id=pbtargetamountGold type=text size=11 maxlength=12 value="0" disabled=true\></td>';
  2119. //m += '<TD width=100px>Transporter: <INPUT id=pbtradeamountGold type=text size=11 maxlength=12 value="0"\></td>';
  2120. m += '<TD width=50px></td></tr>';
  2121. m += '</table>';
  2122. m += '<DIV style="text-align:center; margin-top:15px"><INPUT id=pbSaveRoute type=submit value="Ajouter une Route"></div>';
  2123. m += '<DIV id=errorSpace></div>'
  2124. t.TransportDiv.innerHTML = m;
  2125. ById('TransportTroop').value = 'u9';
  2126. t.tcp = new CdispCityPicker ('pttrader', ById('ptrescity'), true, t.updateResources, 0);
  2127. t.tcpto = new CdispCityPicker ('pttraderTo', ById('ptcityTo'), true, t.clickCitySelect).bindToXYboxes(document.getElementById ('ptcityX'), document.getElementById ('ptcityY'));
  2128. ById('TransportTroop').addEventListener('change', function(){t.updateTroops();}, false);
  2129. ById('pbTraderState').addEventListener('click', function(){t.toggleTraderState(this);}, false);
  2130. ById('pbSaveRoute').addEventListener('click', function(){t.addTradeRoute();}, false);
  2131. ById('pbShowRoutes').addEventListener('click', function(){t.showTradeRoutes();}, false);
  2132. ById('pbtransportinterval').addEventListener('keyup', function(){
  2133. if (isNaN(ById('pbtransportinterval').value)){ ById('pbtransportinterval').value=60 ;}
  2134. Options.transportinterval = ById('pbtransportinterval').value;
  2135. saveOptions();
  2136. }, false);
  2137. ById('pbtargetamountFood').addEventListener('keyup', function(){
  2138. if (isNaN(ById('pbtargetamountFood').value)) ById('pbtargetamountFood').value=0 ;
  2139. }, false);
  2140. ById('pbtargetamountWood').addEventListener('keyup', function(){
  2141. if (isNaN(ById('pbtargetamountWood').value)) ById('pbtargetamountWood').value=0 ;
  2142. }, false);
  2143. ById('pbtargetamountStone').addEventListener('keyup', function(){
  2144. if (isNaN(ById('pbtargetamountStone').value)) ById('pbtargetamountStone').value=0 ;
  2145. }, false);
  2146. ById('pbtargetamountOre').addEventListener('keyup', function(){
  2147. if (isNaN(ById('pbtargetamountOre').value)) ById('pbtargetamountOre').value=0 ;
  2148. }, false);
  2149. ById('pbtargetamountGold').addEventListener('keyup', function(){
  2150. if (isNaN(ById('pbtargetamountGold').value)) ById('pbtargetamountGold').value=0 ;
  2151. }, false);
  2152.  
  2153. ById('pbminwagons').addEventListener('keyup', function(){
  2154. if (isNaN(ById('pbminwagons').value)) ById('pbminwagons').value=100 ;
  2155. Options.minwagons = parseInt(ById('pbminwagons').value);
  2156. saveOptions();
  2157. }, false)
  2158. ById('pbshipFood').addEventListener('click', function(){
  2159. if (ById('pbshipFood').checked==false) {
  2160. ById('pbtargetamountFood').disabled = true;
  2161. }
  2162. else {
  2163. ById('pbtargetamountFood').disabled = false;
  2164. }
  2165. },false);
  2166. ById('pbshipWood').addEventListener('click', function(){
  2167. if (ById('pbshipWood').checked==false) {
  2168. ById('pbtargetamountWood').disabled = true;
  2169. }
  2170. else {
  2171. ById('pbtargetamountWood').disabled = false;
  2172. }
  2173. },false);
  2174. ById('pbshipStone').addEventListener('click', function(){
  2175. if (ById('pbshipStone').checked==false) {
  2176. ById('pbtargetamountStone').disabled = true;
  2177. }
  2178. else {
  2179. ById('pbtargetamountStone').disabled = false;
  2180. }
  2181. },false);
  2182. ById('pbshipOre').addEventListener('click', function(){
  2183. if (ById('pbshipOre').checked==false) {
  2184. ById('pbtargetamountOre').disabled = true;
  2185. }
  2186. else {
  2187. ById('pbtargetamountOre').disabled = false;
  2188. }
  2189. },false);
  2190. ById('pbshipGold').addEventListener('click', function(){
  2191. if (ById('pbshipGold').checked==false) {
  2192. ById('pbtargetamountGold').disabled = true;
  2193. }
  2194. else {
  2195. ById('pbtargetamountGold').disabled = false;
  2196. }
  2197. },false);
  2198. },
  2199. updateResources : function (){
  2200. var t = my.TranspAuto
  2201. var ToCity = null;
  2202. for (var i=1;i<5;i++)
  2203. ById('TransRec'+i).innerHTML = addCommas (Cities.cities[t.tcp.city.idx].c.resources[i].count);
  2204. ById('TransGold').innerHTML = addCommas(Cities.cities[t.tcp.city.idx].c.silver());
  2205. for (var ii=0; ii< Cities.numCities;ii++) {
  2206. if (Cities.cities[ii].c.x == document.getElementById ('ptcityX').value && Cities.cities[ii].c.y == document.getElementById ('ptcityY').value)
  2207. ToCity = Cities.cities[ii].id;
  2208. }
  2209. for (var i=1;i<5;i++)
  2210. if (ToCity != null)
  2211. ById('HaveRec'+i).innerHTML = addCommas (Cities.cities[t.tcp.city.idx].c.resources[i].count);
  2212. else ById('HaveRec'+i).innerHTML = "----";
  2213. if (ToCity != null) ById('HaveGold').innerHTML = addCommas(Cities.cities[t.tcp.city.idx].c.silver());
  2214. else ById('HaveGold').innerHTML = "----";
  2215. },
  2216. updateTroops : function (city){
  2217. var t = my.TranspAuto;
  2218. var fontcolor = 'black';
  2219. //t.Astone = parseInt(ById('pbtradeamountAstone').value*5);
  2220. //var unit = ById('TransportTroop').value;
  2221. t.Troops = 0; //parseInt(Seed.units['city' + t.tcp.city.id][unit]);
  2222. //var untid=ById('TransportTroop').value;
  2223. var LoadUnit=0; //parseInt(parseInt(uW.unitstats[untid][5])*(1+loadBoost));
  2224. var GlobalMaxLoad = 1;//t.Troops * LoadUnit;
  2225. t.MaxLoad = 0; //parseInt(ById('TroopsToSend').value) * LoadUnit;
  2226. t.TroopsNeeded = 1;//(t.Food + t.Wood + t.Stone + t.Ore + t.Gold + t.Astone) / LoadUnit;
  2227. t.TroopsNeeded = t.TroopsNeeded.toFixed(0);
  2228. //if (t.TroopsNeeded < ((t.Food + t.Wood + t.Stone + t.Ore + t.Gold + t.Astone) / LoadUnit)) t.TroopsNeeded++;
  2229. if ( t.TroopsNeeded > t.Troops) fontcolor = 'red';
  2230. if (t.Troops > 0 ) ById('TroopAmount').innerHTML = '<FONT color='+fontcolor+'>' + addCommas(t.Troops) + '</font>';
  2231. else ById('TroopAmount').innerHTML = 0;
  2232. if (GlobalMaxLoad > 0) ById('CarryAmount').innerHTML = addCommas(GlobalMaxLoad);
  2233. else ById('CarryAmount').innerHTML = 0;
  2234. ById('Calc').innerHTML = 'Ressources: ' + addCommas(t.Food + t.Wood + t.Stone + t.Ore + t.Gold + t.Astone) + ' / ' + addCommas(t.MaxLoad) + '&nbsp;&nbsp;(Troupes n&eacute;cessaires : <FONT color='+fontcolor+'>' + addCommas(t.TroopsNeeded) + '</font> )' ;
  2235. },
  2236. getRallypoint: function(cityId){
  2237. var t = my.TranspAuto;
  2238. for (var o in Seed.buildings[cityId]){
  2239. var buildingType = parseInt(Seed.buildings[cityId][o][0]);
  2240. var buildingLevel = parseInt(Seed.buildings[cityId][o][1]);
  2241. if (buildingType == 12){
  2242. return parseInt(buildingLevel);
  2243. break;
  2244. }
  2245. }
  2246. return 0;
  2247. },
  2248. e_tradeRoutes: function(){
  2249. var t = my.TranspAuto;
  2250. var now = new Date();
  2251. clearTimeout(t.timer);
  2252. if (t.traderState.running == true) {
  2253. var now = new Date().getTime()/1000.0;
  2254. now = now.toFixed(0);
  2255. var last = Options.lasttransport;
  2256. if ( now > (parseInt(last) + (Options.transportinterval*60))){
  2257. t.checkdoTrades();
  2258. }
  2259. }
  2260. t.timer = setTimeout(function(){ t.e_tradeRoutes();}, Options.transportinterval*1000);
  2261. },
  2262. delTradeRoutes: function() {
  2263. var t = my.TranspAuto;
  2264. t.tradeRoutes= [];
  2265. },
  2266. checkcoords : function (obj){
  2267. var t = my.TranspAuto;
  2268. if(obj.id == 'pbok'){
  2269. t.check = true;
  2270. t.addTradeRoute();
  2271. }
  2272. return;
  2273. },
  2274. addTradeRoute: function () {
  2275. var valid = true;
  2276. var t = my.TranspAuto;
  2277. var city = t.tcp.city.id;
  2278. if (ById('ptcityX').value==0 && ById('ptcityY').value ==0 && !t.check)
  2279. {
  2280. return;
  2281. }
  2282. var ship_Food = ById('pbshipFood').checked;
  2283. var ship_Wood = ById('pbshipWood').checked;
  2284. var ship_Stone = ById('pbshipStone').checked;
  2285. var ship_Ore = ById('pbshipOre').checked;
  2286. var ship_Gold = ById('pbshipGold').checked;
  2287. var target_Food = ById('pbtargetamountFood').value;
  2288. var target_Wood = ById('pbtargetamountWood').value;
  2289. var target_Stone = ById('pbtargetamountStone').value;
  2290. var target_Ore = ById('pbtargetamountOre').value;
  2291. var target_Gold = ById('pbtargetamountGold').value;
  2292. var target_x = ById('ptcityX').value;
  2293. var target_y = ById('ptcityY').value;
  2294. var TroopType = ById('TransportTroop').value;
  2295. var route_state = true;
  2296. if (valid == true) {
  2297. var lTR = t.tradeRoutes;
  2298. lTR.push({
  2299. city: city,
  2300. ship_Food: ship_Food,
  2301. target_Food: target_Food,
  2302. ship_Wood: ship_Wood,
  2303. target_Wood: target_Wood,
  2304. ship_Stone: ship_Stone,
  2305. target_Stone: target_Stone,
  2306. ship_Ore: ship_Ore,
  2307. target_Ore: target_Ore,
  2308. ship_Gold: ship_Gold,
  2309. target_Gold: target_Gold,
  2310. target_x: target_x,
  2311. target_y: target_y,
  2312. TroopType: TroopType,
  2313. route_state: "true"
  2314. });
  2315. }
  2316. ById('pbTraderDivDRoute').style.background ='#99FF99';
  2317. setTimeout(function(){ (ById('pbTraderDivDRoute').style.background =''); }, 500);
  2318. },
  2319. showTradeRoutes: function () {
  2320. var t = my.TranspAuto;
  2321. if (t.popTradeRoutes == null) {
  2322. t.popTradeRoutes = new CPopup('pbShowTrade', 0, 0, 750, 500, true, function() {clearTimeout (1000);});
  2323. t.popTradeRoutes.centerMe (mainPop.getMainDiv());
  2324. }
  2325. var m = '<DIV style="max-height:460px; height:460px; overflow-y:auto"><TABLE align=center cellpadding=0 cellspacing=0 width=100% class="pbTab" id="pbRoutesQueue">';
  2326. t.popTradeRoutes.getMainDiv().innerHTML = '</table></div>' + m;
  2327. t.popTradeRoutes.getTopDiv().innerHTML = '<TD><B>Les routes du Transport Automatique : </td>';
  2328. t.paintTradeRoutes();
  2329. t.popTradeRoutes.show(true) ;
  2330. },
  2331. paintTradeRoutes: function(){
  2332. var t = my.TranspAuto;
  2333. var r = t.tradeRoutes;
  2334. var cityname;
  2335. var citynameTo = null;
  2336. var m= '<TABLE id=paintRoutes class=pbTab>';
  2337. for (var i=0;i<(r.length);i++) {
  2338. citynameTo = null;
  2339. for (var y=0; y< Cities.numCities;y++) {
  2340. if ( parseInt(Cities.cities[y].id) == r[i].city) var cityname = Cities.cities[y].c.name;
  2341. if ( parseInt(Cities.cities[y].c.x) == r[i].target_x && parseInt(Cities.cities[y].c.y) == r[i].target_y) var citynameTo = Cities.cities[y].c.name;
  2342. }
  2343. var queueId = i;
  2344. if (citynameTo == null) var TO = r[i].target_x +','+ r[i].target_y;
  2345. else TO = citynameTo;
  2346. if (r[i].route_state) var status = '<FONT color=green>Activ&eacute;</font>';
  2347. else var status = '<FONT color=red>D&acture;activ&eacute;</font>';
  2348. if (r[i].TroopType == undefined) var unit = 'unt9';
  2349. else var unit = r[i].TroopType;
  2350. m += '<TR><TD TD width=12px>&nbsp;&nbsp;</td></tr>';
  2351. m +='<TR><TD width=20px>'+(i+1)+'</td><TD width=175px>Depuis:&nbsp;&nbsp;'+ cityname +'</TD><TD width=175px>Vers:&nbsp;&nbsp;'+ TO +'</td><TD width=175px>'+status+'</td>';
  2352. m +='<TD width=60px><A onclick="traceEdit('+queueId+')">Editer</a></td><TD width=60px><A onclick="traceDelete('+queueId+')">Supprimer</a></td></tr>';
  2353. m += '<TR><TD></td><TD>Troops:&nbsp;&nbsp;</td></tr>';
  2354. if (r[i].ship_Food) m += '<TR><TD></td><TD align=center><img src="http://cdn1.kingdomsofcamelot.com/fb/e2/src/img/food_30.png"></td><TD>Target: '+ addCommas(r[i].target_Food) +'</td>';
  2355. if (r[i].ship_Wood) m += '<TR><TD></td><TD align=center><img src="http://cdn1.kingdomsofcamelot.com/fb/e2/src/img/wood_30.png"></td><TD>Target: '+ addCommas(r[i].target_Wood) +'</td>';
  2356. if (r[i].ship_Stone) m += '<TR><TD></td><TD align=center><img src="http://cdn1.kingdomsofcamelot.com/fb/e2/src/img/stone_30.png"></td><TD>Target: '+ addCommas(r[i].target_Stone) +'</td>';
  2357. if (r[i].ship_Ore) m += '<TR><TD></td><TD align=center><img src="http://cdn1.kingdomsofcamelot.com/fb/e2/src/img/iron_30.png"></td><TD>Target: '+ addCommas(r[i].target_Ore) +'</td>';
  2358. if (r[i].ship_Gold) m += '<TR><TD></td><TD align=center><img src="http://cdn1.kingdomsofcamelot.com/fb/e2/src/img/gold_30.png"></td><TD>Target: '+ addCommas(r[i].target_Gold) +'</td>';
  2359. }
  2360. m +='</table>';
  2361. ById('pbRoutesQueue').innerHTML= m;
  2362. unsafeWindow.traceEdit = t.editQueueElement;
  2363. unsafeWindow.traceDelete = t.cancelQueueElement;
  2364. },
  2365. cancelQueueElement: function(queueId){
  2366. var t = my.TranspAuto;
  2367. var queueId = parseInt(queueId);
  2368. t.tradeRoutes.splice(queueId, 1);
  2369. t.showTradeRoutes();
  2370. },
  2371. editQueueElement: function(queueId){
  2372. var t = my.TranspAuto;
  2373. var r = t.tradeRoutes;
  2374. var queueId = parseInt(queueId);
  2375. var cityname;
  2376. var citynameTo = null;
  2377. var Types = ['food','wood','stone','iron','gold'];
  2378. for (var y=0; y< Cities.numCities;y++) {
  2379. if ( parseInt(Cities.cities[y].id) == r[queueId].city) var cityname = Cities.cities[y].c.name;
  2380. if ( parseInt(Cities.cities[y].c.x) == r[queueId].target_x && parseInt(Cities.cities[y].c.y) == r[queueId].target_y) var citynameTo = Cities.cities[y].c.name;
  2381. }
  2382. if (citynameTo == null) var TO = r[queueId].target_x +','+ r[queueId].target_y;
  2383. else TO = citynameTo;
  2384. var n = '<TABLE id=editRoutes class=pbTab>';
  2385. n +='<TD>Depuis :&nbsp;'+ cityname +'</td><TD>Vers :&nbsp;'+ TO +'</td>';
  2386. n +='<TD><INPUT id=TradeStatus type=checkbox>&nbsp;Activ&eacute; la route</td>';
  2387. n += '<TD width=150px>Troupes :<SELECT id="pbbTransportTroop">';
  2388. unsafeWindow.Barracks.allUnitIds.each(function(r){
  2389. if (unsafeWindow.arStrings.unitName["u"+r])
  2390. n+= "<option value='u"+r+"'>"+unsafeWindow.arStrings.unitName["u"+r]+"</option>";
  2391. });
  2392. n+='</select></td></table><BR><TABLE id=editRoutes class=pbTab>';
  2393. for (var i=0;i<Types.length;i++){
  2394. var icon = Types[i];
  2395. n += '<TR><TD width=50px align=center>'+ unsafeWindow.arStrings.ResourceName[i] +'</td>';
  2396. n += '<TD width=50px align=center><INPUT id=pbbship'+Types[i]+' type=checkbox></td>';
  2397. n += '<TD width=125px>Garde : <INPUT id=pbbtargetamount'+Types[i]+' type=text size=11 maxlength=12 value="0"></td>';
  2398. }
  2399. n+='</table><BR><TABLE id=editRoutes class=pbTab><TR><TD><a class="button20" id="Cancel"><span>Annuler</span></a></td>';
  2400. n+='<TD><a class="button20" id="Save"><span>Enregistrer</span></a></td></tr>';
  2401. n +='</table>';
  2402. ById('pbRoutesQueue').innerHTML= n;
  2403. ById('TradeStatus').checked = r[queueId].route_state;
  2404. if (r[queueId].TroopType == undefined) var unit = 'u9';
  2405. else var unit = r[queueId].TroopType;
  2406. ById('pbbTransportTroop').value = unit;
  2407. ById('pbbshipfood').checked = r[queueId].ship_Food;
  2408. ById('pbbshipwood').checked = r[queueId].ship_Wood;
  2409. ById('pbbshipstone').checked = r[queueId].ship_Stone;
  2410. ById('pbbshipiron').checked = r[queueId].ship_Ore;
  2411. ById('pbbshipgold').checked = r[queueId].ship_Gold;
  2412. ById('pbbtargetamountfood').value = r[queueId].target_Food;
  2413. ById('pbbtargetamountwood').value = r[queueId].target_Wood;
  2414. ById('pbbtargetamountstone').value = r[queueId].target_Stone;
  2415. ById('pbbtargetamountiron').value = r[queueId].target_Ore;
  2416. ById('Cancel').addEventListener('click', function(){t.showTradeRoutes();}, false);
  2417. ById('Save').addEventListener('click', function(){
  2418. r[queueId].route_state = ById('TradeStatus').checked;
  2419. r[queueId].TroopType = ById('pbbTransportTroop').value;
  2420. r[queueId].ship_Food = ById('pbbshipfood').checked;
  2421. r[queueId].ship_Wood = ById('pbbshipwood').checked;
  2422. r[queueId].ship_Stone = ById('pbbshipstone').checked;
  2423. r[queueId].ship_Ore = ById('pbbshipiron').checked;
  2424. r[queueId].ship_Gold = ById('pbbshipgold').checked;
  2425. r[queueId].target_Food = ById('pbbtargetamountfood').value;
  2426. r[queueId].target_Wood = ById('pbbtargetamountwood').value;
  2427. r[queueId].target_Stone = ById('pbbtargetamountstone').value;
  2428. r[queueId].target_Ore = ById('pbbtargetamountiron').value;
  2429. r[queueId].target_Gold = ById('pbbtargetamountgold').value;
  2430. t.showTradeRoutes();
  2431. }, false);
  2432. },
  2433. saveTradeRoutes: function(){
  2434. var t = my.TranspAuto;
  2435. var serverID = getServerId();
  2436. GM_setValue('tradeRoutes_' + serverID, JSON2.stringify(t.tradeRoutes));
  2437. },
  2438. readTradeRoutes: function(){
  2439. var t = my.TranspAuto;
  2440. var serverID = getServerId();
  2441. s = GM_getValue('tradeRoutes_' + serverID);
  2442. if (s != null) {
  2443. route = JSON2.parse(s);
  2444. for (k in route)
  2445. t.tradeRoutes[k] = route[k];
  2446. }
  2447. },
  2448. saveTraderState: function(){
  2449. var t = my.TranspAuto;
  2450. var serverID = getServerId();
  2451. GM_setValue('traderState_' + serverID, JSON2.stringify(t.traderState));
  2452. },
  2453. readTraderState: function(){
  2454. var t = my.TranspAuto;
  2455. var serverID = getServerId();
  2456. s = GM_getValue('traderState_' + serverID);
  2457. if (s != null) {
  2458. state = JSON2.parse(s);
  2459. for (k in state)
  2460. t.traderState[k] = state[k];
  2461. }
  2462. },
  2463. toggleTraderState: function(obj){
  2464. var t = my.TranspAuto;
  2465. obj = ById('pbTraderState');
  2466. if (t.traderState.running == true) {
  2467. t.traderState.running = false;
  2468. if (obj) obj.value = "Transport = OFF";
  2469. clearTimeout(t.checkdotradetimeout);
  2470. t.count = 0;
  2471. Options.lasttransport = 0;
  2472. saveOptions();
  2473. }
  2474. else {
  2475. t.traderState.running = true;
  2476. if (obj) obj.value = "Transport = ON";
  2477. t.e_tradeRoutes();
  2478. }
  2479. t.saveTraderState();
  2480. },
  2481. count:0,
  2482. checkdoTrades: function(){
  2483. var t = my.TranspAuto;
  2484. if(t.tradeRoutes.length==0) return;
  2485. t.doTrades(t.count);
  2486. t.count++;
  2487. if(t.count < t.tradeRoutes.length){
  2488. t.checkdotradetimeout = setTimeout(function() { t.checkdoTrades();}, 10000);
  2489. } else {
  2490. var now = new Date().getTime()/1000.0;
  2491. now = now.toFixed(0);
  2492. Options.lasttransport = now;
  2493. saveOptions();
  2494. t.count = 0;
  2495. }
  2496. },
  2497. doTrades: function(count){
  2498. var t = my.TranspAuto;
  2499. if(t.tradeRoutes.length==0) return;
  2500. if(!t.tradeRoutes[count]["route_state"]) return;
  2501. var city = t.tradeRoutes[count]["city"];
  2502. if(!Cities.byID[city]) return;
  2503. var xcoord = t.tradeRoutes[count]["target_x"];
  2504. var ycoord = t.tradeRoutes[count]["target_y"];
  2505. var cityID = 'city' + city;
  2506. var cityNumber=Cities.byID[city].idx;
  2507. for (var zz=0; zz< Cities.numCities;zz++) {
  2508. if (parseInt(Cities.cities[zz].id) == city)
  2509. var cityname = Cities.cities[zz].c.name;
  2510. }
  2511. var carry_amount= 0;
  2512. var wagons_needed=0;
  2513. var citymax = 0;
  2514.  
  2515. var target_Food = t.tradeRoutes[count]["target_Food"];
  2516. var target_Wood = t.tradeRoutes[count]["target_Wood"];
  2517. var target_Stone = t.tradeRoutes[count]["target_Stone"];
  2518. var target_Ore = t.tradeRoutes[count]["target_Ore"];
  2519. var target_Gold = t.tradeRoutes[count]["target_Gold"];
  2520. var ship_Food = t.tradeRoutes[count]["ship_Food"];
  2521. var ship_Wood = t.tradeRoutes[count]["ship_Wood"];
  2522. var ship_Stone = t.tradeRoutes[count]["ship_Stone"];
  2523. var ship_Ore = t.tradeRoutes[count]["ship_Ore"];
  2524. var ship_Gold = t.tradeRoutes[count]["ship_Gold"];
  2525. var citymax_Food = parseIntNan(Cities.cities[cityNumber].c.resources[1].count);
  2526. var citymax_Wood = parseIntNan(Cities.cities[cityNumber].c.resources[2].count);
  2527. var citymax_Stone = parseIntNan(Cities.cities[cityNumber].c.resources[3].count);
  2528. var citymax_Ore = parseIntNan(Cities.cities[cityNumber].c.resources[4].count);
  2529. var citymax_Gold = parseIntNan(Cities.cities[cityNumber].c.silver());
  2530. var carry_Food = parseIntNan(citymax_Food - target_Food);
  2531. var carry_Wood = parseIntNan(citymax_Wood - target_Wood);
  2532. var carry_Stone = parseIntNan(citymax_Stone - target_Stone);
  2533. var carry_Ore = parseIntNan(citymax_Ore - target_Ore);
  2534. var carry_Gold = 0;
  2535. if (carry_Food < 0 || ship_Food==false) carry_Food = 0;
  2536. if (carry_Wood < 0 || ship_Wood==false) carry_Wood = 0;
  2537. if (carry_Stone < 0 || ship_Stone==false) carry_Stone = 0;
  2538. if (carry_Ore < 0 || ship_Ore==false) carry_Ore = 0;
  2539. var unit = t.tradeRoutes[count]['TroopType'];
  2540. var unitNumber=unit.substring(1,unit.length);
  2541. if (t.tradeRoutes[count]['TroopType'] == undefined) var wagons = parseInt(Cities.cities[cityNumber].c.troops[9].count());
  2542. else var wagons = parseInt(Cities.cities[cityNumber].c.troops[unitNumber].count());
  2543. var Troops =parseInt(Cities.cities[cityNumber].c.troops[unitNumber].count())
  2544. if(parseInt(Troops)>parseInt(wagons)) Troops = wagons;
  2545. var Load = parseInt(unsafeWindow.Unit.stats[unitNumber].load * (1 + (unsafeWindow.player.technologies[10].bonus()))); //parseInt(unsafeWindow.unitstats[unit]['5'])
  2546. var maxloadperwagon = Load;
  2547. var maxload = (maxloadperwagon * Troops);
  2548. // logit("Charge par unite : "+Load + " Nb : " + wagons + "maxload: " +maxload);
  2549. if(wagons <= 0) {return; }
  2550. var shift_Food = parseIntNan(maxload / 9);
  2551. var shift_Wood = parseIntNan(maxload / 9);
  2552. var shift_Stone = parseIntNan(maxload / 9);
  2553. var shift_Ore = parseIntNan(maxload / 9);
  2554. if ((maxload - carry_Food - carry_Wood - carry_Stone - carry_Ore) < 0){
  2555. var shift_num=0;
  2556. var shift_spare=0;
  2557. if (carry_Food < shift_Food) {
  2558. shift_spare += (shift_Food - carry_Food);
  2559. shift_Food = carry_Food;
  2560. }
  2561. if (carry_Wood < shift_Wood) {
  2562. shift_spare += (shift_Wood - carry_Wood);
  2563. shift_Wood = carry_Wood;
  2564. }
  2565. if (carry_Stone < shift_Stone) {
  2566. shift_spare += (shift_Stone - carry_Stone);
  2567. shift_Stone = carry_Stone;
  2568. }
  2569. if (carry_Ore < shift_Ore) {
  2570. shift_spare += (shift_Ore - carry_Ore);
  2571. shift_Ore = carry_Ore;
  2572. }
  2573. while (shift_spare >1) {
  2574. if (carry_Food < (shift_Food + shift_spare)){
  2575. shift_spare = shift_spare - carry_Food;;
  2576. shift_Food = carry_Food;
  2577. }
  2578. else{
  2579. shift_Food = (shift_Food + shift_spare);
  2580. shift_spare = shift_spare- shift_spare;
  2581. }
  2582. if (carry_Wood < (shift_Wood + shift_spare)){
  2583. shift_spare = shift_spare - carry_Wood;;
  2584. shift_Wood = carry_Wood;
  2585. }
  2586. else{
  2587. shift_Wood = shift_Wood + shift_spare;
  2588. shift_spare = shift_spare- shift_spare;
  2589. }
  2590. if (carry_Stone < (shift_Stone + shift_spare)){
  2591. shift_spare = shift_spare - carry_Stone;
  2592. shift_Stone = carry_Stone;
  2593. }
  2594. else{
  2595. shift_Stone = shift_Stone + shift_spare;
  2596. shift_spare = shift_spare- shift_spare;
  2597. }
  2598. if (carry_Ore < (shift_Ore + shift_spare)){
  2599. shift_spare = shift_spare - carry_Ore;
  2600. shift_Ore = carry_Ore;
  2601. }
  2602. else{
  2603. shift_Ore = shift_Ore + shift_spare;
  2604. shift_spare = shift_spare- shift_spare;
  2605. }
  2606. }
  2607. carry_Food = shift_Food;
  2608. carry_Wood = shift_Wood;
  2609. carry_Stone = shift_Stone;
  2610. carry_Ore = shift_Ore;
  2611. }
  2612. if (maxload > (carry_Food + carry_Wood + carry_Stone + carry_Ore ) && ship_Gold==true) {
  2613. if ((maxload-(carry_Food + carry_Wood + carry_Stone + carry_Ore)) > (citymax_Gold - target_Gold)){
  2614. carry_Gold = (citymax_Gold - target_Gold);
  2615. if (carry_Gold < 0 ) carry_Gold = 0;
  2616. }
  2617. else carry_Gold = (maxload-(carry_Food + carry_Wood + carry_Stone + carry_Ore));
  2618. }
  2619. wagons_needed = ((carry_Food + carry_Wood + carry_Stone + carry_Ore + carry_Gold) / maxloadperwagon);
  2620. wagons_needed = wagons_needed.toFixed(0);
  2621. if (wagons_needed < ((carry_Food + carry_Wood + carry_Stone + carry_Ore + carry_Gold) / maxloadperwagon)) wagons_needed++;
  2622. //logit("Besoin unité : " + wagons_needed + "food:"+carry_Food+" wood:"+carry_Wood+" stone:"+carry_Stone+" ore:"+carry_Ore+" gold:"+carry_Gold);
  2623. if ( wagons_needed < Options.minwagons ) {
  2624. logit("Transport auto : blocage troupe mini ");
  2625. return;
  2626. }
  2627. if (!Cities.byID[city].c.canMarch()) {
  2628. logit("Transport auto : impossible d'etablir une marche! ");
  2629. return;
  2630. }
  2631. var c={};
  2632. c.r1 = carry_Food;
  2633. c.r2 = carry_Wood;
  2634. c.r3 = carry_Stone;
  2635. c.r4 = carry_Ore;
  2636. c.gold = carry_Gold;
  2637. var id=city;
  2638. var d=unsafeWindow.Building.getMaxLevelForType(50,id);
  2639. var a=new unsafeWindow.March({marchId:Cities.byID[id].c.emptyMarchSlots()[0],toXCoord:xcoord,toYCoord:ycoord,fromCityId:id,marchType:1,knightId:0,fromHealLevel:d,apothecaryHealPercent:unsafeWindow.KB.Controllers.Apothecary.getHealPercent(d),gold:c.gold,resource1:c.r1,resource2:c.r2,resource3:c.r3,resource4:c.r4});
  2640. var g={mid:a.id,xcoord:a.to.x,ycoord:a.to.y,cid:id,type:1,kid:0,gold:a.gold,r1:a.resources[1],r2:a.resources[2],r3:a.resources[3],r4:a.resources[4],camp:0,et:t.calculateTime(id,unitNumber,xcoord,ycoord)};
  2641. a.units[unitNumber].sent=parseIntNan(wagons_needed);
  2642. g["u"+unitNumber]=parseIntNan(wagons_needed);
  2643. if ((carry_Food + carry_Wood + carry_Stone + carry_Ore + carry_Gold) > 0) {
  2644. unsafeWindow.AjaxCall.gPostRequest("march.php",g,function(zz){
  2645. var now = unixTime();
  2646. var i="transport",j=Number(zz.eta)-Number(zz.initTS);
  2647. unsafeWindow.Chrome.ResourcesBar.update();
  2648. unsafeWindow.Object.keys(a.units).each(function(k){Cities.byID[id].c.troops[k].subtract(a.units[k].sent)});
  2649. a.id=Number(zz.marchId);
  2650. a.to.tileId=Number(zz.tileId);
  2651. a.to.tileType=Number(zz.tileType);
  2652. a.to.tileLevel=Number(zz.tileLevel);
  2653. a.to.playerId=Number(zz.tileUserId);
  2654. a.to.cityId=Number(zz.tileCityId);
  2655. a.setStatus(unsafeWindow.Constant.MarchStatus.OUTBOUND);
  2656. a.setMarchTime(unsafeWindow.unixtime(),unsafeWindow.unixtime()+j,0);
  2657. Cities.byID[id].c.marches.outgoing[a.id]=a;
  2658. unsafeWindow.KTrack.event(["_trackEvent","March",i,unsafeWindow.player.level]);
  2659. },
  2660. function(zz){
  2661. }, false);
  2662. }
  2663. },
  2664. calculateTime: function(id,b,g,e) {
  2665. var c=65535,a=Math.abs(Cities.byID[id].c.x-g),f=Math.abs(Cities.byID[id].c.y-e),d=Math.sqrt((a*a)+(f*f));
  2666. h=unsafeWindow.Unit.stats[b].speed*1;
  2667. if(h<c){c=h;}
  2668. return Math.ceil(d*6000/c)+30;
  2669. },
  2670. onUnload: function(){
  2671. var t = my.TranspAuto;
  2672. t.saveTradeRoutes();
  2673. t.saveTraderState();
  2674. //if (!ResetAll) t.saveReapproState();
  2675. //alert("Banzai");
  2676. },
  2677. showManuel : function() {
  2678. var t = my.TranspAuto;
  2679.  
  2680. if (t.state == null) {
  2681. m = "<DIV class=ptstat>TRANSPORTING GOODS FROM CITY TO CITY</div>";
  2682. m +="<div id='statpourTr'></div>";
  2683. m += "<TABLE width=100% class=ptTab border=0 cellpadding=3>\
  2684. <tr align=center><td colspan=2><HR></td></tr>\
  2685. <tr align=center valign=top><td colspan=1 width=50%><b><u>Source</b></u><br><span id=srcptspeedcity></span></td>\
  2686. <td colspan=1 width=50% rowspan=2><b><u>Destination</b></u><br><span id=desptspeedcity></span><br>\
  2687. Put in coordinates <br>X: <input type=text size=4 id=typetrpx value=0>&nbsp;Y: <input type=text size=4 id=typetrpy value=0><br><br><INPUT id='ptttButTransport' type=submit value='Transport' style='font-weight:bold'>\
  2688. </td></tr>\
  2689. <tr align=center><td colspan=1>Troops : <select id=typetrp><option value='1'>"+unsafeWindow.arStrings.unitName["u1"]+"</option><option value='2'>"+unsafeWindow.arStrings.unitName["u2"]+"</option><option value='4'>"+unsafeWindow.arStrings.unitName["u4"]+"</option><option value='5'>"+unsafeWindow.arStrings.unitName["u5"]+"</option><option value='6'>"+unsafeWindow.arStrings.unitName["u6"]+"</option><option value='7'>"+unsafeWindow.arStrings.unitName["u7"]+"</option><option value='8'>"+unsafeWindow.arStrings.unitName["u8"]+"</option><option selected value='9'>"+unsafeWindow.arStrings.unitName["u9"]+"</option><option value='10'>"+unsafeWindow.arStrings.unitName["u10"]+"</option><option value='11'>"+unsafeWindow.arStrings.unitName["u11"]+"</option><option value='12'>"+unsafeWindow.arStrings.unitName["u12"]+"</option></select>\
  2690. <br>Quantity : <input type=text size=6 value='100' id='Choixnbwagon'><input type=button id='trswagmax' value='Max'\><br><i>(Please put in the amount of troops you like to use)</i>\
  2691. <br><b>Resource type :</b><br><input type=radio id='ChoixRess0' name='ChoixRess' value='gold'> " + unsafeWindow.arStrings.ResourceName[0] + "\
  2692. <input type=radio id='ChoixRess1' name='ChoixRess' value='rec1'> " + unsafeWindow.arStrings.ResourceName[1] + "\
  2693. <input type=radio id='ChoixRess2' name='ChoixRess' value='rec2'> " + unsafeWindow.arStrings.ResourceName[2] + "\
  2694. <input type=radio id='ChoixRess3' name='ChoixRess' value='rec3'> " + unsafeWindow.arStrings.ResourceName[3] + "\
  2695. <input type=radio id='ChoixRess4' name='ChoixRess' value='rec4'> " + unsafeWindow.arStrings.ResourceName[4] + "\
  2696. </td></tr>\
  2697. <tr><td colspan=2>"+ unsafeWindow.arStrings.March.ResourcesToSend +" : <span id=BOEstimationR></td></tr>\
  2698. </table>\
  2699. <TABLE align=center width=100% class=ptTab><TR><TD><div id=ptTranportStatus style='text-align:center;overflow-y:auto; max-height:78px; height: 78px;'></div></td></tr></table>";
  2700. t.TransportDiv.innerHTML = m;
  2701. t.destinationCityx = document.getElementById ('typetrpx');
  2702. t.destinationCityy = document.getElementById ('typetrpy');
  2703. t.destinationCityx.addEventListener ('change', t.estimerRes, false);
  2704. t.destinationCityy.addEventListener ('change', t.estimerRes, false);
  2705. document.getElementById ('ChoixRess0').addEventListener ('click', t.estimerRes, false);
  2706. document.getElementById ('ChoixRess1').addEventListener ('click', t.estimerRes, false);
  2707. document.getElementById ('ChoixRess2').addEventListener ('click', t.estimerRes, false);
  2708. document.getElementById ('ChoixRess3').addEventListener ('click', t.estimerRes, false);
  2709. document.getElementById ('ChoixRess4').addEventListener ('click', t.estimerRes, false);
  2710. t.estimationRes = document.getElementById ('BOEstimationR');
  2711. var dcp1 = new CdispCityPicker ('ptspeed1', document.getElementById('desptspeedcity'), false, t.clickCityDestinationSelect, 1);
  2712. t.TTbutTransport = document.getElementById ('ptttButTransport');
  2713. t.TTbutTransport.addEventListener ('click', t.clickTransportDo, false);
  2714. t.divTranportStatus = document.getElementById ('ptTranportStatus');
  2715. t.statpourTr = document.getElementById ('statpourTr');
  2716. t.typetrp = document.getElementById ('typetrp');
  2717. t.typetrp.addEventListener ('click', t.estimerRes, false);
  2718. t.trswagmax = document.getElementById ('trswagmax');
  2719. t.trswagmax.addEventListener ('click', t.clickUniteMax, false);
  2720. t.Choixnbwagon = document.getElementById ('Choixnbwagon');
  2721. t.Choixnbwagon.addEventListener ('keyup', t.verifierWagons, false);
  2722. var dcp0 = new CdispCityPicker ('ptspeed0', document.getElementById('srcptspeedcity'), false, t.clickCitySourceSelect, Cities.byID[unsafeWindow.currentcityid].idx);
  2723. t.state = 1;
  2724. }
  2725.  
  2726. str = "<TABLE class=ptTabLined cellspacing=0><TR valign=top align=right><TD width=65></td><TD width=88 style='background: #ffc'><B>TOTAL</b></td>";
  2727. for(i=0; i<Cities.numCities; i++) {
  2728. Gate = Cities.cities[i].c.defending;
  2729. if(Gate == 0) var couleurr="#77EE77";
  2730. if(Gate != 0) var couleurr="#EE7777";
  2731. str += "<TD width=81 style='background-color:"+couleurr+"' align=center><B>"+ Cities.cities[i].c.name +'</b><BR><a onclick="KB.Controllers.MapHelper.gotoCoord('+Cities.cities[i].c.x +','+ Cities.cities[i].c.y+');">('+Cities.cities[i].c.x +','+ Cities.cities[i].c.y+')</td>';
  2732. }
  2733. str +="</tr>";
  2734. str += "<tr><td><br></td></tr>";
  2735. var m="";
  2736. var goldTotal=0;
  2737. for(i=0; i<Cities.numCities; i++) {
  2738. m += "<TD width=81 style='background:#e8e8e8' align=right>"+ addCommas(Cities.cities[i].c.silver()) +'</td>';
  2739. goldTotal+=parseInt(Cities.cities[i].c.silver());
  2740. }
  2741. str += "<tr align=right><td style='background:#e8e8e8' align=right><b>" + unsafeWindow.arStrings.ResourceName[0] + "</td><td style='background:#e8e8e8' align=right>"+addCommas(goldTotal)+" "+ m + "</tr>" ;
  2742. for (var nbr=1; nbr<=4; nbr++) {
  2743. if (nbr % 2)
  2744. style = '';
  2745. else
  2746. style = " style = 'background: #e8e8e8'";
  2747. var m="";
  2748. var resTotal=0;
  2749. for(var i=0; i<Cities.numCities; i++) {
  2750. m += "<TD width=81 "+style+" align=right>"+ addCommas(Cities.cities[i].c.resources[nbr].count) +'</td>';
  2751. resTotal+=parseInt(Cities.cities[i].c.resources[nbr].count);
  2752. }
  2753. str += "<tr><td "+style+" align=right><b>"+unsafeWindow.arStrings.ResourceName[nbr]+"</td><td "+style+" align=right>"+addCommas(resTotal)+" "+ m+"</tr>";
  2754. }
  2755. str += "<tr><td><br></td></tr>";
  2756. // Production de nourriture + ENTRETIEN !
  2757. var m="";
  2758. var prodTotal=0;
  2759. for(i=0; i<Cities.numCities; i++) {
  2760. m += "<TD align=right width=81 style='background:#e8e8e8'>"+ addCommas(Cities.cities[i].c.resources[1].hourlyTotalRate())+"/"+unsafeWindow.arStrings.TimeStr.timeHr+"</td>";
  2761. prodTotal+=parseInt(Cities.cities[i].c.resources[1].hourlyTotalRate());
  2762. }
  2763. str += "<tr><td style='background: #e8e8e8' align=right><b>"+unsafeWindow.arStrings.Common.Production+"</td><td style='background: #e8e8e8' align=right>"+addCommas(prodTotal)+"/"+unsafeWindow.arStrings.TimeStr.timeHr+""+ m+"</tr>";
  2764. var m="";
  2765. var entTotal=0;
  2766. for(i=0; i<Cities.numCities; i++) {
  2767. color='black';
  2768. // if ( parseInt(Cities.cities[i].c.resources[1].hourlyTotalRate()) < Cities.cities[i].c.upkeep() ) color='red';
  2769. m += "<TD align=right width=81 style='background:#e8e8e8;color:"+color+";'>"+ addCommas(Cities.cities[i].c.upkeep())+"/"+unsafeWindow.arStrings.TimeStr.timeHr+"</td>";
  2770. entTotal+=parseInt(Cities.cities[i].c.upkeep());
  2771. }
  2772. str += "<tr><td style='background: #e8e8e8' align=right><b>"+unsafeWindow.arStrings.Common.UpKeep+"</td><td style='background: #e8e8e8' align=right>"+addCommas(entTotal)+"/"+unsafeWindow.arStrings.TimeStr.timeHr+""+ m+"</tr>";
  2773. var m="";
  2774. var entTotal=0;
  2775. for(i=0; i<Cities.numCities; i++) {
  2776. color='black';
  2777. if ( parseInt(Cities.cities[i].c.resources[1].hourlyTotalRate()) < parseInt(Cities.cities[i].c.upkeep()) ) {
  2778. // entretien supérieur à la production
  2779. difference = parseInt(Cities.cities[i].c.resources[1].hourlyTotalRate()) - parseInt(Cities.cities[i].c.upkeep());
  2780. var timeLeft = parseInt(Cities.cities[i].c.resources[1].count) / (0-difference) * 3600;
  2781. if (timeLeft > 86313600)
  2782. autonomi = '----';
  2783. else {
  2784. if (timeLeft<(Options.foodWarnHours*3600)) {
  2785. autonomi = '<SPAN class=whiteOnRed><b>'+ timestrShort(timeLeft) +'</b></span>';
  2786. } else {
  2787. autonomi = ''+ timestrShort(timeLeft) +'';
  2788. }
  2789. }
  2790. m += "<TD align=right width=81 style='background:#e8e8e8;color:"+color+";'>"+ autonomi +"</td>";
  2791. } else {
  2792. m += "<TD align=right width=81 style='background:#e8e8e8;color:black;'>---</td>";
  2793. }
  2794. }
  2795. str += "<tr><td style='background: #e8e8e8' align=right><b>Autonomy</td><td style='background: #e8e8e8' align=right>&nbsp;"+ m+"</tr>";
  2796. var m="";
  2797. var unitTotal=0;
  2798. str += "<tr><td><br></td></tr>";
  2799. if (unsafeWindow.arStrings.unitName["u1"]) {
  2800. style = " style = 'background: #e8e8e8'";
  2801. for(var i=0; i<Cities.numCities; i++) {
  2802. m += "<TD width=81 "+style+" align=right>"+ addCommas(Cities.cities[i].c.troops[1].count()) +'</td>';
  2803. unitTotal+=parseInt(Cities.cities[i].c.troops[1].count());
  2804. }
  2805. str += "<tr><td "+style+" align=right><b>"+unsafeWindow.arStrings.unitName["u1"]+"</td><td "+style+" align=right>"+addCommas(unitTotal)+" "+ m + "</tr>";
  2806. }
  2807. var m="";
  2808. var unitTotal=0;
  2809. if (unsafeWindow.arStrings.unitName["u9"]) {
  2810. style = '';
  2811. for(var i=0; i<Cities.numCities; i++) {
  2812. m += "<TD width=81 "+style+" align=right>"+ addCommas(Cities.cities[i].c.troops[9].count()) +'</td>';
  2813. unitTotal+=parseInt(Cities.cities[i].c.troops[9].count());
  2814. }
  2815. str += "<tr><td "+style+" align=right><b>"+unsafeWindow.arStrings.unitName["u9"]+"</td><td "+style+" align=right>"+addCommas(unitTotal)+" "+ m + "</tr>";
  2816. }
  2817. str += "<tr><td><br></td></tr>";
  2818. t.statpourTr.innerHTML = str;
  2819. t.displayTimer = setTimeout (t.showManuel, 5000);
  2820. },
  2821.  
  2822. /******* transport ****/
  2823. verifierWagons: function() {
  2824. var t = my.TranspAuto;
  2825. var maxw=parseInt(Cities.cities[t.sourceCity.idx].c.troops[t.typetrp.value].count());
  2826. var saisw=parseInt(t.Choixnbwagon.value);
  2827. if (saisw > maxw) {
  2828. t.Choixnbwagon.value=maxw;
  2829. }
  2830. var maxtroupe=getTroopMax(t.sourceCity.c.id);
  2831. if (t.Choixnbwagon.value > maxtroupe) {
  2832. t.Choixnbwagon.value=maxtroupe;
  2833. //t.divTranportStatus.innerHTML = '<FONT COLOR=#550000>La quantit&eacute; ne peut exc&eacute;der '+maxw+' !.</font>';
  2834. }
  2835. t.estimerRes();
  2836. },
  2837. estimerRes: function() {
  2838. var t = my.TranspAuto;
  2839. var esti = parseInt(unsafeWindow.Unit.stats[t.typetrp.value].load * t.Choixnbwagon.value * (1 + (unsafeWindow.player.technologies[10].bonus())));
  2840. t.estimationRes.innerHTML = "<font size=3><b>" + addCommas(esti) + "</b></font>";
  2841. //t.estimationRes.innerHTML += "<br>Estimation temps de marche : <b>" + m.friendEtaStr + "</b>" ;
  2842. // test sur les ressources choisit !
  2843. var cityID = t.sourceCity.c.id;
  2844. var ic=0;
  2845. var resact=0;
  2846. var ic_ty="gold";
  2847. var ic_text="silver";
  2848. resact = Cities.cities[t.sourceCity.idx].c.silver();
  2849. if (document.getElementById("ChoixRess1").checked) { ic_ty="rec1";ic=1;ic_text="food";resact = parseInt(Cities.cities[t.sourceCity.idx].c.resources[1].count); }
  2850. if (document.getElementById("ChoixRess2").checked) { ic_ty="rec2";ic=2;ic_text="wood";resact = parseInt(Cities.cities[t.sourceCity.idx].c.resources[2].count); }
  2851. if (document.getElementById("ChoixRess3").checked) { ic_ty="rec3";ic=3;ic_text="stones";resact = parseInt(Cities.cities[t.sourceCity.idx].c.resources[3].count); }
  2852. if (document.getElementById("ChoixRess4").checked) { ic_ty="rec4";ic=4;ic_text="iron";resact = parseInt(Cities.cities[t.sourceCity.idx].c.resources[4].count); }
  2853.  
  2854. if (resact < esti) {
  2855. var nbparunit = parseInt(unsafeWindow.Unit.stats[t.typetrp.value].load * 1 * (1 + (unsafeWindow.player.technologies[10].bonus())));
  2856. var uniteness = Math.round(resact / nbparunit) - 1;
  2857. t.Choixnbwagon.value = uniteness;
  2858. t.TTbutTransport.disabled = false;
  2859. t.estimerRes();
  2860.  
  2861. } else {
  2862. //t.TTbutTransport.disabled = false;
  2863. }
  2864. },
  2865. clickUniteMax: function() {
  2866. var t = my.TranspAuto;
  2867. var maxw=parseInt(Cities.cities[t.sourceCity.idx].c.troops[t.typetrp.value].count());
  2868. var maxtroupe=getTroopMax(t.sourceCity.c.id);
  2869. t.Choixnbwagon.value=maxw;
  2870. if (maxw > maxtroupe) {
  2871. t.Choixnbwagon.value=maxtroupe;
  2872. //t.divTranportStatus.innerHTML = '<FONT COLOR=#550000>La quantit&eacute; ne peut exc&eacute;der '+maxw+' !.</font>';
  2873. }
  2874. t.estimerRes();
  2875. },
  2876. clickTransportDo: function() { // fonction pour faire le transport
  2877. var t = my.TranspAuto;
  2878. var SourceId = t.sourceCity.c.id;
  2879. var DestinationId = t.destinationCity.c.id;
  2880.  
  2881. //nHtml.Click(document.getElementById("city_"+SourceId));
  2882. //unsafeWindow.KB.AudioManager.playSound('on_click');
  2883. //unsafeWindow.Chrome.City.switchTo(SourceId);
  2884. if (!document.getElementById("ChoixRess0").checked && !document.getElementById("ChoixRess1").checked && !document.getElementById("ChoixRess2").checked && !document.getElementById("ChoixRess3").checked && !document.getElementById("ChoixRess4").checked) {
  2885. t.divTranportStatus.innerHTML = '<FONT COLOR=#550000>Please check the food you want to transport !</font>';
  2886. return;
  2887. }
  2888. if (t.sourceCity.c.x==t.destinationCityx.value && t.sourceCity.c.y==t.destinationCityy.value) {
  2889. t.divTranportStatus.innerHTML = '<FONT COLOR=#550000>Impossible to transport to same city !.</font>';
  2890. return;
  2891. }
  2892. if (parseInt(t.Choixnbwagon.value)=="0") {
  2893. t.divTranportStatus.innerHTML = '<FONT COLOR=#550000>Impossible to transport with no troops... pfff, wake up !.</font>';
  2894. return;
  2895. }
  2896. var x=t.destinationCityx.value;
  2897. var y=t.destinationCityy.value;
  2898. if (x == 0 || y == 0) {
  2899. t.divTranportStatus.innerHTML = '<FONT COLOR=#550000>Impossible to transport to 0,0 !.</font>';
  2900. return;
  2901. }
  2902. t.TTbutTransport.disabled=true;
  2903. var c={};
  2904. c.r1 = 0;
  2905. c.r2 = 0;
  2906. c.r3 = 0;
  2907. c.r4 = 0;
  2908. c.gold = 0;
  2909. var cc=0;
  2910. var esti = parseInt(unsafeWindow.Unit.stats[t.typetrp.value].load * t.Choixnbwagon.value * (1 + (unsafeWindow.player.technologies[10].bonus())));
  2911. if (document.getElementById("ChoixRess0").checked) { cc=0;c.gold = esti; }
  2912. if (document.getElementById("ChoixRess1").checked) { cc=1;c.r1 = esti; }
  2913. if (document.getElementById("ChoixRess2").checked) { cc=2;c.r2 = esti; }
  2914. if (document.getElementById("ChoixRess3").checked) { cc=3;c.r3 = esti; }
  2915. if (document.getElementById("ChoixRess4").checked) { cc=4;c.r4 = esti; }
  2916. t.divTranportStatus.innerHTML = "<i><b>Processing......</b></i>";
  2917. if (Cities.byID[SourceId].c.canMarch()) {
  2918. var f=Cities.byID[SourceId].c;
  2919. var id=f.id;
  2920. var d=unsafeWindow.Building.getMaxLevelForType(50,id);
  2921. var a=new unsafeWindow.March({marchId:Cities.byID[id].c.emptyMarchSlots()[0],toXCoord:x,toYCoord:y,fromCityId:id,marchType:1,knightId:0,fromHealLevel:d,apothecaryHealPercent:unsafeWindow.KB.Controllers.Apothecary.getHealPercent(d),gold:c.gold,resource1:c.r1,resource2:c.r2,resource3:c.r3,resource4:c.r4});
  2922. var g={mid:a.id,xcoord:a.to.x,ycoord:a.to.y,cid:id,type:1,kid:0,gold:a.gold,r1:a.resources[1],r2:a.resources[2],r3:a.resources[3],r4:a.resources[4],camp:0,et:t.calculateTime(id,t.typetrp.value,x,y)};
  2923. a.units[t.typetrp.value].sent=parseIntNan(t.Choixnbwagon.value);
  2924. g["u"+t.typetrp.value]=parseIntNan(t.Choixnbwagon.value);
  2925. unsafeWindow.AjaxCall.gPostRequest("march.php",g,function(zz){
  2926. var now = unixTime();
  2927. var i="transport",j=Number(zz.eta)-Number(zz.initTS);
  2928. unsafeWindow.Chrome.ResourcesBar.update();
  2929. unsafeWindow.Object.keys(a.units).each(function(k){Cities.byID[id].c.troops[k].subtract(a.units[k].sent)});
  2930. a.id=Number(zz.marchId);
  2931. a.to.tileId=Number(zz.tileId);
  2932. a.to.tileType=Number(zz.tileType);
  2933. a.to.tileLevel=Number(zz.tileLevel);
  2934. a.to.playerId=Number(zz.tileUserId);
  2935. a.to.cityId=Number(zz.tileCityId);
  2936. a.setStatus(unsafeWindow.Constant.MarchStatus.OUTBOUND);
  2937. a.setMarchTime(unsafeWindow.unixtime(),unsafeWindow.unixtime()+j,0);
  2938. Cities.byID[id].c.marches.outgoing[a.id]=a;
  2939. unsafeWindow.KTrack.event(["_trackEvent","March",i,unsafeWindow.player.level]);
  2940. t.divTranportStatus.innerHTML ="<font color=red size='3px'><b>Succeeded<b></font>";
  2941. t.TTbutTransport.disabled=false;
  2942. },
  2943. function(zz){
  2944. t.divTranportStatus.innerHTML ="<font color=red size='3px'><b>Error<b></font>";
  2945. t.TTbutTransport.disabled=false;
  2946. }, false);
  2947. }else{
  2948. t.divTranportStatus.innerHTML ="<font color=red size='3px'><b>Error<b></font>";
  2949. t.TTbutTransport.disabled=false;
  2950. }
  2951. },
  2952. calculateTime: function(id,b,g,e) {
  2953. var c=65535,a=Math.abs(Cities.byID[id].c.x-g),f=Math.abs(Cities.byID[id].c.y-e),d=Math.sqrt((a*a)+(f*f));
  2954. h=unsafeWindow.Unit.stats[b].speed*1;
  2955. if(h<c){c=h;}
  2956. return Math.ceil(d*6000/c)+30;
  2957. },
  2958. clickCitySourceSelect : function (city){
  2959. var t = my.TranspAuto;
  2960. t.sourceCity = city;
  2961. t.TTbutTransport.disabled=false;
  2962. t.estimerRes();
  2963. },
  2964. clickCityDestinationSelect : function (city){
  2965. var t = my.TranspAuto;
  2966. t.destinationCity = city;
  2967. t.destinationCityx.value=t.destinationCity.c.x;
  2968. t.destinationCityy.value=t.destinationCity.c.y;
  2969. t.TTbutTransport.disabled=false;
  2970. t.estimerRes();
  2971. },
  2972. }
  2973.  
  2974. my.testattack = {
  2975. cont : null,
  2976. state : null,
  2977. timer : null,
  2978. init : function (div){
  2979. var t = my.testattack;
  2980. if (Options.AttackAutoTest) {
  2981. t.timer=setTimeout(t.start,10000);
  2982. }
  2983. this.cont = document.createElement('div');
  2984. return t.cont;
  2985. },
  2986. getContent : function (){
  2987. var t = my.testattack;
  2988. return t.cont;
  2989. },
  2990.  
  2991. hide : function (){
  2992. var t = my.testattack;
  2993. },
  2994. show : function (){
  2995. var t = my.testattack;
  2996. if (t.state == null){
  2997. unsafeWindow.BOdeleteAttack=t.deleteAttack;
  2998. t.cont.innerHTML = '<DIV id=attaquetestContent style="height:630px; max-height:630px; overflow-y:auto"></div>';
  2999. t.state = 1;
  3000. }
  3001. var m = '<DIV class=ptstat>SENDING 1 TROOP ATTACK(S) - GENERAL LEVELING </div>';
  3002. if (Options.AttackAutoTest) {
  3003. m+= "<input type=button value='ATTACK = ON' id=BOAttackTestButton>";
  3004. } else {
  3005. m+= "<input type=button value='ATTACK = OFF' id=BOAttackTestButton>";
  3006. }
  3007. m+="<br><br>Time between attacks : <input type=text size=3 id=BOAttackInterval value='"+Options.AttackInterval+"'> secondes.<br>Target : X:<input type=text size=3 value='"+Options.AttackAutoTestX+"' id=TestX> Y:<input type=text size=3 value='"+Options.AttackAutoTestY+"' id=TestY><br>";
  3008. m+="Type of troop : <SELECT id='BOAttackUnit'>";
  3009. unsafeWindow.Barracks.allUnitIds.each(function(r){
  3010. if (unsafeWindow.arStrings.unitName["u"+r]) {
  3011. if (r==Options.AttackUnit) {
  3012. m+= "<option selected value='"+r+"'>"+unsafeWindow.arStrings.unitName["u"+r]+"</option>";
  3013. } else {
  3014. m+= "<option value='"+r+"'>"+unsafeWindow.arStrings.unitName["u"+r]+"</option>";
  3015. }
  3016. }
  3017. });
  3018. m+="</select>&nbspQuantity : <b><INPUT id='BoAttackNum' type=text size=4 value='"+ Options.TroopsNum +"'></b><br><br>Check cities you want to attack from :<br><br>";
  3019. for (var c=0; c<Cities.numCities; c++) {
  3020. cityId=Cities.cities[c].c.id;
  3021. m+="<input type=checkbox class="+c+" id='BOAttackCity"+c+"' "+ (Options.AttackCity[c]?'CHECKED ':'')+"> " + Cities.cities[c].c.name +"&nbsp;";
  3022. }
  3023. m+="<br><br><br><bR><b>ATTENTION :<br><br><br>THIS FEATURE ALLOWS YOU TO ATTACK A TARGET NOT STOP, UNTIL THE ENERGY OF ALL GENERALS HAS RUN OUT!<br><br>WORKING AUTO-ATTACK WILL INTERFERE WITH TYPING IN GOR CHAT, SO CHECK WHAT YOU HAVE TYPED!</b>";
  3024. document.getElementById('attaquetestContent').innerHTML = m;
  3025. document.getElementById("BOAttackTestButton").addEventListener('click', t.ToggleAutoAttack, false);
  3026. document.getElementById("BoAttackNum").addEventListener('change', function() { Options.TroopsNum=parseInt(document.getElementById("BoAttackNum").value); saveOptions(); }, false);
  3027. document.getElementById("TestX").addEventListener('change', function() { Options.AttackAutoTestX=parseInt(document.getElementById("TestX").value); saveOptions(); }, false);
  3028. document.getElementById("BOAttackUnit").addEventListener('change', function() { Options.AttackUnit=parseInt(document.getElementById("BOAttackUnit").value); saveOptions(); }, false);
  3029. document.getElementById("TestY").addEventListener('change', function() { Options.AttackAutoTestY=parseInt(document.getElementById("TestY").value); saveOptions(); }, false);
  3030. document.getElementById("BOAttackInterval").addEventListener('change', function() {
  3031. if (parseInt(document.getElementById("BOAttackInterval").value)<20)
  3032. document.getElementById("BOAttackInterval").value=20;
  3033. Options.AttackInterval=parseInt(document.getElementById("BOAttackInterval").value);
  3034. saveOptions();
  3035. }, false);
  3036. for (var c=0; c<Cities.numCities; c++) {
  3037. document.getElementById("BOAttackCity"+c).addEventListener('click', function(e) {
  3038. Options.AttackCity[e.target['className']] = document.getElementById("BOAttackCity"+e.target['className']).checked;
  3039. saveOptions();
  3040. }, false);
  3041. }
  3042. },
  3043. start:function() {
  3044. var t = my.testattack;
  3045. clearTimeout (t.timer);
  3046. var cooX = Options.AttackAutoTestX;
  3047. var cooY = Options.AttackAutoTestY;
  3048. var unit = Options.AttackUnit;
  3049. var tableau = [];
  3050. for (var c=0; c<Cities.numCities; c++) {
  3051. if (Options.AttackCity[c]) tableau.push(c);
  3052. }
  3053. var numcity=tableau[Math.floor(Math.random()*tableau.length)];
  3054. if (numcity===undefined)
  3055. return;
  3056. var f=Cities.cities[numcity].c;
  3057. var id=f.id;
  3058. var kk=[];
  3059. Cities.byID[id].c.generalsSorted().each(function(b){if(b.available() && b.energy()>0){ kk.push(b); }}); // id du premier chevalier ! a trouver
  3060. var selectedKnight=kk.length>0?kk[0].id:0;
  3061. if (Cities.byID[id].c.canMarch() && Cities.byID[id].c.generalsCount()!=0 && selectedKnight!=0) {
  3062. var d=unsafeWindow.Building.getMaxLevelForType(50,id);
  3063. var a=new unsafeWindow.March({marchId:Cities.byID[id].c.emptyMarchSlots()[0],toXCoord:cooX,toYCoord:cooY,fromCityId:id,marchType:unsafeWindow.Constant.MarchType.ATTACK,knightId:selectedKnight,fromHealLevel:d,apothecaryHealPercent:unsafeWindow.KB.Controllers.Apothecary.getHealPercent(d),gold:0,resource1:0,resource2:0,resource3:0,resource4:0});
  3064. var g={mid:a.id,xcoord:a.to.x,ycoord:a.to.y,cid:id,type:unsafeWindow.Constant.MarchType.ATTACK,kid:a.general.id,gold:a.gold,r1:a.resources[1],r2:a.resources[2],r3:a.resources[3],r4:a.resources[4],camp:0,et:t.calculateTime(id,7,cooX,cooY)};
  3065.  
  3066. var b=Cities.byID[id].c.generals[a.general.id];
  3067. a.units[unit].sent=Options.TroopsNum;
  3068. g["u"+unit]=1;
  3069. if(b.energy()>0){
  3070. if (Cities.byID[id].c.troops[unit].count()>=1) {
  3071. unsafeWindow.AjaxCall.gPostRequest("march.php",g,function(h){
  3072. var i="attack",j=Number(h.eta)-Number(h.initTS);
  3073. unsafeWindow.Chrome.ResourcesBar.update();
  3074. unsafeWindow.Object.keys(a.units).each(function(k){Cities.byID[id].c.troops[k].subtract(a.units[k].sent)});
  3075. if(b){b.status=10;b.subtractEnergy()}
  3076. a.id=Number(h.marchId);
  3077. a.to.tileId=Number(h.tileId);
  3078. a.to.tileType=Number(h.tileType);
  3079. a.to.tileLevel=Number(h.tileLevel);
  3080. a.to.playerId=Number(h.tileUserId);
  3081. a.to.cityId=Number(h.tileCityId);
  3082. a.setStatus(unsafeWindow.Constant.MarchStatus.OUTBOUND);
  3083. a.setMarchTime(unsafeWindow.unixtime(),unsafeWindow.unixtime()+j,0);
  3084. Cities.byID[id].c.marches.outgoing[a.id]=a;
  3085. unsafeWindow.KTrack.event(["_trackEvent","March",i,unsafeWindow.player.level]);
  3086. },
  3087. function(h){},
  3088. false);
  3089. }
  3090. }
  3091. }
  3092. t.timer=setTimeout(t.start,Options.AttackInterval*1000);
  3093. },
  3094. calculateTime: function(id,b,g,e) {
  3095. var c=65535,a=Math.abs(Cities.byID[id].c.x-g),f=Math.abs(Cities.byID[id].c.y-e),d=Math.sqrt((a*a)+(f*f));
  3096. h=unsafeWindow.Unit.stats[b].speed*1;
  3097. if(h<c){c=h;}
  3098. return Math.ceil(d*6000/c)+30;
  3099. },
  3100. ToggleAutoAttack: function() {
  3101. var t = my.testattack;
  3102. var obj=document.getElementById("BOAttackTestButton");
  3103. if (Options.AttackAutoTest== true) {
  3104. Options.AttackAutoTest = false;
  3105. if (obj) obj.value = "ATTACK = OFF";
  3106. clearTimeout (t.timer);
  3107. saveOptions();
  3108. } else {
  3109. Options.AttackAutoTest = true;
  3110. if (obj) obj.value = "ATTACK = ON";
  3111. clearTimeout (t.timer);
  3112. t.start(); ///
  3113. saveOptions();
  3114. }
  3115. },
  3116. }
  3117.  
  3118. my.KDO = {
  3119. cont : null,
  3120. state : null,
  3121. displayTimerKDO:null,
  3122. displayTimerAcceptKDO:null,
  3123. init : function (div){
  3124. var t = my.KDO;
  3125. this.cont = document.createElement('div');
  3126. return t.cont;
  3127. },
  3128.  
  3129. getContent : function (){
  3130. var t = my.KDO;
  3131. return t.cont;
  3132. },
  3133.  
  3134. hide : function (){
  3135. var t = my.KDO;
  3136. },
  3137. nbitem: function(id) {
  3138. var nb=0;
  3139. if (unsafeWindow.items[id].count>0){
  3140. nb=unsafeWindow.items[id].count;
  3141. }else{
  3142. nb=0;
  3143. }
  3144. return nb;
  3145. },
  3146. show : function (){
  3147. var t = my.KDO;
  3148. if (t.state == null){
  3149. m='<div id="presentModalWrapper1" class="presentWrapper"><div class=header style="height:280px"><h1>Pick a free gift to send to all your friends!</h1><ul id="presentList1" class="clearfix">\
  3150. <li class="unlocked"><div class="frame"><div class="item pic px70 items item_1005"></div></div><button class="button25" onclick="KB.Views.Gift.popupInvite(1005);"><span>SEND</span></button><button id="BOItem1005" class="button25" type="button"><span>USE</span></button><div class="itemowned">You have: <span class="modal_itemowned_923" id="BONbItem1005">'+ t.nbitem(1005) +'</span></div></li>\
  3151. <li class="unlocked"><div class="frame"><div class="item pic px70 items item_1015"></div></div><button class="button25" onclick="KB.Views.Gift.popupInvite(1015);"><span>SEND</span></button><button id="BOItem1015" class="button25" type="button"><span>USE</span></button><div class="itemowned">You have: <span class="modal_itemowned_923" id="BONbItem1015">'+ t.nbitem(1015) +'</span></div></li>\
  3152. <li class="unlocked"><div class="frame"><div class="item pic px70 items item_1025"></div></div><button class="button25" onclick="KB.Views.Gift.popupInvite(1025);"><span>SEND</span></button><button id="BOItem1025" class="button25" type="button"><span>USE</span></button><div class="itemowned">You have: <span class="modal_itemowned_923" id="BONbItem1025">'+ t.nbitem(1025) +'</span></div></li>\
  3153. <li class="unlocked"><div class="frame"><div class="item pic px70 items item_1035"></div></div><button class="button25" onclick="KB.Views.Gift.popupInvite(1035);"><span>SEND</span></button><button id="BOItem1035" class="button25" type="button"><span>USE</span></button><div class="itemowned">You have: <span class="modal_itemowned_923" id="BONbItem1035">'+ t.nbitem(1035) +'</span></div></li>\
  3154. <li class="unlocked"><div class="frame"><div class="item pic px70 items item_1045"></div></div><button class="button25" onclick="KB.Views.Gift.popupInvite(1045);"><span>SEND</span></button><button id="BOItem1045" class="button25" type="button"><span>USE</span></button><div class="itemowned">You have: <span class="modal_itemowned_923" id="BONbItem1045">'+ t.nbitem(1045) +'</span></div></li>\
  3155. </ul></div>\
  3156. <br><button onclick="Temple.Offering.askForOffering(); return false;" class="button25" type="button" id="askButton"><span>Send offerings</span></button><br>\
  3157. <br><br><button id="BOAcceptAllKDO" class="button25" type="button"><span>Accept all gifts</span></button><br><br><hr><b><center>'+translate('Please support the KoC BoTTols by clicking the ads on the KoC BoTTols website from time to time')+'!</center></b><br><bR><center>'+pubblicity+'</div>';
  3158. t.cont.innerHTML = m;
  3159.  
  3160. document.getElementById('BOAcceptAllKDO').addEventListener ('click', function(){
  3161. document.getElementById('BOAcceptAllKDO').disabled=true;
  3162. unsafeWindow.AjaxCall.gNetworkPostRequest("requests","getRequest.php",{typeRequest:1},function(m){
  3163. if (m.ok){
  3164. var v=unsafeWindow.Object.keys(m.data.requests);
  3165. unsafeWindow.KB.Views.Cohort.pending = m.data.requests;
  3166. for(var f=0;f<v.length;f++){
  3167. var d=m.data.requests[v[f]][1]; // item
  3168. var b=v[f]; //request_id
  3169. var c={request_id:b , type_request:1, item_id: d, sender_fbuid:m.data.requests[v[f]][0]};
  3170. unsafeWindow.AjaxCall.gNetworkPostRequest("requests","acceptRequest.php",c,function(e){
  3171. if (e.ok) {
  3172. unsafeWindow.items[d].add(1);
  3173. delete unsafeWindow.KB.Views.Gift.request[b];
  3174. }
  3175. },function(e) {}, true);
  3176. }
  3177. }
  3178.  
  3179. document.getElementById('BOAcceptAllKDO').disabled=false;
  3180. });
  3181. },false);
  3182.  
  3183. // Bouton utiliser Stones
  3184. document.getElementById("BOItem1035").addEventListener ('click', function(){
  3185. if (t.nbitem(1035)>0) {
  3186. var b={iid:1035,cid:unsafeWindow.currentCity.id};
  3187. unsafeWindow.AjaxCall.gPostRequest("resourceCrate.php",b,function(d){
  3188. if (d.ok) {
  3189. unsafeWindow.KB.Models.Resource.addToSeed(d.rtype,d.amt);
  3190. unsafeWindow.items[1035].subtract();
  3191. document.getElementById("BONbItem1035").innerHTML=t.nbitem(1035);
  3192. }
  3193. }, function(d) {});
  3194. }
  3195. },false);
  3196. // Bouton utiliser Iron
  3197. document.getElementById("BOItem1045").addEventListener ('click', function(){
  3198. if (t.nbitem(1045)>0) {
  3199. var b={iid:1045,cid:unsafeWindow.currentCity.id};
  3200. unsafeWindow.AjaxCall.gPostRequest("resourceCrate.php",b,function(d){
  3201. if (d.ok) {
  3202. unsafeWindow.KB.Models.Resource.addToSeed(d.rtype,d.amt);
  3203. unsafeWindow.items[1045].subtract();
  3204. document.getElementById("BONbItem1045").innerHTML=t.nbitem(1045);
  3205. }
  3206. }, function(d) {});
  3207. }
  3208. },false);
  3209. // Bouton utiliser Wood
  3210. document.getElementById("BOItem1025").addEventListener ('click', function(){
  3211. if (t.nbitem(1025)>0) {
  3212. var b={iid:1025,cid:unsafeWindow.currentCity.id};
  3213. unsafeWindow.AjaxCall.gPostRequest("resourceCrate.php",b,function(d){
  3214. if (d.ok) {
  3215. unsafeWindow.KB.Models.Resource.addToSeed(d.rtype,d.amt);
  3216. unsafeWindow.items[1025].subtract();
  3217. document.getElementById("BONbItem1025").innerHTML=t.nbitem(1025);
  3218. }
  3219. }, function(d) {});
  3220. }
  3221. },false);
  3222. // Bouton utiliser Food
  3223. document.getElementById("BOItem1015").addEventListener ('click', function(){
  3224. if (t.nbitem(1015)>0) {
  3225. var b={iid:1015,cid:unsafeWindow.currentCity.id};
  3226. unsafeWindow.AjaxCall.gPostRequest("resourceCrate.php",b,function(d){
  3227. if (d.ok) {
  3228. unsafeWindow.KB.Models.Resource.addToSeed(d.rtype,d.amt);
  3229. unsafeWindow.items[1015].subtract();
  3230. document.getElementById("BONbItem1015").innerHTML=t.nbitem(1015);
  3231. }
  3232. }, function(d) {});
  3233. }
  3234. },false);
  3235. // Bouton utiliser Silver
  3236. document.getElementById("BOItem1005").addEventListener ('click', function(){
  3237. if (t.nbitem(1005)>0) {
  3238. var b={iid:1005,cid:unsafeWindow.currentCity.id};
  3239. unsafeWindow.AjaxCall.gPostRequest("resourceCrate.php",b,function(d){
  3240. if (d.ok) {
  3241. unsafeWindow.KB.Models.Resource.addToSeed(d.rtype,d.amt);
  3242. unsafeWindow.items[1005].subtract();
  3243. document.getElementById("BONbItem1005").innerHTML=t.nbitem(1005);
  3244. }
  3245. }, function(d) {});
  3246. }
  3247. },false);
  3248. c={};
  3249. unsafeWindow.AjaxCall.gNetworkPostRequest("requests","getFriendsGift.php",c,function(e){
  3250. unsafeWindow.KB.Views.Gift.friends=e.data.friends?e.data.friends:{};
  3251. unsafeWindow.KB.Views.Gift.potentials=e.data.potentials?e.data.potentials:{};
  3252. unsafeWindow.KB.Views.Gift.cohorts=e.data.cohorts?e.data.cohorts:{};
  3253. unsafeWindow.KB.Views.Gift.lockGift=e.data.lockedItems?e.data.lockedItems:{};
  3254. unsafeWindow.KB.Views.Gift.sortLockGift();
  3255. unsafeWindow.KB.Views.Gift.unlockGift=e.data.newUnlockItems?e.data.newUnlockItems:{};
  3256. unsafeWindow.KB.Views.Gift.user=e.data.user?e.data.user:0;
  3257. var f={typeRequest:unsafeWindow.KB.Views.Gift.TYPE_REQUEST_GIFT};
  3258.  
  3259. });
  3260. t.state = 1;
  3261. }
  3262. document.getElementById("BONbItem1045").innerHTML=t.nbitem(1045);
  3263. document.getElementById("BONbItem1035").innerHTML=t.nbitem(1035);
  3264. document.getElementById("BONbItem1025").innerHTML=t.nbitem(1025);
  3265. document.getElementById("BONbItem1015").innerHTML=t.nbitem(1015);
  3266. document.getElementById("BONbItem1005").innerHTML=t.nbitem(1005);
  3267. t.displayTimer = setTimeout (t.show, parseInt(GlobalOptions.BOAutomateKDOsec*1000));
  3268. },
  3269. togOpt : function (checkboxId, optionName, callOnChange){
  3270. var t = my.Options;
  3271. var checkbox = document.getElementById(checkboxId);
  3272. if (Options[optionName])
  3273. checkbox.checked = true;
  3274. checkbox.addEventListener ('change', eventHandler, false);
  3275. function eventHandler (){
  3276. Options[optionName] = this.checked;
  3277. saveOptions();
  3278. if (callOnChange)
  3279. callOnChange (this.checked);
  3280. }
  3281. },
  3282. changeOpt : function (valueId, optionName, callOnChange){
  3283. var t = my.Options;
  3284. var e = document.getElementById(valueId);
  3285. e.value = Options[optionName];
  3286. e.addEventListener ('change', eventHandler, false);
  3287. function eventHandler (){
  3288. Options[optionName] = this.value;
  3289. saveOptions();
  3290. if (callOnChange)
  3291. callOnChange (this.value);
  3292. }
  3293. },
  3294. }
  3295. my.Crests = {
  3296. cont : null,
  3297. state : null,
  3298.  
  3299. init : function (div){
  3300. var t = my.Crests;
  3301. this.cont = document.createElement('div');
  3302. return t.cont;
  3303. },
  3304.  
  3305. getContent : function (){
  3306. var t = my.Crests;
  3307. return t.cont;
  3308. },
  3309.  
  3310. hide : function (){
  3311. var t = my.Crests;
  3312. },
  3313.  
  3314. show : function (){
  3315. var t = my.Crests;
  3316. var auguste,tiberus,caligula,claude,vespasien;
  3317. if (unsafeWindow.items[1101].count>0){auguste=unsafeWindow.items[1101].count}else{auguste=0};
  3318. if (unsafeWindow.items[1102].count>0){tiberus=unsafeWindow.items[1102].count}else{tiberus=0};
  3319. if (unsafeWindow.items[1103].count>0){caligula=unsafeWindow.items[1103].count}else{caligula=0};
  3320. if (unsafeWindow.items[1104].count>0){claude=unsafeWindow.items[1104].count}else{claude=0};
  3321. if (unsafeWindow.items[1105].count>0){vespasien=unsafeWindow.items[1105].count}else{vespasien=0};
  3322. if (unsafeWindow.items[1106].count>0){titus=unsafeWindow.items[1106].count}else{titus=0};
  3323. if (unsafeWindow.items[1107].count>0){Domitien=unsafeWindow.items[1107].count}else{Domitien=0};
  3324. if (unsafeWindow.items[1108].count>0){Trajan=unsafeWindow.items[1108].count}else{Trajan=0};
  3325. if (unsafeWindow.items[1109].count>0){Hadrien=unsafeWindow.items[1109].count}else{Hadrien=0};
  3326.  
  3327. if (Cities.cities[1]){ville2="#99EE99";}else{ville2="#EE9999";}
  3328. if (Cities.cities[2]){ville3="#99EE99";}else{ville3="#EE9999";}
  3329. if (Cities.cities[3]){ville4="#99EE99";}else{ville4="#EE9999";}
  3330. if (Cities.cities[4]){ville5="#99EE99";}else{ville5="#EE9999";}
  3331. if (Cities.cities[5]){ville6="#99EE99";}else{ville6="#EE9999";}
  3332. if (t.state == null){
  3333. var m = '<style>CAPTION.MYTABLE {background-color:eeffff;color:black; border-style:solid; border-width:1px; border-color:black; }\
  3334. TABLE.MYTABLE {font-family:arial;border-collapse:collapse;font-size:12pt;background-color:F5F5F5;width:100%;border-style:solid;border-color:black;border-width:1px; }\
  3335. TH.MYTABLE {font-size:12pt;color:black;text-align:center;border-style:solid;border-color:black;border-width:1px; }\
  3336. TR.MYTABLE { }\
  3337. TD.MYTABLE {font-size:12pt;background-color:FFFFE5;color:black;border-style:solid;border-width:1px;text-align:left;}</style>\
  3338. <DIV class=ptstat>TROOP INFO</div><TABLE align=center CLASS="MYTABLE" cellpadding=4 cellspacing=0><tr><td>Troops</td><td>Glory</td><td>Life</td><td>Attack</td><td>Defense</td><td>Speed</td><td>Range</td><td>Load</td><td>Upkeep</td></tr>';
  3339.  
  3340. var unitmight={u1:"1",u2:"1",u4:"3",u5:"6",u6:"3",u7:"3",u8:"6",u9:"3",u10:"6",u11:"5",u12:"12",u31:"50",u32:"50"};
  3341. var unitupkeeps={"1":2,"2":3,"3":5,"4":9,"5":35,"6":9,"7":9,"8":35,"9":10,"10":35,"11":50,"12":100,"31":65,"32":65};
  3342. unsafeWindow.Barracks.allUnitIds.each(function(nbu){
  3343. if (unsafeWindow.arStrings.unitName["u"+nbu]) {
  3344. m+="<tr><td>"+unsafeWindow.arStrings.unitName["u"+nbu]+"</td>";
  3345. m+="<td>"+unitmight["u"+nbu]+"</td>";
  3346. m+="<td>"+unsafeWindow.Unit.stats[nbu].life+"</td>";
  3347. m+="<td>"+unsafeWindow.Unit.stats[nbu].attack+"</td>";
  3348. m+="<td>"+unsafeWindow.Unit.stats[nbu].defense+"</td>";
  3349. m+="<td>"+unsafeWindow.Unit.stats[nbu].speed+"</td>";
  3350. m+="<td>"+unsafeWindow.Unit.stats[nbu].range+"</td>";
  3351. m+="<td>"+unsafeWindow.Unit.stats[nbu].load+"</td>";
  3352. m+="<td>"+unitupkeeps[nbu]+"</td>";
  3353. m+="</tr>";
  3354. }
  3355. });
  3356.  
  3357. m +='</table><br><TABLE CLASS="MYTABLE" CELLPADDING=3 CELLSPACING=0 align=center>\
  3358. <CAPTION CLASS="MYTABLE"><DIV class=ptstat>NEEDED MARKS TO GET NEW CITY</div></CAPTION>\
  3359. <THEAD >\
  3360. <TR CLASS="MYTABLE">\
  3361. <TH CLASS="MYTABLE">City;</TH>\
  3362. <TH CLASS="MYTABLE">Requirements</TH>\
  3363. </TR>\
  3364. </THEAD>\
  3365. <TBODY>\
  3366. <TR CLASS="MYTABLE">\
  3367. <TD CLASS="MYTABLE" style="background-color:'+ville2+';"><b><center>City 2</TD>\
  3368. <TD CLASS="MYTABLE" style="background-color:'+ville2+';">Level 7 (Your level : ' + unsafeWindow.player.level + ')\
  3369. <br>5 Cohorts</TD>\
  3370. </TR>\
  3371. <TR CLASS="MYTABLE"> \
  3372. <TD CLASS="MYTABLE" style="background-color:'+ville3+';"><b><center>City 3</TD>\
  3373. <TD CLASS="MYTABLE" style="background-color:'+ ( (auguste>=10 && tiberus>=5 && caligula>=2)?"#99EE99":ville3 ) +';">'+auguste+' / 10 '+unsafeWindow.arStrings.itemName["i1101"]+'<br>'+tiberus+' / 5 '+unsafeWindow.arStrings.itemName["i1102"]+'<br>'+caligula+' / 2 '+unsafeWindow.arStrings.itemName["i1103"]+'</TD>\
  3374. </TR>\
  3375. <TR CLASS="MYTABLE"> \
  3376. <TD CLASS="MYTABLE" style="background-color:'+ville4+';"><b><center>City 4</TD>\
  3377. <TD CLASS="MYTABLE" style="background-color:'+ ( (auguste>=20 && tiberus>=15 && caligula>=9)?"#99EE99":ville4 ) +';">'+auguste+' / 20 '+unsafeWindow.arStrings.itemName["i1101"]+'\
  3378. <br>'+tiberus+' / 15 '+unsafeWindow.arStrings.itemName["i1102"]+'\
  3379. <br>'+caligula+' / 9 '+unsafeWindow.arStrings.itemName["i1103"]+'\
  3380. <br>'+claude+' / 4 '+unsafeWindow.arStrings.itemName["i1104"]+'\
  3381. <br>'+vespasien+' / 2 '+unsafeWindow.arStrings.itemName["i1105"]+'\
  3382. </TD>\
  3383. </TR>\
  3384. </TR>\
  3385. <TR CLASS="MYTABLE"> \
  3386. <TD CLASS="MYTABLE" style="background-color:'+ville5+';"><b><center>City 5</TD>\
  3387. <TD CLASS="MYTABLE" style="background-color:'+ ( (caligula>=20 && claude>=15 && vespasien>=9 && titus>=4 && Domitien>=2)?"#99EE99":ville5 ) +';">'+caligula+' / 20 '+unsafeWindow.arStrings.itemName["i1103"]+'\
  3388. <br>'+claude+' / 15 '+unsafeWindow.arStrings.itemName["i1104"]+'\
  3389. <br>'+vespasien+' / 9 '+unsafeWindow.arStrings.itemName["i1105"]+'\
  3390. <br>'+titus+' / 4 '+unsafeWindow.arStrings.itemName["i1106"]+'\
  3391. <br>'+Domitien+' / 2 '+unsafeWindow.arStrings.itemName["i1107"]+'\
  3392. </TD>\
  3393. </TR>\
  3394. </TR>\
  3395. </TR>\
  3396. <TR CLASS="MYTABLE"> \
  3397. <TD CLASS="MYTABLE" style="background-color:'+ville6+';"><b><center>City 6</TD>\
  3398. <TD CLASS="MYTABLE" style="background-color:'+ ( (caligula>=20 && claude>=15 && vespasien>=9 && titus>=4 && Domitien>=2)?"#99EE99":ville6 ) +';">'+caligula+' / 20 '+unsafeWindow.arStrings.itemName["i1103"]+'\
  3399. <br>'+claude+' / 15 '+unsafeWindow.arStrings.itemName["i1104"]+'\
  3400. <br>'+vespasien+' / 9 '+unsafeWindow.arStrings.itemName["i1105"]+'\
  3401. <br>'+titus+' / 4 '+unsafeWindow.arStrings.itemName["i1106"]+'\
  3402. <br>'+Domitien+' / 2 '+unsafeWindow.arStrings.itemName["i1107"]+'\
  3403. </TD>\
  3404. </TR>\
  3405. </TBODY>\
  3406. </TABLE>';
  3407.  
  3408. t.cont.innerHTML = m;
  3409. t.state = 1;
  3410. }
  3411. },
  3412.  
  3413. }
  3414.  
  3415. /************************ Gold Collector ************************/
  3416. var CollectGold = {
  3417. timer : null,
  3418. lastCollect : {},
  3419. init : function (){
  3420. var t = CollectGold;
  3421. for (var c=0; c<Cities.numCities; c++)
  3422. t.lastCollect['c'+ Cities.cities[c].c.id] = 0;
  3423. if (Options.pbGoldEnable)
  3424. t.setEnable (true);
  3425. },
  3426. setEnable : function (tf){
  3427. var t = CollectGold;
  3428. clearTimeout (t.timer);
  3429. if (tf)
  3430. t.tick();
  3431. },
  3432.  
  3433. colCityName : null,
  3434. colHappy : 0,
  3435. tick : function (){
  3436. var t = CollectGold;
  3437. for (var c=0; c<Cities.numCities; c++){
  3438. var city = Cities.cities[c];
  3439. var since = unixTime() - t.lastCollect['c'+city.c.id];
  3440. if (since>15*60 && city.c.population.happiness()>=Options.pbGoldHappy){
  3441. t.lastCollect['c'+city.c.id] = unixTime();
  3442. t.colCityName = city.c.name;
  3443. t.ajaxCollectGold (city.c, t.e_ajaxDone);
  3444. break;
  3445. }
  3446. }
  3447. t.timer = setTimeout (t.tick, 60000);
  3448. },
  3449.  
  3450. e_ajaxDone : function (rslt){
  3451. var t = CollectGold;
  3452. },
  3453. ajaxCollectGold : function (city, notify){
  3454. var c={};
  3455. c.cid=city.id;
  3456. c.eventid=1;
  3457. unsafeWindow.AjaxCall.gPostRequest("coliseumEvent.php",c,
  3458. function(rslt){
  3459. if (notify)
  3460. notify (rslt);
  3461. }, function (rslt) {
  3462. if (notify)
  3463. notify (rslt);
  3464. }
  3465. );
  3466. },
  3467. }
  3468.  
  3469. /************************ Collecte de ressources en auto ************************/
  3470. var CollectRessource = {
  3471. timer : null,
  3472. lastCollect : {},
  3473. init : function (){
  3474. var t = CollectRessource;
  3475. for (var c=0; c<Cities.numCities; c++)
  3476. t.lastCollect['c'+ Cities.cities[c].c.id] = 0;
  3477. if (Options.pbRessEnable)
  3478. t.setEnable (true);
  3479. },
  3480. setEnable : function (tf){
  3481. var t = CollectRessource;
  3482. clearTimeout (t.timer);
  3483. if (tf)
  3484. t.tick();
  3485. },
  3486.  
  3487. colCityName : null,
  3488. colHappy : 0,
  3489. tick : function (){
  3490. var t = CollectRessource;
  3491. for (var c=0; c<Cities.numCities; c++){
  3492. var city = Cities.cities[c];
  3493. var since = unixTime() - t.lastCollect['c'+city.c.id];
  3494. if (since>Options.pbRessTime*60 && document.getElementById("btn_collect_all").style.display!='none'){ //AutoCollect
  3495. t.lastCollect['c'+city.c.id] = unixTime();
  3496. t.colCityName = city.c.name;
  3497. t.ajaxCollectRessource (city.c, t.e_ajaxDone);
  3498. break;
  3499. }
  3500. }
  3501. t.timer = setTimeout (t.tick, 60000);
  3502. },
  3503.  
  3504. e_ajaxDone : function (rslt){
  3505. var t = CollectRessource;
  3506. },
  3507. ajaxCollectRessource : function (city, notify){
  3508. var c={};
  3509. c.cid=city.id;
  3510. unsafeWindow.AjaxCall.gPostRequest("collectResource.php",c,
  3511. function(rslt){
  3512. if (notify)
  3513. notify (rslt);
  3514. }, function (rslt) {
  3515. if (notify)
  3516. notify (rslt);
  3517. }
  3518. );
  3519. },
  3520. }
  3521.  
  3522. /************************ Refresh Every X minutes ************************/
  3523. var RefreshEvery = {
  3524. timer : null,
  3525. PaintTimer : null,
  3526. NextRefresh : 0,
  3527. box : null,
  3528. target : null,
  3529. init : function (){
  3530. var t = RefreshEvery;
  3531. t.creatediv();
  3532. if (Options.pbEveryMins < 1)
  3533. Options.pbEveryMins = 1;
  3534. RefreshEvery.setEnable (Options.pbEveryEnable);
  3535. },
  3536. creatediv : function(){
  3537. var t = RefreshEvery;
  3538. t.target = document.getElementById('comm_tabs');
  3539. if(t.target == null){
  3540. setTimeout(t.creatediv, 2000);
  3541. return;
  3542. }
  3543. t.box = document.createElement('div');
  3544. t.box.style.top = "-30px";
  3545. t.box.style.position="absolute";
  3546. t.target.appendChild(t.box);
  3547. },
  3548. setEnable : function (tf){
  3549. var t = RefreshEvery;
  3550. clearTimeout (t.timer);
  3551. if (tf) {
  3552. //t.timer = setTimeout (t.doit, Options.pbEveryMins*60000);
  3553. t.NextRefresh = unixTime() + (Options.pbEveryMins*60);
  3554. t.timer = setTimeout (t.Paint, 5000);
  3555. } else {
  3556. //t.PaintTimer = null;
  3557. t.timer = null;
  3558. t.NextRefresh = 0;
  3559. t.box.innerHTML = '';
  3560. }
  3561. },
  3562. doit : function (){
  3563. reloadKOC();
  3564. },
  3565. setTimer : function (){
  3566. var t = RefreshEvery;
  3567. clearTimeout (t.timer);
  3568. if (Options.pbEveryMins < 1) Options.pbEveryMins = 1;
  3569. RefreshEvery.setEnable (Options.pbEveryEnable);
  3570. },
  3571. Paint : function(){
  3572. var t = RefreshEvery;
  3573. if(t.timer == null) return;
  3574. var now = unixTime();
  3575. var text = '';
  3576. var Left = parseInt(t.NextRefresh - now);
  3577. if ( Left < 0){
  3578. Left = 0;
  3579. t.doit();
  3580. }
  3581. if ( Left < 60) text += '<BR>&nbsp;&nbsp;&nbsp;&nbsp;<span id=BOTaref><FONT color=RED><span id=BOTaref>Refreshing</span> in </font><FONT color=RED><B><span id=BOTaTim>'+ timestr(Left) +'</span></b></font></div>';
  3582. else text += '<BR>&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=RED><span id=BOTaref>Refreshing</span> in <B><span id=BOTaTim>'+ timestr(Left) +'</span></b></font></div>';
  3583. t.box.innerHTML = text;
  3584. document.getElementById('BOTaref').addEventListener ('click', t.doit, false);
  3585. document.getElementById('BOTaTim').addEventListener ('click', function() { t.setEnable(true); }, false);
  3586. t.timer = setTimeout (t.Paint, 5000);
  3587. },
  3588. }
  3589. function reloadKOC (){
  3590. var serverId = getServerId();
  3591. if(serverId == '??') window.location.reload(true);
  3592. var goto = window.location.protocol+'//apps.facebook.com/gloryofrome/?s='+serverId;
  3593. var t = '<FORM target="_top" action="'+ goto +'" method=post><INPUT id=xxpbButReload type=submit value=RELOAD><INPUT type=hidden name=s value="'+ serverId +'"</form>';
  3594. var e = document.createElement ('div');
  3595. e.innerHTML = t;
  3596. document.body.appendChild (e);
  3597. setTimeout (function (){ById('xxpbButReload').click();}, 0);
  3598. }
  3599.  
  3600. /*********************************** kocbottols.tiestoale.com Tab ***********************************/
  3601. my.perso = {
  3602. cont : null,
  3603. timer : null,
  3604.  
  3605. init : function (){
  3606. var t = my.perso;
  3607. t.cont = document.createElement('div');
  3608. return t.cont;
  3609. },
  3610.  
  3611. getContent : function (){
  3612. var t = my.perso;
  3613. return t.cont;
  3614. },
  3615.  
  3616. show : function (){
  3617. var t = my.perso;
  3618. try {
  3619.  
  3620. t.cont.innerHTML = '<CENTER><iframe src="http://www.kocbottols.tiestoale.com" width="750" height="690" id="BOFrame" border=0></iframe><BR></center>';
  3621. } catch (e) {
  3622. t.cont.innerHTML = '<PRE>'+ e.name +' : '+ e.message +'</pre>';
  3623. }
  3624. },
  3625. hide : function (){
  3626. },
  3627. }
  3628.  
  3629. /*********************************** Options Tab ***********************************/
  3630.  
  3631. my.Options = {
  3632. cont : null,
  3633. state : null,
  3634. pop:null,
  3635. fixAvailable : {},
  3636.  
  3637. init : function (){
  3638. var t = my.Options;
  3639. t.cont = document.createElement('div');
  3640. t.creatediv();
  3641. return t.cont;
  3642. },
  3643. creatediv : function(){
  3644. var t = my.Options;
  3645. var chat = document.getElementById('mod_comm_input').parentNode;
  3646. if(chat == null){
  3647. setTimeout(t.creatediv, 2000);
  3648. return;
  3649. }
  3650. document.getElementById('mod_comm_input').style.width="227px";
  3651. document.getElementById('mod_comm_input').style.right="45px";
  3652. document.getElementById('mod_comm_input').style.position="absolute";
  3653. var ab = document.createElement('a');
  3654. ab.className="button25";
  3655. ab.style.cssFloat="left";
  3656. ab.style.left="0";
  3657. chat.appendChild(ab);
  3658. ab.innerHTML="<span>Smileys</span>";
  3659. ab.addEventListener ('click', function() { t.EmoHelp(); },false);
  3660. },
  3661.  
  3662. getContent : function (){
  3663. var t = my.Options;
  3664. return t.cont;
  3665. },
  3666.  
  3667. togOpt : function (checkboxId, optionName, callEnable, callIsAvailable){
  3668. var t = my.Options;
  3669. var checkbox = document.getElementById(checkboxId);
  3670. if (callIsAvailable && callIsAvailable()==false){
  3671. checkbox.disabled = true;
  3672. return;
  3673. }
  3674. if (Options[optionName])
  3675. checkbox.checked = true;
  3676. checkbox.addEventListener ('change', new eventToggle(checkboxId, optionName, callEnable).handler, false);
  3677. function eventToggle (checkboxId, optionName, callOnChange){
  3678. this.handler = handler;
  3679. var optName = optionName;
  3680. var callback = callOnChange;
  3681. function handler(event){
  3682. Options[optionName] = this.checked;
  3683. saveOptions();
  3684. if (callback != null)
  3685. callback (this.checked);
  3686. }
  3687. }
  3688. },
  3689.  
  3690.  
  3691. show : function (){
  3692. var t = my.Options;
  3693. try {
  3694. m = '<DIV style="height:670px; max-height:670px; overflow-y:auto"><TABLE class=ptTab>\
  3695. <TR><TD colspan=2><DIV class=ptstat>'+translate('Configuration of the')+' '+ScriptName+'</div></td></tr>';
  3696. m+='<TR><TD>&nbsp;</td><TD>'+translate('Language')+': '+ htmlSelector({1:'EN', 2:'IT'},Options.Langue,'id=BOLangue') +'</td></tr>\
  3697. <TR><TD><INPUT id=ptAllowWinMove type=checkbox /></td><TD>'+translate('Allow the toolbox window to be moved freely')+'</td></tr>\
  3698. <TR><TD><INPUT id=pbEveryEnable type=checkbox /></td><TD>'+translate('Refresh GoR every')+' <INPUT id=pbeverymins type=text size=2 maxlength=3 \> '+translate('minutes')+'</td>\
  3699. <TR><TD><INPUT id=pbGoldEnable type=checkbox /></td><TD>'+translate('Organize a Tax event (if happiness')+' >= <INPUT id=pbgoldLimit type=text size=2 maxlength=3 \>%)</td></tr>\
  3700. <TR><TD><INPUT id=pbRessEnable type=checkbox /></td><TD>'+translate('Auto-collect resources every')+' <INPUT id=pbLimitRess type=text size=2 maxlength=3 \> '+translate('minutes')+'</td></tr>\
  3701. <TR><TD>&nbsp;</td><td>Show upkeep in red text & send chat alert when only <INPUT id=optFoodHours type=text size=3 value="'+ Options.foodWarnHours +'"> hours of food are left <br>(for chat alert, also check box in chat configuration section !)</td></tr>\
  3702. <TR><TD><INPUT id=ptAllowFB '+ (GlobalOptions.autoPublishGamePopups?'CHECKED ':'') +' type=checkbox /></td><TD>'+translate('Allow to publish your helpings automatically to Facebook')+' '+ htmlSelector({0:'----', 80:'Everyone', 50:'Friends of friends', 40:'Friends only', 10:'Me only'},GlobalOptions.autoPublishPrivacySetting,'id=selectprivacymode') +'</td></tr>\
  3703. <TR><TD colspan=2><hr><b><br><br><center>'+translate('Please support the KoC BoTTols by clicking the ads on the KoC BoTTols website from time to time')+'! </center></b><br><bR><center>'+pubblicity+'</center><hr><DIV class=ptstat>'+translate('Configuration of chat')+'</div></td></tr>\
  3704. <TR><TD><INPUT id=pbChatREnable type=checkbox /></td><TD>'+translate('Move the chat window to the right of the game')+'</td></tr>\
  3705. <TR><TD><INPUT id=ptEnableFoodWarnTchat type=checkbox /></td><TD>'+translate('Allow to publish an alert in chat when your food level is low')+'</td></tr>\
  3706. <TR><TD><INPUT id=HelpReq type=checkbox /></td><TD>'+translate('Auto-click help requests, such as building help')+'</td></tr>\
  3707. <TR><TD><INPUT id=DelReq type=checkbox /></td><TD>'+translate('Hide all help requests in chat')+'</td></tr>\
  3708. <TR><TD><INPUT id=DelReg type=checkbox /></td><TD>'+translate('Hide the rules of the chat')+'</td></tr>\
  3709. <TR><TD><INPUT id=BOSmiley type=checkbox /></td><TD>'+translate('Show smileys')+' <INPUT id=EmoHelp type=submit value="'+translate('Open')+'"></td></tr>\
  3710. <TR><TD><INPUT id=BOChuchoEnable type=checkbox '+ (Options.Chuchoenabled?'CHECKED ':'') +'/></td><TD>'+translate('Warning sound when receiving a whisper')+'</td></tr>\
  3711. <TR><TD>&nbsp;</td><TD>'+translate('Sound file (URL MP3)')+' : <INPUT id=BOurlChucho type=text size=55 maxlength=220 value="'+ Options.urlChucho +'" \></td></tr>\
  3712. <TR><TD><INPUT id=BOAttackEnable type=checkbox '+ (Options.Attackenabled?'CHECKED ':'') +'/></td><TD>'+translate('Enable audio in case of ATTACK (Alliance)')+'</td></tr>\
  3713. <TR><TD>&nbsp;</td><TD>'+translate('Sound file (URL MP3)')+' : <INPUT id=BOurlAttack type=text size=55 maxlength=220 value="'+ Options.urlAttack +'" \></td></tr>\
  3714. <TR><TD colspan=2><DIV class=ptstat>'+translate('Configuration of the Tower alert')+'</div></b></td></tr>\
  3715. <TR><TD><INPUT id=pcalertEnable type=checkbox '+ (Options.alertConfig.aChat?'CHECKED ':'') +'/></td><TD>'+translate('Allow to post attack alerts in chat')+'</td></tr>\
  3716. <TR><TD align=right> &nbsp; </td><TD>'+translate('Message')+' : <INPUT id=pcalertPrefix type=text size=55 maxlength=120 value="'+ Options.alertConfig.aPrefix +'" \></td></tr>\
  3717. <TR><TD><INPUT id=boSoundEnable type=checkbox '+ (Options.alertSound.enabled?'CHECKED ':'') +'/></td><TD>'+translate('Allow to sound an alarm when under attack (handy when you are away from keyboard)')+'</td></tr>\
  3718. <TR><TD></td><TD><DIV id=boLoadingSwf>'+translate('Loading the SWF player')+'</div><DIV style="display:none" id=boSoundOpts><TABLE cellpadding=0 cellspacing=0>\
  3719. <TR><TD align=right>'+translate('Sound file (URL MP3)')+' : &nbsp; </td><TD><INPUT id=bosoundFile type=text size=55 maxlength=160 value="'+ Options.alertSound.soundUrl +'" \>\
  3720. &nbsp; </td><TD><INPUT id=boSoundLoad type=submit value="'+translate('LOAD')+'"><INPUT id=boSoundDefault type=submit value="'+translate('DEFAULT')+'"></td></tr>\
  3721. <TR><TD align=right>Volume : &nbsp; </td><TD><TABLE cellpadding=0 cellspacing=0 class=pbTab><TR valign=middle><TD><SPAN id=boVolSlider></span></td><TD width=15></td><TD align=right id=boVolOut>0</td></td></table></td><TD align=center><SPAN id=boLoadStat>xx</span></td></tr>\
  3722. <TR><TD align=right><INPUT id=boSoundRepeat type=checkbox '+ (Options.alertSound.repeat?'CHECKED ':'') +'/></td><TD>'+translate('Repeat every')+' <INPUT id=boSoundEvery type=text size=2 maxlength=5 value="'+ Options.alertSound.repeatDelay +'"> '+translate('minutes')+'</td></tr>\
  3723. <TR><TD></td><TD>'+translate('Length of sounding alarm')+' <INPUT id=boSoundLength type=text size=3 maxlength=5 value="'+ Options.alertSound.playLength +'"> '+translate('seconds')+'</td></tr>\
  3724. <TR><TD></td><TD><INPUT type=submit value="'+translate('Tester')+'" id=boPlayNow> &nbsp; <INPUT id=boSoundStop type=submit value="'+translate('Stop Sound Alert')+'"></td></tr></table></div></td></tr>\
  3725. </table></table><BR><BR><HR><center><b>'+ miseajour +'</b></center><br><br><hr><b><br><br><center>'+translate('Please support the KoC BoTTols by clicking the ads on the KoC BoTTols website from time to time')+'!</center></b><br><bR><center>'+pubblicity+'</div>'
  3726. t.cont.innerHTML = m;
  3727. t.mss = new CmatSimpleSound("http://beworld.perso.sfr.fr/bao/alarmplayer.swf", null, {height:0, width:0}, t.e_swfLoaded, 'debug=n');
  3728. t.mss.swfDebug = function (m){ logit ('SWF: '+ m)};
  3729. t.mss.swfPlayComplete = t.e_soundFinished;
  3730. t.mss.swfLoadComplete = t.e_soundFileLoaded;
  3731. unsafeWindow.matSimpleSound01 = t.mss;
  3732. t.volSlider = new SliderBar (ById('boVolSlider'), 200, 21, 0);
  3733. t.volSlider.setChangeListener(t.e_volChanged);
  3734. ById("BOLangue").addEventListener('change', function(){
  3735. Options.Langue = ById('BOLangue').value;
  3736. reloadKOC();
  3737. saveOptions();
  3738. } , false);
  3739. ById('BOChuchoEnable').addEventListener ('click', function (){
  3740. Options.Chuchoenabled=ById("BOChuchoEnable").checked;
  3741. saveOptions();
  3742. }, false);
  3743. ById('BOurlChucho').addEventListener ('change', function (){
  3744. if (ById('BOurlChucho').value=="") ById('BOurlChucho').value="http://www.universal-soundbank.com/mp3/sounds/735.mp3";
  3745. Options.urlChucho = ById('BOurlChucho').value;
  3746. saveOptions();
  3747. }, false);
  3748. ById('BOAttackEnable').addEventListener ('click', function (){
  3749. Options.Attackenabled=ById("BOAttackEnable").checked;
  3750. saveOptions();
  3751. }, false);
  3752. ById('BOurlAttack').addEventListener ('change', function (){
  3753. if (ById('BOurlAttack').value=="") ById('BOurlAttack').value="http://www.universal-soundbank.com/mp3/sounds/217.mp3";
  3754. Options.urlAttack = ById('BOurlAttack').value;
  3755. saveOptions();
  3756. }, false);
  3757. ById('bosoundFile').addEventListener ('change', function (){
  3758. Options.urlChucho = ById('bosoundFile').value;
  3759. saveOptions();
  3760. }, false);
  3761. ById('boPlayNow').addEventListener ('click', function (){t.playSound(false)}, false);
  3762. ById('boSoundStop').addEventListener ('click', t.stopSoundAlerts, false);
  3763. ById('boSoundRepeat').addEventListener ('change', function (e){Options.alertSound.repeat = e.target.checked;saveOptions();}, false);
  3764. ById('boSoundEvery').addEventListener ('change', function (e){Options.alertSound.repeatDelay = e.target.value;saveOptions();}, false);
  3765. ById('boSoundLength').addEventListener ('change', function (e){Options.alertSound.playLength = e.target.value;saveOptions();}, false);
  3766. ById('boSoundEnable').addEventListener ('change', function (e){Options.alertSound.enabled = e.target.checked;saveOptions();}, false);
  3767. ById('boSoundStop').disabled = true;
  3768. ById('bosoundFile').addEventListener ('change', function (){
  3769. Options.alertSound.soundUrl = ById('bosoundFile').value;
  3770. t.loadUrl (Options.alertSound.soundUrl);
  3771. saveOptions();
  3772. }, false);
  3773. ById('boSoundDefault').addEventListener ('click', function (){
  3774. ById('bosoundFile').value = DEFAULT_ALERT_SOUND_URL;
  3775. Options.alertSound.soundUrl = DEFAULT_ALERT_SOUND_URL;
  3776. t.loadUrl (DEFAULT_ALERT_SOUND_URL);
  3777. saveOptions();
  3778. }, false);
  3779. t.togOpt ('ptAllowWinMove', 'ptWinDrag', mainPop.setEnableDrag);
  3780. t.togOpt ('ptEnableFoodWarnTchat', 'enableFoodWarnTchat', FoodAlerts.init);
  3781. t.togOpt ('pbGoldEnable', 'pbGoldEnable', CollectGold.setEnable);
  3782. t.togOpt ('pbRessEnable', 'pbRessEnable', CollectRessource.setEnable);
  3783. t.changeOpt ('pbeverymins', 'pbEveryMins' , RefreshEvery.setTimer);
  3784. t.togOpt ('pbEveryEnable', 'pbEveryEnable', RefreshEvery.setEnable);
  3785. ById('EmoHelp').addEventListener('click', function(){t.EmoHelp();} , false);
  3786. t.togOpt ('pbChatREnable', 'pbChatOnRight', WideScreen.setChatOnRight);
  3787. t.togOpt ('HelpReq', 'HelpRequest');
  3788. t.togOpt ('DelReq', 'DeleteRequest');
  3789. t.togOpt ('DelReg', 'DeleteRules');
  3790. t.togOpt ('BOSmiley', 'Smiley');
  3791. t.changeOpt ('pbgoldLimit', 'pbGoldHappy');
  3792. t.changeOpt ('pbLimitRess', 'pbRessTime');
  3793. document.getElementById('ptAllowFB').addEventListener ('change', function(){
  3794. GlobalOptions.autoPublishGamePopups = document.getElementById('ptAllowFB').checked;
  3795. GM_setValue ('Options_??', JSON2.stringify(GlobalOptions));
  3796. },false);
  3797. document.getElementById('selectprivacymode').addEventListener ('change', function(){
  3798. GlobalOptions.autoPublishPrivacySetting = document.getElementById('selectprivacymode').value;
  3799. GM_setValue ('Options_??', JSON2.stringify(GlobalOptions));
  3800. },false);
  3801. document.getElementById('optFoodHours').addEventListener ('change', function () {
  3802. var x = document.getElementById('optFoodHours').value;
  3803. if (isNaN(x) || x<0.01 || x>99999){
  3804. document.getElementById('optFoodHours').value = Options.foodWarnHours;
  3805. return;
  3806. }
  3807. Options.foodWarnHours = x;
  3808. saveOptions();
  3809. }, false);
  3810. document.getElementById('pcalertEnable').addEventListener ('change', t.e_alertOptChanged, false);
  3811. document.getElementById('pcalertPrefix').addEventListener ('change', t.e_alertOptChanged, false);
  3812. } catch (e) {
  3813. t.cont.innerHTML = '<PRE>'+ e.name +' : '+ e.message +'</pre>';
  3814. }
  3815. },
  3816. EmoClick: function(what) {
  3817. document.getElementById ("mod_comm_input").value += " " + what + " ";
  3818. },
  3819. EmoHelp : function (){
  3820. var t = my.Options;
  3821. unsafeWindow.BOEmoClick = t.EmoClick;
  3822. var helpText = '<DIV style="max-height:430px; height:430px; overflow-y:auto">';
  3823. helpText += '<TABLE width=98% cellspacing=0 cellpadding=2 border=0 bordercolor=black class=ptTab><tr>';
  3824. var row=0;
  3825. for (k in Smileys) {
  3826. helpText += '<TR><TD><img class=emoicon src=\"'+Smileys[k]+'\" onclick="BOEmoClick(\''+k+'\')"></td><TD><font size=1>'+k+'</td></tr>';
  3827. }
  3828. helpText += '</table></div>';
  3829. if (t.pop == null){
  3830. t.pop = new CPopup ('EmoHelp', 0, 0, 115, 455, true);
  3831. t.pop.getTopDiv().innerHTML = '<CENTER><B><i>Smileys</b></center>';
  3832. }
  3833. t.pop.getMainDiv().innerHTML = helpText;
  3834. t.pop.show (true);
  3835. var inputtext=ById('mod_comm_input');
  3836. ById("EmoHelp_outer").style.top = (getOffset(inputtext).top+30) +'px';
  3837. ById("EmoHelp_outer").style.left = (getOffset(inputtext).left+230) +'px';
  3838. },
  3839. stopSoundAlerts : function (){
  3840. var t = my.Options;
  3841. obj = ById('boSoundStop');
  3842. t.mss.stop (1);
  3843. clearTimeout (t.soundStopTimer);
  3844. clearTimeout (t.soundRepeatTimer);
  3845. ById('boSoundStop').disabled = true;
  3846. Options.alertSound.alarmActive = false;
  3847. Options.alertSound.expireTime = 0;
  3848. },
  3849. e_soundFileLoaded : function (chan, isError){
  3850. if (chan != 1)
  3851. return;
  3852. if (isError)
  3853. ById('boLoadStat').innerHTML = translate('Error')+'!';
  3854. else
  3855. ById('boLoadStat').innerHTML = translate('Loaded');
  3856. },
  3857. playSound : function (doRepeats){
  3858. var t = my.Options;
  3859. ById('boSoundStop').disabled = false;
  3860. clearTimeout (t.soundStopTimer);
  3861. clearTimeout (t.soundRepeatTimer);
  3862. t.mss.play(1, 0);
  3863. t.soundStopTimer = setTimeout (function(){t.mss.stop(1); t.e_soundFinished(1)}, Options.alertSound.playLength*1000);
  3864. if (doRepeats && Options.alertSound.repeat)
  3865. t.soundRepeatTimer = setTimeout (function (){t.playSound(true)}, Options.alertSound.repeatDelay*60000);
  3866. else
  3867. Options.alertSound.alarmActive = false;
  3868. },
  3869. e_soundFinished : function (chan){
  3870. var t = my.Options;
  3871. if (chan != 1)
  3872. return;
  3873. if (!Options.alertSound.alarmActive){
  3874. ById('boSoundStop').disabled = true;
  3875. }
  3876. },
  3877. soundTheAlert : function (){
  3878. var t = my.Options;
  3879. Options.alertSound.alarmActive = true;
  3880. t.playSound(true);
  3881. },
  3882. loadUrl : function (url){
  3883. var t = my.Options;
  3884. t.mss.load (1, url, true);
  3885. ById('boLoadStat').innerHTML = 'Loading';
  3886. },
  3887. e_swfLoaded : function (){
  3888. var t = my.Options;
  3889. ById('boLoadingSwf').style.display = 'none';
  3890. ById('boSoundOpts').style.display = 'inline';
  3891. t.volSlider.setValue (Options.alertSound.volume/100);
  3892. t.loadUrl (Options.alertSound.soundUrl);
  3893. setTimeout (function (){t.mss.setVolume (1, Options.alertSound.volume);}, 500);
  3894. if (Options.alertSound.alarmActive && Options.alertSound.expireTime>unixTime()) {
  3895. t.soundTheAlert();
  3896. }
  3897. },
  3898. e_volChanged : function (val){
  3899. var t = my.Options;
  3900. ById('boVolOut').innerHTML = parseInt(val*100);
  3901. Options.alertSound.volume = parseInt(val*100);
  3902. t.mss.setVolume (1, Options.alertSound.volume);
  3903. },
  3904. hide : function (){
  3905. },
  3906.  
  3907. togOpt : function (checkboxId, optionName, callOnChange){
  3908. var t = my.Options;
  3909. var checkbox = document.getElementById(checkboxId);
  3910. if (Options[optionName])
  3911. checkbox.checked = true;
  3912. checkbox.addEventListener ('change', eventHandler, false);
  3913. function eventHandler (){
  3914. Options[optionName] = this.checked;
  3915. saveOptions();
  3916. if (callOnChange)
  3917. callOnChange (this.checked);
  3918. }
  3919. },
  3920. changeOpt : function (valueId, optionName, callOnChange){
  3921. var t = my.Options;
  3922. var e = document.getElementById(valueId);
  3923. e.value = Options[optionName];
  3924. e.addEventListener ('change', eventHandler, false);
  3925. function eventHandler (){
  3926. Options[optionName] = this.value;
  3927. saveOptions();
  3928. if (callOnChange)
  3929. callOnChange (this.value);
  3930. }
  3931. },
  3932. e_alertOptChanged : function (){
  3933. Options.alertConfig.aChat = document.getElementById('pcalertEnable').checked;
  3934. Options.alertConfig.aPrefix=document.getElementById('pcalertPrefix').value;
  3935. saveOptions();
  3936. TowerAlerts.setPostToChatOptions(Options.alertConfig);
  3937. },
  3938. }
  3939.  
  3940. function getOffset( el ) {
  3941. var _x = 0;
  3942. var _y = 0;
  3943. while( el && !isNaN( el.offsetLeft ) && !isNaN( el.offsetTop ) ) {
  3944. _x += el.offsetLeft - el.scrollLeft;
  3945. _y += el.offsetTop - el.scrollTop;
  3946. el = el.offsetParent;
  3947. }
  3948. return { top: _y, left: _x };
  3949. }
  3950. function SliderBar (container, width, height, value, classPrefix, margin){
  3951. var self = this;
  3952. this.listener = null;
  3953. if (value==null)
  3954. value = 0;
  3955. if (!margin)
  3956. margin = parseInt(width*.05);
  3957. this.value = value;
  3958. if (width<20) width=20;
  3959. if (height<5) height=5;
  3960. if (classPrefix == null){
  3961. classPrefix = 'slider';
  3962. var noClass = true;
  3963. }
  3964. var sliderHeight = parseInt(height/2);
  3965. var sliderTop = parseInt(height/4);
  3966. this.sliderWidth = width - (margin*2);
  3967. this.div = document.createElement ('div');
  3968. this.div.style.height = height +'px';
  3969. this.div.style.width = width +'px';
  3970. this.div.className = classPrefix +'Cont';
  3971. if (noClass)
  3972. this.div.style.backgroundColor='#ddd';
  3973. this.slider = document.createElement ('div');
  3974. this.slider.setAttribute ('style', 'position:relative;');
  3975. this.slider.style.height = sliderHeight + 'px'
  3976. this.slider.style.top = sliderTop + 'px';
  3977. this.slider.style.width = this.sliderWidth +'px';
  3978. this.slider.style.left = margin +'px';
  3979. this.slider.className = classPrefix +'Bar';
  3980. this.slider.draggable = true;
  3981. if (noClass)
  3982. this.slider.style.backgroundColor='#fff';
  3983. this.sliderL = document.createElement ('div');
  3984. this.sliderL.setAttribute ('style', 'width:100px; height:100%; position:relative; ');
  3985. this.sliderL.className = classPrefix +'Part';
  3986. this.sliderL.draggable = true;
  3987. if (noClass)
  3988. this.sliderL.style.backgroundColor='#0c0';
  3989. this.knob = document.createElement ('div');
  3990. this.knob.setAttribute ('style', 'width:3px; position:relative; left:0px; background-color:#222');
  3991. this.knob.style.height = height +'px';
  3992. this.knob.style.top = (0-sliderTop) +'px';
  3993. this.knob.className = classPrefix +'Knob';
  3994. this.knob.draggable = true;
  3995. this.slider.appendChild(this.sliderL);
  3996. this.sliderL.appendChild (this.knob);
  3997. this.div.appendChild (this.slider);
  3998. container.appendChild (this.div);
  3999. this.div.addEventListener('mousedown', mouseDown, false);
  4000.  
  4001. this.getValue = function (){
  4002. return self.value;
  4003. }
  4004.  
  4005. this.setValue = function (val){
  4006. var relX = (val * self.sliderWidth);
  4007. self.sliderL.style.width = relX + 'px';
  4008. self.knob.style.left = relX + 'px';
  4009. self.value = val;
  4010. if (self.listener)
  4011. self.listener(self.value);
  4012. }
  4013. this.setChangeListener = function (listener){
  4014. self.listener = listener;
  4015. }
  4016.  
  4017. function moveKnob (me){
  4018. var relX = me.clientX - self.divLeft;
  4019. if (relX < 0)
  4020. relX = 0;
  4021. if (relX > self.sliderWidth)
  4022. relX = self.sliderWidth;
  4023. self.knob.style.left = (relX - (self.knob.clientWidth/2) ) +'px';
  4024. self.sliderL.style.width = relX + 'px';
  4025. self.value = relX / self.sliderWidth;
  4026. if (self.listener)
  4027. self.listener(self.value);
  4028. }
  4029. function doneMoving (){
  4030. self.div.removeEventListener('mousemove', mouseMove, true);
  4031. document.removeEventListener('mouseup', mouseUp, true);
  4032. }
  4033. function mouseUp (me){
  4034. moveKnob (me);
  4035. doneMoving();
  4036. }
  4037. function mouseDown(me){
  4038. var e = self.slider;
  4039. self.divLeft = 0;
  4040. while (e.offsetParent){
  4041. self.divLeft += e.offsetLeft;
  4042. e = e.offsetParent;
  4043. }
  4044. moveKnob (me);
  4045. document.addEventListener('mouseup', mouseUp, true);
  4046. self.div.addEventListener('mousemove', mouseMove, true);
  4047. }
  4048. function mouseMove(me){
  4049. moveKnob (me);
  4050. }
  4051. }
  4052. function CmatSimpleSound (playerUrl, container, attrs, onLoad, flashVars) {
  4053. var self = this;
  4054. this.player = null;
  4055. this.volume = 100;
  4056. this.isLoaded = false;
  4057. this.onSwfLoaded = null;
  4058. var div = document.createElement ('div');
  4059. this.onSwfLoaded = onLoad;
  4060. if (navigator.appName.toLowerCase().indexOf('microsoft')+1) {
  4061. div.innerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"><param name="movie" value="'+playerUrl+'"><param name="quality" value="high"></object>';
  4062. this.player = div.getElementsByTagName('object')[0];
  4063. } else {
  4064. div.innerHTML = '<embed src="'+playerUrl+'" bgcolor="#eeeeee" allowfullscreen=false FlashVars="'+ flashVars +'" quality="high" allowscriptaccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" ></embed>';
  4065. this.player = div.getElementsByTagName('embed')[0].wrappedJSObject;
  4066. }
  4067. if (container)
  4068. container.appendChild (div);
  4069. else
  4070. document.body.appendChild (div);
  4071. for (k in attrs)
  4072. this.player.setAttribute(k, attrs[k]);
  4073. this.setVolume = function (chanNum, vol){
  4074. if (!self.isLoaded)
  4075. return;
  4076. self.player.jsSetVolume (chanNum, vol);
  4077. volume = vol;
  4078. }
  4079. this.load = function (chanNum, url, bStream, bAutoplay, bUsePolicyFile){
  4080. self.player.jsLoad (chanNum, url, bStream, bAutoplay, bUsePolicyFile);
  4081. }
  4082. this.play = function (chanNum, position){
  4083. if (self.player.jsPlay) self.player.jsPlay (chanNum, position);
  4084. }
  4085. this.stop = function (chanNum){
  4086. if (!self.isLoaded)
  4087. return;
  4088. self.player.jsStop (chanNum);
  4089. }
  4090. this.getStatus = function (chanNum){
  4091. return self.player.jsGetStatus (chanNum);
  4092. }
  4093. this.debugFunc = function (msg){
  4094. }
  4095. this.swfDebug = function (msg){
  4096. self.debugFunc('SWF: '+ msg);
  4097. }
  4098. this.swfLoaded = function (){
  4099. self.isLoaded = true;
  4100. self.debugFunc ('playerIsReady');
  4101. if (self.onSwfLoaded)
  4102. self.onSwfLoaded();
  4103. }
  4104. this.swfPlayComplete = function (chanNum){
  4105. }
  4106. this.swfLoadComplete = function (chanNum, isError){
  4107. }
  4108. }
  4109. function htmlSelector (valNameObj, curVal, tags){
  4110. var m = [];
  4111. m.push ('<SELECT');
  4112. if (tags){
  4113. m.push (' ');
  4114. m.push (tags);
  4115. }
  4116. for (var k in valNameObj){
  4117. m.push ('><OPTION ');
  4118. if (k == curVal)
  4119. m.push ('SELECTED ');
  4120. m.push ('value="');
  4121. m.push (k);
  4122. m.push ('">');
  4123. m.push (valNameObj[k]);
  4124. m.push ('</option>');
  4125. }
  4126. m.push ('</select>');
  4127. return m.join ('');
  4128. }
  4129.  
  4130. /********************************* Search Tab *************************************/
  4131.  
  4132.  
  4133. my.Search = {
  4134. cont:null,
  4135. state : null,
  4136.  
  4137. opt : {},
  4138.  
  4139. searchRunning : false,
  4140. tilesSearched : 0,
  4141. tilesFound : 0,
  4142. curX : 0,
  4143. curY : 0,
  4144. lastX : 0,
  4145. firstX : 0,
  4146. firstY : 0,
  4147. lastY : 0,
  4148. sourceCity :null,
  4149. init : function (){
  4150. var t = my.Search;
  4151. this.cont = document.createElement('div');
  4152. unsafeWindow.BOPCpo2 = t.clickedPlayerCheckOnline;
  4153. unsafeWindow.BOPCplo2 = t.clickedPlayerGetLastLogin;
  4154. return this.cont;
  4155. },
  4156.  
  4157. getContent : function (){
  4158. var t = my.Search;
  4159. return t.cont;
  4160. },
  4161.  
  4162. hide : function (){
  4163. },
  4164.  
  4165. show : function (cont){
  4166. var t = my.Search;
  4167.  
  4168. if (t.state == null){
  4169. this.cont.innerHTML = '\
  4170. <DIV class=ptentry><table><tr valign=bottom><TD class=xtab width=100 align=right>Type : </td><TD>\
  4171. <SELECT id="srcType">\
  4172. <OPTION selected value=1>Wilds</option>\
  4173. <OPTION value=0>Barbarian camps</option>\
  4174. <OPTION value=2>Cities</option>\
  4175. </select></td></tr>\
  4176. </table>\
  4177. <DIV id="srcOpts" style="height:80px"></div></div>\
  4178. <DIV id="srcResults" style="height:400px; max-height:400px;"></div>';
  4179. m = '<TABLE><TR valign=middle><TD class=xtab width=100 align=right>City to start from : &nbsp; X: </td><TD class=xtab>\
  4180. <INPUT id="srchX" type=text\ size=3> &nbsp; Y: <INPUT id="srchY" type=text\ size=3> &nbsp;<SPAN id=spInXY></span>';
  4181. m += '</td></tr><TR><TD class=xtab align=right>Distance : </td><TD class=xtab>from <INPUT id=srcaDist size=4 value=0 /> to <INPUT id=srcDist size=4 value=70 /></td></tr>';
  4182. m += '<TR><TD class=xtab></td><TD class=xtab><INPUT id=srcStart type=submit value="Launch search"/></td></tr>';
  4183. m += '</table>';
  4184. document.getElementById ('srcOpts').innerHTML = m;
  4185. var citysrc0=new CdispCityPicker ('srchdcp', document.getElementById ('spInXY'), false, t.clickCitySourceSelect, Cities.byID[unsafeWindow.currentcityid].idx);
  4186. document.getElementById ('srcStart').addEventListener ('click', t.clickedSearch, false);
  4187. t.state = 1;
  4188. }
  4189. },
  4190. clickCitySourceSelect : function (city){
  4191. var t = my.Search;
  4192. t.sourceCity = city;
  4193. document.getElementById ('srchX').value=t.sourceCity.c.x;
  4194. document.getElementById ('srchY').value=t.sourceCity.c.y;
  4195. },
  4196. clickedPlayerCheckOnline : function (span, uid){
  4197. var t = my.AllianceList;
  4198. var s = my.Search;
  4199. span.onclick = '';
  4200. span.innerHTML = "Searching...";
  4201. t.fetchPlayerStatusSimple (uid, function (r) {s.gotPlayerStatus(r, span, uid)});
  4202. },
  4203.  
  4204. clickedPlayerGetLastLogin : function (span, uid){
  4205. var t = my.AllianceList;
  4206. var s = my.Search;
  4207. span.onclick = '';
  4208. span.innerHTML = "Searching...";
  4209. t.fetchPlayerLastLogin (uid, function (r) {s.gotPlayerLastLogin(r, span)});
  4210. },
  4211. gotPlayerStatus : function (rslt, span,uid){
  4212. var t = my.AllianceList;
  4213. if (!rslt.ok){
  4214. span.innerHTML = rslt.errorMsg;
  4215. return;
  4216. }
  4217. var p = rslt.data;
  4218. if (p[uid] == true) {
  4219. m = '<span style="color:green"><b>Online!</b></span>';
  4220. } else {
  4221. m = '<span style="color:red"><b>Offline!</b></span>';
  4222. }
  4223. span.innerHTML = m + '';
  4224. },
  4225. gotPlayerLastLogin : function (rslt, span){
  4226. var t = my.AllianceList;
  4227. if (!rslt.ok){
  4228. span.innerHTML = rslt.errorMsg;
  4229. return;
  4230. }
  4231. var p = rslt.playerInfo;
  4232. var lastLogin = rslt.playerInfo.lastLogin;
  4233. if (lastLogin) {
  4234. m = '<span style="color:black">'+lastLogin+'</span>';
  4235. } else {
  4236. m = '<span style="color:red">?</span>';
  4237. }
  4238. span.innerHTML = m + '';
  4239. },
  4240. clickedSearch : function (){
  4241. var t = my.Search;
  4242. if (t.searchRunning){
  4243. t.stopSearch ('SEARCH CANCELLED !');
  4244. return;
  4245. }
  4246. t.opt.searchType = document.getElementById ('srcType').value;
  4247. t.opt.startX = parseInt(document.getElementById ('srchX').value);
  4248. t.opt.startY = parseInt(document.getElementById ('srchY').value);
  4249. t.opt.maxDistance = parseInt(document.getElementById ('srcDist').value);
  4250. t.opt.maxDistanceA = parseInt(document.getElementById ('srcaDist').value);
  4251. errMsg = '';
  4252. if (isNaN (t.opt.maxDistanceA) ||t.opt.maxDistanceA<0)
  4253. errMsg += "The minimum distance cannot be lower than 0<BR>";
  4254. if (isNaN (t.opt.maxDistance) ||t.opt.maxDistance<1)
  4255. errMsg += "The distance has to be higher than 1<BR>";
  4256. if (t.opt.maxDistance<=t.opt.maxDistanceA)
  4257. errMsg += "The maximum/minimum distance has been exceeded<BR>";
  4258. if(t.opt.maxDistanceA > 375)
  4259. errMsg += "The distance cannot be higher than 375 ! <BR>";
  4260. if (errMsg != ''){
  4261. document.getElementById('srcResults').innerHTML = '<FONT COLOR=#660000>ERROR :</font><BR><BR>'+ errMsg;
  4262. return;
  4263. }
  4264. t.searchRunning = true;
  4265. document.getElementById ('srcStart').value = 'Cancel the search';
  4266. m = '<DIV class=ptstat><TABLE width=100% cellspacing=0><TR><TD class=xtab width=125><DIV id=statSearched></div></td>\
  4267. <TD class=xtab align=center><SPAN id=statStatus></span></td>\
  4268. <TD class=xtab align=right width=125><DIV id=statFound></div></td></tr></table></div>\
  4269. <TABLE width=100%><TR valign=top><TD><DIV id=divOutTab style="height:500px; max-height:500px; overflow-y:auto; width:100%;"></div></td>\
  4270. <TD id="tddivOutOpts" width="290px" height=100% style="background:#e0e0f0; height:100%; padding:5px, top:0px"><DIV id=divOutOpts style="width:260px"></div></td></tr></table><br><input type=checkbox id=ShowHideOpts>Hide option window';
  4271. document.getElementById('srcResults').innerHTML = m;
  4272. document.getElementById('ShowHideOpts').addEventListener ('click', function (){
  4273. if (document.getElementById("ShowHideOpts").checked) {
  4274. document.getElementById("tddivOutOpts").style.display="none";
  4275. //document.getElementById("divOutTab").style.width="740px";
  4276. } else {
  4277. document.getElementById("tddivOutOpts").style.display="block";
  4278. //document.getElementById("divOutTab").style.width="460px";
  4279. }
  4280. }, false);
  4281.  
  4282. if (t.opt.searchType == 0)
  4283. typeName = 'Barbarian camp';
  4284. else if (t.opt.searchType == 1)
  4285. typeName = 'Wilds';
  4286. else
  4287. typeName = 'Cities';
  4288. m = '<CENTER><B>Search '+ typeName +'<BR>\
  4289. Source : '+ t.opt.startX +','+ t.opt.startY +' &nbsp; Distance : '+ t.opt.maxDistanceA +' '+ t.opt.maxDistance +'<BR></center>\
  4290. <DIV class=ptentry><TABLE cellspacing=0 width=100%><TR align=center><TD class=xtab colspan=10><B>OPTIONS :</b><BR></td></tr>';
  4291. if (t.opt.searchType == 1 || t.opt.searchType == 0) {
  4292. m += '<TR><TD class=xtab align=right>Level Min. :</td><TD class=xtab> <INPUT id=filMinLvl size=2 value='+ Options.srcMinLevel +' /></td></tr>\
  4293. <TR><TD class=xtab align=right>Level Max. :</td><TD class=xtab> <INPUT id=filMaxLvl size=2 value='+ Options.srcMaxLevel +' /></td></tr>';
  4294. }
  4295. if (t.opt.searchType == 1){
  4296. m += '<TR><TD class=xtab align=right>Fields :</td><TD class=xtab align=right>\
  4297. Foret<INPUT id=woodWild type=CHECKBOX'+ (Options.woodWild?' CHECKED':'') +'></td></tr>';
  4298. m += '<TR><TD class=xtab align=right>Grassland/River<INPUT id=foodWild type=CHECKBOX '+ (Options.foodWild?' CHECKED':'') +'></td>\
  4299. <TD class=xtab align=right>Mountains<INPUT id=mtnWild type=CHECKBOX '+ (Options.mtnWild?' CHECKED':'') +'></td></tr>';
  4300. m += '<TR><TD class=xtab align=right>Plain<INPUT id=plnWild type=CHECKBOX '+ (Options.plnWild?' CHECKED':'') +'></td>\
  4301. <TD class=xtab align=right>Hills<INPUT id=hillWild type=CHECKBOX'+ (Options.hillWild?' CHECKED':'') +'></td></tr>';
  4302. m += '<TR><TD class=xtab align=right>Non-occupied only :</td><TD class=xtab><INPUT id=filUnowned type=CHECKBOX '+ (Options.unownedOnly?' CHECKED':'') +'\><td></tr>';
  4303. }
  4304. if (t.opt.searchType == 1 || t.opt.searchType == 0) {
  4305. m+= '<TR><TD class=xtab align=right>Sort by :</td><TD class=xtab><SELECT id=filSortBy>\
  4306. <OPTION value="level" '+ (Options.srcSortBy=='level'?'SELECTED':'') +'>Level</option>\
  4307. <OPTION value="dist" '+ (Options.srcSortBy=='dist'?'SELECTED':'') +'>Distance</option>';
  4308. if (t.opt.searchType == 1) {
  4309. m+= '<OPTION value="play" '+ (Options.srcSortBy=='play'?'SELECTED':'') +'>Player</option>';
  4310. m+= '<OPTION value="alli" '+ (Options.srcSortBy=='alli'?'SELECTED':'') +'>Alliance</option>';
  4311. }
  4312. m+= '</select></td></tr>\
  4313. <TR><TD class=xtab align=right>Coords :</td><TD class=xtab><INPUT type=checkbox id=coordsOnly \></td></tr>\
  4314. </table></div><BR><SPAN id=srchSizeWarn></span><DIV id=BOpbSrcExp></div>';
  4315. } else {
  4316. m+= '<TR><TD class=xtab align=right >Filter :</td><TD class=xtab align=left ><SELECT style="width: 135px" id=idSrchFilter>\
  4317. <OPTION value=0>All cities</option>\
  4318. <OPTION value=1>Hostile cities only</option>\
  4319. <OPTION value=2>Misty cities only (KoC feature)</option>\
  4320. <OPTION value=3>Allied cities only</option>\
  4321. <OPTION value=4>Friendly cities only</option>\
  4322. <OPTION value=5>Neutral cities only</option>\
  4323. <OPTION value=6>Cities with no alliance only </option>\
  4324. </select></td></tr>';
  4325. m+= '<TR><TD class=xtab align=right>Sort by :</td><TD class=xtab><SELECT id=filSortBy>\
  4326. <OPTION value="might" '+ (Options.srcSortBy=='might'?'SELECTED':'') +'>Glory</option>\
  4327. <OPTION value="dist" '+ (Options.srcSortBy=='dist'?'SELECTED':'') +'>Distance</option>\
  4328. <OPTION value="play" '+ (Options.srcSortBy=='play'?'SELECTED':'') +'>Player</option>\
  4329. <OPTION value="alli" '+ (Options.srcSortBy=='alli'?'SELECTED':'') +'>Alliance</option>\
  4330. </select></td></tr>\
  4331. <tr><TD class=xtab align=right>Minimum glory :</td><TD class=xtab><select id=filPuissance>\
  4332. <option value="0" '+ (Options.filPuissance=='0'?'SELECTED':'') +'>0</option>\
  4333. <option value="500" '+ (Options.filPuissance=='500'?'SELECTED':'') +'>500</option>\
  4334. <option value="2500" '+ (Options.filPuissance=='2500'?'SELECTED':'') +'>2 500</option>\
  4335. <option value="10000" '+ (Options.filPuissance=='10000'?'SELECTED':'') +'>10 000</option>\
  4336. <option value="50000" '+ (Options.filPuissance=='50000'?'SELECTED':'') +'>50 000</option>\
  4337. <option value="100000" '+ (Options.filPuissance=='100000'?'SELECTED':'') +'>100 000</option>\
  4338. <option value="500000" '+ (Options.filPuissance=='500000'?'SELECTED':'') +'>500 000</option>\
  4339. <option value="1000000" '+ (Options.filPuissance=='1000000'?'SELECTED':'') +'>1 000 000</option>\
  4340. <option value="10000000" '+ (Options.filPuissance=='100000000'?'SELECTED':'') +'>10 millions</option>\
  4341. <option value="100000000" '+ (Options.filPuissance=='1000000000'?'SELECTED':'') +'>100 millions</option>\
  4342. </select></td></tr>\
  4343. <tr><TD class=xtab align=right>Maximum glory :</td><TD class=xtab><select id=filPuissanceMax>\
  4344. <option value="500" '+ (Options.filPuissanceMax=='500'?'SELECTED':'') +'>500</option>\
  4345. <option value="2500" '+ (Options.filPuissanceMax=='2500'?'SELECTED':'') +'>2 500</option>\
  4346. <option value="10000" '+ (Options.filPuissanceMax=='10000'?'SELECTED':'') +'>10 000</option>\
  4347. <option value="50000" '+ (Options.filPuissanceMax=='50000'?'SELECTED':'') +'>50 000</option>\
  4348. <option value="100000" '+ (Options.filPuissanceMax=='100000'?'SELECTED':'') +'>100 000</option>\
  4349. <option value="500000" '+ (Options.filPuissanceMax=='100000'?'SELECTED':'') +'>500 000</option>\
  4350. <option value="1000000" '+ (Options.filPuissanceMax=='1000000'?'SELECTED':'') +'>1 000 000</option>\
  4351. <option value="10000000" '+ (Options.filPuissanceMax=='100000000'?'SELECTED':'') +'>10 millions</option>\
  4352. <option value="100000000" '+ (Options.filPuissanceMax=='100000000'?'SELECTED':'') +'>100 millions</option>\
  4353. <option value="500000000" '+ (Options.filPuissanceMax=='500000000'?'SELECTED':'') +'>500 millions</option>\
  4354. </select></td></tr>\
  4355. <tr><TD class=xtab align=right>Alliance content :</td><td class=xtab><input type=text size=10 id=filfiltreAlliance value="'+Options.filfiltreAlliance+'"></td></tr>\
  4356. <tr><TD class=xtab align=right>Player content :</td><td class=xtab><input type=text size=10 id=filfiltreJoueur value="'+Options.filfiltreJoueur+'"></td></tr>\
  4357. <TR style="display:none;"><TD class=xtab align=right>Coords :</td><TD class=xtab><INPUT type=checkbox id=coordsOnly \></td></tr>\
  4358. </table></div><BR><SPAN id=srchSizeWarn></span>';
  4359. }
  4360. document.getElementById('divOutOpts').innerHTML = m;
  4361. if (t.opt.searchType == 1 || t.opt.searchType == 0) {
  4362. document.getElementById('filMinLvl').addEventListener ('change', function (){
  4363. Options.srcMinLevel = document.getElementById('filMinLvl').value;
  4364. saveOptions();
  4365. t.dispMapTable ();
  4366. }, false);
  4367. document.getElementById('filMaxLvl').addEventListener ('change', function (){
  4368. Options.srcMaxLevel = document.getElementById('filMaxLvl').value;
  4369. saveOptions();
  4370. t.dispMapTable ();
  4371. }, false);
  4372. }
  4373. document.getElementById('filSortBy').addEventListener ('change', function (){
  4374. Options.srcSortBy = document.getElementById('filSortBy').value;
  4375. saveOptions();
  4376. t.dispMapTable ();
  4377. }, false);
  4378. document.getElementById('coordsOnly').addEventListener ('change', function (){ t.dispMapTable (); }, false);
  4379. if (t.opt.searchType == 1){
  4380. document.getElementById('foodWild').addEventListener ('change', function(){
  4381. Options.foodWild = document.getElementById('foodWild').checked;
  4382. saveOptions();
  4383. t.dispMapTable ();
  4384. }, false);
  4385. document.getElementById('hillWild').addEventListener ('change', function(){
  4386. Options.hillWild = document.getElementById('hillWild').checked;
  4387. saveOptions();
  4388. t.dispMapTable();
  4389. }, false);
  4390. document.getElementById('mtnWild').addEventListener ('change', function(){
  4391. Options.mtnWild = document.getElementById('mtnWild').checked;
  4392. saveOptions();
  4393. t.dispMapTable();
  4394. }, false);
  4395. document.getElementById('plnWild').addEventListener ('change', function(){
  4396. Options.plnWild = document.getElementById('plnWild').checked;
  4397. saveOptions();
  4398. t.dispMapTable();
  4399. }, false);
  4400. document.getElementById('woodWild').addEventListener ('change', function(){
  4401. Options.woodWild = document.getElementById('woodWild').checked;
  4402. saveOptions();
  4403. t.dispMapTable ();
  4404. }, false);
  4405. document.getElementById('filUnowned').addEventListener ('change', function (){
  4406. Options.unownedOnly = (document.getElementById('filUnowned').checked);
  4407. saveOptions();
  4408. t.dispMapTable ();
  4409. }, false);
  4410. }
  4411. if (t.opt.searchType == 2){
  4412. document.getElementById('idSrchFilter').addEventListener ('change', function (){
  4413. Options.citySrchFilter = (document.getElementById('idSrchFilter').value);
  4414. saveOptions();
  4415. t.dispMapTable ();
  4416. }, false);
  4417. document.getElementById('idSrchFilter').value = Options.citySrchFilter;
  4418. document.getElementById('filfiltreAlliance').addEventListener ('keyup', function (){
  4419. Options.filfiltreAlliance = document.getElementById('filfiltreAlliance').value;
  4420. saveOptions();
  4421. t.dispMapTable ();
  4422. }, false);
  4423. document.getElementById('filfiltreJoueur').addEventListener ('keyup', function (){
  4424. Options.filfiltreJoueur = document.getElementById('filfiltreJoueur').value;
  4425. saveOptions();
  4426. t.dispMapTable ();
  4427. }, false);
  4428. document.getElementById('filPuissance').addEventListener ('change', function (){
  4429. Options.filPuissance = parseInt(document.getElementById('filPuissance').value);
  4430. saveOptions();
  4431. t.dispMapTable ();
  4432. }, false);
  4433. document.getElementById('filPuissanceMax').addEventListener ('change', function (){
  4434. Options.filPuissanceMax = parseInt(document.getElementById('filPuissanceMax').value);
  4435. saveOptions();
  4436. t.dispMapTable ();
  4437. }, false);
  4438. }
  4439. t.mapDat = [];
  4440. t.firstX = t.opt.startX - t.opt.maxDistance;
  4441. if (t.firstX<0) t.firstX=0;
  4442. t.lastX = t.opt.startX + t.opt.maxDistance;
  4443. if (t.lastX>800) t.lastX=800;
  4444. t.firstY = t.opt.startY - t.opt.maxDistance;
  4445. if (t.firstY<0) t.firstY=0;
  4446. t.lastY = t.opt.startY + t.opt.maxDistance;
  4447. if (t.lastY>800) t.lastY=800;
  4448. t.tilesSearched = 0;
  4449. t.tilesFound = 0;
  4450. t.curX = t.firstX;
  4451. t.curY = t.firstY;
  4452. var xxx = t.normalizeCoord(t.curX);
  4453. var yyy = t.normalizeCoord(t.curY);
  4454. document.getElementById ('statStatus').innerHTML = 'Research '+ xxx +','+ yyy;
  4455. setTimeout (function(){
  4456. Map.request (xxx, yyy, 15, t.mapCallback)
  4457. }, 500);
  4458. },
  4459. normalizeCoord : function (x){
  4460. if ( x >= 800)
  4461. x = 800;
  4462. else if (x < 0)
  4463. x = 0;
  4464. return parseInt (x/5) * 5;
  4465. },
  4466.  
  4467. mapCallback : function (left, top, width, rslt){
  4468. function insertRow (x, y, msg){
  4469. row = document.getElementById('srcOutTab').insertRow(-1);
  4470. row.insertCell(0).innerHTML = x +','+ y;
  4471. row.insertCell(1).innerHTML = distance (t.opt.startX, t.opt.startY, x, y);
  4472. row.insertCell(2).innerHTML = msg;
  4473. }
  4474. var t = my.Search;
  4475. if (!t.searchRunning)
  4476. return;
  4477. if (!rslt.ok){
  4478. t.stopSearch ('ERROR : '+ rslt.errorMsg);
  4479. return;
  4480. }
  4481. map = rslt.data;
  4482. var userInfo = rslt.userInfo;
  4483. var alliance = rslt.allianceNames;
  4484. for (k in map){
  4485. if (t.opt.searchType==0 && map[k].tileType==51 && map[k].tileCityId==0 && map[k].tileUserId==0) { // if barb
  4486. type = 0;
  4487. } else if (t.opt.searchType==1 && map[k].tileType>=10 && map[k].tileType<=50) {
  4488. if (map[k].tileType == 10)
  4489. type = 1;
  4490. else if (map[k].tileType == 11)
  4491. type = 2;
  4492. else if (map[k].tileType == 12)
  4493. type = 2;
  4494. else
  4495. type = (map[k].tileType/10) + 1;
  4496. } else if (t.opt.searchType==2 && map[k].tileCityId >= 0 && map[k].tileType > 50 && map[k].cityName) {
  4497. type = 7;
  4498. } else {
  4499. continue;
  4500. }
  4501. dist = distance (t.opt.startX, t.opt.startY, map[k].xCoord, map[k].yCoord);
  4502. if (dist <= t.opt.maxDistance && dist >= t.opt.maxDistanceA){
  4503. if (t.opt.searchType==2) {
  4504. var isMisted = map[k].tileUserId == 0 || false;
  4505. var uu = 'u'+map[k].tileUserId;
  4506. var aU = 'unknown';
  4507. var aD = 'unknown';
  4508. var mightU = 0;
  4509. var nameU = 'unknown';
  4510. if (isMisted) {
  4511. nameU = 'Mist';
  4512. mightU = 0;
  4513. } else {
  4514. if (userInfo[uu] ) { // Corrects a problem with hung search.
  4515. nameU = ""+ userInfo[uu].n +"";
  4516. mightU = userInfo[uu].m;
  4517. aD = getDiplomacy2(userInfo[uu].a);
  4518. if ( alliance && alliance['a'+userInfo[uu].a] ) {
  4519. aU = alliance['a'+userInfo[uu].a];
  4520. }
  4521. else {
  4522. aU = '----';
  4523. aD = 'unaligned';
  4524. }
  4525. }
  4526. }
  4527. t.mapDat.push ([map[k].xCoord, map[k].yCoord, dist, type, map[k].tileLevel, isMisted, map[k].tileCityId, map[k].tileUserId, map[k].cityName,nameU,mightU,aU,aD ]);
  4528. } else {
  4529. isOwned = map[k].tileUserId>0 || map[k].misted;
  4530. var uu = 'u'+map[k].tileUserId;
  4531. var aU = 'unknown';
  4532. var aD = 'unknown';
  4533. var nameU = 'unknown';
  4534. var mightU = 0;
  4535. if (map[k].misted) {
  4536. nameU = 'Under the Mist';
  4537. }else {
  4538. if (userInfo[uu] ) {
  4539. var nameU = "<a onclick=getInfoForAnUser('"+ map[k].tileUserId +"');>"+ userInfo[uu].n +"</a>";
  4540. mightU = userInfo[uu].m;
  4541. aD = getDiplomacy2(userInfo[uu].a);
  4542. if ( alliance && alliance['a'+userInfo[uu].a] ) {
  4543. aU = alliance['a'+userInfo[uu].a];
  4544. }
  4545. }else {
  4546. var nameU = 'unknown';
  4547. }
  4548. }
  4549. if (isOwned==undefined) isOwned=false;
  4550. t.mapDat.push ([map[k].xCoord, map[k].yCoord, dist, type, map[k].tileLevel, isOwned, map[k].tileCityId, map[k].tileUserId, map[k].cityName, nameU, mightU, aU, aD]);
  4551. }
  4552. ++t.tilesFound;
  4553. }
  4554. }
  4555. t.tilesSearched += (15*15);
  4556. document.getElementById('statSearched').innerHTML = 'Search results : '+ t.tilesSearched;
  4557. t.dispMapTable();
  4558. t.curX += 15;
  4559. if (t.curX > t.lastX){
  4560. t.curX = t.firstX;
  4561. t.curY += 15;
  4562. if (t.curY > t.lastY){
  4563. t.stopSearch ('SEARCH FINISHED !');
  4564. return;
  4565. }
  4566. }
  4567. //
  4568. t.opt.maxDistanceA
  4569. if (t.opt.maxDistanceA>0) {
  4570. var plagedeX=t.opt.startX-t.opt.maxDistanceA;
  4571. var plageaX=t.opt.startX+t.opt.maxDistanceA;
  4572. var plagedeY=t.opt.startY-t.opt.maxDistanceA;
  4573. var plageaY=t.opt.startY+t.opt.maxDistanceA;
  4574. if (t.curX > plagedeX && t.curX < plageaX) {
  4575. var nb = parseInt( (t.opt.maxDistanceA*2) / 15) -1;
  4576. t.curX = t.curX + (nb*15);
  4577. }
  4578. if (t.curY > plagedeY && t.curY < plageaY) {
  4579. var nb = parseInt( (t.opt.maxDistanceA*2) / 15) -1;
  4580. t.curY = t.curY + (nb*15);
  4581. }
  4582. }
  4583. var x = t.normalizeCoord(t.curX);
  4584. var y = t.normalizeCoord(t.curY);
  4585.  
  4586. document.getElementById ('statStatus').innerHTML = 'Research '+ x +','+ y;
  4587. setTimeout (function(){Map.request (x, y, 15, t.mapCallback)}, 500);
  4588. },
  4589. dispMapTable : function (){
  4590. var tileNames = ['Barbarian camp', 'Grassland', 'River', 'Woods', 'Hills', 'Mountains', 'Plains', 'Cities' ];
  4591. var t = my.Search;
  4592. var coordsOnly = document.getElementById('coordsOnly').checked;
  4593. function mySort(a, b){
  4594. if (Options.srcSortBy == 'level'){
  4595. if ((x = a[4] - b[4]) != 0)
  4596. return x;
  4597. }
  4598. if (Options.srcSortBy == 'might'){
  4599. if ((x = b[10] - a[10]) != 0)
  4600. return x;
  4601. }
  4602. if (Options.srcSortBy == 'alli'){
  4603. if (a[11] < b[11]) return -1;
  4604. else if (a[11] == b[11]) return 0;
  4605. else return 1;
  4606. }
  4607. if (Options.srcSortBy == 'play'){
  4608. if (a[9] < b[9]) return -1;
  4609. else if (a[9] == b[9]) return 0;
  4610. else return 1;
  4611. }
  4612. return a[2] - b[2];
  4613. }
  4614. dat = [];
  4615. for (i=0; i<t.mapDat.length; i++){
  4616. lvl = parseInt (t.mapDat[i][4]);
  4617. type = t.mapDat[i][3];
  4618. Glory = t.mapDat[i][10];
  4619. if (t.opt.searchType == 2 && type == 7 ) {
  4620. switch(parseInt (Options.citySrchFilter)) {
  4621. case 0:
  4622. if (Options.filPuissance<=Glory && Glory<=Options.filPuissanceMax) {
  4623. dat.push(t.mapDat[i]);
  4624. }
  4625. break;
  4626. case 1:
  4627. if ((t.mapDat[i][12] == 'Hostile') && (Options.filPuissance<=Glory && Glory<=Options.filPuissanceMax)) {
  4628. dat.push(t.mapDat[i]);
  4629. }
  4630. break;
  4631. case 2:
  4632. if ((t.mapDat[i][5]===true) && (Options.filPuissance<=Glory && Glory<=Options.filPuissanceMax)) {
  4633. dat.push(t.mapDat[i]);
  4634. }
  4635. break;
  4636. case 3:
  4637. if ((t.mapDat[i][12] == 'Ally') && (Options.filPuissance<=Glory && Glory<=Options.filPuissanceMax)) {
  4638. dat.push(t.mapDat[i]);
  4639. }
  4640. break;
  4641. case 4:
  4642. if ((t.mapDat[i][12] == 'Friendly') && (Options.filPuissance<=Glory && Glory<=Options.filPuissanceMax)) {
  4643. dat.push(t.mapDat[i]);
  4644. }
  4645. break;
  4646. case 5:
  4647. if ((t.mapDat[i][12] == 'Neutral') && (Options.filPuissance<=Glory && Glory<=Options.filPuissanceMax)) {
  4648. dat.push(t.mapDat[i]);
  4649. }
  4650. break;
  4651. case 6:
  4652. if ((t.mapDat[i][12] == 'unaligned') && (Options.filPuissance<=Glory && Glory<=Options.filPuissanceMax)) {
  4653. dat.push(t.mapDat[i]);
  4654. }
  4655. break;
  4656. }
  4657. } else {
  4658. if (lvl>=Options.srcMinLevel && lvl<=Options.srcMaxLevel){
  4659. if (t.opt.searchType==0
  4660. || (Options.woodWild==1 && type == 3)
  4661. || (Options.hillWild==1 && type ==4)
  4662. || (Options.mtnWild==1 && type==5)
  4663. || (Options.plnWild==1 && type == 6)
  4664. || (Options.foodWild==1 && (type==1 || type==2)))
  4665. if (!Options.unownedOnly || t.mapDat[i][5]===false)
  4666. dat.push (t.mapDat[i]);
  4667. }
  4668. }
  4669. }
  4670. document.getElementById('statFound').innerHTML = 'Search results : '+ dat.length;
  4671. if (dat.length == 0){
  4672. m = '<BR><CENTER>Not found</center>';
  4673. } else {
  4674. dat.sort(mySort);
  4675. if (coordsOnly)
  4676. m = '<TABLE align=center id=srcOutTab cellpadding=2 cellspacing=0 style="padding:2px"><TR style="font-weight: bold"><TD style="padding:2px">Location</td></tr>';
  4677. else {
  4678. if (t.opt.searchType == 0) {
  4679. m = '<TABLE id=srcOutTab cellpadding=2 cellspacing=0 style="padding:2px"><TR style="font-weight: bold"><TD style="padding:2px">Coordinates</td><TD style="padding:2px;padding-left: 10px">Distance</td><TD style="padding-left: 10px;">Niv</td><TD style="padding-left: 10px;">Type</td></tr>';
  4680. }
  4681. if (t.opt.searchType == 1) {
  4682. m = '<TABLE id=srcOutTab cellpadding=2 cellspacing=2 style="padding:2px"><TR style="font-weight: bold"><TD style="padding:2px">Coordinates</td><TD style="padding:2px;padding-left: 10px">Distance</td><TD style="padding-left: 10px;">Niv</td><TD style="padding-left: 10px;">Type</td><TD style="padding-left: 10px;">Player</td><td style="padding-left: 10px;">Glory</td><td style="padding-left: 10px;">Alliance</td><td style="padding-left: 10px;" colspan=2>Plus d\'info</td></tr>';
  4683. }
  4684. if (t.opt.searchType == 2) {
  4685. m = '<TABLE id=srcOutTab cellpadding=2 cellspacing=2 style="padding:2px" width=100%><TR style="font-weight: bold"><TD style="padding:2px">Coords</td><TD style="padding:2px;padding-left: 10px">Distance</td><TD style="padding-left: 10px;">City</td><TD style="padding-left: 10px;">Owner</td><TD style="padding-left: 10px;">Glory</td><td style="padding-left: 10px;">Alliance </td><td style="padding-left: 10px;" colspan=2>More info</td><td colspan=3 width=20% style="padding-left: 10px;">Attack</td></tr>';
  4686. }
  4687. }
  4688. var numRows = dat.length;
  4689. if (numRows > 1000 && t.searchRunning){
  4690. // numRows = 1000;
  4691. document.getElementById('srchSizeWarn').innerHTML = '<FONT COLOR=#600000>NOTE : WARNING, there is no limitation to the search, but this can have consequences on the performance of your browser.</font>';
  4692. }
  4693. for (i=0; i<numRows; i++){
  4694. if ((t.opt.searchType != 2) || (dat[i][11].search(Options.filfiltreAlliance, "i") != -1 && dat[i][9].search(Options.filfiltreJoueur, "i") != -1 && t.opt.searchType == 2) ) {
  4695. m += '<TR valign="top"';
  4696. if (dat[i][12]) m += 'class="'+dat[i][12]+'"';
  4697. if (coordsOnly) {
  4698. m += ' ><TD valign="top" style="padding:2px"><DIV>'+ dat[i][0] +','+ dat[i][1] +'</div></td></tr>';
  4699. } else {
  4700. m += ' ><TD valign="top" style="padding:2px"><DIV>\
  4701. <a href="javascript:void(0);" onclick="KB.Controllers.MapHelper.gotoCoord('+ dat[i][0] +','+ dat[i][1] +');">'+ dat[i][0] +','+ dat[i][1] +'</a></div>';
  4702. m += '</td>';
  4703. if (t.opt.searchType == 2) {
  4704. m += '<TD align="left" style="padding:2px" valign="top">'+ dat[i][2].toFixed(2) +'</a></td><TD align=left style="padding:2px">'+ dat[i][8] +'</td>\
  4705. <TD valign="top" style="padding:2px">'+dat[i][9]+'</td>\
  4706. <TD valign="top" style="padding:2px">'+addCommasInt(dat[i][10])+'</td>\
  4707. <td style="padding:2px">'+dat[i][11]+'</td><td style="padding:2px">';
  4708. if (dat[i][5]) {
  4709. } else {
  4710. m+='<DIV style="" onclick="BOPCpo2(this, '+ dat[i][7] +')"><A style="font-size:9px;">Status</a></div></td>\
  4711. <td style="padding:2px"></div>';
  4712. }
  4713. m+= '</td>';
  4714. m+= '<td style="padding-left: 10px;"></td><td style="padding-left: 10px;"></td><td align=right style="padding-left: 10px;"></td>';
  4715. m+= '</tr>';
  4716. } else {
  4717. m += '<TD align=right valign="top" style="padding:2px">'+ dat[i][2].toFixed(2) +' &nbsp; </td><TD align=right>'+ dat[i][4] +'</td><TD> &nbsp; '+ tileNames[dat[i][3]];
  4718. +'</td>';
  4719. if (t.opt.searchType == 1) {
  4720. if (dat[i][5]) {
  4721. m += '<td style="padding:2px">'+dat[i][9]+'<td>'+addCommasInt(dat[i][10])+'</td><td>'+dat[i][11]+'</td>';
  4722. if (dat[i][7] && dat[i][7]!=0) {
  4723. m+='<td style="padding:2px"><DIV style="" onclick="BOPCpo2(this, '+ dat[i][7] +')"><A style="font-size:9px;">Status</a></div></td><td colspan=4>-</div></td>';
  4724. } else {
  4725. m+='<td style="padding:2px">&nbsp;</td><td>&nbsp;</td>';
  4726. }
  4727. } else {
  4728. m +='<td colspan=5 style="text-align=center"><i><b>free...</b></i>';
  4729. }
  4730. }else{
  4731. m+="<td></td>";
  4732. }
  4733. m +='</tr>';
  4734. }
  4735. }
  4736. }
  4737. }
  4738. m += '</table>';
  4739. }
  4740. document.getElementById('divOutTab').innerHTML = m;
  4741. dat = null;
  4742. },
  4743. mapDat : [],
  4744. stopSearch : function (msg){
  4745. var t = my.Search;
  4746. document.getElementById ('statStatus').innerHTML = '<FONT color=#ffaaaa>'+ msg +'</font>';
  4747. document.getElementById ('srcStart').value = 'Launch the search';
  4748. document.getElementById('srchSizeWarn').innerHTML = '';
  4749. t.searchRunning = false;
  4750. },
  4751. }
  4752.  
  4753. function distance (d, f, c, e) {
  4754. var a = 800;
  4755. var g = a / 2;
  4756. var b = Math.abs(c - d);
  4757. if (b > g)
  4758. b = a - b;
  4759. var h = Math.abs(e - f);
  4760. if (h > g)
  4761. h = a - h;
  4762. return Math.round(100 * Math.sqrt(b * b + h * h)) / 100;
  4763. };
  4764.  
  4765.  
  4766. function getDiplomacy2 (aid) {
  4767. if (unsafeWindow.seed.allianceDiplomacies == null)
  4768. return 'Neutral';
  4769. if (unsafeWindow.seed.allianceDiplomacies.friendly && unsafeWindow.seed.allianceDiplomacies.friendly['a'+aid] != null)
  4770. return 'Friendly';
  4771. if (unsafeWindow.seed.allianceDiplomacies.hostile && unsafeWindow.seed.allianceDiplomacies.hostile['a'+aid] != null)
  4772. return 'Hostile';
  4773. if (aid == unsafeWindow.seed.allianceDiplomacies.allianceId)
  4774. return 'Ally';
  4775. return 'Neutral';
  4776. };
  4777.  
  4778.  
  4779.  
  4780. Map = {
  4781. generateBlockList : function(left, top, width) {
  4782. var width5 = parseInt(width / 5);
  4783. var bl = [];
  4784.  
  4785. for (x=0; x<width5; x++){
  4786. xx = left + (x*5);
  4787. if (xx > 795)
  4788. xx = 800-5;
  4789. for (y=0; y<width5; y++){
  4790. yy = top + (y*5);
  4791. if (yy > 795)
  4792. yy = 800-5;
  4793. bl.push ('bl_'+ xx +'_bt_'+ yy);
  4794. }
  4795. }
  4796. return bl.join(",");
  4797. },
  4798.  
  4799. callback : null,
  4800. request : function (left, top, width, cb) {
  4801. left = parseInt(left / 5) * 5;
  4802. top = parseInt(top / 5) * 5;
  4803. width = parseInt((width+4) / 5) * 5;
  4804. var blockString = this.generateBlockList(left, top, width);
  4805. Map.callback = cb;
  4806.  
  4807. var c={blocks:blockString}
  4808. unsafeWindow.AjaxCall.gPostRequest("fetchMapTiles.php", c, function(rslt) {
  4809. Map.callback(left, top, width, rslt);
  4810. },
  4811. function (rslt) {
  4812. Map.callback(left, top, width, rslt);
  4813. }
  4814. );
  4815. },
  4816. };
  4817.  
  4818.  
  4819.  
  4820.  
  4821. my.Train = {
  4822. cont : null,
  4823. timer : null,
  4824. state : null,
  4825. stats : {},
  4826. selectedCity : {},
  4827.  
  4828. init : function (){
  4829. var t = my.Train;
  4830. t.cont = document.createElement('div');
  4831. return t.cont;
  4832. },
  4833.  
  4834. getContent : function (){
  4835. var t = my.Train;
  4836. return t.cont;
  4837. },
  4838.  
  4839. hide : function (){
  4840. var t = my.Train;
  4841. clearTimeout (t.timer);
  4842. },
  4843. cancelTrainingBO : function (i,cityId,typetrn,numtrptrn,p5,p6,p7,trainingId) {
  4844. var t = my.Train;
  4845. Cities.byID[cityId].c.queues.training.slot(i).cancel(function(){
  4846. unsafeWindow.Barracks.renderBarracksQueue()
  4847. t.dispTrainStatus ('<font color=#550000><B>Cancel the building</b></font><BR>');
  4848. t.displayCityStats();
  4849. })
  4850. },
  4851. show : function (){
  4852. var t = my.Train;
  4853. clearTimeout (t.timer);
  4854. if (t.state == null){
  4855. unsafeWindow.BOcancelTraining = t.cancelTrainingBO;
  4856. s = "<DIV id=trainTopSelect>\
  4857. <DIV class=ptstat>"+unsafeWindow.arStrings.MainChrome.TrainTroops+"</div><DIV style='height:10px'></div><DIV class=ptentry>\
  4858. <DIV style='text-align:center; margin-bottom:10px;'>City : &nbsp; <span id=ptspeedcity></span></div>\
  4859. <TABLE class=ptTab width=100%><TR valign=top><TD width=100%>\
  4860. <TABLE align=center><TR><TD align=right>Troop type : </td><TD colspan=2>\
  4861. <SELECT id=ptttType>";
  4862. unsafeWindow.Barracks.allUnitIds.each(function(r){
  4863. if (unsafeWindow.arStrings.unitName["u"+r]) {
  4864. s+="<option value="+r+">"+unsafeWindow.arStrings.unitName["u"+r]+"</option>";
  4865. }
  4866. });
  4867. s+="</select> &nbsp; (max <span id=ptttSpMax></span>)</td></tr>\
  4868. <TR><TD align=right>Number of builds per slot : </td><TD><INPUT id='ptttInpPS' size=5 type='text' value='0'\></td>\
  4869. <TD><INPUT id='ptttButMaxPS' type=submit value='max'\> &nbsp; (max <span id=ptttSpMaxPS>0</span>)</td></tr>\
  4870. <TR><TD align=right>Number of slots : </td><TD><INPUT id='ptttInpSlots' size=2 type='text' value='1'\></td>\
  4871. <TD width=75%><INPUT id='ptttButMaxSlots' type=submit value='max'\> &nbsp; (max <span id=ptttSpMaxSlots>1</span>)</td></tr>\
  4872. <TR><TD colspan=3 align=center><DIV style='height:10px'></div><INPUT id='ptttButDo' type=submit value='Build'\></td></tr>\
  4873. </table></td></tr></table></div></div>\
  4874. <TABLE align=center width=425 class=ptTab><TR><TD><div id=ptTrainStatus style='overflow-y:auto; max-height:78px; height: 78px;'></div></td></tr></table>\
  4875. <div style='height: 325px; background: #e8ffe8'>\
  4876. <TABLE width=100% class=ptTab><TR><TD colspan=3><DIV id=divSTtop></div></td></tr>\
  4877. <TR><TD width=50% style='padding-left:15px; padding-right:15px'><DIV style='text-align:center'><B>Queue &nbsp; (<SPAN id=statTTtot></span>)</b><BR><HR></div><DIV id=divSTleft style='overflow-y: auto; height:210px; max-height:210px'></div></td>\
  4878. <TD width=50% style='padding-left:15px; padding-right:15px'><DIV style='text-align:center'><B>Queue &nbsp; (<SPAN id=statDTtot></span>)</b><BR><HR></div><DIV id=divSTright style='overflow-y: auto; height:210px; max-height:210px'></div></td></tr>\
  4879. </div>";
  4880. t.cont.innerHTML = s;
  4881.  
  4882. var dcp = new CdispCityPicker ('ptspeed', document.getElementById('ptspeedcity'), true, t.clickCitySelect, 0);
  4883. t.TTspMax = document.getElementById ('ptttSpMax');
  4884. t.TTspMaxPS = document.getElementById ('ptttSpMaxPS');
  4885. t.TTspMaxSlots = document.getElementById ('ptttSpMaxSlots');
  4886. t.TTbutMaxSlots = document.getElementById ('ptttButMaxSlots');
  4887. t.TTbutMaxPerSlot = document.getElementById ('ptttButMaxPS');
  4888. t.TTinpPerSlot = document.getElementById ('ptttInpPS');
  4889. t.TTinpSlots = document.getElementById ('ptttInpSlots');
  4890. t.TTselType = document.getElementById ('ptttType');
  4891. t.TTbutDo = document.getElementById ('ptttButDo');
  4892. t.divTrainStatus = document.getElementById ('ptTrainStatus');
  4893. t.TTinpSlots.addEventListener ('change', t.updateTopTroops, false);
  4894. t.TTbutMaxPerSlot.addEventListener ('click', t.clickTroopMaxPS, false);
  4895. t.TTbutMaxSlots.addEventListener ('click', t.clickTroopMaxSlots, false);
  4896. t.TTselType.addEventListener ('change', t.changeTroopSelect, false);
  4897. t.TTbutDo.addEventListener ('click', t.clickTroopDo, false);
  4898. t.changeTroopSelect();
  4899. t.state = 1;
  4900. }
  4901.  
  4902. if (t.lastTroopSelect != t.TTselType.value)
  4903. t.changeTroopSelect();
  4904. t.displayCityStats();
  4905. t.updateTopTroops ();
  4906. t.timer = setTimeout (t.show, 5000);
  4907. },
  4908. updateTopTroops : function (){
  4909. var t = my.Train;
  4910. var slots = parseInt(t.TTinpSlots.value, 10);
  4911. if (isNaN(slots) || slots<0)
  4912. slots = 0;
  4913. t.TTspMax.innerHTML = t.stats.MaxTrain;
  4914. t.TTspMaxSlots.innerHTML = t.stats.barracks - t.stats.queued;
  4915. if (slots<1 || (t.stats.barracks-t.stats.queued < 1))
  4916. t.TTspMaxPS.innerHTML = 0;
  4917. else
  4918. t.TTspMaxPS.innerHTML = parseInt(t.stats.MaxTrain / slots);
  4919. },
  4920. clickTroopMaxPS : function (){
  4921. var t = my.Train;
  4922. var slots = parseInt(t.TTinpSlots.value, 10);
  4923. if (slots<1 || (t.stats.barracks-t.stats.queued < 1))
  4924. t.TTinpPerSlot.value = 0;
  4925. else
  4926. t.TTinpPerSlot.value = parseInt(t.stats.MaxTrain / slots);
  4927. },
  4928.  
  4929. clickTroopMaxSlots : function (){
  4930. var t = my.Train;
  4931. t.TTinpSlots.value = t.stats.barracks - t.stats.queued;
  4932. },
  4933. clickCitySelect : function (city){
  4934. var t = my.Train;
  4935. t.selectedCity = city;
  4936. var SourceId = t.selectedCity.c.id;
  4937. unsafeWindow.Chrome.City.switchTo(SourceId);
  4938. t.lastQueString = null;
  4939. //t.lastDQueString = null;
  4940. t.displayCityStats ();
  4941. t.changeTroopSelect();
  4942. //t.changeDefSelect();
  4943. },
  4944. changeTroopSelect : function (){
  4945. var t = my.Train;
  4946. var cityId = t.selectedCity.id;
  4947. // unitcost: NAME, Food, Wood, Stone, Ore, Gold, Pop, ?
  4948. var id = t.TTselType.value;
  4949. t.lastTroopSelect = id;
  4950. var uc = unsafeWindow.trainingData["unit"+id].costs.level0;
  4951. var max = 9999999999;
  4952. if ( (t.stats.food / uc["resource1"]) < max)
  4953. max = t.stats.food / uc["resource1"];
  4954. if ( (t.stats.wood / uc["resource2"]) < max)
  4955. max = t.stats.wood / uc["resource2"];
  4956. if ( (t.stats.stone / uc["resource3"]) < max)
  4957. max = t.stats.stone / uc["resource3"];
  4958. if ( (t.stats.ore / uc["resource4"]) < max)
  4959. max = t.stats.ore / uc["resource4"];
  4960. if ( (t.stats.idlePop / uc.population) < max)
  4961. max = t.stats.idlePop / uc.population;
  4962. t.stats.MaxTrain = parseInt (max);
  4963. if (t.stats.MaxTrain < 0)
  4964. t.stats.MaxTrain = 0;
  4965. /*
  4966. if (matTypeof(uc[8]) == 'object'){
  4967. for (k in uc[8]){ // check building requirement
  4968. var b = getCityBuilding (cityId, k.substr(1));
  4969. if (b.maxLevel < uc[8][k][1]){
  4970. t.stats.MaxTrain = 0;
  4971. break;
  4972. }
  4973. }
  4974. }
  4975. if (matTypeof(uc[9]) == 'object'){
  4976. for (k in uc[9]){ // check tech requirement
  4977. if (parseInt(Seed.tech['tch'+k.substr(1)]) < uc[9][k][1]){
  4978. t.stats.MaxTrain = 0;
  4979. break;
  4980. }
  4981. }
  4982. }*/
  4983. t.updateTopTroops();
  4984. },
  4985. clickTroopDo : function (){
  4986. var t = my.Train;
  4987. var cityId = t.selectedCity.id;
  4988. var unitId = t.TTselType.value;
  4989. var perSlot = parseInt(t.TTinpPerSlot.value, 10);
  4990. var numSlots = parseInt(t.TTinpSlots.value, 10);
  4991. t.displayCityStats ();
  4992. if (perSlot<1){
  4993. t.divTrainStatus.innerHTML = '<FONT COLOR=#550000>Number of troops per slot must be greater than 0.</font>';
  4994. return;
  4995. }
  4996. if (perSlot*numSlots > t.stats.MaxTrain){
  4997. t.divTrainStatus.innerHTML = '<FONT COLOR=#550000>Cannot train that many troops (max is '+ t.stats.MaxTrain +' total)</font>';
  4998. return;
  4999. }
  5000. if (numSlots<1 || numSlots>t.stats.barracks - t.stats.queued){
  5001. t.divTrainStatus.innerHTML = '<FONT COLOR=#550000>Invalid number of slots.</font>';
  5002. return;
  5003. }
  5004. t.setBusy(true);
  5005. var que = [];
  5006. for (var i=0; i<numSlots; i++)
  5007. que.push (['T', unitId, parseInt (perSlot)]);
  5008. t.divTrainStatus.innerHTML = '';
  5009. t.doQueue (cityId, que);
  5010. },
  5011.  
  5012. /******* DEF ******/
  5013. updateTopDef : function (){
  5014. var t = my.Train;
  5015. var slots = parseInt(t.TDinpSlots.value, 10);
  5016. if (isNaN(slots) || slots<0)
  5017. slots = 0;
  5018. t.TDspMax.innerHTML = 'max:'+ t.stats.MaxDefTrain +'&nbsp; owned:'+ t.stats.defOwned;
  5019. t.TDspMaxSlots.innerHTML = t.stats.wallLevel-t.stats.Dqueued;
  5020. if (slots<1)
  5021. t.TDspMaxPS.innerHTML = 0;
  5022. else
  5023. t.TDspMaxPS.innerHTML = parseInt(t.stats.MaxDefTrain / slots);
  5024.  
  5025. t.TDspSpace.innerHTML = 'Wall level: <B>'+ t.stats.wallLevel +'</b><BR>Wall space: '+ (t.stats.wallSpaceUsed+t.stats.wallSpaceQueued) +'/<B>'+ t.stats.wallSpace +'</b><BR>\
  5026. Field space: '+ (t.stats.fieldSpaceUsed+t.stats.fieldSpaceQueued) +'/<B>'+ t.stats.fieldSpace +'</b>';
  5027. },
  5028.  
  5029. changeDefSelect : function (){
  5030. var t = my.Train;
  5031. var cityId = t.selectedCity.id;
  5032. // unitcost: NAME, Food, Wood, Stone, Ore, Gold, Pop, ?
  5033. var id = t.TDselType.value;
  5034. t.lastDefSelect = id;
  5035. t.stats.defOwned = parseInt(Seed.fortifications['city' + cityId]['fort'+id]);
  5036. var uc = unsafeWindow.fortcost['frt'+id];
  5037. var max = 9999999999;
  5038. if ( (t.stats.food / uc[1]) < max)
  5039. max = t.stats.food / uc[1];
  5040. if ( (t.stats.wood / uc[2]) < max)
  5041. max = t.stats.wood / uc[2];
  5042. if ( (t.stats.stone / uc[3]) < max)
  5043. max = t.stats.stone / uc[3];
  5044. if ( (t.stats.ore / uc[4]) < max)
  5045. max = t.stats.ore / uc[4];
  5046. if ( (t.stats.idlePop / uc[6]) < max)
  5047. max = t.stats.idlePop / uc[6];
  5048. t.stats.MaxDefTrain = parseInt (max);
  5049. if (t.stats.MaxDefTrain < 0)
  5050. t.stats.MaxDefTrain = 0;
  5051. if (matTypeof(uc[8]) == 'object'){
  5052. for (k in uc[8]){ // check building requirement
  5053. var b = getCityBuilding (cityId, k.substr(1));
  5054. if (b.maxLevel < uc[8][k][1]){
  5055. t.stats.MaxDefTrain = 0;
  5056. break;
  5057. }
  5058. }
  5059. }
  5060. if (matTypeof(uc[9]) == 'object'){
  5061. for (k in uc[9]){ // check tech requirement
  5062. if (parseInt(Seed.tech['tch'+k.substr(1)]) < uc[9][k][1]){
  5063. t.stats.MaxDefTrain = 0;
  5064. break;
  5065. }
  5066. }
  5067. }
  5068.  
  5069. var spaceEach = parseInt(unsafeWindow.fortstats["unt"+ id][5]);
  5070. if (id<60)
  5071. var spaceAvail = t.stats.wallSpace - t.stats.wallSpaceUsed - t.stats.wallSpaceQueued;
  5072. else
  5073. var spaceAvail = t.stats.fieldSpace - t.stats.fieldSpaceUsed - t.stats.fieldSpaceQueued;
  5074. if ( t.stats.MaxDefTrain * spaceEach > spaceAvail)
  5075. t.stats.MaxDefTrain = parseInt(spaceAvail / spaceEach);
  5076. t.updateTopDef();
  5077. },
  5078. clickDefMaxPS : function (){
  5079. var t = my.Train;
  5080. var slots = parseInt(t.TDinpSlots.value, 10);
  5081. if (slots<1)
  5082. t.TDinpPerSlot.value = 0;
  5083. else
  5084. t.TDinpPerSlot.value = parseInt(t.stats.MaxDefTrain / slots);
  5085. },
  5086.  
  5087. clickDefMaxSlots : function (){
  5088. var t = my.Train;
  5089. t.TDinpSlots.value = t.stats.wallLevel-t.stats.Dqueued;
  5090. },
  5091. clickDefDo : function (){
  5092. var t = my.Train;
  5093. var cityId = t.selectedCity.id;
  5094. var unitId = t.TDselType.value;
  5095. var perSlot = parseInt(t.TDinpPerSlot.value, 10);
  5096. var numSlots = parseInt(t.TDinpSlots.value, 10);
  5097. t.displayCityStats ();
  5098. if (perSlot<1){
  5099. t.divTrainStatus.innerHTML = '<FONT COLOR=#550000>Number of units per slot must be greater than 0.</font>';
  5100. return;
  5101. }
  5102. if (perSlot*numSlots > t.stats.MaxDefTrain){
  5103. t.divTrainStatus.innerHTML = '<FONT COLOR=#550000>Cannot train that many troops (max is '+ t.stats.MaxDefTrain +' total)</font>';
  5104. return;
  5105. }
  5106. if (numSlots<1 || numSlots > t.stats.wallLevel-t.stats.Dqueued){
  5107. t.divTrainStatus.innerHTML = '<FONT COLOR=#550000>Invalid number of slots.</font>';
  5108. return;
  5109. }
  5110. t.setBusy(true);
  5111. var que = [];
  5112. for (var i=0; i<numSlots; i++)
  5113. que.push (['T', unitId, parseInt (perSlot)]);
  5114. t.divTrainStatus.innerHTML = '';
  5115. t.doDefQueue (cityId, que);
  5116. },
  5117.  
  5118. doDefQueue : function (cityId, que, errMsg){
  5119. var t = my.Train;
  5120. try {
  5121. t.displayCityStats();
  5122. if (errMsg){
  5123. t.dispTrainStatus ('<font color=#550000><B>ERROR: '+ errMsg +'</b></font><BR>');
  5124. t.setBusy(false);
  5125. return;
  5126. }
  5127. var cmd = que.shift();
  5128. if (!cmd){
  5129. t.dispTrainStatus ('<B>Done queueing defenses.</b><BR>');
  5130. t.setBusy(false);
  5131. return;
  5132. }
  5133. if (cmd[0] == 'T'){
  5134. t.dispTrainStatus ('Training '+ cmd[2] +' '+ fortNamesShort[cmd[1]] +'<BR>');
  5135. doDefTrain (cityId, cmd[1], cmd[2], function(errMsg){my.Train.doDefQueue(cityId, que, errMsg);} );
  5136. }
  5137. } catch (err) {
  5138. //logit (inspect (err, 8, 1));
  5139. t.dispTrainStatus ('<font color=#550000>PROGRAM ERROR: '+ err.message +'</font><BR>');
  5140. t.setBusy(false);
  5141. }
  5142. },
  5143. setBusy : function (tf){
  5144. var t = my.Train;
  5145. //t.TDbutDo.disabled = tf;
  5146. t.TTbutDo.disabled = tf;
  5147. },
  5148. displayCityStats : function (){
  5149. var t = my.Train;
  5150. var cityId = t.selectedCity.id;
  5151. t.stats.food = parseInt (Cities.byID[cityId].c.resources[1].count);
  5152. t.stats.wood = parseInt (Cities.byID[cityId].c.resources[2].count);
  5153. t.stats.stone = parseInt (Cities.byID[cityId].c.resources[3].count);
  5154. t.stats.ore = parseInt (Cities.byID[cityId].c.resources[4].count);
  5155. t.stats.gold = parseInt (Cities.byID[cityId].c.silver());
  5156. t.stats.idlePop = parseInt(Cities.byID[cityId].c.population.count()) - parseInt(Cities.byID[cityId].c.population.labor());
  5157. var c=(parseInt(unsafeWindow.Building.getLevelsSumForType(unsafeWindow.Constant.Building.BARRACKS))+(unsafeWindow.Building.getCountForType(unsafeWindow.Constant.Building.BARRACKS)*9))/10;
  5158.  
  5159. t.stats.barracks = unsafeWindow.Constant.Building.BARRACKS;
  5160. var m = '<CENTER><B>'+ Cities.byID[cityId].c.name +' &nbsp; ('+ Cities.byID[cityId].c.x +','+ Cities.byID[cityId].c.y +')</b></center><HR>';
  5161. m += '<TABLE class=ptTab width=100%><TR align=center>\
  5162. <TD width=18%><B>Food :</b></td><TD width=16%><B>Wood :</b></td><TD width=16%><B>Stone :</b></td>\
  5163. <TD width=16%><B>Iron :</b></td><TD width=16%><B>Silver :</b></td><TD width=16%><B>Population :</b></td></tr>\
  5164. <TR align=center><TD>'+ addCommasInt(t.stats.food) +'</td><TD>'+ addCommasInt(t.stats.wood) +'</td><TD>'+ addCommasInt(t.stats.stone) +'</td>\
  5165. <TD>'+ addCommasInt(t.stats.ore) +'</td><TD>'+ addCommasInt(t.stats.gold) +'</td>\
  5166. <TD>'+ addCommasInt(t.stats.idlePop) +'</td></tr></table><BR>';
  5167. document.getElementById ('divSTtop').innerHTML = m;
  5168. var totTime = 0;
  5169. var q=[];
  5170. if(Cities.byID[cityId].c.queues.training.active()){
  5171. f=Cities.byID[cityId].c.queues.training.activeSlots()[0];
  5172. q.push(f);
  5173. }
  5174. var c=Cities.byID[cityId].c.queues.training.queuedSlots();
  5175. if(c.length){c.each(function(h){q.push(h); }); }
  5176. var qs = q.toString();
  5177. var now = unixTime();
  5178. t.lastQueString = qs;
  5179. t.stats.queued = 0;
  5180. m = '<TABLE align=center class=ptTab>';
  5181. if (q!=null && q.length>0 ){
  5182. //t.fixQueTimes (q);
  5183. t.stats.queued = q.length;
  5184. first = true;
  5185. for (var i=0; i<q.length; i++){
  5186. //start = q[i].totalTime();
  5187. if (first) {
  5188. actual = q[i].totalTime();
  5189. end = q[i].secondsLeft();
  5190. } else
  5191. actual = q[i].totalTime();
  5192. if (actual < 0)
  5193. actual = 0;
  5194. param1=q[i].id;//; // numéro de position dans la fil d'attente
  5195. param2=cityId; // id de la ville
  5196. param3=q[i].typeId(); // Type de trouoe
  5197. param4=q[i].quantity(); // Qte troupe
  5198. param5=0;
  5199. param6=0;
  5200. param7=actual; // duree
  5201. m += '<TR align=right><td width=35 align=center>'+(i+1)+'&nbsp;<a onclick="BOcancelTraining('+param1+','+param2+','+param3+','+param4+','+param5+','+param6+','+param7+');return false;" href="javascript:void(0);"><img src="http://cdn1.iconfinder.com/data/icons/musthave/16/Remove.png" border=0 title="Cancel building"></a></td><TD>'+ q[i].quantity() +' </td><TD align=left> '+ unsafeWindow.arStrings.unitName["u"+q[i].typeId()];
  5202. if (first)
  5203. m += '</td><TD>&nbsp; '+ timestr(actual, true) +'</td><TD> (<SPAN id=ptttfq>'+ timestr(end, true) +'</span>)';
  5204. else
  5205. m += '</td><TD>&nbsp; '+ timestr(actual, true) +'</td></tr>';
  5206. //lastEnd = end;
  5207. first = false;
  5208. }
  5209. }
  5210. m += '</table>';
  5211. document.getElementById ('divSTleft').innerHTML = m;
  5212. m = t.stats.barracks +' barracks';
  5213. if (t.stats.queued > 0)
  5214. m += ', '+ t.stats.queued +' slots';
  5215. var f=0,tf=0;
  5216. c=Cities.byID[cityId].c.queues.training.activeSlots();
  5217. if(c.length){c.each(function(h){f=h.secondsLeft();tf+=f;});}
  5218. c=Cities.byID[cityId].c.queues.training.queuedSlots();
  5219. if(c.length){c.each(function(h){f=h.totalTime();tf+=f;});}
  5220. if (tf > 0)
  5221. m += ', '+ unsafeWindow.timestr(tf);
  5222. document.getElementById ('statTTtot').innerHTML = m;
  5223.  
  5224. },
  5225.  
  5226. dispTrainStatus : function (msg){
  5227. var t = my.Train;
  5228. t.divTrainStatus.innerHTML = msg + t.divTrainStatus.innerHTML;
  5229. },
  5230.  
  5231. doQueue : function (cityId, que, errMsg){
  5232. var t = my.Train;
  5233. try {
  5234. t.displayCityStats();
  5235. if (errMsg){
  5236. t.dispTrainStatus ('<font color=#550000><B>ERROR : '+ errMsg +'</b></font><BR>');
  5237. t.setBusy(false);
  5238. return;
  5239. }
  5240. var cmd = que.shift();
  5241. if (!cmd){
  5242. t.dispTrainStatus ('<B>Building succesful</b><BR>');
  5243. t.setBusy(false);
  5244. return;
  5245. }
  5246. if (cmd[0] == 'T'){
  5247. t.dispTrainStatus ('Formation : '+ cmd[2] +' '+ unsafeWindow.arStrings.unitName["u"+cmd[1]] +'<BR>');
  5248. t.doTrain (cityId, cmd[1], cmd[2], function(errMsg){my.Train.doQueue(cityId, que, errMsg);} );
  5249. }
  5250. } catch (err) {
  5251. //logit (inspect (err, 8, 1));
  5252. t.dispTrainStatus ('<font color=#550000>ERROR : '+ err.message +'</font><BR>');
  5253. t.setBusy(false);
  5254. }
  5255. },
  5256. doTrain :function (cityId, unitId, num, notify){
  5257. var t = my.Train;
  5258. if(!Cities.byID[cityId].c.queues.training.available()){
  5259. return;
  5260. }
  5261. var f={cid:cityId,type:unitId,quant:num,items:0};
  5262. f.tid=Cities.byID[cityId].c.queues.training.availableSlotIds()[0];
  5263. var e=unsafeWindow.trainingData["unit"+unitId].costs.level0;
  5264. unsafeWindow.AjaxCall.gPostRequest("train.php",f,
  5265. function(h) {
  5266. if (h.ok) {
  5267. unsafeWindow.KTrack.event(["_trackEvent","TrainUnit",String(unitId),unsafeWindow.player.level,num]);
  5268. unsafeWindow.KB.Models.Resource.addToSeed(unsafeWindow.Constant.ResourceType.GOLD,e.softcurrency*num*-1);
  5269. for(b=1;b<=4;b++){
  5270. unsafeWindow.KB.Models.Resource.addToSeed(b,e["resource"+b]*num*-1)
  5271. }
  5272. //document.getElementById('autoFError_'+cityId).innerHTML+=" <b>1</b>"
  5273. Cities.byID[cityId].c.population.remove(e.population*num);
  5274. //document.getElementById('autoFError_'+cityId).innerHTML+=" <b>2</b>"
  5275. z = new unsafeWindow.KB.Models.QueueSlot.Troop({id:f.tid,ticker:unsafeWindow.unixtime(),eta:unsafeWindow.unixtime()+Number(h.timeNeeded),target:num,type:unitId})
  5276. //document.getElementById('autoFError_'+cityId).innerHTML+=" <b>3</b>"
  5277. Cities.byID[cityId].c.queues.training.addSlotToEnd(z);
  5278. //unsafeWindow.Chrome.Queue.Training.select();
  5279. if (notify != null)
  5280. setTimeout (function (){notify(null);}, 100);
  5281. //t.dispTrainStatus ('<B>Formation effectu&eacute;e.</b><BR>');
  5282. // t.setBusy(false);
  5283. } else {
  5284. if (notify != null){
  5285. setTimeout (function (){notify(rslt.error_code);}, 100);
  5286. }
  5287. }
  5288. },
  5289. function(o) {
  5290. if (notify != null)
  5291. notify(o.errorMsg);
  5292. }
  5293. );
  5294. },
  5295. }
  5296.  
  5297.  
  5298. /*************************************** RESUME TAB ************************************************/
  5299.  
  5300.  
  5301. my.Overview = {
  5302. cont : null,
  5303. displayTimer : null,
  5304. checkBox:null,
  5305. checkBox1:null,
  5306. Overview : function (){
  5307. },
  5308.  
  5309. init : function (){
  5310. this.cont = document.createElement('div');
  5311. unsafeWindow.BOdefend = this.gatedef;
  5312. unsafeWindow.BORavive = this.ravive;
  5313. return this.cont;
  5314. },
  5315.  
  5316. getContent : function (){
  5317. return my.Overview.cont;
  5318. },
  5319.  
  5320. hide : function (){
  5321. clearTimeout (my.Overview.displayTimer);
  5322. },
  5323. gatedef: function(numc) {
  5324. var currentCity=Cities.cities[numc].c;
  5325. var a = !Cities.cities[numc].c.defending;
  5326. var b={cid:currentCity.id,state:a};
  5327. unsafeWindow.AjaxCall.gPostRequest("gate.php",b,function(c){
  5328.  
  5329. currentCity.defending=a;
  5330. if (a) {
  5331. document.getElementById("def_"+numc).value="DEF = ON";
  5332. document.getElementById("def_"+numc).className = 'BODefButOn';
  5333. }else {
  5334. document.getElementById("def_"+numc).value="DEF = OFF";
  5335. document.getElementById("def_"+numc).className = 'BODefButOff';
  5336. }
  5337. });
  5338. },
  5339. ravive:function(cityId, unitId, quant) {
  5340. var f={cid:cityId,type:unitId,quant:quant,et:10};
  5341. unsafeWindow.AjaxCall.gPostRequest("healUnits.php",f,
  5342. function(h) {
  5343. },
  5344. function(rslt) {
  5345. }
  5346. );
  5347.  
  5348. },
  5349. show : function (){
  5350. var rownum = 0;
  5351. var totalentre = 0;
  5352. var t = my.Overview;
  5353.  
  5354. clearTimeout (t.displayTimer);
  5355.  
  5356.  
  5357. dt = new Date ();
  5358. dt.setTime (unsafeWindow.player.datejoinUnixTime * 1000);
  5359. str = '<div style="height:670px;max-height:670px;overflow-y:auto"><DIV class=ptstat style="margin-top:2px; margin-bottom:2px; "><TABLE cellspacing=0 cellpadding=0 class=ptTab width=97% align=center>\
  5360. <TR align=left><TD><b>' + unsafeWindow.player.name + '</>&nbsp;&nbsp;<SPAN class=ptStatLight>Joined on :</span> '+ dt.toLocaleDateString() +'</td>\
  5361. <TD><SPAN class=ptStatLight>Glory : </span> ' + addCommasInt(unsafeWindow.player.might()) +'</td>\
  5362. <TD><SPAN class=ptStatLight>Alliance : </span> ' + getMyAlliance()[1] + '</td>\
  5363. <TD align=right><SPAN class=ptStatLight>World :</span> ' + unsafeWindow.domainName +'</td></tr></table></div><span id="debugtest"></span>';
  5364.  
  5365. str += "<TABLE class='ptTabOverview' cellpadding=0 cellspacing=0><TR valign=top align=right><TD width=100 style='font-size:16px'><center><a href='"+sitesupport+"' target=_blank><font size=4>"+ScriptName+"<br>"+Autore+"</font></a></td><TD width=88 style='background: #ffc;font-size:14px'><center><B>TOTALS</b></td>";
  5366. for(i=0; i<Cities.numCities; i++) {
  5367. Gate = Cities.cities[i].c.defending;
  5368. if(Gate == 0) {
  5369. var couleurr="#77EE77";
  5370. var stylbo = "BODefButOff";
  5371. var butvalue="DEF = OFF";
  5372. }else {
  5373. var couleurr="#EE7777";
  5374. var stylbo = "BODefButOn";
  5375. var butvalue="DEF = ON";
  5376. }
  5377. str += "<TD width=81 style='background-color:"+couleurr+";text-align:center' align=center><B>"+ Cities.cities[i].c.name +'</b><BR><a onclick="KB.Controllers.MapHelper.gotoCoord('+Cities.cities[i].c.x +','+ Cities.cities[i].c.y+');">('+Cities.cities[i].c.x +','+ Cities.cities[i].c.y+')</a><br><input type=button value="'+butvalue+'" id="def_'+i+'" class="'+stylbo+'" onclick="BOdefend('+i+');"></td>';
  5378. }
  5379. str +="</tr>";
  5380. str += "<tr><td><br></td></tr>";
  5381. var m="";
  5382. for(i=0; i<Cities.numCities; i++) {
  5383. color='black';
  5384. if (Cities.cities[i].c.queues.building.activeSlots()[0] || Cities.cities[i].c.queues.building.activeSlots()[1]) {
  5385. if (parseInt(Cities.cities[i].c.queues.building.activeSlots()[0].typeId())!=99) {
  5386. var temprestant=Cities.cities[i].c.queues.building.activeSlots()[0].secondsLeft();
  5387. } else {
  5388. if (Cities.cities[i].c.queues.building.activeSlots()[1]) {
  5389. var temprestant=Cities.cities[i].c.queues.building.activeSlots()[1].secondsLeft();
  5390. } else {
  5391. var temprestant=0;
  5392. color='red';
  5393. }
  5394. }
  5395. m += "<TD align=right width=81 style='background:#e8e8e8;color:"+color+";'>"+ timestrShort(temprestant) + "</td>";
  5396. } else {
  5397. m += "<TD align=right width=81 style='background:#e8e8e8;color:red;'>"+ timestrShort(0)+"</td>";
  5398. }
  5399. }
  5400. str += "<tr><td style='background: #e8e8e8' align=right><b>"+unsafeWindow.arStrings.Common.Buildings+"</td><td style='background: #e8e8e8' align=right>&nbsp;"+ m +"</tr>";
  5401. var m="";
  5402. for(i=0; i<Cities.numCities; i++) {
  5403. color='black';
  5404. if (Cities.cities[i].c.queues.research.activeSlots()[0]) {
  5405. m += "<TD align=right width=81 style='background:#e8e8e8;color:"+color+";'>"+ timestrShort(Cities.cities[i].c.queues.research.activeSlots()[0].secondsLeft())+"</td>";
  5406. } else {
  5407. m += "<TD align=right width=81 style='background:#e8e8e8;color:red;'>"+ timestrShort(0)+"</td>";
  5408. }
  5409. }
  5410. str += "<tr><td style='background: #e8e8e8' align=right><b>"+unsafeWindow.arStrings.Common.Research+"</td><td style='background: #e8e8e8' align=right>&nbsp;"+ m +"</tr>";
  5411. str += "<tr><td><br></td></tr>";
  5412. var m="";
  5413. for(i=0; i<Cities.numCities; i++) {
  5414. color='black';
  5415. var f=0;
  5416. var tf=0;
  5417. var c=Cities.cities[i].c.queues.training.activeSlots();
  5418. if(c.length){
  5419. c.each(function(h){
  5420. f=h.secondsLeft();
  5421. tf+=f;
  5422. });
  5423. }
  5424. var c=Cities.cities[i].c.queues.training.queuedSlots();
  5425. if(c.length){
  5426. c.each(function(h){
  5427. f=h.totalTime();
  5428. tf+=f;
  5429. });
  5430. }
  5431. m += "<TD align=right width=81 style='background:#e8e8e8;'>"+ timestr(tf)+"</td>";
  5432. }
  5433. str += "<tr><td style='background: #e8e8e8' align=right><b>"+unsafeWindow.arStrings.Common.Training+"</td><td style='background: #e8e8e8' align=right>&nbsp;"+ m +"</tr>";
  5434. var m="";
  5435. for(i=0; i<Cities.numCities; i++) {
  5436. color='black';
  5437. var f=0;
  5438. var tf=0;
  5439. var c=Cities.cities[i].c.queues.reviving.activeSlots();
  5440. if(c.length){
  5441. c.each(function(h){
  5442. f=h.secondsLeft();
  5443. tf+=f;
  5444. });
  5445. }
  5446. var c=Cities.cities[i].c.queues.reviving.queuedSlots();
  5447. if(c.length){
  5448. c.each(function(h){
  5449. f=h.totalTime();
  5450. tf+=f;
  5451. });
  5452. }
  5453. m += "<TD align=right width=81 style='background:#e8e8e8;'>"+ timestrShort(tf)+"</td>";
  5454. }
  5455. str += "<tr><td style='background: #e8e8e8' align=right><b>"+unsafeWindow.arStrings.Apothecary.Reviving+"</td><td style='background: #e8e8e8' align=right>&nbsp;"+ m +"</tr>";
  5456. str += "<tr><td><br></td></tr>";
  5457. var m="";
  5458. var popTotal=0;
  5459. for(i=0; i<Cities.numCities; i++) {
  5460. m += "<TD align=right width=81 style='background:#e8e8e8'>"+ addCommas(Cities.cities[i].c.population.cap()) +"</td>";
  5461. popTotal+=parseInt(Cities.cities[i].c.population.cap());
  5462. }
  5463. str += "<tr><td style='background: #e8e8e8' align=right><b>"+unsafeWindow.arStrings.ShowPopTooltip.PopLimit.substring(0,14)+"</td><td style='background: #e8e8e8' align=right>"+addCommas(popTotal)+" "+ m+"</tr>";
  5464. var m="";
  5465. var popTotal=0;
  5466. for(i=0; i<Cities.numCities; i++) {
  5467. m += "<TD align=right width=81 style='background:#e8e8e8'>"+ addCommas(Cities.cities[i].c.population.count()) +"</td>";
  5468. popTotal+=parseInt(Cities.cities[i].c.population.count());
  5469. }
  5470. str += "<tr><td style='background: #e8e8e8' align=right><b>"+unsafeWindow.arStrings.ShowPopTooltip.CurrPop.substring(0,14)+"</td><td style='background: #e8e8e8' align=right>"+addCommas(popTotal)+" "+ m+"</tr>";
  5471. var m="";
  5472. var popTotal=0;
  5473. for(i=0; i<Cities.numCities; i++) {
  5474. m += "<TD align=right width=81 style='background:#e8e8e8'>"+ addCommas(Cities.cities[i].c.population.labor()) +"</td>";
  5475. popTotal+=parseInt(Cities.cities[i].c.population.labor());
  5476. }
  5477. str += "<tr><td style='background: #e8e8e8' align=right><b>"+unsafeWindow.arStrings.ShowPopTooltip.LbForce.substring(0,14)+"</td><td style='background: #e8e8e8' align=right>"+addCommas(popTotal)+" "+ m+"</tr>";
  5478.  
  5479. var m="";
  5480. var popTotal=0;
  5481. for(i=0; i<Cities.numCities; i++) {
  5482. m += "<TD align=right width=81 style='background:#e8e8e8'>"+ addCommas(Cities.cities[i].c.population.count()-Cities.cities[i].c.population.labor()) +"</td>";
  5483. popTotal+=parseInt(Cities.cities[i].c.population.count()-Cities.cities[i].c.population.labor());
  5484. }
  5485. str += "<tr><td style='background: #e8e8e8' align=right><b>"+unsafeWindow.arStrings.ShowPopTooltip.IdlePop.substring(0,14)+"</td><td style='background: #e8e8e8' align=right>"+addCommas(popTotal)+" "+ m+"</tr>";
  5486.  
  5487. var m="";
  5488. var popTotal=0;
  5489. for(i=0; i<Cities.numCities; i++) {
  5490. if (Cities.cities[i].c.population.happiness()<50)
  5491. m += "<TD align=right width=81 style='background:#e8e8e8;color:red'><b>"+ Cities.cities[i].c.population.happiness() +" %</td>";
  5492. else
  5493. m += "<TD align=right width=81 style='background:#e8e8e8'>"+ Cities.cities[i].c.population.happiness() +" %</td>";
  5494. }
  5495. str += "<tr><td style='background: #e8e8e8' align=right><b>"+unsafeWindow.arStrings.Common.Happiness.substring(0,14)+"</td><td style='background: #e8e8e8' align=right>&nbsp; "+ m+"</tr>";
  5496. var m="";
  5497. var popTotal=0;
  5498. for(i=0; i<Cities.numCities; i++) {
  5499. m += "<TD align=right width=81 style='background:#e8e8e8'>"+ addCommas(Cities.cities[i].c.taxRate()) +" %</td>";
  5500. }
  5501. str += "<tr><td style='background: #e8e8e8' align=right><b>"+unsafeWindow.arStrings.MainChrome.TaxRate.substring(0,14)+"</td><td style='background: #e8e8e8' align=right>&nbsp; "+ m+"</tr>";
  5502.  
  5503.  
  5504.  
  5505. str += "<tr><td><br></td></tr>";
  5506. var m="";
  5507. var goldTotal=0;
  5508. for(i=0; i<Cities.numCities; i++) {
  5509. m += "<TD width=81 style='background:#e8e8e8' align=right>"+ addCommas(Cities.cities[i].c.silver()) +'</td>';
  5510. goldTotal+=parseInt(Cities.cities[i].c.silver());
  5511. }
  5512. str += "<tr align=right><td style='background:#e8e8e8' align=right><b>"+unsafeWindow.arStrings.Common.Silver+"</td><td style='background:#e8e8e8' align=right>"+addCommas(goldTotal)+" "+ m + "</tr>" ;
  5513. for (var nbr=1; nbr<=4; nbr++) {
  5514. if (nbr % 2)
  5515. style = '';
  5516. else
  5517. style = " style = 'background: #e8e8e8'";
  5518. var m="";
  5519. var resTotal=0;
  5520. for(var i=0; i<Cities.numCities; i++) {
  5521. m += "<TD width=81 "+style+" align=right>"+ addCommas(Cities.cities[i].c.resources[nbr].count) +'</td>';
  5522. resTotal+=parseInt(Cities.cities[i].c.resources[nbr].count);
  5523. }
  5524. str += "<tr><td "+style+" align=right><b>"+unsafeWindow.arStrings.ResourceName[nbr]+"</td><td "+style+" align=right>"+addCommas(resTotal)+" "+ m+"</tr>";
  5525. }
  5526. str += "<tr><td><br></td></tr>";
  5527. // Production de Food + ENTRETIEN !
  5528. var m="";
  5529. var prodTotal=0;
  5530. for(i=0; i<Cities.numCities; i++) {
  5531. m += "<TD align=right width=81 style='background:#e8e8e8'>"+ addCommas(Cities.cities[i].c.resources[1].hourlyTotalRate())+"/"+unsafeWindow.arStrings.TimeStr.timeHr+"</td>";
  5532. prodTotal+=parseInt(Cities.cities[i].c.resources[1].hourlyTotalRate());
  5533. }
  5534. str += "<tr><td style='background: #e8e8e8' align=right><b>"+unsafeWindow.arStrings.Common.Production+"</td><td style='background: #e8e8e8' align=right>"+addCommas(prodTotal)+"/"+unsafeWindow.arStrings.TimeStr.timeHr+""+ m+"</tr>";
  5535. var m="";
  5536. var entTotal=0;
  5537. for(i=0; i<Cities.numCities; i++) {
  5538. color='black';
  5539. // if ( parseInt(Cities.cities[i].c.resources[1].hourlyTotalRate()) < Cities.cities[i].c.upkeep() ) color='red';
  5540. m += "<TD align=right width=81 style='background:#e8e8e8;color:"+color+";'>"+ addCommas(Cities.cities[i].c.upkeep())+"/"+unsafeWindow.arStrings.TimeStr.timeHr+"</td>";
  5541. entTotal+=parseInt(Cities.cities[i].c.upkeep());
  5542. }
  5543. str += "<tr><td style='background: #e8e8e8' align=right><b>"+unsafeWindow.arStrings.Common.UpKeep+"</td><td style='background: #e8e8e8' align=right>"+addCommas(entTotal)+"/"+unsafeWindow.arStrings.TimeStr.timeHr+""+ m+"</tr>";
  5544.  
  5545. var m="";
  5546. var entTotal=0;
  5547. var variiiable="Script BoiteOutils" + " par "+ "Be"+"World";
  5548. for(i=0; i<Cities.numCities; i++) {
  5549. color='black';
  5550. if ( parseInt(Cities.cities[i].c.resources[1].hourlyTotalRate()) < parseInt(Cities.cities[i].c.upkeep()) ) {
  5551. // entretien supérieur à la production
  5552. difference = parseInt(Cities.cities[i].c.resources[1].hourlyTotalRate()) - parseInt(Cities.cities[i].c.upkeep());
  5553. var timeLeft = parseInt(Cities.cities[i].c.resources[1].count) / (0-difference) * 3600;
  5554. if (timeLeft > 86313600)
  5555. autonomi = '----';
  5556. else {
  5557. if (timeLeft<(Options.foodWarnHours*3600)) {
  5558. autonomi = '<SPAN class=whiteOnRed><b>'+ timestrShort(timeLeft) +'</b></span>';
  5559. } else {
  5560. autonomi = ''+ timestrShort(timeLeft) +'';
  5561. }
  5562. }
  5563. m += "<TD align=right width=81 style='background:#e8e8e8;color:"+color+";'>"+ autonomi +"</td>";
  5564. } else {
  5565. m += "<TD align=right width=81 style='background:#e8e8e8;color:black;'>---</td>";
  5566. }
  5567.  
  5568. }
  5569. str += "<tr><td style='background: #e8e8e8' align=right><b>"+unsafeWindow.arStrings.Common.TimeRemaining+"</td><td style='background: #e8e8e8' align=right>&nbsp;"+ m+"</tr>";
  5570. str += "<tr><td><br></td></tr>";
  5571. unsafeWindow.Barracks.allUnitIds.each(function(nbu){
  5572. var m="";
  5573. var unitTotal=0;
  5574. var unitWTotal=0;
  5575. if (unsafeWindow.arStrings.unitName["u"+nbu]) {
  5576. if (nbu % 2)
  5577. style = '';
  5578. else
  5579. style = " style = 'background: #e8e8e8'";
  5580. for(var i=0; i<Cities.numCities; i++) {
  5581. var wonded=Cities.cities[i].c.troops[nbu].wounded();
  5582. var wondedst="";
  5583. if (wonded>0) wondedst=" (<a onclick='BORavive("+Cities.cities[i].c.id+","+nbu+","+parseIntNan(wonded)+");'><font color=red>"+addCommas(wonded)+"</font></a>)";
  5584. m += "<TD width=81 "+style+" align=right>"+ addCommas(Cities.cities[i].c.troops[nbu].count()) +''+wondedst+'</td>';
  5585. unitTotal+=parseInt(Cities.cities[i].c.troops[nbu].count());
  5586. unitWTotal+=parseInt(Cities.cities[i].c.troops[nbu].wounded());
  5587. }
  5588. var unitstring="";
  5589. if (unitWTotal>0) unitstring=" (<font color=red>"+addCommas(unitWTotal)+"</font>)";
  5590. str += "<tr><td "+style+" align=right><b>"+unsafeWindow.arStrings.unitName["u"+nbu]+"</td><td "+style+" align=right>"+addCommas(unitTotal)+""+unitstring+" "+ m + "</tr>";
  5591. }
  5592. });
  5593. str += "<tr><td><br></td></tr>";
  5594. var m="";
  5595. var genTotal=0,genEnergyTotal=0,gendispoTotal=0,gendispo=0;
  5596. for(i=0; i<Cities.numCities; i++) {
  5597. color='black';
  5598. Cities.cities[i].c.generalsSorted().each(function(b){if(b.energy()>0){ gendispo+=b.available()?1:0; }});
  5599. m += "<TD align=right width=81 style='background:#e8e8e8;color:"+color+";'>"+gendispo+"/"+ Cities.cities[i].c.generalsCount()+"</td>";
  5600. gendispoTotal+=gendispo
  5601. genTotal+=parseInt(Cities.cities[i].c.generalsCount());
  5602. gendispo=0
  5603. Cities.cities[i].c.generalsSorted().each(function(b){if(b.energy()>0){ genEnergyTotal+=parseInt(b.energy()); }});
  5604. }
  5605. str += "<tr><td style='background: #e8e8e8' align=right><b>"+unsafeWindow.arStrings.Common.Generals+"</td><td style='background: #e8e8e8' align=right>"+gendispoTotal+" / "+genTotal+""+m+"</tr>";
  5606. str += "<tr><td style='background: #e8e8e8' align=right><b>"+unsafeWindow.arStrings.Common.Energy+" total</td><td style='background: #e8e8e8' align=right>"+genEnergyTotal+"</tr>";
  5607. str += "<tr><td><br></td></tr>";
  5608. var m="";
  5609. var wildTotal=0;
  5610. for(i=0; i<Cities.numCities; i++) {
  5611. color='black';
  5612. m += "<TD align=right width=81 style='background:#e8e8e8;color:"+color+";'>"+ Cities.cities[i].c.wildernessCount()+" / "+Cities.cities[i].c.buildings[0].level()+"</td>";
  5613. wildTotal+=parseInt(Cities.cities[i].c.wildernessCount());
  5614. }
  5615. str += "<tr><td style='background: #e8e8e8' align=right><b>"+unsafeWindow.arStrings.Common.Wild.substring(0,14)+"</td><td style='background: #e8e8e8' align=right>"+wildTotal+""+m+"</tr>";
  5616.  
  5617. str += "</table>";
  5618. my.Overview.cont.innerHTML = str +'</div>';
  5619. t.displayTimer = setTimeout (t.show, 10000);
  5620. },
  5621. };
  5622.  
  5623. my.autoFormation= {
  5624. cont : null,
  5625. displayTimer : null,
  5626. state : null,
  5627. numcity :-1,
  5628. init : function (){
  5629. var t = my.autoFormation;
  5630. t.cont = document.createElement('div');
  5631. t.state = null;
  5632. setInterval(t.Start,parseInt(TrainOptions.timelauch*1000));
  5633. return t.cont;
  5634. },
  5635. Start: function() {
  5636. var t = my.autoFormation;
  5637. if (!TrainOptions.Running) return;
  5638. if (t.numcity<Cities.numCities-1) {
  5639. t.numcity++;
  5640. } else {
  5641. t.numcity=0;
  5642. }
  5643. var c=t.numcity;
  5644. var cityId=Cities.cities[c].c.id;
  5645. if (!TrainOptions.listactif[cityId]) t.Start();
  5646. var populationdispo = parseInt(Cities.cities[c].c.population.labor());
  5647. var popAvail=parseInt(Cities.cities[c].c.population.count());
  5648. var popTotal=parseInt(Cities.cities[c].c.population.cap());
  5649. var labourTotal=parseInt(Cities.cities[c].c.population.labor());
  5650. var idleTotal=(popAvail-labourTotal);
  5651. var popNeeded=parseInt((TrainOptions.pourcpop/100)*(popAvail-labourTotal));//+labourTotal;
  5652. var availableTrainingSlots=Cities.cities[c].c.queues.training.available()
  5653. maxunite = t.unitemax(cityId, TrainOptions.list[Cities.cities[c].c.id]);
  5654. if(idleTotal>=popNeeded && availableTrainingSlots && maxunite>=parseIntNan(TrainOptions.unitemin[Cities.cities[c].c.id]) && TrainOptions.listactif[Cities.cities[c].c.id]) {
  5655. var unitId = TrainOptions.list[cityId];
  5656. var num = parseInt(maxunite * parseInt(TrainOptions.pourctot) / 100);
  5657. if (document.getElementById('autoFError_'+cityId)) document.getElementById('autoFError_'+cityId).innerHTML="Initiating building "+num+" "+unsafeWindow.arStrings.unitName["u"+ unitId]+"";
  5658. var f={cid:cityId,type:unitId,quant:num,items:0};
  5659. f.tid=Cities.byID[cityId].c.queues.training.availableSlotIds()[0];
  5660. var e=unsafeWindow.trainingData["unit"+unitId].costs.level0;
  5661. unsafeWindow.AjaxCall.gPostRequest("train.php",f,
  5662. function(h) {
  5663. unsafeWindow.KTrack.event(["_trackEvent","TrainUnit",String(unitId),unsafeWindow.player.level,num]);
  5664. unsafeWindow.KB.Models.Resource.addToSeed(unsafeWindow.Constant.ResourceType.GOLD,e.softcurrency*num*-1);
  5665. for(b=1;b<=4;b++){
  5666. unsafeWindow.KB.Models.Resource.addToSeed(b,e["resource"+b]*num*-1)
  5667. }
  5668. Cities.byID[cityId].c.population.remove(e.population*num);
  5669. z = new unsafeWindow.KB.Models.QueueSlot.Troop({id:f.tid,ticker:unsafeWindow.unixtime(),eta:unsafeWindow.unixtime()+Number(h.timeNeeded),target:num,type:unitId})
  5670. Cities.byID[cityId].c.queues.training.addSlotToEnd(z);
  5671. },
  5672. function(rslt) {
  5673. if (document.getElementById('autoFError_'+cityId)) document.getElementById('autoFError_'+cityId).innerHTML+=" <b>Error</b>";
  5674. }
  5675. );
  5676. } else {
  5677. if (document.getElementById('autoFError_'+cityId)) document.getElementById('autoFError_'+cityId).innerHTML =" <span title='ACtif : "+TrainOptions.listactif[Cities.cities[c].c.id]+" - popAvail : "+popAvail+" - idleTotal : "+idleTotal+" > popNeeded "+popNeeded+" - availableTrainingSlots : "+availableTrainingSlots+"'>\
  5678. <b>Conditions not met</b></span>";
  5679. }
  5680. },
  5681. unitemax : function(currentcityid, e){
  5682. var b=[],a=[],
  5683. d=unsafeWindow.Number.POSITIVE_INFINITY,
  5684. f=unsafeWindow.trainingData["unit"+e].costs.level0,
  5685. c;
  5686. b.push(f.softcurrency);
  5687. a.push(Cities.byID[currentcityid].c.silver());
  5688. for(c=1;c<=4;c++)
  5689. {
  5690. b.push(f["resource"+c]);
  5691. a.push(unsafeWindow.KB.Models.Resource.getCountForType(c))
  5692. }
  5693. b.push(f.population);
  5694. a.push(Cities.byID[currentcityid].c.population.idle());
  5695. for(c=0;c<b.length;c++)
  5696. {
  5697. if(Number(b[c])!==0){
  5698. d=Math.floor(Math.min(d,a[c]/b[c]))
  5699. }
  5700. }
  5701. return d
  5702. },
  5703. getContent : function (){
  5704. var t = my.autoFormation;
  5705. return t.cont;
  5706. },
  5707. hide : function (){
  5708. var t = my.autoFormation;
  5709. t.state = null;
  5710. clearTimeout (t.displayTimer);
  5711. },
  5712. show : function (){
  5713. var t = my.autoFormation;
  5714. m = "<DIV class=ptstat>AUTO-BUILDING TROOPS</div>";
  5715. m += "<TABLE width=600 class=ptTab border=0 align=center>\
  5716. <tr align=center valign=top>"
  5717. if (TrainOptions.Running == false) {
  5718. m += '<TD><INPUT id=autoFormationtoggle type=submit value="AUTO-BUILDING = OFF"></td>';
  5719. } else {
  5720. m += '<TD><INPUT id=autoFormationtoggle type=submit value="AUTO-BUILDING = ON"></td>';
  5721. }
  5722. m+="</tr></table>";
  5723. m += "<TABLE width=100% class=ptTab border=0 align=center><tr align=right><td align=right>#</td><td align=right>Active</><td align=right>City</td><td align=right>Troop type</td><td>Troops</td><td align=right>Actions</td></tr>";
  5724. for (var c=0; c<Cities.numCities; c++) {
  5725. cityId=Cities.cities[c].c.id;
  5726. m+="<tr><td width=5% align=right>"+(c+1)+"</td><td align=right>";
  5727. if (TrainOptions.listactif && TrainOptions.listactif[cityId] == false) {
  5728. m+="<input type=checkbox id='autoFCheck_"+cityId+"'>";
  5729. }else {
  5730. m+="<input checked type=checkbox id='autoFCheck_"+cityId+"'>";
  5731. }
  5732. m+="</td><td width=15% align=center>"+Cities.cities[c].c.name+"</td><TD align=center><SELECT id='autoFType_"+cityId+"'>";
  5733. // for (var r=1; r<13; r++){
  5734. unsafeWindow.Barracks.allUnitIds.each(function(r){
  5735. var faux = 0;
  5736. if (unsafeWindow.arStrings.unitName["u"+r]) {
  5737. if (faux==0) {
  5738. if (TrainOptions.list) {
  5739. if (r==TrainOptions.list[cityId]) {
  5740. m+= "<option selected value='"+r+"'>"+unsafeWindow.arStrings.unitName["u"+r]+"</option>";
  5741. } else {
  5742. m+= "<option value='"+r+"'>"+unsafeWindow.arStrings.unitName["u"+r]+"</option>";
  5743. }
  5744. }else{
  5745. if (r==2) {
  5746. m+= "<option selected value='"+r+"'>"+unsafeWindow.arStrings.unitName["u"+r]+"</option>";
  5747. } else {
  5748. m+= "<option value='"+r+"'>"+unsafeWindow.arStrings.unitName["u"+r]+"</option>";
  5749. }
  5750. }
  5751. } // fin de faux
  5752. } // fin de l'existance
  5753. }); // fin for
  5754. if (TrainOptions.unitemin[cityId]==undefined) TrainOptions.unitemin[cityId]=0;
  5755. m+= "</select></td><td><input type=text value='"+ parseIntNan(TrainOptions.unitemin[cityId]) +"' id='aFunitemin_"+cityId+"' size=3></td><td align=right width=40%><span id='autoFError_"+cityId+"'></span></td></tr>";
  5756. }
  5757. m+="</table><table width=100% class=ptTab border=0><tr><td><u>Options :</u><br><input id=aFtimelauch type=text size=2 value='"+parseIntNan(TrainOptions.timelauch)+"'> seconds of building between cities\
  5758. <br>Start at <input type=text size=2 id='aFpourcpop' value='"+ parseInt(TrainOptions.pourcpop) +"'>% of the population available <br>Use at <input type=text size=2 id='aFpourctot' value='"+ parseInt(TrainOptions.pourctot) +"'> % of the population available.<br><br><br>IF YOU GET ANY ERRORS, CHECK IF YOUR CITY HAS ENOUGH FOOD AND RESOURCES !<br>";
  5759. m+="</td><td with=50%><input type=button value='"+unsafeWindow.arStrings.Common.Save_Button+"' id=autoFSave></td></tr></table>";
  5760. t.cont.innerHTML = m;
  5761. document.getElementById('autoFormationtoggle').addEventListener('click', function(){t.toggleautoFormationState(this)} , false);
  5762. document.getElementById('autoFSave').addEventListener('click', t.saveOptionsAutoF , false);
  5763. },
  5764. saveOptionsAutoF: function() {
  5765. var t = my.autoFormation;
  5766. document.getElementById('autoFSave').style.backgroundColor="#F18888";
  5767. TrainOptions.list={};
  5768. TrainOptions.listactif={};
  5769. TrainOptions.timelauch=document.getElementById('aFtimelauch').value;
  5770. TrainOptions.pourcpop=document.getElementById('aFpourcpop').value;
  5771. TrainOptions.pourctot=document.getElementById('aFpourctot').value;
  5772. TrainOptions.unitemin={};
  5773. for (var c=0; c<Cities.numCities; c++) {
  5774. TrainOptions.list[Cities.cities[c].c.id] = document.getElementById('autoFType_'+Cities.cities[c].c.id).value;
  5775. TrainOptions.listactif[Cities.cities[c].c.id] = document.getElementById('autoFCheck_'+Cities.cities[c].c.id).checked;
  5776. TrainOptions.unitemin[Cities.cities[c].c.id]=document.getElementById('aFunitemin_'+Cities.cities[c].c.id).value;
  5777. }
  5778. saveTrainingOptions();
  5779. setTimeout(function() {
  5780. document.getElementById('autoFSave').style.backgroundColor="";
  5781. }, 600);
  5782. },
  5783. toggleautoFormationState : function(obj) {
  5784. var t = my.autoFormation;
  5785. // on mémorise les listes déroulante !
  5786. if (TrainOptions.Running == true) {
  5787. TrainOptions.Running = false;
  5788. obj.value = "AUTO-BUILD = OFF";
  5789. saveTrainingOptions();
  5790. } else {
  5791. TrainOptions.Running = true;
  5792. obj.value = "AUTO-BUILD = ON";
  5793. saveTrainingOptions();
  5794. }
  5795. },
  5796. };
  5797.  
  5798.  
  5799. /*** ONLGET RECHERCHE JOUEUR ET BIENTOT ALLIANCE ****/
  5800. my.AllianceList = {
  5801. cont : null,
  5802. nombre: null,
  5803. state : null,
  5804. dat : [],
  5805.  
  5806. init : function (){
  5807. var t = my.AllianceList;
  5808. t.cont = document.createElement('div');
  5809. //t.nombre=0;
  5810. unsafeWindow.PTgetMembers = t.eventGetMembers;
  5811. //unsafeWindow.PTDme = t.eventGetLienMember;
  5812. unsafeWindow.PTpd = t.clickedPlayerDetail;
  5813. unsafeWindow.PTpl = t.clickedPlayerLeaderboard;
  5814. unsafeWindow.PCplo = t.clickedPlayerGetLastLogin;
  5815. //unsafeWindow.PTalClickPrev = t.eventListPrev;
  5816. //unsafeWindow.PTalClickNext = t.eventListNext;
  5817. return t.cont;
  5818. },
  5819. getContent : function (){
  5820. var t = my.AllianceList;
  5821. return t.cont;
  5822. },
  5823.  
  5824. hide : function (){
  5825. var t = my.AllianceList;
  5826.  
  5827. },
  5828.  
  5829. show : function (){
  5830. var t = my.AllianceList;
  5831. if (t.state == null){
  5832. var m = '<DIV class=ptentry><TABLE width=100% cellpadding=0>\
  5833. <TR><TD class=xtab align=right></td><TD class=xtab>(Partial) name player : &nbsp;</td>\
  5834. <TD width=80% class=xtab><INPUT id=allPlayName size=20 type=text /> &nbsp; <INPUT id=playSubmit type=submit value="Search Player" /></td>\
  5835. <TD class="xtab ptErrText"><SPAN id=ptplayErr></span></td></tr>\
  5836. <TR><TD class=xtab> OR </td><TD class=xtab>(Partial) name alliance : &nbsp;</td>\
  5837. <TD class=xtab><INPUT id=allAllName type=text /> &nbsp; <INPUT id=allSubmit type=submit value="Search alliance" /></td>\
  5838. <TD class="xtab ptErrText"><SPAN id=ptallErr></span></td></tr>\
  5839. </table><span style="vertical-align:middle;" id=altInput></span></div>\
  5840. <SPAN id=allListOut></span>';
  5841. t.cont.innerHTML = m;
  5842. document.getElementById('allSubmit').addEventListener ('click', t.eventSubmit, false);
  5843. document.getElementById('playSubmit').addEventListener ('click', t.eventPlayerSubmit, false);
  5844. document.getElementById('allPlayName').addEventListener ('focus', function (){document.getElementById('ptplayErr').innerHTML='';}, false);
  5845. document.getElementById('allAllName').addEventListener ('focus', function (){document.getElementById('ptallErr').innerHTML='';}, false);
  5846. t.state = 1;
  5847. }
  5848. },
  5849. aName : '',
  5850. eventSubmit : function (){
  5851. var t = my.AllianceList;
  5852. document.getElementById('ptallErr').innerHTML='';
  5853. t.aName = document.getElementById('allAllName').value;
  5854. if (t.aName.length < 3){
  5855. document.getElementById('ptallErr').innerHTML = '3 caracteres minimum';
  5856. return;
  5857. }
  5858. document.getElementById('altInput').innerHTML = '';
  5859. document.getElementById('allListOut').innerHTML = '<BR><BR><CENTER>Searching...</center>';
  5860. t.fetchAllianceList (t.aName, null, t.eventGotAllianceList);
  5861. },
  5862. fetchAllianceList : function (allianceName, myAid, notify) { // at least 3 chars :)
  5863. var t = my.AllianceList;
  5864. unsafeWindow.AjaxCall.gPostRequest("allianceGetSearchResults.php",{allianceName:allianceName},
  5865. function (rslt) {
  5866. notify (rslt);
  5867. },
  5868. function (rslt) {
  5869. notify (rslt);
  5870. });
  5871. },
  5872.  
  5873. fetchMyAllianceInfo : function (notify){
  5874. unsafeWindow.AjaxCall.gPostRequest("allianceGetInfo.php",{},
  5875. function (rslt) {
  5876. notify (rslt);
  5877. },
  5878. function (rslt) {
  5879. notify (rslt);
  5880. });
  5881. },
  5882. eventGotAllianceList : function (rslt){
  5883. var t = my.AllianceList;
  5884. if (!rslt.ok){
  5885. document.getElementById('allListOut').innerHTML = rslt.msg;
  5886. return;
  5887. }
  5888. var m = '<DIV class=ptstat>Results for : <B>"'+ t.aName +'"</b></div>\
  5889. <TABLE cellpadding=3 width=80% cellspacing=0 class=ptTab><TR><TD class=xtab style="font-weight:bold;">Name alliance</td><TD class=xtab style="font-weight:bold;">Rank</td><TD class=xtab style="font-weight:bold;">Members</td>\
  5890. <TD align=right class=xtab style="font-weight:bold;">Glory</td><TD class=xtab style="font-weight:bold;">Diplomacy</td><TD class=xtab style="font-weight:bold;">Members</td></tr>';
  5891. for (k in rslt.alliancesMatched){
  5892. var all = rslt.alliancesMatched[k];
  5893. var dip = '';
  5894. if (all.relation && all.relation==1)
  5895. dip = 'Friendly';
  5896. else if (all.relation && all.relation==2)
  5897. dip = 'Hostile';
  5898. if (all.ranking!=null) {
  5899. m += '<TR><TD class=xtab>'+ all.allianceName +'</td><TD align=right class=xtab>'+ all.ranking +'</td><TD align=right class=xtab>'+ all.membersCount +'</td>\
  5900. <TD align=right class=xtab >'+ addCommasInt(all.might) +'</td><TD class=xtab>'+ dip +'</td>\
  5901. <TD class=xtab><a onclick="PTgetMembers('+ all.allianceId +')">See members</a></td></tr>';
  5902. }
  5903. }
  5904. document.getElementById('allListOut').innerHTML = m;
  5905. },
  5906. eventGetMembers : function (aid){
  5907. var t = my.AllianceList;
  5908. document.getElementById('allListOut').innerHTML = '<BR><BR><CENTER>Searching....</center>';
  5909. t.fetchAllianceMemberList (aid, t.eventGotMemberList);
  5910. },
  5911. fetchAllianceMemberList : function (allianceId, notify) {
  5912. var t = my.AllianceList;
  5913. var c = {};
  5914. c.action= "view_alliance_detail";
  5915. if (allianceId && allianceId != 0)
  5916. c.allianceId = allianceId;
  5917. unsafeWindow.AjaxCall.gPostRequest("allianceGetMembersInfo.php", c,
  5918. function (rslt) {
  5919. notify (rslt);
  5920. },
  5921. function (rslt) {
  5922. notify (rslt);
  5923. });
  5924. },
  5925. eventGotMemberList : function (rslt){
  5926. var t = my.AllianceList;
  5927. if (!rslt.ok){
  5928. document.getElementById('allListOut').innerHTML = rslt.errorMsg;
  5929. return;
  5930. }
  5931. t.memberListRslt = rslt;
  5932. var uList = [];
  5933. for (k in rslt.memberInfo)
  5934. uList.push (rslt.memberInfo[k].userId);
  5935. t.fetchPlayerStatus (uList, function(r){t.eventGotMemberOnlineList(r)});
  5936. },
  5937. eventGotMemberOnlineList : function (rslt){
  5938. var t = my.AllianceList;
  5939. var numInvalid = 0;
  5940. var numPlayers = 0;
  5941. //var myA = getMyAlliance ();
  5942. t.dat = [];
  5943.  
  5944. for (var i in t.memberListRslt.memberInfo){
  5945. p = t.memberListRslt.memberInfo[i];
  5946. if (p.userId == 0){
  5947. ++numInvalid;
  5948. } else {
  5949. ++numPlayers;
  5950. t.dat.push ([p.genderAndName, parseInt(p.might), p.positionType, parseInt(p.cities), p.userId, p.name, p.dateJoined, p.avatarurl, p.title, 'NA']);
  5951. }
  5952. }
  5953. t.displayMembers (t.memberListRslt.allianceName, numPlayers);
  5954. },
  5955. sortColNum : 1,
  5956. sortDir : 1,
  5957. displayMembers : function (allName, numPlayers){
  5958. var t = my.AllianceList;
  5959. function alClickSort (e){
  5960. var t = my.AllianceList;
  5961. var newColNum = e.id.substr(8);
  5962. document.getElementById('clickCol'+t.sortColNum).className = 'clickable';
  5963. e.className='clickable clickableSel';
  5964. if (newColNum == t.sortColNum)
  5965. t.sortDir *= -1;
  5966. else
  5967. t.sortColNum = newColNum;
  5968. t.reDisp();
  5969. }
  5970. unsafeWindow.PTalClickSort = alClickSort;
  5971. var m = '<STYLE>.clickable{background-color:#ddd; border:2px outset; border-color:#555; padding-left:5px; padding-right:5px}\
  5972. .clickableSel{background-color:#ffffcc;}\
  5973. .xxtab{background-color:none; padding-left:5px; padding-right:5px;} </style>\
  5974. <DIV class=ptstat><TABLE id=tabAllMembers cellpadding=0 width=100%><TR font-weight:bold"><TD class=xtab> &nbsp; '+ allName +'</td>\
  5975. <TD class=xtab width=80% align=center>&nbsp;</td><TD class=xtab align=right>'+ numPlayers +' Players found </td></tr></table></div>';
  5976. m += '<div style="top:190px;left:0px;width:100%; position:absolute;max-height:475px;height:470px;overflow:auto;">\
  5977. <TABLE id=tabAllMembers align=center cellpadding=0 cellspacing=0><THEAD>\
  5978. <TR style="font-weight:bold"><TD id=clickCol0 onclick="PTalClickSort(this)" class=clickable><A><DIV>Player</div></a></td>\
  5979. <TD id=clickCol2 onclick="PTalClickSort(this)" class=clickable><A><Div>Position</a></div></td>\
  5980. <TD id=clickCol1 onclick="PTalClickSort(this)" class=clickable align=center><A><DIV>Glory</a></div></td>\
  5981. <TD id=clickCol3 onclick="PTalClickSort(this)" class=clickable><A><DIV>Cities</a></div></td>\
  5982. <TD id=clickCol8 onclick="PTalClickSort(this)" class=clickable><A><DIV>Level</a></div></td>\
  5983. </tr></thead>\
  5984. <tbody id=allBody ></tbody></table></div>';
  5985. document.getElementById('allListOut').innerHTML = m;
  5986. document.getElementById('clickCol'+t.sortColNum).className = 'clickable clickableSel';
  5987. t.reDisp();
  5988. },
  5989. // sort and display
  5990. reDisp : function (){
  5991. var t = my.AllianceList;
  5992. function sortFunc (a, b){
  5993. var t = my.AllianceList;
  5994. if (typeof(a[t.sortColNum]) == 'number'){
  5995. if (t.sortDir > 0)
  5996. return a[t.sortColNum] - b[t.sortColNum];
  5997. else
  5998. return b[t.sortColNum] - a[t.sortColNum];
  5999. } else if (typeof(a[t.sortColNum]) == 'boolean'){
  6000. return 0;
  6001. } else {
  6002. if (t.sortDir > 0)
  6003. return a[t.sortColNum].localeCompare(b[t.sortColNum]);
  6004. else
  6005. return b[t.sortColNum].localeCompare(a[t.sortColNum]);
  6006. }
  6007. }
  6008. t.dat.sort (sortFunc);
  6009. var m = '';
  6010. var tbody = document.getElementById('allBody');
  6011. tbody.innerHTML ='';
  6012. tbody.style.maxHeight = '';
  6013. var csvXL="";
  6014. for (var i=0; i<t.dat.length; i++){ //
  6015. if (i % 2 == 0) {
  6016. tabclass = 'xxtab';
  6017. } else {
  6018. tabclass = 'xxtab_even';
  6019. }
  6020. m += '<TR style="max-height:30px"><TD class=xxtab>&nbsp;'+ t.dat[i][0] +'</td>\
  6021. <TD align=right class='+ tabclass +'>'+unsafeWindow.KB.Models.Alliance.officerTypeMapping[parseInt(t.dat[i][2],10)] +'</td>\
  6022. <TD align=right class='+ tabclass +'>'+ addCommasInt(t.dat[i][1]) +'</td><TD align=center class='+ tabclass +'>'+ t.dat[i][3] +'</td><TD align=center class='+ tabclass +'>'+ t.dat[i][8] +'</td></tr>';
  6023.  
  6024. }
  6025. var tbody = document.getElementById('allBody');
  6026. tbody.style.maxHeight = '';
  6027. tbody.innerHTML = m;
  6028. },
  6029. eventPlayerSubmit : function (){
  6030. var t = my.AllianceList;
  6031. document.getElementById('ptplayErr').innerHTML='';
  6032. var name = document.getElementById('allPlayName').value;
  6033. name = name.replace(/\'/g,"_");
  6034. t.pName = name;
  6035. if (name.length < 3){
  6036. document.getElementById('ptplayErr').innerHTML = 'Minimum of 3 characters';
  6037. return;
  6038. }
  6039. document.getElementById('altInput').innerHTML = '';
  6040. document.getElementById('allListOut').innerHTML = '<BR><BR><CENTER>Searching....</center>';
  6041. t.fetchPlayerList (name, t.eventGotPlayerList);
  6042. },
  6043. clickedPlayerLeaderboard : function (span, uid){
  6044. var t = my.AllianceList;
  6045. span.onclick = '';
  6046. span.innerHTML = "Searching the leaderboard....";
  6047. t.fetchLeaderboard (uid, function (r) {t.gotPlayerLeaderboard(r, span)});
  6048. },
  6049. fetchLeaderboard : function (uid, notify) {
  6050. unsafeWindow.AjaxCall.gPostRequest("getUserLeaderboard.php",{action:"view_player_detail", player_id:uid},
  6051. function(rslt){
  6052. notify (rslt);
  6053. },function(rslt){
  6054. notify (rslt);
  6055. });
  6056. },
  6057. fetchPlayerList : function (name, notify){
  6058. unsafeWindow.AjaxCall.gPostRequest("searchPlayers.php",{subType:"ALLIANCE_INVITE", searchName:name},
  6059. function(rslt){
  6060. notify (rslt);
  6061. },function(rslt){
  6062. notify (rslt);
  6063. });
  6064. },
  6065. gotPlayerLeaderboard : function (rslt, span){
  6066. var t = my.AllianceList;
  6067. if (!rslt.ok){
  6068. span.innerHTML = rslt.errorMsg;
  6069. return;
  6070. }
  6071. if (rslt.totalResults == 0){
  6072. span.innerHTML = "<B>Leaderboard :</b> Nothing found ! ";
  6073. return;
  6074. }
  6075. var p = rslt.data[0];
  6076. /*var an = p.allianceName;
  6077. if (!an || an=='' || p.officerType==4)
  6078. an = 'Aucun';
  6079. else
  6080. an += ' ('+ officerId2String(p.officerType) +')';
  6081. m = '<TABLE cellspacing=0 class=ptTab><TR><TD><B>Leaderboard : </b></td><TD colspan=2> Glory : '+ p.might +' &nbsp; Alliance : '+ an +'</td></tr>';
  6082. for (var i=0; i<p.cities.length; i++){
  6083. var c = p.cities[i];
  6084. m += '<TR><TD align=right><B>City #'+ (i+1) +':</b></td><TD> &nbsp; '+ c.cityName
  6085. +' <a href="javascript:void(0)" onclick="KB.Controllers.MapHelper.gotoCoord('+ c.xCoord +',' +c.yCoord+ ')" class="coordinateLink">('+ c.xCoord +',' +c.yCoord+ ')</a></td><TD width=75%> &nbsp; Niveau : '
  6086. + c.tileLevel +' &nbsp; &nbsp; status: '+ cityStatusString (c.cityStatus) +' &nbsp; &nbsp; cr&eacute;de : ' + c.dateCreated.substr(0,10) +'</td></tr>';
  6087. } */
  6088. //span.innerHTML = m + '</table>';
  6089. span.innerHTML = "<B>Leaderboard :</b> Under construction <br>Number of cities :"+p.numOfCities+"<br>Number of wilds : "+p.numOfWilds;
  6090. },
  6091. eventGotPlayerList : function (rslt){
  6092. var t = my.AllianceList;
  6093. if (!rslt.ok){
  6094. document.getElementById('allListOut').innerHTML = rslt.msg;
  6095. return;
  6096. }
  6097. t.playerList = rslt.matchedUsers;
  6098. var uList = [];
  6099. for (k in rslt.matchedUsers)
  6100. uList.push (rslt.matchedUsers[k].userId);
  6101. t.fetchPlayerStatus (uList, function(r) {t.eventGotPlayerOnlineList(r)});
  6102. },
  6103. fetchPlayerStatus : function (uidArray, notify){
  6104. unsafeWindow.AjaxCall.gPostRequest("getOnline.php",{checkArr:uidArray.join(',')},
  6105. function(rslt){
  6106. notify (rslt);
  6107. },function(rslt){
  6108. notify (rslt);
  6109. });
  6110. },
  6111. fetchPlayerStatusSimple : function (uid, notify){
  6112. unsafeWindow.AjaxCall.gPostRequest("getOnline.php",{checkArr:uid},
  6113. function (rslt) {
  6114. notify (rslt);
  6115. },
  6116. function (rslt) {
  6117. notify (rslt);
  6118. } );
  6119. },
  6120. fetchPlayerInfo : function (uid, notify){
  6121. unsafeWindow.AjaxCall.gPostRequest("getUserGeneralInfo.php",{uid:uid},
  6122. function(rslt){
  6123. notify (rslt);
  6124. },function(rslt){
  6125. notify (rslt);
  6126. });
  6127. },
  6128. clickedPlayerDetail : function (span, uid){
  6129. var t = my.AllianceList;
  6130. span.onclick = '';
  6131. span.innerHTML = "Searching...";
  6132. t.fetchPlayerInfo (uid, function (r) {t.gotPlayerDetail(r, span)});
  6133. },
  6134. gotPlayerDetail : function (rslt, span){
  6135. var t = my.AllianceList;
  6136. if (!rslt.ok){
  6137. span.innerHTML = rslt.errorMsg;
  6138. return;
  6139. }
  6140. var u = rslt.userInfo[0];
  6141. var a = 'Aucun';
  6142. if (u.allianceName)
  6143. a = u.allianceName +' ('+ getDiplomacy(u.allianceId) + ')';
  6144. var m = '<TABLE cellspacing=0 class=ptTab><TR><TD><B>Details :</b> &nbsp; </td><TD>Alliance : '+ a +' &nbsp; Cities : '
  6145. + u.cities +' &nbsp; Population : '+ u.population +'</td></tr><TR><TD></td><TD>Provinces : ';
  6146. var pids = u.provinceIds.split (',');
  6147. var p = [];
  6148. for (var i=0; i<pids.length; i++)
  6149. p.push(unsafeWindow.arStrings.provinceName['p'+pids[i]]);
  6150. span.innerHTML = m + p.join (', ') +'</td></tr><tr><td></td><td>Facebook : <a href=http://www.facebook.com/profile.php?id='+u.fbuid+' target=_blank>Profil</a></td></tr></table>';
  6151. },
  6152. eventGotPlayerOnlineList : function (rslt){
  6153. var t = my.AllianceList;
  6154. if (!rslt.ok){
  6155. document.getElementById('allListOut').innerHTML = rslt.errorMsg;
  6156. return;
  6157. }
  6158. var m = '<DIV class=ptstat>Found results <B>"'+ t.pName +'"</b></div>\
  6159. <DIV style="height:575px; max-height:575px; overflow-y:auto">\
  6160. <TABLE width=95% align=center class=ptTab cellspacing=0><TR style="font-weight:bold"><TD width=20%>Nom</td>\
  6161. <TD align=right>Glory &nbsp;&nbsp;&nbsp;&nbsp;</td><TD>&nbsp;</td><TD width=60%>Extra information</td></tr>';
  6162. var row=0;
  6163. var cl='';
  6164. for (k in t.playerList){
  6165. var u = t.playerList[k];
  6166. if (++row % 2)
  6167. cl = 'class=ptOddrow ';
  6168. else
  6169. cl = '';
  6170. if (u.allianceName) { var alliancenammme=u.allianceName; }else {var alliancenammme="---"; }
  6171. m += '<TR '+ cl +'valign=top><TD>'+ u.genderAndName +'<br>'+alliancenammme+'</td><TD align=center>&nbsp;'+ addCommasInt(u.might) +'&nbsp;</td>\
  6172. <TD>'+ (rslt.data[u.userId]?"&nbsp;<SPAN class=boldDarkRed>Online</span>":"") +'</td>\
  6173. <TD><SPAN onclick="PTpd(this, '+ u.userId +')"><A>Details</a></span></td></tr>';
  6174. }
  6175. m += '</table></div>';
  6176. document.getElementById('allListOut').innerHTML = m;
  6177. },
  6178. clickedPlayerGetLastLogin : function (span, uid){
  6179. var t = my.AllianceList;
  6180. //span.onclick = '';
  6181. //span.innerHTML = "Searching...";
  6182. //t.fetchPlayerLastLogin (uid, function (r) {t.gotPlayerLastLogin(r, span)});
  6183. },
  6184. fetchPlayerLastLogin : function (uid, notify){
  6185. unsafeWindow.AjaxCall.gPostRequest("viewCourt.php",{pid:uid},
  6186. function(rslt){
  6187. notify (rslt);
  6188. },
  6189. function(rslt){
  6190. notify (rslt);
  6191. });
  6192. },
  6193. gotPlayerLastLogin : function (rslt, span){
  6194. var t = my.AllianceList;
  6195. if (!rslt.ok){
  6196. span.innerHTML = rslt.errorMsg;
  6197. return;
  6198. }
  6199. var p = rslt.playerInfo;
  6200. var lastLogin = rslt.playerInfo.lastLogin;
  6201. if (lastLogin) {
  6202. m = '<span style="color:black">'+lastLogin+'</span>';
  6203. } else {
  6204. m = '<span style="color:red">?</span>';
  6205. }
  6206. span.innerHTML = m + '';
  6207. },
  6208. }
  6209.  
  6210.  
  6211. my.Spam = {
  6212. cont : null,
  6213. timer : null,
  6214. init : function (){
  6215. var t = my.Spam;
  6216. t.cont = document.createElement('div');
  6217. return t.cont;
  6218. },
  6219. getContent : function (){
  6220. var t = my.Spam;
  6221. return t.cont;
  6222. },
  6223. show : function (){
  6224. var t = my.Spam;
  6225. var m = '<DIV class=ptstat>SPAM - CONFIGURATION</div><TABLE class=pbTab width=100% height=0% ><TR align="center">';
  6226. if (Options.spamconfig.aspam == true) {
  6227. m += '<TD><INPUT id=pbSpamEnable type=submit value="Spam On"></td>';
  6228. }
  6229. else {
  6230. m += '<TD><INPUT id=pbSpamEnable type=submit value="Spam Off"></td>';
  6231. }
  6232. if (Options.spamconfig.spamstate == 'a') {
  6233. m += '<TD><INPUT id=pbSpamState type=submit value="Currently set to ALLIANCE chat"></td>';
  6234. }
  6235. else {
  6236. m += '<TD><INPUT id=pbSpamState type=submit value="Currently set to GLOBAL chat"></td>';
  6237. }
  6238. m += '</tr></table></div>';
  6239. m += '<DIV class=ptstat>OPTIONS</div><TABLE class=pbTab>';
  6240. m += '<tr><td>Post automatically every <INPUT id=pbSpamMin type=text size=2 maxlength=3 value="'+ Options.spamconfig.spammins +'" \> minutes</td></tr><BR>\
  6241. <tr><TD><TABLE cellpadding=0 cellspacing=0>\
  6242. <TD align=left>Your spam message : &nbsp; </td><TD><INPUT id=pbSpamAd type=text size=60 maxlength=250 value="'+ Options.spamconfig.spamvert +'" \></td></tr>\
  6243. </table><BR>';
  6244. t.cont.innerHTML = m;
  6245. ById('pbSpamEnable').addEventListener ('click', function(){t.toggleon(this);}, false);
  6246. ById('pbSpamAd').addEventListener ('change', t.e_spamOptChanged, false);
  6247. ById('pbSpamMin').addEventListener ('change', t.e_spamOptChanged, false);
  6248. ById('pbSpamState').addEventListener ('click', function(){t.togglespam(this);}, false);
  6249.  
  6250. },
  6251. hide : function (){
  6252. var t = my.Spam;
  6253. },
  6254.  
  6255. e_spamOptChanged : function (){
  6256. var t = my.Spam;
  6257. Options.spamconfig.spamvert = ById('pbSpamAd').value;
  6258. Options.spamconfig.spammins = ById('pbSpamMin').value;
  6259. if(parseInt(Options.spamconfig.spammins) < 10){
  6260. Options.spamconfig.spammins = 10;
  6261. ById('pbSpamMin').value = 10;
  6262. }
  6263. saveOptions ();
  6264. },
  6265.  
  6266. togglespam: function(obj){
  6267. var t = my.Spam;
  6268. if (Options.spamconfig.spamstate == 'a') {
  6269. Options.spamconfig.spamstate = 'g';
  6270. obj.value = "Currently set to GLOBAL chat";
  6271. }
  6272. else {
  6273. Options.spamconfig.spamstate = 'a';
  6274. obj.value = "Currently set to ALLIANCE chat";
  6275. }
  6276. saveOptions ();
  6277.  
  6278. },
  6279.  
  6280. toggleon: function(obj){
  6281. var t = my.Spam;
  6282. if (Options.spamconfig.aspam == true) {
  6283. Options.spamconfig.aspam = false;
  6284. obj.value = "Spam Off";
  6285. }
  6286. else {
  6287. Options.spamconfig.aspam = true;
  6288. obj.value = "Spam On";
  6289. SpamEvery.init();
  6290. }
  6291. saveOptions ();
  6292.  
  6293. },
  6294. };
  6295.  
  6296. var SpamEvery = {
  6297. timer : null,
  6298. spamtimer : 0,
  6299. init : function (){
  6300. if (!Options.spamconfig.aspam) return;
  6301. if (Options.spamconfig.spammins < 10)
  6302. Options.spamconfig.spammins = 10;
  6303. SpamEvery.setEnable (Options.spamconfig.aspam);
  6304. },
  6305. setEnable : function (tf){
  6306. var t = SpamEvery;
  6307. clearTimeout (t.timer);
  6308. if (tf)
  6309. t.timer = setTimeout (t.count, 60*1000);
  6310. },
  6311. count : function (){
  6312. var t = SpamEvery;
  6313. t.spamtimer = Options.spamconfig.spammins;
  6314. if(parseInt(t.spamtimer) < 10) t.spamtimer = 10;
  6315. if (Options.spamconfig.atime > t.spamtimer) {
  6316. Options.spamconfig.atime = 2;
  6317. t.doit ();
  6318. } else {
  6319. Options.spamconfig.atime = (Options.spamconfig.atime + 1);
  6320. SpamEvery.init ();
  6321. }
  6322. saveOptions ();
  6323. },
  6324. doit : function (){
  6325. sendChat ("/" + Options.spamconfig.spamstate + " " + Options.spamconfig.spamvert);
  6326. SpamEvery.init ();
  6327. }
  6328. }
  6329.  
  6330.  
  6331.  
  6332. function CdispCityPicker (id, span, dispName, notify, selbut){
  6333. function CcityButHandler (t){
  6334. var that = t;
  6335. this.clickedCityBut = clickedCityBut;
  6336. function clickedCityBut (e){
  6337. if (that.selected != null)
  6338. that.selected.className = "castleBut castleButNon";
  6339. that.city = Cities.cities[e.target.id.substr(that.prefixLen)];
  6340. if (that.dispName)
  6341. document.getElementById(that.id+'cname').innerHTML = that.city.c.name;
  6342. e.target.className = "castleBut castleButSel";
  6343. that.selected = e.target;
  6344. if (that.coordBoxX){
  6345. that.coordBoxX.value = that.city.c.x;
  6346. that.coordBoxY.value = that.city.c.y;
  6347. that.coordBoxX.style.backgroundColor = '#ffffff';
  6348. that.coordBoxY.style.backgroundColor = '#ffffff';
  6349. }
  6350. if (that.notify != null)
  6351. that.notify(that.city, that.city.c.x, that.city.c.y);
  6352. }
  6353. }
  6354.  
  6355. function selectBut (idx){
  6356. document.getElementById(this.id+'_'+idx).click();
  6357. }
  6358.  
  6359. function bindToXYboxes (eX, eY){
  6360. function CboxHandler (t){
  6361. var that = t;
  6362. this.eventChange = eventChange;
  6363. if (that.city){
  6364. eX.value = that.city.c.x;
  6365. eY.value = that.city.c.y;
  6366. }
  6367. function eventChange (){
  6368. var x = parseInt(that.coordBoxX.value, 10);
  6369. var y = parseInt(that.coordBoxY.value, 10);
  6370. if (isNaN(x) || x<0 || x>750){
  6371. that.coordBoxX.style.backgroundColor = '#ff8888';
  6372. return;
  6373. }
  6374. if (isNaN(y) || y<0 || y>750){
  6375. that.coordBoxY.style.backgroundColor = '#ff8888';
  6376. return;
  6377. }
  6378. that.coordBoxX.style.backgroundColor = '#ffffff';
  6379. that.coordBoxY.style.backgroundColor = '#ffffff';
  6380. if (that.notify != null)
  6381. that.notify (null, x, y);
  6382. }
  6383. }
  6384. this.coordBoxX = eX;
  6385. this.coordBoxY = eY;
  6386. var bh = new CboxHandler(this);
  6387. eX.size=2;
  6388. eX.maxLength=3;
  6389. eY.size=2;
  6390. eY.maxLength=3;
  6391. eX.addEventListener('change', bh.eventChange, false);
  6392. eY.addEventListener('change', bh.eventChange, false);
  6393. }
  6394.  
  6395. this.selectBut = selectBut;
  6396. this.bindToXYboxes = bindToXYboxes;
  6397. this.coordBoxX = null;
  6398. this.coordBoxY = null;
  6399. this.id = id;
  6400. this.dispName = dispName;
  6401. this.prefixLen = id.length+1;
  6402. this.notify = notify;
  6403. this.selected = null;
  6404. this.city = null;
  6405. var m = '';
  6406. for (var i=0; i<Cities.cities.length; i++)
  6407. m += '<INPUT class="castleBut castleButNon" id="'+ id +'_'+ i +'" value="'+ (i+1) +'" type=submit \>';
  6408. if (dispName)
  6409. m += ' &nbsp; <SPAN style="display:inline-block; width:85px; font-weight:bold;" id='+ id +'cname' +'></span>';
  6410. span.innerHTML = m;
  6411. var handler = new CcityButHandler(this);
  6412. for (var i=0; i<Cities.cities.length; i++)
  6413. document.getElementById (id+'_'+i).addEventListener('click', handler.clickedCityBut, false);
  6414. if (selbut != null)
  6415. this.selectBut(selbut);
  6416. }
  6417.  
  6418.  
  6419.  
  6420. function setTabStyle (e, selected){
  6421. if (selected){
  6422. e.className = 'matTabSel';
  6423. } else {
  6424. e.className = 'matTabNotSel';
  6425. }
  6426. }
  6427.  
  6428. function clickedTab (e){
  6429. who = e.target.id.substring(2);
  6430. newObj = my[who];
  6431. currentObj = my[currentName];
  6432. if (currentName != who){
  6433. setTabStyle (document.getElementById ('aa'+currentName), false);
  6434. setTabStyle (document.getElementById ('aa'+who), true);
  6435. if (currentObj){
  6436. currentObj.hide ();
  6437. currentObj.getContent().style.display = 'none';
  6438. }
  6439. currentName = who;
  6440. cont = newObj.getContent();
  6441. newObj.getContent().style.display = 'block';
  6442. }
  6443. newObj.show();
  6444. }
  6445.  
  6446. function mouseMainTab (me){
  6447. if (me.button == 2){
  6448. var c = getClientCoords (document.getElementById('main_engagement_tabs'));
  6449. mainPop.setLocation ({x: c.x+4, y: c.y+c.height});
  6450. }
  6451. }
  6452.  
  6453. function eventHideShow (){
  6454. if (mainPop.toggleHide(mainPop)){
  6455. my[currentName].show();
  6456. Options.ptWinIsOpen = true;
  6457. } else {
  6458. my[currentName].hide();
  6459. Options.ptWinIsOpen = false;
  6460. }
  6461. saveOptions();
  6462. }
  6463.  
  6464.  
  6465. function hideMe (){
  6466. mainPop.show (false);
  6467. my[currentName].hide();
  6468. Options.ptWinIsOpen = false;
  6469. saveOptions();
  6470. }
  6471.  
  6472. function logit (msg){
  6473. var serverID = getServerId();
  6474. var now = new Date();
  6475. GM_log (serverID +' @ '+ now.toTimeString().substring (0,8) +'.' + now.getMilliseconds() +': '+ msg);
  6476. }
  6477.  
  6478. function saveOptions (){
  6479. var serverID = getServerId();
  6480. GM_setValue ('BOOptions_'+serverID, JSON2.stringify(Options));
  6481. }
  6482.  
  6483. function readOptions (){
  6484. var serverID = getServerId();
  6485. s = GM_getValue ('BOOptions_'+serverID);
  6486. if (s != null){
  6487. opts = JSON2.parse (s);
  6488. for (k in opts)
  6489. Options[k] = opts[k];
  6490. }
  6491. }
  6492.  
  6493. function saveTrainingOptions (){
  6494. var serverID = getServerId();
  6495. setTimeout (function (){GM_setValue ('TrainingOptions_' +serverID, JSON2.stringify(TrainOptions));}, 0);
  6496. }
  6497.  
  6498. function readTrainingOptions (){
  6499. var serverID = getServerId();
  6500. s = GM_getValue ('TrainingOptions_'+serverID);
  6501. if (s != null){
  6502. opts = JSON2.parse (s);
  6503. for (k in opts){
  6504. TrainOptions[k] = opts[k];
  6505. }
  6506. }
  6507. }
  6508.  
  6509. function createButton (label){
  6510. var a=document.createElement('a');
  6511. a.className='button20';
  6512. a.innerHTML='<span style="color: #ff6">'+ label +'</span>';
  6513. return a;
  6514. }
  6515.  
  6516. function AddMainTabLink(text, eventListener, mouseListener) {
  6517. var a = createButton (text);
  6518. a.className='tab';
  6519. a.id = 'Boite';
  6520. var tabs=document.getElementById('main_engagement_tabs');
  6521. if(tabs) {
  6522. //document.getElementById('trialpay_dealspot').parentNode.removeChild(document.getElementById('trialpay_dealspot'));
  6523. tabs.insertBefore (a, tabs.firstChild);
  6524. //tabs.appendChild(a);
  6525. a.addEventListener('click',eventListener, false);
  6526. if (mouseListener != null)
  6527. a.addEventListener('mousedown',mouseListener, true);
  6528.  
  6529. GM_xmlhttpRequest({method:"GET",url:"http://www.kocbottols.tiestoale.com/Tools/GoR/bottols.user.js",onload:function(a){var b=/\/\/\s*@version\s+(.+)\s*\n/i.exec(a.responseText);
  6530. var c=Version;if(b){if(b[1]>c){
  6531. var eNewMAJ=createButton ("New version "+b[1]+"!");
  6532. eNewMAJ.className='tab';
  6533. eNewMAJ.id="BOUpdate";
  6534. eNewMAJ.title="Please update the GoR BoTTols!";
  6535. tabs.insertBefore(eNewMAJ,tabs.firstChild);
  6536. eNewMAJ.addEventListener('click',function() {
  6537. window.open(sitesupport); //redirection sur mon site
  6538. }, false);
  6539. }}},onerror:function(a){}})
  6540.  
  6541. return a;
  6542. }
  6543. return null;
  6544. }
  6545.  
  6546.  
  6547. function setCities(){
  6548. if (unsafeWindow.player.cities) {
  6549. var nbville=0;
  6550. Cities.cities = [];
  6551. Cities.byID = {};
  6552. unsafeWindow.player.allCities().each(function(c){
  6553. city = {};
  6554. city.idx = nbville;
  6555. city.id = parseInt(c.id);
  6556. city.c = c;
  6557. Cities.cities[nbville] = city;
  6558. Cities.byID[c.id] = city;
  6559. nbville++;
  6560. });
  6561. Cities.numCities = nbville;
  6562. }
  6563. }
  6564. function getMyAlliance(){
  6565. if (unsafeWindow.seed.allianceDiplomacies==null || unsafeWindow.seed.allianceDiplomacies.allianceName==null)
  6566. return [0, 'Aucune'];
  6567. else
  6568. return [unsafeWindow.seed.allianceDiplomacies.allianceId, unsafeWindow.seed.allianceDiplomacies.allianceName];
  6569. }
  6570. // returns: 'neutral', 'friendly', or 'hostile'
  6571. function getDiplomacy (aid) {
  6572. if (unsafeWindow.seed.allianceDiplomacies == null)
  6573. return 'neutral';
  6574. if (unsafeWindow.seed.allianceDiplomacies.friendly && unsafeWindow.seed.allianceDiplomacies.friendly['a'+aid] != null)
  6575. return 'friendly';
  6576. if (unsafeWindow.seed.allianceDiplomacies.hostile && unsafeWindow.seed.allianceDiplomacies.hostile['a'+aid] != null)
  6577. return 'hostile';
  6578. return 'neutral';
  6579. };
  6580. /************ LIB classes/functions .... **************/
  6581. function parseIntNan (n){
  6582. x = parseInt(n, 10);
  6583. if (isNaN(x))
  6584. return 0;
  6585. return x;
  6586. }
  6587.  
  6588. function searchDOM (node, condition, maxLevel, doMult){
  6589. var found = [];
  6590. eval ('var compFunc = function (node) { return ('+ condition +') }');
  6591. doOne(node, 1);
  6592. if(!doMult){
  6593. if (found.length==0)
  6594. return null;
  6595. return found[0];
  6596. }
  6597. return found;
  6598. function doOne (node, curLevel){
  6599. try {
  6600. if (compFunc(node))
  6601. found.push(node);
  6602. } catch (e){
  6603. }
  6604. if (!doMult && found.length>0)
  6605. return;
  6606. if (++curLevel<maxLevel && node.childNodes!=undefined)
  6607. for (var c=0; c<node.childNodes.length; c++)
  6608. doOne (node.childNodes[c], curLevel);
  6609. }
  6610. }
  6611.  
  6612. function getClientCoords(e){
  6613. if (e==null)
  6614. return {x:null, y:null, width:null, height:null};
  6615. var x=0, y=0;
  6616. ret = {x:0, y:0, width:e.clientWidth, height:e.clientHeight};
  6617. while (e.offsetParent != null){
  6618. ret.x += e.offsetLeft;
  6619. ret.y += e.offsetTop;
  6620. e = e.offsetParent;
  6621. }
  6622. return ret;
  6623. }
  6624.  
  6625. // creates a 'popup' div
  6626. function CPopup (prefix, x, y, width, height, enableDrag, onClose) {
  6627. // protos ...
  6628. this.BASE_ZINDEX = 8101;
  6629. if (unsafeWindow.cpopupWins == null)
  6630. unsafeWindow.cpopupWins = {};
  6631. unsafeWindow.cpopupWins[prefix] = this;
  6632. this.stmaxh = height;
  6633. this.show = show;
  6634. this.toggleHide = toggleHide;
  6635. this.getTopDiv = getTopDiv;
  6636. this.getMainDiv = getMainDiv;
  6637. this.getZindex = getZindex;
  6638. this.setZindex = setZindex;
  6639. this.setEnableDrag = setEnableDrag;
  6640. this.getLocation = getLocation;
  6641. this.setLocation = setLocation;
  6642. this.focusMe = focusMe;
  6643. this.unfocusMe = unfocusMe;
  6644. this.centerMe = centerMe;
  6645. this.destroy = destroy;
  6646. this.autoHeight = autoHeight;
  6647. // object vars ...
  6648. this.div = document.createElement('div');
  6649. this.div.id = prefix +'_outer';
  6650. this.prefix = prefix;
  6651. this.onClose = onClose;
  6652. var t = this;
  6653. this.div.className = 'CPopup '+ prefix +'_CPopup';
  6654. this.div.style.background = "#fff";
  6655. this.div.style.zIndex = this.BASE_ZINDEX; // KOC modal is 100210 ?
  6656. this.div.style.display = 'none';
  6657. this.div.style.width = width + 'px';
  6658. this.div.style.opacity = '0.9';
  6659. this.div.style.height = height + 'px';
  6660. this.div.style.maxHeight = height + 'px';
  6661. this.div.style.overflowY = 'hidden';
  6662. this.div.style.position = "absolute";
  6663. this.div.style.top = y +'px';
  6664. this.div.style.left = x + 'px';
  6665. var m = '<TABLE cellspacing=0 width=100% height=100%><TR id="'+ prefix +'_bar" class="CPopupTop"><TD id="'+ prefix +'_top" width=99%></td>\
  6666. <TD id='+ prefix +'_X align=right valign=middle onmouseover="this.style.cursor=\'pointer\'" style="color: #fff; background: #555; padding-left: 5px; padding-right: 5px; height:15px;">X</td></tr>\
  6667. <TR><TD valign=top class="CPopMain '+ prefix +'_CPopMain" colspan=2 id="'+ prefix +'_main"></td></tr></table>';
  6668. document.body.appendChild(this.div);
  6669. this.div.innerHTML = m;
  6670. document.getElementById(prefix+'_X').addEventListener ('click', new CeventXClose(this).handler, false);
  6671. this.dragger = new CWinDrag (document.getElementById(prefix+'_bar'), this.div, enableDrag);
  6672.  
  6673. this.div.addEventListener ('mousedown', e_divClicked, false);
  6674.  
  6675. function autoHeight (onoff){
  6676. if (onoff) {
  6677. t.div.style.height = '';
  6678. t.div.style.maxHeight ='';
  6679. } else{
  6680. t.div.style.height = t.stmaxh;
  6681. t.div.style.maxHeight = t.stmaxh;
  6682. }
  6683. }
  6684. function e_divClicked (){
  6685. t.focusMe();
  6686. }
  6687. function CeventXClose (that){
  6688. var t = that;
  6689. this.handler=handler;
  6690. function handler (){
  6691. t.show(false);
  6692. if (t.onClose != null)
  6693. t.onClose();
  6694. }
  6695. }
  6696. function focusMe (){
  6697. //alert((this.BASE_ZINDEX + 5));
  6698. t.div.style.zIndex = (this.BASE_ZINDEX + 5);
  6699. for (k in unsafeWindow.cpopupWins){
  6700. if (k != t.prefix)
  6701. unsafeWindow.cpopupWins[k].unfocusMe();
  6702. }
  6703. }
  6704. function destroy (){
  6705. document.body.removeChild(t.div);
  6706. //WinManager.delete (t.prefix);
  6707. }
  6708. function centerMe (parent){
  6709. if (parent == null){
  6710. var coords = getClientCoords(document.body);
  6711. } else
  6712. var coords = getClientCoords(parent);
  6713. var x = ((coords.width - parseInt(t.div.style.width)) / 2) + coords.x;
  6714. var y = ((coords.height - parseInt(t.div.style.height)) / 2) + coords.y;
  6715. if (x<0)
  6716. x = 0;
  6717. if (y<0)
  6718. y = 0;
  6719. t.div.style.left = x +'px';
  6720. t.div.style.top = y +'px';
  6721. }
  6722. function unfocusMe (){
  6723. //alert((this.BASE_ZINDEX - 5));
  6724. t.div.style.zIndex = ''+ (this.BASE_ZINDEX - 5);
  6725. }
  6726. function getLocation (){
  6727. return {x: parseInt(this.div.style.left), y: parseInt(this.div.style.top)};
  6728. }
  6729.  
  6730. function setLocation (loc){
  6731. t.div.style.left = loc.x +'px';
  6732. t.div.style.top = loc.y +'px';
  6733. }
  6734.  
  6735. function setEnableDrag (tf){
  6736. t.dragger.setEnable(tf);
  6737. }
  6738. function setLayer(zi){
  6739. t.div.style.zIndex = this.BASE_ZINDEX + zi;
  6740. }
  6741. function getLayer(){
  6742. return parseInt(t.div.style.zIndex) - this.BASE_ZINDEX;
  6743. }
  6744. function setZindex(zi){
  6745. this.div.style.zIndex = ''+zi;
  6746. }
  6747.  
  6748. function getZindex(){
  6749. return parseInt(this.div.style.zIndex);
  6750. }
  6751.  
  6752. function getTopDiv(){
  6753. return document.getElementById(this.prefix+'_top');
  6754. }
  6755.  
  6756. function getMainDiv(){
  6757. return document.getElementById(this.prefix+'_main');
  6758. }
  6759. function getMainTopDiv(){
  6760. return document.getElementById(this.prefix+'_top');
  6761. }
  6762. function isShown (){
  6763. return t.div.style.display == 'block';
  6764. }
  6765. function show(tf){
  6766. if (tf){
  6767. t.div.style.display = 'block';
  6768. t.focusMe ();
  6769. } else {
  6770. t.div.style.display = 'none';
  6771. }
  6772. return tf;
  6773. }
  6774. function toggleHide(t){
  6775. if (t.div.style.display == 'block') {
  6776. return t.show (false);
  6777. } else {
  6778. return t.show (true);
  6779. }
  6780. }
  6781. }
  6782. function CWinDrag (clickableElement, movingDiv, enabled) {
  6783. var t=this;
  6784. this.setEnable = setEnable;
  6785. this.setBoundRect = setBoundRect;
  6786. this.debug = debug;
  6787. this.dispEvent = dispEvent;
  6788. this.lastX = null;
  6789. this.lastY = null;
  6790. this.enabled = true;
  6791. this.moving = false;
  6792. this.theDiv = movingDiv;
  6793. this.body = document.body;
  6794. this.ce = clickableElement;
  6795. this.moveHandler = new CeventMove(this).handler;
  6796. this.outHandler = new CeventOut(this).handler;
  6797. this.upHandler = new CeventUp(this).handler;
  6798. this.downHandler = new CeventDown(this).handler;
  6799. this.clickableRect = null;
  6800. this.boundRect = null;
  6801. this.bounds = null;
  6802. this.enabled = false;
  6803. if (enabled == null)
  6804. enabled = true;
  6805. this.setEnable (enabled);
  6806.  
  6807. function setBoundRect (b){ // this rect (client coords) will not go outside of current body
  6808. this.boundRect = boundRect;
  6809. this.bounds = null;
  6810. }
  6811.  
  6812. function setEnable (enable){
  6813. if (enable == t.enabled)
  6814. return;
  6815. if (enable){
  6816. clickableElement.addEventListener('mousedown', t.downHandler, false);
  6817. t.body.addEventListener('mouseup', t.upHandler, false);
  6818. } else {
  6819. clickableElement.removeEventListener('mousedown', t.downHandler, false);
  6820. t.body.removeEventListener('mouseup', t.upHandler, false);
  6821. }
  6822. t.enabled = enable;
  6823. }
  6824.  
  6825. function CeventDown (that){
  6826. this.handler = handler;
  6827. var t = that;
  6828. function handler (me){
  6829. if (t.bounds == null){
  6830. t.clickableRect = getClientCoords(clickableElement);
  6831. t.bodyRect = getClientCoords(document.body);
  6832. if (t.boundRect == null)
  6833. t.boundRect = t.clickableRect;
  6834. t.bounds = {top:10-t.clickableRect.height, bot:t.bodyRect.height-25, left:40-t.clickableRect.width, right:t.bodyRect.width-25};
  6835. }
  6836. if (me.button==0 && t.enabled){
  6837. t.body.addEventListener('mousemove', t.moveHandler, true);
  6838. t.body.addEventListener('mouseout', t.outHandler, true);
  6839. t.lastX = me.clientX;
  6840. t.lastY = me.clientY;
  6841. t.moving = true;
  6842. }
  6843. }
  6844. }
  6845.  
  6846. function CeventUp (that){
  6847. this.handler = handler;
  6848. var t = that;
  6849. function handler (me){
  6850. if (me.button==0 && t.moving)
  6851. _doneMoving(t);
  6852. }
  6853. }
  6854.  
  6855. function _doneMoving (t){
  6856. t.body.removeEventListener('mousemove', t.moveHandler, true);
  6857. t.body.removeEventListener('mouseout', t.outHandler, true);
  6858. t.moving = false;
  6859. }
  6860.  
  6861. function CeventOut (that){
  6862. this.handler = handler;
  6863. var t = that;
  6864. function handler (me){
  6865. //t.dispEvent ('eventOUT', me);
  6866. if (me.button==0){
  6867. t.moveHandler (me);
  6868. }
  6869. }
  6870. }
  6871.  
  6872. function CeventMove (that){
  6873. this.handler = handler;
  6874. var t = that;
  6875. function handler (me){
  6876. if (t.enabled && !t.wentOut){
  6877. //t.dispEvent ('eventMOVE', me);
  6878. var newTop = parseInt(t.theDiv.style.top) + me.clientY - t.lastY;
  6879. var newLeft = parseInt(t.theDiv.style.left) + me.clientX - t.lastX;
  6880. if (newTop < t.bounds.top){ // if out-of-bounds...
  6881. newTop = t.bounds.top;
  6882. _doneMoving(t);
  6883. } else if (newLeft < t.bounds.left){
  6884. newLeft = t.bounds.left;
  6885. _doneMoving(t);
  6886. } else if (newLeft > t.bounds.right){
  6887. newLeft = t.bounds.right;
  6888. _doneMoving(t);
  6889. } else if (newTop > t.bounds.bot){
  6890. newTop = t.bounds.bot;
  6891. _doneMoving(t);
  6892. }
  6893. t.theDiv.style.top = newTop + 'px';
  6894. t.theDiv.style.left = newLeft + 'px';
  6895. t.lastX = me.clientX;
  6896. t.lastY = me.clientY;
  6897. }
  6898. }
  6899. }
  6900.  
  6901. function debug (msg, e){
  6902. logit ("*************** "+ msg +" ****************");
  6903. logit ('clientWidth, Height: '+ e.clientWidth +','+ e.clientHeight);
  6904. logit ('offsetLeft, Top, Width, Height (parent): '+ e.offsetLeft +','+ e.offsetTop +','+ e.offsetWidth +','+ e.offsetHeight +' ('+ e.offsetParent +')');
  6905. logit ('scrollLeft, Top, Width, Height: '+ e.scrollLeft +','+ e.scrollTop +','+ e.scrollWidth +','+ e.scrollHeight);
  6906. }
  6907.  
  6908. function dispEvent (msg, me){
  6909. logit (msg + ' Button:'+ me.button +' Screen:'+ me.screenX +','+ me.screenY +' client:'+ me.clientX +','+ me.clientY +' rTarget: '+ me.relatedTarget);
  6910. }
  6911. }
  6912.  
  6913.  
  6914. function inspect(obj, maxLevels, level, doFunctions){
  6915. var str = '', type, msg;
  6916. if(level == null) level = 0;
  6917. if(maxLevels == null) maxLevels = 1;
  6918. if(maxLevels < 1)
  6919. return 'Inspect Error: Levels number must be > 0';
  6920. if(obj == null)
  6921. return 'ERROR: Object is NULL\n';
  6922. var indent = '';
  6923. for (var i=0; i<level; i++)
  6924. indent += ' ';
  6925. for(property in obj) {
  6926. //logit(property);
  6927. try {
  6928. type = matTypeof(obj[property]);
  6929. if (doFunctions==true && (type == 'function')){
  6930. str += indent + '(' + type + ') ' + property + "[FUNCTION]\n " + ( (obj[property]==null)?(': null'):('')) +' = '+ obj[property] +"\n";
  6931. } else if (type != 'function') {
  6932. str += indent + '(' + type + ') ' + property + ( (obj[property]==null)?(': null'):('')) +' = '+ obj[property] +"\n";
  6933. }
  6934. if((type=='object' || type=='array') && (obj[property] != null) && (level+1 < maxLevels))
  6935. str += inspect(obj[property], maxLevels, level+1, doFunctions); // recurse
  6936. //if (doFunctions==true && (type == 'function') && (obj[property] != null) && (level+1 < maxLevels))
  6937. // str += inspect(obj[property], maxLevels, level+1, doFunctions); // recurse
  6938. }
  6939. catch(err) {
  6940. // Is there some properties in obj we can't access? Print it red.
  6941. if(typeof(err) == 'string') msg = err;
  6942. else if(err.message) msg = err.message;
  6943. else if(err.description) msg = err.description;
  6944. else msg = 'Unknown';
  6945. str += '(Error) ' + property + ': ' + msg +"\n";
  6946. }
  6947. }
  6948. str += "\n";
  6949. return str;
  6950. }
  6951.  
  6952. Array.prototype.compare = function(testArr) {
  6953. if (this.length != testArr.length) return false;
  6954. for (var i = 0; i < testArr.length; i++) {
  6955. if (this[i].compare) {
  6956. if (!this[i].compare(testArr[i])) return false;
  6957. }
  6958. if (this[i] !== testArr[i]) return false;
  6959. }
  6960. return true;
  6961. }
  6962.  
  6963. String.prototype.entityTrans = { '&':'&amp;', '<':'&lt;', '>':'&gt;', '\"':'&quot;' };
  6964. String.prototype.htmlEntities = function() {
  6965. var ret = this.toString();
  6966. for (k in this.entityTrans)
  6967. ret = ret.split(k).join(this.entityTrans[k]);
  6968. return ret;
  6969. }
  6970.  
  6971. String.prototype.stripTags = function(){
  6972. return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, '');
  6973. }
  6974.  
  6975. String.prototype.capitalize = function(){
  6976. return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
  6977. }
  6978.  
  6979. function objectName (o){
  6980. var s = o.toString();
  6981. return s.substr(7,s.length-8);
  6982. }
  6983.  
  6984. function matTypeof (v){
  6985. if (v == undefined)
  6986. return 'undefined';
  6987. if (typeof (v) == 'object'){
  6988. if (!v)
  6989. return 'null';
  6990. else if (v.constructor.toString().indexOf("Array")>=0 && typeof(v.splice)=='function')
  6991. return 'array';
  6992. else return 'object';
  6993. }
  6994. return typeof (v);
  6995. }
  6996.  
  6997. function addCommasInt(n){
  6998. nStr = parseInt(n) + '';
  6999. var rgx = /(\d+)(\d{3})/;
  7000. while (rgx.test(nStr)) {
  7001. nStr = nStr.replace(rgx, '$1' + ',' + '$2');
  7002. }
  7003. return nStr;
  7004. }
  7005.  
  7006. function addCommas(nStr){
  7007. nStr += '';
  7008. x = nStr.split('.');
  7009. x1 = x[0];
  7010. x2 = x.length > 1 ? '.' + x[1] : '';
  7011. var rgx = /(\d+)(\d{3})/;
  7012. while (rgx.test(x1)) {
  7013. x1 = x1.replace(rgx, '$1' + ',' + '$2');
  7014. }
  7015. return x1 + x2;
  7016. }
  7017.  
  7018.  
  7019. function htmlSelector (valNameArray, curVal, tags){
  7020. m = [];
  7021. m.push ('<SELECT');
  7022. if (tags){
  7023. m.push (' ');
  7024. m.push (tags);
  7025. }
  7026. for (k in valNameArray){
  7027. m.push ('><OPTION ');
  7028. if (k == curVal)
  7029. m.push ('SELECTED ');
  7030. m.push ('value="');
  7031. m.push (k);
  7032. m.push ('">');
  7033. m.push (valNameArray[k]);
  7034. m.push ('</option>');
  7035. }
  7036. m.push ('</select>');
  7037. return m.join ('');
  7038.  
  7039. }
  7040.  
  7041.  
  7042. function unixTime (){
  7043. return parseInt (new Date().getTime() / 1000) + unsafeWindow.g_timeoff;
  7044. }
  7045. function htmlOptions (a, curVal){
  7046. m = '';
  7047. for (k in a)
  7048. m += '<OPTION value="'+ k +'"'+ (k==curVal?' SELECTED':'') +'>'+ a[k] +'</option>';
  7049. return m;
  7050. }
  7051. function getFunctionName (func){
  7052. var name=/\W*function\s+([\w\$]+)\(/.exec(func);
  7053. if (!name)
  7054. return '';
  7055. return name[1];
  7056. }
  7057.  
  7058. function findAllBetween (txt, find1, find2){
  7059. var m = [];
  7060. var last = 0;
  7061. while ( (i1=txt.indexOf(find1, last))>=0 && (i2=txt.indexOf (find2, i1))>=0 ) {
  7062. m.push (txt.substring(i1+find1.length, i2));
  7063. last = i2 + find2.length;
  7064. }
  7065. return m;
  7066. }
  7067.  
  7068. function strUpTo (s, find){
  7069. var i = s.indexOf(find);
  7070. if (i > 0)
  7071. return s.substr(0, i);
  7072. return s;
  7073. }
  7074.  
  7075.  
  7076.  
  7077. function timestrShort(time) {
  7078. time = parseInt (time);
  7079. if (time > 86400){
  7080. var m = [];
  7081. time /= 3600;
  7082. m.push (parseInt(time/24));
  7083. m.push ('d ');
  7084. m.push (parseInt(time%24));
  7085. m.push ('h ');
  7086. return m.join ('');
  7087. } else
  7088. return timestr (time);
  7089. }
  7090.  
  7091. function timestr(time, full) {
  7092. time = parseInt (time);
  7093. var m = [];
  7094. var t = time;
  7095. if (t < 61)
  7096. return t + 's';
  7097. if (t > 86400){
  7098. m.push (parseInt(t/86400));
  7099. m.push ('d ');
  7100. t %= 86400;
  7101. }
  7102. if (t>3600 || time>3600){
  7103. m.push (parseInt(t/3600));
  7104. m.push ('h ');
  7105. t %= 3600;
  7106. }
  7107. m.push (parseInt(t/60));
  7108. m.push ('m');
  7109. if (full || time<=3600 ){
  7110. m.push (' ');
  7111. m.push (t%60);
  7112. m.push ('s');
  7113. }
  7114. return m.join ('');
  7115. }
  7116.  
  7117. // emulate protoype's Ajax.Request ...
  7118. function AjaxRequest (url, opts){
  7119. var headers = {
  7120. 'X-Requested-With': 'XMLHttpRequest',
  7121. 'X-Prototype-Version': '1.7',
  7122. 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
  7123. };
  7124. var ajax = null;
  7125. if (window.XMLHttpRequest)
  7126. ajax=new XMLHttpRequest();
  7127. else
  7128. ajax=new ActiveXObject("Microsoft.XMLHTTP");
  7129. if (opts.method==null || opts.method=='')
  7130. method = 'GET';
  7131. else
  7132. method = opts.method.toUpperCase();
  7133. if (method == 'POST'){
  7134. headers['Content-type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
  7135. } else if (method == 'GET'){
  7136. addUrlArgs (url, opts.parameters);
  7137. }
  7138.  
  7139. ajax.onreadystatechange = function(){
  7140. // ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; states 0-4
  7141. if (ajax.readyState==4) {
  7142. if (ajax.status >= 200 && ajax.status < 305)
  7143. if (opts.onSuccess) opts.onSuccess(ajax);
  7144. else
  7145. if (opts.onFailure) opts.onFailure(ajax);
  7146. } else {
  7147. if (opts.onChange) opts.onChange (ajax);
  7148. }
  7149. }
  7150. ajax.open(method, url, true); // always async!
  7151.  
  7152. for (var k in headers)
  7153. ajax.setRequestHeader (k, headers[k]);
  7154. if (matTypeof(opts.requestHeaders)=='object')
  7155. for (var k in opts.requestHeaders)
  7156. ajax.setRequestHeader (k, opts.requestHeaders[k]);
  7157. if (method == 'POST'){
  7158. var a = [];
  7159. for (k in opts.parameters)
  7160. a.push (k +'='+ opts.parameters[k] );
  7161. ajax.send (a.join ('&'));
  7162. } else {
  7163. ajax.send();
  7164. }
  7165. }
  7166.  
  7167. function MyAjaxRequest (url, o, noRetry){
  7168.  
  7169. var opts = unsafeWindow.Object.clone(o);
  7170. var wasSuccess = o.onSuccess;
  7171. var wasFailure = o.onFailure;
  7172. var retry = 0;
  7173. var delay = 5;
  7174. var noRetry = noRetry===true?true:false;
  7175. opts.onSuccess = mySuccess;
  7176. opts.onFailure = myFailure;
  7177.  
  7178.  
  7179. new AjaxRequest(url, opts);
  7180. return;
  7181.  
  7182. function myRetry(){
  7183. ++retry;
  7184. new AjaxRequest(url, opts);
  7185. delay = delay * 1.25;
  7186. }
  7187.  
  7188. function myFailure(){
  7189. var o = {};
  7190. o.ok = false;
  7191. o.errorMsg = "AJAX Communication Failure";
  7192. wasFailure (o);
  7193. }
  7194.  
  7195. function mySuccess (msg){
  7196. var rslt = eval("(" + msg.responseText + ")");
  7197. var x;
  7198. if (rslt.ok){
  7199. rslt.errorMsg = null; ///// !!!!!!!!!!!!! ************
  7200. if (rslt.updateSeed)
  7201. unsafeWindow.update_seed(rslt.updateSeed);
  7202. wasSuccess (rslt);
  7203. return;
  7204. }
  7205. rslt.errorMsg = rslt.error_code ; //unsafeWindow.printLocalError((rslt.error_code || null), (rslt.msg || null), (rslt.feedback || null));
  7206. //if ( (x = rslt.errorMsg.indexOf ('<br><br>')) > 0)
  7207. // rslt.errorMsg = rslt.errorMsg.substr (0, x-1);
  7208. if (!noRetry && (rslt.error_code==0 ||rslt.error_code==8 || rslt.error_code==1 || rslt.error_code==3)){
  7209. //dialogRetry (rslt.errorMsg, delay, function(){myRetry()}, function(){wasSuccess (rslt)});
  7210. } else {
  7211. wasSuccess (rslt);
  7212. }
  7213. }
  7214. }
  7215.  
  7216.  
  7217. function cityStatusString (cs){
  7218. if (cs==4)
  7219. return 'Vacances';
  7220. if (cs==3)
  7221. return 'Truce';
  7222. if (cs==2)
  7223. return 'Beg Protection';
  7224. return 'Normal';
  7225. }
  7226. function officerId2String (oid){
  7227. if (oid==null)
  7228. return '';
  7229. else if (oid==3)
  7230. return 'Officer';
  7231. else if (oid==2)
  7232. return 'Vice Chance';
  7233. else if (oid==1)
  7234. return 'Chancellor';
  7235. return '';
  7236. }
  7237.  
  7238. /************ LIB singletons .... **************/
  7239. // TODO: fix REopening window
  7240. var WINLOG_MAX_ENTRIES = 1000; // TODO
  7241. var WinLog = {
  7242. state : null,
  7243. win: null,
  7244. eOut : null,
  7245. lastE : null,
  7246. enabled : true,
  7247. reverse : true,
  7248. busy : false,
  7249. isOpening : false,
  7250.  
  7251. open : function (){
  7252. var t = WinLog;
  7253.  
  7254. function eventButClear(){
  7255. var t = WinLog;
  7256. t.lastE = null;
  7257. t.eOut.innerHTML ='';
  7258. }
  7259. function eventButReverse(){
  7260. var t = WinLog;
  7261. if (t.busy)
  7262. return;
  7263. t.busy = true;
  7264. if (t.reverse){
  7265. t.win.document.getElementById('wlRev').value= 'Top';
  7266. t.reverse = false;
  7267. } else{
  7268. t.win.document.getElementById('wlRev').value= 'Bottom';
  7269. t.reverse = true;
  7270. }
  7271. var n = t.eOut.childNodes.length;
  7272. if (n < 2)
  7273. return;
  7274. for (i=n-2; i>=0; i--){
  7275. t.eOut.appendChild (t.eOut.childNodes[i]);
  7276. }
  7277. t.busy = false;
  7278. }
  7279. if (!t.win || t.win.closed){
  7280. t.isOpening = true;
  7281. // Firefox bug??? It appears as if a new thread is started on open, withOUT reusing same window
  7282. t.win = window.open('', 'uwtrace', 'top=30,left=0,width=900,height=700,scrollbars=no,location=no,menubar=no,directories=no,status=no');
  7283. t.isOpening = false;
  7284. t.state = null;
  7285. }
  7286. if (t.state == null){
  7287. t.win.document.body.innerHTML = '<STYLE>pre{margin:0px} hr{margin:3px; height:1px; border:0px; color:#cee; background-color:#cee}</style>\
  7288. <BODY style="margin:0px; padding:0px; border:none">\
  7289. <DIV id=winlogtop style="background-color:#d0d0d0; margin:0px; padding:0px; border:1px solid">\
  7290. <INPUT id=wlClear type=submit value="Clear"> &nbsp; <INPUT id=wlRev type=submit value="Bottom"></div>\
  7291. <DIV id=wlOut style="overflow-y:auto; height:100%; max-height:100%"></div></body>';
  7292. t.win.document.getElementById('wlClear').addEventListener('click', eventButClear, false);
  7293. t.win.document.getElementById('wlRev').addEventListener('click', eventButReverse, false);
  7294. t.eOut = t.win.document.getElementById('wlOut');
  7295. t.lastE = null;
  7296. t.state = 1;
  7297. }
  7298. },
  7299. writeText : function (msg){
  7300. WinLog.write (msg.htmlEntities());
  7301. },
  7302. write : function (msg){
  7303. var t = WinLog;
  7304. if (!t.enabled || t.isOpening)
  7305. return;
  7306. t.open();
  7307. var te = document.createElement('pre');
  7308. var now = new Date();
  7309. var m = [];
  7310. var millis = now.getMilliseconds();
  7311. m.push (now.toTimeString().substring (0,8));
  7312. m.push ('.');
  7313. if (millis<100)
  7314. m.push('0');
  7315. if (millis<10)
  7316. m.push('0');
  7317. m.push(millis);
  7318. m.push (': ');
  7319. m.push (msg);
  7320. te.innerHTML = m.join('');
  7321.  
  7322. if (t.reverse){
  7323. if (t.lastE == null){
  7324. t.eOut.appendChild(te);
  7325. t.lastE = te;
  7326. } else {
  7327. t.eOut.insertBefore(te, t.lastE);
  7328. }
  7329. var hr = document.createElement('hr');
  7330. t.eOut.insertBefore(hr, te);
  7331. t.lastE = hr;
  7332. } else {
  7333. t.eOut.appendChild(te);
  7334. t.eOut.appendChild(document.createElement('hr'));
  7335. }
  7336. },
  7337. };
  7338.  
  7339. function ById(id) {
  7340. return document.getElementById(id);
  7341. }
  7342.  
  7343. function addCommasWhole(nStr){
  7344. nStr += '';
  7345. x = nStr.split('.');
  7346. x1 = x[0];
  7347. x2 = x.length > 1 ? '.' + x[1] : '';
  7348. var rgx = /(\d+)(\d{3})/;
  7349. while (rgx.test(x1)) {
  7350. x1 = x1.replace(rgx, '$1' + ',' + '$2');
  7351. }
  7352. return x1;
  7353. }
  7354.  
  7355. function SelectAll(id)
  7356. {
  7357. document.getElementById(id).focus();document.getElementById(id).select();
  7358. }
  7359.  
  7360.  
  7361.  
  7362.  
  7363. function HandleChatPane() {
  7364. var DisplayName = GetDisplayName();
  7365. var GlobalChatBox=document.getElementById('mod_comm_list1');
  7366. var AllianceChatBox=document.getElementById('mod_comm_list2');
  7367. if(AllianceChatBox || GlobalChatBox){
  7368. var chatPosts = document.evaluate(".//div[contains(@class,'chatwrap')]", AllianceChatBox, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
  7369. if(chatPosts){
  7370. for (var i = 0; i < chatPosts.snapshotLength; i++) {
  7371. thisPost = chatPosts.snapshotItem(i);
  7372. if(true){
  7373. //if(this.options.autoHelpAlliance){
  7374. var postAuthor = document.evaluate('.//*[@class="nm"]', thisPost, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
  7375. if(Options.HelpRequest){
  7376. if(postAuthor.snapshotItem(0)){
  7377. var postAuthorName = postAuthor.snapshotItem(0).innerHTML;
  7378. if(postAuthorName != DisplayName){
  7379. var helpAllianceLinks=document.evaluate(".//a[contains(@onclick,'Chat.helpAlliance')]", thisPost, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
  7380. if(helpAllianceLinks){
  7381. for (var j = 0; j < helpAllianceLinks.snapshotLength; j++) {
  7382. thisLink = helpAllianceLinks.snapshotItem(j);
  7383. var alreadyClicked = thisLink.getAttribute("clicked");
  7384. if(!alreadyClicked){
  7385. thisLink.setAttribute('clicked', 'true');
  7386. var myregexp = /(Chat.helpAlliance\(.*\);)/;
  7387. var match = myregexp.exec(thisLink.getAttribute("onclick"));
  7388. if (match != null) {
  7389. onclickCode = match[0];
  7390. if(true){
  7391. DoUnsafeWindow(onclickCode);
  7392. AddToCommandHistory(onclickCode, 'alliance_help');
  7393. }
  7394. }
  7395. }
  7396. }
  7397. }
  7398. }
  7399. }
  7400. }
  7401. }
  7402. // Hide alliance requests in chat
  7403. if(Options.DeleteRequest){
  7404. var helpAllianceLinks=document.evaluate(".//a[contains(@onclick,'Chat.helpAlliance')]", thisPost, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
  7405. if(helpAllianceLinks){
  7406. for (var j = 0; j < helpAllianceLinks.snapshotLength; j++) {
  7407. thisLink = helpAllianceLinks.snapshotItem(j);
  7408. thisLink.parentNode.parentNode.parentNode.parentNode.removeChild(thisLink.parentNode.parentNode.parentNode);
  7409. }
  7410. }
  7411. }
  7412. // Hide rules in chat
  7413. if(Options.DeleteRules){
  7414. var myregexp1 = /Chat rules/i;
  7415. var myregexp2 = /Regole della chat/i;
  7416. if (thisPost.innerHTML.match(myregexp1) || thisPost.innerHTML.match(myregexp2)) {
  7417. thisPost.parentNode.removeChild(thisPost);
  7418. }
  7419. }
  7420. // Hide alliance reports in chat
  7421. if(Options.DeleteRequest){
  7422. var myregexp1 = /sur 5 joueurs aidant/i;
  7423. var myregexp2 = /dans ce projet./i;
  7424. var myregexp3 = /Impossible d\'apporter de l\'aide pour l\'instant/i;
  7425. var myregexp4 = /5 personnes ont d/i;
  7426. if (thisPost.innerHTML.match(myregexp1) || thisPost.innerHTML.match(myregexp2) || thisPost.innerHTML.match(myregexp3) || thisPost.innerHTML.match(myregexp4)) {
  7427. thisPost.parentNode.removeChild(thisPost);
  7428. }
  7429.  
  7430. var myregexp1 = /Sei il nr/i;
  7431. var myregexp2 = /Sei l'aiuto nr/i;
  7432. var myregexp3 = /Il progetto di /i;
  7433. var myregexp4 = /non ha bisogno del tuo aiuto/i;
  7434. var myregexp5 = /massimo degli aiuti/i;
  7435. var myregexp6 = /dato il tuo aiuto al progetto/i;
  7436. if (thisPost.innerHTML.match(myregexp1) || thisPost.innerHTML.match(myregexp2) || thisPost.innerHTML.match(myregexp3) || thisPost.innerHTML.match(myregexp4) || thisPost.innerHTML.match(myregexp5) || thisPost.innerHTML.match(myregexp6)) {
  7437. thisPost.parentNode.removeChild(thisPost);
  7438. }
  7439. var myregexp1 = /You are #/i;
  7440. var myregexp2 = /\'s Kingdom does not need help\./i;
  7441. var myregexp3 = /\'s project has already been completed\./i;
  7442. var myregexp4 = /\'s project has received the maximum amount of help\./i;
  7443. var myregexp5 = /You already helped with (.*?)\'s project\./i;
  7444. if (thisPost.innerHTML.match(myregexp1) || thisPost.innerHTML.match(myregexp2) || thisPost.innerHTML.match(myregexp3) || thisPost.innerHTML.match(myregexp4) || thisPost.innerHTML.match(myregexp5)) {
  7445. thisPost.parentNode.removeChild(thisPost);
  7446. }
  7447. }
  7448. }
  7449. }
  7450. }
  7451. }
  7452.  
  7453.  
  7454. function GetCommandHistory(history_log_name) {
  7455. if(!history_log_name){
  7456. var history_log_name = "default";
  7457. }
  7458. var json= "";
  7459. if(json=='') json='{}';
  7460. var json_object=JSON2.parse(json);
  7461. if(!json_object['items']){
  7462. json_object['items'] = Array();
  7463. }
  7464. return json_object;
  7465. }
  7466.  
  7467. function AddToCommandHistory(command_string, history_log_name, log_length_limit) {
  7468. if(!command_string){ return false; }
  7469. if(!history_log_name){ var history_log_name = "default"; }
  7470. // Default to a history length of 20 commands
  7471. if(!log_length_limit){ var log_length_limit = 20; }
  7472. // Get the previous history of commands
  7473. var previous_commands = GetCommandHistory(history_log_name);
  7474. var items = previous_commands['items'];
  7475. // Add the new command
  7476. items.push(command_string);
  7477. // Limit the history length
  7478. if(items.length>log_length_limit){
  7479. items = items.slice(items.length-log_length_limit);
  7480. }
  7481. previous_commands['items'] = items;
  7482. //alert(history_log_name +' - '+JSON2.stringify(previous_commands));
  7483. //History.push = {log_name_history_log_name,JSON2.stringify(previous_commands)};
  7484. //alert(History.toSource());
  7485. }
  7486.  
  7487. function FindInCommandHistory(command_string, history_log_name) {
  7488. if(!command_string){ return false; }
  7489. if(!history_log_name){ var history_log_name = "default"; }
  7490. // Get the previous history of commands
  7491. var previous_commands = GetCommandHistory(history_log_name);
  7492. var items = previous_commands['items'];
  7493. for(var i=0; i<items.length; i++){
  7494. if(items[i] == command_string){
  7495. return true;
  7496. }
  7497. }
  7498. return false;
  7499. }
  7500. function DoUnsafeWindow(func, execute_by_embed) {
  7501. if(this.isChrome || execute_by_embed) {
  7502. var scr=document.createElement('script');
  7503. scr.innerHTML=func;
  7504. document.body.appendChild(scr);
  7505. } else {
  7506. try {
  7507. eval("unsafeWindow."+func);
  7508. } catch (error) {
  7509. this.Log("A javascript error has occurred when executing a function via DoUnsafeWindow. Error description: "+error.description);
  7510. }
  7511. }
  7512. }
  7513.  
  7514.  
  7515. function GetDisplayName(){
  7516. var DisplayName = document.getElementById('topnavDisplayName');
  7517. if(DisplayName){
  7518. DisplayName = DisplayName.innerHTML;
  7519. }else{
  7520. DisplayName = null;
  7521. }
  7522. return DisplayName
  7523. }
  7524.  
  7525.  
  7526. String.prototype.StripQuotes = function() {
  7527. return this.replace(/"/g,'');
  7528. };
  7529.  
  7530. function translate( wordToTranslate ) {
  7531. var returnWord = wordToTranslate
  7532. if (Options.Langue == 2) {
  7533. if ( translateITAArray[wordToTranslate] != undefined ) {
  7534. returnWord = translateITAArray[wordToTranslate];
  7535. }
  7536. }
  7537. return returnWord;
  7538. }
  7539.  
  7540. ptStartup ();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址