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

Принятый ответ

может быть тому виной кавычки "jass" в 38 строке и формула RegExp перестаёт работать
Нет, просто из-за того, что я разрешил multiline строки, вышло так, что оно матчит закрывающую кавычку, потом кучу линий, затем название переменной, затем кучу линий и затем открывающую кавычку.
Я переделал, теперь всё работает как нужно. Заодно добавил обработку случаев с одинарными кавычками.
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
10
8 месяцев назад
Отредактирован Keparis9
1
Немного не ясен вопрос, в любом текстовом редакторе есть возможность заменять определенный текст на какой-то другой при помощи комбинации ctrl+F. Так же при помощи этой комбинации можно находить что-то. Например можешь через JNGP в тригере выделить переменную затем нажать ctrl+F и тебе предложат найти эту переменную либо заменить, ставишь на что тебе надо заменить и заменяешь. Будь осторожен с короткими переменными по типу r a gt u и т.д ты можешь случайнo заменить символы в нативных функциях кода. Если тебе просто нужно скрыть или сократить переменные не для разработки а для того чтобы карта весила меньше или например чтобы никто не понял что у тебя написано в коде, то тогда используют Оптимизатор .
2
10
8 месяцев назад
2
Ctrl + H
0
14
8 месяцев назад
Отредактирован host_pi
0
ctrl+F
это вообще-то поиск, а не замена
Например можешь через JNGP
вопрос был конкретно про j файл, а не про карту. в редакторе любой ду, в смысле любой гуишник сможет
цель этой задумки - вручную без ломания кода вернуть нормальные названия функциям после протекта (состоящим из 2-3 символов)
Ctrl + H
вы прикалываетесь оба?
возьми любой j файл в своей карте и по своему совету замени как написано в примере ниже, я посмотрю потом на твою карту
заменить текст func на Test1
заменить текст tion на Test2
1
26
8 месяцев назад
1
host_pi:
цель этой задумки - вручную без ломания кода вернуть нормальные названия функциям после протекта (состоящим из 2-3 символов)
После ломания протектором и получается ломание кода, если он немного с хитрицой.
Твой пример с function / Test1Test2 некорректен, выглядит так как-будто ты наоборот хочешь произвести обфускацию скрипта таким образом, а ты говоришь наоборот от его распутывании.

А так это всё вручную делается, в блокноте.
1
29
8 месяцев назад
Отредактирован nazarpunk
1
Переименование по вхождению это рефактор. Не видел ни одного плагина, который умеет в него для jass. Сейчас пилится плагин, но времени на галерах совсем нет.
0
14
8 месяцев назад
Отредактирован host_pi
0
После ломания протектором и получается ломание кода
ломания кода не происходит, т.к. карта работает как и задумано
тогда бы никто не протектил карты, если бы она не работала
выглядит так как-будто ты наоборот хочешь произвести обфускацию скрипта
зачем просить то, что умеет делать протектор? не проще ли его просто запустить и использовать, чем создавать вопрос?
А так это всё вручную делается, в блокноте.
как ты себе представляешь замену 4 переменных с именами - fu, nc, ti, on ? если они встречаются в коде раз 200 каждая?
на глаз скроллить код? и на глаз отсеивать где переменная, а где часть слова?
почему консольный pjass умеет различать где переменная, где функция, умеет сверять типы данных, но нет ни одной софтины, которая бы их переименовывала?
предвосхищаю "не нравится - сделай сам такую"
Не видел ни одного плагина, который умеет в рефактор для jass
наверное это и будет ответом на вопрос

хотя у меня появилось некоторое решение - можно использовать программу по простановке пробелов вокруг переменных и функций - Script Language Aligner
а потом заменять " fu " , " nc " , " ti " , " on "
единственное - она не обрамляет пробелами запятые
в принципе - если накатать автору этой софтины чтобы добавил (или запилить самому) простановку пробелов вокруг запятых - то получится уже что-то
+ с массивами заменить a[i] на a [ i ]
ну а потом написать автоматический переименоватор " fu " в Test1 , " nc " в Test2 итд
костыльно всё это конечно, но с этим уже можно попробовать работать
странно, что этого никто не сделал к 2к24 году
т.к. для написания подобной софтины-переименовальщика не требуется особых знаний, можно запилить на любом языке
сначала проставить пробелы (исключая текст в кавычках) вокруг всех операторов !(),<>==+-[] , а потом переименовать " fu "
т.е. вводишь в неё списком fu=Test1 nc=Test2 ti=Test3 on=Test4, а на выходе получаешь переименованный ЧИТАБЕЛЬНЫЙ рабочий код

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

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

UPD 8:27: теперь строки, что располагаются на нескольких линиях, верно обрабатываются.
1
28
8 месяцев назад
1
Загруженные файлы
0
14
8 месяцев назад
Отредактирован host_pi
0
решение 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)
1
26
8 месяцев назад
Отредактирован Extremator
1
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 строке
Ох уж эти ковычки... ) и как варик с ними справляется вообще )))
1
29
8 месяцев назад
1
host_pi:
Я в своём плагине остановился на построении дерева импорта. Но токенизатор в принципе уже всё разметил. Так что если решения не найдётся, то попробую найти время, чтоб сделать переименование для одного файла.
0
14
8 месяцев назад
Отредактирован host_pi
0
Extremator:
а ты точно продюсер? (в смысле погромист)
А так это всё вручную делается, в блокноте.
Это будут " fu", "fu ", ",fu", "fu,", " fu,", ",fu ", ",fu," для первой, и аналогичные для остальных.
такое даже больно читать, не то что кодить в софте или вручную заменять в блокноте
замена " fu" заменит тебе все " function", не? тоже самое с " ta" (takes) " el" (else) " en" (endif) и тд
а замена " f" испортит последующую замену " fu"
не проще ли заменить "," на " , " а потом работать с " fu " ? что сократит твоих 7 замен всего до 2. это описано выше под именем v1
попробую найти время, чтоб сделать переименование для одного файла.
будем ждать, удобных фич много не бывает
Загруженные файлы
1
26
8 месяцев назад
1
host_pi:
а ты точно продюсер? (в смысле погромист)
С чего ты это вообще взял?
замена " fu" заменит тебе все " function", не?
Неее. Потому что function перед собой имеет не пробел, а переход на новую строку.
тоже самое с " ta" (takes) " el" (else) " en" (endif) и тд
Так о том и речь это нужно делать обдуманно, а не просто "выделил, нажал, готово".
Так ты можешь сразу CTRL+A и DEL
не проще ли заменить "," на " , " а потом работать с " fu " ? что сократит твоих 7 замен всего до 2
Всё зависит от конкретного выражения.
Там где это применимо - это можно применять. И наоборот.
Я разве сказал "выдели всё, нажми авто-замену, и насрать что будет" ?
1
29
8 месяцев назад
Отредактирован nazarpunk
1
Потому что function перед собой имеет не пробел, а переход на новую строку.
Пробела перед function я так понимаю быть не может?
1
26
8 месяцев назад
1
nazarpunk:
Пробела переж function я так понимаю быть не может?
Не верно. Пробел быть может.
Но если у тебя "нечитабельный" скрипт, то скорее всего из него были удалены все лишние пробелы и отступы. Логичное предположение? Хоть и не обязательное.
1
29
8 месяцев назад
Отредактирован nazarpunk
1
host_pi, работа только с одним файлом war3map.j сильно упрощает жизнь. Так что, в принципе, я тогда тупо забью на импорт, и напишу отдельную обработку файлов с именем war3map.j. В таком случае сделать переименование именно по вхождению не так уж и сложно.
Так что, где-то через недельку ожидайте обновлений.
0
14
8 месяцев назад
0
напишу отдельную обработку файлов с именем war3map.j. через недельку ожидайте обновлений
Загруженные файлы
1
28
8 месяцев назад
1
может быть тому виной кавычки "jass" в 38 строке и формула RegExp перестаёт работать
Нет, просто из-за того, что я разрешил multiline строки, вышло так, что оно матчит закрывающую кавычку, потом кучу линий, затем название переменной, затем кучу линий и затем открывающую кавычку.
Я переделал, теперь всё работает как нужно. Заодно добавил обработку случаев с одинарными кавычками.
Принятый ответ
1
14
8 месяцев назад
Отредактирован host_pi
1
обновление решения v5 от PT153:
Я переделал
ух, код main.py подрос с 24 строк до 85
теперь всё работает как нужно
да, вроде всё работает
это второе автоматическое решение но при этом первое чистое решение вопроса
даже лог присутствует, не ну это песня
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.