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

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

 
 
35 минут назад, Prostomod сказал:

use_secondary_hit = true, ну и параметр secondary_hit_power.

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

37 минут назад, Prostomod сказал:

Постой, крышка - это партикл или как-то засунутая динамика в аномалию?

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


Группа мода в VK
Мод делался и тестировался на железе
i5-11400, 32Гб ОЗУ, Radeon RX580  Разрешение 2560 х 1440.  ВСЕ на максималке

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


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

N42, способ не помог. Скорее всего я просто не разобрался что делать дальше. Но сделал через логику как у медика из Припяти - работает. Спасибо, в любом случае

[meet@no_talk_1]
use = false
snd_on_use = a1_ohr_no_talk_1

[remark@no_talk_1]
anim = guard
target = story | actor
meet = meet@no_talk_1
on_signal = sound_end | remark@no_talk_2

 


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

У рестриктора может быть одна активная схема? Если да, то можно ли переключаться между схемами, чтобы не плодить ректрикторы?

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

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


Ссылка на сообщение
Поделиться на другие сайты
 
24 минуты назад, justrainy сказал:

У рестриктора может быть одна активная схема? Если да, то можно ли переключаться между схемами, чтобы не плодить ректрикторы?

Да, рестриктор может иметь лишь одну активную схему.
Для переключения просто используй on_info, on_timer, on_game_timer, on_actor_inside и т.д. события, через которые можно переключиться на другие схемы.

Например:

on_game_timer = 30 | {+gen_oso_researches_react_on_guard} sr_idle@psi_blow %=send_message(gen_oso_researches_8)%

Где:

  • on_game_timer = 30 - это 30 секунд игрового времени, после которого начнёт выполняться триггер
  • {+gen_oso_researches_react_on_guard} условие, при котором будет выполняться (в данном случае - наличие поршня)
  • sr_idle@psi_blow - имя следующей секции
  • %=send_message(gen_oso_researches_8)% - действия, которые надо выполнить при активации (в данном случае - вызвать функцию)

Тут (http://stalkerin.gameru.net/wiki/index.php?title=Настройка_логики._Часть_3) можно подробнее про триггеры прочитать (да и в целом полезно про логику).

Изменено пользователем Prostomod
  • Лайк 1

Мод в разработке - X-7: Эпицентр

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


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

Prostomod, еще подскажите? Никак не пойму: target = path | patrol_path, point_id. 
point_id - что это за номер? Это же не флаг, типа wp00?

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


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

justrainy Когда создаёшь путь из вейпоинтов в СДК, то наверняка заметил там 2 режима: way mode и way point. Первый ставит пути, а второй - точки пути. Вот как раз point_id - индекс точки на пути (я так понял, это не флаг или имя, а порядок, в котором они установлены были в СДК), всегда целое число, меньшее чем количество точек на пути.

Например, есть у тебя путь из 3 точек. Тогда в target = path | patrol_path, point_id запишешь так: target = path | <имя пути>, <номер точки на пути из диапазона [0-2]>

  • Жму руку 1

Мод в разработке - X-7: Эпицентр

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


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

Завалю вопросами данный форум сегодня. Как в нужной секции логики НПС прервать действующую анимацию при переходе на следующую секцию? 

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


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

justrainy Мне подсказали такой способ несколько месяцев назад, работает безотказно: 

 

  • Жму руку 1

Мод в разработке - X-7: Эпицентр

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


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

Prostomod, а у меня почему-то вылетает

[error] Description   : e:\s.t.a.l.k.e.r.cop\gamedata\scripts\xr_effects.script:9: attempt to call global 'reset_animation' (a nil value)

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


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

Здравствуйте, многоуважаемый мододелы. Хотел я, значит, сделать, чтобы после определённого инфопоршня НПС из стартовой позиции перешёл на вторую, и когда перешёл сказал фразу. Сделать-то сделал, но НПС, вместо того, чтобы перейти на новый вэйпойнт и сказать фразу, сперва говорит фразу и только потом переходит на нужный вэйпойнт. Второй позиции я прописал on_info на запуск фразы и, вероятно, из-за этого такое происходит, но меняю я инфо walker и remark, который и запускает фразу, так в игре он идёт на новую позицию, но не говорит фразу. Кто знает, почему? 

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


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

B0lt увидеть бы логику всего этого добра

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


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

justrainy А попробуй функцию reset_npc переместить в самый конец xr_effects.script.

 

  • Лайк 1

Мод в разработке - X-7: Эпицентр

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


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

justrainy проще написать свою функцию на основе той
скопируй и вставь в самый конец xr_effects.script

Спойлер

function reset_npc_animation(actor, npc, p)
	local _npc
	if (p and p[1] ~= nil) then 
		_npc = get_story_object(p[1])
	elseif (npc ~= nil) then
		_npc = npc
	else
		return
	end
	local state_mgr = db.storage[_npc:id()].state_mgr
	if state_mgr == nil then
		return
	end
	local planner = _npc:motivation_action_manager()
	state_mgr.animation:set_state(nil, true)
	state_mgr.animation:set_control()
	state_mgr.animstate:set_state(nil, true)
	state_mgr.animstate:set_control()
	state_mgr:set_state("idle", nil, nil, nil, {fast_set = true})
	state_mgr:update()
	state_mgr:update()
	state_mgr:update()
	state_mgr:update()
	state_mgr:update()
	state_mgr:update()
	state_mgr:update()
	_npc:set_body_state(move.standing)
	_npc:set_mental_state(anim.free)
end

 

вызывать так:
=reset_npc_animation(стори_айди_нужного_нпс) если вызываешь эту функцию из логики нпс у которого и нужно сбросить анимку, в скобках можно ничего не указывать

Изменено пользователем Emmis
  • Лайк 1

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


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

Prostomod, ага, заработало. Примного!

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


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

Теперь мой черёд вопросы задавать: как-нибудь можно проверить, что спавн-объект находится внутри рестриктора? У меня есть комната с большим количеством источников освещения, и вручную каждый из них прописывать в скрипт я просто устану. Хотелось бы просто расставить лампы, накрыть рестриктором и через скрипт выключить всё, что внутри (ну или с проверками определёнными).

Да, могу просто получить координаты центра рестриктора и сверять расстояние, но не подходит такое т.к.:

  • легко подходит только для сферических рестрикторов
  • если рестриктор сложен (состоит из нескольких шейпов), то придётся всё-равно много вычислений делать
  • хотелось бы избежать изменение скрипта в случае, если мне понадобится изменять размер рестриктора
Изменено пользователем Prostomod

Мод в разработке - X-7: Эпицентр

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


Ссылка на сообщение
Поделиться на другие сайты
 
36 минут назад, Emmis сказал:

B0lt увидеть бы логику всего этого добра

Как-то так

Спойлер

[walker@pri_p_leader]
path_walk = leader_walk
path_look = leader_look
meet = meet@default
on_info = {+sniper_kill_stop} walker@pri_p_leader_training
combat_ignore_cond = false
combat_ignore_keep_when_attacked = false
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false

[meet@default]
close_anim         = nil
close_victim     = nil
far_anim         = nil
far_victim         = nil
close_distance  = 2
far_distance     = 0
close_snd_distance = 2
use =  true
allow_break = false
trade_enable = false

[walker@pri_p_leader_training]
path_walk = leader_training_walk
path_look = leader_training_look
on_info = {-pri_greet_end !is_playing_sound} remark@pri_p_leader_training
meet = meet@default
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false

[remark@pri_p_leader_training]
anim = guard
on_game_timer = 250 | {-pri_sd !is_playing_sound} %=play_sound(leader_start_phrase) +pri_sd%
on_signal = sound_end | walker@pri_p_leader_training %+pri_greet_end%
meet = no_meet
corpse_detection_enabled = false

 

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


Ссылка на сообщение
Поделиться на другие сайты
 
8 минут назад, Prostomod сказал:

Теперь мой черёд вопросы задавать: как-нибудь можно проверить, что спавн-объект находится внутри рестриктора?

НПС или моб - да
Лампочки - нет
Назначаешь лампочкам в рестрикторе стори айди и turn_off\turn_on
 

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


Ссылка на сообщение
Поделиться на другие сайты
 
1 час назад, Prostomod сказал:

что спавн-объект находится внутри рестриктора?

Файл system.ltx

Секция [script_zone]

Биндер xr_zones.script

Любой объект попавший внутрь рестриктора фиксирует колбек, нужно только его отсортировать либо по секции либо по клсиду  и поместить в таблицу.

А дальше делай с ним что хошь!

  • Спасибо 1

Терпение... И все получится.

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


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

makdm Практически сработало, только я почему-то не могу получить именно источники света.

Суть в чём: script_zone работает, я получаю список всех объектов внутри неё в виде таблицы с их id, но при этом при отсеивании лишних объектов я не могу получить источники света т.к. они тоже отсеиваются. А если попытаться костылями их всё-таки получить, то происходит вылет, который говорил что у объекта нет метода get_hanging_lamp().

Скрипт такой:

Спойлер

 


function test_lamps_off(actor, npc, p)
	local content = xr_zones.get_content("labb_boss_polter_light_restr") -- получить все объекты внутри скрипт зоны - работает ок
	printf("hanging_lamp clsid = [%d]", clsid.hanging_lamp) -- выводит 108
	printf("script_phys clsid = [%d]", clsid.script_phys) -- выводит 111
	printf("obj_phys_destroyable clsid = [%d]", clsid.obj_phys_destroyable) -- выводит 113
	printf("obj_physic clsid = [%d]", clsid.obj_physic) -- выводит 110
	for k,v in pairs(content) do
		local obj = alife():object(k)
		printf("obj = [%s], clsid = [%d]", obj:name(), obj:clsid()) -- среди имён есть и нужные мне лампы, но их класс ид вообще не совпадает с clsid.hanging_lamp (выводит 139)
		if v and obj:clsid() == clsid.hanging_lamp then -- естественно, ничего не проходит
			obj:get_hanging_lamp():turn_off()
		end
	end
end

Вывод такой:

Спойлер

hanging_lamp clsid = [108]
script_phys clsid = [111]
obj_phys_destroyable clsid = [113]
obj_physic clsid = [110]
obj = [labb_fireball_electric_zone_01], clsid = [220]
obj = [lights_white_8m_glass_0002_07], clsid = [139]
obj = [light_alarm_glass], clsid = [139]
obj = [labb_boss_polter_zone_psychic], clsid = [219]
obj = [lights_white_8m_glass_0002_02_00], clsid = [139]
obj = [meshes\brkbl#18.ogf], clsid = [105]
obj = [meshes\brkbl#22.ogf], clsid = [105]
obj = [meshes\brkbl#10.ogf], clsid = [105]
obj = [lights_white_8m_glass_0002_10], clsid = [139]
obj = [light_alarm_glass_06], clsid = [139]
obj = [light_alarm_glass_00], clsid = [139]
obj = [lights_white_8m_glass_0002_06], clsid = [139]
obj = [lights_white_8m_glass_0002_03_00], clsid = [139]
obj = [light_alarm_glass_04], clsid = [139]
obj = [light_alarm_glass_03], clsid = [139]
obj = [lights_white_8m_glass_0002_06_00], clsid = [139]
obj = [light_galogen_1_glass_0001_01], clsid = [139]
obj = [light_alarm_glass_05], clsid = [139]
obj = [lights_white_8m_glass_0002_03_00_00], clsid = [139]
obj = [labb_fireball_zone_00], clsid = [220]
obj = [lights_white_8m_glass_0002_00_00], clsid = [139]
obj = [lights_white_8m_glass_0002_00], clsid = [139]
obj = [lights_white_8m_glass_0002_00_00_00], clsid = [139]
obj = [light_alarm_glass_07], clsid = [139]
obj = [light_alarm_glass_01], clsid = [139]
obj = [labb_fireball_zone_01], clsid = [220]
obj = [meshes\brkbl#8.ogf], clsid = [105]
obj = [meshes\brkbl#7.ogf], clsid = [105]
obj = [lights_white_8m_glass_0002_02_00_00], clsid = [139]
obj = [lights_white_8m_glass_0002_09], clsid = [139]
obj = [meshes\brkbl#13.ogf], clsid = [105]
obj = [lights_white_8m_glass_0002_03], clsid = [139]
obj = [meshes\brkbl#12.ogf], clsid = [105]
obj = [labb_fireball_electric_zone_00], clsid = [220]
obj = [meshes\brkbl#11.ogf], clsid = [105]
obj = [meshes\brkbl#15.ogf], clsid = [105]
obj = [meshes\brkbl#17.ogf], clsid = [105]
obj = [meshes\brkbl#25.ogf], clsid = [105]
obj = [light_galogen_1_glass_0001], clsid = [139]
obj = [meshes\brkbl#9.ogf], clsid = [105]
obj = [lights_white_8m_glass_0002_07_00], clsid = [139]
obj = [light_alarm_glass_02], clsid = [139]
obj = [meshes\brkbl#23.ogf], clsid = [105]
obj = [meshes\brkbl#14.ogf], clsid = [105]
obj = [meshes\brkbl#16.ogf], clsid = [105]
obj = [meshes\brkbl#24.ogf], clsid = [105]
obj = [meshes\brkbl#21.ogf], clsid = [105]
obj = [lights_white_8m_glass_0002_02], clsid = [139]
obj = [meshes\brkbl#19.ogf], clsid = [105]
obj = [light_galogen_1_glass_0001_00], clsid = [139]
obj = [meshes\brkbl#20.ogf], clsid = [105]

 Настройки лампы такие:

Спойлер

ecb7679eada7143ed2539f25ca606967.png

Открыл в оригинальном путепроводе лампу, которая выключается - настройки такие-же (разве что story_id добавлено - и всё):

Спойлер

7d75d06e4bc25bba0282a5f9a573c5fc.png

В чём может заключаться проблема?

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

Мод в разработке - X-7: Эпицентр

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


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

Prostomod, метод get_hanging_lamp() применим к объектам класса CGameObject, а вы его требуете от объекта другого класса. Сперва получите CGameObject из obj посредством, например,

some_game_object = level.object_by_id(obj:id())

после чего можно вызывать some_game_object:get_hanging_lamp() дабы получить специфичный hanging_lamp со свойствами лампы и методами on/off для неё.

  • Спасибо 1

Я логи в баню удалил, а вот за за рейдеры – не помню!

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


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

BarmaGlot Спасибо, получилось.

Но проблема с фильтрацией осталась. Я хоть и получил экспериментальным путём нужный clsid, но мб можно это как-то исправить, чтобы вместо "какого-то" числа писать просто clsid.hanging_lamp?

  • Жму руку 1

Мод в разработке - X-7: Эпицентр

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


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

Prostomod, тут не понятно, что требуется. Предположу, что можно "фильтровать" как раз получением объекта, возвращаемого методом get_hanging_lamp: если объект есть, то это лампа, если нет, то это не лампа.


Я логи в баню удалил, а вот за за рейдеры – не помню!

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


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

Я может лезу не в тему про лампы, но они запрещены кажется в серверэтитиес движок для R3-R4.
Возможно для сингла скриптами и вызывается, а для сетевого выделенного сервера там точно блок.

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


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

Как-то так

  Показать контент

[walker@pri_p_leader]
path_walk = leader_walk
path_look = leader_look
meet = meet@default
on_info = {+sniper_kill_stop} walker@pri_p_leader_training
combat_ignore_cond = false
combat_ignore_keep_when_attacked = false
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false

[meet@default]
close_anim         = nil
close_victim     = nil
far_anim         = nil
far_victim         = nil
close_distance  = 2
far_distance     = 0
close_snd_distance = 2
use =  true
allow_break = false
trade_enable = false

[walker@pri_p_leader_training]
path_walk = leader_training_walk
path_look = leader_training_look
on_info = {-pri_greet_end !is_playing_sound} remark@pri_p_leader_training
meet = meet@default
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false

[remark@pri_p_leader_training]
anim = guard
on_game_timer = 250 | {-pri_sd !is_playing_sound} %=play_sound(leader_start_phrase) +pri_sd%
on_signal = sound_end | walker@pri_p_leader_training %+pri_greet_end%
meet = no_meet
corpse_detection_enabled = false

 

Впрочем, спасибо. Уже и сам разобрался. 


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

Зато появился другой. НПС не говорит свой диалог. Можно подумать, что из-за неправильно настроенных инфопоршней в DialogEditor, но если в character_desc_ указать не <start_dialog>, а <actor_dailog>, то есть со стороны актёра, всё прекрасно заработает, причём до этого у НПС уже стоял начальный диалог. У них что, ограниченное количество диалогов, которые они начинают? Я просто посмотрел в других character_desc_, и там вроде у большинства НПС 1-2 диалогов с их стороны. 


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

Впрочем, и сам разобрался. 

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


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

Всем привет! Ситуация, реализовано 20 слотов на поясе, есть ли возможность раскидать эти слоты, как мне хочется и назначить конкретные предметы для них?

Пример: Слот 1 - артефакты

                 Слот 2 - Прикладной модуль... ну и так далее.

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


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

Всем привет! Ситуация, реализовано 20 слотов на поясе, есть ли возможность раскидать эти слоты, как мне хочется и назначить конкретные предметы для них?

Пример: Слот 1 - артефакты

                 Слот 2 - Прикладной модуль... ну и так далее.

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

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

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

    Ни одного зарегистрированного пользователя не просматривает данную страницу