Pull to refresh

Comments 30

Давайте делится рекордами, мой пока
Скрытый текст

Использую такой код для кликанья:
var interval = setInterval(function(){
var t=CoffeeCup.calcBytesPerClick();
localStats.byteCount+=t;
popManager.newPop("btn-addMem","+"+NumUtils.byteConvert(t,2));
},50);

Работает быстрее, чем через .click()
Кстати, опытным путем нашел что и 45 мс можно использовать.
А вот ниже уже нет, ошибку показывает.
Над CookieClicker'ом мой ноут трудился с неделю в 24x7, тоже накручивая клики и собирая ништяки. Забавная это вещь, кликеры. И автокликеры к ним :)

А я просто в CookieClicker через JS установил нужное количество печенья. Игра сразу утратила все краски :)
А как же армагеддон бабушек и пришествие каки-то там темных хранителей? Еще, вроде, там подземелья сделали под шахтами.
Видимо, никак, раз я даже не понимаю, что это такое :)
Сколько надо было принести в жертву мышей, чтобы столько накликать?)
На текущий момент 12** место…
Игра реально затягивает, по-этому я даже рад что применил чит и написал клик в таймауте — больше к игре не тянет.
Использую такой скрипт:
document.hasFocus = function(){return true} // for click without focus

setInterval(function() {
var t=CoffeeCup.calcBytesPerClick();
localStats.byteCount+=t;
popManager.newPop("btn-addMem","+"+NumUtils.byteConvert(t,2));
},50);

setInterval(function() {
// auto drip
if(parseFloat($('#localProgressBar').css('width'))/parseFloat($('#localProgressBar').parent().css('width')) === 1)
$('#btn-addGlobalMem').click();

// auto buy
if(!$('#pu10').hasClass('disabled'))
$('#pu10').click();

// auto buy 1st powerup
if(!$('#upg1').hasClass('disabled'))
$('#upg1').click();
}, 1000);


За вечер и утро, такие результаты:
image
Сегодня уже такие cl.ly/Uinn, почему предыдущее изображение отвалилось, не понимаю.
Хм, а зачем проверять css свойства для дрипа?

такая конструкция вполне адекватно работает.
if (localStats.byteCount>localStats.memoryCapacity*0.97)
  dripper.dripGlobal(!1);

также вполне можно перебирать localStats.powerUps и определять какой ресурс купить выгодней всего на текущий момент. ^_^
Спасибо использую, перебирать ресурсы мне уже не нужно, я просто закупаю кластеры, а когда цена становится выше, чем capacity дрипаю.
Почему никто не упомянул о
document.hasFocus=function(){return true;}?
Извините, был невнимателен
А я накопил побольше памяти, потом нажал «Drip Memory» и стал дублировать запрос из консоли. За 10 секунд накрутил 130 MB и меня забанили. :)
Дублировал так:
$.ajax({type:"POST",async:a,url:GAME_URL+(loggedIn?"events":"eventsanon"),data:"<base64 из request payload запроса>",contentType:"text/plain"});
Переписал алгоритм покупки. Теперь он ищет самый эффективный продукт на данный момент. Ищет по принципу самого дешевого байта, тоесть смотрим на коэффициент / (кол-во байт которое добавляет покупка очередного аппера).

var storeUppers = [2,5,12,16,32,142,389,2075,8858,70862];
var productivity = [];
var ind = 0;
localStats.powerUps.forEach(function(powerUp) {
	var realPrice = powerUp.currentPrice;
	productivity.push(realPrice / storeUppers[ind]);
	ind++;
});

var store = document.querySelector('#powerupstore');
var children = store.childNodes;
var nodeIndex = productivity.indexOf(Math.min.apply(Math, productivity));
var child = children[nodeIndex];
if(child.className == 'storeItem') {
	child.dispatchEvent(evt);
}

P.S. Capacity на данный момент — пол терабайта.
Предвкушая скорое завершение левела хочу поделиться текущим результатом:
6 место


P.S. А кто в курсе что будет после того как набьем необходимое кол-во памяти?
Коллективные ништяки (вроде как Hellbound в небезызвестной Lineage II).
Вообще, скрипт у Вас хороший, только стоит доработать процесс покупки — не покупать Cursor и другие «усилки» по причине нерентабельности (39 гигов за прирост в смехотворные 2 байта/сек это чересчур). В общем и целом, покупать надо не «улучшение И усилок», а «улучшение ИЛИ усилок» — в зависимости от эффективности данного приобретения, что влечёт за собой чуть более сложный процесс покупки. В довесок: не ждать заполнения N % стакана и покупать на заработанное честным трудом, а ждать накопления ресурса на нужное приобретение (сумбурно звучит, да).
Нет, не сумбурно, смысл понятен. Кстати некоторые перечисленные моменты уже реализованы, некоторые — лень, ибо уже конец близок. Вот если обнулят всех то можно еще доработать.
Коллеги, есть вопрос.
Пробовал ли кто-нибудь после достижения некоторого параметра уходить в наращивание объема без покупок? Или как достигаются объемы в 100 TB и более?
У меня сейчас скорость 7.45 MB/s, объем 3.59 TB, 90 кластеров. В алгоритме сделан упор на приращение скорости.

