Каталог статей, Гайды и статьи, Stalker

GUI-элементы


Автор:
  Дата публикации: 21.04.2021, 12:45 · 2 287 · 0
  1. Описание
Что такое gui-элементы? Это вызов статической картинки, на которой имеются активные кнопки, при нажатии на которые можно вызвать различные эффекты.

Итак, начнем:
Первым делом займемся скриптовой прописью: gamedata\scripts
Создаем файл ui_gui_element.script

И заполняем его:
class "ui_test_gui" (CUIScriptWnd)

function ui_test_gui:__init(owner) super()
         self.owner = owner
         self:InitControls()
         self:InitCallBacks()
end

function ui_test_gui:__finalize()
end

function ui_test_gui:InitControls()
self:SetWndRect   (Frect():set(0,0,1024,768))
local xml, ctrl   = CScriptXmlInit(), CUIWindow()
xml:ParseFile   ("ui_gui_elements.xml")
self.main_panel    = xml:InitStatic("test_gui",self)
xml:InitStatic ("test_gui:test_gui_text",self.main_panel)

self.button_exit = xml:Init3tButton ("test_gui:btn_exit",self.main_panel)
self:Register (self.button_exit, "button_exit")

end

function ui_test_gui:InitCallBacks()
         self:AddCallback("button_exit", ui_events.BUTTON_CLICKED, self.OnButton_exit_clicked, self)
end

function ui_test_gui:OnButton_exit_clicked()
        self:HideDialog()
end

function ui_test_gui:OnKeyboard(dik,keyboard_action)
           CUIScriptWnd.OnKeyboard(self,dik,keyboard_action)
           if keyboard_action == ui_events.WINDOW_KEY_PRESSED then
              if dik == DIK_keys.DIK_ESCAPE then
               self:HideDialog()
              end
           end
           return true
end

function run_ui_test_gui(folder)
         folder:ShowDialog(true)
end

Разберем несколько моментов:
xml:ParseFile ("ui_gui_elements.xml") - регистрация файла, в котором происходит пропись окна в игре.

self.main_panel = xml:InitStatic("test_gui",self) - "test_gui" имя секции в .xml

xml:InitStatic ("test_gui:test_gui_text",self.main_panel) - это строка создает любой объект в нашем gui-окне (текст или картинку). Просто дублируем эту секцию, меняя имя "test_gui_text" (имя секции в .xml), чтобы не было совпадений, и тогда мы можем размещать текст в разных точках окна.

self.button_exit = xml:Init3tButton ("test_gui:btn_exit",self.main_panel)
self:Register (self.button_exit, "button_exit")
self:AddCallback("button_exit", ui_events.BUTTON_CLICKED, self.OnButton_exit_clicked, self)
Эти строки регистрируют саму кнопку, так же дублируем по аналогии и меняем имена: "btn_exit" - имя в файле .xml; "button_exit" - имя кнопки в скрипте; "OnButton_exit_clicked" - регистрация эффектов при нажатии, - в этой секции прописываем то, что необходимо (эффекты берутся, либо из _g, либо из xr_effects).

Наша gui-функция называется "ui_test_gui", поэтому если необходимо создать несколько функций в одном файле просто копируем все элементы скрипта и запускаем функцию поиска с заменой, берем имя "test_gui" и ставим в строку поиска, а в строке замены прописываем новое (я специально не учел в имени значение "ui" для того, чтобы разом можно было отредактировать всю функцию без лишних заморочек. Но! вам виднее).

Здесь же. Теперь заходим в файл _g и в конце добавляем функцию:
function run_gui(gui, close_inv)
    if close_inv == true then
  gui:ShowDialog(true)
  game_hide_menu()
  level.show_weapon(false)
    else gui:ShowDialog(true)
end
end

GUI-окно запускаем с помощью функции в xr_effects:
function run_gui_effects(actor, npc)
_g.run_gui(ui_gui_element.ui_test_gui())
end

Со скриптами кончено. Пора заняться конфигами: gamedata\configs\text\rus
В любом текстовом документе создаем пару секций:
<string id="test_gui_text">
    <text>Любой текст</text>
</string>
<string id="button_exist_text">
    <text>Закрыть</text>
</string>

Здесь (gamedata\configs\ui) создаем тот самый файл ui_gui_elements.xml
И заполняем его:
<?xml version="1.0" encoding="windows-1251" ?>
<gui>
    <test_gui x="98" y="87" width="827" height="573">
           <texture x="0" y="0" width="827" height="573">ui\ui_name_texture</texture>
          <test_gui_text x="552" y="16" width="250" height="25">
                    <text font="letterica16" align="l">test_gui_text</text>
                  </test_gui_text>
            <btn_exit x="682" y="532" width="120" height="25">
               <texture>ui_inGame2_Mp_bigbuttone</texture>
                <text font="letterica18">button_exist_text</text>
           </btn_exit>
        </test_gui>

</gui>

Пояснение:
ui\ui_name_texture - имя и местонахождение окна (запомните! в текстурах координаты окна должны быть на значении "0" - так будет проще размещать объекты). И чтобы это окно появилось в центре экрана, решаем задачку: (1024-827):2 и (768-573):2 - соответственно, получаем новые координаты: x="98" y="87". Значения "1024" и "768" постоянные, а вот ширина и высота уже зависят от размеров окна.
!Желательно, чтобы размеры самого файла .dds были 1024х1024

Теперь регистрируем наш текст. Чтобы вычислить координаты для текста достаточно будет программы Paint.NET: открываем текстурку окна, выделяем размеры 250х25 (размеры окна для текста могут быть любыми в зависимости от объема текста) и передвигаем по площади окна, выбирая место, где должен будет размещаться текст; полученные координаты (находятся они в пункте "Позиция") прописываем в этой строке:
Наша кнопка регистрируется также. Саму текстуру кнопки регистрируем по необходимости ("ui_inGame2_Mp_bigbuttone" - является игровой текстурой, дальнейшие действия показаны для наглядной прописи своих собственных кнопок): gamedata\configs\ui\textures_descr
Любой файл, либо создаем свой:
<w>
    <file name="ui\ui_name_texture_button">
     <texture id="ui_inGame2_name_button_closet_e" x="636" y="0" width="15" height="15" />
     <texture id="ui_inGame2_name_button_closet_h" x="636" y="0" width="15" height="15" />
     <texture id="ui_inGame2_name_button_closet_t" x="636" y="0" width="15" height="15" />
     <texture id="ui_inGame2_name_button_closet_d" x="636" y="0" width="15" height="15" />
   </file>
</w>

Обязательно прописываем в четырех экземплярах с этими буковками ("e" - текстура в обычном режиме; "h" - при наведении курсором; "t" - при нажатии; "d" - кнопка в заблокированном виде), но при использовании кнопки буквы эти не учитываются, то есть будет выглядеть так:
<texture>ui_inGame2_name_button_closet</texture>

Необходимые подробности:

1. Добавляем текст на экран в определенный момент. Добавляем в регистр:

self.form_text = xml:InitStatic ("test_gui:section_text",self.main_panel)

Например, при нажатии кнопки, запускаем текст:

self.form_text:TextControl():SetText(game.translate_string("see_text"))

В .xml выглядит так:
<section_text x="110" y="168" width="115" height="25">
<text font="graffiti32" r="0" g="211" b="24" a="255" align="c"></text>
</section_text>

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

self:register_element(xml,"section_text") - регистрируем новую секцию в .xml

Добавляем новую секцию:
function ui_test_gui:register_element(xml,element_name)
   self[element_name]=xml:InitStatic("test_gui:"..element_name,self.main_panel)
end

И запускаем сам текст:

self.section_text:TextControl():SetText(game.translate_string("see_text")) - ссылка на текст.

В .xml секция текста будет выглядеть так:
<section_text x="282" y="212" width="304" height="100" complex_mode="1">
<text font="letterica16" align="c"></text>
</section_text>

3. Также в gui-скрипте можно использовать стандартные функции как при нажатии кнопки, так и в главной секции регистра. Например:
if has_alife_info("actor_info_have") and/or (not has_alife_info("actor_info_have")) then - проверка на наличие и/или отсутствие инфопорции.
db.actor:give_info_portion("actor_info_have") - выдать инфопорцию.
disable_info("actor_info_have") - удалить инфопорцию.
self.button_exit:Enable(true/false) - включить/отключить кнопку.
self:HideDialog() - закрыть gui-окно.
xr_sound.set_sound_play(db.actor:id(), "track_une") - запуск звука.
end

Звук регистрируем таким образом:
[track_une]
type = actor
npc_prefix = false
path = music\name_music
shuffle = rnd
idle = 1,1,100
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

BelarusianChinese (Traditional)CzechDanishDutchEnglishFrenchGermanIndonesianItalianJapaneseKoreanLatvianPolishPortugueseRussianSpanishThaiTurkishUkrainian

Категории

Чат доступен только для зарегистрированных пользователей. Войдите в аккаунт для общения в чате.

Лента комментариев

