какая есть софтина по переименованию функций и переменных в j файле ? [deprotect]
например
переименовать функцию func в Test1
переименовать переменную tion в Test2

может быть тому виной кавычки "jass" в 38 строке и формула RegExp перестаёт работать
Нет, просто из-за того, что я разрешил multiline строки, вышло так, что оно матчит закрывающую кавычку, потом кучу линий, затем название переменной, затем кучу линий и затем открывающую кавычку.
Я переделал, теперь всё работает как нужно. Заодно добавил обработку случаев с одинарными кавычками.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
28
какая есть софтина по переименованию функций и переменных в j файле?
Любой уважающий себя текстовый редактор.
вы прикалываетесь оба?
возьми любой j файл в своей карте и по своему совету замени как написано в примере ниже, я посмотрю потом на твою карту
Ну заменил, в чём проблема-то?
Загруженные файлы
28
странно, что этого никто не сделал к 2к24 году
Это давно уже всё сделано. Тот же WordPad в винде появился с релиза Windows 95, что вообще-то была выпущена в 1995 году.
А так для работы с кодом рекомендую Notepad++. Легковесный и быстрый редактор текстовых файлов со всеми нужными фичами. Локлизация на русском присутствует. Вот его окно замены и документация.
Загруженные файлы
14
Ну заменил, в чём проблема-то?
видео класс
а как работает "Только слово целиком" ? по каким законам? проверяет слева и справа чтобы не [A-z] [А-я] было?
PT153:
Вот документация
а всё - вот целая полезная портянка для чтения
Загруженные файлы
28
Тут есть момент, что замена состоится везде. То есть, если "fu" встречается в строке как слово, то там тоже будет заменено. Это справедливо и для замены с помощью " fu ", так как скорее всего в строке слово будет выделено пробелами.
Обойти это можно, написав небольшой скрипт, что построчно заменяет одни слова на другие, игнорируя слова в строках.

а как работает "Только слово целиком" ? по каким законам? проверяет слева и справа чтобы не [A-z] [А-я] было?
Обычно это поиск по "\byour_word\b".
14
Обойти это можно, написав небольшой скрипт, что построчно заменяет одни слова на другие, игнорируя слова в строках
ну или как вариант - т.к. полноценно весь код сравнивать до и после переименования мы не сможем, т.к. будет изменено 90% кода
то можно дополнительно изъять из кода (до и после) только текст в кавычках и его сравнить, а потом изменённые части вернуть в исходное положение
или ждать таки софтину от сообщества ну или писать самому и публиковать
в любом случае замена по двум спискам текста целиком - тоже простая задача для решения этой темы или для написания софтины
т.е. первый список - что заменяем (особо актуально для разных запротекченных версий одной карты, когда в разных версиях названия одних и тех же функций отличаются)
второй список - на что заменяем (когда мы разобрались в логике карты и уже можем давать функциям осмысленное название, ну либо когда под руку попался незапротекченный код с оригинальными названиями функций)
если пользователь второй список не ввёл то Word12345 или иным правилом
также можно добавить автоматический парсинг списка глобалок и всех имён функций
итого благодаря PT153 появился третий алгоритм решения: (все три решения являются костыльными)
v1 - поставить пробелы вокруг операторов + заменять с пробелами " text "
v2 - полурабочий X-deprotect + "заменить запутанные имена глобальных переменных"
v3 - заменять "слово целиком" + с доп проверкой внутри кавычек
28
или ждать таки софтину от сообщества ну или писать самому и публиковать
Да что там ждать.
Регистрируетесь в реплите, клонируете себе этот репл, в war3map.j кидаете свой код. В main.py описываете имена, что хотите заменить и на что. Запускаете main.py. В output.j результат.

UPD 8:27: теперь строки, что располагаются на нескольких линиях, верно обрабатываются.
14
решение v4 от clojurmagictime:
w3map restorer
не сработал, в карте со 100% листфайлом просто удалил scripts\war3map.j и перепаковал
а на чистой карте с добавленным war3map.j оставил этот j файл без изменений (сам j файл выложен ниже)
и также после своего "рекаверинга" удаляет HM3W заголовок, предлагая юзеру назад допиливать самостоятельно новый mpq файл до нормальной w3x карты
хотя - сработал, после закидывания "восстановленной" карты в WE - в F4 можно полистать новый переименованный код
но есть пара моментов:
1 - работа происходит не с изначальным j файлом а через создание war3map.wct
2 - чуть изменяется оригинальный код (даже через количество строк), что не удобно при сравнении j и wct файлов - добавляется неотключаемая? отсылка к именам старых функций
3 - также он добавляет неотключаемые? строковую табуляцию и пробелы вокруг операторов - что делает различия между новым и оригинальном кодом практически в каждой строке
т.е. технически способ рабочий, но удобство надо смотреть более подробно
и это первое хоть сколько-то автоматическое решение вопроса из шапки
особый шик - переименование main в main2, наверное чтобы не конфликтовать с main из j

решение v5 от PT153:
Регистрируетесь в реплите, клонируете себе этот репл replit.com/@Prometheus3375/WarCraft-III-Jass-identifier-renamer, в war3map.j кидаете свой код. В main.py описываете имена, что хотите заменить и на что. Запускаете main.py. В output.j результат.
на родном тесте из 19 строк срабатывает нормально, а при добавлении своего j файла - обрабатывает только начало файла (первые переменные V E), остальной файл оставляет без изменений (переменные fu nc ti on) (да, эти переменные есть в коде)
обрабатываемый j файл есть в replit.com/@egxwaxg111111/111 или тут controlc.com/2fb2e68c или тут xgm.guru/files/100/314140/comments/518102/war3map.j
т.е либо реплит не может обработать 20 тыс строк, либо работа кода на обработке какой-то строки прерывается
цвет подсветки строк после 104 строки в output.j магическим образом меняется
после тестов оказалось что в 30й строке он заменяет, а уже в 40й строке не может заменить
может быть тому виной кавычки "jass" в 38 строке и формула RegExp перестаёт работать
REGEX_WORDS = re.compile(rf'(?:(?<!\\)").*?\b({words})\b.*?(?:(?<!\\)")|\b({words})\b', re.S)
26
host_pi:
ломания кода не происходит, т.к. карта работает как и задумано
тогда бы никто не протектил карты, если бы она не работала
Имеется ввиду то, что после депротекта карта становится открываемой в редакторе и её скрипт делается читаемыми. При этом, карта запускается в игре, потому что (ВНЕЗАПНО) в ней всё ещё хранится её оригинальный скрипт с (условно) "не читаемым" скриптом.
При попытке пересохранить карту в редакторе, идёт перезапись этого скрипта... вот здесь обычно и вылезает первое предупреждение что он корявый и карта после этого уже не работает.
как ты себе представляешь замену 4 переменных с именами - fu, nc, ti, on ? если они встречаются в коде раз 200 каждая?
Отфильтровываешь все комбинации с "fu", "nc", "ti", "on".
Это будут " fu", "fu ", ",fu", "fu,", " fu,", ",fu ", ",fu," для первой, и аналогичные для остальных.
В первые пару раз такой работы глаз конечно может замыливаться, но это дело привычки.
Но я вижу тебе уже подсказали что это именно так и делается.
хотя в описании X-deprotect есть такая строка
переименовывание глобальных переменных с "запутанными" (obfuscated) именами в нечто типа "udg_integers01"
Может сам скрипт в студию? раз он фаталит, значит есть какое-то исключение (которых на самом деле не мало, но все как-то забили на это дело).
host_pi:
может быть тому виной кавычки "jass" в 38 строке
Ох уж эти ковычки... ) и как варик с ними справляется вообще )))
30
host_pi:
Я в своём плагине остановился на построении дерева импорта. Но токенизатор в принципе уже всё разметил. Так что если решения не найдётся, то попробую найти время, чтоб сделать переименование для одного файла.
14
Extremator:
а ты точно продюсер? (в смысле погромист)
А так это всё вручную делается, в блокноте.
Это будут " fu", "fu ", ",fu", "fu,", " fu,", ",fu ", ",fu," для первой, и аналогичные для остальных.
такое даже больно читать, не то что кодить в софте или вручную заменять в блокноте
замена " fu" заменит тебе все " function", не? тоже самое с " ta" (takes) " el" (else) " en" (endif) и тд
а замена " f" испортит последующую замену " fu"
не проще ли заменить "," на " , " а потом работать с " fu " ? что сократит твоих 7 замен всего до 2. это описано выше под именем v1
попробую найти время, чтоб сделать переименование для одного файла.
будем ждать, удобных фич много не бывает
Загруженные файлы
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.