Advertisement
SophieDebleeckere

Sigil sniper Tribalwars

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