Модостроение (вопросы и ответы)

Модераторы: by.@ztek, Постигший истину, Модераторы

Re: Модостроение (вопросы и ответы)

Сообщение DNA78 » 17 янв 2020, 05:26

gav622007
И это ты называешь без заморочек :D Без заморочек - это когда просто берёшь и присваиваешь нужному кораблю и в нужном месте флаг sellable ;)
Аватар пользователя
DNA78
Moderator
Moderator
 
Сообщений: 1197
Изображения: 2
Зарегистрирован: 09 фев 2011, 20:08
DSP: 141
Благодарил (а): 156 раз.
Поблагодарили: 601 раз.

Re: Модостроение (вопросы и ответы)

Сообщение phalcor » 17 янв 2020, 10:54

gav622007 писал(а):У меня немного другие задачи

Тогда да, мой вариант не годится. :dknow:
gav622007 писал(а):вот скопипастит кто нидь, и будет ему гемор

Защита от бездумного копирования ;)
"Открылась бездна звезд полна; Звездам числа нет, бездне дна."
phalcor
Moderator
Moderator
 
Сообщений: 221
Изображения: 0
Зарегистрирован: 07 июн 2017, 11:57
DSP: 30
Награды: 1
За то что надо!!! (1)
Благодарил (а): 42 раз.
Поблагодарили: 91 раз.

Re: Модостроение (вопросы и ответы)

Сообщение gav622007 » 17 янв 2020, 12:29

DNA78, так ведь нет вариантов без правки ОБЖа, ну а в чём заморочки, написать маленький эпизод в MD? Который сработает один раз за игру. Конечно, я и сам хотел бы написать сюжет в MD, было бы красивей. Пытаюсь, может что и выйдет, но туго у меня в MD идёт, а в SE запросто :)
gav622007
Newbie
Newbie
 
Сообщений: 38
Изображения: 0
Зарегистрирован: 13 июн 2018, 14:15
DSP: 1
Благодарил (а): 3 раз.
Поблагодарили: 6 раз.

Re: Модостроение (вопросы и ответы)

Сообщение DNA78 » 17 янв 2020, 13:21

gav622007
Да там ничего сложного. Чтобы быстрей понять принцип их работы - дебуж их.
Аватар пользователя
DNA78
Moderator
Moderator
 
Сообщений: 1197
Изображения: 2
Зарегистрирован: 09 фев 2011, 20:08
DSP: 141
Благодарил (а): 156 раз.
Поблагодарили: 601 раз.

Re: Модостроение (вопросы и ответы)

Сообщение gav622007 » 18 янв 2020, 05:42

Нужно из MD запустить глобальный скрипт SE и передать ему аргументом корыто, правильно ли будет:
Код: выделить все
<run_script script="a.find.traitor" task="1">
    <scriptargs>
       <scriptvalue datatype="ship" datavalue="this.traitor">
       </scriptvalue>
     </scriptargs>
 </run_script>

вроде работает, но сомневаюсь в стеке task="1", при других вариантах не работает.
gav622007
Newbie
Newbie
 
Сообщений: 38
Изображения: 0
Зарегистрирован: 13 июн 2018, 14:15
DSP: 1
Благодарил (а): 3 раз.
Поблагодарили: 6 раз.

Re: Модостроение (вопросы и ответы)

Сообщение DNA78 » 18 янв 2020, 09:31

gav622007
Код: выделить все
<run_script script="a.find.traitor">
   <scriptargs>
      <scriptvalue datatype="ship" datavalue="{object@this.traitor}"/>
   </scriptargs>
</run_script>

Открывай чужие скрипты и смотри как сделано там. Например скрипты из ТОТТ'а.
Аватар пользователя
DNA78
Moderator
Moderator
 
Сообщений: 1197
Изображения: 2
Зарегистрирован: 09 фев 2011, 20:08
DSP: 141
Благодарил (а): 156 раз.
Поблагодарили: 601 раз.

Re: Модостроение (вопросы и ответы)

Сообщение phalcor » 18 янв 2020, 10:39

gav622007 писал(а):сомневаюсь в стеке task="1"

В данном случае это не стек.
Код: выделить все
   task      boolean       Start action as a separate task? 
