Перейти к контенту
Halford

[SoC] Ковыряемся в файлах

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

@Pir@t@s ,

скриптовый вылет, происходит при попытке переместить предмет в контейнер (или из него) и одновременно удалить этот контейнер.

Движок игры пытается переместить предмет, но из-за удаленного родительского объекта (контейнера) не может выполнить операцию с дочерним (child) для контейнера предметом.

Скрытый текст

 

Скриптовый перенос в ящик предметов и сразу скриптовая отправка ящика в оффлайн, чтобы он пропал. Предметы не успели переместиться и произошел вылет. Под отправкой в онлайн/оффлайн подразумевается, использование скриптовых методов can_switch_online/can_switch_offline. В этом случае надо было сложить барахло actor'а во временный ящик и скрыть его от глаз, отправив ящик в принудительный оффлайн. А когда понадобится барахло, перевести ящик в онлайн и вернуть вещи actor'у, после чего удалить этот ящик.

Забирание барахла actor'а может произойти в любой момент на любой локации.

Решение:

Надо отправлять ящик в оффлайн по таймеру, а не сразу.

 

Решение:

Перед удалением контейнера требуется дождаться окончания подобных операций.

Изменено пользователем ed_rez

ed_rez.gif

c1f11b67ff360413e81b4e4dcf21eb41.jpg

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Такая ситуация. Мне нужно сделать так, чтобы НПС достал водку и выпил её. Пишу ему в логику remark использование анимации eat_vodka. Он достаёт водку, но не пьёт её, а просто прячет. Почему так?

Ещё один момент. Есть у меня гражданские зомби. Когда они падают, то НПС продолжает стрелять по ним так, будто они стоят. Это можно как-то исправить?

И ещё по поводу слепых псов. Когда он остаётся один, он всегда убегает. Можно как-то сделать так, чтобы будучи одним он всё равно нападал на ГГ?

ищу движкоправа на ТЧ.
кто может помочь - пишите в ЛС.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Привет всем. Скажите, возможно ли оживить мёртвый диалог, т.е. при срабатывании поршня включается другая часть диалога, а нужный диалог остаётся мёртвым и никогда больше не включается. Попробую по полочкам разложить и речь идёт о ОП 2.1. После диалога с НПС и с отправкой за помощью в Припять включается таймер - 3ч. Не успел, включается поршень квестовик(Искра) умирает и включается поршень Искра мертва и со всеми последствиями - самое главное, не получаешь достижение Солянщик, а на нём держатся многие квесты. Хочу вернуть нужный диалог Дока, но не получается, т.к. опыта нет или это вовсе не возможен. Вот данные с файлов:

Скрытый текст

 

<!--- Диалог с БД в Припяти --->
    <dialog id="doc_iskra_dialog">
        <has_info>parfumer_x10</has_info>
    <dont_has_info>iskra_death</dont_has_info>
    <dont_has_info>doc_iskra_stop</dont_has_info>
        <phrase_list>
         <phrase id="0">
       <text>doc_iskra_dialog_0</text>
          <next>1</next>
          <next>2</next>
       </phrase>
       <phrase id="1">
<precondition>buusty_dialog.is_timer_iskra</precondition>
       <text>doc_iskra_dialog_1</text>
          <next>4</next>
       </phrase>
       <phrase id="2">
<precondition>buusty_dialog.isnt_timer_iskra</precondition>
       <text>doc_iskra_dialog_2</text>
         <next>3</next>
       </phrase>
       <phrase id="3">
       <text>doc_iskra_dialog_3</text>
       <action>dialogs.break_dialog</action>      
       </phrase>
      <phrase id="4">      
       <text>doc_iskra_dialog_4</text>
       <action>buusty_dialog.spawn_parfumer_iskra_norman</action>
        <next>5</next>
       </phrase>
      <phrase id="5">
       <text>doc_iskra_dialog_5</text>
        <next>6</next>
         </phrase>
      <phrase id="6">
       <text>doc_iskra_dialog_6</text>
        <next>7</next>
         </phrase>
      <phrase id="7">
       <text>doc_iskra_dialog_7</text>
        <next>8</next>
         </phrase>
      <phrase id="8">     
       <text>doc_iskra_dialog_8</text>
       <give_info>doc_iskra_stop</give_info>
       <action>buusty_dialog.doc_dal_lekarstvo</action>
       </phrase>
      </phrase_list>
      </dialog>

