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

Prostomod

Разработчики
  • Публикаций

    2 089
  • Зарегистрирован

  • Посещение

  • Победитель дней

    13

Сообщения, опубликованные Prostomod


  1. Drive А проверь, у тебя вообще тот спавн в игре стоит? Мб ты что-то двигал, или рестрикторы не так назвал, или что-то исправлял. А потом забыл закинуть исправленный спавн в игру.


  2. AziatkaVictor А в 4 этапе можно предоставить скриншот, сделанный в коллекторах Янтаря? А то я, делая свой квест, смог заснять, как по мне, неплохой скриншот. (тушканчики злые, снимал демо рекордом)

    Картина "Броню купили", Prostomod, ЗП + мод, 2023:)

    20230623022234_1.thumb.jpg.e72ec21b912673d6dd137f6f993564ee.jpg

    • Лайк 3
    • Мастер! 1
    • Спасибо 1

  3. Ещё хочу задать вопрос: есть ли какой-то способ заставить НПС выстрелить в члена своей группировки (и даже больше - в НПС, который в том же скваде, что и стрелок), причём так, чтобы жерва не меняла группировку? Или только писать скрипт для симуляции такого?
    Анимация threat_fire в walker не работает - НПС не стреляет, если на траектории выстрела есть дружественный НПС.

    Я хочу достичь такого эффекта: один НПС убивает своего товарища, однако после если ГГ глянет на группировки жертвы и убийцы, то она будет совпадать.


    Дополнено 6 минуты спустя

    SoDizzari Я так понял, тут надо поработать с параметрами hp_state и hp_state_see: первое - поведение при определённом ХП когда не видит игрока, а второе - тоже самое, но когда видит игрока. Вот на этой сайте (тык) нашёл огромную шпаргалку по настройке логики, в т.ч. по секциям разного вида.

    Спойлер

    hp_state= 30|help_me@help|10|wounded_heavy@help_heavy
    hp_state_see = 30|wounded@help_see|10|wounded_heavy@help_heavy
    psy_state = 50|{=best_pistol}psy_armed,psy_pain@wounded_psy|20|psy_shoot,psy_pain@wounded_psy_shoot,wounded_psy hp_victim = 30|actor|10|nil
    hp_cover = 30|true|10|false
    hp_fight = 30|true|10|false
    syndata = wounded@help
    ;best_pistol – проверка на то, что лучшее оружие NPC является пистолетом.

     


    Дополнено 52 минуты спустя

    И ещё сразу вопрос: в зп есть возможность смены эмбиента локации прямо во время игры? Например, играет одно на вей локации, но при заходе в какой-нибудь коллектор композиция меняется.


  4. Что-то мне стало любопытно: а какой продолжительности у всех моды сейчас получаются? А то у меня, если спидранить (в смысле быстро проходить, без читов или багов), то 3-4 минуты уходит на весь контент (хоть, конечно, это не весь сюжет, но где-то 30-40% от планируемого).

    Спойлер

    И нет - у меня квест не за долговца или вояку. Дегтярёв - просто плейсхолдер, потом сменю.

    20230622184936_1.thumb.jpg.724a9ac41f0ee12942025dafeaee9ebc.jpg

     

    • Лайк 2
    • Мастер! 1
    • Спасибо 2

  5. Neptun попробовал с ремарком, анимация отработала как надо, но результат мне не понравился т.к. хотелось бы сохранить возможность вести диалог ГГ с конвоиром. Решил заменить анимацию пленника, чтобы сгладить эту проблему, но возник другой вопрос: как можно сделать, чтобы НПС, с которым я веду диалог, продолжал отыгрывать анимацию в нужную сторону?
    Если в секции meet просто поставить victim (любой) = story_id, то НПС начинает колбаситься.

    Спойлер

    victim = 30 | yan_expedition_dolg_1_copy ;стори_ид персонажа, на которого должен смотреть собеседник
    victim_wpn = 30 | yan_expedition_dolg_1_copy
    snd_on_use = nil
    use = true
    use_wpn = true
    meet_dialog = yan_psi_oko_kudrischev_in_tubes
    trade_enable = false

     


  6. Есть идеи, как мне сделать так, чтобы НПС смотрел строго в определённую точку? Планирую сделать такую сцену: один НПС сидит с руками за головой, а второй стоит рядом и тычет в него стволом. Я попытался сделать по аналогии с пленником в контейнерах, однако НПС с оружием смотрит выше, чем сидит пленник.
    Вейпоинт взгляда НПС с оружием ставит и в точно такой-же позиции, что и положение пленника, и в позиции чуть ниже (вейпоинт утопал в меше).

    Спойлер

    [logic@yan_tube_threaten_dolg]
    suitable = {=check_npc_name(yan_expedition_dolg_1_copy)}
    on_hit = hit
    on_death = death
    active = walker@walker_start
    prior = 200

    [walker@walker_start]
    on_info = { +yan_psi_oko_kudrischev_in_tubes_dialog } remark@walker_death
    def_state_standing = prisoner
    corpse_detection_enabled = false
    gather_items_enabled = false
    combat_ignore_cond = true
    combat_ignore_keep_when_attacked = true
    invulnerable = true
    path_walk = dolg_threat_walk
    path_look = dolg_threat_look
    meet = no_meet

    ...

    [walker@kudrischev_base]
    corpse_detection_enabled = false
    gather_items_enabled = false
    combat_ignore_cond = true
    combat_ignore_keep_when_attacked = true
    invulnerable = true

    [logic@yan_tube_kudrischev]
    suitable = {=check_npc_name(kudrischev_copy)}
    active = walker@kudrischev_start
    prior = 200

    [walker@kudrischev_start]:walker@kudrischev_base
    on_info = {=actor_in_zone(yan_tubes_kurdischev_force_kill) -yan_psi_oko_kudrischev_in_tubes_dialog } % +yan_psi_oko_kudrischev_in_tubes_dialog %
    on_info2 = { +yan_psi_oko_kudrischev_in_tubes_dialog } walker@kudrischev_kill
    def_state_standing = threat_na
    path_walk = kudrischev_threating_walk
    path_look = kudrischev_threating_look
    meet = meet

    Спойлер

    20230622161423_1.thumb.jpg.6794e4471c0051fcb42417cc7989bc7a.jpg

     


  7. 20 минут назад, ScR1pt сказал:

    ВЫ не представляете, насколько мало я сделал.

    ВЫ не представляете, насколько я делаю кринж в своём квесте.

    Paracetamol это самодельная анимация, или где-то уже была?


  8. Кто может объяснить, в чём проблема: мне нужно, в определённый момент, переместить скриптом весь инвентарь ГГ в ящик. Я написал скрипт на основе скрипта переноса хабара из личного ящика на Янове в сейф Коряги, а так-же назначил ящику story_id (в этот раз я перепроверил несколько раз - story_id в логике верный). Проблема в том, что скрипт отрабатывает своё, однако ничего не переносится, все вещи остаются у ГГ. Где у меня ошибка?

    Спойлер

    function relocate_actor_inventory_to_box(actor, npc, p)
        local box = get_story_object_id(p[1])
        if box ~= nil then
            local function transfer_items(item)
                if item:section()~="wpn_binoc" and item:section()~="wpn_knife" and item:section()~="device_torch" then
                    db.actor:transfer_item(item, box)
                end
            end
            db.actor:inventory_for_each(transfer_items)
        else
            abort("Cannot find box for inventory relocation with story_id [%s]", p[1])
        end
    end

     


  9. 1 час назад, Крим сказал:

    Как у всех успехи?

    Кулер с блока питания отправляется в верхнюю тундру, менять надо. А квест делается, правда, пока показать что не знаю, да и появляется мысль, что делаю я откровенную фигню.


  10. vasyan54636 у тебя в логике тоже on_info имеет перенос строки посередине, или это сайт шалит? Вроде как перенос строки там, где не надо, может поломать её.
    Либо мб проблема в том, что у тебя из условий on_info только нахождение игрока в рестрикторе, причём без перехода на другую секцию логики (в т.ч. пустую), что означает, что анимация будет постоянно пытаться проиграться сначала при каждом тике логики.


    Дополнено 0 минут спустя

    Глупый вопрос: какой story_id у игрока?


  11. Vodka посмотри на actor_has_item_count().

    Крим что-то с работами в смарте не то... Попробуй активировать функцию abort. Как это сделать, написано тут (спойлер "Получение более подробной информации о вылете").


  12. 59 минут назад, Mass сказал:

    секция walker@start существует в данном файле?

    Забыл добавить. Да, существует:

    Спойлер


    [walker@start]
    team = yan_expedition_squad
    def_state_standing = hide
    def_state_moving = assault
    corpse_detection_enabled = false
    gather_items_enabled = false
    combat_ignore_cond = true
    combat_ignore_keep_when_attacked = true
    invulnerable = true
    meet = no_meet

     

    59 минут назад, Mass сказал:

    А если анимку поменять на hide_na?

    Вроде в списке (тут) анимаций она указывалась как анимация со стрельбой, но попробую. 


  13. Появилась такая неприятность: у НПС настроена логика, которая работает корректно за исключением одной детали: переключение по on_info у некоторых НПС стабильно происходит только после перезагрузки, причём переключение аналогичной логики у других НПС происходит корректно сразу же после получения инфопоршня. В чём может быть проблема и как с ней бороться?
    Если что, все НПС сидят в анимации hide, прописанной в look вейпоинте:

    |a=hide
    Спойлер


    [logic@yan_expedition_dolg_guard_4]
    suitable = {=npc_community(dolg)} true
    active = walker@dolg_guard_4_start
    prior = 190
    post_combat_time = 0, 0

    [walker@dolg_guard_4_start]:walker@start
    path_walk = dolg_guard_4_walk
    path_look = dolg_guard_4_look
    on_info = {+yan_psi_oko_expedition_p2_start} walker@dolg_guard_4_phase_2

    [walker@dolg_guard_4_phase_2]:walker@start
    path_walk = dolg_4_phase_2_walk
    path_look = dolg_4_phase_2_look

     


    Дополнено 0 минут спустя

    Mindallius Спавн после этого пересобрал? И проверь ещё, актуальные ли файлы спавна и сетки в папках с уровнем и spawns в самой игре.


    Дополнено 10 минуты спустя

    vasyan54636 тут описан способ получения более подробной информации о вылете. Фактически, игра начинает придираться к некоторым деталям и вылетать из-за каждой ошибки, зато их исправлять намного легче + выявляются скрытые, благодаря чему мод становится стабильнее. http://sigerous.ru/forum/322-2824-37


    Дополнено 52 минуты спустя

    Касательно моей проблемы заметил такое: багаются так НПС с Отбойниками, а нормально работают те, у кого другое оружие (Абаканы), причём, кстати, багаются и в других секциях так-же. Конечно, можно и перевооружить, но хотелось бы докопаться до причины проблемы.
    Если что, оружейный пак полностью оригинальный.

    • Спасибо 1

  14. 5 минут назад, denis2000 сказал:

    пишите лог в отдельный файл LUA методами

    Интересно... Можете подсказать мод, где подобное уже реализовано? Навскидку я не могу ни один такой вспомнить.

    Могу, конечно, и сам с 0 попробовать сделать, но с ориентиром это будет попроще.


  15. denis2000 я увеличил таймеры до 20 - всё равно не переключает. Пробовал даже избавиться от таймеров (заменил на простое on_info без условий) - всё равно не переключает дальше 1 сообщения. 

    Мб есть какое-то ограничение на количество состояний в логике? А то она планируется довольно сложная, и это будет неприятный сюрприз если часть состояний просто не будет читается.

    Спойлер

    [logic]
    active = sr_idle@start

    [sr_idle@start]
    on_info = {+yan_psi_oko_teleport_expedition_squad} sr_idle@teleport_expedition %=teleport_squad(yan_expedition_smart_squad:yan_expedition_smart_spawn)%

    [sr_idle@teleport_expedition]
    on_info = {+yan_psi_oko_vasil_about_expedition_dialog} sr_idle@teleport %=run_postprocess(fade_in_out)%

    [sr_idle@teleport]
    on_game_timer = 30 | sr_idle@teleport_end %=teleport_actor(yan_expedition_smart_actor_teleport_walk:yan_expedition_smart_actor_teleport_look)%

    [sr_idle@teleport_end]
    on_game_timer = 30 | sr_idle@after_teleport %=enable_ui() =stop_postprocess()%

    [sr_idle@after_teleport]
    on_info = {!actor_in_zone(yan_expedition_start_restrictor)} sr_idle@return_actor_start %=disable_ui() =run_postprocess(fade_in_out)%
    on_info2 = {+yan_psi_oko_kudr_about_expedition_dialog} sr_idle@phase_1

    [sr_idle@return_actor_start]
    on_game_timer = 10 | sr_idle@return_actor_start_end %=teleport_actor(yan_expedition_smart_actor_teleport_walk:yan_expedition_smart_actor_teleport_look)%

    [sr_idle@return_actor_start_end]
    on_game_timer = 10 | sr_idle@after_teleport %=enable_ui() =stop_postprocess()%

    [sr_idle@phase_1]
    on_info = {+yan_psi_oko_expedition_p1_recon_1_checked +yan_psi_oko_expedition_p1_recon_2_checked} sr_idle@phase_1_blame %=send_tip(st_recon_first_confurm_clear:yan_expedition_dolg_1:yan_expedition_dolg_1)%

    [sr_idle@phase_1_blame]
    on_game_timer = 20 | sr_idle@phase_1_confurm %=send_tip(st_recon_first_blame:kudrischev:kudrischev)%

    [sr_idle@phase_1_confurm]
    on_game_timer = 20 | sr_idle@phase_1_next %=send_tip(st_recon_second_confurm_clear:yan_expedition_dolg_2:yan_expedition_dolg_2)%

    [sr_idle@phase_1_next]
    on_game_timer = 20 | sr_idle@phase_2 %=send_tip(st_recon_kudrischev_confurm:kudrischev:kudrischev)%

    [sr_idle@phase_2]

    Логика НПС не менялась.


    Дополнено 19 минуты спустя

    Всё, я нашёл у себя ошибку - логика останавливалась т.к. в send_tip передавался неверный story_id.
    Тогда вопрос: а как в стриптах мне делать проверку на валидность story_id (story_id существует - true, иначе false)? Хочу дополнительный abort воткнуть в скрипт отправки сообщения.

    И да, всё ещё хочу узнать: есть ли лимит на количество состояний в логике?


    Дополнено 32 минуты спустя

    И ещё вопрос: а можно как-то реанимировать оригинальный printf? Я раскомментировал тело функции в _g.script, но функция всё-равно не работает. Видел способ логгирования через преобразование сообщения в команду консоли и попыткой её выполнения, но этот способ очень нестабилен (может вылететь при неправильных параметрах, да ещё и лога не будет).
    Если это на уровне движка выключено - мб есть где правка на его включение?


  16. Что-то я не пойму, где косяк:

    Есть 2 НПС в одном скваде и рестриктор с логикой. Сквад находится в смарте и НПС выполняют там работу: сначала стоять на точке, после получения инфопоршня идти по пути, на конце которого установлен сигнал, при вызове которого даётся инфопоршень, а после получения обоих поршней начинается обмен сообщениями. И вроде по отдельности всё работает: каждый НПС приходит на точку, сигналы на обоих путях срабатывают, логика рестриктора переключается корректно, сообщение может корректно отправиться, однако в сборе, когда оба НПС достигают финальной точки маршрута, отправляется только одно сообщение из 4. Где я допустил ошибку?

    Спойлер

    ;presets
    [walker@start]
    def_state_standing = hide
    def_state_moving = assault
    corpse_detection_enabled = false
    gather_items_enabled = false
    combat_ignore_cond = true
    combat_ignore_keep_when_attacked = true
    invulnerable = true
    meet = no_meet

    ; dolg guard 1
    [logic@yan_expedition_dolg_guard_1]
    suitable = {=npc_community(dolg)) true
    active = walker@dolg_guard_1_start
    prior = 190
    post_combat_time = 0, 0

    [walker@dolg_guard_1_start]:walker@start
    path_walk = dolg_guard_1_walk
    path_look = dolg_guard_1_look
    on_info = {+yan_psi_oko_kudr_about_expedition_dialog} walker@dolg_guard_1_phase_1 ;переключение работает - НПС идёт

    [walker@dolg_guard_1_phase_1]:walker@start
    path_walk = dolg_1_recon_walk
    path_look = dolg_1_recon_look
    on_signal = recon_end | %+yan_psi_oko_expedition_p1_recon_1_checked% ;если прописать тут вызов сообщения - оно вызовется

    ; dolg guard 2
    [logic@yan_expedition_dolg_guard_2]
    suitable = {=npc_community(dolg)} true
    active = walker@dolg_guard_2_start
    prior = 190
    post_combat_time = 0, 0

    [walker@dolg_guard_2_start]:walker@start
    path_walk = dolg_guard_2_walk
    path_look = dolg_guard_2_look
    on_info = {+yan_psi_oko_kudr_about_expedition_dialog} walker@dolg_guard_2_phase_1 ;переключение работает - НПС идёт

    [walker@dolg_guard_2_phase_1]:walker@start
    path_walk = dolg_2_recon_walk
    path_look = dolg_2_recon_look
    on_signal = recon_end | %+yan_psi_oko_expedition_p1_recon_2_checked% ;если прописать тут вызов сообщения - оно вызовется

    Спойлер

    [logic]
    active = sr_idle@start

    [sr_idle@start]
    on_info = {+yan_psi_oko_teleport_expedition_squad} sr_idle@teleport_expedition %=teleport_squad(yan_expedition_smart_squad:yan_expedition_smart_spawn)%

    [sr_idle@teleport_expedition]
    on_info = {+yan_psi_oko_vasil_about_expedition_dialog} sr_idle@teleport %=run_postprocess(fade_in_out)%

    [sr_idle@teleport]
    on_game_timer = 30 | sr_idle@teleport_end %=teleport_actor(yan_expedition_smart_actor_teleport_walk:yan_expedition_smart_actor_teleport_look)%

    [sr_idle@teleport_end]
    on_game_timer = 30 | sr_idle@after_teleport %=enable_ui() =stop_postprocess()%

    [sr_idle@after_teleport]
    on_info = {!actor_in_zone(yan_expedition_start_restrictor)} sr_idle@return_actor_start %=disable_ui() =run_postprocess(fade_in_out)%
    on_info2 = {+yan_psi_oko_kudr_about_expedition_dialog} sr_idle@phase_1

    [sr_idle@return_actor_start]
    on_game_timer = 10 | sr_idle@return_actor_start_end %=teleport_actor(yan_expedition_smart_actor_teleport_walk:yan_expedition_smart_actor_teleport_look)%

    [sr_idle@return_actor_start_end]
    on_game_timer = 10 | sr_idle@after_teleport %=enable_ui() =stop_postprocess()%

    [sr_idle@phase_1]
    on_info = {+yan_psi_oko_expedition_p1_recon_1_checked +yan_psi_oko_expedition_p1_recon_2_checked} sr_idle@phase_1_blame %=send_tip(st_recon_first_confurm_clear:yan_expedition_dolg_1:yan_expedition_dolg_1)%

    [sr_idle@phase_1_blame]
    on_game_timer = 5 | sr_idle@phase_1_confurm %=send_tip(st_recon_first_blame:kudrischev:kudrischev)%

    [sr_idle@phase_1_confurm]
    on_game_timer = 5 | sr_idle@phase_1_next %=send_tip(st_recon_second_confurm_clear:yan_expedition_dolg_2:yan_expedition_dolg_2)%

    [sr_idle@phase_1_next]
    on_game_timer = 5 | sr_idle@phase_2 %=send_tip(st_recon_kudrischev_confurm:kudrischev:kudrischev)%

    [sr_idle@phase_2]

     


  17. 2 часа назад, AziatkaVictor сказал:

    Раньше же приходилось на каждый смарт, где было от силы персонажей 2-3 тратить целый день. Сейчас можно без проблем всю локацию за день или два заселить.

    Согласен: в начале создания квеста я вообще не мог сквад создать, а теперь делаю уже и довольно сложную логику с ними.
    Вообще, после анрила моддинг сталкера выглядит как создание игры в каком-нибудь гейммейкере: просто конструктор из всего заготовленного, бери и делать что хочешь (правда, часть не работает, часть не очень хорошо известна по интернету, а часть ломается от мысли "только не ломайся").

    Спойлер

    Не самое сложная часть логики, просто скриншот.

    ss_1_06-20-23_02-49-32_(yantar).thumb.jpg.9638281bd5e24631ebe28b6cf8ba0f70.jpg

     

    • Лайк 1
    • Спасибо 1

  18. AziatkaVictor Явно ошибка СДК: я альтернативным способом переименовал вейпоинт напрямую в .part через блокнот - СДК принял спокойно (а вот как-раз, видимо, я где-то ошибся в названии и поломал файл со спавном - тут уже мой косяк 100%). Так как СДК влёт перезагружает уровень, теперь спавню вейпоин (он без названия появляется), обновляю открытый way.part в notepad++, вписываю вручную имя вейпоинту там, сохраняю и переоткрываю уровень в СДК, иногда делаю бекапы... Мб и извращение, но, мне кажется, переустановка, настройка и остальные проблемы оригинального СДК займут больше времени, нежели такая махинация.


    Дополнено 54 минуты спустя

    Я успел поверить в себя, разочароваться в себе, потерять веру в возможность сделать мод, вернуть веру в возможность сделать мод, убить несколько нервных клеток, получить удовольствие от успешного запуска, вспомнить почему бросил крупный моддинг и за что его любил... пока заселял этот долбанный бункер, причём без особо сложной логики... Зато вспомнил хотя бы базу, как делать смарты.

    Спойлер

    (кровопивцы не в смысле кровососы - я не курил, да и Долг в охране не одобрил бы)

    ss_1_06-19-23_21-30-48_(yantar).thumb.jpg.9361c037c902d9b3860a184955ce4719.jpg

     

    • Лайк 1

  19. Я, значит, придумал квест, подобрал локацию (Янтарь ТЧ + ЧН из Ветра времени, вроде разрешено), красиво подключил в игру (без костылей, насколько можно, и со всеми приколюхами из оригинальных лок), получил кураж и уверенность, что получится сделать годноту, так как даже когда я активно занимался моддингом у меня не получалось всё настолько чисто... SDK тупо стал вылетать при переименовании вейпоинта :u1F44D.0:. Говорит, получается: "Уходи, пока цел" (говорить голосом контроллёра). Благо, нашлось у меня, хоть и костыльное, но решение этой беды.
    Короче, походу я всё-таки смогу выложить что-то на конкурс.

    UPD: А теперь ещё и спавн весь в исходнике поломал... Будет весело.

    • Мастер! 1
    • Спасибо 2

  20. AziatkaVictor Ещё вопрос: если я беру локацию из мода, то мне надо полностью вычистить спавн и делать заново всё или можно им пользоваться. Естественно, квест делается с нуля, речь только про заселение.

    2 часа назад, Крим сказал:

    Думаю, вы как раз займете первое место.

    Действующие моддеры с портфолио из релизнутых модов или недомоддер с 1,5 недоделанными локациями - битва будет легендарной:). Участвую по приколу, на топ-5 (или топ-3, смотря как много будет призовых мест) не надеюсь. Хотя и правда - хз как всё получится.

    • Смех 1