мод удален с сайта на который ведет ссылка на скачивание
Сегодня, 15:04
Попробуйте через ВПН скачать. Мне помогло
Сегодня, 13:56
Эти моды уже сть на этом сайте, или зайдите на сайт LunarBritney, у неё найдете
Сегодня, 12:45
Если выбрать своего второго персонажа в семье, когда бизнес закрыт, то можно пополнить наличее товара за 175, добавляет все таки реализма. Полезный мод, так же моя симка купила себе наряд с этого же манекена в магазине своего мужа)
Сегодня, 12:41
https://disk.yandex.ru/d/DWT72RxBga1iLg
Сегодня, 12:06
здравствуйте, а можно версию 1.110 (v184) на другом хосте? такая же проблема как и у человека выше
Сегодня, 11:31
Добрый. Вот эту: [Для 1.115-1.115] WickedWhims 186.7 (27.05.2025) (последняя патреон версия) 
Сегодня, 11:22
Там вроде бы у этого автора есть моды: 1_ добавляет ещё + 3 слота деятельности для малого бизнеса. 2_ Больше посетителей для малого бизнеса. 3_Больше сотрудников малого бизнеса. Можете выставить на сайте эти моды, а то я их найти не могу.
Сегодня, 11:10
А кто-то знает когда обнова будет?
Сегодня, 08:41
Плохо, что нет автономности..
Сегодня, 07:05
бред от ИИ, забейте)
Сегодня, 01:19
https://disk.yandex.ru/d/tMUNmcj77CibTw
Вчера, 21:21
На 113 будет работать? Или таки придется обновляться? 
Вчера, 19:25
Работает и с персонажами из «Снежные просторы как».

А что вот это значит? 
Вчера, 18:43
Большое спасибо! Heart 
Вчера, 18:39
Добрый день. Перезалейте, пожалуйста, публичную версию от 27.05.25 на нормальный файлообменник. Не скачивается никак...
Да собственно, вообще никакие версии не скачиваются
Вчера, 18:11
Здравствуйте! Это временная проблема. Какую версию пытаетесь скачать? Я перезалью на другой хост.
Вчера, 16:38
Добрый день. А подскажите, пожалуйста, почему может не скачиваться мод? Он уходит в загрузки и всё. Сначала пишет, что грузиться будет 15 часов, а потом всё по нулям. Раньше всё в порядке было(
Вчера, 15:23
Файл разблокировки работы для подростков не рабочий (видимо от старых версий мода лежит). Обновленный офис "RedAppleNet Office NO CC" от 2025 г. тоже малость корявый. Пришлось все лампочки над дверьми выбить, чтобы симы могли посещать эти помещения.
Вчера, 14:30
Файл не битый. Проблема в скором времени должна исчезнуть. Из РФ сложно что уже скачать, тестируют блокировки.
Вчера, 13:27
Обновите карту Эвергрин-Харбор от 25.02.2025.
Вчера, 11:37
Загрузка начинается и останавливается на вечно

Да и по основной ссылке пакетом тоже самое. Файлы по отдельности норм
Вчера, 11:31
Не качает [Kritical]DreamsOfSurrender_1_20a_pat.package (04.06.2025) 

Толи файл битый, толи что. 

Остальное все скачивает норм
Вчера, 11:29
Альтернативная ссылка на скачивание: https://disk.yandex.ru/d/Rhx2OrjUe1WBfA
По всей России сейчас наблюдаются перебои с интернетом, недоступны многие сервера.
Вчера, 07:36
Такая же ерунда. Пробовала еще бабушкину книгу скачать, висит и сбрасывает загрузку. Не могу понять в чем проблема. С другими загрузками нет такой ерунды
12 июня 2025 23:14
Добрый день! Подскажите пожалуйста, почему не качается последняя версия [1.115-1.115] Basemental Drugs 7.18.230 (28.05.2025) (NEW PATREON)? висит загрузка архива, после выдаёт ошибку.
12 июня 2025 21:13
Хоть убей, ничего из мода не работает. Скачиваю уже не первый раз, устанавливаю правильно. Но ничего не работает, нет никаких взаимодействий и даже упоминания на этот мод в игре. В чем может быть проблема?
12 июня 2025 16:46
Здравствуйте! Скачивание прошло без проблем. Вероятно, проблема на вашей стороне из-за текущих трудностей с магистральным провайдером в РФ. В ожидании решения можно воспользоваться VPN или прокси-сервером через расширение Censor Tracker (либо альтернативу).
12 июня 2025 16:26
ничего не получается скачать с данного сайта, все время "возобновление скачивания", интернет работает, с других сайтов все скачивается

12 июня 2025 15:10
у меня почему-то нет черты "опрессор"  Uncertain 
12 июня 2025 00:09
Да, конечно
https://modsfire.com/v9v7W45Smb46202

11 июня 2025 21:36
У меня всё нормально с этим, так что WW тут скорее всего ни при чём.

11 июня 2025 21:24
Есть возможность перевод выложить на другом сайте, не на https://simfileshare.net ? 
11 июня 2025 20:49
мод выдаёт ошибку на версии WickedWhims 186.6 (07.04.2025)
11 июня 2025 20:29
Обновите пак. На Кемоно выложили обновление от начала июня
https://kemono.su/patreon/user/21351572/post/28057911
11 июня 2025 20:25

Команда сайта


Администратор

Редактор