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

GUI-элементы


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

Категории

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

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

Ждать обновление перевода
Сегодня, 22:42
Привет, а эта сборка модов как работает? Нужно самому размещать трещины и т.д. или они рендомно появляются? 
Сегодня, 22:36
Сам мод рабочий, периодически устанавливаю его чтобы погрузиться, но все никак) 
Так как вышел новый доп про фей мне кажется это хорошо дополнит текущих фей, функционал них, к сожалению, так себе. Только крылья прикольные
Однако, не обошлось без проблем) 
Почему-то некоторые функции работают криво, в книге заклинаний насколько я поняла есть какая-то предыстория фей, но там нет текста, только картинки 
Также в читах есть какая-то пустая кнопка, в разделе "фея" тоже, что она значит - да бог его знает))
В заклинаниях тоже появилось новое заклинание видимо связанное с текущим допом, но оно тоже не отображается
Я правильно понимаю это связано с переводом? Если некоторые функции не перевели то будут пустые кнопки? Это как-то можно исправить?
Сегодня, 22:23
Кто тут жалуется на Нису, кикните ее к чертям. Симсы прекрасно развлекаются без этого мода. Проверил.
Сегодня, 22:16
Описание установки модов устаревшая и вводит в заблуждение при установке модов в последних версиях игры...
При установке модов внимательно читайте рекомендации авторов того или иного мода. Приятной игры!

Сегодня, 21:46
Скрин с офсайта мода
Сегодня, 21:34
Удалите всё что вы сделали с файлами в папке Mods.
Статья устаревшая от 2019 года, забудьте всё что там написано.

Итак, вы очистили содержимое папки Mods.
Скачиваем актуальную версию мода под установленную у вас версию игры.
Распаковываем файлы в папку. У вас должно получится как на скрине ниже.
Пока другое ничего не ставьте, запустите игру. Проверьте.
Блокнот не доставайте. Файлы с расширением package и файлы script дополнительно не надо распаковывать, они и так прекрасны.
Сегодня, 21:33
Цитата: All4You
1. Для КЦ не нужен инжектор.
2. В принципе правильно, папка Mods и в ней подпапка MCCC в которой должны лежать все файлы мода.
Далее я ничего не понял:
Полезла читать вашу статью по установке, создала там пустую папку в мод и отредактировала в блокноте док, ничего не изменилось. Попробовала скинуть документы из архива без папки сразу в мод, тоже не помогло. Не работает, помогите кто-нибудь пожалуйста 
О какой статье речь? Чья статья? Где вы создали "пустую папку" и какой "док" отредактировали и, главное, для чего этот "док", что должно было измениться? Что "не работает"? Если вы задаёте вопрос кому-то конкретному, то ник указали бы, чтоб такие как я не лезли с расспросами и "помощью". :)
Если зайти с пк, то под постом есть ссылка на статью "как устанавливать моды". Там есть что-то про папку, которая должна помочь с модами Ни к кому конкретному не обращаюсь, потому что не знаю к кому следует. Мне просто нужна помощь хоть чья-то, потому что не понимаю, почему не получается установить КЦ, хотя все делаю ровно по инструкции. Все файлы в архиве до единого разархивированы и добавлены в папку мод, но кц все равно не устанавливается, в игре нет выборки ни при нажатии на компьютер, ни на сима, ни на почтовый ящик
Сегодня, 19:15
Почему-то из-за этого мода появился баг с невозможностью устроится на работу. Меню с профессиями не открывается вообще ни с телефона, ни со значка в панеле работы. 
Сегодня, 18:21
Проблема с персонажем-подростком.
Когда он с одной женщиной, то с ролями всё в порядке. Когда он с двумя женщинами, то обе начинают его использовать как женщину. То есть, они начинают иметь его во все дырки, а должно быть наоборот.

Как это исправить, чтобы все мужские персонажи всегда трахали женщин, а не наоборот? А женщины как давали, так и пользовали других женщин?.
Сегодня, 16:15
Подскажите, у кого проблема такая что не видно информации о поместье у сима в багаже. Все убрала оставила только регенства и  тоже нет инфы...?

Сегодня, 14:08
Понятно, спасибо за ответ!
Сегодня, 13:19
спасибо
Сегодня, 12:56
1. Для КЦ не нужен инжектор.
2. В принципе правильно, папка Mods и в ней подпапка MCCC в которой должны лежать все файлы мода.
Далее я ничего не понял:
Полезла читать вашу статью по установке, создала там пустую папку в мод и отредактировала в блокноте док, ничего не изменилось. Попробовала скинуть документы из архива без папки сразу в мод, тоже не помогло. Не работает, помогите кто-нибудь пожалуйста 
О какой статье речь? Чья статья? Где вы создали "пустую папку" и какой "док" отредактировали и, главное, для чего этот "док", что должно было измениться? Что "не работает"? Если вы задаёте вопрос кому-то конкретному, то ник указали бы, чтоб такие как я не лезли с расспросами и "помощью". :)
Сегодня, 12:06
Спасибо
Сегодня, 11:29
Помогите пожалуйста с установкой🥹 Скачала новую версию кц, установила инжектор (проверила, рабочий). Разархивировала, перенесла в мод, все как надо. Только одна папка, путь не длинный. В настройках игры все сс и сценарии разрешены. Полезла читать вашу статью по установке, создала там пустую папку в мод и отредактировала в блокноте док, ничего не изменилось. Попробовала скинуть документы из архива без папки сразу в мод, тоже не помогло. Не работает, помогите кто-нибудь пожалуйста 🥹🥹🥹
Сегодня, 11:10
Нюхать, ёпта.))) Появится мудлет с сердечком. Ну, или тупо продать, если сим ходок. Одни репела , по-моему, 75 монет стоят.
Сегодня, 10:33
кажется, что у меня просто какой-то мод полетел буду разбираться, но спасибо!

Сегодня, 01:16
В игре кликаем: компьютер - МС Командный центр - МССС Настройки - Настройки уведомлений/консоли команд - Настройки консоли команд - Настройки режима покупки/строительства...  там (сверху вниз) включаем: вторую, третью и пятую опцию.
 Рекомендую поставить мод на режим строительства от Tmex - Better Build Buy и в режиме стройки тоже включить необходимое (справа над окном предметов, где фильтры).
Удачи.

Вчера, 23:57
У кого-нибудь остался мод на версию 1.105?
Вчера, 22:24
Понятно, хорошо, ну а что делать с этими труселями то? Знает кто?
Вчера, 21:24
Коллекция трусов не из этого мода, это опция WW.

Вчера, 21:14
Здравствуйте! А не подскажите как именно это сделать, мс есть, но где это сделать я не понимаю;(
Вчера, 19:51
Подскажите плз, а в чем глобальное отличие патреоновских версий от публичных?
Вчера, 18:16
Обновлен 10.09.25
Вчера, 16:39
А что с трусами делать которые в коллекции?
Вчера, 15:33
Качайте от Nocturne и Ser_Kisyan по второй ссылке. Он, вроде, должен подходить, по крайней мере, количество строк (216) в моде и в переводе совпадает.

Вчера, 12:34
Русификатор не качается ((

Вчера, 12:11
Ребат помогите, нужна версия этого мода, на sims v1.114 (
Вчера, 12:08
Ребат помогите, нужна версия этого мода, на sims v1.114 (((((
Вчера, 12:08
Есть версия на 116?
Вчера, 11:52
Дело в том, что SonozakiSisters тоже выложила в улучшенном виде этот мод от Shushu.
Отличия от этого мода:
1. Существует в двух вариантах — умывание смывает макияж, но есть опция его восстановления, и вариант, когда умывание не смывает макияж.
2. Включает только один файл, без скрипта, но требует Lot51 Core Library.
3. Встроен русский перевод от Оригамики. 
Какой именно мод ставить — дело вкуса.

Вчера, 11:36

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


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

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

Переводчик