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)