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

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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
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 строки, вышло так, что оно матчит закрывающую кавычку, потом кучу линий, затем название переменной, затем кучу линий и затем открывающую кавычку.
Я переделал, теперь всё работает как нужно. Заодно добавил обработку случаев с одинарными кавычками.
Принятый ответ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.