Cheeshiree 0 Опубликовано 20 Февраля 2021 Поделиться Опубликовано 20 Февраля 2021 Может помочь кто ни будь? Делаю мод и хочу сделать, чтоб нпс совершил суицид как Тремор. Я поковырялся в файлах и нашел его логику. Засунул его логику в логику своего НПС. Но я не много не понял, какую именно анимацию он использует, но и собственно проблема в том, что НПС даже не начинает выполнять эту логику [logic@bb_les_lesnik] active = walker@bb_les suitable = {=check_npc_name(bb_les_lesnik)}true prior = 90 level_spot = quest_npc [walker@bb_les] path_walk = end_walk path_look = end_look combat_ignore_cond = false combat_ignore_keep_when_attacked = false invulnerable = true gather_items_enabled = false help_wounded_enabled = true corpse_detection_enabled = false on_info = {+question_3_end_igor} | remark@suiside [remark@suiside] ;on_game_timer = 20 | remark@suiside_shot anim = bb_les_lesnik_suicide on_signal = anim_end | remark@suiside_shot meet = no_meet [remark@suiside_shot] anim = bb_les_lesnik_suicide on_game_timer = 7 | nil %=kill_npc% meet = no_meet Ссылка на комментарий
naxac 2 447 Опубликовано 21 Февраля 2021 Поделиться Опубликовано 21 Февраля 2021 11 часов назад, Cheeshiree сказал(а): какую именно анимацию он использует Анимация для ремарка указывается тут: anim = bb_les_lesnik_suicide Если нет такой анимации, то и работать ничего не будет. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Cheeshiree 0 Опубликовано 21 Февраля 2021 Поделиться Опубликовано 21 Февраля 2021 @naxac Да, спасибо. Я уже разобрался и уже все сделал. Правда у НПС почему то появляется дробовик, хотя в снаряжении только пистолет Ссылка на комментарий
Jek@n 1 341 Опубликовано 23 Февраля 2021 Поделиться Опубликовано 23 Февраля 2021 (изменено) Заспавнил лагерь НПС-нейтралов(не смарт), у каждого отдельная логика. Подхожу и стреляю в воздух - половина неписей агрится. Как это отключить? Примечание: у каждого из них есть секция [hit], где проверяется on_info = {=hit_by_actor}, однако даже от стрельбы в воздух это условие соблюдается(?) Изменено 23 Февраля 2021 пользователем Jek@n Ссылка на комментарий
WizziGun 376 Опубликовано 23 Февраля 2021 Поделиться Опубликовано 23 Февраля 2021 2 часа назад, Jek@n сказал(а): не смарт не смарт? Правильно понимаю? Они у тебя заспавнены по отдельности через all.spawn и не привязаны к какому либо скваду и смарту? ☭- Пролетарии всех стран, соединяйтесь! Ссылка на комментарий
Jek@n 1 341 Опубликовано 23 Февраля 2021 Поделиться Опубликовано 23 Февраля 2021 Да. Ссылка на комментарий
WizziGun 376 Опубликовано 24 Февраля 2021 Поделиться Опубликовано 24 Февраля 2021 (изменено) @Jek@n делай лучше по нормальному как у GSC. Оно так работать будет лучше, да и настройка более "гибкой" менее :дубовой: будет. Изменено 24 Февраля 2021 пользователем WizziGun 1 ☭- Пролетарии всех стран, соединяйтесь! Ссылка на комментарий
Jek@n 1 341 Опубликовано 27 Февраля 2021 Поделиться Опубликовано 27 Февраля 2021 (изменено) Просто хотелось бы узнать, где в скриптах находится тот самый триггер, который отвечает за агрессию именно по звуку. В ЗП есть коллбек на звуки у НПС, а у самих звуков - соответствующие огг-комменты, задающие их тип(стрельба, природа, прочее). Однако подобная реакция наблюдается далеко не у каждого персонажа. Экспериментально определил, что НПС расценивают такие звуки как хит(триггер в секции [hit] срабатывает), но опять же, не все: к примеру, свободовцы обижаются, а долговцы почему-то нет. Дело в том, что у меня радиус алайфа неограничен и подобные "звуковые обиды" могут вылезать боком, ломая сюжет: где-то в кого-то стрельнул, а на другом конце карты дружественный перс обиделся беспричинно. Изменено 27 Февраля 2021 пользователем Jek@n Ссылка на комментарий
Zander_driver 10 334 Опубликовано 27 Февраля 2021 Поделиться Опубликовано 27 Февраля 2021 @Jek@n в xr_motivator.script function motivator_binder:hit_callback(obj, amount, local_direction, who, bone_index) --В самом начале хит-колбека, добавь такую проверку: if (amount < 0.0001) then return end Просто некоторые звуки (те же выстрелы), могут вызывать самопроизвольное срабатывание хит-колбека, с нулевым уроном. Это известный баг X-Ray, случается и на ТЧ и на ЗП, насколько я понимаю. Проверка позволяет такие хиты отсеять, и скрипты не будут обрабатывать их как хиты. 1 3 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
ARTLantist 14 Опубликовано 3 Марта 2021 Поделиться Опубликовано 3 Марта 2021 (изменено) Я отключил объединение всех одинаковых предметов в инвентаре. Как можно реализовать соединение одинаковых предметов (и не только) при переносе одного на другой? Например, у меня не стакаются патроны, из-за того, что я всё это отключил, у меня в инвентаре после обыска двух трупов появляются две пачки по 2 и 5 дроби соответственно. Я хочу их объединить в одну на 7 патронов - нажимаю на пачку на 2 патрона, перетягиваю её на пачку на 5 патронов (как оружие в слот, или прицел на оружие) и они объединяются (это нужно в идеале). Также я хочу сделать для некоторых предметов, например, у меня таблетки на несколько использований, и когда у меня в инвентаре имеется две пачки таблеток, одна на 1 использование, другая на 3 (максимум - 5), я могу перенести одну на другую и появится одна пачка таблеток на 4 использования. Как реализовать данную вещь? Изменено 3 Марта 2021 пользователем ARTLantist Ссылка на комментарий
Zander_driver 10 334 Опубликовано 3 Марта 2021 Поделиться Опубликовано 3 Марта 2021 @ARTLantist Замысловатую вещь ты затеял) Это надо каждой иконке, помнить сколько предметов под ней объединено, и помнить ну например, ID предметов, которые под нее записаны. Надо написать под это дело некую запоминающую структуру, т.к. изначально такой нет в движке. Иконки ничего не помнят, и при каждом открытии инвентаря, формируются заново. Т.е. тебе мало будет сделать объединение двух итемов по перетаскиванию - надо будет, где-нибудь это запоминать, чтобы не приходилось при следующем открывании инвентаря, перетаскивать опять. Мороки много, а выхлоп сомнительный, на мой взгляд. У себя я сделал проще - объединение итемов под одной иконкой, до некоторого их количества. А размер стека указывается в конфиге итема. Выглядит примерно так: /*** UICellItems.h ***/ u8 max_stack; virtual void SetMaxStack(u8 x) { max_stack = x; }; virtual u8 GetMaxStack() const { return max_stack; } virtual u8 GetStack() const { return 1 + m_childs.size(); } /*** UICellItems.cpp ***/ bool CUICellItem::EqualTo(CUICellItem* itm) { if ((itm->GetStack() + GetStack()) > GetMaxStack()) return false; return (m_grid_size.x==itm->GetGridSize().x) && (m_grid_size.y==itm->GetGridSize().y); } Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
ARTLantist 14 Опубликовано 3 Марта 2021 Поделиться Опубликовано 3 Марта 2021 (изменено) 5 минут назад, Zander_driver сказал(а): У себя я сделал проще - объединение итемов под одной иконкой, до некоторого их количества. А размер стека указывается в конфиге итема. Выглядит примерно так: /*** UICellItems.h ***/ u8 max_stack; virtual void SetMaxStack(u8 x) { max_stack = x; }; virtual u8 GetMaxStack() const { return max_stack; } virtual u8 GetStack() const { return 1 + m_childs.size(); } /*** UICellItems.cpp ***/ bool CUICellItem::EqualTo(CUICellItem* itm) { if ((itm->GetStack() + GetStack()) > GetMaxStack()) return false; return (m_grid_size.x==itm->GetGridSize().x) && (m_grid_size.y==itm->GetGridSize().y); } /*** UICellItems.h ***/ u8 max_stack; virtual void SetMaxStack(u8 x) { max_stack = x; }; virtual u8 GetMaxStack() const { return max_stack; } virtual u8 GetStack() const { return 1 + m_childs.size(); } /*** UICellItems.cpp ***/ bool CUICellItem::EqualTo(CUICellItem* itm) { if ((itm->GetStack() + GetStack()) > GetMaxStack()) return false; return (m_grid_size.x==itm->GetGridSize().x) && (m_grid_size.y==itm->GetGridSize().y); } я так понимаю ты u8 max_stack устанавливаешь ссылкой на конфиг, где указано максимальное количество вещей в стаке, да? Изменено 3 Марта 2021 пользователем ARTLantist Ссылка на комментарий
Zander_driver 10 334 Опубликовано 3 Марта 2021 Поделиться Опубликовано 3 Марта 2021 Ну да) При инициализации иконки, она читает этот параметр из секции конфига того предмета, на который создается. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
ARTLantist 14 Опубликовано 6 Марта 2021 Поделиться Опубликовано 6 Марта 2021 (изменено) как можно убрать постоянное обновление ассортимента товаров у торговцев после перезагрузки игры и сделать обновление его, к примеру, один раз в 2 дня? Изменено 6 Марта 2021 пользователем ARTLantist Ссылка на комментарий
WinCap 316 Опубликовано 7 Марта 2021 Поделиться Опубликовано 7 Марта 2021 (изменено) @ARTLantist, нужно переписать функцию "trade_manager.update(npc)". Изменено 7 Марта 2021 пользователем WinCap S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Ссылка на комментарий
Jekyll 92 Опубликовано 17 Марта 2021 Поделиться Опубликовано 17 Марта 2021 Здравствуйте! Заспавнил труп сталкера таким способом: alife():create("new_stalker",[координаты]):on_death(). Как теперь его отследить? И как получить его ID? Проверки по имени или секции не срабатывают. New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор Русификатор для игры Vendetta: Curse of Raven's Cry Ссылка на комментарий
Norman Eisenherz 316 Опубликовано 18 Марта 2021 Поделиться Опубликовано 18 Марта 2021 @Jekyll Вот это не сгодится? local spawn = alife():create(…) level.client_spawn_manager():add(spawn.id, -1, fx) function fx(id, obj) … end 1 1 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
AndreySol 215 Опубликовано 18 Марта 2021 Поделиться Опубликовано 18 Марта 2021 17.03.2021 в 13:36, Jekyll сказал(а): И как получить его ID? local s_obj = alife():create("new_stalker".....) if s_obj then s_obj.id 1 2 Ссылка на комментарий
ARTLantist 14 Опубликовано 30 Марта 2021 Поделиться Опубликовано 30 Марта 2021 Какую аналогию заполнения инвентаря дефолтных нпс можно придумать на замену прописыванию их в файлах character_drugs.xml, character_food.xml, character_item.xml, которые потом инклудятся в character_desc_general для этих нпс? Фигня в том, что там есть какой-то предел количества предметов, выйдя за который, игра уходит в вечную загрузку (ну лично у меня). Самый лучший вариант через скрипты, я думаю... Но как в таком случае отловить момент спавна нпс, чтобы заполнить его инвентарь? Ссылка на комментарий
Zander_driver 10 334 Опубликовано 30 Марта 2021 Поделиться Опубликовано 30 Марта 2021 @ARTLantist У серверных объектов НПС, есть свой биндер, расположен в файле se_stalker.script И там среди прочего, есть такой метод function se_stalker:on_spawn() Который как раз и вызывается после появления в игре, нового серверного объекта нпс. 1 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти