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

GUI-элементы


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

Категории

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

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

Живой, на 116 у меня вроде все работает.
Сегодня, 02:11
Я этот мод изначально ставил не отдельно, а с модом Have Some Personality Please! вместе. Возможно поэтому, у меня симы общаются на все возможные темы, включая романтику конечно, но только при "близких" отношениях. Помоему весьма органично, у меня ничего не накачивается.
Сегодня, 02:07
Произошли изменения в двух модах WW и WP. При проблеме с модом от Нисы:

1) Удаляем полностью мод от Нисы (Wicked Perversions)
2) Удаляем текущий игровой кеш файл: localthumbcache.package
3) Удаляем всю папку мода от Нисы в папке сейв  (Electronic Arts\The Sims 4\saves\WickedPerversionsMod)
4) Запускаем игру, запускаем сохранение или новую игру. Снимаем с паузы игру на "пару" секунд (для прогрузки)
5) Открываем консоль и вводим ww.fix ждём окончания процесса, свою сохру "сохраняем КАК"
6) Выходим из игры.
6) Скачиваем ПОСЛЕДНЮЮ (на текущий момент) версию мода от НИСЫ. И у вас должна быть ПОСЛЕДНЯЯ версия WW, (у меня с патрика 187.4)
7) Устанавливаем мод от Нисы
8) Запускаем игру.

Если и это не поможет, то у вас либо еще есть конфликты в модах. Либо ждите новую версию мода, удалив текущую.
В данный момент, лично у меня, мод от Нисы ведёт себя не хуже чем обычно. Удачи.

Дополню:  Всё это справедливо, если у вас стоит версия игры 1.116.240.1020.
 Золотое правило: ВСЕ ВЕРСИИ УСТАНОВЛЕННЫХ МОДОВ ДОЛЖНЫ СООТВЕТСТВОВАТЬ ВЕРСИИ УСТАНОВЛЕННОЙ ИГРЫ.
Т.е. не обновляйте моды, если у вас установлена старая версия игры!
Внимательно читайте рекомендации авторов модов перед установкой.
Сегодня, 00:42
Встроен
Вчера, 21:48
Кто проверял: перевод встроен или его нет?
Вчера, 21:21
Аналогично

Вчера, 20:29
Без вискеда мод работать не будет?
Вчера, 18:26
По какой-то причине, мод сломал игру, хотя раньше всё было хорошо. Странно. 
Вчера, 17:46
Аа понятно, спасибо
Вчера, 15:28
обязательно скачивать инжектор для мода или без него тоже работает?

Вчера, 14:53
кто знает почему ошибка - Invalid TuningKritical:Augustus:CraftingModule:Recipe:hangingMaskKritical:Augustus:Craf
tingModule:Recipe:slantedBowl 
игра обновлена
Вчера, 14:47
https://sims-market.ru/mod/mod-pliazhnyi-voleibol-voly-beach-dlia-sims-4 тут можно скачать Пляжный волейбол, проверял, всё работает и перевод тоже
Вчера, 10:24
У меня на этом месте в Сулани был бар, который я посещал.  Потом я не заходя на участок просто застроил там этот отель. Может поэтому был такой глюк. В итоге я в режиме постройки сровнял всё с землёй и установил отель (правда не совсем тот, а подредактированный кем-то и скачанный мной с галереи). Звонок поставился и вообще функции все работали. Пришлось правда двери поправлять много где, НО кухня так и не заработала почему-то... Есть и плита и холодильник и даже спец полку шеф-повара с плитой поставил, которая делает вырез в стене. Дверь сделал служебной, вход верно указал... но столовая/ресторан отеля так и не заработали. В чём может быть причина?
Отель снял на 30 дней, тут всё получилось.
В галерее только 2 отеля с хештегом lot51hotels было... и то вроде не совсем по этому хештегу нашёл...
P.S.Поставил на территории отеля функциональный пляжный волейбол https://sims-market.ru/mod/mod-pliazhnyi-voleibol-voly-beach-dlia-sims-4
Проверял и бадминтон - работало, смотрелось даже лучше волейбола. Скачивал отсюда https://www.patreon.com/posts/sims-4-badminton-114644937

Вчера, 10:13
что именно не переведено? если можно скрин. сам видел одно место не переведено, в игре не отображается переведенным, а в stbl переведено. конкретно это в даркнете, но это баг мода. мод отнюдь не ровный и там хватает веселостей, например автор удалил строки из мода, а вот код исправить забыл.
Вчера, 09:47
Эту функцию удалили уже давно.
Вчера, 09:31
update pls
Вчера, 07:39
Помогите, раньше могла переключать анимации горячей клавишей. Забыла как это делается, кто-нибудь знает?
Вчера, 06:59
Аналогично. Целий день провела в попытках установить этот мод - увы. Поставила (только!) мод с сайта Zerbu + Venue List тоже от Zerbu. Ноль эффекта. Заменила Venue list на последний от Basemental. Тож по нолям. Убрала. Скачала (только!) этот мод в редакции CeborgE. Ноль. Конфигурации и з папки мод тоже удаляла.
Вчера, 01:20
Мод не работает. Убрала из папки модов все кроме Турбокареры и все равно персонажи уходят в кроличью гору. Может кто подскажет ссылку на сайт CeborgE? Может там что-то есть? Или может платная версия работает? Обидно до слез.
Вчера, 00:24
а это прям полноценный перевод? у меня все равно не все переведено(((

2 августа 2025 22:34
И из анимаций получается?
2 августа 2025 18:09
Цитата: TaylerDen
в Касе, в украшениях, когда контракт подписываешь.

Спасибо большое
2 августа 2025 17:46
Благодарю! Перезалил.
2 августа 2025 17:38
раньше не замечал, толко если перевод после мода, но да всерано тупость 
2 августа 2025 17:36
самое хреновое, если это не вырезать и не вернуть заводское, при вкладывании внешнего перевода мод начинает робить через жопу.
2 августа 2025 17:31
Мне с алхимиста из каждого файла этот позор вырезать нужно 
2 августа 2025 17:27
обновленный перевод для Basemental Drugs 7.18.233: Ссылка Зеркало
прицепом восстановленный до заводских настроек сам мод Basemental Drugs 7.18.233 и проверен в работе: Ссылка Зеркало
2 августа 2025 17:16
качайте вручную
2 августа 2025 17:07
добрый день, столкнулась с той же проблемой. апдейтер норм включается, в первые секунды все ок, но потом скорость загрузки падает на 0 б. везде все проверила, скачивала другие файлы, они спокойно грузятся, но именно апдейтер глючит, что это может быть?
2 августа 2025 17:06
Здесь макияж, а не аксессуары
2 августа 2025 16:08
Качать лишь при одном условии - если не используете WW.
А если хотите голыша на одеяле разглядеть, выберете Расслабиться или Подремать.
2 августа 2025 15:50
Здравствуйте, такая проблема, когда качаю файл, загрузка идет, а потом останавливается
2 августа 2025 15:49
У вас стоит слайдер на увеличение груди? Если нет, то поставьте.
2 августа 2025 15:42
Подскажите, пожалуйста. Я установила мод, скачала всё, что нужно по требованиям, когда вхожу, вся игра сбрасывается. Создаешь нового персонажа, покупаешь дом. Там появляется тот дом, который купил, но нет персонажа, он даже на панели не отображается, на предметы нажать невозможно. 

2 августа 2025 15:16

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


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

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

Переводчик