Перейти к содержанию

Пакетная обработка скриптов (и не только).


Рекомендуемые сообщения

Здравствуйте.

Задался вопросом пакетной обработки скриптов для F2.

 

Скажем нужно добавить новую переменную или изменить в n-кол. скриптов.

 

За основу взял проект burner'a Unlimited party mod

Но в его "моде" используются старый декомпилятор и компилятор, которые не работают с обновленными скриптами под sFall.

По этому я заменил их на новые из sFall modderspack 3.6

Но столкнулся с проблемой - компилятор(compile.exe) почему то не видит ssl-скрипты.

Пока что нашел лишь одно решение данной проблемы - компилятор, ssl-скрипты, и исполняющий bat-ник должны находится в одной папке, что не совсем хорошо.

 

Возможно я как то неправильно обращаюсь к компилятору и даю ему путь к ssl

Перебрал много вариантов реализации обращения к compile.exe в bat-нике, но добился лишь вывода 2х ошибок:

"Couldn't find file *.ssl" и "Warning: file not found"

 

 

На основе этого bat-ника и доп. утилит можно сделать комплекс по пакетному изменению скриптов по заданной маске, да и не только скриптов.

 

Вот моя наработка, может кто сможет подсказать с решением проблемы "compile"

https://yadi.sk/d/UnHn-Csrf9x7S

 

 

К примеру можно, так сказать, автоматически добавить всем напарникам новую ветку диалога с внесением изменений в скрипт(.int) и файлы диалогов(.msg)

Ссылка на комментарий

Если в батниках шаришь то вот пакетная обработка скриптов в папке и ее под папках.

Создаешь батник где лежит компилятор меняешь пути на свои.

Должно работать, по крайней мере у меня работает. :)

 

если у тебя не декомпилировные скрипты то тебе еще и препроцессор нужен будет.

+ "заголовочные" *.h файлы должны лежать в правильных папках.

тут потребуется добавить ключ -p в строку компилятора compile.exe -p %%~nA.tmp

а вообще через прогу sfall editor можно настроить "маss compile"

 

 

@echo off
rem Set path to SSL Scripts
set ssl=F:\Games\FalloutProject\Scripts_SSL\

rem Set path to scripts int
set fscripts=F:\Games\Fallout\DATA_\Scripts\

For /r %ssl% %%A IN (*.ssl) do (
echo %%A
copy %%A %%~nA.tmp

rem компилятор от Sfall'a
compile.exe %%~nA.tmp
del %%~nA.tmp

if not exist %%~nA.int goto ERROR
move %%~nA.int %fscripts%%%~nA.int
)
echo --------------------------------------------------------------------------
echo Compilation of scripts is completed.
echo --------------------------------------------------------------------------
:ERROR
pause

 

Ссылка на комментарий

Спасибо Mr.Сталин

В батниках не шарю :)

Но приходится учится шарить что бы реализовать задуманное.

 

Для чего нужен препроцессор?

 

Phobos2077, на сколько я понял, уже давно "вшил" препроцессор в sfall'овский компилятор.

Если включаю препроцессор (compile.exe -p) то при компиляции на определенных скриптах получаем ошибку, хотя скрипты эти из RP 2.3.3

 

Вот рабочая версия.

https://yadi.sk/d/-RK5tNsUfB2tD

скрипты внутри из RP 2.3.3, можно для проверки и свои подкинуть.

 

"Сleanup" закоментированна что бы можно было просмотреть изменения

 

Контрольную проверку делаю так:

полученные *.int открываю в ScriptEditor из sfall modderspack 3.6, перегоняю их в ssl.

Полученные ssl открываю в Notepad++ и с помощью плагина Compare сравниваю.

Изменено пользователем ArtJuice
Ссылка на комментарий

Было бы неплохо узнать какие именно ошибки и на каких скриптах. Когда Киллап изначально выложил исходники в них была одна ошибка (связанная как раз с препроцессингом). Вполне возможен баг в компиляторе где-нибудь. Можно от версии 3.3 compile.exe попробовать.

Ссылка на комментарий

Ругается на SET_STAGE_EVENT я хз шо это такое,  ты скрип де компилировал или это исходник?

во это просто декомпилировало не правильно, тут разрыва строки не должно быть.

можно руками поправить.

debug_msg("
SET_STAGE_EVENT == " + global_var(291) + " in script " + obj_name(self_obj));

 

 

Для чего нужен препроцессор?

Используется в том случае если используются #define или #include с *.h файлами в скриптах, но ты же декомпилишь скрипты поэтому оно тебе не нужно.

 

 

Кстати объясни не посвященному, что делает gema.exe со cкриптом?

Ссылка на комментарий

modderspack 3.3 и 3.5 обрабатывают скрипт без ошибки.

 

В данном варианте нет, не используют новых фич из 3.6

 

Эта "утилита" которую я собрал работает с уже готовыми int-ами, и вносит в них заданные правки.

Смысл в том что бы утилита могла обработать скрипт как "оригинальный" так и чей то измененный с добавленными в него фичами из sfall

так сказать "универсальный патчер"

который можно применить к F2 Vanilla, F2 RP 2.*.*, F2 EcCo, F2 Jims и тд.

 

во это просто де компилировало не правильно, тут разрыва строки не должно быть.

можно руками поправить.

То что проблема с разрывом строки я заметил :) Просто непонятно где ошибка была в декомпиляторе-компиляторе-скрипте

 

 

Эта "утилитку" в будущем хочется добавить в UpdatePack от Pyran

что бы можно было комбинировать совместимые моды

Скажем моды от ДжонаДоу_1 с модами от ДжонаДоу_2 которые вносят новые диалоги Сулику.

Изменено пользователем ArtJuice
Ссылка на комментарий

Продолжим.

Есть мысли сделать конфиг-файлы, что бы не править bat-инк, а задавать "маску" поиска файлов в конфиге.

И конфиг для что менять и на кого.

Актуально и нужно ли это?

 

Кстати объясни не посвященному, что делает gema.exe со cкриптом?

gema работает не со скриптом, а с текстовым файлом, грубо говорят это "найти и заменить" с возможностью задания параметров для поиска и замены.

 

 

Теперь следующий этап, для которого у меня мало идей в его реализации.

Ниже в архиве скрипт Casidy - оригинал RP 2.3.3, с правками от Endocore и третий от Drobovik'a.
https://yadi.sk/d/ntILp-zSfCwm5

Как их совместить в один? Совместить "автоматически", а не ручками в Notepad ++

Сперва была идея построчно сравнить оригинальный скрипт с измененным, и в итоговый файл записывать оригинал+дополнительные строки из второго скрипта. Но есть проблема - это от части измененные части кода в сравнении с оригиналом. Тут можно жестко задать что на что менять и в какой строке, что не совсем гибко как по мне.

Вторая мысль - вынести в хэдэры внесенные изменения другими авторами.

Возможно ли это? Сравнивая измененный скрипт с оригиналом.

И как быть если два разных автора правят одну процедуру? (это хорошо видно при сравнении скриптов Drobovik'a и Endocore выложенных выше)

пара скринов сравнения:

http://s1.hostingkartinok.com/uploads/thumbs/2015/03/e012c56d9942d3de27d8f107e355f516.png

http://s1.hostingkartinok.com/uploads/thumbs/2015/03/041503a44faa1444031397f7b2ad619e.png

 

Как то так, мозгую дальше, обдумываю-ищу варианту, жду ваших коментов.

 

Upd.

Посмотрел исходники Killap'a...

Идея с хэдерами явно не верная...

Изменено пользователем ArtJuice
Ссылка на комментарий

А стандартные проги для мерджа файлов не работают? Зачем какой-то найти и заменить изобретать. Мердж двух скриптов полученных путем декомпиляции должно быть раз плюнуть сделать, если только в одном и том же месте у них не отличается код (такое редко бывает, ИМХО).

 

По сути ты пытаешься вручную делать то что системы контроля версий обычно делают автоматически, посмотри вот это.

Изменено пользователем phobos2077
Ссылка на комментарий

А чем gemа плоха как прога для мерджа?)

 

gema is a general purpose text processing utility based on the concept of pattern matching. It reads an input file and copies it to an output file transforming the data as specified by the patterns defined by the user.

Я отталкивался от наработок Burner'a, и возможности вложить это в Update Pack Pyran, и что бы этот патч был совместим с измененными скриптами другими авторами.

Так к примеру патч от Burner'a с вашим EcCo модом не работает, а моя версия без проблем да и с другими модами где что то изменено в скриптах напарников. (Хоть и на 99% это заслуга использования вашего декомпилятора и компилятора).

Но основное - это гибкость. Беря скрипт напарника от любого автора, меняется лишь функция проверки харизмы, не меняя и не затрагивая всех остальных изменений сделанных тем автором.

Ссылка на комментарий

Я говорю про то что мерджить код по регуляркам это изобретение велосипедов. Утилиты для мерджа как раз созданы для такого и ежедневно используются тысячами разработчиков. Смысл в том чтобы не писать никаких регулярок, нужно просто скармливать по 2 файла за раз (сначала моды А+Б, потом + С и так далее) - автоматически находятся все отличия относительно базовой версии (например RP без модов) и сливаются построчно, с учетом удаленного кода и т.п.

Ссылка на комментарий

Я видимо не правильно выразил свою мысль и получилась маленькая непонятка :)

Я с вами полностью согласен что сливать файлы в 1н через заданное выражение очень топорно, и не есть хорошо, по этому ищу варианты.

Не плохой вариант - если бы можно было выносить часть кода скрипта в отдельные файлы, а в основном делать ссылки на него, и тогда при компиляции они сливались бы в один.

Спасибо за наводку с WinMerge - я смотрел на нее, но не обратил внимание что можно работать с ней через батник. Буду пробовать.

Спасибо.

Ссылка на комментарий

если бы можно было выносить часть кода скрипта в отдельные файлы, а в основном делать ссылки на него, и тогда при компиляции они сливались бы в один.

Ну так можно же выносить в хэдэры, епты барахты.

пишешь в хэдэрах через #define "название"  "код чего-то или часть вырезанного кода из скрипта"

и в нужном тебе скрипте прописываешь путь к файлу заголовка через #include "patch_nameheader"

а потом вставляешь ссылку в нужном тебе месте ну в скритпе) на этот дефайн и с препроцессором компилишь. и усё. :smile:

Ссылка на комментарий

Приветствую! Подскажите пожалуйста как правильно скомпилить скрипты. Скачал Fallout2_Unofficial_Patch-master с гитхаба от burn'a. В папке scripts_src запустил buildall.bat и появилось

C:\Black Isle\Fallout 2 Mapper\scripts_src>cd ARROYO

C:\Black Isle\Fallout 2 Mapper\scripts_src\arroyo>call ARROYO.bat

C:\Black Isle\Fallout 2 Mapper\scripts_src\arroyo>call ..\p ACBRAHMN
../headers/define.h(29): Error! E1055: Unable to open '../sfall/sfall.h'
Compiling temp.i
[Error] :7920:45: Undefined symbol party_member_list_critters
.

*** THERE WERE ERRORS (1 of them) ***

Если можете, распишите подробно как сделать всё правильно. Заранее спасибо!

Ссылка на комментарий

Положи файлы с заголовками из sfall в папку sfall которая должна быть в папке scripts_src (на уровень вверх от папки arroyo)

Надеюсь не заблудишься в трех папках :-) 

Ссылка на комментарий

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...