1
0
Fork 0
forked from Simnation/Main
This commit is contained in:
Nordi98 2025-07-30 02:20:13 +02:00
parent e3b92cca6f
commit 0f2637b928
3 changed files with 228 additions and 4 deletions

View file

@ -330,3 +330,205 @@ AddEventHandler('onResourceStop', function(resourceName)
end
end
end)
-- Event für Admin Respawn
RegisterNetEvent('taxi:respawnAllStations', function()
-- Alle bestehenden Fahrzeuge löschen
for stationId, vehicles in pairs(stationVehicles) do
for vehicleId, vehicleInfo in pairs(vehicles) do
if DoesEntityExist(vehicleInfo.entity) then
exports['qb-target']:RemoveTargetEntity(vehicleInfo.entity)
DeleteEntity(vehicleInfo.entity)
end
if vehicleInfo.driver and DoesEntityExist(vehicleInfo.driver) then
DeleteEntity(vehicleInfo.driver)
end
end
end
-- Stationen neu initialisieren
Wait(1000)
InitializeTaxiStations()
lib.notify({
title = 'Taxi Service',
description = 'Alle Taxi-Stationen wurden neu geladen',
type = 'success'
})
end)
-- Zusätzliche Funktionen für bessere Verwaltung
function GetNearestTaxiStation()
local playerCoords = GetEntityCoords(PlayerPedId())
local nearestStation = nil
local nearestDistance = math.huge
for stationId, station in pairs(Config.TaxiStations) do
local distance = #(playerCoords - station.blipCoords)
if distance < nearestDistance then
nearestDistance = distance
nearestStation = {id = stationId, data = station, distance = distance}
end
end
return nearestStation
end
-- Command um nächste Taxi-Station zu finden
RegisterCommand('nearesttaxi', function()
local nearest = GetNearestTaxiStation()
if nearest then
lib.notify({
title = 'Taxi Service',
description = 'Nächste Station: ' .. nearest.data.name .. ' (' .. math.ceil(nearest.distance) .. 'm)',
type = 'info'
})
-- Waypoint zur nächsten Station setzen
SetNewWaypoint(nearest.data.blipCoords.x, nearest.data.blipCoords.y)
else
lib.notify({
title = 'Taxi Service',
description = 'Keine Taxi-Station gefunden',
type = 'error'
})
end
end)
-- Erweiterte Ziel-Optionen für Station-Taxis
function OpenStationTaxiMenu(stationId, vehicleId, vehicle, driver, pricePerKm)
local options = {}
-- Bekannte Ziele hinzufügen
for _, destination in pairs(Config.KnownDestinations) do
local customPrice = math.max(Config.MinFare, math.ceil((CalculateDistanceToCoords(destination.coords) / 1000) * pricePerKm))
table.insert(options, {
title = destination.name,
description = 'Preis: $' .. customPrice .. ' | Entfernung: ' .. math.ceil(CalculateDistanceToCoords(destination.coords) / 1000 * 100) / 100 .. 'km',
icon = 'map-marker',
onSelect = function()
StartStationTaxiRide(stationId, vehicleId, vehicle, driver, destination.coords, customPrice)
end
})
end
-- Andere Taxi-Stationen als Ziele
table.insert(options, {
title = '📍 Andere Taxi-Stationen',
description = 'Fahre zu einer anderen Taxi-Station',
icon = 'taxi',
onSelect = function()
OpenStationSelectionMenu(stationId, vehicleId, vehicle, driver, pricePerKm)
end
})
-- Waypoint Option
table.insert(options, {
title = 'Zu meinem Waypoint',
description = 'Fahre zu deinem gesetzten Waypoint',
icon = 'location-dot',
onSelect = function()
local waypoint = GetFirstBlipInfoId(8)
if DoesBlipExist(waypoint) then
local coords = GetBlipInfoIdCoord(waypoint)
local distance = CalculateDistanceToCoords(coords) / 1000
local price = math.max(Config.MinFare, math.ceil(distance * pricePerKm))
StartStationTaxiRide(stationId, vehicleId, vehicle, driver, coords, price)
else
lib.notify({
title = 'Taxi Service',
description = 'Du hast keinen Waypoint gesetzt',
type = 'error'
})
OpenStationTaxiMenu(stationId, vehicleId, vehicle, driver, pricePerKm)
end
end
})
-- Aussteigen Option
table.insert(options, {
title = 'Aussteigen',
description = 'Das Taxi verlassen',
icon = 'door-open',
onSelect = function()
ExitStationTaxi(stationId, vehicleId, vehicle, driver)
end
})
lib.registerContext({
id = 'station_taxi_menu',
title = 'Taxi - Ziel wählen (' .. Config.TaxiStations[stationId].name .. ')',
options = options
})
lib.showContext('station_taxi_menu')
end
function OpenStationSelectionMenu(stationId, vehicleId, vehicle, driver, pricePerKm)
local options = {}
for otherStationId, station in pairs(Config.TaxiStations) do
if otherStationId ~= stationId then
local distance = CalculateDistanceToCoords(station.blipCoords) / 1000
local price = math.max(Config.MinFare, math.ceil(distance * pricePerKm))
table.insert(options, {
title = station.name,
description = 'Preis: $' .. price .. ' | Entfernung: ' .. math.ceil(distance * 100) / 100 .. 'km',
icon = 'building',
onSelect = function()
StartStationTaxiRide(stationId, vehicleId, vehicle, driver, station.blipCoords, price)
end
})
end
end
-- Zurück Option
table.insert(options, {
title = '← Zurück',
description = 'Zurück zum Hauptmenü',
icon = 'arrow-left',
onSelect = function()
OpenStationTaxiMenu(stationId, vehicleId, vehicle, driver, pricePerKm)
end
})
lib.registerContext({
id = 'station_selection_menu',
title = 'Taxi-Stationen',
options = options
})
lib.showContext('station_selection_menu')
end
-- Verbesserte Fahrzeug-Respawn-Logik
function RespawnStationVehicle(stationId, vehicleId)
if not stationVehicles[stationId] or not stationVehicles[stationId][vehicleId] then
return
end
local vehicleData = stationVehicles[stationId][vehicleId].data
-- Prüfen ob Position frei ist
local coords = vehicleData.coords
local existingVehicles = GetGamePool('CVehicle')
local positionBlocked = false
for _, veh in pairs(existingVehicles) do
local vehCoords = GetEntityCoords(veh)
if #(vector3(coords.x, coords.y, coords.z) - vehCoords) < 3.0 then
positionBlocked = true
break
end
end
if not positionBlocked then
SpawnStationVehicle(stationId, vehicleId, vehicleData)
else
-- Erneut versuchen nach 30 Sekunden
SetTimeout(30000, function()
RespawnStationVehicle(stationId, vehicleId)
end)
end
end

View file

@ -94,10 +94,6 @@ Config.TaxiStations = {
}
}
},
{
name = "Vespucci Beach Taxi",
coords = vector4(-1266.53, -833.8, 17.11, 37.5),

View file

@ -0,0 +1,26 @@
fx_version 'cerulean'
game 'gta5'
author 'YourName'
description 'Taxi System with ox_lib and qb-target'
version '1.0.0'
shared_scripts {
'@ox_lib/init.lua',
'config.lua'
}
client_scripts {
'client/main.lua',
'client/stations.lua'
}
server_scripts {
'server/main.lua'
}
dependencies {
'qb-core',
'ox_lib',
'qb-target'
}