Правила сайта FAQ Мини-чат
Для добавления необходима авторизация!
29.04.2024, Понедельник, 15:50


  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: romale  
Форум » S.T.A.L.K.E.R. - Моддинг » Разбираем S.T.A.L.K.E.R. » Поиск по теме "Разборочная комната ТЧ"
Разборочная комната ТЧ
Сообщение #21
Цитата (butrikA)
Как сделать его бессмертным?

Раз уж зашёл вопрос о бессмертии НПС, то расскажу, как сделать в ТЧ НПС бессмертным или смертным по какому-то условию. Возможно это уже где-то и кем-то писалось, но раз вопрос задан, значит не все видели.

Если унаследовать секцию Сахарова, то НПС будет бессмертным на протяжении всей игры. А если У вас в моде, например, в конце игры появится желание выдать задание на уничтожение этого персонажа? Что будете делать?
Или наоборот ( как это частенько бывает в ТЧ) у Вас в середине игры задание на уничтожение НПС, а он уже погиб либо в аномалии, либо от мутантов, либо от вражеского НПС.
Т.е. у модмейкера всегда должна быть возможность в любое время сделать НПС неуязвимым ( бессмертным) и наоборот.
В ЗП есть движковая функция, которая переключает неуязвимость НПС. В ТЧ такой функции нет. Но можно попробовать это сделать скриптами.


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

Сообщение отредактировал makdm - Среда, 28.08.2013, 14:35


Уважение: 999
Награды: 31
Облучение: 0%
Сообщение #22
Цитата (butrikA)
сделать нейтрала другом через функцию не сложно, но врага (причем целую группировку), чтобы был не агрессивным

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



Кому дополнить и поправить всегда найдутся, главное - "размочить ситуацию с молчанием на вопрос". :)

ЗЫ Опаньки. Уже Андрей ответил, но я чуть по другому. :)

Сообщение отредактировал Korpus - Понедельник, 16.09.2013, 15:35


Уважение: 169
Награды: 31
Облучение: 0%
Сообщение #23
Всем, привет!
Цитата (Giznyhvatit)
раз нпс нельзя удалить при разговоре с ним самим

Это почему Вы так решили? Попробуйте вот так.



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

Сообщение отредактировал makdm - Суббота, 28.09.2013, 07:51


Уважение: 999
Награды: 31
Облучение: 0%
Сообщение #24
--мой диалог--

<phrase id="33333">
<text>otdai_33333</text>
<give_info>otdai_info_done</give_info>
<action>moi_dialog.otdai</action>
<action>end_dialog</action> -------------!!!!
<action>dialogs.break_dialog</action>
</phrase>
</phrase_list>
</dialog>
здесь нужно выдавать инфопоршень а не вызывать функцию.
пробуй так:

--мой диалог--

<phrase id="33333">
<text>otdai_33333</text>
<give_info>otdai_info_done</give_info>
<action>moi_dialog.otdai</action>
<give_info>end_dialog</give_info>
<action>dialogs.break_dialog</action>
</phrase>
</phrase_list>
</dialog>
Веселый Роджер
Уважение: 936
Награды: 112
Сообщение #25
Giznyhvatit, сделайте проще, чтобы не искать объект путём перебора.

В логике НПС пишите

on_info = {-поршень} %+поршень =hit_my_npc%

А в файл xr_effects.script в конец файла пишите свою функцию

function hit_my_npc(actor, npc)
local h = hit()
h.power = 0
h.direction = npc:direction()
h.bone = "bip01_spine"
h.draftsman = npc
h.impulse = 0
h.type = hit.wound
npc:hit(h)
end

Только подберите правильно impulse и power
Вот и всех делов то.


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

Уважение: 999
Награды: 31
Облучение: 0%
Сообщение #26
Цитата Giznyhvatit ()
правильно собрано? имеется в виду логика нпс

С точки зрения выдачи инфопорции и вызова функции - всё правильно.

Вам просто нужно подобрать h.power

Начнём всё сначала

У вас после окончания даилога спавнится НПС. Вы хотите, чтобы он заспавнился раненым.
Тогда поршень окончания диалога не должен быть в логике НПС.
Потому что строка on_info = {-Osoznay2} %+Osoznay2 =hit_my_npc%
переводится так: Если поршень не выдан, то выдать поршень и исполнить функцию
А у вас поршень выдан в диалоге, поэтому функция не выполняется
Пропишите в логике другой поршень. Например

on_info = {-Osoznay3} %+Osoznay3 =hit_my_npc%

А затем подбирайте значение h.power

Я бы сразу дал 50 и посмотрел. Если помрёт, то снижайте на 10 пока не найдёте значение, когда он будет ранен.

Кстати, чем вас не устраивает раненый в схеме remark, я так и не понял, честно говоря


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

Сообщение отредактировал makdm - Воскресенье, 10.11.2013, 15:53


Уважение: 999
Награды: 31
Облучение: 0%
Сообщение #27
Giznyhvatit, я Вам пишу готовую логику, которая работает. Без всяких хитов, костей и т.д.
Делается симуляция раненого бойца. На самом деле он здоров, как Бык, но будет стонать и ныть, что всё у него плохо.

Подходите к нему, разговариваете, даёте аптечку, ставите укол и делаете массаж ( по выбору ). :D
После диалога он встаёт на ноги.

Логика



Пропишите ему в стартовый диалог dolg_dialog, сделайте с ним диалог и в конце диалога выдадите поршень dolg_dialog_end.
Соответственно поршень зарегистрируйте.


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

Уважение: 999
Награды: 31
Облучение: 0%
Сообщение #28
Giznyhvatit, Поставь в схеме проверку на наличие поршня и при его наличии переводи на схему sr_sound. А в диалоге выдавай этот поршень.

Уважение: 650
Награды: 97
Облучение: 0%
Сообщение #29
Giznyhvatit, по последнему спойлеру: собственно вам нужен в логике сам диалог. На основе вашеей логики:

Когда в диалоге с НПС отработаете эту часть:
Код
<text>Osoznay3_8</text>
<action>****_Dialog.cherep</action>

сработает Ваш поршень и запустит функцию.
Если не прав, то исправьте...

Сообщение отредактировал alen-fantom - Суббота, 16.11.2013, 12:13


Уважение: 250
Награды: 32
Облучение: 0%
Сообщение #30
Цитата Giznyhvatit ()
Ребята я же обьяснил что по сюжету важен запуск из диалога

А я что, трогал ваши диалоги?
Поршень и выдаётся из диалога. Рестриктор его только обрабатывает.
Цитата Giznyhvatit ()
Запуск работает, проблема с проигрыванием звука после загрузки сохранения, он накладывается по верх вновь включенного...

В скриптах, что я вам написал - такой проблемы нет.


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

Уважение: 999
Награды: 31
Облучение: 0%
Сообщение #31
Egeny, найти нужный поршень или функцию, которые засчитывают квест и реализовать их известными способами. Всего делов-то. :)
ЗЫ Солянки нет под руками. Мож, кто откликнется.

Уважение: 169
Награды: 31
Облучение: 0%
Сообщение #32
Egeny, если по Шныре, то нужный Вам поршень - "kalinin_zadan_done"
Сообщение отредактировал alen-fantom - Пятница, 27.12.2013, 17:54


Уважение: 250
Награды: 32
Облучение: 0%
Сообщение #33
Цитата slavastii ()
Не могу понять , что хочется сделать и с какой игрой , или модом

istomin хочет сделать античит, игра наверное ж Сталкер, а мод в принципе без разницы.
Как уже сказано было выше, универсального "рецепта" нет, но информацию к размышлению, можно предоставить, например:
проверяем параметр актора

Код
if ( ltx:r_float("actor_condition","health_hit_part") ~= 1.0 ) then

"перевод" - "если в файле actor параметр health_hit_part не равен 1.0 - то..." что сделать, и куда это "спрятать" зависит от фантазии...
или еще момент, например при получении нужного итема(т.е. при обыске именно нужного тайника), выдается инфопоршень, а мы не хотим, чтоб игрок не найдя тайник, тупо заспавнил этот итем, то можно сделать проверку на наличие нужного инфопоршня и итема:
"если у ГГ есть итем, но нет инфопоршня, то..."
Код
if db.actor:object("итем") ~= nil and (not has_alife_info("инфопоршень")) then

можно проверку связать с логикой, как это сделано в "Альянсе"...
В общем нужно немного фантазии, и знание скриптов, логики....
Веселый Роджер
Уважение: 936
Награды: 112
Сообщение #34
Цитата Эсминец ()
Есть надобность на АТП удалить Седого с его вертолётом

Пробуй поршень запустить, чтоб улетел.
Как я писал тебе здесь: http://stalker-gamers.ru/forum/23-520-42197-16-1389251109
Вставить это: db.actor:give_info_portion("atp_vert_vzlet")
Вроде должно получиться.


Вы ленивы, следовательно вы изобретательны.. (Граф Де Гиш)

Уважение: 563
Награды: 102
Облучение: 0%
Сообщение #35
Роман опередил... И он прав, т.к. в НС есть уже "родные функции" Архары:
Код
--' убираем Седого с атп  
function atp_sedoy_dell()
local se_obj = alife():object("atp_mobil_torgovetz")
   if se_obj then
     alife():release(se_obj, true)
   end
end

--' убираем вертуху Седого с атп
function atp_sedoy_heli_dell()
local se_obj = alife():object("atp_sedoy_heli")
   if se_obj then
     alife():release(se_obj, true)
   end
end

все это отрабатывается из логики вертухи, но сам поршень выдается из логики рестриктора. Логика его довольно сложна, и в ней присутствует много секций on_timer =... в некоторых случаях много "таймеров" зависают и логика "сбивается"...
Веселый Роджер
Уважение: 936
Награды: 112
Сообщение #36
Эсминец, насколько я помню, этот момент в солянке изначально криво запускается. Т.е. имеется внешне малозначительный набор фраз, отказавшись от которых можно потерять возможность запуска портов раз и на всегда.
Надо найти этот диалог с Костей и подсмотреть, какой поршень имеет место быть для запуска. Отсюда и отплясывать - куда его ещё можно подсунуть для реализации. У кого есть солянка и желание покопаться в потрохах, тот и подскажет. :)

Уважение: 169
Награды: 31
Облучение: 0%
Сообщение #37
Fagot, тогда ещё проще.
Откройте файл xr_combat_ignore.script

В функции function is_enemy( obj, enemy, st ) пропишите

if has_alife_info("ваш_инфопоршень_во_время_облёта_камеры") then
return false
end

После облёта камеры сбросите инфопорцию.


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

Уважение: 999
Награды: 31
Облучение: 0%
Сообщение #38
Можно сделать без рестриктора, т.е. ставишь под сигнал. Задаешь к примеру такой путь нпс:



Только это тот вариант, где нпс прибегает в свой walk первый раз, если он там был, то не пойдет. Тогда в рестрикторе используешь для нпс логику on_npc_in_zone

Если нпс приходит в свой walk_ и для ГГ включается диалог принудительно, то можно попробовать так:
"Заставляем диалог появиться самому на примере Волка (подходим к Волку и диалог появляется сам)"
--Спавним рестриктор на координатах Волка с радиусом метра 2.Делаем логику рестриктору:

[logic]
active = sr_idle

[sr_idle]
on_actor_inside = %+esc_on_talk% ;Выдача поршня
;Или так(Выбрать одно):
on_actor_inside = %=on_talk%" ;Функция

--Если выбрали поршень, то создаем его:

<info_portion id="esc_on_talk">
<action>СКРИПТ.on_talk</action>
</info_portion>

--Вызываем функцию и видим диалог:

function on_talk()
local npc = level_object_by_sid(006)
db.actor:run_talk_dialog(npc)
end

Вместо актора в зоне, вставить нпс с сидом on_npc_in_zone, т.е.

[sr_idle]

on_npc_in_zone = 006 |name_restrictor| nil %=on_talk%


Как здорово быть тёртым сталкером! Не бояться каждого шороха, оружия не носить с собой много!

Сообщение отредактировал dimak - Среда, 10.09.2014, 23:17


Уважение: 389
Награды: 45
Облучение: 0%
Сообщение #39
Привет сталкеры!!! А не проще сделать так:
Прибежал НПС на свое место(в рестриктор) получил поршень, например proba_dial, а в логику добавить строчку:

[walker@g]
path_walk = byk_walk3
path_look = byk_look3
on_actor_dist_le = 2| nil {+proba_dial} %=on_talk%
meet = meet

и все дела.... (Во всяком случае - работает нормально :) )
Веселый Роджер
Уважение: 936
Награды: 112
Сообщение #40
Всем привет ! Есть вопрос, возможно ли выдать инф.поршень, из сработавшей аномалии, допустим при кидании в неё болта? Кто знает просветите пожалуйста :)



Сообщение отредактировал Beeblebrox - Вторник, 28.10.2014, 11:24

Don't panic
Уважение: 231
Награды: 21
Облучение: 0%
Форум » S.T.A.L.K.E.R. - Моддинг » Разбираем S.T.A.L.K.E.R. » Поиск по теме "Разборочная комната ТЧ"
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск: