game.* в скором времени будет не доступен
Практически всё в game.* более не будет доступно. Также будет недоступен класс Game и другие данные. Так что многие скрипты поломаются. Сейчас можно посмотреть на тестовом сервере что именно поменяется, но скоро я закрою туда доступ.
- [ ] control_error_mode
- [x] DailyScores
- [x] DelGameButton
- [ ] KG_AccurateSpeedo
- [x] KG_CancelRaceShortcut
- [x] KG_ChatHotkey
- [X] KG_ComplexityPanel
- [ ] KG_ErrorWork
- [ ] KG_ExactSpeed
- [ ] KG_GameLog
- [ ] KG_SaveGameResult
- [x] KG_SeparateGameLink
- [x] KG_TimeoutAlert
- [x] KG_YandexTranslator
- [ ] NoErrorCounter
- [x] RecentGames
- [x] save_race_in_blog
Я, к сожалению, в ближайшее время не смогу заняться адаптацией скриптов под новые клавогонки. Слишком мало свободного времени :(
Fenex, а не подскажешь, какой теперь самый простой способ получить игроков заезда и их результаты?
@P-h-e-m-m-e-r , через обращение к DOM: document.querySelectorAll('#players .player')
Исправил KG_YandexTranslator и KG_ComplexityPanel. На остальные пока нет свободного времени :(
KG_ChatHotkey тоже легко исправляется. "Game." поменять на другой объект. Знающие, исправьте на что-нибудь приемлемое, а то не уверен на что можно.
@P-h-e-m-m-e-r, там будет лучше использовать просто локальную переменную, чем делать «monkey patch» существующих глобальных объектов. Не знаю, о чем я вообще думал два года назад :(
KG_ComplexityPanel - в одиночном режиме пока все так же не работает, в дружеских, открытых - работает
Мда, действительно. Спасибо, исправлю как только появится время (KG_YandexTranslator это тоже касается, к слову).
Пока хватило времени лишь на анализ масштаба проблемы. Ситуация хуже, чем я думал.
| Скрипт | Использование объектов 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} |
Метод game.delresult я скоро сделаю доступным, поэтому DelGameButton и KG_CancelRaceShortcut переделывать не нужно.
Уточнение: вызов game.delresult можно не переделывать, но помимо этого в скриптах используется обращение к другим частям game: это уже придётся переделать :(.
@Fenex, а зачем вообще нужно было делать их недоступными?
Метод
game.delresultя скоро сделаю доступным, поэтомуDelGameButtonиKG_CancelRaceShortcutпеределывать не нужно.
Метод game.delresult как раз было повторить проще всего. А вот публичные данные заезда (тип, допускаемые ранги, таймаут и т.д.), которые нужны многим скриптам, сейчас получить в разы сложнее.
@Fenex, правильно ли я понимаю, что старый код был вынесен в отдельный scope с целью создания некой защиты от ~читеров~ школьников, использовавших game.text ?
Да, одна из основных целей скрытия переменной - это чтобы нельзя было так легко просматривать текст перед заездом. Мне понравилось как подытожил унч эти изменения:
Это отвадит пионеров, которые научились, как макаки, тыкать в game.text
Убрать в замыкание переменную совсем не сложно и к тому же это не усложняет код, зато большинству теперь подглядеть текст будет негде.
От читов эти изменения естественно не спасут. Весь код работает на клиенте, поэтому чит написать можно в любом случае и при этом довольно легко. По умолчанию нельзя доверять результатам без капчи (квалификация) или TS.
Убрать в замыкание переменную совсем не сложно и к тому же это не усложняет код, зато большинству теперь подглядеть текст будет негде.
Здесь я согласен — даже такую элементарную защиту обойти будет многим не под силу.
Меня только несколько пугает объем изменений, которые необходимо будет внести в существующие скрипты (которые, в общем-то, game.text и не использовали, за редкими исключениями).
И как бы потом все эти новые костыли в виде MutationObserver-ов и monkey патчинга XMLHttpRequest не вышли боком (как в плане производительности, так и в плане «читаемости» кода).
Может тогда стоит выставить в открытый доступ копию переменной game без поля text?
Ну что ж вполне "рациональный" подход, навтыкать палок в колеса, чтобы передвигаться потом пешком.) От читеров это все равно не спасет, зато наживаете себе и другим кучу геммороя) Я так понимаю, вариант открыть тексты перед заездом не рассматривался вообще? Или поиск какой-то разумной альтернативы.
P.s. По хорошему, вам стоило бы давно взять под крыло все эти скрипты и реализовать в основном интерфейсе. Или самим пораскинуть мозгами над юзабильностью сайта. Люди вам медвежью услугу оказали оптимизировав сайт и сделав его более удобным, а вы так наплевательски отнеслись.