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

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


Halford

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

Подскажите, где искать начало сюжетной линии игры ? Т.е. начали НИ - пошел ролик с грузовиком и т.д., в каком конфиге\скрипте это прописано. Хочу попробовать не убрать всю оригинальную линейку сюжетных квестов, а просто перевести ее в не сюжетную, оставив обычной квестовой линейкой.

 

Поиском воспользуйся, это древняя задача, которую уже давным давно решили.

ColR_iT

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

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


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

Стартовый ролик при начале НИ называется intro_game. Я не нахожу поиском это название ни в одном файле распакованой gamedata, кроме как в его описании в ui_movies.xml. Получается, что его запуск - движковый ?

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


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

Старлей
 

Движок запускает не сам ролик, а так называемый tutorial

Уж не так-ли этот самый туториал запускается - game.start_tutorial("intro_game") ?
Если так, тогда хоть в каком-то файле папки gamedata поиском я бы нашел эту строчку. А ее нет. Что скажете ?
 

во время которого игра ставится на "Паузу"

чет я сильно сомневаюсь ....

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


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

Вопрос по добавлению задания(task).

В файл tasks_escape.xml добавляю новое задание, текстовые описания подзаданий прописываю в text\rus\string_table_tasks_escape.xml. Но движок их не видит - после активации задания, в ПДА вместо текста отображаются идентификаторы этого текста. Т.е. пункты подзаданий выглядят примерно так:

kill_bandits_atp_0

kill_bandits_atp_1

kill_bandits_atp_2

Синтаксис проверил несколько раз, ошибок нет. В чем может быть причина ?

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


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

чтобы "через логику вызывать скрипты из сторонних файлов" требуется доработанный скрипт 'xr_logic', и он в Народной Солянке доработан под это.

 

 

А можно ссылочку какую-нить на этот доработанный файл ? А то НС нету, а качать ее ради одного файла ...

======================================================

Лови - xr_logic.script из последней официальной допы Соли.

BFG

 

 

Изменено пользователем BFG
  • Нравится 1

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


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

Вопрос по игровым заданиям (task).

Знаю, что используя класс CGameTask можно выдать задание с ограничением по времени выполнения. А можно-ли сделать это-же, но только в xml-описании задания ? Из всех аттрибутов для тега game_task в исходниках используется только prio. Возможно есть тег time ?

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


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

v 1.0005

В диалоге Шустрого, при его спасении из бандитского плена, есть возможность взять у него наводку на схрон с артефактом. На карте в ПДА появляется отметка места "оставленного Шустрым тайника". В диалоге, в соответствующей фразе, выдается инфо-порция: <give_info>esc_shustryi_secret</give_info>. Сама инфо-порция прописана в info_l01escape.xml обычным образом: <info_portion id="esc_shustryi_secret"></info_portion>. Вопрос: а как метка на карте в ПДА появляется ? Был-бы в инфо-порции какой-нить action прописан, в котором метка ставится, а так нет ничего ?

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


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

Comador

Если я правильно разобрался, то связка ф-ций:

info_callback в bind_stalker.scipt -> process_info_portion в level_tasks.scipt -> process_info_portion в скрипте локации из таблицы level_scripts в начале level_tasks.scipt предназначена для выполнения нужных действий на локациях при активации инфо-порций ?

Если я правильно понял, то тогда сразу непонятка - в level_tasks.scipt в ф-ции process_info_portion присутствует следующее:

for k, v in pairs(level_scripts) do
	if v.process_info_portion(info_id) then
		return
	end
end 

т.е если process_info_portion из скрипта локации вернет true, то перебор таблицы прерывается. Просматривая имеющиеся в таблице скрипты, обнаружил в darkvalley_tasks.script:

 

function process_info_portion(info_id)
	if info_id == "val_sos_give_tip" then
		level_tasks.add_location(422, "val_sos_location")
	elseif info_id == "val_sos_actor_near_wounded" then
		level_tasks.remove_location(422, "val_sos_location")
	elseif info_id == "val_show_zones" then
		level_tasks.add_location(427, "crlc_big", "val_zone_bandits_hint")
		level_tasks.add_location(428, "crlc_big", "val_zone_monolith_hint")
		level_tasks.add_location(429, "crlc_mdl", "val_zone_robbers_hint")
		level_tasks.add_location(430, "crlc_small", "val_zone_south_gate_hint")
	elseif info_id == "val_show_pipe_zone" then
		level_tasks.add_location(431, "crlc_mdl", "val_zone_pipe_hint")
	elseif info_id == "val_show_farm_zone" then
		level_tasks.add_location(435, "crlc_big", "val_zone_farm_hint")
	else
		return false
	end

	return true -- !!!!
end

Получается, что после обработки этого скрипта дальнейший перебор таблицы будет тупо прерван ? И нарушится обработка активации инфо-порций для других локаций ?

Изменено пользователем ColR_iT
Не цитируй предыдущие посты целиком.
  • Нравится 1

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


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

