javascript:
/*
Author : Fluffy88
Modified by : Mitchell - Superdog
Adjusted for multiple snipe calculations at once and sigil in UI by Sass / Shinko to Kuma
*/
var currentFields = 0;
/ Default to your own currently active village /
var defaultCoords = game_data.village.coord;
/ Default to midnight of next day /
var defaultDate;
// function fnInjectOverviewBar(){
// / Default to your own currently active village /
// var defaultCoords = fnExtractCoords(win.$("title").html());
// / Default to midnight of next day /
// var defaultDate = new Date();
// defaultDate.setTime(((Math.floor(defaultDate.getTime()/msPerDay)+1)*minsPerDay + defaultDate.getTimezoneOffset())*msPerMin);
// defaultDate = defaultDate.toString().replace(/\w+\s*/i,"").replace(/(\d*:\d*:\d*)(.*)/i,"$1");
// / Perform the injection /
// fnInjectUnits();
// win.$('
`);
}
function fnCalculateBackTime() {
var srcHTML = "";
srcHTML += " ";
srcHTML += "Sass\'s Snipe Calculator";
srcHTML += " ";
srcHTML += "Credit to Fluffy88 and dalesmckay for part of the code";
var worldConfig = fnCreateWorldConfig();
var hasChurch = worldConfig && parseInt(worldConfig.find("game church").text() || "0", 10);
/*var arrivalTime = new Date(win.$("#arrival_time").attr("value").split(":").slice(0,3).join(":"));
var target = win.$("#snipe_coord").attr("value");*/
for (let i = 0; i < currentFields; i++) {
var arrivalTime = new Date(document.getElementById("arrival_time" + (i+1)).value.split(":").slice(0, 3).join(":"));
var target = document.getElementById("snipe_coord" + (i+1)).value.match(/\d+\|\d+/)[0];
var sigilPercentage=document.getElementById("sigil" + (i+1)).value;
var servertime = win.$("#serverTime").html().match(/\d+/g);
var serverDate = win.$("#serverDate").html().match(/\d+/g);
serverTime = new Date(serverDate[1] + "/" + serverDate[0] + "/" + serverDate[2] + " " + servertime.join(":"));
var output = [];
var ii, troop_count, source, launchTime;
var units = fnExtractUnits();
/ Loop through your own villages /
win.$("#combined_table tr:gt(0)").each(function (i, e) {
source = fnExtractCoords($(this).find("td:eq(1)").html());
if (source != target) {
var isVisible = false;
/ Process Each Unit /
for (ii = 0; ii < units.length; ii++) {
if (win.$("#view_" + units[ii]).is(':checked')) {
troop_count = parseInt($(this).find("td:eq(" + (ii + (hasChurch ? 9 : 8)) + ")").text(), 10);
/ Do we have Units currently Available /
if (troop_count > 0) {
launchTime = fnCalculateLaunchTime(source, target, units[ii], arrivalTime,sigilPercentage);
/ Cache Units that can reach the target on time /
if (launchTime.getTime() > serverTime.getTime()) {
isVisible = true;
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]);
}
}
}
}
}
win.$(e).attr("style", "display:" + (isVisible ? "table-row" : "none"));
});
/ Sort by Launch Time in Ascending Order /
output = output.sort(function (a, b) { return (a[0] - b[0]); });
for (var qq = 0; qq < output.length; qq++) { win.$("#combined_table").get(0).tBodies[0].appendChild(output[qq][2]); }
/ Clear existing messages and display version /
srcHTML += `
${target}
`;
srcHTML += " ";
console.log(output);
if (output.length > 0) {
srcHTML += "";
}
else {
srcHTML += "Impossible to reach on time";
}
srcHTML += "
";
}
win.$("#snipe_output").html("");
win.$("#snipe_output").append(win.$(srcHTML));
}
try {
if (game_data.screen == 'overview_villages' && game_data.mode == 'combined') {
var author = "dalesmckay@gmail.com";
var minVer = "0.0";
//var win=(window.frames.length>0)?window.main:window;
var win = window;
var ver = win.game_data.version.match(/[\d|\.]+/g);
if (!ver || (parseFloat(ver[1]) < minVer)) {
alert("This script requires v" + minVer + " or higher.\nYou are running: v" + ver[1]);
}
else if (win.$("#snipe_output").length <= 0) {
var msPerSec = 1000;
var secsPerMin = 60;
var minsPerHour = 60;
var hrsPerDay = 24;
var msPerMin = msPerSec * secsPerMin;
var msPerHour = msPerMin * minsPerHour;
var msPerDay = msPerHour * hrsPerDay;
var minsPerDay = hrsPerDay * minsPerHour;
var version = 'v3.2';
var unitConfig = fnCreateUnitConfig();
// fnInjectOverviewBar();
defaultDate = new Date();
defaultDate.setTime(((Math.floor(defaultDate.getTime() / msPerDay) + 1) * minsPerDay + defaultDate.getTimezoneOffset()) * msPerMin);
defaultDate = defaultDate.toString().replace(/\w+\s*/i, "").replace(/(\d*:\d*:\d*)(.*)/i, "$1");
createMenu();
addInput();
}
}
else {
UI.InfoMessage('Going to the combined overview...', 3000, 'success');
window.location = game_data.link_base_pure + 'overview_villages&mode=combined';
}
}
catch (objError) {
var dbgMsg = "Error: " + String(objError.message || objError);
alert(dbgMsg);
}
void (0);