Авто переподключение к серверу Battlefield 4

в 14:21, , рубрики: javascript, lifehack, метки: ,

На выходных надо отдыхать. Это факт.
Но есть замечательная фраза «Ни для без строчки кода».
Вот и на этих выходных решил устроить мозгу разминку :-)

Люблю я серию Battlefield. Ну вот нравится она мне!

В Battlelog для Battlefield 3 были замечательные очереди на сервер. Нажал и ждешь.
Какого же было мое разочарование, когда я обнаружил, что в четвертой части надо сидеть и жать на кнопку, чтобы поиграть с друзьями.

Первое, что пришло в голову, это простой таймер:

setInterval(function(){var button=document.getElementById('ugm-reconnect'); if(button != null) button.click();},1000);

Жмет на кнопку Reconnect раз в секунду.

Но! Во-первых — это не правильно, потому что грузит браузер и процессор «холостыми» нажатиями, когда мы уже подключились к серверу.
Во-вторых, а что если Dice будут отслеживать таких вот кликеров?

Покопавшись в Dice'овском коде, а у них достаточно продвинутый front-end фреймворк, я нашел там «родные» обработчики.
А конкретно: там есть объект launcher с методом registerForEvent().
Посмотрел, как они сами его используют, и написал вот такой незатейливый код:


// Подписка на ошибки класса generic
launcher.registerForEvent("error.generic", function(event, game, personaId, errorType, errorCode, errorString) {
        // Если это ошибка типа "Сервер полон"
        if(errorType == "ERR_SERVERCONNECT_SERVERFULL") {
            var button = jQuery("#ugm-reconnect");
			if(button.length > 0){
				// Нажать на кнопку реконнекта со случайной задержкой
				setTimeout(function(){
					button.click();
				},Math.floor((Math.random()*1000)+1000));
			}
		}
});

Ну а чтобы каждый раз в консоли не писать, я сделал расширения для Chrome и Firefox.

Автор: M1nstrel

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js