Files
Elite-Gaming-FiveM/resources/SmartSigns/cl_utils.lua
T
2021-12-03 01:05:09 +00:00

199 lines
8.1 KiB
Lua

Citizen.CreateThread(function()
while true do
Wait(0)
local ped = PlayerPedId()
local pedCoords = GetEntityCoords(ped)
for k, v in pairs(config.signs) do
local distance = #(v.sign[1] - pedCoords)
if distance < config.main.accessPointDistance then
nearAccessPoint(k, v, ped, pedCoords)
end
if distance <= config.main.loadInDistance and not v.loaded then
if config.main.developerMode then
print("[Smart Signs] - Loaded Sign ID: "..k)
end
TriggerEvent('loadSign', k)
elseif distance > config.main.loadInDistance and v.loaded then
if config.main.developerMode then
print("[Smart Signs] - Unloaded Sign ID: "..k)
end
TriggerEvent('unloadSign', k)
end
end
end
end)
function nearAccessPoint(k, v, ped, pedCoords)
Draw3DText(v.sign[1].x + config.main.signOffset[1], v.sign[1].y + config.main.signOffset[2], v.sign[1].z + config.main.signOffset[3], config.main.instructionalText, 4, 0.05, 0.05)
if IsControlJustPressed(config.main.adjustButton[1], config.main.adjustButton[2]) then
if config.main.developerMode then
print("[Smart Signs] - Access point control pressed")
end
if config.main.animation.enabled then
if config.main.developerMode then
print("[Smart Signs] - Animation Enabled - Starting")
end
local boxPosition = GetOffsetFromEntityInWorldCoords(v.signProp, -1.55, 0.0, 0.0)
SetEntityCoords(ped, boxPosition.x, boxPosition.y, boxPosition.z, true, true, true, false)
SetEntityHeading(ped, GetEntityHeading(v.signProp) - 90.0)
if config.main.developerMode then
print("[Smart Signs] - Ped Coords Set")
end
RequestAnimDict(config.main.animation.dict)
if config.main.developerMode then
print("[Smart Signs] - Requesting Animation Dictionary: "..config.main.animation.dict)
end
while not HasAnimDictLoaded(config.main.animation.dict) do
if config.main.developerMode then
print("[Smart Signs] - Loading Animation Dictionary: "..config.main.animation.dict)
end
Wait(0)
end
if config.main.developerMode then
print("[Smart Signs] - Loaded Animation Dictionary: "..config.main.animation.dict)
end
if config.main.developerMode then
print("[Smart Signs] - Playing Animation Name: "..config.main.animation.name)
end
TaskPlayAnim(ped, config.main.animation.dict, config.main.animation.name, 8.0, -8.0, -1, 0, 0.0, 0, 0, 0)
end
local inputs = {}
for i = 1, 3 do
if config.main.developerMode then
print("[Smart Signs] - Starting user input for line: "..i)
end
inputs[i] = getInput(i)
if config.main.developerMode then
print("[Smart Signs] - User input returned: "..tostring(inputs[i]))
end
end
local streetHash = GetStreetNameAtCoord(pedCoords.x, pedCoords.y, pedCoords.z)
local streetName = GetStreetNameFromHashKey(streetHash)
if config.main.developerMode then
print("[Smart Signs] - Street Hash: "..tostring(streetHash))
print("[Smart Signs] - Street Name: "..tostring(streetName))
end
if config.main.developerMode then
print("[Smart Signs] - Data for Sign ID: "..k.." sent to server")
end
TriggerServerEvent("SmartSigns:updateSign", k, inputs, tostring(streetName))
ClearPedTasks(ped)
if config.main.soundEffect.enabled then
PlaySoundFrontend(-1, config.main.soundEffect.name, config.main.soundEffect.dict)
if config.main.developerMode then
print("[Smart Signs] - Playing sound: Name: "..config.main.soundEffect.name.." - Dict: "..config.main.soundEffect.dict)
end
end
end
end
function getInput(i)
AddTextEntry('FMMC_MPM_NA', "Enter text for line " .. i)
DisplayOnscreenKeyboard(1, "FMMC_MPM_NA", "Enter text for line" .. i, "", "", "", "", 14)
while (UpdateOnscreenKeyboard() == 0) do
DisableAllControlActions(0);
Wait(0)
end
if (GetOnscreenKeyboardResult()) then
local input = GetOnscreenKeyboardResult()
return string.lower(input)
end
end
function Draw3DText(x,y,z,textInput,fontId,scaleX,scaleY)
local coords = GetGameplayCamCoords()
local distance = GetDistanceBetweenCoords(coords.x,coords.y,coords.z, x,y,z, 1)
local scale = (1 / distance ) * 20
local fov = ( 1 / GetGameplayCamFov() ) * 100
local scale = scale * fov
SetTextScale(scaleX*scale, scaleY*scale)
SetTextFont(fontId)
SetTextProportional(1)
SetTextColour(250, 250, 250, 255)
SetTextDropshadow(1, 1, 1, 1, 255)
SetTextEdge(2, 0, 0, 0, 150)
SetTextDropShadow()
SetTextOutline()
SetTextEntry("STRING")
SetTextCentre(1)
AddTextComponentString(textInput)
SetDrawOrigin(x,y,z+2, 0)
DrawText(0.0, 0.0)
ClearDrawOrigin()
end
function showNotification(message)
SetNotificationTextEntry("STRING")
AddTextComponentString(message)
DrawNotification(0,1)
end
if config.main.developerMode then
RegisterCommand("newsign", function()
RequestModel(config.main.signModelName)
while not HasModelLoaded(config.main.signModelName) do Wait(0) end
local ped = PlayerPedId()
local coords = GetEntityCoords(ped)
local signProp = CreateObject(config.main.signModelName, coords, true, false, false)
while not DoesEntityExist(signProp) do Wait(0) end
FreezeEntityPosition(signProp, true)
SetEntityCoords(signProp, coords.x + config.main.signOffset[1], coords.y + config.main.signOffset[2], coords.z + config.main.signOffset[3], true, true, true, false)
local heading = GetEntityHeading(ped)
SetEntityHeading(signProp, ped)
SetModelAsNoLongerNeeded(config.main.signModelName)
local complete = false
while not complete do
local coords = GetEntityCoords(signProp)
local heading = GetEntityHeading(signProp)
if IsControlJustPressed(0, 207) then --page down
SetEntityCoords(signProp, coords.x, coords.y, coords.z - 0.2)
end
if IsControlJustPressed(0, 208) then --page up
SetEntityCoords(signProp, coords.x, coords.y, coords.z + 0.2)
end
if IsControlJustPressed(0, 173) then --arrow down
SetEntityCoords(signProp, coords.x, coords.y - 0.2, coords.z)
end
if IsControlJustPressed(0, 172) then --arrow up
SetEntityCoords(signProp, coords.x, coords.y + 0.2, coords.z)
end
if IsControlJustPressed(0, 174) then --arrow left
SetEntityCoords(signProp, coords.x - 0.2, coords.y, coords.z)
end
if IsControlJustPressed(0, 175) then --arrow right
SetEntityCoords(signProp, coords.x + 0.2, coords.y, coords.z)
end
if IsControlJustPressed(0, 29) then --b rotate left
SetEntityHeading(signProp, heading - 2.0)
end
if IsControlJustPressed(0, 306) then --n rotate right
SetEntityHeading(signProp, heading + 2.0)
end
if IsControlJustPressed(0, 191) then -- enter - finish
complete = true
end
Wait(0)
end
local coords = GetEntityCoords(signProp)
local heading = GetEntityHeading(signProp)
local streetHash = GetStreetNameAtCoord(coords.x, coords.y, coords.z)
local streetName = GetStreetNameFromHashKey(streetHash)
showNotification("~b~Coords~w~: {"..coords.x..", "..coords.y..", "..coords.z.."}")
showNotification("~b~Heading~w~: "..heading)
end, false)
end