212 lines
		
	
	
	
		
			9.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			212 lines
		
	
	
	
		
			9.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
RegisterNetEvent(Config.InventoryPrefix .. ':client:openVending')
 | 
						|
AddEventHandler(Config.InventoryPrefix .. ':client:openVending', function(Data)
 | 
						|
    local Category = Data['category']
 | 
						|
    local ShopItems = {}
 | 
						|
    ShopItems['label'] = Config.VendingMachines[Category]['Label']
 | 
						|
    ShopItems['items'] = Config.VendingMachines[Category]['Items']
 | 
						|
    ShopItems['slots'] = #Config.VendingMachines[Category]['Items']
 | 
						|
    TriggerServerEvent(Config.InventoryPrefix .. ':server:OpenInventory', 'shop', Config.VendingMachines[Category]['Label'] .. '_' .. math.random(1, 99), ShopItems)
 | 
						|
end)
 | 
						|
 | 
						|
local spamCount = 0
 | 
						|
local lastSpamId = nil
 | 
						|
 | 
						|
local inventory_opening_anim = {
 | 
						|
    -- dict = 'mp_player_inteat@burger',
 | 
						|
    -- clip = 'mp_player_int_eat_burger_fp'
 | 
						|
}
 | 
						|
 | 
						|
local inventory_opening_disable = {
 | 
						|
    move = true,
 | 
						|
    car = true,
 | 
						|
    mouse = true,
 | 
						|
    combat = true
 | 
						|
}
 | 
						|
 | 
						|
local openingInv = false
 | 
						|
