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

GUI-элементы


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

Категории

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

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

На Sims4 1.109 не отображается никакое новое меню/новые диалоги.
На патреоне есть обновление от автора от 22 июля 2024г, но оно тоже не работает на Sims4 1.109.
Так и не удалось заставить этот мод заработать.
Сегодня, 06:47
подскажите, создала стрип клуб, отправилась домой, хочу вернуться в клуб и вечная загрузка идет :(((
Сегодня, 01:12
знаю
Вчера, 20:28
Прежде всего, ваш глава банды должен достичь 10 уровня, чтобы иметь возможность организовать нелегальный игорный бизнес. Если у вас максимальный уровень, поговорите со своим правым человеком в штаб-квартире вашего лидера. Нажмите меню «Информация»  , затем « Как приобрести нелегальное игорное заведение ».

Затем вы отправляетесь в мир, находите участок и назначаете ему правильный тип участка «Заведение казино для банды», а затем редактируете его так, чтобы все необходимые объекты были на своих местах.
Убедитесь, что азартные игры криминализированы в регионе, где вы строите нелегальное казино.
Возвращайтесь к главарю банды, снова поговорите со своим помощником, выберите меню «Рэкет»  , затем «Купить нелегальное игорное заведение».

Вчера, 19:29
не может быть, на патреон было все проверенно лично мой и все работало, а вот публичная да - не работала, но я с ней и не играю
Вчера, 19:16
Я? Я пробовала обе версии))) Перевод и там, и там не работал) В итоге решила остановиться на публичной. Не вижу в описании отличий, а она, в теории, должна быть стабильнее)
Вчера, 18:54
Не могу найти нелегальное казино(
Все типы участков с casino перепробовала. А з телефона меню Gangs не работает
Кто сталкивался с проблемой?
Вчера, 17:54
В инструкции указано 
После выбора API (Direct3D 9)


Есть два решения:
1. Но, Вы должны выбирать тот директ, который у Вас на данный момент установлен. У меня лично установлен 12 и игра работает под мой директ, а не под 9. Проверить можно так: Windows+R>Вписываете в строку выполнить "dxdiag">Смотрите в открывшемся окне на свой директ. После шейдер скачиваете на свой директ, а не исключительно на 9).

2. Заходите в настройкиTS4 и выбираете direct9 там в правом нижнем углу будет в самом первом разделе настроек. Перезапускаете игру, все работает, НО если у Вас не директ 9 установлен (как смотреть указано в 1 пункте), то игра будет менее оптимизированной.
Вчера, 12:50
Здравствуйте, объясните пожалуйста поэтапно и подробно как продавать рабов? Я попытался купить раба у своего персонажа пригласил их с рабом ( раб был с меткой на продажу) на свой участок. Сняли с меня деньги, причём диалоговое окно появилось через минуты три. В сообщении было что : "мы уходим с участка и сумма продажи". Раб перестал быть рабом - просто свалил, как этот гусь у которого я кукпил. Или не купил... Пожалуйста, у кого получается продавать и покупать рабов  напишите правильную последовательность, может я что-то делаю не так. Версия мода 3.8 не руссифицированый.
Вчера, 11:33
Привет, а подскажите пожалйста, не могу понять как устроиться на все виды новой работы, в меню телефона их нет, хотя выбрана черта "сладкая малышка"
Вчера, 11:08
ну отвлекаться то тоже нужно 
Вчера, 09:12
Восстанавливала игру. Где-то 2-3 прошлых сохранения тоже висли, следующее открылось. Продолжила игру, но снова появился баг. Кэш не додумалась почистить до того как вы написали, но это не помогло( 
Наверное можно попробовать переустановить игру, хотя я уже не уверена, что поможет

Я думаю, что у меня какой-то битый сэйв из-за модов. Не знаю может ли такое быть на самом деле, но по-другому не могу объяснить это поведение, ведь даже когда я их сношу, баг не проходит. Из модов у меня ww, кц и bd, три самых популярных, но может они конфликтуют до такой степени, что ломают этот сэйв постоянно. А без них играть не хочу
Вчера, 08:42
А как же дворец с золотыми потолками и с подвалом?  Lol  Cool

Вчера, 07:08
ну блин, можно было тегнуть, я бы ускорился, зачем так сразу
Вчера, 06:13
Допиливал для своей сборки перевод для v_20241021 [patreon] (22.10.2024) (модифицированный, отличаются некоторые текста от оригинала).
Вчера, 02:40
добавлено
Вчера, 01:58
эта ваша заливная рыба Tongue 
20 октября 2024 19:05
Какая гадость!
20 октября 2024 17:39
может где-то и есть, но не нахожу, но так то WW создаёт в папке saves папку, что там можно удалить для очистки кеша?
20 октября 2024 10:13
Нет. Например, Ниса. По кнопке патреон. Я предполагал, что по кнопке последняя обнова, неважно какая версия. А в этом моде раньше версии оличались названием, в публичной были буквы и цифры. Сейчас нет, поэтому блудняк и вышел.
Бэйсментал тоже по кнопке патреон. Grin
20 октября 2024 08:37
по кнопке всегда публичка, чтоб проблем меньше было
20 октября 2024 07:25
По ходу, по кнопке "скачать" загружается публичная версия, поэтому и непонятки. Обновилась-то патреон.
Проверил - так и есть. Если скачивать не по кнопке, а из списка, то перевод подходит.
20 октября 2024 04:29
Сам эту "миссию" не проходил, но там внутри архива должен быть пдф файлик с описанием прохождения всех "миссий". Он на английском, в гугл переводчик копируеш и там должна быть инфа. Там иногда крайне непредсказуемые кейсы встречаются, например, чтобы пройти "миссию" сантехника надо сломать унитаз))
20 октября 2024 00:26
обманули меня палучается, не патреон у вас был
19 октября 2024 20:20
Спасибо!!!
19 октября 2024 19:24
Огонь! Заработало)))
19 октября 2024 19:19
как оказалось мод замечательно работает и без инжектора, но при этом и не инжектор является причиной торможений, ищу дальше
19 октября 2024 17:53
добавил
19 октября 2024 17:40
ну всё, ребятки, погружаемся в осень Angel 
19 октября 2024 17:23
Нет перевода. Файл недоступен или удалён
19 октября 2024 17:10
Если XML INjector указан, как необходимый- значит он нужен. Почистите кэш игры и запустите игру только с требуемыми модами для этого мода.
19 октября 2024 14:43
Привет Patreon Update ((([Kritical]DreamsOfSurrender_1_12a_pat )))
19 октября 2024 09:17
есть вопрос: мод без инжектора точно не будет работать? просто что-то довольно-таки сильно притормаживает игру, в частности во время свиданий доходит до того, что симы попросту перестают слушаться управления и зависают, убраны уже почти все крупные моды, кроме текущего и ww
19 октября 2024 06:39
Благодарствую! Теперь работаает.
19 октября 2024 02:48

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


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

Редактор