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

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


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

@ARTLantist значит инфопорция info_mut_start_spawn уже выдана. Чтобы не было распавна инфо не должно быть выдано до нужного времени.

@warwer, специально создал новый инфопоршень, который 100% нигде не выдавался. Протестировал и с плюсом, и с минусом в simulation_object_props (т.е. с проверкой на то что выдан, и на то, что не выдан). Всё равно иду к месту смарта и вижу там заспавненных мутантов

@ARTLantist это с новой игры? Если не с новой, то нужно истребить всё на месте смарта и потом следить за распавном.

Если я ничего не путаю, параметр sim_avail = отвечает за условия симуляции - для сквадов это при каких условиях они уходят в симуляцию (шастать по локации), для смартов - это при каких условиях они становятся доступны для симуляции (принимают шастающие сквады). Спавн настраивается в конфигах смартов.

@SoP, а можно поподробнее? Как именно настраивается, чтобы мутанты спавнились только после получения инфопоршня?

@ARTLantist я никогда не делал такого в ЗП, но, похоже, что распвн должен работать через спавн поинт:

spawn_point =  {+zat_b5_actor_with_stalkers} zat_b5_dolg_spawn_point    - пример.

17 часов назад, ARTLantist сказал(а):

чтобы мутанты спавнились только после получения инфопоршня?

Ну ведь есть же примеры в ЗП, открой к примеру логику смарта - "jup_a12_sr_merc_kamp.ltx":
 

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

[logic]
active = sr_idle@wait_for_spawn

[sr_idle@wait_for_spawn]
on_info = {=is_jup_a12_mercs_time +jup_a12_actor_choose_power -pri_a12_stalker_prisoner_free -jup_a12_actor_switched_from_ransom_to_power} sr_idle@spawn, {+pri_a12_stalker_prisoner_free} sr_idle@nil
on_info2 = {-jup_a12_spawn_merc_squad !actor_in_zone(jup_a12_sr_merc_kamp)} %+jup_a12_spawn_merc_squad%
on_info3 = {+jup_a12_spawn_merc_squad =actor_in_zone(jup_a12_sr_merc_kamp)} %-jup_a12_spawn_merc_squad%

[sr_idle@spawn]
on_info = {-jup_a12_spawn_merc_squad !actor_in_zone(jup_a12_sr_merc_kamp)} %+jup_a12_spawn_merc_squad%
on_info2 = {+jup_a12_spawn_merc_squad =actor_in_zone(jup_a12_sr_merc_kamp)} %-jup_a12_spawn_merc_squad =clear_smart_terrain(jup_sim_2) =clear_smart_terrain(jup_sim_11) =clear_smart_terrain(jup_sim_12)%
on_info3 = sr_idle@transfer %=create_squad(jup_a12_merc_stalker_squad:jup_a12_merc) +jup_a12_mercs_spawned%
 
[sr_idle@transfer]
on_info = {+jup_a12_actor_choose_power +jup_a12_actor_is_ready +jup_a12_merc_cover_in_merc_camp} sr_idle@nil %=relocate_item(af_soul:jup_a12_stalker_assaulter:jup_a12_merc_cover)%

[sr_idle@nil]

 

Т.е. при опр. инфо смарт у нас nil, т.е. не активный, при другом можно и сквады спавнить, и функции активировать - да что угодно. Внимательно просмотри оригинальную логику, вникай, как она работает - разберёшься.

 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

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

[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/Тема на AP-PRO

naxac.gif

@naxac Да, спасибо. Я уже разобрался и уже все сделал. Правда у НПС почему то появляется дробовик, хотя в снаряжении только пистолет

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

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

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

не смарт

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

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

 

@Jek@n делай лучше по нормальному как у компания-разработчик (признана нежелательной)*. Оно так работать будет лучше, да и настройка более "гибкой" менее :дубовой: будет.

Изменено пользователем 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
  • Полезно 2

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил.

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

Я отключил объединение всех одинаковых предметов в инвентаре. Как можно реализовать соединение одинаковых предметов (и не только) при переносе одного на другой? Например, у меня не стакаются патроны, из-за того, что я всё это отключил, у меня в инвентаре после обыска двух трупов появляются две пачки по 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 / Начинающий игродел на Unreal Engine / Мимокрокодил.

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

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

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

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

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

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

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

Войти

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

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

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