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,36 +157,84 @@ 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 = {
RequestModel(driverHash) "a_m_m_taxi_01",
local timeout = GetGameTimer() + 10000 "s_m_y_taxi_01",
while not HasModelLoaded(driverHash) and GetGameTimer() < timeout do "a_m_y_business_01",
print("^3[TAXI STATIONS DEBUG]^7 Waiting for driver model to load...") "a_m_m_business_01",
Wait(100) "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() + 5000
while not HasModelLoaded(driverHash) and GetGameTimer() < timeout do
print("^3[TAXI STATIONS DEBUG]^7 Waiting for driver model " .. modelName .. " to load...")
Wait(100)
end
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 end
if not HasModelLoaded(driverHash) then -- Fallback: Fahrer ohne Model erstellen
print("^1[TAXI STATIONS DEBUG]^7 Failed to load driver model!") if not driver or not DoesEntityExist(driver) then
return print("^3[TAXI STATIONS DEBUG]^7 Using fallback driver creation...")
end
-- Standard Male Model verwenden
local driver = CreatePedInsideVehicle(vehicle, 26, driverHash, -1, true, false) driverHash = GetHashKey("mp_m_freemode_01")
RequestModel(driverHash)
if not DoesEntityExist(driver) then local timeout = GetGameTimer() + 5000
print("^1[TAXI STATIONS DEBUG]^7 Failed to create driver!") while not HasModelLoaded(driverHash) and GetGameTimer() < timeout do
return Wait(100)
end
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 end
print("^2[TAXI STATIONS DEBUG]^7 Driver created: " .. driver) -- Wenn immer noch kein Fahrer, ohne Fahrer fortfahren
if not driver or not DoesEntityExist(driver) then
SetEntityAsMissionEntity(driver, true, true) print("^1[TAXI STATIONS DEBUG]^7 Could not create any driver, continuing without driver")
SetPedFleeAttributes(driver, 0, 0) driver = nil
SetPedCombatAttributes(driver, 17, 1) else
SetPedSeeingRange(driver, 0.0) -- Fahrer konfigurieren
SetPedHearingRange(driver, 0.0) SetEntityAsMissionEntity(driver, true, true)
SetPedAlertness(driver, 0) SetPedFleeAttributes(driver, 0, 0)
SetPedKeepTask(driver, true) SetPedCombatAttributes(driver, 17, 1)
SetPedSeeingRange(driver, 0.0)
SetPedHearingRange(driver, 0.0)
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 -- 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