Что делает скрипт:
- Есть
client-old.jsсо старыми id. - Есть
client-new.jsс новыми id. - Скрипт строит карту соответствий.
- При необходимости этот же скрипт проходит по вашему файлу и готовит две отдельные версии: старую и обновлённую.
Основной файл: 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);В таком случае он обновит само значение переменной в новой версии файла.
- client-old.js — старый дамп
- client-new.js — новый дамп
- callremote-map.json — готовая карта соответствий
- scripts/update_client_old.py — основной скрипт
Из корня проекта:
py -3 scripts\update_client_old.pyЧто произойдёт:
- скрипт прочитает
client-old.js - скрипт прочитает
client-new.js - создаст или обновит
callremote-map.json
Например, если нужно обновить файл 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 будет содержать исходную версию без изменений.
В этом файле сохраняется:
- сколько вызовов найдено в старом дампе
- сколько найдено в новом
- сколько удалось сопоставить
- список совпадений
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"Этого обычно хватает.