ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
|
» Ковыряем новый движок (моддинг) | страница 16 |
|
|
|
Канал X Rebirth »
Модовый и скриптовый отсек X Rebirth: «Ковыряем новый движок (моддинг)» |
|
|
boojum
374 EGP
        Рейтинг канала: 4(60) Репутация: 25 Сообщения: 905
Зарегистрирован: 28.10.2013
 |
|
Ну с таким подходом оно, конечно, будет как сыр.
|
|
|
Giimer
80 EGP
 Рейтинг канала: 2(11) Репутация: 12 Сообщения: 822
Зарегистрирован: 05.11.2008
 |
|
Vadim : |
Закинул в extensions, загрузил save. Все нормально, батареи перестали исчезать, корабли как торговали, так торгуют.
|
А можно попросить выложить в виде мода?
---
переформулировал
Последний раз редактировалось: Giimer (10:33 16-05-2014), всего редактировалось 1 раз |
|
|
anDron
571 EGP
      Рейтинг канала: 4(50) Репутация: 54 Сообщения: 5943 Откуда: Новосибирск Зарегистрирован: 27.11.2013
 |
|
Giimer : |
А можно выложить?
|
А может попросим boojum выложить в виде мода?
|
|
|
Vadim
88 EGP
  Рейтинг канала: 1(3) Репутация: 9 Сообщения: 74 Откуда: Набережные Челны Зарегистрирован: 04.12.2013
 |
|
Хорошо, выложу вечером после работы в виде мода, если boojum не выложит раньше
|
|
|
boojum
374 EGP
        Рейтинг канала: 4(60) Репутация: 25 Сообщения: 905
Зарегистрирован: 28.10.2013
 |
|
Vadim, допишите тогда к описанию, что в качестве особого бонуса "мод" не запустит работу торговых станций, если начать с ним игру.
Ну нельзя так скрипты вырезать. Валидацию пустой <aiscript/> проходит и в этом случае ничего не передается и ничего не возвращается при его выходе, поэтому даже прокатит в случае с обычными станциями. Но подход в корне неверный. Мне по барабану, кто это выложит, я бы даже не стал, так как считаю, что подобные изменения надо в комплексе с прочим публиковать. Но раз выложили, то оформите хотя бы по-человечески, чтобы без последствий. А не швейцарский сыр.
|
|
|
HikeR
145 EGP
   Рейтинг канала: 4(57) Репутация: 30 Сообщения: 886 Откуда: Великий Новгород Зарегистрирован: 20.09.2005
 |
|
есть ли готовые тулзы для создания xml-diff в формате понятном игре (XPath)?
сходу нашел только древнюю микрософтовскую утилитку xmldiffpatch на .Net, вывод которой переформатировать сложнее, чем самому что-то написать.
еще встретилась diffxml на Java (которая не делает патчи, а удаляет/добавляет значения, т.е. "патч" равен двойному размеру оригинала) и библиотека libxmlpatch (*никсов под рукой нет чтобы ее собрать).
|
|
|
boojum
374 EGP
        Рейтинг канала: 4(60) Репутация: 25 Сообщения: 905
Зарегистрирован: 28.10.2013
 |
|
HikeR : |
есть ли готовые тулзы для создания xml-diff в формате понятном игре (XPath)?
|
Вы имеете в виду rfc5261? На гитхабе рыскал на эту тему, правда задача обратная была - просто накладывать, чтобы читать удобнее было, но тоже ничего толкового не нашел. Проще самому накатать, наверное, на любом любимом. Сам патч наложить фигня, конечно, рфц простенький. А вот дифф состряпать немного сложнее.
Последний раз редактировалось: boojum (23:01 26-05-2014), всего редактировалось 2 раз(а) |
|
|
boojum
374 EGP
        Рейтинг канала: 4(60) Репутация: 25 Сообщения: 905
Зарегистрирован: 28.10.2013
 |
|
Надеюсь, камрад Night Nord не запропал навсегда. Пара файликов давно не разбираются: menu_trader_upgrades.xpl и gameoptions.xpl. Ошибка вроде бы аналогичная.
ljd тянулась с гитхаба, крайний коммит 2b0cddc6a.
Ресурсы из XR v2.10 RC4.
Cкрытый текст (кликните здесь для просмотра)
Код: |
$ python3 --version
Python 3.2.3 |
Код: |
Decompiling ./../01/ui/addons/detailmonitor/menu_trader_upgrades.xpl...
Traceback (most recent call last):
File "./main.py", line 123, in <module>
retval = main()
File "./main.py", line 104, in main
ljd.ast.unwarper.unwarp(ast)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 36, in unwarp
_run_step(_unwarp_ifs, node)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 43, in _run_step
statements.contents = step(statements.contents, **kargs)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 161, in _unwarp_ifs
_unwarp_if_statement(start, body, end, end)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 982, in _unwarp_if_statement
then_blocks = _unwarp_ifs(body, body[-1], topmost_end)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 161, in _unwarp_ifs
_unwarp_if_statement(start, body, end, end)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 968, in _unwarp_if_statement
then_blocks = _unwarp_ifs(then_body, then_body[-1], topmost_end)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 161, in _unwarp_ifs
_unwarp_if_statement(start, body, end, end)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 982, in _unwarp_if_statement
then_blocks = _unwarp_ifs(body, body[-1], topmost_end)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 161, in _unwarp_ifs
_unwarp_if_statement(start, body, end, end)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 937, in _unwarp_if_statement
topmost_end)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 1017, in _extract_if_expression
false, end_i = _search_expression_end(expression, falses)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 1049, in _search_expression_end
assert false is not None
AssertionError
Decompiling ./../01/ui/addons/gameoptions/gameoptions.xpl...
Traceback (most recent call last):
File "./main.py", line 123, in <module>
retval = main()
File "./main.py", line 104, in main
ljd.ast.unwarper.unwarp(ast)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 36, in unwarp
_run_step(_unwarp_ifs, node)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 43, in _run_step
statements.contents = step(statements.contents, **kargs)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 161, in _unwarp_ifs
_unwarp_if_statement(start, body, end, end)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 968, in _unwarp_if_statement
then_blocks = _unwarp_ifs(then_body, then_body[-1], topmost_end)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 161, in _unwarp_ifs
_unwarp_if_statement(start, body, end, end)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 937, in _unwarp_if_statement
topmost_end)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 1017, in _extract_if_expression
false, end_i = _search_expression_end(expression, falses)
File "/home/locky/works/xr-unpack/output/ljd/ljd/ast/unwarper.py", line 1049, in _search_expression_end
assert false is not None
AssertionError |
|
Последний раз редактировалось: boojum (23:08 06-06-2014), всего редактировалось 2 раз(а) |
|
|
by.@ztek
316 EGP
    Рейтинг канала: 1(9) Репутация: 52 Сообщения: 799 Откуда: Минск, Беларусь Зарегистрирован: 21.04.2010
 |
|
Напишу тут. Замучался с новыми переменными и константами в этом новом МД движке. И в командах. Знает кто, в чем разница между cue_is_complete и event_cue_completed, секция кондишн. Как проверить событие срабатывания эпизода (вложенного) в другом скрипте?
_________________ Совершенству нет предела... |
|
|
boojum
374 EGP
        Рейтинг канала: 4(60) Репутация: 25 Сообщения: 905
Зарегистрирован: 28.10.2013
 |
|
by.@ztek : |
в чем разница между cue_is_complete и event_cue_completed, секция кондишн.
|
Разница как минимум в типах cue, в которых можно использовать - событийные или не-событийные. Первые только по какому-то из доступных событий срабатывают, а во вторых проверка условий по интервалу времени. Если использовать не там где нужно, интерпретатор (или как его правильно назвать) вывалит в лог ошибку.
by.@ztek : |
Как проверить событие срабатывания эпизода (вложенного) в другом скрипте?
|
Должно работать что-то типа
Код: |
<conditions>
<event_cue_signalled cue="md.MDScriptName.CueName"/>
</conditions> |
Но опять же, по идее, эпизод должен быть событийным.
|
|
|
by.@ztek
316 EGP
    Рейтинг канала: 1(9) Репутация: 52 Сообщения: 799 Откуда: Минск, Беларусь Зарегистрирован: 21.04.2010
 |
|
boojum : |
Но опять же, по идее, эпизод должен быть событийным.
|
Что такое "событийный эпизод"? "reward" не событие? "add_cargo" не событие? "объект_уничтожен" событие?
добавлено спустя 3 минуты:
Как проверить, что эпизод в стороннем мд выполнен?
добавлено спустя 8 минут:
Не понял. Есть event_cue_cancelled и cue_is_cancelled. Событие эпизода "сброшено" и Эпизод "сброшен". В чем тут разница?
добавлено спустя 4 минуты:
Рассмотрим случай: есть скрипт А_111, в котором через 1 час назначаются переменные. Создаем скрипт В_222, в котором надо проверить, сработал ли скрипт А_111. Как сделать? Что в кондишн будет?
_________________ Совершенству нет предела...
Последний раз редактировалось: by.@ztek (21:53 11-07-2014), всего редактировалось 3 раз(а) |
|
|
boojum
374 EGP
        Рейтинг канала: 4(60) Репутация: 25 Сообщения: 905
Зарегистрирован: 28.10.2013
 |
|
by.@ztek : |
Что такое "событийный эпизод"? "reward" не событие? "add_cargo" не событие? "объект_уничтожен" событие?
|
reward_player, add_cargo - это инструкции действия. event_object_destroyed - инструкция события. Если первые могут быть в <actions>, то событийные могут быть только в ноде conditions событийного cue. Посмотрите инструкции, начинающиеся на "event_" в libraries/common.xml.
Я так понял под "вложенным в скрипте эпизодом" подразумевался cue в другом файле md? Если нет, то разверните предыдущий вопрос, пожалуйста.
by.@ztek : |
Не понял. Есть event_cue_cancelled и cue_is_cancelled. Событие эпизода "сброшено" и Эпизод "сброшен". В чем тут разница?
|
Разница та же. Если event_* может использоваться только в условиях событийного cue, то cue_is_cancelled может юзаться и там и сям.
Официальный мануал смотрели? Там довольно прозрачно эти фичи описаны, в том числе разницы event и non-event cues:
Cкрытый текст (кликните здесь для просмотра)
Non-event conditions
are checked in regular intervals. They may be based on simple values or
ranges, such as a particular in-game time having been reached or the player having a certain
amount of money. They may also be based on more complex player information, such as what
ships they own, whether the player is in a particular area or near a particular object.
Event conditions
are triggered when the corresponding event happens, such as the event that a
particular object has been targeted, attacked or destroyed. All event nodes have the prex “event_”
so you can easily determine a condition type. Non-event conditions can be used in combination
with an event, so they will be checked whenever the event happens. If a condition uses an event, it must be in the rst sub-node of the <conditions> node. It is even possible to dene multiple
alternative events that should activate the cue. The rst sub-node should be <check_any> in this
case, so only one of its sub-conditions has to be met.
|
by.@ztek : |
Рассмотрим случай: есть скрипт А_111, в котором через 1 час назначаются переменные. Создаем скрипт В_222, в котором надо проверить, сработал ли скрипт А_111. Как сделать? Что в кондишн будет?
|
А что значит "сработал скрипт"? Если речь про cue, который завершил работу, то можно ловить его статус. Хоть ивентом, хоть еще как.
Вот по Вашему ТЗ иллюстрация. Второй ловит событие корректного завершения работы первого. В разных файлах и скриптах и неймспейсах, соответственно.
Код: |
<mdscript name="Script_111">
<cues>
<cue name="A_111">
<delay="1h"/>
<actions>
<set_value name="$peremennya" exact="['very', 'important', 'data']"/>
</action>
</cue>
</cues>
</mdscript>
...
<mdscript name="Script_222">
<cues>
<cue name="A_222">
<conditions>
<event_cue_completed cue="md.Script_111.A_111"/>
</conditions>
<actions>
<debug_text text="'Script_111.A_111 is now completed!'" filter="error"/>
</actions>
</cue>
</cues>
</mdscript> |
Последний раз редактировалось: boojum (23:01 11-07-2014), всего редактировалось 2 раз(а) |
|
|
by.@ztek
316 EGP
    Рейтинг канала: 1(9) Репутация: 52 Сообщения: 799 Откуда: Минск, Беларусь Зарегистрирован: 21.04.2010
 |
|
boojum : |
Посмотрите инструкции, начинающиеся на "event_" в libraries/common.xml.
|
Да смотрел.
boojum : |
Я так понял под "вложенным в скрипте эпизодом" подразумевался cue в другом файле md?
|
Да. И вложенный, и еще раз вложенный. Надо указывать полный путь до того эпизода? Имена эпизодов не уникальны?
boojum : |
А что значит "сработал скрипт"? Если речь про cue, который завершил работу, то можно ловить его статус. Хоть ивентом, хоть еще как.
|
Отработал. Условия того эпизода выполнены, секция action сработала. Не могу словить я тот эпизод... По скрипту его - потом срабатывает cancelled, мой скрипт позже ловит его -мож поэтому?
добавлено спустя 9 минут:
Уточню. Эпизод отработал давно. Событий нет.
_________________ Совершенству нет предела...
Последний раз редактировалось: by.@ztek (23:15 11-07-2014), всего редактировалось 1 раз |
|
|
boojum
374 EGP
        Рейтинг канала: 4(60) Репутация: 25 Сообщения: 905
Зарегистрирован: 28.10.2013
 |
|
by.@ztek : |
Да. И вложенный, и еще раз вложенный. Надо указывать полный путь до того эпизода? Имена эпизодов не уникальны?
|
Насколько я понял по ванильным примерам, путь может быть только md.скрипт.куй. То есть, к заведомо вложенным куям обращаются именно так. Из этого, по идее, выходит, что имена cues в пределах скрипта должны быть уникальными.
by.@ztek : |
Отработал. Условия того эпизода выполнены, секция action сработала. Не могу словить я тот эпизод... По скрипту его - потом срабатывает cancelled, мой скрипт позже ловит его -мож поэтому?
|
Если нужный cue свалился в complete или cancelled перед тем как активировался ловящий cue, то событие не поймается, по идее.
Хинт: Можно по сейву проверить его статус после отработки. Может, покажете код обоих эпизодов? Хотя бы фрагментарно.
|
|
|
by.@ztek
316 EGP
    Рейтинг канала: 1(9) Репутация: 52 Сообщения: 799 Откуда: Минск, Беларусь Зарегистрирован: 21.04.2010
 |
|
Да пожалуйста
Ловлю вот этого
Cкрытый текст (кликните здесь для просмотра)
<cue name="RewardLicence">
<conditions>
<event_cue_signalled/>
</conditions>
<actions>
<!--TODO: Reward licence-->
<substitute_text text="$LogText" source="{30303,10}">
<replace string="'$ACTORNAME$'" with="$ArgonContact.knownname"/>
</substitute_text>
<write_to_logbook text="$LogText" category="missions"/>
<unlock_achievement name="PLOT_4_1" />
<do_if value="player.difficulty" min="level.hard">
<unlock_achievement name="PLOT_4_1_HARD" />
</do_if>
<add_licence faction="faction.player" licencefaction="faction.argongovernment" type="intelligence"/>
<remove_mission cue="Start"/>
</actions>
<cues>
<cue name="Cleanup">
<conditions>
<event_object_changed_zone object="player.primaryship"/>
<check_value value="player.zone != $ArgonContact.zone"/>
</conditions>
<actions>
<destroy_object object="$ArgonContact"/>
<cancel_cue cue="Start"/>
</actions>
</cue>
</cues>
</cue>
|
Этим
Cкрытый текст (кликните здесь для просмотра)
<conditions>
<check_any>
<cue_is_cancelled cue="md.Plot_Argon_Licence.Start"/>
</check_any>
</conditions>
|
Это уже сто первый вариант просто прочие условия не сработали, удалил.
_________________ Совершенству нет предела... |
|
|
boojum
374 EGP
        Рейтинг канала: 4(60) Репутация: 25 Сообщения: 905
Зарегистрирован: 28.10.2013
 |
