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

GUI-элементы


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

Категории

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

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

Цитата: jekich
Здравствуйте, вы случайно не решили эту проблему?
кажется решила. Установила ВПН, загрузка идет. Отключаю ВПН, опять критикал еррор 😬
Сегодня, 09:43
У меня было точно такое же поведение с каким-то из недавних обновлений и причиной был мод на Страстные подарки от Utopya. ВЕ на него не ругался и пришлось вручную моды перебирать.
Если у вас этого мода нет или в вашем случае не он причина, то попробуйте убрать все моды и запустить сохранение без них. Если все работает, то искать мод, который все херит (и скорее всего этот мод будет как-то связан с отношениями).


Сегодня, 04:50
Цитата: jekich
Здравствуйте, вы случайно не решили эту проблему?
Нет (((
Сегодня, 02:42
Так что, мод поломан для 112 версии игры?
Сегодня, 00:37
здравствуйте. после обновления, слетело большинство мебели в постройках. даже у тех, которые были сохранены в библиотеку и наново поставлены на участок, отсутствует половина мебели. может кто сталкивался?
Сегодня, 00:06
С модом на блок рандомно сгенерированных симов не конфликтует? Не хочу видеть сгенерированных уродцев на своих улицах, но и хотелось бы чтобы симы из других регионов не гуляли по чужим городам
upd: увидел автора, вопрос отпал сам, zero респект
Вчера, 23:40
Здравствуйте, вы случайно не решили эту проблему?
Вчера, 21:17
тоже ищу одну - симка в стиралке торчит Policeman 
Вчера, 19:01
Может кто подсказать, у кого из авторов есть такая простая анимация - сим лежит на симке и сношает ее в задницу? Симка держит подушку, целуются-обнимаются, все довольны. Потому что анимаций стало очень много, хз где искать. Вдруг кто часто использует именно эту позу и может посоветовать ее создателя?
Вчера, 18:17
Такая же проблема, и иконки кнопок в интерфейсе поломало о5, видимо где-то что-то конфликтует и надо ждать обновлений. WW 185.8 работает
Вчера, 15:38
У большинства наиболее популярных авторов анимаций есть всё, и на любой вкус, так что фильтровать по авторам смысла нет. Проще в настройках WW поставить галку "Безопасные анимации" и плюс к этому отключить те типы и категории анимаций, которые кажутся вам неприемлемыми (например, с игрушками, дидло, и т.п.). А на фалоимитаторы в режиме строительства можно не обращать внимания.

Вчера, 03:55
Подскажите может кто-то где-то качал или собирал сам пакет анимаций примерно гигов 2+-. Я к чему хочется собрать такой пак чтобы он не вредил игре и не превращал ее в симулятор ебли т.е. не было не нужных страпонов и всякого хлама в режиме строительства а только чистые анимации. Честно меня пугают здесь сборки они какие-то трешовые... но это ваше дело хотите качайте:) так что повторюсь имеет кто-то где-то случайно ссылку или список авторов которые стоит скачать и они добавят только анимации для "базового" секса без этих страпонов бдсм приколов и всякого другого изврата. К примеру сам WW имеет где-то 100 анимаций базовых так что я хочу только расширить их без ущерба для "лора" игры.
Вчера, 02:47
please add/update all videos and figurines
Вчера, 01:17
Цитата: Kasany
Добрый вечер! Те кто играли с этими модами (особенно с объектами и их мудлетами). У моей симки постоянно выскакивает мудлет, который на русском звучит как "Требуется техническое обслуживание" с пояснением "(от необходимости обслуживания по промыванию мозгов)". Длительность мудлета 24 часа и дает Дискомфорт +15.
Кто знает как сейчас избавить симку от этого мудлета? Я только-только сделала ее сабой в DoS, даже сделала какую-то опцию в Камере Депревации (или как там правильно он называется, есть два варианта с гарнитурой и без, но это никак не повлияло на этот мудлет. Может это нужно в кресле Apropos что-то сделать или что-то еще? Подозреваю что это на 90% именно от модов Критикал, т.к. встречала его раньше в старых версиях, но сейчас он слишком часто появляется и с учетом других негативных мудлетов мне редко удается перебить дискомфорт от него...
Короче - кто-нибудь знает какие конкретные действия (симка самостоятельно или ее мастер над нею) можно произвести, чтобы снять хотя бы на сутки +- этот мудлет... Уж очень он мешает...
Думаю уже не надо, но для других напишу. Мне помогло удаление файлов с Brainwashing. Пока никаких проблем вроде нет
Вчера, 00:30
Здравствуйте. Может быть кто-то сможет мне что-то подсказать. Не играла в симс 4 около 2х месяцев (примерно с октября по середину января). Потом соскучилась, пошла обновлять моды и обновила через updater игру до 1.111 (все было как обычно). Запустила, включила моды, перезапустила, загрузила сохраненку. Все было как обычно. Даже то, что как обычно обновила кучу модов, а про UI extension и More Columns забыла. Старые версии этих модов, конечно же, выдались мне глюками интерфейса, вышла без сохранения, обновила и зашла заново. Но у симки моей и тесно связанных с ней симов поломалось окошко с отношениями. Фотки персонажей дублируются с чужими именами, полоски пропадают, отношения у симки после загрузки вообще только с живущим с ней симом, а остальные не показывает, хотя при приглашении, например, через телефон, показывает всех её знакомых нормально (скрины приложила). 
Чистила кэш игры. Делала repair через updater. Better Exception упорно предлагает мне как причину только вот те два мода. Даже пыталась удалять сомнительные моды. Никакого толка. Сохранила эту семью в галерею, начала новую игру (без каких-либо изменений в модах), заселила их как новую семью - все работает идеально. То есть поломка именно в этом сохранении. Есть ли шанс его восстановить? К сожалению, близких бекапов нет, только достаточно старые, либо переносить в новую сохранку (но у меня ж здесь все свое, родное, города обновленные...).  
Может быть есть ещё какие-то способы чистки? Или переходить к крайним мерам?
Заранее спасибо, если кто-то что-то сможет подсказать.

П.С. Прошу прощения за то что скрины не скрины, а фото экрана - когда загружаю симов, стараюсь отключать все лишние программы, в том числе и те, которые помогают мне со скринами, поэтому пришлось фоткать.

П.П.С. Скрины вставить не получается, ссылками: https://disk.yandex.ru/i/LEvYbIYV5VwR3g и https://disk.yandex.ru/i/r9eq_cLOoBpzgg
16 января 2025 23:15
ну немножко)
16 января 2025 21:52
да, сейчас многие моды придётся обновлять. с этими патчами... хорошо, что удалось починить)) приятной игры Angel 
16 января 2025 20:54
Спасибо за ответ! Нашла причину: устаревшая версия UI Cheats Extension. Тоже недавно обновили ))
16 января 2025 19:55
у меня всё есть и работает  Ninja 
16 января 2025 18:16
только что проверила - всё на месте Wondering 
16 января 2025 18:13
Подскажите, пожалуйста, у всех нет меню "Настройка"? Не могу теперь надголовные эффекты отключать (
16 января 2025 18:06
ну ничего себе! не только переводчик, но и креатор Angel 
16 января 2025 17:02
Не, там в коде жестко определены были возраста и подростки просто не были прописаны
16 января 2025 16:16
уже нет и заблочено в рф
16 января 2025 13:42
обнови винду она же автоматически обновляется
16 января 2025 12:29
Спасибо!
16 января 2025 12:12
Очено круто!!! Спасибо.вОТ ЕЩЕ БЫ ЧЕРНОКОЖИХ ПОБОЛЬШЕ
16 января 2025 11:45
Можете обновить пожалуйста? У автора вышло уже два обновления после той версии, что сейчас на сайте, добавлены некоторые взаимодействия и поддержка объектов, исправлены ошибки.
16 января 2025 07:47
Если и это не работает, создайте отдельную папку и без подпапок вложите в неё базу мода и перевод, после чего закиньте в mods. 
16 января 2025 07:42
разархивируйте перевод в папку с модом, если не работает попробуйте другой перевод.
16 января 2025 02:14
Файл по ссылке действительно багал почему-то. Обновил. У меня работает отлично сейчас
https://disk.yandex.ru/d/HTG4iJqnGzS3nw 
16 января 2025 01:28
Тем не менее, автор рекомендует проходить эти события по задумке, так как предметы будут храниться в данных вашего аккаунта EA, и вы не потеряете их
 Хорошая шутка. Достаточно играть оффлайн. Всё, дома без декора, а симы голожопые.

UPD Сам мод отличный, все работает, с ним можно спокойно играть оффлайн и не бояться описанного выше.
Благодарю!
16 января 2025 01:06
Хм. Сам мод работает как работал, но я так понимаю, что теперь он попал в разряд проблемных... такое тоже бывает - функционал мода есть, а в игру он срет. Ждем обнову.
16 января 2025 00:54
ждать обновы
15 января 2025 23:48

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


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

Редактор
  • Дней
  • Часов
  • Минут