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

Уроки по модостроению


Zeka1996Korneev

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

(изменено)

Ставим новые метки в ПДА [ЗП]
Дело было как ни странно, днём... Появилась необходимость поставить метки переходов с одной локации на другую - покопавшись малость в теме "ковырялки ЗП" увидел, что до меня были такие попытки создания меток, но по-крупному копаться в скриптах я не люблю по причине неопытности в скриптах - решил сделать сам.
 
Для начала идём в pda.script:
После таблицы под названием sleep_zones_tbl добавим ещё одну, должно получиться так:

local sleep_zones_tbl =
{
    {target = "zat_a2_sr_sleep_id",        hint = "st_ui_pda_sleep_place"},
    {target = "jup_a6_sr_sleep_id",        hint = "st_ui_pda_sleep_place"},
    {target = "pri_a16_sr_sleep_id",    hint = "st_ui_pda_sleep_place"},
    {target = "escape_podval_sr_sleep_id",    hint = "st_ui_pda_sleep_place"},
    {target = "garbage_base_sr_sleep_1_id",    hint = "st_ui_pda_sleep_place"},
    {target = "garbage_base_sr_sleep_2_id",    hint = "st_ui_pda_sleep_place"},
    {target = "garbage_dolg_zastava_sr_sleep_id",    hint = "st_ui_pda_sleep_place"},
}       -- это таблица отметок спального места, её мы не трогаем
 
local level_changer_tbl =
{
    {target = "perehod_darks_esc",        hint="perehod_darks_esc_name"},
    {target = "id_перехода",                    hint="надпись над переходом"},
}     --А это наша новая таблица, содержащие переходы и надписи над ними

 

 
После этой добавки идём в самый конец файла и добавляем саму функцию показания перехода

function fill_level_changers()
    for k,v in pairs(level_changer_tbl) do
        local obj_id = get_story_object_id(v.target)
        if(obj_id) then
            level.map_add_object_spot(obj_id, "level_changer_up", v.hint)
        end
    end
end

 


Где, ui_inGame2_icon_level_changer - имя значка нашего перехода, можно поставить из оригинальной игры, но я создам свой
Итак, теперь нам нужно создать вызов нашей функции - далеко ходить не будем (ибо лень :russian_ru: ): находим функцию fill_primary_objects и добавляем вызов нашей: 

function fill_primary_objects()
    for k,v in pairs(primary_objects_tbl) do
        local obj_id = get_story_object_id(v.target)
        if(obj_id) then
            level.map_add_object_spot(obj_id, "primary_object", v.hint)
        end
    end
    change_anomalies_names()
    fill_sleep_zones()
    fill_level_changers() --Вот вызов нашей функции
end

 


Со скриптами мы закончили, теперь нужно создать наш переход и текст к нему.
Для того, чтобы наш переход отображался нужно придать ему id, для этого создадим его секцию в all.spawn, но с одной добавкой:

[8057]
; cse_abstract properties
section_name = level_changer
name = perehod_darks_esc
position = -618.825927,-2.623994,-380.298706
direction = 0,0,0
cse_abstract__unk1_h16 = 0x1
; cse_alife_object properties
game_vertex_id = 1789
distance = 0
level_vertex_id = 404
object_flags = 0xffffff3e
custom_data = <<END ;Вот тут и нужно добавить его id, а далее - как раньше
[story_object]
story_id = perehod_darks_esc
END

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 6
; cse_alife_space_restrictor properties
restrictor_type = 3
; cse_alife_level_changer properties
dest_game_vertex_id = 1407
dest_level_vertex_id = 593260
dest_position = 363.344421,15.172136,-39.722797
dest_direction = 0,0,0
dest_level_name = l01_escape
dest_graph_point = start_actor_01
silent_mode = 1
; se_level_changer properties

 


Идём в st_land_names.xml и добавляем в конец файла описания наших переходов:

<!-- Переходы -->
<string id="perehod_darks_esc_name">
        <text>На Кордон</text>
</string>
<!-- Переходы -->

 


 
1733042.jpg - Результат
 
Собственно всё, таким образом можно создать не только отметки переходов, но и для чего-другого с разными иконками (в данном случае, ну никак иконки "спального места" и "интересного места" под переход не подходили) - допустим, для любителей "читерки", можно добавить отметку к укрытиям (добавив в секцию укрытия в all.spawn строки присвоения id) или чего-другого, это зависит от потребности.

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

Работы на Artstationhttps://www.artstation.com/artist/stalker_lom

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


Ссылка на сообщение
(изменено)

Добавление новых кнопок в ПДА (ЗП)

Примечание: Сей "фокус" можно проделывать только с правками от проекта X-Ray extensions, а конкретно, с правками ПДА.

 

Итак, всё-таки захотели мы создать вкладку в ПДА. Но не знаем как. Проблемы, согласен. Вот некоторая часть решения этой проблемы:

1. Заходим в pda.xml, ищем таблицу:

<tab x="443" y="57" width="468" height="27"><button x="0" y="0" width="172" height="27" id="eptTasks" hint="pda_btn_quests_hint" frame_mode="0">    <text align="c" vert_align="c" x="0" y="0" width="157" height="27" font="letterica16">pda_btn_quests</text>    <texture>ui_inGame2_pda_button</texture>    <text_color>        <t r="255" g="255" b="255"/>        <d r="255" g="255" b="255"/>        <e r="200" g="200" b="200"/>        <h r="170" g="170" b="170"/>     </text_color></button><button x="148" y="0" width="172" height="27" id="eptRanking" hint="pda_btn_ranking_hint" frame_mode="0">    <text align="c" vert_align="c" x="0" y="0" font="letterica16">pda_btn_ranking</text>    <texture>ui_inGame2_pda_button</texture>    <text_color>        <t r="255" g="255" b="255"/>        <d r="255" g="255" b="255"/>        <e r="200" g="200" b="200"/>        <h r="170" g="170" b="170"/>    </text_color></button><button x="296" y="0" width="172" height="27" id="eptLogs" hint="pda_btn_logs_hint" frame_mode="0">    <text align="c" vert_align="c" x="0" y="0" font="letterica16">pda_btn_logs</text>    <texture>ui_inGame2_pda_button</texture>    <text_color>        <t r="255" g="255" b="255"/>        <d r="255" g="255" b="255"/>        <e r="200" g="200" b="200"/>        <h r="170" g="170" b="170"/>    </text_color></button></tab>

2. Для лучшего понимания, разберём это дело по блокам:

Это блок является "колбой", в которой находятся кнопки в ПДА:

<tab x="Смещение колбы по Х" y="Смещение колбы по У" width="Ширина колбы" height="Высота колбы"></tab>

А этот блок как раз и является кнопкой:

<button x="Смещение кнопки по Х" y="Смещение кнопки по У" width="Ширина" height="Высота" id="Уникальное Айди (id) кнопки" hint="Подсказка, всплывающая при наведении на кнопку" frame_mode="0">    <text align="c" vert_align="c" x="0" y="0" font="letterica16">Ссылка на текст-описание кнопки</text>    <texture>Имя текстуры кнопки</texture>    <text_color> <!-- Цветовые настройки текста в кнопке -->        <t r="255" g="255" b="255"/>        <d r="255" g="255" b="255"/>        <e r="200" g="200" b="200"/>        <h r="170" g="170" b="170"/>    </text_color></button>

3. А теперь приступим к созданию новой кнопки:

 

В колбе, содержащей кнопки, нужно изменить параметр "Смещения по Х", отняв от значения число, равное значению "Смещения кнопки по Х" от ВТОРОЙ кнопки:

<tab x="296" y="57" width="468" height="27"></tab>

А так же, нужно к параметру "width="468"" (и последующему значению, если добавляете больше одной кнопки) прибавить число 172, которое равно ширине кнопки. Первый пункт делается для того, чтобы новая кнопка не "налезала" на другие части ПДА (Часы, другие кнопки и т.п.), а второй, чтобы кнопка была в "колбе" и была активной, то есть, доступной для нажимания.

Делается это для того, чтобы новая кнопка не "налезала" на другие части ПДА (Часы, другие кнопки и т.п.).

 

Далее, создадим саму кнопку (в данном случае для энциклопедии):

<button x="444" y="0" width="172" height="27" id="eptEncyclopedia" hint="pda_btn_encyclopedia_hint" frame_mode="0">    <text align="c" vert_align="c" x="0" y="0" font="letterica16">pda_btn_encyclopedia</text>    <texture>ui_inGame2_pda_button</texture>    <text_color>        <t r="255" g="255" b="255"/>        <d r="255" g="255" b="255"/>        <e r="200" g="200" b="200"/>        <h r="170" g="170" b="170"/>     </text_color></button>

Всё, кнопка создана и функционирует, её название некоректно отображается ("pda_btn_encyclopedia" вместо "Энциклопедия"), исправим это.

4. Идём в файл configs\text\rus\ui_st_pda.xml и добавим две секции в самый конец:

<string id="pda_btn_encyclopedia">    <text>Энциклопедия</text></string><string id="pda_btn_encyclopedia_hint">    <text>Открыть энциклопедию</text></string>

(Здесь, для энциклопедии, а вам нужно вписать ссылку на свою кнопку и её название по образцу).

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

