1
0
Fork 0
forked from Simnation/Main
Main/resources/[inventory]/qs-inventory/client/custom/misc/commands.lua
2025-06-07 08:51:21 +02:00

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)