TKGP

How Into Pozitsiya

Nov 25th, 2017
352
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --/amk_rel_1/
  2. -- File:        UI_MAIN_MENU.SCRIPT
  3. -- Description: Load Dialog for STALKER
  4. -- Created:     28.10.2004
  5. -- Lasd edit:   18.01.2006
  6. -- Copyright:   2004 GSC Game World
  7. -- Author:      Serhiy Vynnychenko (narrator@gsc-game.kiev.ua)
  8. -- Version:     0.9
  9.  
  10. -- v1ld: ZRP
  11. -- set this filename prefix to identify unique sets of savegames
  12. -- for named saves made via save dialog, and Esc S, Esc F5/F6 saves
  13. -- must be valid filename characters in doublequotes, should be kept short
  14. save_prefix = ""
  15.  
  16. class "main_menu" (CUIScriptWnd)
  17.  
  18. function main_menu:__init() super()
  19.     self.mbox_mode = 0
  20.    self:InitControls()
  21.    self:InitCallBacks()
  22.  
  23.     -- v1ld: ZRP
  24.     -- some protection
  25.     if type(save_prefix) == "string" then
  26.         local new_save_prefix = string.gsub(save_prefix, "%%", "_")
  27.         new_save_prefix = string.lower(new_save_prefix)
  28.         save_prefix = string.gsub(new_save_prefix, "[:<=>?%*\\/;|,]", "_")
  29.         if save_prefix ~= new_save_prefix then
  30.             dbglog("Invalid filename char(s) in save_prefix - using \""..save_prefix.."\"")
  31.         end
  32.     else
  33.         dbglog("Error in save prefix")
  34.         save_prefix = ""
  35.     end
  36. end
  37.  
  38. function main_menu:__finalize()
  39.  
  40. end
  41.  
  42. function main_menu:InitControls()
  43.     self:Init(0,0,1024,768)          
  44.     local xml = CScriptXmlInit()
  45.     xml:ParseFile("ui_mm_main.xml")
  46.      
  47.     xml:InitStatic("back_movie", self)
  48.     xml:InitStatic("background", self)
  49.    -- xml:InitStatic("fire_movie", self)
  50.     self.shniaga = xml:InitMMShniaga("shniaga_wnd",self);
  51.    
  52.     self.message_box = CUIMessageBoxEx()
  53.     self:Register(self.message_box, "msg_box") 
  54.    
  55.     local _ver = xml:InitStatic     ("static_version",self)
  56.     local mm                        = _G.main_menu.get_main_menu()
  57.     --_ver:SetText                  ("ver. " .. mm:GetGSVer())
  58.     local amk_title         = amk_ver.amk_title
  59.     local amk_version       = amk_ver.amk_version
  60.     local amk_revision  = amk_ver.amk_revision
  61.     local debug_mode = ""
  62.     _ver:SetText("Game Version - " .. mm:GetGSVer() .. "  " .. amk_title .. " " .. amk_version .. " " .. amk_revision)
  63. end
  64.  
  65. function main_menu:Show(f)
  66.     self.shniaga:SetVisibleMagnifier(f)
  67. end
  68.  
  69.  
  70. function main_menu:InitCallBacks()
  71.     -- new game
  72.     self:AddCallback("btn_novice",      ui_events.BUTTON_CLICKED,               self.OnButton_new_novice_game,      self)
  73.     self:AddCallback("btn_stalker",     ui_events.BUTTON_CLICKED,               self.OnButton_new_stalker_game,     self)
  74.     self:AddCallback("btn_veteran",     ui_events.BUTTON_CLICKED,               self.OnButton_new_veteran_game,     self)
  75.     self:AddCallback("btn_master",      ui_events.BUTTON_CLICKED,               self.OnButton_new_master_game,      self)
  76.     self:AddCallback("btn_spawn",       ui_events.BUTTON_CLICKED,               self.OnButton_load_spawn,           self)
  77.     -- options                                                                                                         
  78.     self:AddCallback("btn_options",     ui_events.BUTTON_CLICKED,               self.OnButton_options_clicked,      self)
  79.     -- load                                                                                                            
  80.     self:AddCallback("btn_load",        ui_events.BUTTON_CLICKED,               self.OnButton_load_clicked,         self)
  81.     -- save                                                                                                            
  82.     self:AddCallback("btn_save",        ui_events.BUTTON_CLICKED,               self.OnButton_save_clicked,         self)
  83.     -- multiplayer                                                                                                     
  84.     self:AddCallback("btn_multiplayer", ui_events.BUTTON_CLICKED,               self.OnButton_multiplayer_clicked,  self)
  85.     -- quit                                                                                                            
  86.     self:AddCallback("btn_quit",        ui_events.BUTTON_CLICKED,               self.OnButton_quit_clicked,         self)
  87.     self:AddCallback("btn_quit_to_mm",  ui_events.BUTTON_CLICKED,               self.OnButton_disconnect_clicked,   self)
  88.     self:AddCallback("btn_ret",         ui_events.BUTTON_CLICKED,               self.OnButton_return_game,          self)
  89.     self:AddCallback("btn_lastsave",    ui_events.BUTTON_CLICKED,               self.OnButton_last_save,            self)
  90.     self:AddCallback("btn_credits",     ui_events.BUTTON_CLICKED,               self.OnButton_credits_clicked,      self)
  91.     -- message box                                                                                                     
  92.     self:AddCallback("msg_box",     ui_events.MESSAGE_BOX_OK_CLICKED,       self.OnMsgOk,                       self)
  93.     self:AddCallback("msg_box",     ui_events.MESSAGE_BOX_CANCEL_CLICKED,   self.OnMsgCancel,                   self)
  94.     self:AddCallback("msg_box",     ui_events.MESSAGE_BOX_YES_CLICKED,      self.OnMsgYes,                      self)
  95.     self:AddCallback("msg_box",     ui_events.MESSAGE_BOX_NO_CLICKED,       self.OnMsgNo,                       self)
  96.     self:AddCallback("msg_box",         ui_events.MESSAGE_BOX_QUIT_GAME_CLICKED,self.OnMessageQuitGame,             self)
  97.     self:AddCallback("msg_box",         ui_events.MESSAGE_BOX_QUIT_WIN_CLICKED, self.OnMessageQuitWin,              self)
  98.     --amk
  99.     self:AddCallback("btn_amk",     ui_events.BUTTON_CLICKED,               self.amk_options,       self)
  100.  
  101. end
  102. function main_menu:OnMsgOk()
  103.     self.mbox_mode = 0
  104. end
  105.  
  106. function main_menu:OnMsgCancel()
  107.     self.mbox_mode = 0
  108. end
  109.  
  110. function main_menu:OnMsgYes()
  111.    
  112.     if  self.mbox_mode == 1 then
  113.         self:LoadLastSave()
  114.     end
  115.  
  116.     self.mbox_mode = 0
  117. end
  118.  
  119. function main_menu:OnMsgNo()
  120.     self.mbox_mode = 0
  121. end
  122.  
  123. function main_menu:LoadLastSave()
  124.     local                   console = get_console()
  125.     console:execute         ("main_menu off")
  126.     console:execute         ("load_last_save")
  127. end
  128.  
  129. function main_menu:OnButton_last_save()
  130.     if (alife() == nil) then
  131.         self:LoadLastSave   ();
  132.         return
  133.     end
  134.  
  135.     -- v1ld: ZRP
  136.     if db.actor ~= nil and not db.actor:alive() then
  137.         self:LoadLastSave();
  138.         return
  139.     end
  140.  
  141.     self.mbox_mode          = 1
  142.     self.message_box:Init   ("message_box_confirm_load_save")
  143.     self:GetHolder():start_stop_menu(self.message_box, true)
  144. end
  145.  
  146. function main_menu:OnButton_credits_clicked()
  147. --  local console = get_console()
  148. --  console:execute("main_menu off")
  149.     game.start_tutorial("credits_seq")
  150. end
  151.  
  152. function main_menu:OnButton_quit_clicked()
  153.     self.message_box:Init("message_box_quit_windows")
  154.     self:GetHolder():start_stop_menu(self.message_box, true)
  155. end
  156.  
  157.  
  158. function main_menu:OnButton_disconnect_clicked()
  159.     self.message_box:Init("message_box_quit_game")
  160.    
  161.     if (level.game_id() ~= 1) then     
  162.         self.message_box:SetText("ui_mm_disconnect_message")    -- MultiPlayer
  163.     else
  164.         self.message_box:SetText("ui_mm_quit_game_message")     -- SinglePlayer
  165.     end
  166.     self:GetHolder():start_stop_menu(self.message_box, true)
  167. end
  168.  
  169. function main_menu:OnMessageQuitGame()
  170.     local console = get_console()
  171.     console:execute("disconnect")
  172. end
  173.  
  174. function main_menu:OnMessageQuitWin()
  175.     local console = get_console()
  176.     console:execute("quit")
  177. end
  178.  
  179. function main_menu:OnButton_return_game()
  180.     local console = get_console()
  181.     console:execute("main_menu off")
  182. end
  183.  
  184. function main_menu:OnButton_new_novice_game()
  185.     local console = get_console()
  186.     console:execute("g_game_difficulty gd_novice")
  187.     self:StartGame()   
  188. end
  189.  
  190. function main_menu:OnButton_new_stalker_game()
  191.     local console = get_console()
  192.     console:execute("g_game_difficulty gd_stalker")
  193.     self:StartGame()
  194. end
  195.  
  196. function main_menu:OnButton_new_veteran_game()
  197.     local console = get_console()
  198.     console:execute("g_game_difficulty gd_veteran")
  199.     self:StartGame()
  200. end
  201.  
  202. function main_menu:OnButton_new_master_game()
  203.     local console = get_console()
  204.     console:execute("g_game_difficulty gd_master")
  205.     self:StartGame()
  206. end
  207.  
  208. function main_menu:StartGame()
  209.     local console = get_console()
  210.    
  211.     if (alife() ~= nil) then
  212.         console:execute ("disconnect") 
  213.     end
  214.    
  215.     console:execute("start server(all/single/alife/new) client(localhost)")
  216.     console:execute("main_menu off")
  217. end
  218.  
  219. function main_menu:OnButton_load_spawn()
  220.     if self.spawn_dlg == nil then
  221.         self.spawn_dlg = ui_spawn_dialog.spawn_dialog()
  222.         self.spawn_dlg.owner = self
  223.     end
  224.    
  225.     self:GetHolder():start_stop_menu(self.spawn_dlg, true)
  226.     self:GetHolder():start_stop_menu(self, true) --new
  227.     self:Show(false)
  228. end
  229.  
  230. function main_menu:OnButton_save_clicked()
  231.     if self.save_dlg == nil then
  232.         self.save_dlg = ui_save_dialog.save_dialog()
  233.         self.save_dlg.owner = self
  234.     end
  235.    
  236.     self:GetHolder():start_stop_menu(self.save_dlg, true)
  237.     self:GetHolder():start_stop_menu(self, true) --new
  238.     self:Show(false)
  239.     -- v1ld: ZRP
  240.     if save_prefix ~= "" then
  241.         local edit_box = self.save_dlg:GetEditBox("edit_filename")
  242.         edit_box:SetText(save_prefix)
  243.     end
  244. end
  245.  
  246. function main_menu:OnButton_options_clicked()
  247.     if self.opt_dlg == nil then
  248.         self.opt_dlg = ui_mm_opt_main.options_dialog()
  249.         self.opt_dlg.owner = self
  250.     end
  251.    
  252.     self.opt_dlg:UpdateControls()
  253.     self:GetHolder():start_stop_menu(self.opt_dlg, true)
  254.     self:GetHolder():start_stop_menu(self, true) --new
  255.     self:Show(false)
  256.   amk_mod.hud_update=true
  257. end
  258.  
  259. function main_menu:OnButton_load_clicked()
  260.     if self.load_dlg ==nil then
  261.         self.load_dlg = ui_load_dialog.load_dialog()
  262.         self.load_dlg.owner = self
  263.     end
  264.    
  265.     self:GetHolder():start_stop_menu(self.load_dlg, true)
  266.     self:GetHolder():start_stop_menu(self, true) --new
  267.     self:Show(false)
  268. end
  269.  
  270. function main_menu:OnButton_multiplayer_clicked()
  271.     if self.mp_dlg ==nil then
  272.         self.mp_dlg = ui_mp_main.mp_main()
  273.         self.mp_dlg.owner = self
  274.     end
  275.     self.mp_dlg:UpdateControls()
  276.     self:GetHolder():start_stop_menu(self.mp_dlg, true)
  277.     self:GetHolder():start_stop_menu(self, true) --new
  278.     self:Show(false)
  279.    
  280. --  self.mp_dlg:OnBtn_Refresh()
  281.    
  282.     local console           = get_console()
  283.     console:execute         ("check_for_updates 0")
  284.    
  285.     self.mp_dlg:OnRadio_NetChanged()
  286. end
  287.  
  288. -- v1ld: ZRP
  289. function AddTimeDigits(str, dig)
  290.     if (dig > 9) then
  291.         str = str .. dig
  292.     else
  293.         str = str .. "0" .. dig
  294.     end
  295.     return str
  296. end
  297.  
  298. -- v1ld: ZRP
  299. function main_menu:OnButton_save_level_clicked()
  300.     local console = get_console()
  301.     local y,m,d,h,min,sec,ms = 0,0,0,0,0,0,0
  302.  
  303.     y,m,d,h,min,sec,ms = game.get_game_time():get(y,m,d,h,min,sec,ms)
  304.  
  305.     local date_time = "_"
  306.  
  307.     date_time = date_time .. y
  308.     date_time = date_time .. "-"
  309.     date_time = AddTimeDigits(date_time, m)
  310.     date_time = date_time .. "-"
  311.     date_time = AddTimeDigits(date_time, d)
  312.     date_time = date_time .. "_"
  313.     date_time = AddTimeDigits(date_time, h)
  314.     date_time = AddTimeDigits(date_time, min)
  315.     -- date_time = AddTimeDigits(date_time, sec)
  316.  
  317.     console:execute("main_menu off")
  318.     console:execute("save " .. save_prefix .. level.name() .. date_time)
  319. end
  320.  
  321. function main_menu:Dispatch(cmd, param)  --virtual function
  322.     if cmd == 2 then
  323.         self:OnButton_multiplayer_clicked()
  324.     end
  325.     return true
  326. end
  327.  
  328. function main_menu:OnKeyboard(dik, keyboard_action)  --virtual function
  329.     CUIScriptWnd.OnKeyboard(self,dik,keyboard_action)
  330.     local bind = dik_to_bind(dik)
  331.     local console = get_console()
  332.  
  333.     -- v1ld: added ZRP level and snapshot saves
  334.     if keyboard_action == ui_events.WINDOW_KEY_PRESSED then
  335.         local alive_on_level = level.present() and (db.actor ~= nil) and db.actor:alive()
  336.         if dik == DIK_keys.DIK_ESCAPE and alive_on_level then
  337.             console:execute("main_menu off")
  338.         elseif  dik == DIK_keys.DIK_Q then
  339.             self:OnMessageQuitWin()
  340.         -- v1ld: convenience key for loading last save
  341.         elseif  dik == DIK_keys.DIK_L then
  342.             self:OnButton_last_save()
  343.         elseif  dik == DIK_keys.DIK_A then
  344.             if amk.check_game() then
  345.                 self:amk_options()
  346.             end
  347.         elseif (dik == DIK_keys.DIK_F5 or dik == DIK_keys.DIK_F6) and alive_on_level then
  348.             console:execute("main_menu off")
  349.             console:execute("save " .. save_prefix..level.name().."_snapshot")
  350.         elseif dik == DIK_keys.DIK_S and alive_on_level then
  351.             self:OnButton_save_level_clicked()
  352.         elseif dik == DIK_keys.DIK_F1 then
  353.             local lvid = db.actor:level_vertex_id()
  354.             local gvid = db.actor:game_vertex_id()
  355.             local pos = db.actor:position()
  356.             local fmt = "load ~# LVID: %s, GVID: %s, Pos: (%.3f, %.3f, %.3f)"
  357.             console:execute(fmt:format(lvid, gvid, pos.x, pos.y, pos.z))
  358.         end    
  359.     end
  360.    
  361.     return true
  362. end
  363.  
  364. function main_menu:amk_options()
  365. -- если еще ни разу не вызывали, то обозначим наш новый скрипт
  366.     if self.amk_options_dlg == nil then
  367.         self.amk_options_dlg = ui_amk_options.amk_options()
  368.         self.amk_options_dlg.owner = self
  369.     end
  370. -- останавливаем родительский элемент, запускаем свой, но родителя показываем.
  371.     self:GetHolder():start_stop_menu(self.amk_options_dlg, true)
  372.     self:GetHolder():start_stop_menu(self, true)
  373.     self:Show(false)
  374.  
  375. end
RAW Paste Data