может быть тому виной кавычки "jass" в 38 строке и формула RegExp перестаёт работать
Нет, просто из-за того, что я разрешил multiline строки, вышло так, что оно матчит закрывающую кавычку, потом кучу линий, затем название переменной, затем кучу линий и затем открывающую кавычку.
Я переделал, теперь всё работает как нужно. Заодно добавил обработку случаев с одинарными кавычками.
Регистрируетесь в реплите, клонируете себе этот репл, в war3map.j кидаете свой код. В main.py описываете имена, что хотите заменить и на что. Запускаете main.py. В output.j результат.
UPD 8:27: теперь строки, что располагаются на нескольких линиях, верно обрабатываются.
Тут есть момент, что замена состоится везде. То есть, если "fu" встречается в строке как слово, то там тоже будет заменено. Это справедливо и для замены с помощью " fu ", так как скорее всего в строке слово будет выделено пробелами.
Обойти это можно, написав небольшой скрипт, что построчно заменяет одни слова на другие, игнорируя слова в строках.
а как работает "Только слово целиком" ? по каким законам? проверяет слева и справа чтобы не [A-z] [А-я] было?
Это давно уже всё сделано. Тот же WordPad в винде появился с релиза Windows 95, что вообще-то была выпущена в 1995 году.
А так для работы с кодом рекомендую Notepad++. Легковесный и быстрый редактор текстовых файлов со всеми нужными фичами. Локлизация на русском присутствует. Вот его окно замены и документация.
nazarpunk, стоит поработать над меню, а скорее вовсе его убрать.
File - там есть кнопка exit, что в целом не особо нужно.
Edit - Undo и Redo ничего не делают, остальные не особо полезны.
View - в целом бесполезно. а наличие Developer Tools даже опасно.
Window - Zoom ничего не делает, остальное есть на самом окне.
Help - пусто.
Стоит добавить возможно выбора папки для результата.
О да, именно такую ошибку я и встретил. Проcто ужас! Поэтому предпочитаю JSON и TOML. У JSON не нравится отсутствие комментов и поддержки trailing comma.
лист легко делается строкой, мапы через разделы. TOML просто является улучшенным INI, что очень хорошо. Сам буду его использовать, так как более human-friendly, чем тот же JSON.
Но я, если честно, не понял, как из приведённой выдержки документации ты сделал вывод о том, что порядок может быть не идентичным на разных машинах?
The order <...> is not specified
То есть порядок не определён, или по-другому - разработчики не гарантируют одинаковый порядок. Поэтому возможно, что next на разных машинах в разное время выдаёт разный результат. Что подтверждается эмпирическими тестами. Запустить онлайн можно тут.
t = {a = 1, b = 2, c = 3}
function call(t)
for k, v in pairs(t) do
print(k, v)
end
print('--------------')
end
t.a = nil
t.d = 5
t.a = '1'
call(t)
call(t)
Вывод:
b 2
a 1
d 5
c 3
--------------
b 2
a 1
d 5
c 3
--------------
Жму restart, вновь запускаю тот же код. Результат:
c 3
b 2
a 1
d 5
--------------
c 3
b 2
a 1
d 5
--------------
Таким образом, разный порядок возможен.
Что касается десинхронизаций, то они возникают, только когда идёт работа с объектами игры. Например, если идёт перебор множества чисел через дефолтную pairs, то никаких проблем не будет. Также вполне возможно, что изменения для юнитов, сделанные путём перебора через дефолтную pairs, могут произойти быстро и игра синхронизирует своё состояния уже по окончании всего перебора, что не приведёт к десинхронизации. Однако если из такой группы взять N-го юнита и сделать какие-то операции только с ним, или делать операции с юнитами в зависимости от их порядкового номера, то это приведёт к десинхронизации тех игроков, у кого другой порядок перебора.
Проверить наличие разного порядка в варе довольно просто. Создать карту на несколько человек. Разместить на карте N разных юнитов. Во время инициализации вызывать такой код:
local t = {}
local r = GetWorldBounds()
local f = Filter(function() t[GetFilterUnit()] = true end)
GroupEnumUnitsInRect(bj_lastCreatedGroup, r, f)
RemoveRect(r)
DestroyFilter(f)
PreloadGenClear()
for u, _ in pairs(t) do
print(GetUnitName(u))
Preload(GetUnitName(u))
end
PreloadGenEnd("check-table-order.txt")
Сравнить файлы после запуска. Файлы будут находится в папке Documents\WarCraft III\CustomMapData.
Edited by PT153
» WarCraft 3 / [WarCraft III] Jass identifier renamer
» WarCraft 3 / TESH для Reforged
Edited by PT153
» XGM Конкурсы / Большой Турнир Ландшафтеров 2023
» XGM Конкурсы / Большой Турнир Ландшафтеров 2023
» WarCraft 3 / какая есть софтина по переименованию функций и переменных?
» WarCraft 3 / какая есть софтина по переименованию функций и переменных?
» WarCraft 3 / какая есть софтина по переименованию функций и переменных?
» WarCraft 3 / какая есть софтина по переименованию функций и переменных?
Edited by PT153
» WarCraft 3 / какая есть софтина по переименованию функций и переменных?
А так для работы с кодом рекомендую Notepad++. Легковесный и быстрый редактор текстовых файлов со всеми нужными фичами. Локлизация на русском присутствует. Вот его окно замены и документация.
Edited by PT153
» WarCraft 3 / какая есть софтина по переименованию функций и переменных?
Edited by PT153
» WarCraft 3 / OrderId
» WarCraft 3 / Не работает vJass и cJass в Warcatf 3 Jass New Gen Pack
» WarCraft 3 / Не работает vJass и cJass в Warcatf 3 Jass New Gen Pack
» WarCraft 3 / TESH для Reforged
» WarCraft 3 / Visual Studio Code: WarCode
» WarCraft 3 / Visual Studio Code: WarCode
» WarCraft 3 / Jass MythBusters
» WarCraft 3 / w3x-to-toml
File - там есть кнопка exit, что в целом не особо нужно.
Edit - Undo и Redo ничего не делают, остальные не особо полезны.
View - в целом бесполезно. а наличие Developer Tools даже опасно.
Window - Zoom ничего не делает, остальное есть на самом окне.
Help - пусто.
Edited by PT153
» WarCraft 3 / w3x-to-toml
» WarCraft 3 / w3x-to-toml
» WarCraft 3 / w3x-to-toml
Edited by PT153
» WarCraft 3 / w3x-to-toml
» WarCraft 3 / w3x-to-toml
» WarCraft 3 / w3x-to-toml
Edited by PT153
» WarCraft 3 / Группы или таблицы в луа?