1
0
Fork 0
forked from Simnation/Main
This commit is contained in:
Nordi98 2025-08-13 18:02:58 +02:00
parent 3fa969a62c
commit b31336d080
19 changed files with 3844 additions and 85 deletions

View file

@ -1,78 +0,0 @@
local QBCore = exports['qb-core']:GetCoreObject()
print("^2[TRAIN-TRIGGER]^7 Client Script wird geladen...")
-- Test ob QBCore funktioniert
CreateThread(function()
Wait(2000)
if QBCore then
print("^2[TRAIN-TRIGGER]^7 QBCore erfolgreich geladen auf Client")
else
print("^1[TRAIN-TRIGGER]^7 FEHLER: QBCore nicht gefunden auf Client!")
end
end)
-- Einfache Locations (gleiche wie Server)
local trainLocations = {
{x = 215.3, y = -810.1, z = 30.7, name = "Legion Square"},
{x = -265.0, y = -957.3, z = 31.2, name = "Pillbox Hospital"},
}
local showMarkers = false
-- Test Command
RegisterCommand('togglemarkers', function()
showMarkers = not showMarkers
print("^3[TRAIN-TRIGGER]^7 Markers: " .. tostring(showMarkers))
if QBCore and QBCore.Functions and QBCore.Functions.Notify then
QBCore.Functions.Notify('Markers: ' .. tostring(showMarkers), 'primary')
else
TriggerEvent('chatMessage', "SYSTEM", "normal", "Markers: " .. tostring(showMarkers))
end
end, false)
-- Marker Loop
CreateThread(function()
while true do
local sleep = 1000
if showMarkers then
local playerCoords = GetEntityCoords(PlayerPedId())
for i, location in ipairs(trainLocations) do
local distance = #(playerCoords - vector3(location.x, location.y, location.z))
if distance < 200.0 then
sleep = 0
-- Grüner Marker
DrawMarker(1, location.x, location.y, location.z - 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.0, 3.0, 2.0, 0, 255, 0, 150, false, true, 2, nil, nil, false)
if distance < 20.0 then
-- 3D Text
local onScreen, _x, _y = World3dToScreen2d(location.x, location.y, location.z + 2.0)
if onScreen then
SetTextScale(0.4, 0.4)
SetTextFont(4)
SetTextProportional(1)
SetTextColour(255, 255, 255, 215)
SetTextEntry("STRING")
SetTextCentre(1)
AddTextComponentString("[E] " .. location.name .. "\nDistanz: " .. math.floor(distance) .. "m")
DrawText(_x, _y)
end
if IsControlJustPressed(0, 38) then -- E
print("^3[TRAIN-TRIGGER]^7 E gedrückt bei " .. location.name)
TriggerServerEvent('train:requestStart')
end
end
end
end
end
Wait(sleep)
end
end)
print("^2[TRAIN-TRIGGER]^7 Client Script geladen! Commands: /togglemarkers")

View 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

View file

@ -1,20 +1,17 @@
fx_version 'cerulean'
game 'gta5'
author 'Dein Name'
description 'QBCore Train Scenario Trigger Script'
description 'QB-TrainingScenarios'
version '1.0.0'
server_scripts {
'server.lua'
shared_scripts {
'shared/config.lua'
}
client_scripts {
'client.lua'
'client/main.lua'
}
dependencies {
'qb-core'
}
lua54 'yes'