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

GUI-элементы


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

Категории

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

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

Замечен конфликт Spent_Cum_Kiss с PEP. Если PEP загружается до Spent_Cum_Kiss, то последний просто не работает, так как они оба переписывают "ванильный поцелуй". Можно попробовать например тогда переименовать папку с модом PEP так, чтобы она по алфавиту была ниже, чем этот мод, должно заработать, думаю PEP работать не перестанет от того, что в нем станет на 1 оверрайд меньше.
Сегодня, 03:42
У кого есть перевод на версию мода 1.57? Дайте, пожалуйста
Сегодня, 02:27
Для тех, кому всё ещё интересен этот мод на версии Симс 4 1.116, версия с сайта, требующая инжектор, при трансформации в сервобота (когда выбираешь человеческую форму серво), игра одевает его в очень странный костюм (то есть из выбранного вами только голова сима-человека). Чтобы этого избежать, скачайте с сайта-источника версию этого мода, которая инжектора не требует, и ещё с того же сайта у этого же автора найдите мод серво-читы и трансформируйте ваших симов в андроидов с его помощью. Тогда симы будут выглядеть как люди (то есть человекоподобные), но являться андроидами. Всем удачи! 
Сегодня, 00:27
Ааа. Я еще до 115 полностью не успел обновится. Уже 116 вышла Lol 
Вот бы была программа, которая автоматически все пиратские моды обновляет до нужной версии. Цены бы ей не было.
PS: интересная бизнес идея, с платной подпиской, админам на заметку Cool
Сегодня, 00:15
не ждите 
Согласно официальному летнему плану, крупный патч для игры выйдет 1 июля, а релиз дополнения — 10 июля.
Я буду очень занят в течение первых нескольких недель июля и не смогу получить доступ к своему основному компьютеру; я не буду вносить никаких изменений в свои моды в ответ на патч или расширение, пока меня не будет, и у меня не будет много времени, чтобы принимать какие-либо отчеты или заниматься устранением неполадок. Вам не следует ожидать, что какие-либо из моих модов будут обновлены до 15 июля в лучшем случае.
Как и в случае с любым патчем для расширения, я ожидаю, что многие моды, включая мои собственные, сломаются. В частности, Home Regions и Career Overhaul, скорее всего, будут иметь проблемы, а другие, такие как Townie Demographics и мои черты, потребуют обновлений для интеграции с новым контентом. Если вы относитесь к тем игрокам, которые полагаются на мои моды для гармоничной работы своей игры, сейчас самое время подумать о переводе вашего приложения EA в автономный режим и отложить патч.

Вчера, 23:59
У меня некоторые последние версии модов на S4-112 работать не хотели. Но после обновления до 115 все нормально заработало. Хотя уже конечно 116 последняя на данный момент.
Вчера, 22:48
Уже давно вышла версия 2.2. Обновите, пожалуйста! И ссылку на источник тоже.

Вчера, 22:16
старую версию можно найти на бусти - она бесплатная
Вчера, 21:21
Сломаны все моды от Kuttoe, ждём...
Вчера, 20:15
да, постоянно выскакивает
Вчера, 20:02
А до завтра подождать никак?
Вчера, 19:57
У меня ещё страннее: две беременные симки, тесты сделаны, у одной пункт на телефоне есть, у другой нет.

Вчера, 19:46
с последними обновлениями работает мод?
Вчера, 19:24
ЗАМЕТИЛА ВАЖНУЮ ШТУКУ:
ели прям совсем ничего не помогает, в инструкции анадиуса так же написано, что можно попробовать открыть эти ссылки через режим инкогнито. Я все делала по инструкции, ничего не получилось. Но именно этот совет мне помог! (но конечно, все таки, до этого надо все делать по инструкции)
Вчера, 18:55
такая же история ( 
у вас получилось разобраться? 
Вчера, 17:13
Здравствуйте. У моей симки подвисла "неприличная татуировка" на лбу из тренинга ДоС. Может кто знает, где и как можно поискать где она прицепилась и как её убрать?

Теперь подробно о проблеме:
Играю я в формате "месяц регулярно - несколько месяцев перерыв". Осенью после перерыва обновила игру, но не обновила ui моды, поломался интерфейс в нескольких сохраненках. Проблема решилась только последовательным отсеиванием сохранений по сроку давности до "чистого". В итоге по прогрессу семьи откат произошел на некоторое время - вот именно в это время эту опцию тренинга я и проводила. Однако, тогда к игре я в итоге не вернулась, но вернулась неделю назад (обновив уже все, что было можно). Но внезапно у симки при загрузке сохраненки вылезла эта "татушка". По прогрессу игры, в этой сохраненке я её даже не делала. Однако приклеилась она к ней "намертво". Что я уже пробовала делать:
1. Ждать. По моду, на сколько я помню, это временная функция, кажется, на два дня, но два дня прошли, а оно так и висит.
2. Копалась в касе. Не нашла её нигде, однако, если использовать функцию "очистить все" на разделе с татуировками, она пропадает (если убирать тату по одной - нет). Но пропадает она ровно до первого переодевания симки в режиме жизни, потом появляется снова.
3. Убирала ДоС совсем. Татушка ушла, в процессе игры не появлялась, все ок. Однако, даже на сохраненке, где я какое-то время провела в режиме жизни и только потом вернула ДоС, после возвращения его в моды мне нужно было все выстраивать заново (навыки, сертификат, контракт и т.д.), но татушка появилась сама собой сразу же после загрузки.

Мои идеи закончились. Удалять ДоС совсем не очень бы хотелось - хотела выстроить на нем целую линию истории. Но и в таком виде оставаться вообще не хочется. Если у кого-то была такая проблема или есть идеи, что ещё попробовать - буду благодарна. 

Скрин с проблемой прикрепляю ссылкой, по-другому не получается: https://disk.yandex.ru/i/sgo5o91QE7eEkQ
Вчера, 13:49
Ребят, тут есть традиция в виде подачи налоговой декларации, а без мода на эту самую налоговую, ничего сделать не получится. Здесь, кстати, этот мод есть)
Вчера, 12:54
а бесплатного перевода нет?
Вчера, 12:17
В самой игре требует обновить мод, новая версия 2.2.9d вышла получается
Вчера, 12:10
WickedWhims Inappropriate Unlock нужен.
Вчера, 11:56
И?
Вчера, 11:19
Тоже не понятен пункт "Любой мод, убирающий смерть от эмоций (чтобы симы не умирали от одного вида обнажёнки) ". 
без него не работает? 
мод скачала, но никаких изменений не вижу...

Вчера, 10:35
Добавить волосы на яйца и измерить член можно, остального пока не видел.

Вчера, 03:38
В общем игра этот мод действительно не видит. Может дело в том что Инжектор обновился, теперь вообще никаких взаимодействий при высокой шкале романтики не появляется( У меня тоже не работает теперь. Удалил.
Вчера, 08:40
Подскажите, пожалуйста, почему может не работать данный мод. Скачала всё правильно, загрузила и перевод, и рецепты. В итоге и перевода нет, и не открывается ни одна вкладка с рецептами. Просто висит белое окно.
Вчера, 01:24
Для игры еще нету моддинг инструментов чтобы писать скрипты для таких модов, пока только шмотки и прочее.
А появятся они судя по roadmap только к концу года..
Вчера, 00:55
все равно не помогает...
когда заходишь в игру там пишет список установленных модов и он среди них есть,но просто нету всех этих действий потом в игре
6 июля 2025 21:43
Вышла версия 4.4. Версия 4.3 ломает последнюю версию игры.
6 июля 2025 21:38
Я создала отдельную папку, назвала "extreme violence" и из архива всё туда выгрузила как есть. Работает нормально. Отдельная папка удобнее тем, что потом ничего не потеряется, когда мод нужно будет обновлять) 
6 июля 2025 21:15
Angel Ждём-с
6 июля 2025 18:54
сим превратился в келпи. подскажите, пожалуйста, как убрать это состояние, оставить только русалку
6 июля 2025 18:33
Будет альтернатива - обязательно добавим.
6 июля 2025 18:12
То ли лыжи не едут, то ли я опять слегка того... Из-за мода перестала работать игруха. Вот такая шляпа вылезает
6 июля 2025 18:07

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


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

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

Переводчик