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

GUI-элементы


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

Категории

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

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

У SexyLunella обновление анимаций вышло от 1.05.2025  Andy



 

Сегодня, 02:01
"Поцеловать со спермой" заменено на ""Игра в снежки""
Сегодня, 01:52
Спасибо за ваше мнение. Все замечания и правки будут учтены в следующей версии перевода.
Сегодня, 01:08
Т.е. для тебя эта шизофрения - норма, а "весеннее обострение" у всех, кто тебя критикует и указывает на недостатки. Критиковать нельзя, даже если результат получился хуже кривляний нейросети. Напиши это на главной, чтобы все видели, тогда и срать в комментах никто не будет, а насрет - в баню.
Ты никому ничего не должен, зато тебе все должны. Ты требуешь деньги за свои переводы/требуешь регистрацию на бусти, и у тебя и твоих подсосов горит напалмом, если кто-то об этом скажет. Но ты можешь не загоняться, лентяев и дурачков предостаточно, бусти не опустеет.
Сегодня, 00:19
забавно
Вчера, 23:31
Вообще никак не зависит от версии винды.
Вчера, 21:59
Скачала мод, не могу ни где найти печь...в какой вкладке её искать? вроде бы скачала все правильно
Вчера, 21:55
Не работает на Windows 11. 
Вчера, 18:05
Мод обновился!!! И довольно давно.
Вчера, 17:27
Слово «девственность» часто сопровождается уточняющими прилагательными (анальная, вагинальная и т.д.), поэтому было придумано слово «большечленная». Оно точно передаёт замысел автора мода и гармонично вписывается в устоявшуюся норму. Неясно, почему именно к этому слову возникают претензии. Русский язык ограничен в терминах на тему секса, что вынуждает искать нестандартные решения.

Формулировка для взаимодействий «... с мужественностью» выбрана из-за самого названия черты «Мужественный», чтобы сочетание существительного и прилагательного создавало чёткую и выразительную ассоциацию.

О «литературном переводе»: я не филолог, перевожу в первую очередь для собственного удовольствия и использования, а затем делюсь с другими. Переводчик — не моя профессия, поэтому я никому ничего не должен. Поддержка через Boosty или оплата переводов не делает это моей работой, и я сохраняю полную свободу в своем подходе.
Вчера, 17:00
При все желании патреон мне не оплатить)
Вчера, 16:51
Никакой совместимости не получится, потому что это перезаписи, они так и так будут конфликтовать, этого не избежать. По крайней мере, в мом море есть разные модули (отдельно компьютер или телефон), которые можно удалить, чтобы не было конфликтов.
Вчера, 16:29
Людям жалко платить авторам модов за создание, что намного тяжелее и кропотливее, чем просто перевод... лучше своруют где-нибуть на сомнительных сайтах... а вы тут за перевод денег желаете xD
Вчера, 16:27
Спасибо большое за указание проблемы, я никак понять не мог, почему у меня мудлеты все на английском стали и некоторые действия, действительно именно эта версия виновата, с публичной версией нормально всё
Вчера, 15:36
"Первый большой член" - норм. "Впервые трахнули большим членом" - норм
Не придумал? А это что? Между прочим, я только предложил возможные варианты и не более того. Ты переводишь моды сам, требуешь за это оплаты и даже не дублируешь больше ссылки для тех, кто не хочет идти на бусти. Ишь ты чего захотели, мед им и большую ложку. И хрен бы с ним, с бусти, многие переводят моды за деньги, и это действительно унылая и противная работа, особенно если плохо знаешь язык и нет лишнего времени. Но неужели нельзя делать качественно, раз уж вызвался? "Большечленная" - ты где вообще такие слова слышал? "Отдохнуть с мужественностью" и прочее - мужественность стояла рядом и охраняла бедного сима, не иначе. Тебе знакомо понятие "литературный перевод"? Или пофиг, за неимением альтернативы сожрут что дали, да еще и заплатят? И почему я должен делать за тебя твою работу, предлагая варианты взамен принесенного тобой машинного кошмара? К слову, многие переводы у тебя приличные, но здесь какой-то ужас. Какой мод, такой и перевод, посмотрел и стер.
P.S. "Вы" - смотрите, какой джентльмен благородный. Обращается на "вы" в теме помойного порномода. Да можешь хоть стереть это сообщение и бан влепить.
Вчера, 15:30
да у меня все, что можно для пользовательского контента включено. уже более 2х лет играю в симс4 с модами и такой проблемы не было. когда то давно, когда только решилась поиграть в симс 4 и именно с модами, была проблема, что моды вообще не появлялись в игра. но при этом в списке модов в самой игре- числились. тогда я просто немного подождала и скачала другую версию игры и все заработало. сейчас что происходит, я не понимаю...но пытаемся решить проблему путем установки самой новой версии игры.  И да все версии симс у меня пиратки
Вчера, 14:07
Работает, но BE на него ругается в начале игры.
Вчера, 11:32
Добрый день
У вас скриптовые моды включены в настройках игры?
Вчера, 10:48
Почему то в основном на всех предметах функционал ограничивается двумя вариантами, первый - подготовить тренировку (доминант в этом режиме просто стоит и о чем то рассуждает) и второй - это душ из огнетушителя. Так и должно?
Вчера, 09:35
здравствуйте, спасибо что ответили. я уже удалила из папки модс моды связанные с викивимс, что бы проверить, может есть несовместимость в этом. устанавливала версии викивимс попозже(например 186.5, 184е) и все равно игра как бы частично видит объекты мода, например: функция в телефоне/компьютере заказать товары из секс-шопа и взаимодействие с симами в разделе похоть это только поговорить о фертильности, а главных функций ни где нет! не на симах, не на предметах.. но буду искать, спасибо
в папке модс у меня все разложено по папкам и ни в одной копии викивимс нет. удалила почти все, что связано с викивимс и все равно ничего нет. в итоге решила еще обновить версию игры на более новую..буду смотреть..
Вчера, 09:31
https://modsfire.com/Ozb5hniX55048w8
Вчера, 09:06
АЛО КУКУ
Вчера, 02:27
WickedWhims 186.6 прекрасно работает на игре 114 версии. Ищите проблему у себя — дубликаты файлов, скрипты глубже одной папки, нераспакованные архивы в Mods и т.п.
Вчера, 01:18
1.
testingcheats true 
вводим в консоле тогда шифт команды будут
2.
нет есть некоторые итемы доступные без тренировок и контрактов. сексаракада, тренажеры и тд...
Вчера, 00:57
Подскажите плз, после 18 версии не осталось никаких вариантов использовать предметы без прокачки скиллов и тренировок? Раньше некоторые объекты были хотя бы через shift-клик доступны, сейчас даже меню пропало( 
Вчера, 00:37
Тут проверить можно https://scarletsrealm.com/the-mod-list-sfw-nsfw-edition/
3 мая 2025 23:46
Работает ли на последней версии игры?
3 мая 2025 22:47
Это же только перевод? А куда его класть чтоб работал?
3 мая 2025 20:16
С "Поссать по-мужски" хорошая идея, а вот с девствоностью вы сами ничего не придумали, так что не принимается)
3 мая 2025 18:04
у меня новая версия викивимс, что патрион, что публичная не конектится с новой версией игры. даже скаченные с разных сайтов одни и теже (новые)версии викивимс не видит игра. хотя раньше все было норм...интересно, а долго ждать когда этот "тестовый забег" закончится и выпустят версию версию которая спокойно совмещается с другими модами для викивимс?
3 мая 2025 17:41
Сделай что-нибудь с "большечленной девственностью" и предложениями, где это встречается. Так не говорят, выражение просто кошмарное. "Первый большой член" - норм. "Впервые трахнули большим членом" - норм, можешь и сам включить фантазию. Сюда же все фразы и действия, в которые включено "...с мужественностью". Можно же сказать "поссать по-мужски" (какое "пописать", это действие для симов-альфачей, они не писают - они ссут!), или "расслабиться/отдохнуть по-мужски".
Если совсем туго, DeepL в помощь. 
3 мая 2025 17:09
Проще создать для этих целей клуб домохозяек и огородников, и попивая лимонадик наблюдать как члены клуба убираю/чинят твой дом и ухаживают за грядками бесплатно и дружелюбно)))
3 мая 2025 16:23
У меня такая же проблема на семерке из-за этой ошибки. И хак был установлен с питоном, visual C++ все пакеты обновлены, а ошибка та же, в инете вбивала эту проблему нет никаких решений с ним и в реддите посты на тему апдейтера смотрела - нету, переходить на другой виндовс старше 7-ки не могу. Даже Анадиус у себя на сайте писал что есть хак для запуска и работы апдейтера на семерке. 
 Из-за этой ошибки я вообще навсегда бросила The Sims 4 куда подальше и потеряла интерес к нему, смысла никакого нету играть, если у апдейтера ошибка выскакивает. Рада была бы играть, если бы не эта ошибка в апдейтере:((
3 мая 2025 15:50
Добрый день.
В моде появилась папка Add Ons. Что она добавляет к моду? Поясните, пожалуйста, в описании к моду.
3 мая 2025 15:15

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


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

Редактор