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

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


Halford

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

@"StreloK", вполне нормальный вопрос. Проще всего поступить примерно вот так (понадобится файл-набор скриптов АМК-мода - amk.script)

Создаём монстра споновой АМК-функцией (но можно и стандартной, в примере это "нормальный" зомби), функция возвращает серверный объект, с которого в таблицу t считываем параметры, тут же в раздел "кустовой даты" объекта в таблице прописываем желаемую логику (динамическую, из ltx-файла), и тут же производим запись обновлённых данных этому серверному объекту (то есть, нашему новоиспечённому зомбарю). Готово :)!

  Цитата
local mob = amk.spawn_item("zombie_normal",vector():set(x,y,z),gv,lv)

local t = amk.read_monster_params(mob)

t.custom = "[logic]\ncfg = scripts\\new_zombie.ltx"

amk.write_monster_params(t, mob)

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


Ссылка на сообщение

parsek123, хочешь сделать обычный тайник, ну, или именной - без разницы, они только названиями отличаются и способом наполнения шмотками? Тогда понадобится присвоить ему ("инвенторибоксу", название секции inventory_box) уникальный story_id.

Присваиваем ящику "у Сидора" уникальный story_id, например, 5025 (можно и любой другой - главное, чтобы он был уникальным - иначе будут проблемы с запуском игры). Кроме этого, нужно добавить ящику "кустодату", в которой нужно указать, что этот ящик - тайник, иначе он не будет загружаться шмотками автоматически (зато его запросто можно будет отловить по story_id, и засунуть в него в любой момент всё, что угодно):

  Ящик у Сидора в all.spawn (Показать)

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


Ссылка на сообщение

Вот, если кому надо, функция, возвращающая серверный объект ("инвенторибокс", ящик для шмоток/тайник). На входе имя локации + имя желаемого ящика (как уже неоднократно отмечалось, на одной локации (а лучше на всех) очень сильно рекомендуется использовать уникальные имена для объектов). Это для оригинала ТЧ, а для расширенных модов в таблицу нужно внести имена и параметры подключенных дополнительных локаций.

  Раскрывающийся текст (Показать)

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


Ссылка на сообщение

Да, я об этом упомянул, что касается дополнительных локаций :)... Кстати, забыл закомментить в середине сигнальную функцию <amk.send_tip2(obj:name(), nil, 10>, модеры, исправьте этот недостаток вместе с этим постом ;)...

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


Ссылка на сообщение

Artos, неплохо, но я стараюсь вперёд выставлять числовые сравнения, отсеивая строковые в последнюю очередь:

cmp eax, ebx всегда быстрее, чем repe cmps str1, str2 ;)...

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

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


Ссылка на сообщение

У тебя правильно составлен конфиг. Просто загляни в файл gamedata\config\misc\zone_minefield.ltx и проверь, чтобы параметр был указан вот так: visible_by_detector = on, и всё должно заработать. Этот параметр как раз и отвечает за то, обнаруживает детектор эту аномальную зону или нет.

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


Ссылка на сообщение

Поподробнее бы :)... Вообще, ГГ разговаривает с военными и при этом не хочет говорить только с этим конкретным "генералом"? Или вообще не запускаются диалоги с военными?

Во втором случае нужно править xr_meet.script - найти строку с перечислением группировок и удалить из неё вот этот фрагмент:

or npc_community == "military"

В первом случае... где прописывал диалоги этому генералу - в профиле непися или в его логике?

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


Ссылка на сообщение

Просто воткни в конструктор диалога в нужную фразу action с функцией, включающей проигрывание звука, например:

 

<action>dialogs.tra_la_la</action>

 

А в файл dialogs.script добавь функцию:

 

function tra_la_la(first_speaker, second_speaker)
    local snd_obj = xr_sound.get_safe_sound_object([[monsters\poltergeist\die_2]])
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
end

 

Только измени путь к нужному тебе файлу.

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


Ссылка на сообщение

Stalker_AleX333, у тебя второй и третий диалоги начинаются сразу с фразы "1", а должны начинаться всегда с "0", если не ошибаюсь ;)...

Whisper, насчёт притормаживания диалога никогда не задумывался даже :)... Возможно, проще сделать два последовательных диалога - первый обрывается с тем звуком, который тебе нужен, а второй активировать следом, снова "обратившись" к NPC? Игра подерживает только ogg, есть куча конвертеров, которыми легко и просто можно перегнать любой звукофайл (не только wav) в ogg. Только если это будет каким-то "мировым" звуком (выстрел, музыка из репродукторв и т.п.), тогда придётся прогонять его (wav) через SDK - это тоже очень просто.

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


Ссылка на сообщение

