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

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

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

@yurv3 в папку с игрой... ну, я не бросал, я просто распаковал, и оно само так распаковалось. Мне получается нужно все-все распакованные папки в gamedat'у кинуть, или что-то оставить именно в папке с игрой?

@Купер а, ню да. Я сейчас закинул в геймдату и всё работает и отображается. Теперь только вопрос: что мне оставить вне её, а что закинуть внутрь? Вот скрин папок всех (config уже закинул) - https://drive.google.com/file/d/1Z17lk_4-BjCqd6gmgFW_5O2QPmNqMZp1/view?usp=sharing

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

Добрый день!

У меня возникло пару проблем. Не могли бы вы подсказать как реализовать данные моменты:

 

1. Как сделать так, чтобы когда нпс выдавал актору предмет через активный диалог можно было прописать такое условие, которое не давало бы возможности сбросить диалог через кнопку "esc" и начать его заново? Тем самым, хотелось бы устранить баг с бесконечным получением предмета через диалог.

 

2. Допустим, мне нужно заспавнить нпс через этот скрипт, не через all.spawn :

Цитата

function spawn_viking()
local x, y, z = -187.171, -19.491, -132.909
local LVid, GVid = 64301, 56
alife():create("escape_viking",vector():set(x,y,z),LVid,GVid)
end

Вот после того, как я создал этого нпс, как можно его удалить/перевести в оффлайн, а потом заспавнить обратно/перевести в онлайн? Если не удалить, то, возможно, телепортировать на далёкое от актора расстояние, а потом, наоборот, на близкое.

 

Заранее спасибо.

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

@Fly , достаточно оставить только файлы, каким-либо образом изменённые относительно оригинала. Всё остальное подхватится автоматически. Принцип такой: движок изначально считывает необходимые файлы из .db архивов. Но папка gamedata имеет более высокий приоритет. Т.е., при наличии её и каких-либо файлов в ней (с сохранением соответствующих путей) считываться будут именно они, а не те, которые находятся в игровых архивах. 

Для примера, ситуация выше: в gamedata достаточно оставить только gamedata\config\misc\trade_trader.ltx. Именно он и будет считываться при загрузке, в всё остальное подхватится из .db архивов.

  • Спасибо 1
  • Согласен 1
Ссылка на комментарий

@FlodaD   2.С помощью данного скрипта. Операторы нужно использовать вместе, иначе работать не будет. Ставите true и false в зависимости от того, хотите вы его перевести в онлайн или оффлайн. Не надо трогать alife():set_interactive. В статье по ссылке приведённой ниже всё написано. Я это сделать не пробовал, так что не уверен, что оно будет работать. Все нюансы расписаны в статье. Там есть другой способ. Он быстрее, но работает только когда нпс находится в онлайне.

http://stalker-gaming.ru/publ/stati/modding/perekhod_nps_v_offline_online_cherez_skript/5-1-0-108

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

Пример перевода в онлайн:

function name()

 

local npc = alife():story_object( Сюда прописать Story ID нпс )

 

if npc then

 

alife():set_switch_offline (npc.id, false)

alife():set_switch_online (npc.id, true)

alife():set_interactive (npc.id, true)

 

end

end

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

 

Пример быстрого перевода в оффлайн

function name(actor, npc)

 

if npc then

 

alife():set_switch_offline (npc:id(), true)

alife():set_switch_online (npc:id(), false)

alife():set_interactive (npc:id(), false)

 

end

end

 

 

Решил сделать фичу, как в ОП 2. При смерти ГГ выводится сообщение о том, что ГГ сдох. Решил сделать также, но у меня не получилось.

Вписал проверку жив ли ГГ в начальную инфопорцию.

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

<game_information_portions>
  <info_portion id="storyline_actor_start">
    <task>storyline_eliminate_gunslinger</task>
    <action>my.god_spawn</action>
    <action>my.gg_podoh</action>
  </info_portion>

 

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

function gg_podoh()
if not db.actor:alive() then
db.actor:give_info_portion("gg_pomer")
end

 

function sms_otpravka()
local snd = sound_object([[device\pda\pda_tip]])
local sactor = alife():actor()
local cactor = level.object_by_id(sactor.id)
snd:play_no_feedback(db.actor,sound_object.s2d, 5, vector():set(0, 0, 0), 0.7)
cactor:give_game_news("Система:\\n%c[255,200,200,200]ГГ сдох.", "ui_iconsTotal_found_money", Frect():set(0,0,83,47), 5001, 8000)
end
end

 

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

    <info_portion id="gg_pomer">
        <action>kalecheniy_death.sms_otpravka</action>
    </info_portion>

 

  • Полезно 1
Ссылка на комментарий
1 hour ago, FlodaD said:

Тем самым, хотелось бы устранить баг с бесконечным получением предмета через диалог.

Это не баг, это кривые ручки составителя диалога. Выдавай нужный предмет на последней фразе диалога. В этой же фразе добавь выдачу поршня, а в precondition диалога добавь проверку отсутствия этого поршня. Общее правило: все действия производи в последней фразе диалога, что бы не было, что в середине диалога забрали какой-то предмет, а в конце диалога зачли задание. Тушканчик рядом пробежит, непись дернется - диалог прервется и новый не начать, т.к. предмет-то уже забрали, а задание повисло не закрытым.

 

  • Нравится 2
  • Согласен 3
Ссылка на комментарий

@Fly Что бы ты не путался- удали все, переустанови игру. Создай если нет папку gamedata.  Вот в неё и помещай все свои дополнения.  

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

@Fly 

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

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

@AndreySol Страшно представить, что он там натворит.

Ну а на самом деле всё верно. Часто возникают ситуации, когда необходим какой-то файлик, а он в архиве... 

Здесь могла быть ваша реклама.

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

@Fly , попробуй начать пользоваться этим. Возможно, покажется более удобным, чем иметь на диске ворох ненужных распакованных файлов с возможностью в них запутаться, да ещё и дублирующих то, что уже есть в игровых архивах. Есть варианты wcx (позволяет использовать .db как обычные архивы и извлекать из них только нужные файлы) и wfx ("виртуально" сразу распаковывает все архивы .db c сохранением структуры папок).

Изменено пользователем Купер
  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
15 часов назад, dsh сказал(а):

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

Есть еще вариант: когда игрок прервет диалог эскейпом: часть уже отработалась, а конец диалога не отработался. Поэтому да, все важное - в последней строке диалога (выдача/забор предметов, инфо, экшн и прочее).

  • Согласен 1
  • Не согласен 1

Сталкер - наше всё!

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

@AndreySol ну так я с самого начала так и сделал. Анпакером всё пооткрывал и покидал в папку с игрой. Просто про подводные камни с gamedata не знал.

Изменено пользователем Fly
Ссылка на комментарий
19 часов назад, dsh сказал(а):

Выдавай нужный предмет на последней фразе диалога. В этой же фразе добавь выдачу поршня, а в precondition диалога добавь проверку отсутствия этого поршня. Общее правило: все действия производи в последней фразе диалога, что бы не было, что в середине диалога забрали какой-то предмет, а в конце диалога зачли задание.

Ну... я бы не стал соглашаться :rolleyes: Для примитивно-линейных диалогов, представляющих собой последовательную цепочку фраз без никаких ветвлений - да, применимо, согласен.

Вообще же, это не обязательно должна быть "последняя фраза". Главное, что если в энной фразе диалога, производится некое сюжетно-значимое деяние, то доступность этой фразы/ветки диалога, надо проверять ДО этой фразы. А инфопоршни / флаги se_stor / движкового хранилища, записывать ОДНОВРЕМЕННО с данным деянием, т.е. в той же фразе. Так мы достоверно фиксируем что да, фраза состоялась, и проверяем доступность фразы именно там, где это имеет смысл.

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

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

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

@Zander_driver словоблудие это все. В любом, самом разветвленом диалоге, есть одна или больше последних фраз.

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

@dsh конечно есть. Вот только, ссылать все ключевые действия туда, совсем не обязательно.

  • Согласен 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

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

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Господа, если кто-то сталкивался с подобной проблемой, подскажите возможную причину. На первом скриншоте видно, как полоска состояния предмета а также сумма денег сильно "уезжают" за границы их интерфейса. На втором скриншоте видно, что этот баг возникает только при торговле, а при открытии инвентаря всё в порядке, за исключением съехавших иконок сопротивлений. Что редактировал: описание почти всех базовых костюмов в игре (string_table_outfit.xml), добавил новый костюм в outfit.ltx на основе уже готового и выдал его Сидоровичу на продажу (на скриншотах обычная куртка), изменил стартовый ассортимент Сидоровича. Ещё добавил новую иконку для нового костюма и изменил модель ГГ в этом костюме, но этот баг появлялся у меня ещё давно, до этих двух правок:dash2:.

Скриншот первый - https://drive.google.com/file/d/14kSxpvEOciUCI-vIsIawn613YNbVEbh7/view?usp=sharing
Скриншот второй - https://drive.google.com/file/d/1FODQyOfgeKp51rYgeVFFUSjnDWMa01ph/view?usp=sharing

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

С чем может связана движущиеся тень (не знаю как назвать) при дожде?

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

×
×
  • Создать...