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 -- Türen entsperren
SetVehicleDoorsLocked(vehicle, 1) SetVehicleDoorsLocked(vehicle, 1)
-- Fahrer spawnen -- Verschiedene Fahrer-Models versuchen
local driverHash = GetHashKey("a_m_m_taxi_01") 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) RequestModel(driverHash)
local timeout = GetGameTimer() + 10000 local timeout = GetGameTimer() + 5000
while not HasModelLoaded(driverHash) and GetGameTimer() < timeout do 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) Wait(100)
end end
if not HasModelLoaded(driverHash) then if HasModelLoaded(driverHash) then
print("^1[TAXI STATIONS DEBUG]^7 Failed to load driver model!") print("^2[TAXI STATIONS DEBUG]^7 Driver model " .. modelName .. " loaded successfully")
return
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 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 -- Standard Male Model verwenden
print("^1[TAXI STATIONS DEBUG]^7 Failed to create driver!") driverHash = GetHashKey("mp_m_freemode_01")
return RequestModel(driverHash)
local timeout = GetGameTimer() + 5000
while not HasModelLoaded(driverHash) and GetGameTimer() < timeout do
Wait(100)
end 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) SetEntityAsMissionEntity(driver, true, true)
SetPedFleeAttributes(driver, 0, 0) SetPedFleeAttributes(driver, 0, 0)
SetPedCombatAttributes(driver, 17, 1) SetPedCombatAttributes(driver, 17, 1)
@ -188,6 +229,13 @@ RegisterNetEvent('taxi:enterStationVehicle', function(data)
SetPedAlertness(driver, 0) SetPedAlertness(driver, 0)
SetPedKeepTask(driver, true) 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 -- Spieler einsteigen lassen
TaskEnterVehicle(playerPed, vehicle, 10000, 0, 1.0, 1, 0) 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 if not IsPedInVehicle(playerPed, vehicle, false) then
print("^1[TAXI STATIONS DEBUG]^7 Player failed to enter vehicle") print("^1[TAXI STATIONS DEBUG]^7 Player failed to enter vehicle")
-- Cleanup -- Cleanup
if DoesEntityExist(driver) then if driver and DoesEntityExist(driver) then
DeleteEntity(driver) DeleteEntity(driver)
end end
SetVehicleDoorsLocked(vehicle, 2) SetVehicleDoorsLocked(vehicle, 2)
@ -269,6 +317,18 @@ function OpenStationTaxiMenu(stationId, vehicleId, vehicle, driver, pricePerKm)
end 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 -- Aussteigen Option
table.insert(options, { table.insert(options, {
title = 'Aussteigen', title = 'Aussteigen',
@ -288,6 +348,41 @@ function OpenStationTaxiMenu(stationId, vehicleId, vehicle, driver, pricePerKm)
lib.showContext('station_taxi_menu') lib.showContext('station_taxi_menu')
end 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) function OpenStationSelectionMenu(stationId, vehicleId, vehicle, driver, pricePerKm)
print("^2[TAXI STATIONS DEBUG]^7 Opening station selection menu") print("^2[TAXI STATIONS DEBUG]^7 Opening station selection menu")
@ -331,6 +426,29 @@ end
function StartStationTaxiRide(stationId, vehicleId, vehicle, driver, destination, price) function StartStationTaxiRide(stationId, vehicleId, vehicle, driver, destination, price)
print("^2[TAXI STATIONS DEBUG]^7 Starting station taxi ride to: " .. tostring(destination)) 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({ lib.notify({
title = 'Taxi Service', title = 'Taxi Service',
description = 'Fahrt gestartet - Preis: $' .. price, description = 'Fahrt gestartet - Preis: $' .. price,
@ -412,7 +530,7 @@ function ReturnTaxiToStation(stationId, vehicleId, vehicle, driver)
end end
-- Fahrer löschen -- Fahrer löschen
if DoesEntityExist(driver) then if driver and DoesEntityExist(driver) then
DeleteEntity(driver) DeleteEntity(driver)
print("^2[TAXI STATIONS DEBUG]^7 Driver deleted") print("^2[TAXI STATIONS DEBUG]^7 Driver deleted")
end end
@ -520,37 +638,6 @@ RegisterNetEvent('taxi:respawnAllStations', function()
}) })
end) 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 -- Cleanup beim Resource Stop
AddEventHandler('onResourceStop', function(resourceName) AddEventHandler('onResourceStop', function(resourceName)
if GetCurrentResourceName() == resourceName then if GetCurrentResourceName() == resourceName then