Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- javascript: (function() {
- const TIMER_SECONDS = 10000;
- const INCOMING_IFRAMEID = 'iframe_incoming';
- const MAIN_FRAMEID = 'iframe_main';
- const SCAVENGE_FRAMEID = 'iframe_scavenge';
- const SCREEN_URLS = {
- INCOMING: 'incoming',
- PLACE: 'place',
- MAIN: 'main',
- SCAVENGE: 'scavenge'
- };
- document.body.innerHTML += `
- <style>
- iframe {
- width: 400px;
- display: inline-block;
- float: left;
- height: 375px;
- }
- body {
- margin-top: 50px;
- }
- tr.shadedBG {
- border-top: 5px solid #8e4a33;
- display: inline-block;
- }
- .one-box {
- display: inline-block;
- width: 400px;
- background: white;
- vertical-align: top;
- margin: 10px;
- border: 1px solid brown;
- }
- .one-box * {
- box-sizing: border-box;
- }
- .one-box .one-box__title{
- line-height: 20px;
- font-weight: bold;
- padding: 5px;
- text-align: center;
- font-size: 1.4em;
- }
- .one-box .one-box__button {display: inline-block;
- width: calc(100% - 10px);
- line-height: 20px;
- font-size: 16px;
- cursor: pointer;
- background: lightblue;
- padding: 5px;
- text-align: center;
- }
- .one-box .one-box__content {
- display: block;
- max-height: 0;
- overflow:hidden;
- }
- .one-box.open .one-box__content {
- display: block;
- max-height: 1000px;
- margin-top: 10px;
- padding: 10px;
- padding-top: 0px;
- border: 1px solid black;
- text-align: left;
- }
- .one-box.open .one-box__button {
- background: lightgray;
- }
- .one-box .one-box__action {
- margin: 3px;
- border-radius: 5px;
- border: 1px solid black;
- padding: 5px;
- display: inline-block;
- }
- .one-box label {
- display:inline-block;
- color:#444;
- font-weight: bold;
- font-size: 0.75em;
- font-size: 10px;
- text-align:left;
- display:inline-block;
- width: 100%;
- }
- .one-box .input-box{
- display: inline-block;
- width: 50%;
- float: left;
- padding-right: 10px;
- margin-bottom: 10px;
- }
- .one-box input {
- display:inline-block;
- width: 100%;
- }
- hr {
- clear: both;
- }
- .two-buttons{
- width: 100%;
- }
- .two-buttons div+div {
- background: blue;
- color: white;
- border: 1px solid darkblue;
- cursor:pointer;
- }
- .two-buttons div+div:hover {
- box-shadow: 0px 2px 3px rgba(20,20,20,0.13);
- }
- </style>`;
- function applyRetry(callbackFunction, attempts = 10) {
- var succeeded = false;
- var incr = 0;
- var intervalTick = setInterval(() => {
- if (succeeded != true && incr < attempts) {
- try {
- incr++;
- succeeded = true;
- callbackFunction();
- } catch (e) {
- succeeded = false;
- }
- } else {
- removeInterval();
- }
- }, 2000);
- function removeInterval() {
- clearInterval(intervalTick);
- }
- }
- function getRandomArbitrary(min, max) {
- return Math.random() * (max - min) + min;
- }
- function setLaunchTimeout(arrivalTime, iframeId) {
- applyRetry(() => {
- var commandDuration = _GET_('.relative_time', iframeId).dataset.duration;
- _GET_(
- 'body',
- iframeId
- ).innerHTML += `<style>#command-data-form:not([name="units"]) {
- position: fixed;
- z-index: 1000000;
- width: 100%;
- background: #f7f1df;
- top: 0;
- left: 0;
- right: 0;
- padding: 15px;
- }</style>`;
- var snapshotDate = new Date();
- var arrivalTimeJS = new Date(
- `${arrivalTime.month}-${arrivalTime.day}-${snapshotDate.getFullYear()}`
- );
- console.warn(iframeId, arrivalTimeJS.toString(), snapshotDate.toString());
- arrivalTimeJS.setHours(+arrivalTime.hour);
- arrivalTimeJS.setMinutes(+arrivalTime.minute);
- arrivalTimeJS.setSeconds(+arrivalTime.second);
- var diffMs = arrivalTimeJS - snapshotDate - commandDuration * 1000;
- console.warn('SLT', arrivalTime, iframeId);
- console.warn(iframeId + ' lanseaza in ' + diffMs + ' secunde');
- if (diffMs > -1) {
- setTimeout(() => {
- simulateClick(_GET_('#troop_confirm_go', iframeId));
- }, diffMs);
- } else simulateClick(_GET_('#troop_confirm_go', iframeId));
- });
- }
- function SEND_EACH_INPUT() {
- parseInputs().forEach((pairOfVillages, index) => {
- setTimeout(() => {
- ATTACK_A_TO_B(pairOfVillages);
- }, index * 700);
- });
- }
- function checkDistance(origin, target) {
- var originCoords = {
- x: origin.split('|')[0],
- y: origin.split('|')[1]
- };
- var targetCoords = {
- x: target.split('|')[0],
- y: target.split('|')[1]
- };
- var xDist = Math.abs(originCoords.x - targetCoords.x);
- var yDist = Math.abs(originCoords.y - targetCoords.y);
- return Math.sqrt(xDist * xDist + yDist * yDist);
- }
- var acTime = new Date();
- $menu = $(
- `<div class="" style="background:rgba(100,100,100,0.2);padding:15px;"></div>`
- ).html(
- `<div class="order-time">
- <div class="input-box"> <label>Zi</label><input data-role="day" type="text" value="${acTime.getDate()}"></div>
- <div class="input-box"> <label>Luna</label><input data-role="month" type="text" value="${acTime.getMonth()+1}"></div>
- <hr/>
- <div class="input-box"> <label>Ora</label><input data-role="hour" type="text"></div>
- <div class="input-box"> <label>Minut</label><input data-role="minute" type="text"></div>
- <div class="input-box"> <label>Secunda</label><input data-role="second" type="text"></div>
- </div>
- <hr/>
- <div class="input-box"> <label>Tinta (XXX|YYY):</label><input id="input-target"></div>
- <div class="input-box"> <label>RANGE MINIM:</label><input id="input-minim"></div>
- <div class="input-box"> <label>RANGE MAXIM:</label><input id="input-maxim"></div>
- <div class="input-box"> <label>Include Nobili in full:</label><input id="input-nobili" type="checkbox"></div>
- <hr/>`
- );
- $menuVillages = $(
- `<div class="" style="background:rgba(100,100,100,0.2);padding:15px;"></div>`
- ).html(
- `<div class="order-time-villages">
- <div class="input-box"> <label>Zi</label><input data-role="day" type="text" value="${acTime.getDate()}"></div>
- <div class="input-box"> <label>Luna</label><input data-role="month" type="text" value="${acTime.getMonth()+1}"></div>
- <hr/>
- <div class="input-box"> <label>Ora</label><input data-role="hour" type="text"></div>
- <div class="input-box"> <label>Minut</label><input data-role="minute" type="text"></div>
- <div class="input-box"> <label>Secunda</label><input data-role="second" type="text"></div>
- </div>
- <hr/>
- <div class="input-box"> <label>Tinta (XXX|YYY):</label><input id="input-villages-target"></div>
- <div class="input-box"> <label>Sate origine:</label><input id="input-villages-origins" placeholder="XXX|YYY ZZZ|WWW AAA|BBB"></div>
- <div class="input-box"> <label>Include Nobili in full:</label><input id="input-villages-nobili" type="checkbox"></div>
- <hr/>`
- );
- $framesWrapper = $("<div id='framesWrapper'></div>");
- $boxesWrapper = $(
- "<div id='boxesWrapper' style='padding:20px;padding-bottom:0;text-align:center'></div>"
- );
- $start = $('<div>Lanseaza</div>');
- $startFakeRange = $('<div>Go Fake</div>').addClass('one-box__action');
- $startFullRange = $('<div>GO FULL</div>').addClass('one-box__action');
- var $attacksWrapper = $("<div class='two-buttons'></div>")
- .append($startFakeRange)
- .append($startFullRange);
- $startFakeVillages = $('<div>Go Fake</div>').addClass('one-box__action');
- $startFullVillages = $('<div>GO FULL</div>').addClass('one-box__action');
- var $attacksWrapperVillages = $("<div class='two-buttons'></div>")
- .append($startFakeVillages)
- .append($startFullVillages);
- $startFakeVillages.click(SEND_FAKE_VILLAGES);
- $startFullVillages.click(SEND_FULL_VILLAGES);
- $openScavenge = $('<div class="one-box__action">Deschide curatare</div>');
- $startScavenge = $('<div>Porneste curatare</div>').addClass('one-box__action');
- $start.click(SEND_EACH_INPUT);
- $startFakeRange.click(SEND_FAKE_RANGE);
- $startFullRange.click(SEND_FULL_RANGE);
- $openScavenge.click(openScavenge);
- $startScavenge.click(startScavengeTimer);
- var $attackListBox = renderBox('Atacuri cu lista', $menuVillages, $attacksWrapperVillages);
- $boxesWrapper.prepend($attackListBox);
- var $fakeBox = renderBox('Fake in interval', $menu, $attacksWrapper);
- $boxesWrapper.prepend($fakeBox);
- var $scavengeBox = renderBox('Script curatare', $openScavenge, $startScavenge);
- $boxesWrapper.prepend($scavengeBox);
- $('body').prepend($framesWrapper);
- $('body').prepend($boxesWrapper);
- function SEND_FAKE_RANGE() {
- const results = [];
- time = {};
- $('.order-time input').each(function() {
- time[$(this).data('role')] = $(this).val() || 0;
- });
- var target = $('#input-target').val();
- var minim = $('#input-minim').val();
- var maxim = $('#input-maxim').val();
- $('.quickedit-label').each(function() {
- var name = $(this)
- .text()
- .trim();
- var coords = name.match(/\(.*\|.*\)/)[0].substr(1, 7);
- if (
- checkDistance(coords, target) <= maxim &&
- checkDistance(coords, target) >= minim
- ) {
- results.push(coords);
- }
- });
- console.warn(results);
- results.forEach(function(myCoords, currentIndex) {
- setTimeout(() => {
- ATTACK_A_TO_B({
- origin: myCoords,
- target: target,
- time: time,
- type: 'FAKE'
- });
- }, (Math.floor(Math.random() * 5000) + 3000) * currentIndex);
- });
- }
- function SEND_FULL_RANGE() {
- const results = [];
- time = {};
- $('.order-time input').each(function() {
- time[$(this).data('role')] = $(this).val() || 0;
- });
- var target = $('#input-target').val();
- var minim = $('#input-minim').val();
- var maxim = $('#input-maxim').val();
- localStorage.setItem('sendSnobs', $("#input-nobili")[0].checked);
- $('.quickedit-label').each(function() {
- var name = $(this)
- .text()
- .trim();
- var coords = name.match(/\(.*\|.*\)/)[0].substr(1, 7);
- if (
- checkDistance(coords, target) <= maxim &&
- checkDistance(coords, target) >= minim
- ) {
- results.push(coords);
- }
- });
- console.warn(results);
- results.forEach(function(myCoords, currentIndex) {
- setTimeout(() => {
- ATTACK_A_TO_B({
- origin: myCoords,
- target: target,
- time: time,
- type: 'FULL'
- });
- }, (Math.floor(Math.random() * 5000) + 3000) * currentIndex);
- });
- }
- /// VLG
- function SEND_FAKE_VILLAGES() {
- time = {};
- $('.order-time-villages input').each(function() {
- time[$(this).data('role')] = $(this).val() || 0;
- });
- var target = $('#input-villages-target').val();
- var origins = $('#input-villages-origins').val();
- var results = origins.split(' ').map(a => a.trim());
- results.forEach(function(myCoords, currentIndex) {
- setTimeout(() => {
- if(myCoords.length && myCoords.length === 7)
- ATTACK_A_TO_B({
- origin: myCoords,
- target: target,
- time: time,
- type: 'FAKE'
- });
- }, (Math.floor(Math.random() * 5000) + 3000) * currentIndex);
- });
- }
- function SEND_FULL_VILLAGES() {
- time = {};
- $('.order-time-villages input').each(function() {
- time[$(this).data('role')] = $(this).val() || 0;
- });
- var target = $('#input-villages-target').val();
- var origins = $('#input-villages-origins').val();
- localStorage.setItem('sendSnobs', $("#input-villages-nobili")[0].checked);
- var results = origins.split(' ').map(a => a.trim());
- results.forEach(function(myCoords, currentIndex) {
- setTimeout(() => {
- if(myCoords.length && myCoords.length === 7)
- ATTACK_A_TO_B({
- origin: myCoords,
- target: target,
- time: time,
- type: 'FULL'
- });
- }, (Math.floor(Math.random() * 5000) + 3000) * currentIndex);
- });
- }
- ///
- function newTargetRow() {
- var _div = document.createElement('div');
- _div.className = 'one-order';
- var _i1 = document.createElement('input');
- var _i2 = document.createElement('input');
- var _time = document.createElement('div');
- _time.className = 'order-time';
- _time.innerHTML = `
- <div class="input-box"> <label>Zi</label><input data-role="day" type="text"></div>
- <div class="input-box"> <label>Luna</label><input data-role="month" type="text"></div>
- <hr/>
- <div class="input-box"> <label>Ora</label><input data-role="hour" type="text"></div>
- <div class="input-box"> <label>Minut</label><input data-role="minute" type="text"></div>
- <div class="input-box"> <label>Secunda</label><input data-role="second" type="text"></div>`;
- var _se = document.createElement('select');
- _se.innerHTML =
- '<option value="FAKE">FAKE</option><option value="FULL">FULL</option><option value="HELP">HELP</option>';
- _div.appendChild(_i1);
- _div.appendChild(_i2);
- _div.appendChild(_se);
- _div.appendChild(_time);
- document.getElementById('orders').appendChild(_div);
- }
- function getVillageID(villageCoords) {
- var result;
- if (villageCoords) {
- $('.quickedit-label').each(function() {
- if (
- $(this)
- .text()
- .includes(villageCoords)
- ) {
- result = $(this)
- .parent()
- .attr('href')
- .split('=')[1]
- .split('&')[0];
- }
- });
- return result;
- }
- return window.game_data.village.id;
- }
- function getScreenURL(screen, villageId) {
- var URL = window.location.href;
- switch (screen) {
- case 'place':
- URL = `/game.php?village=${villageId}&screen=place`;
- break;
- case 'incoming':
- URL = `/game.php?village=${villageId}&screen=overview_villages&mode=incomings&subtype=attacks`;
- break;
- case 'scavenge':
- URL = `/game.php?village=${villageId}&screen=place&mode=scavenge`;
- break;
- }
- return URL;
- }
- function getIframe(iframeId, villageId, screen = SCREEN_URLS.PLACE) {
- return (
- '<iframe src="' +
- getScreenURL(screen, villageId) +
- '" name="' +
- iframeId +
- '" width="400" height="375"></iframe>'
- );
- }
- var simulateClick = function(elem) {
- var evt = new MouseEvent('click', {
- bubbles: true,
- cancelable: true,
- view: window
- });
- var canceled = !elem.dispatchEvent(evt);
- };
- var simulateKeyboardEvent = function(elem, event) {
- var evt = new KeyboardEvent(event, {
- bubbles: true,
- cancelable: true,
- view: window
- });
- var canceled = !elem.dispatchEvent(evt);
- };
- function _GET_(selector, iframeId) {
- window.frames;
- var fr = window.frames[iframeId];
- return fr.document.querySelector(selector);
- }
- function trimBrackets(string) {
- return string.substr(1, string.length - 2);
- }
- function fillTroops(troopsType = 'FAKE', iframeId) {
- const fake_const = {
- spy: 60,
- catapult: 25,
- ram: 15
- };
- applyRetry(() => {
- switch (troopsType) {
- case 'FAKE':
- var totalSpy = trimBrackets(
- _GET_('.units-entry-all[data-unit="spy"]', iframeId).innerText
- );
- var totalRam = trimBrackets(
- _GET_('.units-entry-all[data-unit="ram"]', iframeId).innerText
- );
- var totalCatapult = trimBrackets(
- _GET_('.units-entry-all[data-unit="catapult"]', iframeId).innerText
- );
- const spyFinal =
- totalSpy >= fake_const.spy ? fake_const.spy : totalSpy;
- const ramFinal =
- totalRam >= fake_const.ram ? fake_const.ram : totalRam;
- const catapultFinal =
- totalCatapult >= fake_const.catapult
- ? fake_const.catapult
- : totalCatapult;
- _GET_('#unit_input_spy', iframeId).value = spyFinal;
- _GET_('#unit_input_ram', iframeId).value = ramFinal;
- _GET_('#unit_input_catapult', iframeId).value = catapultFinal;
- var totalPopulation = spyFinal * 2 + ramFinal * 5 + catapultFinal * 8;
- if (totalPopulation >= 120 && ramFinal + catapultFinal > 0) {
- simulateClick(_GET_('#target_attack', iframeId));
- }
- break;
- case 'FULL':
- simulateClick(_GET_('#selectAllUnits', iframeId));
- if (!localStorage.getItem('sendSnobs')) {
- _GET_('#unit_input_snob', iframeId).value = 0;
- }
- simulateClick(_GET_('#target_attack', iframeId));
- break;
- case 'HELP':
- simulateClick(_GET_('#selectAllUnits', iframeId));
- simulateClick(_GET_('#target_support', iframeId));
- break;
- }
- });
- }
- function startAttack(commandObject, iframeId) {
- applyRetry(() => {
- _targetInput = _GET_('[placeholder="123|456"]', iframeId);
- _targetInput.value = commandObject.target;
- fillTroops(commandObject.type, iframeId);
- setTimeout(() => {
- setLaunchTimeout(commandObject.time, iframeId);
- }, TIMER_SECONDS);
- });
- }
- function ATTACK_A_TO_B(commandObject) {
- console.warn('ATOB', commandObject);
- const villageId = getVillageID(commandObject.origin);
- const IFRAME_ID = 'iframe_' + villageId;
- const IFRAME_HTML = getIframe(IFRAME_ID, villageId);
- $('#framesWrapper').append($('<div>' + IFRAME_HTML + '</div>'));
- setTimeout(() => startAttack(commandObject, IFRAME_ID), TIMER_SECONDS);
- }
- function openIncoming() {
- const villageId = getVillageID();
- var ticking = true;
- const IFRAME_HTML = getIframe(
- INCOMING_IFRAMEID,
- villageId,
- SCREEN_URLS.INCOMING
- );
- setTimeout(recursiveStart, 60000 + Math.floor(Math.random() * 30000));
- function recursiveStart() {
- document.querySelector(
- `iframe[name="${INCOMING_IFRAMEID}"]`
- ).src = getScreenURL(SCREEN_URLS.INCOMING, villageId);
- if (ticking)
- setTimeout(recursiveStart, 60000 + Math.floor(Math.random() * 30000));
- }
- $('#framesWrapper').append($('<div>' + IFRAME_HTML + '</div>'));
- }
- function openMain() {
- const villageId = getVillageID();
- var ticking = true;
- const IFRAME_HTML = getIframe(MAIN_FRAMEID, villageId, SCREEN_URLS.MAIN);
- setTimeout(recursiveStart, 60000 + Math.floor(Math.random() * 30000));
- function recursiveStart() {
- document.querySelector(
- `iframe[name="${MAIN_FRAMEID}"]`
- ).src = getScreenURL(SCREEN_URLS.MAIN, villageId);
- if (ticking)
- setTimeout(recursiveStart, 60000 + Math.floor(Math.random() * 30000));
- }
- $('#framesWrapper').append($('<div>' + IFRAME_HTML + '</div>'));
- }
- function openScavenge() {
- const villageId = getVillageID();
- var ticking = false;
- const IFRAME_HTML = getIframe(
- SCAVENGE_FRAMEID,
- villageId,
- SCREEN_URLS.SCAVENGE
- );
- // setTimeout(recursiveStart, 60000 + Math.floor(Math.random() * 30000));
- $('#framesWrapper').append($('<div>' + IFRAME_HTML + '</div>'));
- }
- function renderBox(boxTitle, boxContent, boxAction) {
- var $box = $('<div></div>').addClass('one-box');
- var $boxTitle = $('<div></div>')
- .addClass('one-box__title')
- .text(boxTitle);
- var $boxToggle = $('<div></div>')
- .addClass('one-box__button')
- .text('Toggle')
- .click(function() {
- $(this)
- .parent()
- .toggleClass('open');
- });
- var $boxAction = $('<div></div>').html($(boxAction));
- var $boxContent = $('<div></div>')
- .addClass('one-box__content')
- .append($(boxContent))
- .append($boxAction);
- $box.append($boxTitle);
- $box.append($boxToggle);
- $box.append($boxContent);
- return $box;
- }
- function getRandomArbitrary(min, max) {
- return Math.random() * (max - min) + min;
- }
- const SCAVENGE_MULTIPLIERS = [
- [1],
- [0.2858, 0.7142],
- [0.125, 0.25, 0.625],
- [0.0769, 0.1153, 0.2307, 0.5769]
- ];
- var units = {};
- _$ = selector =>
- typeof selector == 'string'
- ? $(_GET_(selector, SCAVENGE_FRAMEID))
- : $(_GET_(selector.selector, SCAVENGE_FRAMEID));
- function fillScavengeForm(index) {
- function fillScavengeUnit(unitName, unitAmmount) {
- var $field = _GET_('[name="' + unitName + '"]', SCAVENGE_FRAMEID);
- simulateKeyboardEvent($field, 'keydown');
- $field.value = unitAmmount;
- simulateKeyboardEvent($field, 'keyup');
- }
- Object.keys(units).forEach(key => {
- fillScavengeUnit(key, units[key][index]);
- });
- }
- function clickButton(i) {
- simulateClick(
- _GET_(
- `.scavenge-option:nth-of-type(${i +
- 1}) a.btn.btn-default.free_send_button`,
- SCAVENGE_FRAMEID
- )
- );
- }
- function initScript() {
- var totalUnlocked = 3 - _$('a.btn.btn-default.unlock-button').length;
- var unlockedAllLast = {
- '_1': [1],
- '_2': [1, 0],
- '_3': [1, 0, 0]
- }
- var currentMultipliers = SCAVENGE_MULTIPLIERS[totalUnlocked];
- if (+trimBrackets(
- _GET_([`.units-entry-all[data-unit=spear]`], SCAVENGE_FRAMEID)
- .innerText
- ) < 100) currentMultipliers = unlockedAllLast[`_${totalUnlocked}`];
- window.game_data.units.forEach(function(name) {
- window.game_data.units;
- try {
- var total = +trimBrackets(
- _GET_([`.units-entry-all[data-unit=${name}]`], SCAVENGE_FRAMEID)
- .innerText
- );
- units[name] = currentMultipliers.map(m => Math.floor(m * total));
- } catch (e) {}
- });
- currentMultipliers.forEach((e, i) => {
- setTimeout(() => {
- fillScavengeForm(i);
- clickButton(totalUnlocked - i);
- }, (i + 1) * 1500 + getRandomArbitrary(600, 959));
- });
- setTimeout(startScavengeTimer, getRandomArbitrary(1900, 2100));
- }
- function startScavengeTimer() {
- var milliseconds = 0;
- if (_$('.return-countdown').length) {
- function toMS(text) {
- const timer = text.split(':')
- .map(nr => parseInt(nr));
- var hours = timer[0];
- var minutes = timer[1] + 1;
- var seconds = timer[2];
- return (hours * 3600 + minutes * 60 + seconds) * 1000;
- }
- const msArray = [];
- _$('.return-countdown').each(function(t){
- msArray.push(toMS(this.innerText))
- });
- milliseconds = Math.max(...msArray) || 1000;
- }
- var today = new Date();
- var launch = new Date(today.getTime() + milliseconds);
- console.warn('Next one at ', launch.getHours(), ':', launch.getMinutes());
- setTimeout(initScript, milliseconds);
- }
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement