1
0
Fork 0
forked from Simnation/Main

Update stations.lua

This commit is contained in:
Nordi98 2025-07-30 02:53:21 +02:00
parent 7c23484c7c
commit 395693bac1

View file

@ -157,29 +157,70 @@ RegisterNetEvent('taxi:enterStationVehicle', function(data)
-- Türen entsperren
SetVehicleDoorsLocked(vehicle, 1)
-- Fahrer spawnen
local driverHash = GetHashKey("a_m_m_taxi_01")
-- Verschiedene Fahrer-Models versuchen
local driverModels = {
"a_m_m_taxi_01",
"s_m_y_taxi_01",
"a_m_y_business_01",
"a_m_m_business_01",
"a_m_y_downtown_01"
}
local driver = nil
local driverHash = nil
for _, modelName in pairs(driverModels) do
print("^2[TAXI STATIONS DEBUG]^7 Trying driver model: " .. modelName)
driverHash = GetHashKey(modelName)
RequestModel(driverHash)
local timeout = GetGameTimer() + 10000
local timeout = GetGameTimer() + 5000
while not HasModelLoaded(driverHash) and GetGameTimer() < timeout do
print("^3[TAXI STATIONS DEBUG]^7 Waiting for driver model to load...")
print("^3[TAXI STATIONS DEBUG]^7 Waiting for driver model " .. modelName .. " to load...")
Wait(100)
end
if not HasModelLoaded(driverHash) then
print("^1[TAXI STATIONS DEBUG]^7 Failed to load driver model!")
return
if HasModelLoaded(driverHash) then
print("^2[TAXI STATIONS DEBUG]^7 Driver model " .. modelName .. " loaded successfully")
driver = CreatePedInsideVehicle(vehicle, 26, driverHash, -1, true, false)
if DoesEntityExist(driver) then
print("^2[TAXI STATIONS DEBUG]^7 Driver created successfully: " .. driver)
break
else
print("^1[TAXI STATIONS DEBUG]^7 Failed to create driver with model: " .. modelName)
SetModelAsNoLongerNeeded(driverHash)
end
else
print("^1[TAXI STATIONS DEBUG]^7 Failed to load driver model: " .. modelName)
end
end
local driver = CreatePedInsideVehicle(vehicle, 26, driverHash, -1, true, false)
-- Fallback: Fahrer ohne Model erstellen
if not driver or not DoesEntityExist(driver) then
print("^3[TAXI STATIONS DEBUG]^7 Using fallback driver creation...")
if not DoesEntityExist(driver) then
print("^1[TAXI STATIONS DEBUG]^7 Failed to create driver!")
return
-- Standard Male Model verwenden
driverHash = GetHashKey("mp_m_freemode_01")
RequestModel(driverHash)
local timeout = GetGameTimer() + 5000
while not HasModelLoaded(driverHash) and GetGameTimer() < timeout do
Wait(100)
end
print("^2[TAXI STATIONS DEBUG]^7 Driver created: " .. driver)
if HasModelLoaded(driverHash) then
driver = CreatePedInsideVehicle(vehicle, 26, driverHash, -1, true, false)
print("^2[TAXI STATIONS DEBUG]^7 Fallback driver created: " .. (driver or "nil"))
end
end
-- Wenn immer noch kein Fahrer, ohne Fahrer fortfahren
if not driver or not DoesEntityExist(driver) then
print("^1[TAXI STATIONS DEBUG]^7 Could not create any driver, continuing without driver")
driver = nil
else
-- Fahrer konfigurieren
SetEntityAsMissionEntity(driver, true, true)
SetPedFleeAttributes(driver, 0, 0)
SetPedCombatAttributes(driver, 17, 1)
@ -188,6 +229,13 @@ RegisterNetEvent('taxi:enterStationVehicle', function(data)
SetPedAlertness(driver, 0)
SetPedKeepTask(driver, true)
-- Fahrer-Outfit für Taxi
SetPedComponentVariation(driver, 8, 0, 0, 0) -- Shirt
SetPedComponentVariation(driver, 11, 0, 0, 0) -- Jacket
SetPedComponentVariation(driver, 4, 0, 0, 0) -- Pants
SetPedComponentVariation(driver, 6, 0, 0, 0) -- Shoes
end
-- Spieler einsteigen lassen
TaskEnterVehicle(playerPed, vehicle, 10000, 0, 1.0, 1, 0)
@ -210,7 +258,7 @@ RegisterNetEvent('taxi:enterStationVehicle', function(data)
if not IsPedInVehicle(playerPed, vehicle, false) then
print("^1[TAXI STATIONS DEBUG]^7 Player failed to enter vehicle")
-- Cleanup
if DoesEntityExist(driver) then
if driver and DoesEntityExist(driver) then
DeleteEntity(driver)
end
SetVehicleDoorsLocked(vehicle, 2)
@ -269,6 +317,18 @@ function OpenStationTaxiMenu(stationId, vehicleId, vehicle, driver, pricePerKm)
end
})
-- Selbst fahren Option (wenn kein Fahrer)
if not driver or not DoesEntityExist(driver) then
table.insert(options, {
title = '🚗 Selbst fahren',
description = 'Du fährst das Taxi selbst (kostenlos)',
icon = 'car',
onSelect = function()
SelfDriveStationTaxi(stationId, vehicleId, vehicle)
end
})
end
-- Aussteigen Option
table.insert(options, {
title = 'Aussteigen',
@ -288,6 +348,41 @@ function OpenStationTaxiMenu(stationId, vehicleId, vehicle, driver, pricePerKm)
lib.showContext('station_taxi_menu')
end
function SelfDriveStationTaxi(stationId, vehicleId, vehicle)
print("^2[TAXI STATIONS DEBUG]^7 Player driving taxi themselves")
local playerPed = PlayerPedId()
-- Spieler zum Fahrersitz bewegen
TaskShuffleToNextVehicleSeat(playerPed, vehicle)
lib.notify({
title = 'Taxi Service',
description = 'Du fährst das Taxi jetzt selbst. Bringe es zur Station zurück wenn du fertig bist.',
type = 'info'
})
-- Überwachung für Rückgabe
CreateThread(function()
while DoesEntityExist(vehicle) do
local playerPed = PlayerPedId()
-- Prüfen ob Spieler noch im Fahrzeug ist
if not IsPedInVehicle(playerPed, vehicle, false) then
print("^2[TAXI STATIONS DEBUG]^7 Player left self-drive taxi")
-- Nach 30 Sekunden Taxi zurück zur Station
SetTimeout(30000, function()
ReturnTaxiToStation(stationId, vehicleId, vehicle, nil)
end)
break
end
Wait(5000)
end
end)
end
function OpenStationSelectionMenu(stationId, vehicleId, vehicle, driver, pricePerKm)
print("^2[TAXI STATIONS DEBUG]^7 Opening station selection menu")
@ -331,6 +426,29 @@ end
function StartStationTaxiRide(stationId, vehicleId, vehicle, driver, destination, price)
print("^2[TAXI STATIONS DEBUG]^7 Starting station taxi ride to: " .. tostring(destination))
-- Wenn kein Fahrer, Spieler selbst fahren lassen
if not driver or not DoesEntityExist(driver) then
lib.notify({
title = 'Taxi Service',
description = 'Kein Fahrer verfügbar. Fahre selbst zum Ziel! (Kostenlos)',
type = 'info'
})
-- Destination Blip erstellen
local destinationBlip = AddBlipForCoord(destination.x, destination.y, destination.z)
SetBlipSprite(destinationBlip, 1)
SetBlipColour(destinationBlip, 2)
SetBlipScale(destinationBlip, 0.8)
BeginTextCommandSetBlipName("STRING")
AddTextComponentString("Taxi Ziel")
EndTextCommandSetBlipName(destinationBlip)
-- Route setzen
SetNewWaypoint(destination.x, destination.y)
return
end
lib.notify({
title = 'Taxi Service',
description = 'Fahrt gestartet - Preis: $' .. price,
@ -412,7 +530,7 @@ function ReturnTaxiToStation(stationId, vehicleId, vehicle, driver)
end
-- Fahrer löschen
if DoesEntityExist(driver) then
if driver and DoesEntityExist(driver) then
DeleteEntity(driver)
print("^2[TAXI STATIONS DEBUG]^7 Driver deleted")
end
@ -520,37 +638,6 @@ RegisterNetEvent('taxi:respawnAllStations', function()
})
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
-- Cleanup beim Resource Stop
AddEventHandler('onResourceStop', function(resourceName)
if GetCurrentResourceName() == resourceName then