Там не только метки расставляются - для Военных складов есть и управление инфо-порциями...


перебирать дальше таблицу не имеет смысла

Видно не всегда - в escape_tasks

 

 

function process_info_portion(info_id)
	--' пометки на карте

	if info_id == "esc_tutorial_secret_place" then
		level_tasks.add_location(025, "green_location", "tutorial_secret_place1")

	elseif info_id == "esc_tutorial_secret_place_found" then
		level_tasks.remove_location(025, "green_location")

	elseif info_id == "esc_kolyan_lost" then
		level_tasks.add_location(028, "crlc_big", "esc_mill")

	elseif info_id == "esc_kolyan_found" then
		level_tasks.remove_location(028, "crlc_big")

	elseif info_id == "esc_bridge_soldiers" then
		level_tasks.add_location(031, "crlc_big", "soldiers_bridge")

	elseif info_id == "esc_tutorial_secret" then
		level_tasks.add_location(026, "crlc_small", "tutorial_secret")

	elseif info_id == "esc_tutorial_secret_find" then
		level_tasks.remove_location(026, "crlc_small")

	elseif info_id == "esc_shustryi_secret" then
		level_tasks.add_location(027, "crlc_small", "tutorial_secret_shustryi")

	elseif info_id == "esc_shustryi_secret_find" then
		level_tasks.remove_location(027, "crlc_small")
		return false
	end
end

 

 

прерывания дальнейшего перебора таблицы похоже не будет

Изменено пользователем AndreySol
  • Нравится 1
  • Не нравится 1

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


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

Есть такой фрагмент в работах гулага блок-поста на Кордоне, он для трех вояк, что патрулируют на дороге перед самим блок-постом:

 t = { section = "logic@esc_blockpost_patrol1",
  idle = 0,
  prior = 8, state = {0},
  position_threshold = 100,
  online = true,
  in_rest = "", out_rest = "esc_blockpost_patrol_restrictor"
 }
 table.insert(sj, t)
 t = { section = "logic@esc_blockpost_follower1",
  idle = 0,
  prior = 7, state = {0},
  position_threshold = 100,
  online = true,
  in_rest = "", out_rest = "esc_blockpost_patrol_restrictor"
 }
 table.insert(sj, t)
 t = { section = "logic@esc_blockpost_follower2",
  idle = 0,
  prior = 7, state = {0},
  position_threshold = 100,
  online = true,
  in_rest = "", out_rest = "esc_blockpost_patrol_restrictor"
 }
 table.insert(sj, t)

 

 

В load_states прописано следующее:

    if level.get_time_hours() >= 6 and level.get_time_hours() <= 22 then
    ...............
     return 0  -- день
    else
     return 1  -- ночь
    end

Но наблюдая за этой группой НПСов в момент наступления 22:00 игрового времени увидел, что они как ходили патрулем, так и ходят. И только в 23:00 игрового времени они снимаются с патрулирования и уходят на территорию блок-поста на другие работы.

Почему так происходит ? В чем может быть косяк ?

 

<= 22 - это, в том числе, и 22:59:59 ;) dc

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

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


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

Мины, на двух минных полях возле блок-поста вояк на Кордоне, отмечены некими вертикальными палочками, а так-же если попасть болтом в мину раздается щелчек. Как убрать щелчек я нашел - закомментил параметр entrance_sound в zone_minefield.ltx. А вот с палочками не могу разобраться, подскажите как их убрать, сделав мины полностью невидимыми ?

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


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

Добавил для теста инфо-порцию в info_l01escape.xml

 <info_portion id="test_proceed"></info_portion>
 <info_portion id="test_complete"> <disable>test_proceed</disable> </info_portion>

Далее сваял такой вот код:

local flag = false
function test()
 local npc = db.actor
 

 if not flag then
  npc:give_info_portion("test_proceed")

  flag = true
 else
  npc:give_info_portion("test_complete")
 end

 

 local text = ""
 if npc:has_info("test_proceed") and npc:has_info("test_complete") then
  text = "test_proceed - вкл, test_complete - вкл"
 elseif npc:has_info("test_proceed") and npc:dont_has_info("test_complete") then
  text = "test_proceed - вкл, test_complete - выкл"
 elseif npc:dont_has_info("test_proceed") and npc:has_info("test_complete") then
  text = "test_proceed - выкл, test_complete - вкл"
 elseif npc:dont_has_info("test_proceed") and npc:dont_has_info("test_complete") then
  text = "test_proceed - выкл, test_complete - выкл"
 end
 news_manager.send_tip(db.actor, text, nil, nil, 30000)

end

 

 

запускаю код по нажатию кнопочки в инвентаре актора(ГГ).

При первом вызове вижу:

"test_proceed - вкл, test_complete - выкл"

при втором:

"test_proceed - вкл, test_complete - вкл"

Получается, что тег <disable>test_proceed</disable> не срабатывает ? Или я чет не понял в этой системе ? Просветите...

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


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

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

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


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

 

