Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- 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)
- -- Additions: Dynamic Menu by Daemonion for LURK 1.2
- -- Version: 0.9
- -- Thanks: OGSE team for some of their code, CrommCruac for syntax help
- --------------------------------------------------------------
- -- ZRP revisions
- -- 070803 - OnButton_quit_clicked change to skip confirmation
- -- 070924 - OnButton_save_level_clicked added
- -- 080202 - animation conditionals, mod_version, _z.process_key()
- -- 080404 - support for teleport and jump dialogs, re-enabled quit hotkey
- -- 090825 - save prefix, Esc F5/F6 quick named saves
- -- 091218 - ZRP Support Utilities interface, Enter key fix
- -- 100323 - save prefix now lowercased, filtered for valid characters
- -- 120303 - some code cleanup; made TZIO and intra-level jump menus optional
- -- 120325 - removed " - start" named quicksave; now part of named autosaves
- -- set this variable to false if you want the old prompt-to-quit behavior
- local quit_without_asking = true
- -- set this to false if you don't want the Q key to quit
- local use_quit_hotkey = true
- -- set this true if you want additional fixes, capabilities and cheats on the Z key
- allow_zrp_utilities = true
- -- set this true if you want the ability to fast travel on a level
- allow_level_jump = true
- -- set this true if you want TZIO chapter selection (see docs)
- allow_TZIO = true
- -- set this filename prefix to identify unique sets of savegames
- -- for named saves made via save dialog, and Esc S, Esc F5/F6 saves
- -- must be valid filename characters in doublequotes, should be kept short
- save_prefix = ""
- save_made = false
- class "main_menu" (CUIScriptWnd)
- function main_menu:__init() super()
- self.mbox_mode = 0
- self:InitControls()
- self:InitCallBacks()
- -- some protection
- if type(save_prefix) == "string" then
- local new_save_prefix = string.gsub(save_prefix, "%%", "_")
- new_save_prefix = string.lower(new_save_prefix)
- save_prefix = string.gsub(new_save_prefix, "[:<=>?%*\\/;|,]", "_")
- if save_prefix ~= new_save_prefix then
- dbglog("Invalid filename char(s) in save_prefix - using \""..save_prefix.."\"")
- end
- else
- dbglog("Error in save prefix")
- save_prefix = ""
- end
- end
- function main_menu:__finalize()
- end
- _ver_static = nil
- ------------------------------------------------------------------
- ------------------------------------------------------------------
- -- BEGIN Dynamic Menu changes by Daemonion for LURK 1.2
- ------------------------------------------------------------------
- ------------------------------------------------------------------
- function main_menu:InitControls()
- self:Init(0,0,1024,768)
- local xml = CScriptXmlInit()
- xml:ParseFile("ui_mm_main.xml")
- local flist = getFS():file_list_open_ex("$game_saves$",bit_or(bit_or(FS.FS_ListFiles,FS.FS_RootOnly), FS.FS_ClampExt) , "*.sav")
- local f_cnt = flist:Size()
- local con = get_console()
- local y,m,d,h,min,sec,ms = nil,nil,nil,nil,nil,nil,nil
- flist:Sort(5)
- if f_cnt > 0 then
- local file = flist:GetAt(0)
- local sg = CSavedGameWrapper(file:NameFull())
- y,m,d,h,min,sec,ms = sg:game_time():get()
- ----- from OGSE
- -- local level_name = sg:level_name()
- -- con:execute("level_name="..level_name)
- -- local level_id = sg:level_id()
- -- con:execute("level_id="..level_id)
- -- local actor_health = sg:actor_health()
- -- con:execute("actor_health="..actor_health)
- -----
- end
- -- picks proper texture from ui_mm_main based on the level
- if level and level.present() then
- -- level AND time of day dependent; haven't tested yet; just wrote it
- -- local htime = level.get_time_hours()
- -- if htime <= 5 or htime >= 20 then
- -- night level menu
- -- xml:InitStatic("mm_night"..level.name(), self)
- -- else
- -- day level menu
- -- xml:InitStatic("mm_day"..level.name(), self)
- xml:InitStatic("mm_"..level.name(), self)
- else
- -- shows at start of game before a save is loaded
- xml:InitStatic("mm_start", self)
- end
- 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()
- if type(mm.GetGSVer) ~= "function" then
- _ver:SetText("ver. 1.0 - NOT COMPATIBLE with " .. _z.mod_version_str)
- else
- _ver:SetText("ver. " .. mm:GetGSVer() .. " - " .. _z.mod_version_str)
- end
- _ver_static = _ver
- save_made = false
- end
- ------------------------------------------------------------------
- ------------------------------------------------------------------
- -- END Dynamic Menu changes by Daemonion for LURK 1.2
- ------------------------------------------------------------------
- ------------------------------------------------------------------
- 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)
- self:AddCallback("btn_save_level", ui_events.BUTTON_CLICKED, self.OnButton_save_level_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 not db.actor:alive() then
- self:LoadLastSave();
- return
- end
- self.mbox_mode = 1
- self.message_box:Init ("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()
- if quit_without_asking then
- _ver_static:SetText(" Quitting...")
- self.OnMessageQuitWin()
- else
- self.message_box:Init("message_box_quit_windows")
- self:GetHolder():start_stop_menu(self.message_box, true)
- end
- end
- function main_menu:OnButton_disconnect_clicked()
- self.message_box:Init("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()
- local console = get_console()
- console:execute("main_menu off")
- 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
- console:execute("start server(all/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:GetHolder():start_stop_menu(self.save_dlg, true)
- self:GetHolder():start_stop_menu(self, true) --new
- self:Show(false)
- if save_prefix ~= "" then
- local edit_box = self.save_dlg:GetEditBox("edit_filename")
- edit_box:SetText(save_prefix)
- end
- 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: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:Show(false)
- -- self.mp_dlg:OnBtn_Refresh()
- local console = get_console()
- console:execute ("check_for_updates 0")
- self.mp_dlg:OnRadio_NetChanged()
- end
- -- ZRP functions
- function AddTimeDigits(str, dig)
- if (dig > 9) then
- str = str .. dig
- else
- str = str .. "0" .. dig
- end
- return str
- end
- function main_menu:OnButton_save_level_clicked()
- local console = get_console()
- local y,m,d,h,min,sec,ms = 0,0,0,0,0,0,0
- y,m,d,h,min,sec,ms = game.get_game_time():get(y,m,d,h,min,sec,ms)
- local date_time = "_"
- date_time = date_time .. y
- date_time = date_time .. "-"
- date_time = AddTimeDigits(date_time, m)
- date_time = date_time .. "-"
- date_time = AddTimeDigits(date_time, d)
- date_time = date_time .. "_"
- date_time = AddTimeDigits(date_time, h)
- date_time = AddTimeDigits(date_time, min)
- -- date_time = AddTimeDigits(date_time, sec)
- console:execute("main_menu off")
- console:execute("save " .. save_prefix .. level.name() .. date_time)
- end
- function main_menu:teleport_dialog()
- if self.teleport_dlg ==nil then
- self.teleport_dlg = ui_teleport_dialog.teleport_dialog()
- self.teleport_dlg.owner = self
- end
- if level.name() ~= "l01_escape" then
- self.teleport_dlg.check_equiponly:SetCheck(true)
- end
- self:GetHolder():start_stop_menu(self.teleport_dlg, true)
- self:GetHolder():start_stop_menu(self, true) --new
- self:Show(false)
- end
- function main_menu:zrp_level_zip_dialog()
- if self.level_zip_dlg ==nil then
- self.level_zip_dlg = ui_level_zip_dialog.level_zip_dialog()
- self.level_zip_dlg.owner = self
- end
- self.level_zip_dlg:FillList() -- init for each level invocation
- self:GetHolder():start_stop_menu(self.level_zip_dlg, true)
- self:GetHolder():start_stop_menu(self, true) --new
- self:Show(false)
- end
- function main_menu:zrp_utils_dialog()
- if self.zrp_utils_dlg == nil then
- self.zrp_utils_dlg = ui_zrp_utils_dialog.zrp_utils_dialog()
- self.zrp_utils_dlg.owner = self
- end
- self:GetHolder():start_stop_menu(self.zrp_utils_dlg, true)
- self:GetHolder():start_stop_menu(self, true) --new
- self:Show(false)
- end
- -- end ZRP functions
- function main_menu:Dispatch(cmd, param) --virtual function
- if cmd == 2 then
- self:OnButton_multiplayer_clicked()
- end
- return true
- end
- 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()
- if keyboard_action == ui_events.WINDOW_KEY_PRESSED then
- local alive_on_level = level.present() and (db.actor ~= nil) and db.actor:alive()
- if dik == DIK_keys.DIK_ESCAPE and alive_on_level then
- console:execute("main_menu off")
- elseif dik == DIK_keys.DIK_Q and use_quit_hotkey then
- self:OnMessageQuitWin()
- elseif dik == DIK_keys.DIK_RETURN then
- if save_made then
- save_made = false
- self:OnButton_return_game()
- else
- return false --let the original functionality have it
- end
- elseif (dik == DIK_keys.DIK_F5 or dik == DIK_keys.DIK_F6) and alive_on_level then
- console:execute("main_menu off")
- console:execute("save " .. save_prefix..level.name().."_snapshot")
- elseif dik == DIK_keys.DIK_S and alive_on_level then
- self:OnButton_save_level_clicked()
- elseif dik == DIK_keys.DIK_T and allow_TZIO and ui_teleport_dialog and alive_on_level then
- self:teleport_dialog()
- elseif dik == DIK_keys.DIK_J and allow_level_jump and ui_level_zip_dialog and alive_on_level then
- self:zrp_level_zip_dialog()
- elseif dik == DIK_keys.DIK_Z and allow_zrp_utilities and ui_zrp_utils_dialog and alive_on_level then
- self:zrp_utils_dialog()
- elseif _z then
- return _z.process_key(self, dik, keyboard_action)
- end
- end
- return true
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement