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

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


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

Где хранится информация о загрузочных экранах локации? Как сделать меняющиеся intro?

Добавлено  Купер,

Перемещено.

Осенний каламбур. Сентябрь - лето.

img.php?nick=Balavnik&sert=2&text=t6

Ссылка на комментарий
20 часов назад, UriZzz сказал:

Как указывать игровое время? 3*60 = 120 минут игрового времени? Или тут ошибка/опечатка?

Опечатка. Первым параметром в данной функции идут игровые секунды, поэтому 3*60 - это 3 (три) игровые минуты.


 

10 часов назад, UriZzz сказал:

Но почему схема проигрывается дважды?

Таймер start_game_timer( XXX, "m_amk_weather.blowout_main" ) с разными значениями тайминга XXX запускается и в blowout_start() и в самой blowout_main() - тут не может быть пересечений? Больше ни за что взгляд не цепляется. Ну разве что сам выброс может длиться суммарно почти 30 минут, и тогда следующее срабатывание мультитаймера практически накладывается на конец выброса.

Я бы на твоём месте сделал табличку значений переменной  "blowout", напротив каждого из них указал прошедшее с начала выброса время, а также какой длительности запускается на данном шаге таймер. Чтобы наглядно посмотреть на предмет пересечений.

 

Update: Ну да, так и есть, если я правильно подсчитал. Все шаги выброса срабатывают у тебя последовательно и без пропусков, при этом сумма таймеров в шагах с 1 по 6 даёт ровно 30 игровых минут. Ровно столько, через сколько срабатывает мультитаймер запуска следующего выбора.

  • Спасибо 1
  • Нравится 2
Ссылка на комментарий
15 часов назад, Balavnik сказал:

Где хранится информация о загрузочных экранах локации?

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

x_ray.cpp.

void CApplication::Level_Set(u32 L)
{
    if (L>=Levels.size())    return;
    Level_Current = L;
    FS.get_path    ("$level$")->_set    (Levels[L].folder);
    string_path                    temp;
    string_path                    temp2;
    strconcat                    (sizeof(temp),temp,"intro\\intro_",Levels[L].folder);
    temp[xr_strlen(temp)-1] = 0;
    if (FS.exist(temp2, "$game_textures$", temp, ".dds"))
        hLevelLogo.create    ("font", temp);
    else
        hLevelLogo.create    ("font", "intro\\intro_no_start_picture");
    CheckCopyProtection        ();
}

 

15 часов назад, Balavnik сказал:

Как сделать меняющиеся intro?

Один из самых простых вариантов здесь. Суть идеи: вместо одной статической картинки используются динамические (в виде .seq элементов). Рабочие ссылки и возможные "подводные камни" там же в теме.

  • Полезно 1
Ссылка на комментарий
1 час назад, Купер сказал:

Похоже, вычитывается непосредственно движком при загрузке уровня.

Возможно имя да, а вот размер, хе-хе, зашит вообще в экзешник игры, насколько я помню, нужен отдельный + ещё движковая правка...

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

@Капрал Хикс , размер - да. Тоже движком. Там даже в теме есть об этом. Собственно, оно же не зря в "старичке" XRE появилось и дальше пошло :biggrin::

Скрытый текст
;============================================
;==========ПОЛНОЭКРАННЫЕ ЗАСТАВКИ============
;=============FULLSCREEN INTROS==============
;============================================
		;0x004D8F24 16
		;0x0041302A 5
		;0x0041399B 5
		;0x004135F4 5
		;0x00413610 6		

 

  • Полезно 1
Ссылка на комментарий
12 часов назад, Kirgudu сказал:

Ну да, так и есть, если я правильно подсчитал. Все шаги выброса срабатывают у тебя последовательно и без пропусков, при этом сумма таймеров в шагах с 1 по 6 даёт ровно 30 игровых минут. Ровно столько, через сколько срабатывает мультитаймер запуска следующего выбора.

Именно так. Меня ввёл в заблуждение пример использования циклического таймера. Сейчас всё в норме, вроде.

  • Нравится 2

 Моя нычкаНычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

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

колееги, есть вопросец

 

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

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

if gulag_type == "gen_vnz_lager" then
        return npc_community == "monolith"
    end

есть ли возможность по одному поршню менять группировку, которая может заселять лагерь, а после возвращать прежнюю?

Лучше сделать мод с 0, чем пытаться залатать багованный.

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

В какой момент Толик выводится в онлайн? В gulag_escape конкретного места не нашёл.

Осенний каламбур. Сентябрь - лето.

img.php?nick=Balavnik&sert=2&text=t6

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

@Balavnik

Скрытый текст
--* работы
    if type == "esc_corps" then       
        t = { section = "logic@esc_corps_wounded",
            idle = 4,
            prior = 10, state = {0},
            online = false,
            in_rest = "", out_rest = "",
            predicate = function(obj_info)
                            return obj_info.name == "esc_vagon_wounded"
                        end
        }
        table.insert(sj, t)
        t = { section = "logic@esc_corps_wounded",
            idle = 0,
            prior = 10, state = {1},
            online = true,
            in_rest = "", out_rest = "",
            predicate = function(obj_info)
                            return obj_info.name == "esc_vagon_wounded"
                        end
        }
        table.insert(sj, t)
    end

--* состояние
    if type == "esc_corps" then
        return function(gulag)
            if has_alife_info("tutorial_wounded_start") then
                return 1
            else
                return 0
            end
        end
    end

 

  • Полезно 4
Ссылка на комментарий

Цепочка вызовов: [xr_gulag.script] gulag:initialize –> gulag_tasks.loadStates –> load_states по каждой отдельной локации.

 

Как выполняется обновление состояния уже созданного лагеря, где Толик пребывает в оффлайне?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

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

if type == "esc_corps" then
        return function(gulag)
            if has_alife_info("tutorial_wounded_start") then
                return 1
            else
                return 0
            end
        end
    end

 

След от кругов на воде - это тоже след (с)

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

Я нашел только один вызов, при создании лагеря. Где именно у лагеря выполняется апдейт?

В движке упоминаний load_states или loadstates нет – по крайней мере, в [xrGame].

  • Согласен 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Norman Eisenherz Предложение есть -  вставить туда отладочный вывод. И будет, как минимум, понятно, с какой частотой обновляется/не обновляется проверка состояния. Один раз оно вызывается, или все же нет.

След от кругов на воде - это тоже след (с)

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

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

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

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

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

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

Войти

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

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

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