KgScripts icon indicating copy to clipboard operation
KgScripts copied to clipboard

game.* в скором времени будет не доступен

Open Fenex opened this issue 9 years ago • 17 comments

Практически всё в game.* более не будет доступно. Также будет недоступен класс Game и другие данные. Так что многие скрипты поломаются. Сейчас можно посмотреть на тестовом сервере что именно поменяется, но скоро я закрою туда доступ.

Fenex avatar Nov 13 '16 22:11 Fenex

Я, к сожалению, в ближайшее время не смогу заняться адаптацией скриптов под новые клавогонки. Слишком мало свободного времени :(

voidmain02 avatar Nov 15 '16 11:11 voidmain02

Fenex, а не подскажешь, какой теперь самый простой способ получить игроков заезда и их результаты?

P-h-e-m-m-e-r avatar Nov 17 '16 13:11 P-h-e-m-m-e-r

@P-h-e-m-m-e-r , через обращение к DOM: document.querySelectorAll('#players .player')

Fenex avatar Nov 17 '16 15:11 Fenex

Исправил KG_YandexTranslator и KG_ComplexityPanel. На остальные пока нет свободного времени :(

ocrest avatar Nov 20 '16 03:11 ocrest

KG_ChatHotkey тоже легко исправляется. "Game." поменять на другой объект. Знающие, исправьте на что-нибудь приемлемое, а то не уверен на что можно.

P-h-e-m-m-e-r avatar Nov 20 '16 08:11 P-h-e-m-m-e-r

@P-h-e-m-m-e-r, там будет лучше использовать просто локальную переменную, чем делать «monkey patch» существующих глобальных объектов. Не знаю, о чем я вообще думал два года назад :(

ocrest avatar Nov 21 '16 07:11 ocrest

KG_ComplexityPanel - в одиночном режиме пока все так же не работает, в дружеских, открытых - работает

P-h-e-m-m-e-r avatar Nov 21 '16 09:11 P-h-e-m-m-e-r

Мда, действительно. Спасибо, исправлю как только появится время (KG_YandexTranslator это тоже касается, к слову).

ocrest avatar Nov 21 '16 10:11 ocrest

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

Скрипт Использование объектов game и Game Возможное решение
control_error_mode Параметры заезда и статистика ошибок во время набора Работа с DOM
DailyScores Параметры заезда и количество полученных очков при его завершении Работа с DOM
DelGameButton Параметры заезда, статус его завершения, метод game.delresult Параметры и статус — из DOM, POST-запрос на /g/{game_id}.delresult
KG_AccurateSpeedo Текст заезда, время его начала и окончания Переписать полностью. POST-запрос на /g/{game_id}.info с параметром need_text: 1
KG_CancelRaceShortcut Метод game.delresult, статус завершения заезда Мониторинг DOM, POST-запрос на /g/{game_id}.delresult
KG_ChatHotkey monkey-patch объекта Game Убрать monkey-patch
KG_ComplexityPanel Текст заезда (до старта) POST-запрос на /g/{game_id}.info с параметром need_text: 1
KG_ErrorWork Методы Game.prototype.finish и Game.prototype.doErrorWork, поле game.isReadyForErrorWork Переписать полностью или удалить
KG_ExactSpeed Длина текста заезда, время начала и окончания заезда, статус окончания заезда Переписать полностью. POST-запрос на /g/{game_id}.info с параметром need_text: 1
KG_GameLog Все данные объекта game Переписать полностью или удалить
KG_SaveGameResult Все данные объекта game Переписать полностью или удалить
KG_SeparateGameLink monkey-patch объекта game, параметры заезда Параметры заезда — из DOM, убрать monkey-patch
KG_TimeoutAlert monkey-patch объекта game, параметры заезда Параметры заезда — из DOM, убрать monkey-patch
KG_YandexTranslator Текст заезда (до старта) POST-запрос на /g/{game_id}.info с параметром need_text: 1
NoErrorCounter Параметры заезда, статистика ошибок во время набора Работа с DOM
RecentGames Параметры заезда Работа с DOM
hide_cars Проверка на существование game Убрать или заменить проверку
save_race_in_blog Параметры заезда, статистика его завершения Работа с DOM, monkey-patch XMLHttpRequest, POST-запрос на /api/profile/add-journal-post с объектом {userId: %USER_ID%, text: %TEXT%, hidden: false}

ocrest avatar Nov 29 '16 08:11 ocrest

Метод game.delresult я скоро сделаю доступным, поэтому DelGameButton и KG_CancelRaceShortcut переделывать не нужно.

Уточнение: вызов game.delresult можно не переделывать, но помимо этого в скриптах используется обращение к другим частям game: это уже придётся переделать :(.

Fenex avatar Nov 29 '16 14:11 Fenex

@Fenex, а зачем вообще нужно было делать их недоступными?

Disassem avatar Dec 01 '16 12:12 Disassem

Метод game.delresult я скоро сделаю доступным, поэтому DelGameButton и KG_CancelRaceShortcut переделывать не нужно.

Метод game.delresult как раз было повторить проще всего. А вот публичные данные заезда (тип, допускаемые ранги, таймаут и т.д.), которые нужны многим скриптам, сейчас получить в разы сложнее.

@Fenex, правильно ли я понимаю, что старый код был вынесен в отдельный scope с целью создания некой защиты от ~читеров~ школьников, использовавших game.text ?

ocrest avatar Dec 02 '16 16:12 ocrest

Да, одна из основных целей скрытия переменной - это чтобы нельзя было так легко просматривать текст перед заездом. Мне понравилось как подытожил унч эти изменения:

Это отвадит пионеров, которые научились, как макаки, тыкать в game.text

Убрать в замыкание переменную совсем не сложно и к тому же это не усложняет код, зато большинству теперь подглядеть текст будет негде.

От читов эти изменения естественно не спасут. Весь код работает на клиенте, поэтому чит написать можно в любом случае и при этом довольно легко. По умолчанию нельзя доверять результатам без капчи (квалификация) или TS.

Fenex avatar Dec 02 '16 17:12 Fenex

Убрать в замыкание переменную совсем не сложно и к тому же это не усложняет код, зато большинству теперь подглядеть текст будет негде.

Здесь я согласен — даже такую элементарную защиту обойти будет многим не под силу.

Меня только несколько пугает объем изменений, которые необходимо будет внести в существующие скрипты (которые, в общем-то, game.text и не использовали, за редкими исключениями).

И как бы потом все эти новые костыли в виде MutationObserver-ов и monkey патчинга XMLHttpRequest не вышли боком (как в плане производительности, так и в плане «читаемости» кода).

ocrest avatar Dec 02 '16 17:12 ocrest

Может тогда стоит выставить в открытый доступ копию переменной game без поля text?

Disassem avatar Dec 02 '16 19:12 Disassem

Ну что ж вполне "рациональный" подход, навтыкать палок в колеса, чтобы передвигаться потом пешком.) От читеров это все равно не спасет, зато наживаете себе и другим кучу геммороя) Я так понимаю, вариант открыть тексты перед заездом не рассматривался вообще? Или поиск какой-то разумной альтернативы.

P.s. По хорошему, вам стоило бы давно взять под крыло все эти скрипты и реализовать в основном интерфейсе. Или самим пораскинуть мозгами над юзабильностью сайта. Люди вам медвежью услугу оказали оптимизировав сайт и сделав его более удобным, а вы так наплевательски отнеслись.

dotru avatar Dec 16 '16 13:12 dotru