Advertisement
Guest User

Untitled

a guest
Feb 18th, 2019
387
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.34 KB | None | 0 0
  1. /*
  2. Author : Fluffy88
  3. Website : http://fluffy88.com
  4. Rewritten by : dalesmckay
  5.  
  6. changelog:
  7. *6 Nov 2013 - redirect to combined overview if on another page - cheesasaurus
  8. *29 Nov 2013 - removed the old frame setup. Just set win = window.
  9.  
  10. TODO: save settings in a cookie
  11. */
  12.  
  13. function fnInjectOverviewBar(){
  14. /* Default to your own currently active village */
  15. var defaultCoords = fnExtractCoords(win.$("title").html());
  16.  
  17. /* Default to midnight of next day */
  18. var defaultDate = new Date();
  19. defaultDate.setTime(((Math.floor(defaultDate.getTime()/msPerDay)+1)*minsPerDay + defaultDate.getTimezoneOffset())*msPerMin);
  20. defaultDate = defaultDate.toString().replace(/\w+\s*/i,"").replace(/(\d*:\d*:\d*)(.*)/i,"$1");
  21.  
  22. /* Perform the injection */
  23. fnInjectUnits();
  24. win.$('<tr><td colspan="3">Target Village:<input id="snipe_coord" value="'+defaultCoords+'" class="text-input inactive" size="7" onFocus="this.select()" /></td><td colspan="1">Hit time:<input id="arrival_time" size="25" class="text-input inactive" value="'+defaultDate+'" onFocus="this.select()" /></td><td><input type="button" value="Go" onClick="fnCalculateBackTime()" /></td></tr>').insertAfter(win.$('#menu_row2'));
  25. win.$('<div id="snipe_output"><br/><span>Fluffy88\'s Snipe Calculator</span><br/><span><sub>(dalesmckay modification ' + version + ')</sub><hr></span><br/></div>').insertAfter(win.$('body'));
  26. }
  27.  
  28. function fnExtractCoords(src){
  29. var vv=src.match(/\d+\|\d+/ig);
  30. return (vv?vv[vv.length-1]:null);
  31. }
  32.  
  33. function fnCalculateDistance(to,from){
  34. var target = fnExtractCoords(to).match(/(\d+)\|(\d+)/);
  35. var source = fnExtractCoords(from).match(/(\d+)\|(\d+)/);
  36. var fields = Math.sqrt(Math.pow(source[1]-target[1],2)+Math.pow(source[2]-target[2],2));
  37.  
  38. return fields;
  39. }
  40.  
  41. function fnDebugLog(msg){win.$("body").append("<span>"+msg+"</span><br/>");}
  42.  
  43. /* sendMethod = "GET" || "POST", params = json, type = xml,json,text */
  44. function fnAjaxRequest(url,sendMethod,params,type){
  45. var error=null,payload=null;
  46.  
  47. win.$.ajax({
  48. "async":false,
  49. "url":url,
  50. "data":params,
  51. "dataType":type,
  52. "type":String(sendMethod||"GET").toUpperCase(),
  53. "error":function(req,status,err){error="ajax: " + status;},
  54. "success":function(data,status,req){payload=data;}
  55. });
  56.  
  57. if(error){
  58. throw(error);
  59. }
  60.  
  61. return payload;
  62. }
  63.  
  64. function fnCreateConfig(name){return win.$(fnAjaxRequest("/interface.php","GET",{"func":name},"xml")).find("config");}
  65. function fnCreateUnitConfig(){return fnCreateConfig("get_unit_info");}
  66. function fnCreateWorldConfig(){return fnCreateConfig("get_config");}
  67.  
  68. function fnCalculateLaunchTime(source,target,unit,landingTime){
  69. var distance = fnCalculateDistance(target,source);
  70. var unitSpeed = unitConfig.find(unit+" speed").text();
  71.  
  72. /* Convert minutes to milli-seconds */
  73. var unitTime = distance*unitSpeed*msPerMin;
  74.  
  75. /* Truncate milli-second portion of the time */
  76. var launchTime = new Date();
  77. launchTime.setTime(Math.round((landingTime.getTime() - unitTime)/msPerSec)*msPerSec);
  78.  
  79. return launchTime;
  80. }
  81.  
  82. function fnWriteCookie(ele){
  83. var snipeConfig="";
  84.  
  85. win.$("#combined_table tr:first th img[src*=unit_]").each(function(i,e){
  86. snipeConfig+=win.$("#view_"+e.src.match(/unit\_(.+)\.png?/i)[1]).is(':checked')?"1":"0";
  87. });
  88.  
  89. var cookie_date=new Date(2099,11,11);
  90. win.document.cookie='$snipe='+snipeConfig+';expires='+cookie_date.toGMTString();
  91. }
  92.  
  93. function fnInjectUnits(){
  94. var twCookie=win.document.cookie.match(/\$snipe\=([0|1]*)/i);
  95. if(twCookie){
  96. twCookie=twCookie[1];
  97. for(var ii=0;ii<twCookie.length;ii++){
  98. }
  99. }
  100.  
  101. win.$("#combined_table tr:first th img[src*=unit_]").each(function(i,e){
  102. if(this.parentNode.nodeName=="A")
  103. {
  104. win.$('<input type="checkbox" '+((!twCookie||(twCookie[i]=="1"))?'checked="true"':'')+' id="view_'+e.src.match(/unit\_(.+)\.png?/i)[1]+'" OnClick="fnWriteCookie(this);"/>').insertBefore(win.$(this.parentNode));
  105. }
  106. else
  107. {
  108. win.$('<input type="checkbox" '+((!twCookie||(twCookie[i]=="1"))?'checked="true"':'')+' id="view_'+e.src.match(/unit\_(.+)\.png?/i)[1]+'" OnClick="fnWriteCookie(this);"/>').insertBefore(win.$(this));
  109. }
  110. });
  111. win.$("#combined_table tr:first th:has(img[src*=unit_])").attr("style","background-color:yellow");
  112. }
  113.  
  114. function fnExtractUnits(){
  115. var units=[];
  116.  
  117. win.$("#combined_table tr:first th img[src*=unit_]").each(function(i,e){
  118. units.push(e.src.match(/unit\_(.+)\.png?/i)[1]);
  119. });
  120.  
  121. return units;
  122. }
  123.  
  124. function fnCalculateBackTime(){
  125. var worldConfig = fnCreateWorldConfig();
  126. var hasChurch = worldConfig && parseInt(worldConfig.find("game church").text()||"0", 10);
  127. /*var arrivalTime = new Date(win.$("#arrival_time").attr("value").split(":").slice(0,3).join(":"));
  128. var target = win.$("#snipe_coord").attr("value");*/
  129. var arrivalTime = new Date(document.getElementById("arrival_time").value.split(":").slice(0,3).join(":"));
  130. var target = document.getElementById("snipe_coord").value;
  131. var servertime = win.$("#serverTime").html().match(/\d+/g);
  132. var serverDate = win.$("#serverDate").html().match(/\d+/g);
  133. serverTime = new Date(serverDate[1]+"/"+serverDate[0]+"/"+serverDate[2]+" "+servertime.join(":"));
  134. var output = [];
  135. var ii,troop_count,source,launchTime;
  136. var units=fnExtractUnits();
  137.  
  138. /* Loop through your own villages */
  139. win.$("#combined_table tr:gt(0)").each(function(i,e){
  140. source = fnExtractCoords($(this).find("td:eq(1)").html());
  141. if(source != target){
  142. var isVisible = false;
  143.  
  144. /* Process Each Unit */
  145. for(ii=0;ii<units.length;ii++){
  146. if(win.$("#view_"+units[ii]).is(':checked')){
  147. troop_count = parseInt($(this).find("td:eq("+(ii+(hasChurch?9:8))+")").text(),10);
  148.  
  149. /* Do we have Units currently Available */
  150. if(troop_count > 0){
  151. launchTime=fnCalculateLaunchTime(source,target,units[ii],arrivalTime);
  152.  
  153. /* Cache Units that can reach the target on time */
  154. if(launchTime.getTime() > serverTime.getTime()){
  155. isVisible = true;
  156. output.push([launchTime.getTime(),"Send "+units[ii]+"(" + troop_count + ") from [coord]"+source+"[/coord] to [coord]"+target+"[/coord] at "+launchTime.toString().replace(/(\d*:\d*:\d*)(.*)/i,"$1"),e]);
  157. }
  158. }
  159. }
  160. }
  161. }
  162.  
  163. win.$(e).attr("style","display:"+(isVisible?"table-row":"none"));
  164. });
  165.  
  166. /* Sort by Launch Time in Ascending Order */
  167. output = output.sort(function(a,b){return (a[0]-b[0]);});
  168. for(var qq=0;qq<output.length;qq++){win.$("#combined_table").get(0).tBodies[0].appendChild(output[qq][2]);}
  169.  
  170. /* Clear existing messages and display version */
  171. var srcHTML = "";
  172. srcHTML += "<br/>";
  173. srcHTML += "<span>Fluffy88\'s Snipe Calculator</span>";
  174. srcHTML += "<br/>";
  175. srcHTML += "<span><sub>(dalesmckay modification " + version + ")</sub><hr></span>";
  176. srcHTML += "<br/>";
  177.  
  178. if(output.length > 0){
  179. srcHTML += "<div align=\"center\"><textarea wrap=\"off\" readonly=\"yes\" cols=\"80\" rows=\"" + (output.length+1) + "\" style=\"width:95%;background-color:transparent;\" onfocus=\"this.select();\">";
  180.  
  181. for(ii=0;ii<output.length;ii++){
  182. srcHTML += output[ii][1] + "\n";
  183. }
  184.  
  185.  
  186. srcHTML += "</textarea></div>";
  187. }
  188. else{
  189. srcHTML += "<span style=\"color:red;\">Impossible to reach on time</span>";
  190. }
  191.  
  192. srcHTML += "<br/><br/><br/>";
  193.  
  194. win.$("#snipe_output").html("");
  195. win.$("#snipe_output").append(win.$(srcHTML));
  196. }
  197.  
  198.  
  199. try{
  200. if(game_data.screen == 'overview_villages' && game_data.mode == 'combined')
  201. {
  202. var author="dalesmckay@gmail.com";
  203. var minVer="0.0";
  204. var win=(window.frames.length>0)?window.main:window;
  205. var win = window;
  206.  
  207. var ver=win.game_data.version.match(/[\d|\.]+/g);
  208. if(!ver||(parseFloat(ver[1])<minVer)){
  209. alert("This script requires v"+minVer+" or higher.\nYou are running: v"+ver[1]);
  210. }
  211. else if(win.$("#snipe_output").length <= 0){
  212. var msPerSec=1000;
  213. var secsPerMin=60;
  214. var minsPerHour=60;
  215. var hrsPerDay=24;
  216. var msPerMin=msPerSec*secsPerMin;
  217. var msPerHour=msPerMin*minsPerHour;
  218. var msPerDay=msPerHour*hrsPerDay;
  219. var minsPerDay=hrsPerDay*minsPerHour;
  220.  
  221. var version='v0.0';
  222.  
  223. var unitConfig=fnCreateUnitConfig();
  224.  
  225. fnInjectOverviewBar();
  226. }
  227. }
  228. else
  229. {
  230. UI.InfoMessage('Going to the combined overview...', 3000, 'success');
  231. window.location = game_data.link_base_pure + 'overview_villages&mode=combined';
  232. }
  233. }
  234. catch(objError){
  235. var dbgMsg="Error: " + String(objError.message||objError);
  236. alert(dbgMsg);
  237. }
  238.  
  239. void(0);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement