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


  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: romale  
Форум » S.T.A.L.K.E.R. - Моддинг » Разбираем S.T.A.L.K.E.R. » Поиск по теме "Разборочная комната ТЧ"
Разборочная комната ТЧ
Сообщение #1
1andrei9,
Quote (1andrei9)
не договорил до конца с Костей при здачи тайника.И теперь нет задания на тайник в Х-10.
Quote (1andrei9)
как правильно прописать Волку на АС диалог Костика о тайнике в Х-10.Я прописал, а диалога нет.

И не будет, раз у Кости не было. Вообще не понятно, как такая ситуация могла произойти, что "не договорил".. Может тут "автосейв" глюканул и какой-то поршень не успел отработать? Бывает с ним такое..
Короче, не парься с прописками диалогов, это вряд ли уже поможет.. Пиши подробный состав своей сборки, начиная с патча ТЧ (1.0004/5/6) и выкладывай сюда сохранку рядом с Костей, сделаем что нибудь.
Или переигрывай с сохранки ПЕРЕД сдачей Косте предыдущего тайника.


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

Сообщение отредактировал romale - Суббота, 08.12.2012, 23:41


Уважение: 563
Награды: 102
Облучение: 0%
Сообщение #2
Quote (1andrei9)
А если не переигрывать
Можно и не переигрывать.
Попробовал повторить твою ситуацию на своей сборке.. Костя действительно не хочет продолжать разговор и выдавать задание на тайник, если прервать диалог по сдаче ему предыдущего (только вот зачем тебе нужно было прерывать - я так и не понял)..
Короче, делай так - открывай файл: \gamedata\scripts\bind_stalker.script , там найди строку: function actor_binder:update(delta)
Сразу под ней вставь эту: db.actor:disable_info_portion("kostya_radar_taynik_done")
чтоб получилось так:

-- malandrinus
scopeUsed = false
function actor_binder:update(delta)
db.actor:disable_info_portion("kostya_radar_taynik_done")
-- malandrinus
-- watch_value = game.time()

Сохраняешь изменения, загружаешь сохранение рядом с Костей и вызываешь меню диалога с ним, там должна снова появиться строка: "Все, Костя, последний ПДА найден!"
Если появилась - на нее не нажимать и диалог не продолжать!!!
Сохраняешься(!)
, выходишь из игры и удаляешь (обязательно!) строку которую ранее добавил. Опять сохраняешь изменения в файле и загружаешь игру с ранее сделанной сохранки. Говоришь с Костей и получаешь наводку на тайник в х10, все.
ЗЫ. Можно конечно и сразу запустить поршень на выдачу задания по тайнику в х10, вставив такую строку: db.actor:give_info_portion("kostya_x10_taynik_start")
Отработает нормально, но уже без участия Кости, а это, какбэ, не интересно ;)


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

Сообщение отредактировал romale - Воскресенье, 09.12.2012, 08:15


Уважение: 563
Награды: 102
Облучение: 0%
Сообщение #3
TA-06, это как вешки в лесу, по которым идут охотники...
Представьте - у вас есть миллион долларов. Узнали об этом бандиты и начали на вас охоту.
А что если у вас нет этого миллиона? Правильно - ничего.
Также и с инфопоршенами. Надо нам выдать квест - выдаем игроку поршень. Надо нам его обновить - выдаем еще один.

Пример реализации на простом квесте - найти и принести:
Код
<game_task id="naiti_taynik">
      <title>Найти тайник в лаборатории</title>
    <objective>
         <text>Найти тайник</text>
           <icon>ui_iconsTotal_find_item</icon>
     <article>naiti_taynik_task</article>
           <infoportion_complete>taynik_nayti_done</infoportion_complete>    
       </objective>
    <objective>
         <text>Найти тайник</text>
           <icon>ui_iconsTotal_find_item</icon>
     <function_complete>dialog.check</function_complete>
           <infoportion_complete>taynik_nayti_have</infoportion_complete>    
       </objective>
       <objective>
          <text>Вернутся к сталкеру</text>    
           <icon>ui_iconsTotal_find_item</icon>
           <infoportion_complete>taynik_nayti_done</infoportion_complete>                 
       </objective>                
</game_task>


И сам поршень, который активирует квест:
Код
<info_portion id="taynik_nayti_start"><task>naiti_taynik</task></info_portion>


Выдаем ГГ поршень taynik_nayti_start, поршень активирует в ПДА квест с id naiti_taynik.
Код
<function_complete>dialog.check</function_complete> --- Проверка условия. Тут может быть что угодно, зависит от задумки и фантазии. В итоге ф-ия выдает ГГ поршень taynik_nayti_have.
<infoportion_complete>taynik_nayti_have</infoportion_complete> -- стадия квеста, при получении этого поршня, квест перейдет на новую стадию (если она прописана, т.о можно создать сколько угодно длинный квест со своим блекджеком и ...).
<infoportion_complete>taynik_nayti_done</infoportion_complete> --- схлопывает наш квест при наличии данного поршня. Т.е квест становится завершенным.


ЗЫ: Прописывание конструкции вида:
Код
<infoportion_fail>fail</infoportion_fail>

Приведет к тому, что квест провалится. Применимо как ко всему квесту - так и для стадий.

Уважение: 650
Награды: 97
Облучение: 0%
Сообщение #4
TA-06,
<has_info> - ставится для проверки, после которой диалог станет доступен.
<dont_has_info> - ставится в начале диалога для того, чтобы диалог после прочтения исчез из списка доступных. Т.е был одноразовым.
При желании - эти 2 параметра можно поменять местами, будет наоборот.
ЗЫ: Например:
Код
<dont_has_info>
бла бла бла
<give_info>


В <give_info> выдается поршень, который проверяется в <dont_has_info> и если он выдан - то диалог исчезает. Т.е проверяемый и выдаваемый поршни должны быть одинаковыми.
точно также и с <has_info>. Если есть проверяемый поршень - то диалог появится.

Уважение: 650
Награды: 97
Облучение: 0%
Сообщение #5
Какая функция выдаёт инфопоршень при условии если убиты определенные НПС? Как например появляется инф.поршень
Код
esc_kill_bandits_quest_kill
когда убиваешь именно всех бандитов на АТП по квесту с Шустрым.

Уважение: 4
Награды: 0
Облучение: 0%
Сообщение #6
Цитата (volazar)
Секция on_death в логике. Сама выдача через on_info.

Да, я этот вариант рассматривал, конкретно у меня надо выдать инфопоршень о том что убиты 5 НПС, у них у всех в логике одна одинаковая секция на смерть
Код
on_death = death@killer
в свою очередь
Код
[death@killers]
on_info = %+esc_open_lager_fire +esc_open_killer_fire%
выдает инфопоршень, т. е. при смерти этих 5ти НПСов пять раз генирируется один и тот же инфопоршень

Сообщение отредактировал Graff46 - Четверг, 02.05.2013, 16:47


Уважение: 4
Награды: 0
Облучение: 0%
Сообщение #7
Graff46, Если просто схематично, то действия примерно такие:
Есть несколько НПС(для примера возьмем троих) с какой либо логикой, и еще у них в логике должны быть например такие блоки:
у первого НПС
Код
[logic]
on_death = death

[death]
on_info = %+pomer1%

у второго НПС
Код
[logic]
on_death = death

[death]
on_info = %+pomer2%

у третьего НПС
Код
[logic]
on_death = death

[death]
on_info = %+pomer3%

т.е. здесь мы видим, что при смерти первого НПС выдается инфопоршень pomer1, при смерти второго выдается инфопоршень pomer2, при смерти третьего выдается инфопрошень pomer3.
Необходимо, чтобы они были зарегестрированы в файле info_локация.xml в таком виде:
Код
<info_portion id="pomer1">   
  </info_portion>
<info_portion id="pomer2">   
  </info_portion>
<info_portion id="pomer3">   
  </info_portion>
<info_portion id="pomerli_vse">   
  </info_portion>

затем нам надо отследить эти инфопоршни, для этого создаем функцию:
Код
function kto_u_nas_pomer(task, info)
if db.actor and db.actor:has_info("pomer1") and     
                       db.actor:has_info("pomer2") and  
                      db.actor:has_info("pomer3")then
         return  
                      db.actor:give_info_portion("pomerli_vse")     
   end
return false
end

В принципе подготовительная часть закончена. При смерти этих НПС будут выданы нужные инфопоршни, функция отследит их и выдаст "общий" инфопоршень pomerli_vse на котором уже можно "привязать" завершение задания, появление нужного диалога ну и т.д.
Веселый Роджер
Уважение: 936
Награды: 112
Сообщение #8
и вот
Код
[logic@esc_killer3_raid]
active = walker@esc_killer3_raid
on_hit = hit@killers
on_death = death@killers
combat_ignore = combat_ignore

и так все киллер 1, киллер2, киллер3 и тд до 5го

Добавлено (02.05.2013, 16:52)
---------------------------------------------
Цитата (Frankenshtayn)
Если просто схематично, то действия примерно такие:

Так же в туторах написано, но не хотелось трогать логику нпсов

Добавлено (02.05.2013, 16:57)
---------------------------------------------
Да и вообще, эти 5ро, это наёмники что лагерь новичков атакуют при Фанате, просто я Фаната и их заспавнил раньше, сделал их бандитами и все, но стандартный инф.поршень который выдавался при их смерти теперь не выдаётся и зеленая метка остаётся на главаре отряда((((

Сообщение отредактировал Graff46 - Четверг, 02.05.2013, 16:57


Уважение: 4
Награды: 0
Облучение: 0%
Сообщение #9
Graff46, А задание то выдано? Значит где то нестыковка. Задание обновляет 1 поршень, а при смерти выдается другой. Пропишите свои и проверьте.
Цитата (Graff46)
но не хотелось трогать логику нпсов

Если нужно, что бы все было хорошо - без логики не обойтись.

Уважение: 650
Награды: 97
Облучение: 0%
Сообщение #10
Цитата (Graff46)
Подскажите как можно вызвать ф-ию при старте новой игры?

Вариантов - море. Как пример в bind_stalker.script в тело функции actor_binder:update(delta) пишите:
Код
if not has_alife_info("info") then
......
db.actor:give_info_portion("info")  
end

Вместо многоточия вставляете что нужно. Поршень info надо не забыть зарегистрировать в info_***.xml
Цитата (Graff46)
где лежит модель ноутбука

\gamedata\meshes\equipments\item_notebook.ogf

Уважение: 650
Награды: 97
Облучение: 0%
Сообщение #11
Не работает, я похоже так же делал. Ну её в пень! Я потом через аллСпавн сделаю.
Проверте пожалуйста ф-цию - она должна переводить нпс в оффлайн, выдавать инф.поршень
Код
fan_1
и если нпс на армейских складах то тогда переводит его в онлайн:
Код
function fan_v_off(actor, npc)            
  local npc = alife():story_object(022)     
   if npc then     
    alife():set_switch_online (npc:id (), false)         
    alife():set_switch_offline (npc:id (), true)
   end
   if npc and level.name() == "alife_l07_military" then
    alife():set_switch_online (npc:id (), true)         
    alife():set_switch_offline (npc:id (), false)
   end
  db.actor:give_info_portion("fan_1")
end
и проверте правельно ли я энды поставил, а то у меня с ними проблемы вечно.

Уважение: 4
Награды: 0
Облучение: 0%
Сообщение #12
Ещё вопрос. Если сделать так:
Код
[smart_terrains]
esc_lager = {-fan_1}
mil_lager = {+fan_1}
, то нпс при наличии "fan_1" даже в онлайне пойдет на "мил лагерь"(а это на другую локацию) пешком! o_O проверял.
А если нпс перевести в оффлайн, а потом уже дать поршень на перемещение, то он "мгновенно" туда переместиться или будет также "идти"??

Сообщение отредактировал Graff46 - Воскресенье, 05.05.2013, 18:54


Уважение: 4
Награды: 0
Облучение: 0%
Сообщение #13
Ясно, в той ф-ции, что я писал ранее нужно одно условие: инфопоршень должен выдаться уже после того как нпс переведется в оффлайн, а у меня там происходит вроде все одновременно?

Уважение: 4
Награды: 0
Облучение: 0%
Сообщение #14
TA-06, по второму вопросу:
По поводу получения инфопоршня при взятии предмета. Открываем bind_stalker.script и ищем такую функцию:
Код

function actor_binder:on_item_take (obj)
      level_tasks.proceed(self.object)

      if xrs_ai then xrs_ai.actor_item_take(obj) end
      --game_stats.update_take_item (obj, self.object)
    inventory.on_item_take(obj)
end


И вносим в нее такие изменения:
Код

function actor_binder:on_item_take (obj)
      level_tasks.proceed(self.object)

      if obj and obj:section() == "взяли_предмет" then
         db.actor:give_info_portion("получили инфопоршень")
      end

      if xrs_ai then xrs_ai.actor_item_take(obj) end
      --game_stats.update_take_item (obj, self.object)
    inventory.on_item_take(obj)
end


Здесь, при взятии ГГ предмета с именем "взяли предмет"(ну например wpn_vintorez) получаем инфопоршень "получили инфопоршень"(например vzjali_vinto)

Или, если нужно отследить несколько предметов, то приводим эту функцию к такому виду:

Код

local my_info_table = {
    предмет1 = "инфопоршень1",
    предмет2 = "инфопоршень2"
}
function actor_binder:on_item_take (obj)
      level_tasks.proceed(self.object)
      --game_stats.update_take_item (obj, self.object)

       if my_info_table[obj:section()] then
         db.actor:give_info_portion( my_info_table[obj:section()])    
       end
end


В данном случае, таблицу можно заполнять практически бесконечно.
А уж при получении инфопоршня, можно произвести великое множество действий, от запуска эффектов и озвучки, до спавна НПС и монстров, и до... В общем, куда фантазия заведет.
ЗЫ. Естественно свои инфопоршни нужно регестрировать в info_локация.xml
Веселый Роджер
Уважение: 936
Награды: 112
Сообщение #15
TA-06, начнем по порядку.
Для начала - активная схема "ремарк" в общем не используется... Но если уж нет возможности распаковать аллспавн, и если данный НПС "просто одноразовое мясо", то ладно, можно попробовать.
Код
[logic]
active = remark@zombied
danger = danger_condition
meet = meet

Хорошо, должно работать...(если этого НПС не "спугнут", если его монстр "не потревожит", ну и т.д.)

Далее:
Код
[remark@zombied]
anim = trans_zombied
no_move = true
target = actor
on_timer = 60000
meet = meet@zombied
danger = danger_condition


И что это означает:?
Код
on_timer = 60000

Т.е. через 60 секунд у тебя происходит непонятно что... В данном случае эта строка не нужна.
Код

meet_dialog = escape_lager_guard_start_dialog

Хорошо, это уникальный диалог для данного НПС, есть такое в логике.
Код
on_actor_dist_ge = 30| %+talk_with_crazy%

здесь - если ГГ отошел на 30 метров от данного НПС, получаем инфопоршень talk_with_crazy - это работает, если он нужен вообще.
Код
on_info = {+talk_with_crazy} remark@suicide
- здесь "если выдан инфо talk_with_crazy, то переходим к следующей схеме, а именно remark@suicide ... В этой схеме, по идее НПС "изображает самоубийство", но это не более чем анимация, я конечно точно не помню, но возможно в этой схеме нужно вызывать функцию "убийства" данного НПС...
Веселый Роджер
Уважение: 936
Награды: 112
Сообщение #16
Цитата (KADAR)
Почему в скате сообщение один раз приходит?

Для начала разберись, что вызывает СМС - функция или поршень.
Функция может отрабатываться бесконечно, как уже озвучено было, а поршень имеет, грубо говоря, "свойство" одноразовости, его надо "обновлять" , например:

db.actor:disable_info_portion("твой поршень")

Это "пример для думок", т.к. он фактически из "хелпов по Луа". Как его применять - дело мододела, тем более не всегда срабатывает, если есть завязка на ИД.

Сообщение отредактировал Korpus - Вторник, 25.06.2013, 14:05


Уважение: 169
Награды: 31
Облучение: 0%
Сообщение #17
Graff46, Осваивайте таймеры. Пример:
Код
local time_1000, time_5000

function any_update()
     local time = time_global() --/ текущее время
     if not time_1000 then --/ предустановка таймеров
      time_1000 = time + 1000
      time_5000 = time + 5000 + time_1000/2
     end
     if time_1000 < time then
       time_100 = time + 1000
       --- Действия, которые надо производить с частотой раз в 1 сек
     end
     if time_5000 < time then
       time_5000 = time + 5000
       --- Действия, которые надо производить с частотой раз в 5 сек
     end
end


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

Если вызываете из диалога и т.д то есть загвоздка - ф-ия срабатывает 1 раз всего, ставить туда таймер - бессмысленно, нужен постоянный апдейт. Как решение - проверять в функции и выдавать поршень в таймере, после чего он будеет срабатывать.

Уважение: 650
Награды: 97
Облучение: 0%
Сообщение #18
Доброго всем времени суток !
Возникла проблема в прохождении мода Альтернатива - надо поговорить с Анархистом для продолжения квеста " Легенда", но в дверях "забуксовала" Зоя ( дверь в квартиру , где Анархист находится)... Около суток пытаюсь пройти , что только не делал : сейвился - перезаходил , спал , переходил на другую локацию ...
Подскажите пожалуйста , как можно протолкнуть инфопоршень с разговором или переписать диалог с ним на другого НПС ?
P.S. я рядовой геймер , поэтому просьба как можно подробнее расписать процесс


Сталкер , помни - мы тебя любим ! Но наши СВД нас постоянно ревнуют ... С уважением Братство Монолита
( S.T.A.L.K.E.R_SNIPER )

Сообщение отредактировал Xeonc - Четверг, 01.08.2013, 21:25


Уважение: 42
Награды: 20
Облучение: 0%
Сообщение #19
Друзья, всем привет. Вопрос: добавил локацию darcscape. Добавил файл профилей и диалогов, прписал эти файлы в sistem.ltx все в порядке, файлы работают. А вот где прописывается файл диалога rus/stable_dialog_darcscape? А то приходится нагружать файл русских диалогов кордона.
И еще, может кто сталкивался с таким вылетом


Какой-то инфопоршень. Вроде как не хватает какого-то предмета? Вылет на локации, которую мне дали. Происходит на окраине, почти на выходе. Я там еще не успел напортачить, потому не знаю в каком направлении искать. В аллспавне вроде ничего не соответствующего не заметил.

Уважение: 31
Награды: 3
Облучение: 0%
Сообщение #20
butrikA, Вылет из-за того, что нет инфопоршня - ds_delete_changer. Добавь его в любой из файлов info_***.xml
Возможно где то стоит рестриктор, раз именно на окраине такой вылет. При попадании в рестриктор выдается поршень и т.д
Посмотри поиском по алл спавну этот поршень. Если нет, тогда в заданиях, если и там нет - осмотри файлы логики.
Проще всего в тотал коммандере сделать поиск по фразе в нужной папке.
По поводу диалогов, новый файл добавляется в system.ltx, секция [dialogs]. Там думаю поймешь как прописать, живой пример есть :)

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