Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Dripstat — сервис мониторинга продуктивности JVM либо MMO игра?

Anna | 2.06.2014 | нет комментариев

Приветствую, програжители!

Сегодня я хочу рассказать вам про сервис, тот, что нашел дословно незадолго — Dripstat. Он разрешает установить на локальную JVM особый java-шпион тот, что собирает статистику работы сервера приложений и отправляет на сайт, где с ней дозволено детальнее ознакомиться.

— Ну какие сервисы мониторинга? Сегодня суббота! — скажете вы, и будете правы. Больше того, я даже поддержу эту мысль и в данной заметке расскажу как раз об обратной, развлекательной, стороне медали, и чуть-чуть о программировании на JS.

Выходит, приглашаю дочитать тех кто заинтересовался. 

Сразу же идем по ссылке на страничку игры — dripstat.com/game/. Над интерфейсом разработчики не заморачивались, но это и к лучшему — все подсознательно ясно и разобраться дозволено за 5 минут.
Потратив немножко времени на кликанье чашки и сбрасываение накликаного в «кошелек» (capacity) и по ходу дела осмотревшись в интерфейсе стает ясна основная цель игры — «накапать» (drip) побольше памяти. Справа видно оранжевый progress-bar, тот, что показывает нынешнюю цель, но не стоит пугаться столь огромному числу, над его достижением работают все участники (ниже видно маленький рейтинг и диаграмму активности), а не один игрок.

Но капать по 1 байту не увлекательно. Что же у нас есть для того что бы прокачаться? По мере заключения обучения стают доступными средства которые разрешают как генерировать память взамен вас так и улучшать показатели ручной генерации.
Я не буду дублировать информацию и перечислять их все — отменнее увидеть самим (все они перечислены в правой панели, первая строка — доступные совершенствования, а дальнейшие строки — перечень самих генераторов памяти).

Ну вот собственно и все что касается самой игрушки.

Но на этом я не остановился, чай инстинкт программиста заиграл внутри и затребовал проболжения банкета. Следственно я решил все таки испробовать ломануть автоматизировать процесс.

1. Поверхностный обзор протокола обмена сообщениями между сервером и заказчиком показал что подмену сообщений произвести не получится — сервер имеет внутренние механизмы верификации. Ковыряться детальнее мечты не было, следственно я пошел иным путем — со стороны заказчика.

2. Дозволено безусловно обойтись автокликером, но это не так увлекательно да и браузер должен быть непрерывно в фокусе, плюс помимо чашки кофе кликать необходимо и по иным элементам страницы. Первое что пришло в голову как недорогое и результативное решение — userscript (ну и firebug безусловно, чай без него в разы труднее глядеть на внутренности странички). Рассказывать про то как установить нужный плагин и запустить сам скрипт я не буду, этой информации полно на просторах интернета да и на прогре тоже. Но самим скриптом, безусловно же поделюсь.

Основная идея была в дальнейшем:

0) Кликаем-кликаем-кликаем!
1) Пробуем закупать апгрейды, потому как они дают целых 10% мощности для генератора.
2) Дальше ищем самый драгоценный генератор и приобретаем его. Вначале порядок был обратный и непрерывные закупки курсора дюже сонно влияли на прогресс, следственно порядок был изменен.
3) Если накликали 90% памяти, то сбрасываем ее расширяя capacity. Данный пункт выполняется в случае когда все что дозволено было приобрести теснее куплено и для дальнейших закупок необходим кошелек побольше. К примеру и генераторы и апгрейды теснее по цене превзошли capacity и исключительное что остается — Drip Memory.

Реализация:

// ==UserScript==
// @name        dripstat_clicker
// @namespace   x_lab.ice
// @include     https://dripstat.com/game/
// @version     1
// @grant       GM_openInTab
// ==/UserScript==

unsafeWindow.document.hasFocus = function () {return true;};  // в игрушке есть проверка на присутствие фокуса у документа, 
        // и как только фокус теряется мы теснее не можем жать на чашку, соответственно требуется чумазый хак

(function (window, undefined) {
    if (window.top != window.self) { return; }  // чураемся запусков нашего скрипта в iframe

    window.addEventListener("load", LocalMain, false);  // как только страница прогрузилась запускам нашего бота

    function LocalMain() {   
        setInterval(function() { Shopping(); }, 10000);  // приобретаем совершенствования и генераторы 1 раз в 10 сек
        setInterval(function() { Clicker(); }, 10); // а кликаем по чашке 100 раз в сек 
                // (ну либо пытаемся, чай поток JS занят и другими делами, следственно постоянной генерации не получим)
    }

    function Clicker() {
        $('#btn-addMem').click();  // собственно жмем на чашку
        if(localStats.byteCount > localStats.memoryCapacity * 0.9)  {  // если накликали теснее около 90% а потратить некуда
            $('#btn-addGlobalMem').click();  // то увеличиваем capacity
        }
    }

    function Shopping() {  // идем за покупками
        var evt = document.createEvent("MouseEvents");  // готовим фальшивую мышку
        evt.initEvent("click", true, true);

        var upgrades = document.querySelector('#upgrades');  // вначале взглянем что дозволено проапгрейдить
        var upgChildren = upgrades.childNodes;
        for(var j=0; j < upgChildren.length; j  ) { // проходимся по витрине начиная с самого дешевого
            var upgChild = upgChildren[j];
            if(upgChild.className == 'upgcontainer') {  // как раз по имени класса дозволено определить отключен ли элемент
                upgChild.dispatchEvent(evt); // и если он включен - приобретаем
            }
        }

        var store = document.querySelector('#powerupstore'); // дальше идем к генераторам памяти
        var children = store.childNodes;
        for(var i=(children.length-1); i >= 0; i--) { // но глядим самое дорогое
            var child = children[i];
            if(child.className == 'storeItem') {  // обнаружили!
                child.dispatchEvent(evt);  // приобретаем!
            }
        }
    }
})(window);  // вот так и живем :) 

На данный момент (чистого времени работы кликера прошло не так и много), мой итог такой

Статистика

Алгорифм не совершенен но это и не было целью. Основное наслаждение, да и мозги размял.

Айда устроим турнир между AI!

P.S. Скажи печенкам — Нет! (если кто не знал — orteil.dashnet.org/cookieclicker/)

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB