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

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


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

Может помочь кто ни будь? Делаю мод и хочу сделать, чтоб нпс совершил суицид как Тремор. Я поковырялся в файлах и нашел его логику. Засунул его логику в логику своего НПС. Но я не много не понял, какую именно анимацию он использует, но и собственно проблема в том, что НПС даже не начинает выполнять эту логику

[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

 

Ссылка на комментарий
11 часов назад, Cheeshiree сказал(а):

какую именно анимацию он использует

Анимация для ремарка указывается тут:

anim = bb_les_lesnik_suicide

Если нет такой анимации, то и работать ничего не будет.

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Ссылка на комментарий

Заспавнил лагерь НПС-нейтралов(не смарт), у каждого отдельная логика. Подхожу и стреляю в воздух - половина неписей агрится. Как это отключить?

Примечание: у каждого из них есть секция [hit], где проверяется on_info = {=hit_by_actor}, однако даже от стрельбы в воздух это условие соблюдается(?)

Изменено пользователем Jek@n
Ссылка на комментарий
2 часа назад, Jek@n сказал(а):

не смарт

не смарт? Правильно понимаю? Они у тебя заспавнены по отдельности через all.spawn и не привязаны к какому либо скваду и смарту?

- Пролетарии всех стран, соединяйтесь!

 

Ссылка на комментарий

@Jek@n делай лучше по нормальному как у GSC. Оно так работать будет лучше, да и настройка более "гибкой" менее :дубовой: будет.

Изменено пользователем WizziGun
  • Согласен 1

- Пролетарии всех стран, соединяйтесь!

 

Ссылка на комментарий

Просто хотелось бы узнать, где в скриптах находится тот самый триггер, который отвечает за агрессию именно по звуку. В ЗП есть коллбек на звуки у НПС, а у самих звуков - соответствующие огг-комменты, задающие их тип(стрельба, природа, прочее). Однако подобная реакция наблюдается далеко не у каждого персонажа. Экспериментально определил, что НПС расценивают такие звуки как хит(триггер в секции [hit] срабатывает), но опять же, не все: к примеру, свободовцы обижаются, а долговцы почему-то нет. Дело в том, что у меня радиус алайфа неограничен и подобные "звуковые обиды" могут вылезать боком, ломая сюжет: где-то в кого-то стрельнул, а на другом конце карты дружественный перс обиделся беспричинно.

Изменено пользователем Jek@n
Ссылка на комментарий

@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.

Ссылка на комментарий

Я отключил объединение всех одинаковых предметов в инвентаре. Как можно реализовать соединение одинаковых предметов (и не только) при переносе одного на другой? Например, у меня не стакаются патроны, из-за того, что я всё это отключил, у меня в инвентаре после обыска двух трупов появляются две пачки по 2 и 5 дроби соответственно. Я хочу их объединить в одну на 7 патронов - нажимаю на пачку на 2 патрона, перетягиваю её на пачку на 5 патронов (как оружие в слот, или прицел на оружие) и они объединяются (это нужно в идеале). Также я хочу сделать для некоторых предметов, например, у меня таблетки на несколько использований, и когда у меня в инвентаре имеется две пачки таблеток, одна на 1 использование, другая на 3 (максимум - 5), я могу перенести одну на другую и появится одна пачка таблеток на 4 использования. Как реализовать данную вещь?

Изменено пользователем ARTLantist
Ссылка на комментарий

@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.

Ссылка на комментарий
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 устанавливаешь ссылкой на конфиг, где указано максимальное количество вещей в стаке, да?

Изменено пользователем ARTLantist
Ссылка на комментарий

Ну да)

При инициализации иконки, она читает этот параметр из секции конфига того предмета, на который создается.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

Ссылка на комментарий

как можно убрать постоянное обновление ассортимента товаров у торговцев после перезагрузки игры и сделать обновление его, к примеру, один раз в 2 дня?

Изменено пользователем ARTLantist
Ссылка на комментарий

Здравствуйте!

Заспавнил труп сталкера таким способом: alife():create("new_stalker",[координаты]):on_death(). Как теперь его отследить? И как получить его ID? Проверки по имени или секции не срабатывают.

New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор

Русификатор для игры Vendetta: Curse of Raven's Cry

Ссылка на комментарий

Какую аналогию заполнения инвентаря дефолтных нпс можно придумать на замену прописыванию их в файлах character_drugs.xml, character_food.xml, character_item.xml, которые потом инклудятся в character_desc_general для этих нпс? Фигня в том, что там есть какой-то предел количества предметов, выйдя за который, игра уходит в вечную загрузку (ну лично у меня). Самый лучший вариант через скрипты, я думаю... Но как в таком случае отловить момент спавна нпс, чтобы заполнить его инвентарь?

Ссылка на комментарий

@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.

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

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

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