FiveM Tırcılık Mesleği Sistemi: Uzun Yol Teslimat Scriptleri
FiveM sunucunuza eksiksiz bir kamyonculuk kariyeri ekleyin. Rotalar, yükler, maaşlar ve QBCore ile ESX ekonomileri için en iyi kamyonculuk scriptleri.
Agency Scripts
Agency Scripts Kurucusu ve Baş Geliştiricisi
Tırcılık Meslekleri Sunucu Ekonomisi İçin Neden Önemli
Kamyonculuk ve teslimat meslekleri, herhangi bir FiveM roleplay sunucusunun ekonomik omurgasını oluşturur. Henüz bağlantı kurmamış veya uzmanlaşmış bir iş bulamamış yeni oyuncular için güvenilir bir gelir kaynağı sağlarken, aynı zamanda haritadaki işletmeleri birbirine bağlayan lojistik altyapısını kurar. Bir restoran malzemeye, bir araç galerisi araç nakliyesine veya bir şantiye inşaat malzemesine ihtiyaç duyduğunda, kamyonculuk arz ile talep arasındaki köprüyü oluşturur. İyi tasarlanmış bir kamyonculuk sistemi, A noktasından B noktasına gitmekten ibaret basit bir işi, rota planlaması, kargo yönetimi, araç yükseltmeleri ve tehlikeli bölgelerden geçen daha uzun ancak daha yüksek kazançlı rotaları seçmeye dair risk-ödül kararları içeren ilgi çekici bir kariyer yoluna dönüştürür. Kamyonculuk mesleği ayrıca otoyollara büyük araçlar çıkararak haritayı hareketlendirir ve polise trafik ihlallerini denetleme fırsatı sunarak kamyoncular ile kolluk kuvvetleri arasında doğal roleplay etkileşimleri yaratır.
Rota Yapılandırması ve Sözleşme Sistemi
Tırcılık sisteminizi, sürücülerin tır garajındaki bir sevkiyat panosundan iş aldığı bir sözleşme modeli etrafında tasarlayın. Her sözleşme teslim alma konumunu, teslimat hedefini, kargo türünü, ağırlığı, ödeme oranını ve zaman sınırını belirtir. Sözleşmeleri sürücü ehliyet sınıfına ve deneyim seviyesine göre kademelere ayırın, böylece yeni sürücüler panelvanlarla yerel teslimatlarla başlarken kıdemli taşımacılar tehlikeli maddeler içeren harita çapında dorse seferleri üstlenir. Sözleşme sistemi, birkaç seferden sonra tekrara düşen statik rotalar kullanmak yerine teslim alma ve teslimat noktaları havuzundan dinamik olarak rotalar oluşturmalıdır:
Config.TruckingDepot = {
location = vector3(152.29, -3210.88, 5.91),
spawnPoint = vector4(162.45, -3207.12, 5.91, 270.0),
returnPoint = vector3(148.77, -3215.44, 5.91),
}
Config.ContractTiers = {
[1] = {
label = 'Local Delivery',
requiredLevel = 0,
vehicle = 'mule',
payRange = { 500, 1200 },
timeLimit = 600,
routes = {
{ pickup = vector3(89.54, -1745.62, 29.33),
dropoff = vector3(-46.23, -1758.49, 29.42),
cargo = 'electronics', weight = 500 },
{ pickup = vector3(821.77, -2160.33, 29.62),
dropoff = vector3(-324.18, -1522.87, 27.56),
cargo = 'food_supplies', weight = 350 },
{ pickup = vector3(-1088.34, -2002.19, 13.22),
dropoff = vector3(1214.56, -1386.73, 35.37),
cargo = 'clothing', weight = 200 },
}
},
[2] = {
label = 'Regional Haul',
requiredLevel = 5,
vehicle = 'packer',
trailer = 'trailers',
payRange = { 2000, 4500 },
timeLimit = 900,
routes = {
{ pickup = vector3(1378.22, -2078.85, 52.04),
dropoff = vector3(-2556.14, 2334.67, 33.06),
cargo = 'construction_materials', weight = 15000 },
{ pickup = vector3(-58.83, -2538.92, 6.07),
dropoff = vector3(2671.84, 1678.93, 24.49),
cargo = 'fuel_barrels', weight = 12000,
hazardous = true },
}
},
[3] = {
label = 'Long Haul',
requiredLevel = 15,
vehicle = 'hauler',
trailer = 'tanker',
payRange = { 5000, 10000 },
timeLimit = 1200,
routes = {
{ pickup = vector3(2682.34, 1410.77, 24.52),
dropoff = vector3(-1143.27, -2002.47, 13.18),
cargo = 'refined_fuel', weight = 25000,
hazardous = true, fragile = false },
}
},
}
Config.LevelXP = {
perDelivery = 25,
bonusOnTime = 15,
bonusNoDamage = 20,
penaltyLate = -10,
penaltyCargoDamage = -15,
}
Seviye ve XP sistemi, sürücülerin zaman içinde oyunda kalmasını sağlayan bir ilerleme sunar. Her başarılı teslimat; zamanında tamamlama ve kargoyu hasarsız teslim etme bonuslarıyla birlikte deneyim puanı kazandırır. Deneyim sistemi, daha uzun rotaların daha tehlikeli bölgelerden geçmesi ve daha büyük araçların dar şehir sokaklarında kontrol edilmesinin daha zor olması nedeniyle daha yüksek ödemeli ancak aynı zamanda daha zorlu üst kademe sözleşmelerin kilidini açar.
Araç ve Römork Yönetimi
Kamyonculuk araçları, standart oyuncu araçlarına kıyasla özel işlem gerektirir. Bir sürücü bir sözleşmeyi kabul ettiğinde, deponun spawn noktasında uygun kamyonu oluşturun ve gereken dorseyi bağlayın. Kullanın AttachVehicleToTrailer uygun dorse fizikleri için ve sürücülerin çekicilerini dorseye doğru geri yanaştırıp bağlamak için bir tuşa basmasını gerektiren manuel bir bağlantı sistemi uygulayın. Bu manuel işlem, beceriye dayalı bir oynanış katar ve bir sürücü dar bir yükleme alanına zorlu bir geri yanaşmayı başardığında tatmin edici anlar yaratır. Dorse bağlantı durumunu dikkatle izleyin, çünkü GTA'nın dorse fiziği çarpışmalar sırasında dorselerin ayrılmasına neden olabilir ve script'inizin bunu tespit edip sürücüyü bilgilendirmesi gerekir:
local activeTrailer = nil
local trailerAttached = false
function SpawnTruckWithTrailer(vehicleModel, trailerModel, spawnPoint)
-- Spawn truck
local truckHash = GetHashKey(vehicleModel)
RequestModel(truckHash)
while not HasModelLoaded(truckHash) do Wait(10) end
local truck = CreateVehicle(truckHash, spawnPoint.x, spawnPoint.y,
spawnPoint.z, spawnPoint.w, true, false)
SetVehicleNumberPlateText(truck, 'HAUL' .. math.random(100, 999))
SetEntityAsMissionEntity(truck, true, true)
SetModelAsNoLongerNeeded(truckHash)
-- Spawn trailer if needed
if trailerModel then
local trailerHash = GetHashKey(trailerModel)
RequestModel(trailerHash)
while not HasModelLoaded(trailerHash) do Wait(10) end
local trailerSpawn = GetOffsetFromEntityInWorldCoords(truck, 0.0, -8.0, 0.0)
activeTrailer = CreateVehicle(trailerHash, trailerSpawn.x,
trailerSpawn.y, trailerSpawn.z, spawnPoint.w, true, false)
SetEntityAsMissionEntity(activeTrailer, true, true)
SetModelAsNoLongerNeeded(trailerHash)
-- Auto-attach trailer
AttachVehicleToTrailer(truck, activeTrailer, 1.0)
trailerAttached = true
end
return truck
end
-- Monitor trailer attachment status
CreateThread(function()
while activeTrailer do
if trailerAttached then
local truck = GetVehiclePedIsIn(PlayerPedId(), false)
if truck ~= 0 and not IsVehicleAttachedToTrailer(truck) then
trailerAttached = false
lib.notify({
title = 'Trailer Detached!',
description = 'Your trailer has come loose! Re-attach it.',
type = 'error'
})
-- Add blip to trailer location
local trailerCoords = GetEntityCoords(activeTrailer)
local blip = AddBlipForEntity(activeTrailer)
SetBlipSprite(blip, 479)
SetBlipColour(blip, 1)
BeginTextCommandSetBlipName('STRING')
AddTextComponentSubstringPlayerName('Detached Trailer')
EndTextCommandSetBlipName(blip)
end
end
Wait(1000)
end
end)
Kargo Hasarı ve Durum Takibi
Kargo durumu, her teslimata anlamlı bir oynanış derinliği katar. Güzergah boyunca çarpmalara, tümseklerdeki hıza ve sürüş davranışına bağlı olarak kargonun durumunu takip edin. Kamyon nesnelere veya diğer araçlara çarptığında, aracın hız değişimini kullanarak çarpışma şiddetini hesaplayın ve kargoya orantılı hasar uygulayın. Elektronik veya cam gibi hassas kargolar küçük sarsıntılardan bile ağır hasar alırken, inşaat çeliği gibi dayanıklı kargolar darbelerden neredeyse hiç etkilenmez. Sürücülerin sürüşlerinin sonuçlarını gerçek zamanlı görebilmeleri için kargo sağlığını HUD üzerinde yüzde olarak gösterin. Nihai ödemeyi kargo hasarıyla orantılı olarak azaltın ve altına düşüldüğünde kargo imha olduğu için teslimatın tamamen başarısız sayılacağı minimum bir eşik belirleyin. Bu mekanik, hızı yapay olarak sınırlandırmadan dikkatli sürüşü doğal olarak teşvik eder ve sürücülerin süre sınırına yetişmek için hızlı sürmek ile kargo durumunu korumak için dikkatli sürmek arasında kendi risk-kazanç dengesini kurmalarını sağlar.
GPS Navigasyonu ve Rota Gösterimi
Kamyonculara, rotaları hesaplarken araç boyutunu hesaba katan özel bir GPS sistemi sağlayın. Standart GTA rota noktaları, oyuncuları bir tır dorsesinin geçemeyeceği dar sokaklara ve alçak köprülerin altına yönlendirir. Varsayılan navigasyonu; kamyon dostu yolları izleyen, keskin virajlardan kaçınan ve sürücüleri yaklaşan engeller hakkında uyaran özel rota işaretçileriyle geçersiz kılın. Rotayı minimap üzerinde bir sonraki noktaya olan mesafe göstergeleriyle birlikte bir dizi kontrol noktası blip'i olarak görüntüleyin ve mevcut hıza göre tahmini bir varış süresi gösterin. Kat edilen mesafeye ve araç ağırlığına bağlı bir yakıt tüketimi mekaniği ekleyin; böylece sürücüler uzun yolculuklarda yakıt duraklarını planlamak zorunda kalsın ve yolculuk sırasında ek karar noktaları oluşsun:
function CreateTruckRoute(pickupCoords, dropoffCoords)
-- Clear previous route
ClearGpsMultiRoute()
-- Set up checkpoint blips along the route
local checkpoints = CalculateTruckFriendlyRoute(pickupCoords, dropoffCoords)
for i, checkpoint in ipairs(checkpoints) do
local blip = AddBlipForCoord(checkpoint.x, checkpoint.y, checkpoint.z)
SetBlipSprite(blip, 1)
SetBlipScale(blip, 0.6)
SetBlipColour(blip, i == #checkpoints and 5 or 3)
SetBlipAsShortRange(blip, true)
table.insert(routeBlips, blip)
end
-- Set final destination waypoint
SetNewWaypoint(dropoffCoords.x, dropoffCoords.y)
-- Start GPS multi-route display
StartGpsMultiRoute(6, true, true)
for _, cp in ipairs(checkpoints) do
AddPointToGpsMultiRoute(cp.x, cp.y, cp.z)
end
SetGpsMultiRouteRender(true)
end
Kantar İstasyonları ve Denetimler
Kamyoncuların durup yüklerini kontrol ettirmeleri gereken ana otoyol güzergahları boyunca kantar istasyonları ekleyin. Bu mekanik, uzun yol taşımacılığında doğal etkileşim noktaları oluşturur ve kamyoncular ile NPC veya ulaştırma yetkilisi mesleğine sahip oyuncular olabilen DOT müfettişleri arasında roleplay fırsatları yaratır. Bir kantar istasyonunda, kamyonun toplam ağırlığını yasal limitlere göre kontrol edin, kargo manifestosunun yüklenenle eşleştiğini doğrulayın ve araç durumunu inceleyin. Fazla yüklü kamyonlar teslimat kârını düşüren para cezaları alır, bu da sürücüleri yasal sınırlar içinde kalmaya teşvik eder. Sunucunuzda bir polis teşkilatı varsa, memurlara benzer kontrollerle yol kenarı denetimleri yapma yetkisi vererek suça dayanmayan organik kolluk kuvveti karşılaşmaları oluşturun. Kantar istasyonuna uyum, tutkulu kamyoncu oyuncularının role olan bağlılıklarını doğruladığı için gerçekten keyif aldıkları yeni bir gerçekçilik katmanı ekler.
Çok Oyunculu Konvoy Sistemi
Birden fazla kamyoncunun, katılan sürücü başına bonus kazandıran grup teslimatları için konvoy oluşturmasına izin verin. Konvoy lideri, aynı varış bölgesine giden bağlantılı teslimatlar oluşturan özel bir çoklu kamyon sözleşmesini kabul eder. Konvoy üyeleri koordinasyon için bir telsiz kanalını paylaşır, özel konvoy işaretçileriyle mini haritada birbirlerinin konumlarını görür ve birbirlerine makul bir mesafede sürerken yakınlık bonusu alır. Bu durum sosyal oynanışı teşvik eder ve otoyolda art arda ilerleyen kamyon dizisiyle etkileyici görsel anlar oluşturur. Her üyenin sıradaki konumunu gösteren, geride kalan veya yanlış yola sapan kişileri vurgulayan bir konvoy diziliş göstergesi uygulayın. Konvoy bonusu, grup oluşturmayı teşvik edecek kadar belirgin olmalıdır; genellikle tek başına yapılan sürüşlerden yüzde yirmi ila otuz daha fazla olması, hemen tek başına yola çıkmak yerine diğer sürücüleri beklemeye değer kılar.
Performans ve Anti-Exploit Önlemleri
Kamyonculuk sistemleri ciddi render maliyetine sahip büyük araçlar oluşturur, bu nedenle yaşam döngülerini dikkatli yönetin. Teslimat tamamlandığında veya başarısız olduğunda kamyonu ve dorseyi haritada bırakmak yerine derhal silin. Sürücü teslimat ortasında oyundan ayrılırsa, sunucu tarafında oluşturulan araçları temizleyin ve sözleşmeyi terk edilmiş olarak işaretleyin. Kamyonun konumunu düzenli aralıklarla takip ederek ve teslim alma noktasından bırakma noktasına kadar makul bir rota izlediğinden emin olarak ışınlanma açıklarını önleyin, kontroller arasında imkansız mesafeler kat eden teslimatları işaretleyin. Oyuncuların en yüksek kazançlı rotaları seçmek için sözleşmeleri hızla kabul edip iptal etmesini engellemek amacıyla sözleşme kabulüne hız sınırı (rate-limit) koyun. Skor tabloları ve başarımlar için oyuncu başına teslimat istatistiklerini kaydedin, ancak aynı anda birçok sürücünün aktif olduğu yoğun saatlerde veritabanı yükünü en aza indirmek için her kontrol noktasından sonra yazmak yerine veritabanı yazma işlemlerini bir zamanlayıcı ile toplu yapın.