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

GUI-элементы


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

Категории

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

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

Очередной модпук с авторским хламом внутри, который перестанет обновляться вскоре после своего выпуска. Как это обычно и бывает, но может особо ленивым и любителям графики в стиле игр от Telltale - зайдет.
Сегодня, 00:46
Больше Черт CAS для Симов / More CAS Traits
Черта характера плохая девочка
Черта характера - Суицидальное поведение
Черта характера - Суицидальное поведение
Черта Характера Романтический Садист
черта характера торчок
мод на 100 черт характера не проверила, но уверена он тоже сломан, для него нужен кастом трейт который ломает игру.
а так же множество карьер тоже сломано, сейчас проверяю
короче эта обнова половину модов сломала
Сегодня, 00:40
огромное спасибо...а я мостила стул ссама и немогла понять чего не так Heart 
Сегодня, 00:02
Этот, кхм, нестген навернется после первого же обновления. Игра и без этого вот, еле пыхтит. А потом, это тизерят банальную сборку, без которой можно такой решейд накатить, компьютер в форточку улетит, не то что симс.
Вчера, 23:59
Ниса точно не ломает игру, сейчас проверяю все моды, могу пока сказать что черты характера ломают, рока не знаю какие. Щас буду добавлять по одному и позже отпишусь, какие все таки ломают игру
Вчера, 23:29
Если используется Logi Options, то проследите, что на компьютере включена английская раскладка клавиатуры, иначе в консоли вместо ww.progess_sex пропишется ццюзкщпуыы_ыуч.


Вчера, 23:08
И ещё 116 версия, вовремя. )
Вчера, 22:55
Перевод не может влиять никак.
Подтверждаю — проблемы с 3.3.1 и 3.3.2 версиями на 117 версии игры, 3.3.0 — всё нормально.

Вчера, 22:44
судя по скринам фигня какая-то. из движка симс жать что-то бесполезно.
Вчера, 22:29
Но вот можно ли их применить на NPC - типа заметила непися со спермой на штанах - помогла протерев салфеткой...   

Немного магии романтики и можете пригласить липкого грязнулю для совместного душа Cool

Да, салфетки работают только для активного играемого персонажа. НПС и неиграемые симы ими не пользуются, хотя иногда самостоятельно добывают презервативы из воздуха и глотают противозачаточные из своего багажа. Сперма залипает не только в этом моде, в том же KMI иногда ее хрен сотрешь с довольного лица кончеглота. Так что протирать симов своими руками все же придется Grin

Вчера, 22:10
Ждём!
Вчера, 21:29
Салфетки для вытирания... хороши для своих симов... Но вот можно ли их применить на NPC - типа заметила непися со спермой на штанах - помогла протерев салфеткой...  Grin 
Если они только для игровых персов это наполовину полезно...
Но в любом случае - спасибо за ответ! У меня как раз есть эти части тела, правда в последнее время я предпочитаю стандартный WW причиндал, просто по мене необходимости меняю размеры, если кажется слишком маленьким... Правда сторонние части тела куда как интереснее внешне (ИМХО)...
Ладно, буду экспериментировать, посмотрю будет ли намертво прилипать, если не добавлять слои вручную (удалю пока сами файлы мода, чтобы случайно/машинально не применить вручную какой-то слой, особенно те взаимодействия, что дает именно этот мод, надеюсь если применю вручную слой через WW взаимодействия (если покажется что слишком мало визуала после акта или еще что)...
В общем, спасибо за ответ...
Вчера, 20:51
Спс что протестил, а то я хотел уже ставить его вот же блин(
Вчера, 15:48
Эх... Как же мне не хватает отдельной лайтовой версии данного мода... Я имею в виду мода только на то, что в моде относится к "несмертельным взаимодействиям"... Порой мне эта часть мода очень помогает в очередной задумке (например, отыграть реалистично основу для появления у моего персонажа ПТСР из мода Дивергенты (нравится как там реализовано это состояние) - типа после смерти родителей попал в приемную семью, оба "родителя" в которой оказались садистами, особенно муж, но и жена молчала и покрывала его, даже если не участвовала в насилии)... Короче это мои тараканы с "сюжетами" и отыгрышем...
А также не хватает возможности полного отключения (или хотя бы исключения из автономии) отдельных функций из несмертельных... Не знаю как сейчас, но раньше просто дебильно работала опция "держать в заложниках" - если была включена автономность несмертельных взаимодействий, то свои же члены семьи на своем же участке начинали держать моего перса в заложниках и требовать у своих же деньги... Я могу понять если захватываются чужие персы и не на своем участке! Чтобы платили прохожие и т.п. симы... (надо попробовать найти дискорд или что-то автора, может согласиться сделать проверку на персонажей семьи и нахождение вне своего участка)...  А также меня дико раздражает вырывание волос, которое иногда происходит при автономии... Дико бесит эта функция, когда сим, пусть и на время, становится лысым!!!..
В общем, сорри за "болтологию"... Просто пришла за обновлениями мода, т.к. решила снова попробовать вернуть его в игру (опять есть идеи для отыгрыша и хотя бы на время нужна часть его функций)...
Вчера, 15:29
Симы не хотят ходить в построенную мной школу, ходят в стандартную в копердейле. У участка в копердейле со стандартной школой не могу поменять тип участка. Как быть?
Вчера, 15:23
Пожалуйста. Пару советов:

  1. Перед нажатием хоткея/комбинации для смены анимации выжидайте хотя бы 1-2 сек, иначе будет выбрасывать в диалоговое окно меню игры;
  2. Если выкинуло в меню, то не забудьте следом закрыть и игровую консоль, если она осталась открытой. Иначе ситуация повториться;
  3. Если слишком часто выкидывает в меню игры, выключите скрипт RSPK с системном трее Win > выбрав Exit. Затем запустите приложение снова не закрывая игру.
Вчера, 15:05
Большое спасибо за такую помощь
Вчера, 14:39
Привет, а кто ни будь проверял на новой версии игры? Ничего не ломается, всё ок?
Вчера, 14:34
Привет. Вышла версия 3.5.5 уже,

Вчера, 14:29
По логике вещей, WW должен увидеть слои спермы, если вы добавите в папку Mods только их файлы. Даже если выберете CS, мудлеты не будут возникать без основных файлов мода. 

  • Залипающие и несмываемые слои спермы при ручном применении — есть такое. Мое личное наблюдение показало. что чаще всего такое происходит с мужскими альтернативными вариантами нижней части тела (Noir/Simdulgence/Khlas);
  • Сперма сквозь одежду — вроде как фишка WW. Чтобы другие симы реагировали на это и удивлялись Surprised. В магазине WW продаются салфетки для вытирания на такой случай.

Если сперма прилипла намертво и не смывается используйте в игровой консоли команду ww.fix
Вчера, 14:09
Согласна, кроме действия "Уход за собой". ИМХО, но если ты играешь с таким модом, то не реалистично что следы порки (особенно если произведено подряд несколько действий и появилось не только покраснение, но дошло до синяков), что они снимаются одним действием в душе... Оно полезно, если срочно нужен идеальный вид голого сима для каких-то целей, но только не автономно.
Вчера, 14:01
AutoHotkey — наиболее популярный, но придется чутка изучить язык на котором пишутся скрипты
Logi Options — если есть гаджет от Logitech

p.s. Можете уже заготовленное мини-приложение скачать (делал для себя + варианты). Инструкция в корне
Вчера, 13:31
На странице автора пока тишина с 5 июня. А в "источнике" его(её) больше года не было.
Вчера, 13:30
Вышло обновление под 117 версию игры:
Color Sliders for Hair, Clothes, & Accessories - v2x

(предыдущая версия ломала игру на 117)
Вчера, 13:23
Гений на авторе мода
какую программу посоветуете?
Вчера, 13:21
Автор мода выпилил эту функцию. Переключение анимаций в игре можно забиндить через сторониие приложения для работы с макросами
Вчера, 13:17
После обновления симса на версии 1.117.227.1030 DX11 мод стал крашить игру. Невозможно присоединиться к симу, вечно выкидывает в список городов. Есть ли какой-то апдейт или ещё ничего не слышно?
Вчера, 13:15
Подскажите где настроить хоткеи для включения следующей анимации, раньше была функция, щас не нахожу
Скачал последнюю версию ww (от 14.08)
Вчера, 13:06
3.3.2 по прежнему не грузит семью, пробовал и с переводом и без перевода 3.3.0

Остался на 3.3.0
Вчера, 11:57
Программе 6 лет без обновлений, я не думаю, что она актуальна на данный момент
Вчера, 11:35
Он не обновлялся 6 лет, для поиска дубликатов проще использовать мод менедежер
Вчера, 11:35
Не позволяет загрузить лот на версии 117
Вчера, 02:42
Здравствуйте)

У автора вышла новая версия 2.7 для актуальной версии игры. Можете обновить, пожалуйста?
Вчера, 00:11
У меня вызывает глюк с синим оверлеем при входе в игру, стоит стереть tool и все нормально. Есть варианты решения?
22 августа 2025 22:41

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


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

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

Переводчик