0.0.1
This commit is contained in:
@@ -0,0 +1,188 @@
|
||||
local canDoAnyAction = false
|
||||
|
||||
JobsCreator.activeActions = {} -- This saves Utils.eventsPrefix .. ':checkAllowedActions' data
|
||||
|
||||
local canCheckDrivingLicense = false
|
||||
local canCheckWeaponLicense = false
|
||||
local canPlaceAnyObject = false
|
||||
local placeableObjects = {}
|
||||
local actionsMenuEnabled = false
|
||||
|
||||
-- If the ONLY allowed "actions" are these one, the actions menu wont't open
|
||||
local ACTIONS_BLACKLIST = {
|
||||
["whitelisted"] = true,
|
||||
["actionsMenuEnabled"] = true,
|
||||
["placeableObjects"] = true,
|
||||
}
|
||||
|
||||
local menuElements = {}
|
||||
|
||||
local function checkAllowedActions()
|
||||
while not config do Citizen.Wait(100) end
|
||||
|
||||
canDoAnyAction = false
|
||||
canPlaceAnyObject = false
|
||||
|
||||
JobsCreator.activeActions = TriggerServerPromise(Utils.eventsPrefix .. ':checkAllowedActions')
|
||||
|
||||
for action, enabled in pairs(JobsCreator.activeActions) do
|
||||
if(enabled and not ACTIONS_BLACKLIST[action]) then canDoAnyAction = true break end
|
||||
end
|
||||
|
||||
actionsMenuEnabled = JobsCreator.activeActions.actionsMenuEnabled
|
||||
placeableObjects = JobsCreator.activeActions.placeableObjects
|
||||
|
||||
if(placeableObjects) then
|
||||
for objectModel, _ in pairs(placeableObjects) do
|
||||
canPlaceAnyObject = true
|
||||
canDoAnyAction = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
local actions = {
|
||||
{condition = JobsCreator.activeActions.enableBilling, label = getLocalizedText('actions_billing'), value = 'createBilling', type = 'player'},
|
||||
{condition = JobsCreator.activeActions.canRob, label = getLocalizedText('actions_search'), value = 'search', type = 'player'},
|
||||
{condition = JobsCreator.activeActions.canHandcuff, label = getLocalizedText('actions_put_soft_handcuffs'), value = 'softHandcuff', type = 'player'},
|
||||
{condition = JobsCreator.activeActions.canHandcuff, label = getLocalizedText('actions_put__hard_handcuffs'), value = 'hardHandcuff', type = 'player'},
|
||||
{condition = JobsCreator.activeActions.canHandcuff, label = getLocalizedText('actions_start_dragging'), value = 'drag', type = 'player'},
|
||||
{condition = JobsCreator.activeActions.canHandcuff, label = getLocalizedText('actions_put_in_car'), value = 'putInCar', type = 'player'},
|
||||
{condition = JobsCreator.activeActions.canHandcuff, label = getLocalizedText('actions_take_from_car'), value = 'takeFromCar', type = 'vehicle'},
|
||||
{condition = JobsCreator.activeActions.canLockpickCars, label = getLocalizedText('actions_lockpick_car'), value = 'lockpickCar', type = 'vehicle'},
|
||||
{condition = JobsCreator.activeActions.canWashVehicles, label = getLocalizedText('actions:wash_vehicle'), value = 'washVehicle', type = 'vehicle'},
|
||||
{condition = JobsCreator.activeActions.canRepairVehicles, label = getLocalizedText('actions:repair_vehicle'), value = 'repairVehicle', type = 'vehicle'},
|
||||
{condition = JobsCreator.activeActions.canImpoundVehicles, label = getLocalizedText('actions:impound_vehicle'), value = 'impoundVehicle', type = 'vehicle'},
|
||||
{condition = JobsCreator.activeActions.canCheckIdentity, label = getLocalizedText('actions:check_identity'), value = 'checkIdentity', type = 'player'},
|
||||
{condition = JobsCreator.activeActions.canCheckVehicleOwner, label = getLocalizedText('actions:check_vehicle_owner'), value = 'checkVehicleOwner', type = 'vehicle'},
|
||||
{condition = JobsCreator.activeActions.canCheckDrivingLicense or JobsCreator.activeActions.canCheckWeaponLicense, label = getLocalizedText('actions:check_licenses'), value = 'checkLicenses', type = 'player'},
|
||||
{condition = JobsCreator.activeActions.canHeal, label = getLocalizedText('actions:heal_small'), value = 'healSmall', type = 'player'},
|
||||
{condition = JobsCreator.activeActions.canHeal, label = getLocalizedText('actions:heal_big'), value = 'healBig', type = 'player'},
|
||||
{condition = JobsCreator.activeActions.canRevive, label = getLocalizedText('actions:revive'), value = 'revive', type = 'player'},
|
||||
{condition = canPlaceAnyObject, label = getLocalizedText('actions:place_object'), value = 'placeObject', type = nil},
|
||||
}
|
||||
|
||||
menuElements = {}
|
||||
|
||||
for i=1, #actions do
|
||||
local action = actions[i]
|
||||
|
||||
if action.condition then
|
||||
table.insert(menuElements, {
|
||||
icon = "fas fa-user",
|
||||
label = action.label,
|
||||
value = action.value,
|
||||
extraData = action.extraData,
|
||||
})
|
||||
|
||||
if(action.type == "player") then
|
||||
Target.addGlobalPlayerToTargeting(action.value, action.label, {onSelect = function(data) local entity = type(data) == "table" and data.entity or data; TriggerEvent(Utils.eventsPrefix .. ':actions:' .. action.value, entity) end })
|
||||
elseif(action.type == "vehicle") then
|
||||
Target.addGlobalVehicleToTargeting(action.value, action.label, {onSelect = function(data) local entity = type(data) == "table" and data.entity or data; TriggerEvent(Utils.eventsPrefix .. ':actions:' .. action.value, entity) end })
|
||||
end
|
||||
else
|
||||
if(action.type == "player") then
|
||||
Target.removeGlobalPlayerFromTargeting(action.value)
|
||||
elseif(action.type == "vehicle") then
|
||||
Target.removeGlobalVehicleFromTargeting(action.value)
|
||||
end
|
||||
end
|
||||
|
||||
JobsCreator.activeActions[action.value] = action.condition
|
||||
end
|
||||
|
||||
return JobsCreator.activeActions
|
||||
end
|
||||
|
||||
function getClosestPlayerId(maxDistance)
|
||||
maxDistance = maxDistance or 2.0
|
||||
|
||||
local plyPed = PlayerPedId()
|
||||
local plyCoords = GetEntityCoords(plyPed)
|
||||
|
||||
local closestPlayerId, closestDistance = ESX.Game.GetClosestPlayer(plyCoords)
|
||||
|
||||
if(closestPlayerId == PlayerId()) then
|
||||
closestPlayerId, closestDistance = ESX.Game.GetClosestPlayer()
|
||||
end
|
||||
|
||||
if(closestPlayerId ~= -1 and closestDistance and closestDistance < maxDistance) then
|
||||
return closestPlayerId
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
function getClosestPed(maxDistance)
|
||||
maxDistance = maxDistance or 2.0
|
||||
|
||||
local closestPlayer, closestDistance = ESX.Game.GetClosestPed()
|
||||
|
||||
if(closestPlayer ~= -1 and closestDistance and closestDistance < maxDistance) then
|
||||
return closestPlayer
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
RegisterNetEvent(Utils.eventsPrefix .. ':actions:checkLicenses', function()
|
||||
local elements = {}
|
||||
|
||||
if(JobsCreator.activeActions.canCheckDrivingLicense) then
|
||||
table.insert(elements, {
|
||||
label = getLocalizedText('actions:driving_license'),
|
||||
value = "driver"
|
||||
})
|
||||
end
|
||||
|
||||
if(JobsCreator.activeActions.canCheckWeaponLicense) then
|
||||
table.insert(elements, {
|
||||
label = getLocalizedText('actions:weapon_license'),
|
||||
value = "weapon"
|
||||
})
|
||||
end
|
||||
|
||||
Utils.openInteractionMenu("actions_check_licenses", getLocalizedText('actions_menu'), elements, function(selected, scrollIndex, args)
|
||||
local licenseCategory = args.value
|
||||
|
||||
openLicenseMenu(licenseCategory)
|
||||
end)
|
||||
end)
|
||||
|
||||
local function openActionsMenu()
|
||||
if not canDoAnyAction or not actionsMenuEnabled or IsPedDeadOrDyingCustom(PlayerPedId()) then return end
|
||||
if(canDoAnyAction and (not config.canUseActionsMenuWhileOffDuty and not isOnDuty)) then
|
||||
notifyClient(getLocalizedText("you_are_not_on_duty"))
|
||||
return
|
||||
end
|
||||
|
||||
if(exports[ GetCurrentResourceName() ]:isPlayerHandcuffed()) then
|
||||
notifyClient(getLocalizedText("you_cant_while_handcuffed"))
|
||||
return
|
||||
end
|
||||
|
||||
Utils.hideInteractionMenu()
|
||||
|
||||
Utils.openInteractionMenu("actions", getLocalizedText('actions_menu'), menuElements, function(selected, scrollIndex, args)
|
||||
TriggerEvent(Utils.eventsPrefix .. ':actions:' .. args.value, args.extraData)
|
||||
end)
|
||||
end
|
||||
|
||||
RegisterNetEvent(Utils.eventsPrefix .. ':openActionsMenu', openActionsMenu)
|
||||
|
||||
AddEventHandler(Utils.eventsPrefix .. ":clientConfigLoaded", function()
|
||||
local message = getLocalizedText('open_actions_menu') or "Open actions menu"
|
||||
|
||||
registerAdvancedKeymap("_jobcreator_openactionsmenu", config.actionsMenuKey, "action_key", message, openActionsMenu)
|
||||
end)
|
||||
|
||||
-- Reload allowed actions
|
||||
RegisterNetEvent('esx:setJob', checkAllowedActions)
|
||||
RegisterNetEvent('QBCore:Client:OnJobUpdate', checkAllowedActions)
|
||||
|
||||
RegisterNetEvent(Utils.eventsPrefix .. ':framework:ready', checkAllowedActions)
|
||||
|
||||
-- To refresh manually the allowed actions
|
||||
RegisterNetEvent(Utils.eventsPrefix .. ':checkAllowedActions', checkAllowedActions)
|
||||
|
||||
-- Retrieve player allowed actions from anywhere
|
||||
exports('getAllowedActions', checkAllowedActions)
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user