RU

qspSplitterMerger

sal0mander #2535 01.05.2021 10:41 11 comments 6660 views

Всем привет!
Увидев в соседней теме, что автор сделал vs code плагин для поддержки синтаксиса куспа я понял, что нет нормальных средств, которые могут подготовить для идешки проект (редактировать цельный txt2gam это изврат и содомия для одного человека) и, размяв пальцы, решил что-то подобное забабахать.
Представляю всем решение на питоне, которые может порезать txt2gam на файлы-локации и разложить по папочкам как во всеми “любимом” Qgen’е (скрипт Splitter), а затем собрать проект обратно в txt2gam с генерацией нового qproj файла для qgen (скрипт Merger).
Понимая, что не все авторы игр на QSP знают что такое питон и как им пользоваться дополнительно сбилдил бинарники для винды и оформил релизом в гите (дополнительно бинарники лежат в директории dist).
Репо со скриптами: https://github.com/sal0mander/qspSplitterMerger

Edited at 02.05.2021 12:11 (4 years ago)

Ээээээххх… Только вчера закончил вручную “Разбивать” проект в 1110 локаций…
Ну что-ж, пойду хотябы потестю эту тулзу.

upd:
Что-то антивирус ругается на твой сплиттер.

l0stetrnity:

Ээээээххх… Только вчера закончил вручную “Разбивать” проект в 1110 локаций…
Ну что-ж, пойду хотябы потестю эту тулзу.

upd:
Что-то антивирус ругается на твой сплиттер.

Спасибо за быструю обратную связь!
Мне очень жаль, что подобное имело место быть. Убирал одну зависимость, а проблемы случились в другой, которая “для красоты”. Изучил вопрос и действительно происходит срабатывание на бинарниках. Причиной тому является пакет pyinstaller, через которой собирались “.exe” файлы. По подобной проблеме ложных срабатываний есть issues в репозитории авторов данного пакета (https://github.com/pyinstaller/pyinstaller/issues/4633 одна из).
Чтобы никого не смущать убрал бинарники из репо, оставив только скрипты “.py”. Для запуска необходимо иметь установленный Python 3 версии, который можно скачать отсюда (офф сайт Python): https://www.python.org/downloads/

upd:
Virus total проверка по аттачам из релиза 1.0. Вдруг кому исходников мало :)
Splitter https://www.virustotal.com/gui/file/8abf66d132d05f52fbe3708aa02de91b6ae3b31cb9e9c676de0e125c715eb090/detection
Merger https://www.virustotal.com/gui/file/e3ded77fffafb8e9359f61bbe7c508a2720a9a8b0b7b88daf22a6d567274a0a2/detection

Aleks Versus Moderator 02.05.2021 14:33 (4 years ago)

sal0mander,
глянь и мои наработки. Сплиттер, кстати, я тоже недавно там делал :) :
https://qsp.org/forum/1019-paket-qsp-dla-sublime-text-podsvetka-sintaksisa-i-bilder
https://github.com/AleksVersus/JAD_for_QSP

sal0mander,
Потестил, вроде всё работает хорошо, на больших и маленьких проектах, если найду баги – отпишусь тут.
В любом случае – хорошая работа.

Upd:
Пожелания:
1. было-бы хорошо заставить мерджер сканировать все папки в инпуте, и сливать все найденные файлы в папках в 1 файл.
2. Нужно научить мерджер распознавать “стартовую локацию” в случае с папками, это просто (Если бы он читал их все) т.е. кладёшь стартовый файл в верхнюю по списку папку, а всё остальное в другие, ниже по списку. Но проблема в том, что плеер стартует с первой локации в списке, а первая локация которую берёт мерджер (если мы говорим об одной папке) идёт в алфавитном порядке (и как правило не является стартовой)

Aleks Versus,
Звучит классно, очень подробное описание. Правда у меня так и не получилось установить в sublime (опыт взаимодействия с ним стремится к нулю).

l0stetrnity,
1.
Не совсем понял. Просьба описать поподробнее.
P.S. Задумывалось что в merger_input может быть несколько папок-проектов с исходниками и по каждой в output будет результат мерджа. Но невнимательность породила баг, и остальные “проекты” оставались без внимания и падали с трейсбеком. Поправил, запушил.

2.
Спасибо за пожелание, как раз думаю об улучшении функционала мерджера. Если в рутовой директории будет одна локация (стартовая) - это не сложно сделать (добавлю в ближайшее время), если больше, то надо думать как понять что локация стартовая (aaa_start или что-то подобное довольно костыльно, но работает).
Также есть непонятки как программа себя должна вести, если встречаются файлы (локации) с одинаковыми названиями (но в разных папках). В текущий момент это никак не обрабатывается. По логике куспа это ошибка т.к. не может быть локаций с одинаковыми названиями. Пока думаю выбрасывать в консоль ошибку с указанием что и где не уникально.

sal0mander,
Ну вариантов масса, вариант со стартовой локацией в руте впринципе должен работает нормально.
Как вариант добавить альтернативу с прописыванием кастомного имени в самом скрипте, чтоб он искал его и толкал в топ, а потом уже добавлял всё по списку. (т.е. сделать это как альтернативный вариант, если не назначен – включается первый со стартом в руте)

Upd:
Репорт по фиксу, мерджер читает все папки/файлы:)
Но аутпутит только первую в списке.

l0stetrnity:

sal0mander,
upd:
Репорт по фиксу, мерджер читает все папки/файлы:)
Но аутпутит только первую в списке.

print('Merge complete!')
if not skip_info:
    input()

Нажми enter и появится вторая, или запускай скрипт с параметром skip - .\Merger.py skip

Мой косяк, всё работает. (Хотя, неплохо было-бы добавить “Press Enter” в консоль, но то такое.)

Aleks Versus Moderator 04.05.2021 06:38 (4 years ago)

sal0mander:

По логике куспа это ошибка т.к. не может быть локаций с одинаковыми названиями.

это ошибка только при работе в QGen. На самом деле могут быть локации с одинаковыми названиями. Это один из способов закрыть игру от читеров.

Aleks Versus:

sal0mander:

По логике куспа это ошибка т.к. не может быть локаций с одинаковыми названиями.

это ошибка только при работе в QGen. На самом деле могут быть локации с одинаковыми названиями. Это один из способов закрыть игру от читеров.

А есть источник где можно почитать про это?
Как, кстати, будут вести себя операторы gs/gt/func, если по аргументу возвращается больше одной локации?

Aleks Versus Moderator 04.05.2021 17:42 (4 years ago)

sal0mander,
Где об этом почитать, не знаю, но txt2gam спокойно конвертит такие игры, а плеер спокойно воспроизводит. Работает только та локация, которая идёт в списке самой последней. Олегус такие локации вставлял в исходники, но не использовал в игре, насколько я помню, они лишь помогали защитить игру от читеров, так как игра не открывается Quest Generator`ом.

Log in or Register to post comments.