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

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

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