forked from Simnation/Main
ed
This commit is contained in:
parent
3fa969a62c
commit
b31336d080
19 changed files with 3844 additions and 85 deletions
142
resources/[standalone]/start_train/client/client.lua
Normal file
142
resources/[standalone]/start_train/client/client.lua
Normal file
|
@ -0,0 +1,142 @@
|
|||
local QBCore = exports['qb-core']:GetCoreObject()
|
||||
local PlayerData = {}
|
||||
local isInTrainingZone = false
|
||||
local currentZone = nil
|
||||
local isInScenario = false
|
||||
|
||||
-- Events
|
||||
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
|
||||
PlayerData = QBCore.Functions.GetPlayerData()
|
||||
CreateTrainingZones()
|
||||
end)
|
||||
|
||||
RegisterNetEvent('QBCore:Client:OnPlayerUnload', function()
|
||||
PlayerData = {}
|
||||
end)
|
||||
|
||||
-- Erstelle Training Zones
|
||||
function CreateTrainingZones()
|
||||
for k, v in pairs(Config.TrainingZones) do
|
||||
local blip = AddBlipForCoord(v.coords.x, v.coords.y, v.coords.z)
|
||||
SetBlipSprite(blip, v.blip.sprite)
|
||||
SetBlipDisplay(blip, 4)
|
||||
SetBlipScale(blip, v.blip.scale)
|
||||
SetBlipColour(blip, v.blip.color)
|
||||
SetBlipAsShortRange(blip, true)
|
||||
BeginTextCommandSetBlipName("STRING")
|
||||
AddTextComponentSubstringPlayerName(v.blip.label)
|
||||
EndTextCommandSetBlipName(blip)
|
||||
end
|
||||
end
|
||||
|
||||
-- Main Thread für Zone Detection
|
||||
CreateThread(function()
|
||||
while true do
|
||||
local sleep = 1000
|
||||
local ped = PlayerPedId()
|
||||
local coords = GetEntityCoords(ped)
|
||||
|
||||
for k, v in pairs(Config.TrainingZones) do
|
||||
local distance = #(coords - vector3(v.coords.x, v.coords.y, v.coords.z))
|
||||
|
||||
if distance < v.radius then
|
||||
sleep = 0
|
||||
if not isInTrainingZone then
|
||||
isInTrainingZone = true
|
||||
currentZone = k
|
||||
ShowHelpText()
|
||||
end
|
||||
|
||||
if IsControlJustReleased(0, 38) then -- E Key
|
||||
StartTrainingScenario(v.scenario)
|
||||
end
|
||||
elseif isInTrainingZone and currentZone == k then
|
||||
isInTrainingZone = false
|
||||
currentZone = nil
|
||||
end
|
||||
end
|
||||
|
||||
Wait(sleep)
|
||||
end
|
||||
end)
|
||||
|
||||
-- Zeige Help Text
|
||||
function ShowHelpText()
|
||||
CreateThread(function()
|
||||
while isInTrainingZone do
|
||||
local zoneData = Config.TrainingZones[currentZone]
|
||||
QBCore.Functions.DrawText3D(zoneData.coords.x, zoneData.coords.y, zoneData.coords.z + 1.0,
|
||||
'[E] - ' .. zoneData.label)
|
||||
Wait(0)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
-- Starte Training Scenario
|
||||
function StartTrainingScenario(scenario)
|
||||
if isInScenario then
|
||||
QBCore.Functions.Notify('Du bist bereits in einem Szenario!', 'error')
|
||||
return
|
||||
end
|
||||
|
||||
local ped = PlayerPedId()
|
||||
|
||||
-- Prüfe ob Szenario existiert
|
||||
if not DoesScenarioExist(scenario) then
|
||||
QBCore.Functions.Notify('Szenario existiert nicht!', 'error')
|
||||
return
|
||||
end
|
||||
|
||||
isInScenario = true
|
||||
TaskStartScenarioInPlace(ped, scenario, 0, true)
|
||||
|
||||
QBCore.Functions.Notify('Szenario gestartet! Drücke [X] zum Beenden', 'success')
|
||||
|
||||
-- Thread zum Beenden des Szenarios
|
||||
CreateThread(function()
|
||||
while isInScenario do
|
||||
if IsControlJustReleased(0, 73) then -- X Key
|
||||
StopTrainingScenario()
|
||||
break
|
||||
end
|
||||
Wait(0)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
-- Stoppe Training Scenario
|
||||
function StopTrainingScenario()
|
||||
if not isInScenario then return end
|
||||
|
||||
local ped = PlayerPedId()
|
||||
ClearPedTasks(ped)
|
||||
isInScenario = false
|
||||
|
||||
QBCore.Functions.Notify('Szenario beendet!', 'primary')
|
||||
end
|
||||
|
||||
-- Event Handler für externe Triggers
|
||||
RegisterNetEvent('train:startscenario', function(scenario)
|
||||
if not scenario then
|
||||
QBCore.Functions.Notify('Kein Szenario angegeben!', 'error')
|
||||
return
|
||||
end
|
||||
|
||||
StartTrainingScenario(scenario)
|
||||
end)
|
||||
|
||||
-- Utility Functions
|
||||
QBCore.Functions.DrawText3D = function(x, y, z, text)
|
||||
SetTextScale(0.35, 0.35)
|
||||
SetTextFont(4)
|
||||
SetTextProportional(1)
|
||||
SetTextColour(255, 255, 255, 215)
|
||||
SetTextEntry("STRING")
|
||||
SetTextCentre(true)
|
||||
AddTextComponentString(text)
|
||||
SetDrawOrigin(x, y, z, 0)
|
||||
DrawText(0.0, 0.0)
|
||||
local factor = (string.len(text)) / 370
|
||||
DrawRect(0.0, 0.0+0.0125, 0.017+ factor, 0.03, 0, 0, 0, 75)
|
||||
ClearDrawOrigin()
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue