Skip to content

magiskyp/client-old-updater

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Скрипт для обновления эмитов и callremote

Что делает скрипт:

  1. Есть client-old.js со старыми id.
  2. Есть client-new.js с новыми id.
  3. Скрипт строит карту соответствий.
  4. При необходимости этот же скрипт проходит по вашему файлу и готовит две отдельные версии: старую и обновлённую.

Основной файл: scripts/update_client_old.py

Что умеет скрипт

  • разбирает client-old.js и client-new.js
  • находит вызовы mp.events.callRemote(...)
  • сопоставляет старые и новые id по структуре кода, а не просто строкам
  • сохраняет результат в callremote-map.json
  • умеет обновлять сторонний .js скрипт, если в нём используются:
    • mp.events.callRemote(...)
    • alt.emitServer(...)

Скрипт умеет менять не только прямой вызов вроде:

alt.emitServer("2807209274", 0);

но и случай, когда id лежит в переменной:

const emittdim = "2807209274";
alt.emitServer(emittdim, 0);

В таком случае он обновит само значение переменной в новой версии файла.

Что лежит в папке

Как запустить

Из корня проекта:

py -3 scripts\update_client_old.py

Что произойдёт:

  • скрипт прочитает client-old.js
  • скрипт прочитает client-new.js
  • создаст или обновит callremote-map.json

Как обновить свой .js-файл

Например, если нужно обновить файл for update\dim.js, команда такая:

py -3 scripts\update_client_old.py --update-script "for update\dim.js"

После этого скрипт:

  • сначала пересоберёт карту соответствий
  • потом откроет указанный .js
  • найдёт в нём mp.events.callRemote(...) и alt.emitServer(...)
  • создаст рядом два файла:
    • имя-old.js — копия исходного файла
    • имя-new.js — обновлённая версия с новыми id

Сам исходный файл при этом не затрагивается.

Если файлы лежат не в стандартных местах

Можно явно передать пути:

py -3 scripts\update_client_old.py --old "client-old.js" --new "client-new.js" --out "callremote-map.json" --update-script "dim.js"

Параметры:

  • --old — путь к старому дампу
  • --new — путь к новому дампу
  • --out — куда сохранить карту соответствий
  • --update-script — какой внешний .js взять за основу для создания -old.js и -new.js

Пример реального использования

Исходный файл:

const emittdim = "2807209274";
alt.emitServer(emittdim, newDimension);

После запуска рядом появится имя-new.js, и в нём будет:

const emittdim = "3344315362";
alt.emitServer(emittdim, newDimension);

А имя-old.js будет содержать исходную версию без изменений.

Что лежит в callremote-map.json

В этом файле сохраняется:

  • сколько вызовов найдено в старом дампе
  • сколько найдено в новом
  • сколько удалось сопоставить
  • список совпадений old_hash -> new_hash
  • что осталось без пары

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

Ограничения

У скрипта есть разумные ограничения.

  • Он хорошо работает на webpack-подобных клиентских дампах вроде ваших client-old.js / client-new.js.
  • Он обновляет только те места, где первый аргумент callRemote или emitServer можно нормально понять.
  • Если id собирается слишком хитро, например через сложную функцию, массив, объект, конкатенацию или несколько промежуточных слоёв, такое место он может пропустить.
  • Если в новом дампе какого-то вызова уже вообще нет, замены для него тоже не будет.

Коротко

Если нужно просто обновить один файл, чаще всего достаточно одной команды:

py -3 scripts\update_client_old.py --update-script "for update\dim.js"

Этого обычно хватает.

About

Created by ret9.xyz community

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors