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

GUI-элементы


Автор:
  Дата публикации: 21.04.2021, 12:45 · 2 323 · 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

Категории

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

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

Оба, я скачала только от Stokman и навыки были на английском, с двумя переводами всё как надо.
Сегодня, 21:35
Одно скачать нужно, это один и тот же файл, просто на разных обменниках )
Сегодня, 21:08
подскажите, а вы вот это всё скачали и просто в the sims 4 вставили? или что-то одно скачать, разархив-ать и вставить в папку? 


Сегодня, 20:44
Ого... Надо тестить))) (любимые вайбы мода из Симс 2 - младенцы на гриле 💞 ❤️ )
Сегодня, 18:37
Ура. А то они надоели
Сегодня, 15:31
Интересно мод обновится? Феи вышли а мод ни как не обновляют. Не сломает он игру и нынешних фей, ведь он обновлялся до выхода дополнения?  Andy 
Сегодня, 14:35
Здравствуйте, если ли прямые ссылки на скачивание данных комплектов? 
Сегодня, 14:09
пришлось установить Волшебство Природы вручную (https://rentry.co/the-sims-4-dlc-only-1), и вставить в папку игры. А проблема так и осталась, к сожалению(
Сегодня, 14:05
Я как раз сегодня хотел начать историю про сумасшедшего ученого уже вчера построил подземный бункер под домом на участке которого лишь хлипкий домик.. пойду тестить мод..
Если что "ручная пила" находится в увлечения и навыки либо просто вбить этот текст.
Сегодня, 14:00
вы решили? у меня то же самое! 
Сегодня, 13:26
Боже! Спасибо!!! Heart 
Сегодня, 13:09
привет, ребят подскажите будет ли работать WW в игре новом обновлении или нужно ждать обновление WW?
Сегодня, 12:46
Супер! за это огромное спасибо. Не нужно больше этого головняка, ведь у натуропата не всегда есть лекарство от той или иной болячки. А ждать когда у натуропата появится нужное лекарство или самому постояно каждому симу качать этот навык для самолечения тоже не вариант.
Пойду тестировать мод.
Сегодня, 11:38
ооо вкуснятину завезли))) Wink 
Сегодня, 10:56
да этими новыми болезнями они испоганили всё дополнение!
Сегодня, 10:30
Файл добавлен в корзину, нет возможности скачать
Сегодня, 10:14
Восстановил, попробуй сейчас https://modsfire.com/l5ibB9lp48c494C
Сегодня, 10:03
Здравствуйте, может кто-то сталкивался с данной проблемой? Все ДЛС обновлены и ВПН работает. Подскажите, пожалуйста, в чем проблема?
Сегодня, 09:54
Спасибо, добавим
Сегодня, 09:50
ахах) спасибо, "обнадёжили")) Ладно, нет - так нет) Спасибо за объяснение, а то я давно в танке! Whistling 
Вчера, 23:52
Автор мода Turbodriver при отказе от данной функции в WW сослался на проблемы с API вызванные обновлениями Windows. Он не исключил возможности поиска альтернативного решения этой проблемы, но для этого потребуется больше времени.

p.s. Так что пользователи на Win могут понадеятся, что такая возможность вернется в мод. А на OSX хоткей никогда и не работал, так что не ждите Joyful
Вчера, 23:43
Вышла публичная версия 2025.4.0, обновите, пожалуйста!
Вчера, 22:57
В настройках WW этой симки посмотрите, что у ней настроено в части гениталий.
Похоть - настройки персонажа - анатомия и одежда - гениталии.
Вчера, 22:37
No Ailments от того же автора, и заодно Cure Ailment with Medicine.
Админы, по-моему, оба мода заслуживают отдельных топиков на форуме.
Вчера, 22:35
Эх, не хватает мода, чтобы этим карлосанам отключить вампирское нападение за эмоциями. Симка за час занятий йогой, пережила девять нападений. Чуть ласты не двинула.
Вчера, 21:19
Поставила обновленную патрион версию, игра грузилась минут 10, и до кучи слетело оформление. Вернула прошлую версию публичную, игра запустилась шустро, но оформление осталось поломанным.
Вчера, 21:15
Для тех у кого не "нажимаются" подростки: в архиве два файла "adeepindigo_gameplaymods_DynamicTeenLife_MoreAfterSchoolActivities_Tryouts" и "adeepindigo_gameplaymods_DynamicTeenLife_MoreAfterSchoolActivities_NoTryouts
"
один необходимо удалить.
Вчера, 20:56
Это печально(( Не знаете, совсем убрали или "в ремонте" может?(
Вчера, 20:56
ого, спасибо большое, помогло!!
Вчера, 20:44
а что делать, если апдейтер работает, в dlc-toggler новый набор помечен галочкой, он по идее есть, но в игре отсутствует?
Вчера, 20:14
Этой функции и настройки больше нет в WW с версии эдак 186.2/184c
Вчера, 19:56
Да, хорошо что в обычном облике ничего не поломало. Если скрывать оккультную форму то все работает нормально
Вчера, 19:10
Как положить пролеченную траву в зип пакет? Сим берет всю банку и больше никаких пунктом для выбора нет 
Вчера, 19:07
Тоже самое. Вы перекачивали перед распаковкой? Может он в файлообменнике поврежден? Друга просил скачать и мне скинуть, тоже самое с архивом, и через 7zip. С "[Noir] True Body V2 - 2025-05-21" всё в порядке, распаковывается этими же архиваторами.
Вчера, 18:49

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


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

Редактор, переводчик

Переводчик