<!--- Диалог с Парфюмером в Припяти --->
       <dialog id="parfumer_pripyat_dialog">
    <precondition>buusty_dialog.lekarstvo_soul_have</precondition>
       <dont_has_info>parfumer_pripyat_stop</dont_has_info>
       <dont_has_info>iskra_death</dont_has_info>
       <has_info>doc_iskra_stop</has_info>
         <phrase_list>
         <phrase id="0">
       <text>parfumer_pripyat_dialog_0</text>
  <action>buusty_dialog.lekarstvo_soul_otday</action>
         <next>1</next>
         </phrase>
         <phrase id="1">
        <text>parfumer_pripyat_dialog_1</text>
         <next>2</next>
         </phrase>
         <phrase id="2">
       <text>parfumer_pripyat_dialog_2</text>
         <next>3</next>
         </phrase>
         <phrase id="3">
        <text>parfumer_pripyat_dialog_3</text>
         <next>4</next>
         </phrase>
        <phrase id="4">
       <text>parfumer_pripyat_dialog_4</text>
       <give_info>parfumer_pripyat_stop</give_info>
      <action>spawn_restrictor.final_soli_sr</action>
      <action>akill.klenov_cube_sms</action>
       <action>dialogs.break_dialog</action>
          </phrase>
          </phrase_list>
          </dialog>

 

Толкать поршень <info_portion id="final_solyanki"/> уже не возможен. Что подскажите?

 

Т.Ч. Наследство Коллекционера-форум

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
12.01.2021 в 15:51, Houdini_one сказал(а):

по поводу слепых псов

Попробуй поиграться с параметром panic_threshold. Вроде чем он ниже, тем "бесстрашнее" монстры.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Jekyll Вот поглядел, у всех монстров panic_threshold в конфигах равен 0,1, только у слепышей - 0,01, у котов - 0,02, а у тушканов - вообще 0,0. Может, где-то в логике надо чего указать?

Сталкер - наше всё!

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, AndrewMor сказал(а):

panic_threshold в конфигах равен 0,1, только у слепышей - 0,01, у котов - 0,02, а у тушканов - вообще 0,0

Это во всех секциях (_weak, _normal, _strong etc.) одни и те же цифры? Или только в базовой для каждого монстра? Я точно знаю, что в оригинальном ТЧ чем выше panic_threshold, тем более трусливые монстры. Только что проверил на псах. При 0.0 ни один не удрал в бою, при 0.7 удирают едва завидев ГГ.

Кроме того, паника зависит и от тяжести ранения монстра. Возможно есть какая-то логика у "стайных" монстров типа тех же собак, но мне к ней прибегать не приходилось - хватало конфигов.

Изменено пользователем Jekyll

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
16 минут назад, Jekyll сказал(а):

Это во всех секциях (_weak, _normal, _strong etc.) одни и те же цифры?

Цифры разные. Чем сильнее подвид животинки, тем меньше паника.

17 минут назад, Jekyll сказал(а):

Или только в базовой для каждого монстра?

Это базовые параметры, общие для всего конфига мутанта. Отдельные подвиды (weak, normal, _strong) имеют свои значения.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Товарищи спецы, кому не лень, объясните, в чём цимус конструкции.

function prot_release(sobj)
    alife():release(sobj, true)
end

Ну и в соответствующих местах вызов при удалении объекта:

local result = pcall(prot_release, obj)

 

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Jekyll ,@shahvkit Да, точно. Про отдельные секции забыл, общий параметр смотрел. Все верно, чем сильнее мутант, тем меньше значение.

Сталкер - наше всё!

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
4 часа назад, Купер сказал(а):

объясните, в чём цимус конструкции

Цитата из PIL3:

"Если вам надо обрабатывать ошибки в Lua, то вы должны использовать функцию pcall(protected_call) для инкапсуляции своего кода. Вызов pcall вызывает свой первый аргумент в защищенном режиме, так что перехватываются все ошибки во время выполнения функции. Если нет никаких ошибок, то вызов pcall возвращает true и все значения, возвращенные функцией. Иначе он возвращает false и сообщение об ошибке."

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Купер

Как по мне, то это, конкретно для Сталкера, бесполезно и даже вредно. Т.е. в случае ошибки при вызове release движок крашнеться и скриптер сразу увидит, что чегось напортачил. А в случае pcall - краша не будет и можно просто прозевать сбойное место. Так что, надо четко понимать, зачем использовать pcall и где это безопасно для игрового процесса.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

@WinCap , ну не настолько же мы люди тёмные :biggrin:. Разумеется, предварительно прочитано и предпринята попытка к осознанию. Вопрос больше прикладного характера:

стандартный alife():release vs "безопасная обёртка" в виде pcall.

Насколько оно именно тут обосновано и целесообразно?

 

@AndreySol , вот и сгрыз незнайку червячок сомнения :biggrin:: при получении "всякого", лучше же сразу "с треском грохнуться", чем получить неявно-отложенное.

 

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
19 часов назад, AndreySol сказал(а):

в случае ошибки при вызове release движок крашнеться ... А в случае pcall - краша не будет

Не правда! Функция pcall() от движкового "краша" не спасёт, вылет будет. Она защищает только от Lua-ошибок.

 

2 часа назад, Купер сказал(а):

Вопрос больше прикладного характера: стандартный alife():release vs "безопасная обёртка" в виде pcall.

Насколько оно именно тут обосновано и целесообразно?

В данном случае цель может быть только одна - защита от случая когда alife() возвращает nil. От ошибок внутри release() это не спасёт.

Нужно смотреть как используется результат, возвращаемый pcall().

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Товарищи-спецы, а можно заставить как-то бандита стрелять в бандита? Т.е. сделать их врагами? Пробовал через родную функцию обидеть гулаг на НПС по сид:

function kozea_gsk_enemy()
    xr_gulag.setGulagEnemy("simeiz_gsk_lager", level_object_by_sid (1612))
end

но никакой реакции, а я рассчитывал на перестрелку :biggrin: . Они стоят лицом к лицу

 

@Houdini_one  Не уверен, что поможет, но вот логика пса возле вертолета на Ростке:

[smart_terrains]
none = true

[spawner]
cond = {+yan_find_scientist_done}

[logic]
active = mob_home

[mob_home]
path_home = ros_heli_dogs_home
panic = 0

Чем ближе игрок к path_home, тем меньше вероятность, что собака убежит. Еще я бы обратил внимание на радиус, в котором игрок будет атакован. В этом примере он не задан (по умолчанию мин 20 м, макс 40 м)

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
12 часов назад, Muzafir сказал(а):

В этом примере он не задан (по умолчанию мин 20 м, макс 40 м)

Ну так его можно и задать, я у себя прописывал min = 15, max = 30, А можно вообще 0 поставить, наверное. И кстати, при мин. радиусе 15 м все равно последний живой слепыш из гулага начинает убегать от ГГ. Правда, строку panic = 0 не указывал.

Изменено пользователем AndrewMor

Сталкер - наше всё!

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
8 часов назад, AndrewMor сказал(а):

Ну так его можно и задать

Конечно, можно. У меня с заданным panic = 0 псевды атакуют ГГ до последнего. С обычными собаками не экспериментировал

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Даже не знаю, сюда ли писать, поиском проблему вроде не нашёл. Дано: мод RMA + Shadows Addon, там есть отдельный слот для фонарика. Создал уникальный фонарик на основе стандартного, поменял для тестов только название в инвентаре и цену. Модель - переназванная оригинальная. В итоге в слот и обратно уникальный фонарик ставится, но включаться не хочет. Слышны звуки щелчка включения и выключения, эффекта света нет.

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

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Капрал Хикс сказал(а):

То ли движок такие фокусы не одобряет, то ли я не знаю.

Камрад @Купер опередил немного с правильной подсказкой. Пока я видео грузил.

Видео

Изменено пользователем Marafon6540

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...