|
Можно еще сразу при инициализации своего скрипта проверить:
Cкрытый текст (кликните здесь для просмотра)
Код: |
<do_if value="md.Plot_Argon_Licence.Start.state == cuestate.cancelled">
<!-- делаем свое грязное дело -->
<signal_cue cue="After_Reward"/>
</do_if>
<do_else>
<signal_cue cue="Wait"/>
</do_else>
|
|
И если не cancelled, то ловим событие event_cue_cancelled, а потом уже делаем свое грязное дело:
Cкрытый текст (кликните здесь для просмотра)
Код: |
<cue name="Wait">
<conditions>
<event_cue_signalled/>
</conditions>
<cues>
<cue name="Check">
<conditions>
<event_cue_cancelled cue="md.Plot_Argon_Licence.Start"/>
</conditions>
<actions>
<signal_cue cue="After_Reward"/>
</actions>
</cue>
</cues>
</cue> |
|
Еще вариант: периодически чекать в несобытийном cue:
Cкрытый текст (кликните здесь для просмотра)
Код: |
<cue name="Wait">
<conditions>
<event_cue_signalled/>
</conditions>
<cues>
<cue name="Check" checkinterval="5m">
<conditions>
<cue_is_cancelled cue="md.Plot_Argon_Licence.Start"/>
</conditions>
<actions>
<signal_cue cue="After_Reward"/>
</actions>
</cue>
</cues>
</cue> |
|
PS: А с переменными в чем засада? Я тоже огреб с ними проблем.
Последний раз редактировалось: boojum (00:18 12-07-2014), всего редактировалось 1 раз |
|
|
by.@ztek
316 EGP
    Рейтинг канала: 1(9) Репутация: 52 Сообщения: 799 Откуда: Минск, Беларусь Зарегистрирован: 21.04.2010
 |
|
boojum : |
А с переменными в чем засада? Я тоже огреб с ними проблем.
|
Мне бы их идентификаторы. Всех. Нет нормального сборника переменных. Вылавливаю из скриптов...
п.с. скрипт-то допилю, возможно через чек_валю (check_value)...ну там немного по другому. вот мне и нужны переменные/константы.
добавлено спустя 3 минуты:
Зарезервированные переменные
_________________ Совершенству нет предела...
Последний раз редактировалось: by.@ztek (00:36 12-07-2014), всего редактировалось 1 раз |
|
|
boojum
374 EGP
        Рейтинг канала: 4(60) Репутация: 25 Сообщения: 905
Зарегистрирован: 28.10.2013
 |
|
Насколько я успел узнать, паблик вары можно черпать только либо из глобала, либо из blackboard персонажей. А к варам cues снаружи доступа нет.
А в чем цель? Может, проще Plot_Argon_Licence пропатчить, чем щупать ее ломом снаружи?
добавлено спустя 2 минуты:
by.@ztek : |
Зарезервированные переменные
|
Например?
Последний раз редактировалось: boojum (07:40 12-07-2014), всего редактировалось 2 раз(а) |
|
|
by.@ztek
316 EGP
    Рейтинг канала: 1(9) Репутация: 52 Сообщения: 799 Откуда: Минск, Беларусь Зарегистрирован: 21.04.2010
 |
|
да тот же "player.copilot", и "unitcategory.transport" и прочее и прочее И синтаксис их применения...в х3 было {player.cargo...} например.
_________________ Совершенству нет предела... |
|
|
boojum
374 EGP
        Рейтинг канала: 4(60) Репутация: 25 Сообщения: 905
Зарегистрирован: 28.10.2013
 |
|
А, я просто Вас не так понял.
Большую часть нужного из констант можно найти в:
* libraries/scriptproperties.xml - практически внятный справочник. Имеет таблицу стилей и открывается в браузере.
* в xsd-шках: libraries/common.xsd, общем для обоих диалектов и отдельных: md.xsd и aiscript.xsd там же. Остальные xsd в libraries тоже могут быть полезны хоть и не всегда они полны тем, что хавает ссылающийся на них конфиг.
В scriptproperties я находил большинство ответов на подобные возникающие вопросы. xsd тоже выручают, хотя бы комментариями.
Последний раз редактировалось: boojum (01:09 12-07-2014), всего редактировалось 1 раз |
|
|
|
|
|
Канал X Rebirth ->
Модовый и скриптовый отсек X Rebirth: «Ковыряем новый движок (моддинг)» |
|
К списку каналов | Наверх страницы |
Цитата не в тему: Дуч, мы для тебя - лучшие пассажиры. Стоп, какие мы пассажиры?! Мы - пилоты! (выдал R_alexis в машине Дуча)
|
» Ковыряем новый движок (моддинг) | страница 16 |
|