"Открылась бездна звезд полна; Звездам числа нет, бездне дна."

За это сообщение автора phalcor поблагодарил:
gav622007
Рейтинг: 1.89%
 
phalcor
Moderator
Moderator
 
Сообщений: 221
Изображения: 0
Зарегистрирован: 07 июн 2017, 11:57
DSP: 30
Награды: 1
За то что надо!!! (1)
Благодарил (а): 42 раз.
Поблагодарили: 91 раз.

Re: Модостроение (вопросы и ответы)

Сообщение gav622007 » 18 янв 2020, 14:42

Код: выделить все
<run_script script="a.find.traitor">
   <scriptargs>
      <scriptvalue datatype="ship" datavalue="{object@this.traitor}"/>
   </scriptargs>
</run_script>

при таком варианте запускается несколько сотен скриптов
вот весь эпизод
Код: выделить все
cues>
    <cue name="Start Getting a Tug" game="all" version="1" comment="this is only so we know
what's happening in this cue ">
      <condition>
        <check_all>
          <check_age value="{player.age}" min="1h"/>
          <check_value value="{player.notoriety.boron.rank}" min="5"/>
        </check_all>
      </condition>
      <timing>
        <time min="5s" max="10s"/>
      </timing>
      <action>
        <do_all>
          <find_station name="this.shipyard" typename="SS_FAC_B_SHIP_BIG">
            <sector x="17" y="14" />
          </find_station>
          <create_ship name="this.traitor" typename="SS_SH_B_M6" race="boron" boardable="1" invincible="1" >
            <position object="this.shipyard" min="1km" max="3km"/>
            <sector x="17" y="14"/>
            <equipment loadout="default"/>
            <command command="none">
            </command>
          </create_ship>
          <run_script script="a.find.traitor">
            <scriptargs>
              <scriptvalue datatype="ship" datavalue="{object@this.traitor}"/>
            </scriptargs>
          </run_script>
         </do_all>
      </action>
    </cue>
   </cues>

где ошибка?
нормально работает только:
Код: выделить все
<run_script script="a.find.traitor" task="1">
     <scriptargs>
       <scriptvalue datatype="ship" datavalue="{object@this.traitor}"/>
    </scriptargs>
 </run_script>

вот из TOTT.Xenon.Invasions
Код: выделить все
<action>
     <do_all>
      <run_script script="TOTT.New.Invasion.Backsector" task="1"/>                 
   </do_all>
</action>

больше я run_script нигде не нашёл :?
Кажется понял: task boolean Start action as a separate task? --> Выполнить действие как самостоятельную задачу (не ожидать завершения)?
Получается, если нет task="1" или task="0", run_script повторяет действия перед ним, пока не отработает вызываемый скрипт, а у меня в нём задержка 10 сек, вот он и создавал мне 700 корыт за 10 сек. :D
Значит правильно будет всё таки: <run_script script="a.find.traitor" task="1"/>?
Ещё раз спасибо, что ткнул носом в "Start action as a separate task?" (у меня мозгов не хватило в director найти описание task), думал это стек :D
Полез теперь разбираться с брифингами :)
Последний раз редактировалось gav622007 18 янв 2020, 18:25, всего редактировалось 1 раз.
gav622007
Newbie
Newbie
 
Сообщений: 38
Изображения: 0
Зарегистрирован: 13 июн 2018, 14:15
DSP: 1
Благодарил (а): 3 раз.
Поблагодарили: 6 раз.

Re: Модостроение (вопросы и ответы)

Сообщение gav622007 » 18 янв 2020, 18:08

Без task="1?
Ооо, куда пост дел? :D
З.Ы. вызываемому скрипту дай задержку до return null секунд 10, и будет тебе радость :D
gav622007
Newbie
Newbie
 
Сообщений: 38
Изображения: 0
Зарегистрирован: 13 июн 2018, 14:15
DSP: 1
Благодарил (а): 3 раз.
Поблагодарили: 6 раз.

Re: Модостроение (вопросы и ответы)

Сообщение DNA78 » 18 янв 2020, 18:19

gav622007 писал(а):З.Ы. вызываемому скрипту дай задержку до return null секунд 10, и будет тебе радость

