-- actor_menu_mode ----- -- int mode: -- 0 = Undefined = закрыто -- 1 = Inventory -- 2 = Trade -- 3 = Upgrade -- 4 = DeadBodySearch -- 10 = Talk dialog show -- 11 = Talk dialog hide last_mode = 0 xr_meet_dialog_closed = false xr_meet_trade_closed = false xr_meet_upgrade_closed = false dead_body_searching = false function get_last_mode() return last_mode end function is_hud_free() return (last_mode == 0) and (pda.dialog_closed == true) and (not Check_UI()) end function actor_menu_mode(mode) -- called from engine!! --printf("actor_menu_mode | current mode: %s - last mode: %s", mode, last_mode) SendScriptCallback("ActorMenu_on_mode_changed",mode,last_mode) if(mode==0) then if(last_mode==1) then inventory_wnd_closed() elseif(last_mode==2) then trade_wnd_closed() elseif(last_mode==3) then upgrade_wnd_closed() elseif(last_mode==4) then dead_body_search_wnd_closed() end last_mode = 0 elseif(mode==1) then last_mode = 1 inventory_wnd_opened() elseif(mode==2) then last_mode = 2 trade_wnd_opened() elseif(mode==3) then last_mode = 3 upgrade_wnd_opened() elseif(mode==4) then last_mode = 4 dead_body_search_wnd_opened() elseif(mode==10) then dialog_wnd_showed() elseif(mode==11) then dialog_wnd_closed() end end function inventory_wnd_opened() --printf("---:>Inventory opened") give_info("inventory_wnd_open") end function inventory_wnd_closed() --printf("---:>Inventory closed") disable_info("inventory_wnd_open") end function trade_wnd_opened() SendScriptCallback("ActorMenu_on_trade_started") xr_meet_dialog_closed = false --printf("---:>Trade opened") give_info("trade_wnd_open") end function trade_wnd_closed() --printf("---:>Trade closed") SendScriptCallback("ActorMenu_on_trade_closed") xr_meet_trade_closed = true disable_info("trade_wnd_open") end function upgrade_wnd_opened() xr_meet_dialog_closed = false --printf("---:>Upgrade opened") give_info("upgrade_wnd_open") end function upgrade_wnd_closed() --printf("---:>Upgrade closed") xr_meet_upgrade_closed = true disable_info("upgrade_wnd_open") end function dead_body_search_wnd_opened() --printf("---:>DeadBodySearch opened") dead_body_searching = true give_info("body_search_wnd_open") end function dead_body_search_wnd_closed() --printf("---:>DeadBodySearch closed") dead_body_searching = false disable_info("body_search_wnd_open") bind_container.curBoxID = nil end function dialog_wnd_showed() --printf("---:>Talk Dialog show") give_info("dialog_wnd_open") end function dialog_wnd_closed() --printf("---:>Talk Dialog hide") xr_meet_dialog_closed = true disable_info("dialog_wnd_open") --SetEvent("used_npc_id", nil) end function inventory_opened() if (db.actor:has_info("inventory_wnd_open") or db.actor:has_info("trade_wnd_open") or db.actor:has_info("upgrade_wnd_open") or db.actor:has_info("body_search_wnd_open") or db.actor:has_info("dialog_wnd_open")) then return true else return false end end -------------------------------------------------------------------------------- -- Custom HUD MSGs -------------------------------------------------------------------------------- local msg_st, msg_on, msg_snd, msg_event, msg_curr, msg_alpha, msg_step, msg_pause = {}, false, true, false, "", 0, 15, nil local msg_tg, msg_tm, msg_FI, msg_FO = 0,2000,500,1500 local msg_R,msg_G,msg_B = 255,255,255 local msg_list = { [1] = { hud= "gameplay_notification" , typ= "text" , clr= GetARGB(200,245,245,240) , tg= false , last_id= false }, [2] = { hud= "showcase_notification" , typ= "text" , clr= GetARGB(200,245,245,240) , tg= false , last_id= false }, [3] = { hud= "notify_icon" , typ= "icon" , tg= false , last_id= false }, } function set_msg(typ, msg, tm, clr) -- Displays message on middle-bottom of screen for (tm) amount of seconds. Can override older messages when initing a new one -- param 1 - Message as string -- param 2 - Milliseconds as number -- param 3 - custom HUD type --[[ if (not is_hud_free()) then return end --]] typ = typ or 1 tm = tm or 5 msg = tostring(msg) local hud_cs = msg_list[typ] if not (hud_cs and hud_cs.typ == "text") then printf("!ERROR set_msg | type (%s) doesn't exist or not text!", typ) return end local hud = get_hud() if (hud) then hud:AddCustomStatic(hud_cs.hud, true) hud:GetCustomStatic(hud_cs.hud):wnd():TextControl():SetTextST(msg) hud:GetCustomStatic(hud_cs.hud):wnd():TextControl():SetTextColor(clr or hud_cs.clr) hud_cs.last_id = msg end hud_cs.tg = time_global() + tm*1000 end function set_fade_msg(msg, tm, cl, snd) -------------------------------------------- -- Tronex 2019/4/27 -- Displays fading message on middle-bottom of screen for tm amount of milliseconds -- Rely on stacking process, messages will display by their time order -- param 1 - Message as string -- param 2 - Seconds as number -- param 3 - [RGB] Red color as number (0 - 255) -- param 4 - [RGB] Green color as number (0 - 255) -- param 5 - [RGB] Blue color as number (0 - 255) -------------------------------------------- table.insert(msg_st, { msg = tostring(msg), sec = tm or 5, R = cl and cl.R or 245, G = cl and cl.G or 245, B = cl and cl.B or 240, snd = snd or false, } ) if (not msg_event) then msg_event = true msg_on = true CreateTimeEvent(0,"check_hud_fading_msg",0,check_hud_fading_msg) end end function set_notification(typ, texture, tm, snd) typ = typ or 3 tm = tm or 20 local hud_cs = msg_list[typ] if not (hud_cs and hud_cs.typ == "icon") then printf("!ERROR set_notification | type (%s) doesn't exist or not icon!", typ) return end local hud = get_hud() if (hud) then hud:AddCustomStatic(hud_cs.hud, true) hud:GetCustomStatic(hud_cs.hud):wnd():InitTexture(texture) hud_cs.last_id = texture end hud_cs.tg = time_global() + tm*1000 if snd then utils_obj.play_sound(snd) end end function set_item_news(color, type_m, text, ...) local t = {...} local ico = "leatherman_tool" local s_color, e_color if color then if color == 'success' then s_color = utils_xml.get_color("d_green") e_color = utils_xml.get_color("pda_white") elseif color == 'fail' then s_color = utils_xml.get_color("d_red") e_color = utils_xml.get_color("pda_white") end end if type_m then if type_m == 'detail' then news_manager.send_tip(db.actor, string.format(game.translate_string(text), s_color, e_color, t[1]), nil, ico, 6000) elseif type_m == 'weapon' then news_manager.send_tip(db.actor, string.format(game.translate_string(text), s_color, t[1], e_color, t[2]), nil, ico, 6000) elseif type_m == 'weapon_ammo' then news_manager.send_tip(db.actor, string.format(game.translate_string(text), s_color, t[1], e_color, t[2], t[3]), nil, ico, 6000) elseif type_m == 'npc' then news_manager.send_tip(db.actor, string.format(game.translate_string(text), s_color, t[1], t[2], e_color, t[3]), nil, ico, 6000) end end end function last_hud_msg(typ, value) return typ and msg_list[typ] and (msg_list[typ].last_id == value) end -- Callbacks function check_hud_fading_msg() -- wait until actor finish talking if (not is_hud_free()) then msg_pause = time_global() return false end -- prepare msg_tg = time_global() if msg_on then --printf("- fading text | start - time: %s", msg_tg) msg_on = false msg_pause = nil msg_curr = msg_st[1].msg msg_alpha = 0 msg_tm = msg_tg + msg_st[1].sec*1000 msg_FI = msg_tg + 600 msg_FO = msg_tm - 600 msg_R = msg_st[1].R msg_G = msg_st[1].G msg_B = msg_st[1].B if msg_st[1].snd and msg_snd then utils_obj.play_sound(msg_st[1].snd) msg_snd = false end elseif msg_pause then local tg_start = msg_FI - 600 -- message start moment local tg_delay = (msg_pause - tg_start) -- time delay between message start and message pause end msg_tm = msg_tm + tg_delay msg_FI = msg_FI + tg_delay msg_FO = msg_FO + tg_delay msg_pause = nil end -- calculate --msg_tg = msg_tg + msg_step --printf(msg_tg) if (msg_tg < msg_FI) then msg_alpha = msg_alpha + msg_step --printf("fade in: %s - time: %s", msg_alpha, msg_tg) elseif (msg_tg > msg_FO) then msg_alpha = msg_alpha - msg_step --printf("fade out: %s - time: %s", msg_alpha, msg_tg) else msg_alpha = 255 end msg_alpha = (msg_alpha < 0 and 0) or (msg_alpha > 255 and 255) or msg_alpha -- HUD local hud = get_hud() if (hud) then local hud_d = hud:GetCustomStatic("not_enough_money_mine") if (hud_d == nil) then hud:AddCustomStatic("not_enough_money_mine",true) hud_d = hud:GetCustomStatic("not_enough_money_mine") end local wnd = hud_d:wnd() wnd:TextControl():SetTextST(msg_curr) wnd:TextControl():SetTextColor(GetARGB(msg_alpha, msg_R, msg_G, msg_B)) end -- shift or end if msg_tg >= msg_tm then local hud_d = hud and hud:GetCustomStatic("not_enough_money_mine") if (hud_d ~= nil) then hud:RemoveCustomStatic("not_enough_money_mine") end msg_pause = nil table.remove(msg_st, 1) if #msg_st > 0 then --printf("- fading text | next - time: %s", msg_tg) msg_on = true else --printf("- fading text | end - time: %s", msg_tg) msg_on = false msg_event = false msg_snd = true return true end end return false end local function check_hud_msg() for typ, v in pairs(msg_list) do if v.tg then local hud = get_hud() if (hud) then local custom_static = hud:GetCustomStatic(v.hud) if custom_static ~= nil and time_global() > v.tg then hud:RemoveCustomStatic(v.hud) v.tg = false v.last_id = false end end end end return false end function on_game_start() local function actor_on_reinit() AddUniqueCall(check_hud_msg) end RegisterScriptCallback("actor_on_reinit",actor_on_reinit) end