Вчера наткнулся на интересную браузерную игру Клавогонки. Смысл игры в том, что вам дается определенный текст по кускам и вы с другими игроками должны на скорость набирать слова.
Конечно в начале я не стал жульничать и решил испытать себя. В итоге, после 5-6 игр, мой лучший результат был 295 знака в минуту (очинь стында).
Через некоторое время, мне стало очень интересно посмотреть скрипты, отвечающие за работу игры.
Как я понял, разработчики этой браузерной игры не беспокоились об оптимизации сайта и было очень много JS и CSS файлов, которые можно было поместить в один файл и не засорять сайт. В предыдущей статье я рассказывал о том, как оптимизировать сайт и о многих ошибках, допускаемых разработчиками.
Говоря уже о самой игре, то самым важным файлом для меня оказался play.js
. В нем и хранится все то, что нам нужно для написания так сказать чита для клавогонок.
При старте игры, в массив game
, генерируются все данные игры . А если говорить подробней, то: список игроков, список слов, полный текст, статус игры, количество ошибок совершенных пользователем и т.д.
Признаюсь честно, я не углублялся во все скрипты и не анализировал каждый массив и переменную. Перед написанием скрипта автоввода слов, я решил попробовать написать скрипт, который будет очищать счетчик ошибок и таким образом, сколько бы я не делал ошибок, счетчик всегда был на нуле.
Но, это было не так интересно. Я решил немного проанализировать код и понял, что есть функция change(object);
, которая отвечает почти за главную часть процесса игры.
При каждом вводе символа вызывается эта функция и в заголовке функции, хранится ссылка на элемент <input>
, то есть поля куда мы вводим слова. С помощью этой функции, идет проверка каждого слова на валидность. Она нам и пригодится скоро.
Далее, обращаемся к массиву game
, а именно к свойству game.text
, который и хранит весь текст игры. Вся фишка в том, что мы можем заглянуть в текст еще до начала игры.
Как вы видите, в консоли красным цветом выделен весь текст и мы конечно можем заранее его прочесть и быть готовыми, но нам этого мало.
Имея функцию split(delimiter), разбиваем каждое слово через пробел на целый массив и получим примерное такое:
Если вы уже посмотрели код, то заметили бы свойство game.words
, а точней многомерный массив разбитых слов из полного текста. Я не стал использовать этот многомерный массив и решил сделать свой одномерный.
_10var words = game.text.split(' ');
Теперь, перейдем к написанию самого скрипта. И давайте опишем задачу:
change(object);
, которая отвечает за проверку слов на валидность.words
.В итоге, получаем такой код:
_10var words = game.text.split(' ');_10var delay = 500;_10setInterval(function(){_10 if (!document.getElementById('inputtext').value) {_10 document.getElementById('inputtext').value = words[0]+' ';_10 change(document.getElementById('inputtext'));_10 words.splice(0,1);_10 }_10},delay);
UPD 06.08.2018: Немного переписал скрипт по просьбе людей. Проверял в Google Chrome, в других браузерах не смотрел. Запускайте сразу, как только войдете в игру. Скрипт автоматически начнет.
_18(function(delay) {_18 var text, words;_18 tlog = (str, data) => {_18 if (str === 'Game::loadInfo' && data.text && !/IP/.test(data.text)) {_18 text = data.text.text;_18 words = text.split(' ');_18 console.log(text);_18 }_18 };_18 change = getEventListeners(document.getElementById('inputtext')).keyup[0].listener;_18 setInterval(function(){_18 if (!document.getElementById('inputtext').value && document.querySelector('#typetext').style.opacity === '1') {_18 change({target: {value: words[0]+' '}})_18 console.log(words[0]);_18 words.splice(0,1);_18 }_18 }, delay);_18})(УКАЖИТЕ_ТУТ_ВРЕМЯ_В_МС);
Параметр delay отвечает за интервал ввода слова. Каждые 500 мс., будет вводить одно слово. Если вас не устраивает скорость ввода, можете уменьшить до 100 (чем меньше число, тем быстрей ввод слов).
Чтобы запустить наш "чит на клавогонки", просто пихаем этот код в консольной строке браузера. Если вы не знаете где находится консоль, обращаемся к гуглу.
[warning] P.S.: Не запускайте скрипт пока не начнется игра и не появится текст. Иначе, в консоли будет куча ошибок и скрипт может не заработать.
[info] P.S.S.: В игре есть что-то вроде "защиты". И если вы наберете символов больше среднего, чем на 10-30%, защита вас попросит пройти тест, на человечность так сказать.
И к завершению статьи хотелось бы сказать, что к разработке своих проектов нужно подходить более серьезней. Заранее обдумывая подобные действия, описанные в данной статье. И конечно вся ирония защит разрабатываемых людьми, ломается или обходится теме же людьми.
Данная статья является ознакомительной и не жульничайте! Это очень-очень плохо!
Надеюсь, разработчики Клавогонок переделают код и не будут хранить такие данные в массивах, а особенно, число ошибок которые можно подменить и сам текст. К примеру, при запуске игры можно выводить не текст, а изображение с текстом.