Только радость не мне, а тебе :D Без задержки у меня работает всё нормально и без task="1". Я как бы не ясновидящий, что бы знать что там у тебя за скрипты запускаются.
Аватар пользователя
DNA78
Moderator
Moderator
 
Сообщений: 1197
Изображения: 2
Зарегистрирован: 09 фев 2011, 20:08
DSP: 141
Благодарил (а): 156 раз.
Поблагодарили: 601 раз.

Re: Модостроение (вопросы и ответы)

Сообщение phalcor » 19 янв 2020, 13:55

По поводу task.
Для себя я сделал вывод, что это БАГ в движке MD, связанный с тем, что он (движок) не всегда проверяет статус запускаемого "cue", и, в нашем случае, он повторно запускает "cue", который имеет статус 1-active (означает - начал работу, но ещё не завершён).
Убедиться в этом можно, проведя простой эксперимент.
Имеем:
Код: выделить все
      <cue name="test_task_bug">
            <action>
              <do_all>               
                  <incoming_message text="md1: {player.age}"/>               
                  <run_script script="test.task1" task="1"/>                           
                 <incoming_message text="md2: {player.age}"/>               
              </do_all>
          </action>
      </cue>
Код: выделить все
$t=playing time
$t='se1: '+$t
write to player logbook $t

$wait=30000
while$wait
$wait=wait $wait ms
end

$t=playing time
$t='se2: '+$t
write to player logbook $t

return null
Итак, запускаем игру с этими скриптами:
1) task=1 (т.е., как правильно заметил выше gav622007 - md не будет ждать завершения se), и через 30 сек в журнале видим:
[Для просмотра изображения необходимо включить JavaScript]
Т.е. всё, как и должно быть.

2) task=0 (md должен ДОЖДАТЬСЯ окончания запускаемого se-скрипта)
Порлучаем сотни запущенных копий MD и SE!!!

Происходит это ТОЛЬКО в случае, если в запускаемом SE-скрипте присутствует оператор @wait (или ему подобный), который, как известно, служит для передачи процессорного времени другим исполняемым в то же время задачам.

Надеюсь, понятно объяснил :bv:
Можно уменьшит wait до ~300-500ms (чтобы было запущено всего несколько десятков копий) и затем посмотреть в журнале очерёдность исполнения скриптов.
"Открылась бездна звезд полна; Звездам числа нет, бездне дна."
phalcor
Moderator
Moderator
 
Сообщений: 221
Изображения: 0
Зарегистрирован: 07 июн 2017, 11:57
DSP: 30
Награды: 1
За то что надо!!! (1)
Благодарил (а): 42 раз.
Поблагодарили: 91 раз.

Re: Модостроение (вопросы и ответы)

Сообщение gav622007 » 19 янв 2020, 15:43

Ну да, я ж к этому и пришёл благодаря твоей подсказке, ставим task=1 для глобального, и никаких проблем, MD ждёт следующих условий, а SE делает своё :)
Даже если не будет task=1 и перед run scripn никаких действий в cue, он всё равно будет плодить скрипты пока первый не отработает, проверял. Только если вызываемый скрипт чисто запускает другой без задержки, но это лишний скрипт в SE.
gav622007
Newbie
Newbie
 
Сообщений: 38
Изображения: 0
Зарегистрирован: 13 июн 2018, 14:15
DSP: 1
Благодарил (а): 3 раз.
Поблагодарили: 6 раз.

Re: Модостроение (вопросы и ответы)

Сообщение gav622007 » 22 янв 2020, 14:15

файл conversations.xml
Код: выделить все
<conversation name="OfferGettingTugConv01">
        <player text="{3800,5000}" comment="OfferText">
         <npc text="{@pageid,943}" comment="answer npc"/>
       </player>
   </conversation>

Есть варианты как обмануть {@pageid,943}? Вместо 943 подставлять переменную, чтобы не писать шаблон под каждый ответ. Перепробовал разные варианты, не получается.
gav622007
Newbie
Newbie
 
Сообщений: 38
Изображения: 0
Зарегистрирован: 13 июн 2018, 14:15
DSP: 1
Благодарил (а): 3 раз.
Поблагодарили: 6 раз.

Пред.

Вернуться в X3: Time Of The Truth

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

cron