2026-04-14 17:41:39 +02:00

169 lines
6.2 KiB
Lua

local config = require 'config.config_c'
local inUse = false
local interaction
local toiletHash = {joaat('prompt_prison_toilet_withscrew'), joaat('prompt_prison_toilet')}
if config.interaction == 'ox_target' and GetResourceState('ox_target') == 'started' then
interaction = 'ox_target'
elseif config.interaction == 'qb-target' and GetResourceState('qb-target') == 'started' then
interaction = 'qb-target'
elseif config.interaction == 'textUI' then
interaction = 'textUI'
elseif config.interaction == 'custom' then
interaction = 'custom'
elseif config.interaction == 'auto' then
if GetResourceState('ox_target') == 'started' then
interaction = 'ox_target'
elseif GetResourceState('qb-target') == 'started' then
interaction = 'qb-target'
else
interaction = 'textUI'
end
else
lib.print.error('Invalid interaction type in config: ' .. config.interaction)
return
end
local inventory
if GetResourceState('ox_inventory') == 'started' then
inventory = 'ox_inventory'
elseif GetResourceState('qb-inventory') == 'started' then
inventory = 'qb-inventory'
end
function itemCheck()
if not config.requiredItem or config.requiredItem == '' then
return true
end
if inventory == 'ox_inventory' then
return exports.ox_inventory:GetItemCount(config.requiredItem) > 0
elseif inventory == 'qb-inventory' then
return exports['qb-inventory']:HasItem(config.requiredItem)
end
return true
end
return {
---@param onUse function(entity: number)
setup = function(onUse)
inUse = true
if interaction == 'ox_target' then
exports.ox_target:addModel(toiletHash, {
{
icon = 'fa-solid fa-toilet',
label = locale('interaction_label'),
onSelect = function(data)
onUse(data.entity)
end,
items = config.requiredItem ~= '' and config.requiredItem or nil,
},
})
lib.print.debug('ox_target interaction set up')
elseif interaction == 'qb-target' then
exports['qb-target']:AddTargetModel(toiletHash, {
options = {
{
type = 'client',
event = 'prompt_prison_escape:startInteraction',
icon = 'fa-solid fa-toilet',
label = locale('interaction_label'),
action = function(entity)
onUse(entity)
end,
item = config.requiredItem ~= '' and config.requiredItem or nil,
},
},
distance = 2.5,
})
lib.print.debug('qb-target interaction set up')
elseif interaction == 'textUI' then
local nearbyEntity = nil
local isShowingUI = false
CreateThread(function()
while inUse do
if not itemCheck() then
if isShowingUI then
lib.hideTextUI()
isShowingUI = false
nearbyEntity = nil
lib.print.debug('[Interaction] Hiding textUI, item requirement not met')
end
Wait(1000)
goto continue
end
local coords = GetEntityCoords(cache.ped)
local foundEntity = nil
for _, ent in pairs(lib.getNearbyObjects(coords, 2.0)) do
if lib.table.contains(toiletHash, GetEntityModel(ent.object)) then
foundEntity = ent.object
break
end
end
if foundEntity then
if not isShowingUI then
lib.showTextUI('[E] - ' .. locale('interaction_label'))
isShowingUI = true
lib.print.debug('[Interaction] Showing textUI for entity:', foundEntity)
end
nearbyEntity = foundEntity
else
if isShowingUI then
lib.hideTextUI()
isShowingUI = false
nearbyEntity = nil
lib.print.debug('[Interaction] Hiding textUI, entity out of range')
end
end
Wait(200)
::continue::
end
if isShowingUI then
lib.hideTextUI()
isShowingUI = false
end
end)
CreateThread(function()
while inUse do
if nearbyEntity and isShowingUI then
if IsControlJustPressed(0, 38) then
lib.hideTextUI()
isShowingUI = false
lib.print.debug('[Interaction] E pressed, triggering interaction with entity:', nearbyEntity)
onUse(nearbyEntity)
end
Wait(0)
else
Wait(100)
end
end
end)
lib.print.debug('textUI interaction set up')
elseif interaction == 'custom' then
-- Add your custom interaction setup here
end
end,
cleanup = function()
inUse = false
if interaction == 'ox_target' then
exports.ox_target:removeModel(toiletHash)
lib.print.debug('ox_target interaction cleaned up')
elseif interaction == 'qb-target' then
exports['qb-target']:RemoveTargetModel(toiletHash)
lib.print.debug('qb-target interaction cleaned up')
elseif interaction == 'textUI' then
lib.print.debug('textUI interaction cleaned up')
elseif interaction == 'custom' then
-- Add your custom interaction cleanup here
end
end
}