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

GUI-элементы


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

Категории

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

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

Скоро обновлю пак. Ожидайте +- на следующей недели обновление. 
И пока не поздно, посоветуйте пожалуйста программу новую для проверки дубликатов. Я хочу от них избавиться, потому что как показала практика, с программой которой я это удаляю - работает не полноценно. 

Я не могу избавиться от как Вы говорите кучу "не нужных DLC" объектов, секстинга и т.д., Ребята, они все идут вместе с анимацией. Убирая их, я рискую поломать весь пак. Если Вы все такие умные, попробуйте создать свой пак. Это не так просто, как кажется на самом деле. А если я всё буду сортировать по папкам, я рискую создать ещё больше дубликатов, потому что каждый раз, анимации обновляются как и объекты!  Crying 

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

К слову, в новом паке будут новые анимации  Angel
Сегодня, 11:49
МС все эти штуки выделывает с большим азартом. Такую кашу намешает, никакая Маша с Медведем не переварят...
Сегодня, 11:11
да не, там мой косяк был, просто уже исправил
Сегодня, 02:58
явно что-то не то делаете) скачиваются все карты - в зип файле 29 элементов, и одна замена карты явно 100 мб весить не может) я скачала, проверила - все топчик, все карты на месте  Sideways 
Сегодня, 00:52
Andy
Сегодня, 00:02
Updated
Вчера, 22:46
По ссылке "Скачать все замены карт" скачивается только Nordhaven, а не все карты. Поправьте, пожалуйста!
Вчера, 22:35
Will you be able to make the mod update available to us or not? 10.8.8
Вчера, 22:07
хоть и автор этого забросил эту графику освещение игре симс 4 он и сейчас хорошо работает без проблем
Вчера, 20:29
Это лишнее
Вчера, 15:59
Так а где перевод? У Оригамики просто папка с игрой.
Вчера, 08:53
Добавил альтернативу
Вчера, 01:09
А у всех норм работает simfileshare? уже которую неделю не могу скачать от туда ничего. Скорость падает до 0 и прерывается. И ничего не скачивается. Есть аналог от куда рус можно скачать?
23 мая 2025 23:49
Поправил)
23 мая 2025 21:16
Коллеги, кто попробовал? Работает только в новых сохранках? Или старую тоже порадует?

23 мая 2025 18:04
Назад в будущее) Ещё 23 число, а мод уже от 25 на публичке)
23 мая 2025 18:00
Доброго здравия! Да, эти два мода конфликтуют. Но в PlantSim Lives нет надобности, его функции включены и в этот мод тоже
23 мая 2025 16:39
Всем привет!
Русификатор будет?
23 мая 2025 12:49
Вроде, такое от Alchemist's Kinky Expansions.

23 мая 2025 01:08
🤷🏻‍♀️ но у меня кроме него ничего такого плана не установлено. Это может с анимациями добавлено?
22 мая 2025 23:59
Код разработчика testingcheats true и код headlineeffects on 
Удачи!
22 мая 2025 19:12
Что-то у меня эта замена не фурычит...
22 мая 2025 18:53
Отличные писюны! и презики работают! Спасибо!
22 мая 2025 16:53
Здравствуй , возникла такая же проблема. Вы решили ее ?
22 мая 2025 15:16
А WW тут причем? Не из него черты и функционал
22 мая 2025 15:12
пока только частичный, нужно просто 2 перевода установить и все будет переведено. 
22 мая 2025 14:20
изменила в txt файле, ничего в игре не случилось, всё руками продолжаю назначать
22 мая 2025 10:28
Есть ли полный перевод на патреон-версию? Или есть только частичный? 
22 мая 2025 02:04
подскажите, пжлст, жизненная цель "папина радость" - как назвать персонажа папочкой? Черты характера поставила обоим персонажам, но в круговом меню ничего не могу найти по поводу этого.
22 мая 2025 01:10
Новых строк нет
21 мая 2025 20:45
            Latest Changes         
                     v2.2.9a 05/16/2025         
        
  •             
  •                 Fixed Custom Tattoos being removed from occult sims. If you lost them, you will need to readd them unfortunately. Keep in mind maxis doesn't support custom tattoos on any occults forms (but human forms of occults is fine, which will then be shared with the occult form).             
  •             
  •                 Updated order Boquet to allow for exclusive boundaries.             
  •             
  •                 Reinforced code for prostitution for situations when sexual boundaries may be missing. This shouldn't be happening, but I'm struggling to reproduce this bug.             
  •             
  •                 Fixed an issue with generating new occult forms for brand new succubi             
  •             
  •                 A bunch of sex change categories were missing their colours! Fixed now!             
  •         
                     v2.2.9b 05/17/2025         
        
  •             
  •                 Fixed code blocking autonomous transitions to the climax category during sex worker jobs.             
  •             
  •                 Fixed logic with some new succubus pheromone logic for picking sims affected by them.             
  •         
                     v2.2.9c 05/20/2025         
        
  •             
  •                 Just a quick patch to fix situations when my mod might not remove cas items properly, resulting in the naughty cas item remaining equipped/applied.             
  •         
21 мая 2025 20:36
Nisu что, Turbo покусал? У того тоже почти каждый день обновы были в определённое время, лол.
21 мая 2025 15:37
Понял, спасибо.
21 мая 2025 14:34
там скрипты Ниса допиливает, а контента реально нового нет.
21 мая 2025 14:23
А что там обновляется каждый день? Разницы не заметно. 
21 мая 2025 14:15

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


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

Редактор