// Занятно было заглянуть в историю своего бота: код кликера разросся с 5 до 12 строк, код покупки разросся с 13 до 52 строк :)

Да, и это, хабраэффект! :)
We have had crazy traffic towards Level 3 end! Here is a bandwidth graph. Notice the insane spike… image
Я так и сделал, перешел на накопление. На данный момент вот результаты:
3 место
image

Но как видно из скрина мне удается бобмить по 30 Gb в минуту, что по факту сложно сделать при производительности в 5.6 Mb/sec и при этом еще не быть пойманным.
Для того что бы получить возможность делать большие drip'ы мне пришлось поэкспериментировать и вот что я выяснил: если часто drip'ать (примерно раз в 50 мс) то ошибка не возникает даже если клики по кружке очень частые (у меня их 10 штук каждые 50 мс). Интервалы из скрипта найдены опытным путем, пробовал увеличить даже на единичку — возникает ошибка.

Вот итоговый скрипт:
(function (window, undefined) {
    if (window.top != window.self) { return; }
    window.addEventListener("load", LocalMain, false);
    
    function LocalMain() {  
        setInterval(function() { FuckTheSystem(); }, 50);
        setInterval(function() { Drip(); }, 50);
        setInterval(function() { CheckError(); }, 1000);
    }
    function FuckTheSystem() {
        for(var i = 0; i < 10; i++) { // 10
            var t=CoffeeCup.calcBytesPerClick();
            localStats.byteCount+=t;
        }
    }
    function Drip() {
    	$('#btn-addGlobalMem').click();
    }
    function CheckError() {
        if($('#networkError').css('display') == 'block') {
            location.reload();
        }
    }
})(window);


P.S. Так же, на всякий случай, была добавлена проверялка наличия окошка об ошибке (один раз был неприятно удивлен, проверив утром состояние статов).
Из-за отсутствия возможности отписать лично, передаю слова Remember'a (да-да, это именно тот человек который возглавляет top):

Хочу поделиться своими результатами и наработками.
При 8.24MB/sec, реальная скорость майнинга, на последнем этапе, была около 120-130 GB/min.

Последняя статистика (думаю на этом мой майнинг и закончился)
image


Изначально использовал просто клики раз в 50мс, без каких либо автоматических покупок. Так довольно быстро открылся доступ к Cache. После этого стало актуально не покупать всё подряд, а находить самую выгодную покупку.

var bestPowerUp = localStats.powerUps[0];
for(var i = 1;i < localStats.powerUps.length; i++) {
    var powerUp = localStats.powerUps[i]; 
    if(powerUp.currentPrice/powerUp.currentBps < bestPowerUp.currentPrice/bestPowerUp.currentBps) {
        bestPowerUp = powerUp;
    }
}
bestPowerUp.buy(localStats);


Если же денег не хватало, то просто ждём и копим дальше. Особого смысла придумывать что-то лучше не было, т.к. через пару дней покупки становятся неактуальными.

Вместе с этим был добавлен авто drip:
if (window.localStats.byteCount > window.localStats.memoryCapacity*0.97) {
    window.dripper.dripGlobal(!1);
}


Также, для удобства, было сделано простенькое расширение для Chrome, которое подгружало рабочий скрипт с Github Gist.

После того как я дошёл до уровня 20+ кластеров, скорость майнинга перестала радовать. Появился повод изучить скрипты Dripstat. В процессе недолгих экспериментов выяснилось, что при частых запросах к серверу можно значительно увеличить скорость майнинга без каких-либо последствий. Как уже описывалось, можно настроить очень частый drip. Но мне это не нравилось тем, что очень уж заметно в поминутной статистике. В итоге, после очередной серии экспериментов, появился такой скрипт:

window.dataSaver.saveInterval = 0.00001;
setInterval(function() {
    window.localStats.byteCount += window.CoffeeCup.calcBytesPerClick();
},0);

Результат: майнинг происходил относительно незаметно и очень быстро.
Ну и чтобы окончательно максимизировать скорость, был проведён эксперимент с коэффициентами.

В итоге стабильно работающая функция майнинга превратилась в:

window.dataSaver.saveInterval = 0.00001;
setInterval(function() {
    window.localStats.byteCount += window.CoffeeCup.calcBytesPerClick()*2.3;
},0);

Вот такая вот история успеха. Только вот интерес уже угас. Да и с 4-м уровнем никак не сложится, не смотря на то, что он должен был начаться еще 2 дня назад — twitter.com/dripstat/status/453577707268231168
Ну как, всех побанали за багоюзерство? :)
Новый уровень началася, соотвственно всех помиловали, но играть уже не интересно, так что я в завязке.
Вот перед ним и ужесточили алгоритмы бана
Deployed fix in cheat detector to ban all the auto clickers

Например, замена saveInterval привела к моментальной блокировке :/
Sign up to leave a comment.

Articles