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

GUI-элементы


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

Категории

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

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

Всю жизнь этого самого ww заменяю файлы в папке (мною созданной!) и все подхватывается, заменяется, играется...
Сегодня, 13:02
ещё бы тот же самый фикс от посчёта уровня отношений со случайными симами, когда активно игрок с ними не общался, чистая автономия симов, а начинают вылазить в журнале - такой то сим не удовлетворён, такой то их подсчитывает
Сегодня, 12:52
Именно в этом самом видео и заключается основная проблема. Там показано, как в папку mods ложится папка WickedWhimsMod к одному единственному Resource.cfg файлу. Нигде ни на полшишечки в видео про замену прежнего файла
Сегодня, 12:42
Мод обновляется простой заменой файлов. Если на этом этапе происходит сбой, то проверьте свою папку модов на предмет дублей, старых версий других модов. И, самое важное, ваша текущая версия игры ДОЛЖНА быть последней на текущий момент, для обновления модами последних версий. Не все обновленные моды имеют обратную совместимость со старыми версиями игры. Внимательно читайте описание от автора мода.

Далее копипаста с другого сайта, которая даст ответ по поводу чистки:



PS По личному опыту скажу - этот мод не требует "новой игры".
    


Сегодня, 06:39
В архиве с модом есть ВИДЕО, какая еще инструкция вам нужна?
Сегодня, 06:32
Уважаемые, вы нас очень сильно обяжете, если в тему добавите как теперь правильно обновлять этот самый мод WW.
Проблема в том, что если просто старую папку заменить на новую, то игра его не подхватывает, как другие заменённые на новые моды, каждый раз приходится начинать игру заново, а иногда и переустанавливать её, возможно проблема в формируемой папке ww в сейвах, я хз или что-то мы делаем не правильно
Сегодня, 05:42
Главное чтобы архиватор был не из пиратской сборки винды пятилетней давности и все норм распакуется.
Сегодня, 03:00
Похоже, что архиватор накосячил при распаковке архива. Вы чем разархивировали? Автор рекомендует 7z, я распаковываю WinRar — никаких проблем. Попробуйте перекачать перевод заново и снова разархивировать.

Сегодня, 02:57
скачай антивирус)) 
Сегодня, 01:30
Потому что если об этой проблеме заявляет 1 человек на 12266 загрузок минимум, то это явно не моя проблема. Пока что могу предложить только лишь подождать, когда я обновлю перевод, а с указанием в вашем профиле страны - английский для вас проблемой быть не должен))
Сегодня, 01:18
Я попробовала запустить игру с вашим русификатором вместе с модом WW 184.1 и без него. Все остальные моды я убрала. Игра по прежнему выдаёт ту же ошибку и не запускается. Не понимаю, почему проблема на моей стороне.
Сегодня, 00:50
Наконец-то  обновился  долго  же не было  обновы
Сегодня, 00:02
вышла v54 совместима с 1.110.294  
Вчера, 22:19
Да-да уже вышло 
Вчера, 22:05
Автор, не помню с какого релиза, но уже давно, перенесла в "испытания", потому что их у участка может быть сколько угодно, а количество "свойств" ограничено, и они могут быть уже заняты.

Вчера, 22:00
дааа,играла, тоже невозможно, надеюсь и верю что в какой-нибудь версии исправят эту несовместность Unsure 
Вчера, 21:59
  публичная 9.7.8 версия
Вчера, 21:43
ооо черт спасибо а я ищу в свойствах учатска... как бы логично там искать а не в испытаниях
Вчера, 21:40
Жить в обслуживании - это в испытаниях, кликните по "кубку" в настройках участка.
Вчера, 21:37
уже кое-где вышел)) надеюсь, скоро сюда зальют)
Вчера, 21:32
LiveInServices установил но жить в обслуживании не появилось.. бедааа ... мод добавляет вторую няню
Спасибо щас гляну эти настройки

ищу настройки со скрина капец куча всего мнеб наводку где это искать
Вчера, 21:37
Эти настройки смотрели в КЦ?

Первая опция приоритетная. Если отключить, то, возможны удаления нужных детей, в случае внезапной смерти. Дополнительно, нужно вставить ограничение на количество детей и на прочих четвероногих. Беременность игра учитывает на момент добавления перса в семью.
Вчера, 21:21
да я и в МС все вроде обшарил но непомогло... ладно посмотрю еще... мож чето пропустил ....про жить в обслуживании спасибо постараюсь найти этот мод 
Вчера, 21:11
Опции у себя видел, думаю всё на месте. Да и в патчноуте на 184.4 просто фиксы, ничего нового и ничего про удаление функционала. Проверьте настройки мода.

Посмотрел:
Вчера, 21:02
Настройки усыновления в моде MCCC  (MC Command Center).
"Жить в обслуживании" это, емнип, с мода LittleMsSam - LiveInServices.
Оба есть на этом сайте.

Вчера, 20:51
приветствую, а simhub убрали или только у меня он исчез?
Вчера, 20:50
Заранее извиняюсь возможно мой вопрос не относится к WW и всеже есть возможность отключить усыновление для неиграимых семей. шарился в настройках беременности и т.д. вроде там есть про усыновление все поотключал но всеравно пары сами себе усыновляют детей даже будучи уже беременными.... да и еще у меня нет опции жить в обслуживании для дома может кто подскажет в чем проблема?
Вчера, 20:16
да, а в от 17.11 какие-то новое заклинания, то есть опять ждем перевода от Оригамика Гроуп или что то там ещё
Вчера, 17:48
Да это массовый глюк. Нужно скачивать новый под версию 110. Поищите, многие уже переделали мододелы 
Вчера, 17:30
спасибо за обновушку Angel 
Вчера, 17:27
Не могу симку отправит на работу. Бордель сделала всё равно не идёт

Вчера, 13:49
Вроде как разобралась со своей проблемой сама, но уточню. Мод не конфликтует с заменой интерфейса, конкретно с меловым оформлением на чёрном фоне? У меня симка когда уже готова родить, до момента выбора имени рожает, а потом зависает и всё. Ресет сима оканчивает роды, мудлеты как после рождения есть, а ребёнка нет ни в жизни, ни в родословной. Я увидела, что по невнимательности не удалила старую версию мода, кода обновлялась, но лучше перестрахуюсь.
Вчера, 11:04
Изначально была ссылка на версию 184.3, но мы обновили её до 184.4. Зачем нам ориентироваться на версию 183, если за ней следуют ещё три версии 184? Скорее всего вы ошиблись.
Вчера, 09:53
Мод уже неактуален, есть аналогичный мод на curseforge от Loulicorn, который ПОЛНОСТЬЮ разблокирует все предметы ---> тык
Вчера, 07:46
теперь да сама игра его уже видеть
Вчера, 06:17

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


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

Редактор
  • Дней
  • Часов
  • Минут