-- File: UI_MAIN_MENU.SCRIPT
-- Description: Load Dialog for STALKER
-- Created: 28.10.2004
-- Lasd edit: 18.01.2006
-- Copyright: 2004 GSC Game World
-- Author: Serhiy Vynnychenko (narrator@gsc-game.kiev.ua)
-- Version: 0.9
-- Er': Reborn Doppelganger build 247/675/737/762/266 (Doppelganger)
erozoner@gmail.com reborn-stalker.ws
---------------------->> CoP style load mod
-- руками не трогать
local press_any_key_on_start = false
local sound_volume_eff,sound_volume_music = 0,0
----------------------<< CoP style load mod
class "main_menu" (CUIScriptWnd)
function main_menu:__init() super()
self.mbox_mode = 0
self:InitControls()
self:InitCallBacks()
xr_s.on_main_menu_on() --' Distemper 03.2008 --
---------------------->> CoP style load mod
if level.present() and not press_any_key_on_start then
level.hide_indicators()
self.start_btn=CUIStatic()
self.start_btn:SetWndRect(Frect():set(0,0,1024,768))
self.start_btn:InitTexture("ui\\ui_load")
self.start_btn:SetText("Нажмите любую клавишу для перехода к игре")
self.start_btn:SetTextAlign(CGameFont.alCenter)
self.start_btn:SetTextY(695)
self.start_btn:SetFont(GetFontGraffiti19Russian())
self.alpha = 0
self:AttachChild(self.start_btn)
self:Show(false)
local con=get_console()
sound_volume_eff=con:get_float("snd_volume_eff")
con:execute("snd_volume_eff 0")
sound_volume_music=con:get_float("snd_volume_music")
con:execute("snd_volume_music 0")
self.tmr = profile_timer() -- создаем таймер
self.tmr:start() -- запускаем его
end
---------------------<< CoP style load mod
end
function main_menu:__finalize()
end
function main_menu:InitControls()
self:SetWndRect (Frect():set(0,0,1280,1024))
local xml = CScriptXmlInit()
xml:ParseFile ("ui_mm_main.xml")
xml:InitStatic ("background", 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 reborn_ver = xml:InitStatic ("version",self)
reborn_ver:SetText ("Er: R.E.B.O.R.N. Doppelganger release build 7.62 / reborn-stalker.ws")
local mm = _G.main_menu.get_main_menu()
_ver:SetText ("Clear Sky ver. " .. mm:GetGSVer())
end
function main_menu:Show(f)
self.shniaga:SetVisibleMagnifier(f)
end
function main_menu:InitCallBacks()
-- new game
self:AddCallback("btn_novice", ui_events.BUTTON_CLICKED, self.OnButton_new_novice_game, self)
self:AddCallback("btn_stalker", ui_events.BUTTON_CLICKED, self.OnButton_new_stalker_game, self)
self:AddCallback("btn_veteran", ui_events.BUTTON_CLICKED, self.OnButton_new_veteran_game, self)
self:AddCallback("btn_master", ui_events.BUTTON_CLICKED, self.OnButton_new_master_game, self)
self:AddCallback("btn_spawn", ui_events.BUTTON_CLICKED, self.OnButton_load_spawn, self)
-- options
self:AddCallback("btn_options", ui_events.BUTTON_CLICKED, self.OnButton_options_clicked, self)
-- load
self:AddCallback("btn_load", ui_events.BUTTON_CLICKED, self.OnButton_load_clicked, self)
-- save
self:AddCallback("btn_save", ui_events.BUTTON_CLICKED, self.OnButton_save_clicked, self)
-- multiplayer
self:AddCallback("btn_multiplayer", ui_events.BUTTON_CLICKED, self.OnButton_multiplayer_clicked, self)
-- quit
self:AddCallback("btn_quit", ui_events.BUTTON_CLICKED, self.OnButton_quit_clicked, self)
self:AddCallback("btn_quit_to_mm", ui_events.BUTTON_CLICKED, self.OnButton_disconnect_clicked, self)
self:AddCallback("btn_ret", ui_events.BUTTON_CLICKED, self.OnButton_return_game, self)
self:AddCallback("btn_lastsave", ui_events.BUTTON_CLICKED, self.OnButton_last_save, self)
self:AddCallback("btn_credits", ui_events.BUTTON_CLICKED, self.OnButton_credits_clicked, self)
-- message box
self:AddCallback("msg_box", ui_events.MESSAGE_BOX_OK_CLICKED, self.OnMsgOk, self)
self:AddCallback("msg_box", ui_events.MESSAGE_BOX_CANCEL_CLICKED, self.OnMsgCancel, self)
self:AddCallback("msg_box", ui_events.MESSAGE_BOX_YES_CLICKED, self.OnMsgYes, self)
self:AddCallback("msg_box", ui_events.MESSAGE_BOX_NO_CLICKED, self.OnMsgNo, self)
self:AddCallback("msg_box", ui_events.MESSAGE_BOX_QUIT_GAME_CLICKED,self.OnMessageQuitGame, self)
self:AddCallback("msg_box", ui_events.MESSAGE_BOX_QUIT_WIN_CLICKED, self.OnMessageQuitWin, self)
end
function main_menu:OnMsgOk()
self.mbox_mode = 0
end
function main_menu:OnMsgCancel()
self.mbox_mode = 0
end
function main_menu:OnMsgYes()
if self.mbox_mode == 1 then
self:LoadLastSave()
end
self.mbox_mode = 0
end
function main_menu:OnMsgNo()
self.mbox_mode = 0
end
function main_menu:LoadLastSave()
local console = get_console()
console:execute ("main_menu off")
console:execute ("load_last_save")
end
function main_menu:OnButton_last_save()
if ( alife() == nil) then
self:LoadLastSave ()
return
end
if ( (db.actor ~= nil) and (db.actor:alive() == false) ) then
self:LoadLastSave ()
return
end
self.mbox_mode = 1
self.message_box:InitMessageBox ("message_box_confirm_load_save")
self:GetHolder():start_stop_menu(self.message_box, true)
end
function main_menu:OnButton_credits_clicked()
-- local console = get_console()
-- console:execute("main_menu off")
game.start_tutorial("credits_seq")
end
function main_menu:OnButton_quit_clicked()
self.message_box:InitMessageBox("message_box_quit_windows")
self:GetHolder():start_stop_menu(self.message_box, true)
end
function main_menu:OnButton_disconnect_clicked()
self.message_box:InitMessageBox("message_box_quit_game")
if (level.game_id() ~= 1) then
self.message_box:SetText("ui_mm_disconnect_message") -- MultiPlayer
else
self.message_box:SetText("ui_mm_quit_game_message") -- SinglePlayer
end
self:GetHolder():start_stop_menu(self.message_box, true)
end
function main_menu:OnMessageQuitGame()
local console = get_console()
console:execute("disconnect")
end
function main_menu:OnMessageQuitWin()
local console = get_console()
console:execute("quit")
end
function main_menu:OnButton_return_game()
log("333")
local console = get_console()
console:execute("main_menu off")
xr_s.on_main_menu_off() --' Distemper 03.2008 --
end
function main_menu:OnButton_new_novice_game()
local console = get_console()
console:execute("g_game_difficulty gd_novice")
self:StartGame()
end
function main_menu:OnButton_new_stalker_game()
local console = get_console()
console:execute("g_game_difficulty gd_stalker")
self:StartGame()
end
function main_menu:OnButton_new_veteran_game()
local console = get_console()
console:execute("g_game_difficulty gd_veteran")
self:StartGame()
end
function main_menu:OnButton_new_master_game()
local console = get_console()
console:execute("g_game_difficulty gd_master")
self:StartGame()
end
function main_menu:StartGame()
local console = get_console()
if (alife() ~= nil) then
console:execute ("disconnect")
end
device():pause(false)
console:execute("start server(er/single/alife/new) client(localhost)")
console:execute("main_menu off")
end
function main_menu:OnButton_load_spawn()
if self.spawn_dlg == nil then
self.spawn_dlg = ui_spawn_dialog.spawn_dialog()
self.spawn_dlg.owner = self
end
self:GetHolder():start_stop_menu(self.spawn_dlg, true)
self:GetHolder():start_stop_menu(self, true) --new
self:Show(false)
end
function main_menu:OnButton_save_clicked()
if self.save_dlg == nil then
self.save_dlg = ui_save_dialog.save_dialog()
self.save_dlg.owner = self
end
self.save_dlg:FillList()
self:GetHolder():start_stop_menu(self.save_dlg, true)
self:GetHolder():start_stop_menu(self, true) --new
self:Show(false)
end
function main_menu:OnButton_options_clicked()
if self.opt_dlg == nil then
self.opt_dlg = ui_mm_opt_main.options_dialog()
self.opt_dlg.owner = self
end
self.opt_dlg:UpdateControls()
self:GetHolder():start_stop_menu(self.opt_dlg, true)
self:GetHolder():start_stop_menu(self, true) --new
self:Show(false)
end
function main_menu:OnButton_load_clicked()
if self.load_dlg ==nil then
self.load_dlg = ui_load_dialog.load_dialog()
self.load_dlg.owner = self
end
self.load_dlg:FillList()
self:GetHolder():start_stop_menu(self.load_dlg, true)
self:GetHolder():start_stop_menu(self, true) --new
self:Show(false)
end
function main_menu:OnButton_multiplayer_clicked()
if self.mp_dlg ==nil then
self.mp_dlg = ui_mp_main.mp_main()
self.mp_dlg.owner = self
end
self.mp_dlg:UpdateControls()
self:GetHolder():start_stop_menu(self.mp_dlg, true)
self:GetHolder():start_stop_menu(self, true) --new
self.mp_dlg:on_show_script()--1.5.07
self:Show(false)
-- self.mp_dlg:OnBtn_Refresh()
local console = get_console()
console:execute ("check_for_updates 0")
self.mp_dlg:OnRadio_NetChanged()
end
function main_menu:Dispatch(cmd, param) --virtual function
if cmd == 2 then
self:OnButton_multiplayer_clicked()
end
return true
end
------------------->> CoP style load mod
function main_menu:Update()
CUIScriptWnd.Update(self)
if self.tmr then
self.tmr:stop() -- останавливаем таймер
if not self.last_time then self.last_time = self.tmr:time() end -- инициализируем время последнего апдейта
if self.tmr:time() - self.last_time > 7000 then -- если прошло больше 7 мс ( чем больше значение, тем медленнее моргание надписи )
self.last_time = self.tmr:time() -- запоминаем время текущего апдейта
self.start_btn:SetTextColor(self.alpha,159,142,126)
if self.alpha > 250 then self.step = -2 elseif self.alpha < 60 then self.step = 2 end
self.alpha = self.alpha + self.step
end
self.tmr:start() -- таймер продолжает работу
end
end
-------------------<< CoP style load mod
function main_menu:OnKeyboard(dik, keyboard_action) --virtual function
CUIScriptWnd.OnKeyboard(self,dik,keyboard_action)
local bind = dik_to_bind(dik)
local console = get_console()
------------------->> CoP style load mod
if self.start_btn and dik ~= DIK_keys.DIK_GRAVE then
self.OnButton_return_game()
return true
end
-------------------<< CoP style load mod
if keyboard_action == ui_events.WINDOW_KEY_PRESSED then
if dik == DIK_keys.DIK_ESCAPE then
if level.present() and
( ((db.actor ~= nil)and(db.actor:alive())) or
(false==IsGameTypeSingle())
) then
self.OnButton_return_game() --' xStream 02.2008
-- console:execute("main_menu off") --' xStream 02.2008
end
end
if dik == DIK_keys.DIK_Q then
self:OnMessageQuitWin()
end
if level.present() and db.actor and db.actor:alive() then
if dik == DIK_keys.DIK_F2 then
get_console():execute( "main_menu off" )
level.start_stop_menu( ui_tab_controller.tabController, true )
end
end
if dik == DIK_keys.DIK_F then
get_console():execute("demo_record 1")
console:execute("main_menu off")
end
--------------------------HUD DISABLE MOD----------------------------
if dik == DIK_keys.DIK_H then
level.hide_indicators_safe()
self.OnButton_return_game()
end
if dik == DIK_keys.DIK_J then
level.show_indicators()
self.OnButton_return_game()
end
if dik == DIK_keys.DIK_NUMPAD1 then
local console = get_console()
console:execute("r2_ls_bloom_fast on")
self.OnButton_return_game()
end
if dik == DIK_keys.DIK_NUMPAD0 then
local console = get_console()
console:execute("r2_ls_bloom_fast off")
self.OnButton_return_game()
end
end
return true
end
-------------------->> CoP style load mod
local timer = 0
function f1() return timer<time_global() end
function f2()
set_inactivate_input_time(5)
get_console():execute("main_menu 1")
timer = time_global() + 200
level.add_call(f1,f3)
end
function f3()
local console = get_console()
console:hide()
press_any_key_on_start = true
level.show_indicators()
console:execute("snd_volume_eff " .. sound_volume_eff)
console:execute("snd_volume_music " .. sound_volume_music)
sound_volume_eff,sound_volume_music = nil,nil
end
function start()
if has_alife_info("mar_intro_start") then
timer = time_global() + 500
level.add_call(f1,f2)
else
press_any_key_on_start = true
end
end
--------------------<< CoP style load mod