Whisper, вот ещё вариант звуковой функции с задержкой ввода (задержки вывода очередной фразы не будет, но на некоторое время отключается ввод):

function tra_la_la(first_speaker, second_speaker)
    local snd_obj = xr_sound.get_safe_sound_object([[monsters\poltergeist\die_2]])
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
    set_inactivate_input_time(50)
end

Или воткни action с функцией set_inactivate_input_time(хх) до или после "звуковой" фразы. Поэкспериментируй. В т.ч. и с параметром задержки ввода функции.

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

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


Ссылка на сообщение
herurg, именно так. Каждый объект в "оллспоне" прописывается отдельно. Можно обойтись и без all.spawn - воспользоваться скриптовым споном - например, по условию или на апдейте при загрузке уровня. Или "подцепить" спон группы тушканов к какому-нибудь событию - скажем, к выбросу. Или использовать АМК-спон, там всё достаточно просто и гибко настраивается - рекомендую ;)!

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


Ссылка на сообщение
TheDoktor, возможно, в этом месте ГГ приближается к какому-либо объекту (NPC, например), который в этот момент переходит в онлайн, и, по причине ошибок в скриптах или конфигах, даёт вылет. Советую "пощупать" NPC, к которым, воможно, в этом месте приближается игрок, вызывая их переход в онлайн - особенно если проводилась какя-либо работа с этими NPC (или вообще какими-то новыми, или модифицированными старыми объектами). Раз уж вылет без лога.

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


Ссылка на сообщение

strchi, выложи свой вариант скрипта, чтобы можно было просмотреть, в чём ошибка.

А чтобы приёмник был изначально, либо зарегистрируй его в all.spawn, либо создай его тем же самым скриптом, вызвав при первом запуске игры. При этом не забудь удалить вызов функции - удали строку moi_mod.spawn_patefon() из give_weapon_to_actor(trader, actor), иначе в дальнейшем жутких косяков со звуками не избежать :).

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


Ссылка на сообщение
kuzia, можно. Судя по всему, речь идёт о т.н. АМК-аномалиях. В общем случае даже не потребуется править all.spawn (вообще, это нужно только для того, чтобы очистить его от АМК-аномалий, а заодно и расширить за их счёт массив свободных сториайд, без чего можно спокойно обойтись ;)). Заново ничего создавать не нужно - т.к. "аномалии разработчиков" не удалялись из all.spawn, а просто "стираются" тем же самым скриптом, что и спонятся новые, динамические. Так что нужно всего лишь слегка поправить "фичу", спонящую/удаляющую динамические аномалии.

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


Ссылка на сообщение

Обнаружил вот какую неприятность: при использовании изменённого game.graph (дополнительные "АИ-связи" локаций), на большом расстоянии от "перехода" исчезает укзатель (стрелка на миникарте) на маркер задачи, назначенной на другой локации. Что не есть гуд. Кто-нибудь решал такую проблемку?

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


Ссылка на сообщение

weas, попробуй в секции твоей аномалии прописать:

postprocess = postprocess_psy_zone

А ты сам пробовал? В оригинальной игре (ТЧ) такая секция [postprocess_psy_zone] отсутствует.

--/ Artos

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

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


Ссылка на сообщение
 
  30.03.2016 в 08:40, DraBBotenko сказал:

И ещё опять же по поводу костров: заметил что к примеру на локации Припять нет освещения окружающих объектов и территорий от косторов,  Исправить этот недочёт можно только через SDK?

Можно и без SDK - я добавлял освещение для костров Припяти, банально редактируя all.spawn. Но получил в результате довольно заметное "подтормаживание" в Припяти в процессе игры. Всё же нагрузка - источники света, да ещё и анимацией. Поэтому плюнул, и вернул всё в исходное состояние.

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


Ссылка на сообщение

Просто ищем сталкера по имени (не character_name, а именно name!), и снимаем с него метку (точку на (мини)карте):

local obj = alife():object("stalker_name")
if obj then
        obj:visible_for_map(false)
end

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


Ссылка на сообщение

 

 

  _Val_ писал(а):
А как объяснить игроку, почему допустим на одном трупике метки нет, а на других есть?

Не думаю, что в этом есть что-то требующее объяснений - например, у зомбированных сталкеров ведь тоже нет отметок на карте.

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


Ссылка на сообщение

Отвечу по-одесски, вопросом на вопрос: а что, собственно, мешает в нужный момент (к примеру, в момент выдачи квеста), снова поставить метку на труп доцента Лазарева? Вот так:

local obj = alife():object("stalker_name")
if obj then
        obj:visible_for_map(true)
end
  • Согласен 1

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


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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