RegisterCommand('inventory', function()
 | 
						|
    if inInventory then
 | 
						|
        return Debug('Inventory is already open')
 | 
						|
    end
 | 
						|
    if Config.OpenProgressBar and openingInv then return end
 | 
						|
    if IsNuiFocused() then return Debug('NUI Focused') end
 | 
						|
    if spamCount > 2 then
 | 
						|
        SendTextMessage(Lang('INVENTORY_NOTIFICATION_SPAM'), 'error')
 | 
						|
        return
 | 
						|
    end
 | 
						|
    spamCount = spamCount + 1
 | 
						|
    lastSpamId = math.random(1, 999999)
 | 
						|
    local spamId = lastSpamId
 | 
						|
    SetTimeout(1000, function()
 | 
						|
        if spamId == lastSpamId then
 | 
						|
            spamCount = 0
 | 
						|
        end
 | 
						|
    end)
 | 
						|
    if LocalPlayer.state.inv_busy or not IsPlayerDead() then
 | 
						|
        Warning("You can't use this action because inv_busy is active (avoids dupes)")
 | 
						|
        return SendTextMessage(Lang('INVENTORY_NOTIFICATION_NOT_ACCESSIBLE'), 'error')
 | 
						|
    end
 | 
						|
 | 
						|
    if Config.OpenProgressBar then
 | 
						|
        openingInv = true
 | 
						|
        local success = ProgressBarSync('inventory', 'Inventory opening', 800, true, true, inventory_opening_disable, inventory_opening_anim)
 | 
						|
        openingInv = false
 | 
						|
        if not success then
 | 
						|
            print('failed')
 | 
						|
            return
 | 
						|
        end
 | 
						|
    end
 | 
						|
 | 
						|
    if inInventory and not IsNuiFocused() then
 | 
						|
        SetFocus(true)
 | 
						|
        return
 | 
						|
    end
 | 
						|
 | 
						|
    if not isCrafting and not inInventory and not inventoryDisabled then
 | 
						|
        if not IsPauseMenuActive() then
 | 
						|
            local ped = PlayerPedId()
 | 
						|
            local curVeh = nil
 | 
						|
            local VendingMachine = nil
 | 
						|
            local garbage = nil
 | 
						|
            local CurrentGarbage = {}
 | 
						|
            local entity, entityModel, data = GetNearbyGarbage()
 | 
						|
            if entity then
 | 
						|
                local x, y, z = table.unpack(GetEntityCoords(entity))
 | 
						|
                local _, floorZ = GetGroundZFor_3dCoord(x, y, z, false)
 | 
						|
                garbage = getOwnerFromCoordsForGarbage(vector3(x, y, floorZ))
 | 
						|
                CurrentGarbage.label = data.label
 | 
						|
                CurrentGarbage.items = data.items
 | 
						|
                CurrentGarbage.slots = data.slots
 | 
						|
            end
 | 
						|
 | 
						|
            if not Config.UseTarget then
 | 
						|
                VendingMachine = GetClosestVending()
 | 
						|
            end
 | 
						|
 | 
						|
            if IsPedInAnyVehicle(ped, false) then -- Is Player In Vehicle
 | 
						|
                local vehicle = GetVehiclePedIsIn(ped, false)
 | 
						|
                CurrentGlovebox = Trim(GetVehicleNumberPlateText(vehicle))
 | 
						|
                curVeh = vehicle
 | 
						|
                CurrentVehicle = nil
 | 
						|
            else
 | 
						|
                local vehicle = getClosestVehicle()
 | 
						|
                if vehicle ~= 0 and vehicle ~= nil then
 | 
						|
                    local pos = GetEntityCoords(ped)
 | 
						|
                    local dimensionMin, dimensionMax = GetModelDimensions(GetEntityModel(vehicle))
 | 
						|
                    local trunkpos = GetOffsetFromEntityInWorldCoords(vehicle, 0.0, (dimensionMin.y), 0.0)
 | 
						|
                    if (IsBackEngine(GetEntityModel(vehicle))) then
 | 
						|
                        trunkpos = GetOffsetFromEntityInWorldCoords(vehicle, 0.0, (dimensionMax.y), 0.0)
 | 
						|
                    end
 | 
						|
                    if #(pos - trunkpos) < 1.5 and not IsPedInAnyVehicle(ped) then
 | 
						|
                        if GetVehicleDoorLockStatus(vehicle) < 2 then
 | 
						|
                            CurrentVehicle = Trim(GetVehicleNumberPlateText(vehicle))
 | 
						|
                            curVeh = vehicle
 | 
						|
                            CurrentGlovebox = nil
 | 
						|
                        else
 | 
						|
                            SendTextMessage(Lang('INVENTORY_NOTIFICATION_VEHICLE_LOCKED'), 'error')
 | 
						|
                            return
 | 
						|
                        end
 | 
						|
                    else
 | 
						|
                        CurrentVehicle = nil
 | 
						|
                    end
 | 
						|
                else
 | 
						|
                    CurrentVehicle = nil
 | 
						|
                end
 | 
						|
            end
 | 
						|
 | 
						|
            if CurrentVehicle then -- Trunk
 | 
						|
                local vehicleClass = GetVehicleClass(curVeh)
 | 
						|
                Debug('Current vehicleClass of the vehicle that is being unlocked:', vehicleClass)
 | 
						|
                local maxweight = Config.VehicleClass[vehicleClass].trunk.maxweight or 60000
 | 
						|
                local slots = Config.VehicleClass[vehicleClass].trunk.slots or 35
 | 
						|
                local isCustomVehicle = Config.CustomTrunk[GetEntityModel(curVeh)]
 | 
						|
 | 
						|
                if isCustomVehicle then
 | 
						|
                    maxweight = isCustomVehicle.maxweight
 | 
						|
                    slots = isCustomVehicle.slots
 | 
						|
                end
 | 
						|
 | 
						|
                local other = {
 | 
						|
                    maxweight = maxweight,
 | 
						|
                    slots = slots,
 | 
						|
                }
 | 
						|
                TriggerServerEvent(Config.InventoryPrefix .. ':server:OpenInventory', 'trunk', CurrentVehicle, other)
 | 
						|
                OpenTrunk()
 | 
						|
            elseif CurrentGlovebox then
 | 
						|
                local vehicleClass = GetVehicleClass(curVeh)
 | 
						|
                Debug('Current vehicleClass of the vehicle that is being unlocked:', vehicleClass)
 | 
						|
                local maxweight = Config.VehicleClass[vehicleClass].glovebox.maxweight or 60000
 | 
						|
                local slots = Config.VehicleClass[vehicleClass].glovebox.slots or 35
 | 
						|
                local isCustomVehicle = Config.CustomGlovebox[GetEntityModel(curVeh)]
 | 
						|
 | 
						|
                if isCustomVehicle then
 | 
						|
                    maxweight = isCustomVehicle.maxweight
 | 
						|
                    slots = isCustomVehicle.slots
 | 
						|
                end
 | 
						|
                local other = {
 | 
						|
                    maxweight = maxweight,
 | 
						|
                    slots = slots
 | 
						|
                }
 | 
						|
                TriggerServerEvent(Config.InventoryPrefix .. ':server:OpenInventory', 'glovebox', CurrentGlovebox, other)
 | 
						|
            elseif CurrentDrop ~= 0 then
 | 
						|
                TriggerServerEvent(Config.InventoryPrefix .. ':server:OpenInventory', 'drop', CurrentDrop)
 | 
						|
            elseif garbage then
 | 
						|
                TriggerServerEvent(Config.InventoryPrefix .. ':server:OpenInventory', 'garbage', garbage, CurrentGarbage, entityModel)
 | 
						|
                OpenGarbage()
 | 
						|
            elseif VendingMachine then
 | 
						|
                local vendingCategory = nil
 | 
						|
                local vendingModel = GetEntityModel(VendingMachine)
 | 
						|
                for _, vendingData in pairs(Config.Vendings) do
 | 
						|
                    local vendingDataModel = GetHashKey(vendingData.Model)
 | 
						|
                    if vendingDataModel == vendingModel then
 | 
						|
                        vendingCategory = vendingData.Category
 | 
						|
                        break
 | 
						|
                    end
 | 
						|
                end
 | 
						|
                if vendingCategory then
 | 
						|
                    TriggerEvent(Config.InventoryPrefix .. ':client:openVending', { category = vendingCategory })
 | 
						|
                end
 | 
						|
            else
 | 
						|
                OpenAnim()
 | 
						|
                TriggerServerEvent(Config.InventoryPrefix .. ':server:OpenInventory')
 | 
						|
            end
 | 
						|
        end
 | 
						|
    end
 | 
						|
end, false)
 | 
						|
 | 
						|
