Files

147 lines
4.4 KiB
Lua
Raw Permalink Normal View History

--[[
rv-maphold — Red Valley
Adaptat din sm_map (ScriptsM) — animație + blip hiding
Radarul/minimap rămâne controlat de 17mov_Hud
Funcționalitate:
- Fără item 'map' → blipurile ascunse (harta goală), ESC merge normal
- Cu item 'map' → blipuri vizibile + animație hartă în mână la USE din inventar
- Playerul se spawnează cu harta automat (StarterItems qb-core)
- QS Inventory pause menu: compatible (NUI-based detection)
]]
local hiddenBlips = {}
local mapActive = false
-----------------------------------------
-- Ia toate blipurile cu un sprite anume
-----------------------------------------
local function GetAllBlipsWithSprite(sprite)
local blips = {}
local blip = GetFirstBlipInfoId(sprite)
while DoesBlipExist(blip) do
blips[#blips + 1] = blip
blip = GetNextBlipInfoId(sprite)
end
return blips
end
-----------------------------------------
-- Ascunde/arată blipurile de pe hartă
-----------------------------------------
local function SwitchBlips(hide)
if hide and next(hiddenBlips) == nil then
hiddenBlips = {}
for i = 1, 921 do
for _, blip in ipairs(GetAllBlipsWithSprite(i)) do
if DoesBlipExist(blip) then
SetBlipAlpha(blip, 0)
table.insert(hiddenBlips, blip)
end
end
end
end
if not hide and hiddenBlips then
for _, blip in ipairs(hiddenBlips) do
if DoesBlipExist(blip) then
SetBlipAlpha(blip, 255)
end
end
hiddenBlips = {}
end
end
local QBCore = exports['qb-core']:GetCoreObject()
-----------------------------------------
-- Verifică dacă playerul are item 'map'
-----------------------------------------
local function HasMap()
local hasItem = QBCore.Functions.HasItem('map')
return hasItem
end
-----------------------------------------
-- Animație hartă în mână
-----------------------------------------
local function ActivateMap()
if mapActive then return end
-- Animația doar dacă are harta
if not HasMap() then return end
mapActive = true
local ped = PlayerPedId()
-- Holster animation (scoate harta din buzunar)
RequestAnimDict("melee@holster")
while not HasAnimDictLoaded("melee@holster") do Wait(10) end
TaskPlayAnim(ped, "melee@holster", "unholster", 4.0, -4.0, 300, 1, 1.0)
Wait(300)
-- Scenario: playerul ține harta fizică în mâini
TaskStartScenarioInPlace(ped, "WORLD_HUMAN_TOURIST_MAP", 0, true)
-- Monitorizează închiderea meniului (GTA pause SAU QS NUI pause)
CreateThread(function()
while mapActive do
Wait(200)
-- Verificăm ambele: pause nativ GTA + NUI focus (QS inventory pause)
if not IsPauseMenuActive() and not IsNuiFocused() then
ClearPedTasks(ped)
TaskPlayAnim(ped, "melee@holster", "holster", 4.0, -4.0, 300, 1, 1.0)
mapActive = false
break
end
end
end)
end
-----------------------------------------
-- Detectează ESC → animație hartă
-- ESC NU se blochează niciodată
-- Suportă atât GTA pause menu cât și QS pause menu (NUI)
-----------------------------------------
CreateThread(function()
while true do
Wait(0)
-- Control 200 = ESC, Control 199 = P
if IsControlJustPressed(0, 200) or IsControlJustPressed(0, 199) then
-- Delay mic ca să se apuce QS să-și deschidă NUI-ul
Wait(100)
-- Dacă s-a deschis fie pause nativ fie NUI (QS pause menu)
if IsPauseMenuActive() or IsNuiFocused() then
ActivateMap()
end
end
end
end)
-----------------------------------------
-- Loop: verifică dacă are hartă → blips
-- Doar ascunde blipurile, nu blochează ESC
-----------------------------------------
CreateThread(function()
while true do
Wait(1000)
local hasMap = HasMap()
SwitchBlips(not hasMap)
end
end)
2026-04-02 00:18:57 +03:00
-----------------------------------------
-- USE din inventar → deschide harta
-----------------------------------------
RegisterNetEvent('rv-maphold:client:useMap', function()
-- Deschide meniul pause pe tab-ul MAP
ActivateFrontendMenu(GetHashKey('FE_MENU_VERSION_MP_PAUSE'), false, -1)
-- Așteaptă să se deschidă meniul
Wait(300)
-- Pornește animația cu harta
ActivateMap()
end)