Как несколько нпс занимали одну и ту-же работу, так и занимают

 

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

 

 

Как игнорировались работы, так и игнорируются

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

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


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

Насчет ф-ции best_enemy() хочу спросить. Она возвращает так скажем "худшего врага", если таковой имеется для НПСа ?

Если да, то предусмотренно ли какое-то "забывание" НПСом этого врага. Если такое возможно - что за ф-ции, или параметры или как это делается\настраивается ?



in и out растрикторы, прописанные в работах гулага, будут действовать на НПСа при переходе последнего в комбат-состояние ?

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

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


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

@UPDAT3

Помог, все нормально - мин не видать и не слыхать....

 

Насчет best_enemy - я имел в виду под "забыванием" именно наличие некой памяти у НПСов на то что он видел, слышал, получил хит и т.д.

Собственно в связи с чем вопрос возник: в гулаге блок-поста вояк на Кордоне в загрузке состояний есть такой фрагмент

 

for k,v in pairs(gulag.Object) do
    if v ~= true and v:best_enemy() ~= nil then
     gulag.alarm_start = game.get_game_time()
     actor:give_info_portion("esc_blockpost_alarm")
     return 2 -- тревога
    end
end

В игре этот фрагмент отрабатывает так, что если актера(ГГ) увидел кто-то из жителей гулага, то гулаг переходит в состояние "тревога". Пробовал так - покажусь комуто из вояк, срабатывает переход в тревожное состояние. Я разворачивался и драпал подальше. И сидел ждал, когда тревога закончится. Так вот травога не выключается даже через несколько игровых часов. Способов возврата гулага в нормальное состояние оказалось всего два:

1 - это перевести его в офф-лайн, тогда отработает v ~= true и тревога вырубится через 5 игровых минут

2 - убить того\тех НПСов у которых актор "запомнился" как best_enemy.

Конкретно к best_enemy - получается что у НПСа этот параметр сохраняется очень долго, судя по всему навсегда, пока НПС жив. Или нет ?

В Справочнике.. нашел:

<таблица объектов not_yet_visible_object> not_yet_visible_objects() -– объекты из памяти, которые видны или собираются стать видны.
<таблица объектов CVisibleObject> memory_visible_objects()–- объекты из памяти, которые видны или были когда-то видны.
<таблица объектов CSoundObject> memory_sound_objects() -– объекты из памяти, которые слышны или были когда-то слышны.
<таблица объектов CHitObject> memory_hit_objects() -– объекты из памяти, которые наносят или наносили повреждения.
void enable_memory_object(game_object*, bool enable) -- активизировать/деактивизировать объект из памяти

похоже, это то что я искал ?

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


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

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

для трех патрульных, что ходят туда-сюда по дороге к блок-посту в работах им прописано

in_rest = "", out_rest = "esc_blockpost_patrol_restrictor"

посмотрел в LE этот рестриктор, получается что ближняя к Деревне новичков его сторона расположена со стороны блок-поста перед бугром, который закрывает Дн от блок-поста. Изменил для пробы последнюю точку пути для этих патрульных, сделав ее заведомо за груницей рестриктора, понаблюдал - доходят до края рестриктора, и топчутся там, пытаясь идти дальше. Затем разворачиваются и идут обратно, продолжая отрабатывать логику. Т.е., похоже, на лицо действие рестриктора.

Затем спровоцировал этот патруль - они начали шмалять по актеру(ГГ), а я начал отступать назад и левее. В результате эти три НПСа (а за ними и остальные потянулись), спокойно проигнорировав границу рестриктора дошли за мной, шмаляя в меня, аж до камней, что возле границы локи, напротив моста возле которого раненый валяется по квесту флешки Шустрого.

Вывод - в состоянии "комбат" эти НПСы-военные плевать хотели на рестрикторы в работах, на которых они находятся в гулаге. В чем дело, как это понимать ? Может приоритет у этих рестрикторов ниже перехода в "комбат" ?

 

 

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


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

Вторая ошибка - в связке xr_combat* + xr_logic + xr_conditions - ее в соседней теме как-то Артос подробно расписывал: получается enemy_object, и сохраняется. Если это был актор - неписи "пожизненно" охотятся на актора (ну, классика жанра, когда стоит толпа, уткнувшись стволами в землю, или, наоборот, в небо. Если это был другой непись или монстр - когда он вдруг уйдет в офлайн или попадет в аномалию - виснем, и через некоторое время вылетаем по "stack overflow".

А каково решение ?

 

в соседней теме как-то Артос подробно расписывал

можно точнее ?

 

Попробую поискать. Вот когда именно попробую - не знаю. Решение - исправлять. dc

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

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


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

 

 


<snd_config>characters_voice\human_01\</snd_config>

а это ты откуда взял ? Я с помощью TextPad поиском по содержимому файлов не нашел эту строку ни в config ни в scripts ни в распакованном спавне.

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


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

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