RegisterKeyMapping('inventory', Lang('INVENTORY_KEYMAPPING_OPEN_LABEL'), 'keyboard', Config.KeyBinds.inventory)
 | 
						|
 | 
						|
RegisterNetEvent(Config.InventoryPrefix .. ':client:OpenPlayerInventory')
 | 
						|
AddEventHandler(Config.InventoryPrefix .. ':client:OpenPlayerInventory', function()
 | 
						|
    ExecuteCommand('inventory')
 | 
						|
end)
 | 
						|
 | 
						|
RegisterCommand('hotbar', function()
 | 
						|
    if inventoryDisabled then return end
 | 
						|
    if IsNuiFocused() then return end
 | 
						|
    if LocalPlayer.state.inv_busy or not IsPlayerDead() then
 | 
						|
        Warning("You can't use this action because inv_busy is active (avoids dupes)")
 | 
						|
        return SendTextMessage(Lang('INVENTORY_NOTIFICATION_NOT_ACCESSIBLE'), 'error')
 | 
						|
    end
 | 
						|
 | 
						|
    isHotbar = not isHotbar
 | 
						|
    if not IsPauseMenuActive() then
 | 
						|
        ToggleHotbar(isHotbar)
 | 
						|
    end
 | 
						|
end, false)
 | 
						|
 | 
						|
RegisterKeyMapping('hotbar', Lang('INVENTORY_KEYMAPPING_HOTBAR_LABEL'), 'keyboard', Config.KeyBinds.hotbar)
 | 
						|
 | 
						|
RegisterKeyMapping('reloadweapon', Lang('INVENTORY_KEYMAPPING_RELOAD_LABEL'), 'keyboard', Config.KeyBinds.reload)
 | 
						|
 | 
						|
RegisterCommand('reloadweapon', function()
 | 
						|
    if not CurrentWeaponData?.name then return end
 | 
						|
    local weaponData = WeaponList[joaat(CurrentWeaponData?.name)]
 | 
						|
    if not weaponData then return end
 | 
						|
 | 
						|
    if LocalPlayer.state.inv_busy or not IsPlayerDead() then
 | 
						|
        Debug("You can't use this action because inv_busy is active (avoids dupes)")
 | 
						|
        return SendTextMessage(Lang('INVENTORY_NOTIFICATION_NOT_ACCESSIBLE'), 'error')
 | 
						|
    end
 | 
						|
    TriggerServerEvent('weapons:reloadWeapon', weaponData.ammotype)
 | 
						|
end, false)
 |