Чтобы при заходе в игру мы видели рандомные менюшки, нам нужно создать три xml блока и немного изменить скрипт ui_main_menu.script. Для начала сделаем три xml блока.
ui_mm_main.xml:
<w>
<!-- Фон 1 -->
<background1>
<auto_static x="0" y="0" width="1024" height="768" stretch="1">
<texture>ui\mm_background1</texture>
</auto_static>
</background1>
<!-- Фон 2 -->
<background2>
<auto_static x="0" y="0" width="1024" height="768" stretch="1">
<texture>ui\mm_background2</texture>
</auto_static>
</background2>
<!-- Фон 3 -->
<background3>
<auto_static x="0" y="0" width="1024" height="768" stretch="1">
<texture>ui\mm_background3</texture>
</auto_static>
</background3>
<!-- Главное меню (одинаковая разметка, меняется только фон через секцию) -->
<menu_main btn_height="34" font="letterica18">
<btn name="btn_new_game" caption="ui_mm_newgame" />
<btn name="btn_load" caption="ui_mm_load_game" />
<btn name="btn_net_game" caption="ui_mm_network_game" />
<btn name="btn_options" caption="ui_mm_options_n" />
<btn name="btn_credits" caption="ui_mm_credits" />
<btn name="btn_quit" caption="ui_mm_quit2windows" />
</menu_main>
</w>
С профилями думаю не у кого не возникнет проблем, поэтому переходим к скрипту.
В нём нас интересует эта строка --> xml:InitStatic("background", self)
заменяем эту строку на:
-- выбираем случайный фон (1..3)
local rand_bg = math.random(3)
local section_name = "background" .. rand_bg
-- инициализация выбранного фона
xml:InitStatic(section_name, self)
Вот и всё. Больше нас ничего не интересует, кнопки и шниага работают по оригиналу, скрипт особо не задет.
В контексте этого скрипта, InitControls будет выглядеть так:
function main_menu:InitControls()
self:SetWndRect(Frect():set(0,0,1024,768))
local xml = CScriptXmlInit()
xml:ParseFile("ui_mm_main.xml")
-- случайный выбор одного из трёх фонов
local rand_bg = math.random(3)
local section_name = "background" .. rand_bg
xml:InitStatic(section_name, self)
self.shniaga = xml:InitMMShniaga("shniaga_wnd", self)
self.message_box = CUIMessageBoxEx()
self:Register(self.message_box, "msg_box")
local _ver = xml:InitStatic("static_version", self)
local mm = _G.main_menu.get_main_menu()
_ver:TextControl():SetText("ver. " .. mm:GetGSVer())
self.l_mgr = mm:GetLoginMngr()
self.acc_mgr = mm:GetAccountMngr()
self.profile_store = mm:GetProfileStore()
self.gs_profile = self.l_mgr:get_current_profile()
if (self.gs_profile and not(level.present())) then
self.shniaga:ShowPage(CUIMMShniaga.epi_new_network_game) --fake
self.shniaga:SetPage(CUIMMShniaga.epi_main, "ui_mm_main.xml", "menu_main_logout")
self.shniaga:ShowPage(CUIMMShniaga.epi_main)
end
end !Фон выбирается случайно из уже существующих секций XML.
Этот урок для людей которые хотя-бы немного понимают, как прописать путь к своим текстурам в xml...
Если что-то не понятно, задавайте вопросы, решим.