Вот объяснение этого явления от тов. @Malandrinus:

 

Текущее содержимое окна при активации свой кнопки не убирается, поэтому придётся закрывать его своим содержимым с помощью помещения диалога поверх окна. К сожалению, получение текущего окна в ЧН и ЗП стало невозможно и пока решения этой проблемы не видно.

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

P.S. Вот так это будет выглядеть:

2082991.jpg

 

P.P.S. Добавлена информация, из за отсутствия которой не функционировала кнопка.

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

Работы на Artstationhttps://www.artstation.com/artist/stalker_lom

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


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

Создание энциклопедии для ПДА в ЗП.
Примечание: Аналогично предыдущему уроку, энциклопедию реализовать можно только при помощи проекта X-Ray extensions. Для того, чтобы кнопка энциклопедии появилась, нужно выполнить мой предыдущий урок "Добавление новых кнопок в ПДА (ЗП)".
Ссылка на готовую энциклопедию+видеодемонстрация:  http://rghost.ru/47774542

 

Как мы уже знаем из слов тов. malandrinus, "родные" для ПДА вкладки нам нужно будет закрывать собственной. Для этого нам нужен свой GUI и нам нужна "ловля" инфопоршня при открытии вкладки. Мастерить велосипед самому мне не понравилось: хоть уроки по GUI есть, но мне показалось, что с моим опытом я могу сделать только несколько окошечек, не более. Про вкладку в ПДА, которая соответствовала бы стилю нашего электронного друга я вообще даже не мечтал, поэтому взял наработки тов.

DEXXX (записная книжка в ЧН) и Geonezis (Энциклопедия оружия, на основе предыдущей работы).

 

 

Скачиваем готовую энциклопедию, там есть пометки, для понимания, как это всё работает, тут объясню чуть подробней.

 

Адаптация:

С другими модами (и с оригиналом) конфликтуют только два скрипта: _g.script и bind_stalker.script. В _g.script добавлены глобальные функции:



function run_gui(gui, close_inv) --Функция для запуска GUI, в нашем случае, энциклопедии
    if close_inv == true then
        gui:ShowDialog(true)
        game_hide_menu()
        level.show_weapon(false)
    else 
	    gui:ShowDialog(true)
    end
end
function GetString(id) --Функция для инициализации имён
	if not(id) then return "" end
	return game.translate_string(id)
end

А в bind_stalker.script добавлен вызов скрипта, который отлавливает инфопоршень при открытии вкладки энциклопедии:



function actor_binder:update(delta)
gui_callbacks.on_info() --Вызов нашего "Ловчего поршней"
object_binder.update(self, delta)
...

Всё, адаптация пройдена - должна функционировать.

 

А теперь - как этой с энциклопедией работать.

Допустим, мы решили добавить нового мутанта - Тарк (Tark). Делается это так:

Добавляем этого мутанта в таблицу мутантов, что в скрипте gui_main.script:



local pda_enc_mutants={
    "Mutant_boar",
    "Flesh",
    "Pseudo_flesh",
"Tark", --Вот он
"Bloodsucker",
...

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

Текстура должна иметь следующее имя: ui_enc_#Имя мутанта# .

Текст с описанием: enc_#Имя мутанта#.

Название будет равно Имени мутанта.
А инфопоршень будет "величаться": #Имя мутанта#_info.

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

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

Парт-текстура, по умолчанию, читается из файла ui_pda_encyclopedia.dds. Если хотим добавить иконку, то нужно вставить в файл иконку (по умолчанию, она должна быть 165 на 107 пикселей, иначе будет растянута\сплющена), измерить её координаты по аналогии с прудыдущими и задать имя, как я уже описал выше.

Описание и название указывается в фале configs\text\rus\st_notepad.xml. В принципе, можно вставить в другой файл, но лучше соблюдать порядок - вам же будет лучше.

 

Всё, на этом я удаляюсь - пользуйтесь и указывайте авторов. Доброй Зоны, сталкеры.

 

  • Спасибо 2
  • Нравится 2

Работы на Artstationhttps://www.artstation.com/artist/stalker_lom

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


Ссылка на сообщение
17 часов назад, Den “Angry Wolf” Koslov сказал:

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

В дополнении к тому, что я вам черканул в ЛС :)
Сам я правку не смотрел, но, предполагаю, что в движке подправились данные о количестве правок и, по большому счёту, всё. Эти правки очень старые. Может быть, сегодня уже есть что-то посерьёзнее увеличения количества (а не функционала) вкладок, но я не знаю - давно уже этой темой не интересовался.

Работы на Artstationhttps://www.artstation.com/artist/stalker_lom

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


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

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

AMK-Team.ru

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