diff --git a/client/charge.lua b/client/charge.lua index e13428b..f8b8439 100644 --- a/client/charge.lua +++ b/client/charge.lua @@ -71,6 +71,125 @@ RegisterNetEvent(getScript()..":client:Charge", function(data, outside) default = 1, options = nearbyList } + elseif Config.General.lookAtCharge then + local selectedPed = nil + local highlightedPed = nil + local running = true + + CreateThread(function() + while running do + Wait(0) + + -- Raycast to get entity being looked at + local camCoord = GetGameplayCamCoord() + local direction = RotationToDirection(GetGameplayCamRot(2)) + local targetCoord = camCoord + direction * 6.0 + + local hit, _ , hitCoords, _, entityHit = PerformRaycast(camCoord, targetCoord, PlayerPedId(), 4) + if hit then + DrawSphere(hitCoords.x, hitCoords.y, hitCoords.z, 0.05, 255, 255, 255, 0.5) + end + if entityHit and IsEntityAPed(entityHit) and entityHit ~= PlayerPedId() then + if highlightedPed ~= entityHit then + if highlightedPed and DoesEntityExist(highlightedPed) then + SetEntityAlpha(highlightedPed, 255, false) + ResetEntityAlpha(highlightedPed) + end + highlightedPed = entityHit + SetEntityAlpha(highlightedPed, 200, false) + end + elseif highlightedPed then + SetEntityAlpha(highlightedPed, 255, false) + ResetEntityAlpha(highlightedPed) + highlightedPed = nil + end + + local loc = vec2(0.89+0.037, 0.9) + DrawSprite("timerbars", "all_black_bg", loc.x, loc.y, 0.12, 0.05, 0.0, 255, 255, 255, 255) + SetTextScale(0.80, 0.80) + SetTextWrap(0.75, 0.985) + SetTextJustification(2) + SetTextFont(4) + SetTextColour(255, 255, 255, 255) + BeginTextCommandDisplayText("STRING") + AddTextComponentSubstringKeyboardDisplay(highlightedPed and "~s~Selected ID: ~g~"..GetPlayerServerId(NetworkGetPlayerIndexFromPed(highlightedPed)) or "~s~No Selection") + EndTextCommandDisplayText(loc.x+0.06, loc.y - 0.026) + + -- Show instructional UI + local buttons = { + { keys = { 194 }, text = "Cancel" } + } + if highlightedPed then + table.insert(buttons, { keys = { 86, 191 }, text = "Confirm" }) + end + makeInstructionalButtons(buttons) + + -- Handle controls + if IsControlJustPressed(0, 194) then -- Backspace + if highlightedPed then + SetEntityAlpha(highlightedPed, 255, false) + ResetEntityAlpha(highlightedPed) + end + running = false + return + end + + if highlightedPed and (IsControlJustPressed(0, 191) or IsControlJustPressed(0, 86)) then + local serverId = GetPlayerServerId(NetworkGetPlayerIndexFromPed(highlightedPed)) + if serverId then + running = false + SetEntityAlpha(highlightedPed, 255, false) + ResetEntityAlpha(highlightedPed) + + + --Grab Player Job name or Gang Name if needed + local getInfo = getPlayer() + --Check if image was given when opening the regsiter + local img = data.img ~= nil and (Config.System.Menu == "qb" and "
") or Jobs[getInfo.job].label + + local newinputs = { + { + type = 'select', + name = 'billtype', + text = locale("menu", "type"), + default = billPrev, + options = { + { value = "cash", text = locale("menu", "cash"), label = locale("menu", "cash") }, + { value = "bank", text = locale("menu", "card"), label = locale("menu", "card") } + } + }, + { + type = 'number', + isRequired = true, + name = 'price', + text = locale("menu", "amount_charge") + } + } + + local dialog = createInput(img, newinputs) + + if dialog then + -- If ox_menu style input, fix indexes + if dialog[1] then + dialog.billtype = dialog[1] + dialog.price = dialog[2] + end + + billPrev = dialog.billtype + + TriggerServerEvent(getScript()..":server:Charge", serverId, dialog.price, dialog.billtype, data.img, outside, gang) + + if Config.General.Usebzzz then + destroyProp(prop) + stopAnim('cellphone@', 'cellphone_text_read_base') + end + end + end + end + end + end) + return -- Skip continuing function until selection is made + else -- If Config.List is false, create input text box for ID's newinputs[#newinputs+1] = { type = 'text', diff --git a/client/polcharge.lua b/client/polcharge.lua index 2181d69..4e7b4f8 100644 --- a/client/polcharge.lua +++ b/client/polcharge.lua @@ -47,6 +47,116 @@ RegisterNetEvent(getScript()..":client:PolCharge", function() default = 1, options = nearbyList } + + elseif Config.General.lookAtCharge then + local selectedPed = nil + local highlightedPed = nil + local running = true + + CreateThread(function() + while running do + Wait(0) + + -- Raycast to get entity being looked at + local camCoord = GetGameplayCamCoord() + local direction = RotationToDirection(GetGameplayCamRot(2)) + local targetCoord = camCoord + direction * 6.0 + + local hit, _ , hitCoords, _, entityHit = PerformRaycast(camCoord, targetCoord, PlayerPedId(), 4) + if hit then + DrawSphere(hitCoords.x, hitCoords.y, hitCoords.z, 0.05, 0, 0, 255, 0.5) + end + if entityHit and IsEntityAPed(entityHit) and entityHit ~= PlayerPedId() then + if highlightedPed ~= entityHit then + if highlightedPed and DoesEntityExist(highlightedPed) then + SetEntityAlpha(highlightedPed, 255, false) + ResetEntityAlpha(highlightedPed) + end + highlightedPed = entityHit + SetEntityAlpha(highlightedPed, 200, false) + end + elseif highlightedPed then + SetEntityAlpha(highlightedPed, 255, false) + ResetEntityAlpha(highlightedPed) + highlightedPed = nil + end + + local loc = vec2(0.89+0.037, 0.9) + DrawSprite("timerbars", "all_black_bg", loc.x, loc.y, 0.12, 0.05, 0.0, 255, 255, 255, 255) + SetTextScale(0.80, 0.80) + SetTextWrap(0.75, 0.985) + SetTextJustification(2) + SetTextFont(4) + SetTextColour(255, 255, 255, 255) + BeginTextCommandDisplayText("STRING") + AddTextComponentSubstringKeyboardDisplay(highlightedPed and "~s~Selected ID: ~b~"..GetPlayerServerId(NetworkGetPlayerIndexFromPed(highlightedPed)) or "~s~No Selection") + EndTextCommandDisplayText(loc.x+0.06, loc.y - 0.026) + + -- Show instructional UI + local buttons = { + { keys = { 194 }, text = "Cancel" } + } + if highlightedPed then + table.insert(buttons, { keys = { 86, 191 }, text = "Confirm" }) + end + makeInstructionalButtons(buttons) + + -- Handle controls + if IsControlJustPressed(0, 194) then -- Backspace + if highlightedPed then + SetEntityAlpha(highlightedPed, 255, false) + ResetEntityAlpha(highlightedPed) + end + running = false + return + end + + if highlightedPed and (IsControlJustPressed(0, 191) or IsControlJustPressed(0, 86)) then + local serverId = GetPlayerServerId(NetworkGetPlayerIndexFromPed(highlightedPed)) + if serverId then + running = false + SetEntityAlpha(highlightedPed, 255, false) + ResetEntityAlpha(highlightedPed) + + local newinputs = { + { + type = 'select', + name = 'billtype', + text = locale("menu", "type"), + default = billPrev, + options = { + { value = "cash", text = locale("menu", "cash"), label = locale("menu", "cash") }, + { value = "bank", text = locale("menu", "card"), label = locale("menu", "card") } + } + }, + { + type = 'number', + isRequired = true, + name = 'price', + text = locale("menu", "amount_charge") + } + } + + local dialog = createInput(Jobs[getPlayer().job].label, newinputs) + + if dialog then + -- If ox_menu style input, fix indexes + if dialog[1] then + dialog.billtype = dialog[1] + dialog.price = dialog[2] + end + + billPrev = dialog.billtype + + TriggerServerEvent(getScript()..":server:PolCharge", serverId, dialog.price) + + end + end + end + end + end) + return -- Skip continuing function until selection is made + else newinputs[#newinputs+1] = { type = 'text', diff --git a/config.lua b/config.lua index aebec7b..2bf4515 100644 --- a/config.lua +++ b/config.lua @@ -25,7 +25,9 @@ Config = { General = { ApGov = false, -- Toggle support for AP-Goverment Tax + lookAtCharge = false, -- "true" to use the "look at charge" feature List = true, -- "true" to use nearby player list feature in the cash registers, "false" for manual id entry + PaymentRadius = 15, -- This is how far the playerlist will check for nearby players (based on the person charging) Usebzzz = true, -- enable if you're using the prop from bzzz @@ -149,7 +151,8 @@ Config = { ['ambulance'] = { Commission = 0.25, }, }, FineJobConfirmation = false, --"true" makes it so fines need confirmation, "false" skips this ands just removes the money - FineJobList = true, -- "true" to use nearby player list feature in the cash registers, "false" for manual id entry + FineJobList = false, -- "true" to use nearby player list feature in the cash registers, "false" for manual id entry + lookAtCharge = true, -- "true" to use the "look at charge" feature }, }