نظام وظائف الشحن FiveM: سكريبتات التوصيل لمسافات طويلة
إضافة مهنة نقل شاحنات مناسبة إلى خادم FiveM الخاص بك. الطرق، الحمولة، الرواتب وأفضل سكربتات النقل لشبكات QBCore وESX الاقتصادية.
Agency Scripts
المؤسس والمطور الرئيسي في Agency Scripts
لماذا وظائف الشحن مهمة لاقتصاد الخادم
وظائف الشحن والتوصيل تشكل العمود الفقري الاقتصادي لأي خادم FiveM للتمثيل. توفر مصدر دخل موثوق للاعبين الجدد الذين لم يؤسسوا بعد علاقات أو وجدوا وظائف متخصصة، بينما تخلق أيضًا بنية تحتية لوجستية تربط الأعمال عبر الخريطة. عندما يحتاج مطعم إلى مكونات، أو تاجر سيارات إلى نقل مركبات، أو موقع بناء إلى مواد، يخلق الشحن الجسر بين العرض والطلب. يحول نظام الشحن المصمم جيدًا ما يمكن أن يكون مجرد عمل روتيني من نقطة أ إلى نقطة ب إلى مسار مهني جذاب مع تخطيط المسار، إدارة الحمولة، ترقيات المركبات، وقرارات المخاطرة والمكافأة حول أخذ طرق أطول لكنها ذات أجر أعلى عبر مناطق خطرة. كما يملأ وظيفة الشحن الخريطة بالنشاط، بوضع مركبات كبيرة على الطرق السريعة ومنح الشرطة شيئًا لمراقبته من مخالفات المرور، مما يخلق لقاءات تمثيلية طبيعية بين سائقي الشاحنات وإنفاذ القانون.
تكوين المسار ونظام العقود
تصميم نظام الشحن الخاص بك حول نموذج عقد حيث يلتقط السائقون الوظائف من لوحة الإرسال في مستودع الشحن. يحدد كل عقد موقع الالتقاط، وجهة التسليم، نوع الحمولة، الوزن، معدل الأجر، والحد الزمني. تنظيم العقود في مستويات بناءً على فئة رخصة السائق ومستوى الخبرة، بحيث يبدأ السائقون الجدد بالتسليمات المحلية باستخدام شاحنات الصناديق بينما يتولى الناقلون المخضرمون رحلات عبر الخريطة مع مقطورات المواد الخطرة. يجب أن يولد نظام العقود الطرق ديناميكياً من مجموعة نقاط الالتقاط والتسليم بدلاً من استخدام طرق ثابتة تصبح متكررة بعد عدة رحلات:
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,
}
يخلق نظام المستوى ونقاط الخبرة تقدمًا يبقي السائقين منخرطين مع مرور الوقت. كل تسليم ناجح يكسب نقاط خبرة مع مكافآت للإكمال في الوقت المحدد وتسليم الحمولة دون ضرر. يفتح نظام الخبرة عقودًا ذات مستويات أعلى بأجور أفضل ولكن أيضًا بصعوبة أكبر، حيث تمر الطرق الأطول عبر مناطق أكثر خطورة والمركبات الأكبر أصعب في الشوارع الضيقة للمدينة.
إدارة المركبات والمقطورات
تحتاج مركبات الشحن إلى معالجة خاصة مقارنة بسيارات اللاعبين العادية. عندما يقبل السائق عقدًا، ولّد الشاحنة المناسبة في نقطة تولد المستودع وأرفق أي مقطورة مطلوبة. استخدم AttachVehicleToTrailer للفيزيا الصحيحة للمقطورات وتنفيذ نظام اقتران يدوي حيث يجب على السائقين الرجوع بمقدمة السيارة إلى المقطورة والضغط على مفتاح لربطها. تضيف هذه العملية اليدوية أسلوب لعب يعتمد على المهارة وتخلق لحظات مرضية عندما ينجح السائق في الرجوع الصعب إلى رصيف تحميل ضيق. تتبع حالة ربط المقطورة بعناية لأن فيزيا GTA للمقطورات قد تفصل المقطورات أثناء الاصطدامات، ويحتاج سكربتك إلى اكتشاف ذلك وإبلاغ السائق:
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)
تتبع تلف وحالة الشحن
تضيف حالة الشحن طبقة ذات معنى للعب في كل تسليم. تتبع صحة الشحنة بناءً على الصدمات، السرعة فوق المطبات، وسلوك القيادة طوال الطريق. عندما يصطدم الشاحنة بأجسام أو مركبات أخرى، احسب شدة الصدمة باستخدام فرق سرعة المركبة وطبق ضررًا نسبيًا على الشحنة. الشحنات الهشة مثل الإلكترونيات أو الزجاج تتعرض لأضرار كبيرة من الصدمات الطفيفة، بينما الشحنات المتينة مثل الفولاذ الإنشائي بالكاد تسجل الصدمات. عرض صحة الشحنة كنسبة مئوية على Agency HUD حتى يتمكن السائقون من رؤية عواقب قيادتهم في الوقت الحقيقي. قلل الدفع النهائي نسبيًا لتلف الشحنة، وحدد حدًا أدنى تحته يفشل التسليم تمامًا لأن الشحنة مدمرة. هذه الآلية تشجع القيادة الحذرة بشكل طبيعي دون تقييد السرعة بشكل مصطنع، مما يتيح للسائقين إجراء حسابات المخاطرة والمكافأة الخاصة بهم حول القيادة السريعة للوفاء بالحد الزمني مقابل القيادة الحذرة للحفاظ على حالة الشحنة.
عرض الملاحة والمسار عبر GPS
توفير نظام GPS متخصص للسائقين يأخذ في الاعتبار حجم المركبة عند حساب الطرق. ترسل نقاط الطريق القياسية في GTA اللاعبين عبر أزقة ضيقة وتحت جسور منخفضة لا يمكن لمقطورة الشاحنة عبورها. تجاوز التنقل الافتراضي بعلامات طريق مخصصة تتبع الطرق المناسبة للشاحنات، تتجنب المنعطفات الضيقة، وتحذر السائقين من العقبات القادمة. عرض الطريق كسلسلة من نقاط التفتيش على الخريطة المصغرة مع مؤشرات المسافة إلى النقطة التالية، وعرض وقت وصول تقديري بناءً على السرعة الحالية. أضف آلية استهلاك الوقود مرتبطة بالمسافة المقطوعة ووزن المركبة بحيث يجب على السائقين التخطيط لتوقفات الوقود في الرحلات الطويلة، مما يخلق نقاط قرار إضافية في الرحلة:
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
محطات الوزن والتفتيش
إضافة محطات وزن على طول الطرق السريعة الرئيسية حيث يجب على سائقي الشاحنات التوقف وفحص حمولتهم. تخلق هذه الآلية نقاط تفاعل طبيعية في الرحلات الطويلة وتفتح فرصًا للعب الأدوار بين سائقي الشاحنات ومفتشي DOT، والتي يمكن أن تكون مدفوعة بواسطة NPC أو يعمل بها لاعبين بوظيفة سلطة النقل. في محطة الوزن، يتم فحص الوزن الإجمالي للشاحنة مقابل الحدود القانونية، التحقق من مطابقة بيان الحمولة لما تم تحميله، وفحص حالة المركبة. تتلقى الشاحنات التي تتجاوز الوزن غرامات تقلل من أرباح التسليم، مما يحفز السائقين على الالتزام بالحدود القانونية. إذا كان لدى خادمك قوة شرطة، امنح الضباط القدرة على إجراء تفتيشات على جانب الطريق مع فحوصات مماثلة، مما يخلق لقاءات إنفاذ قانون عضوية لا تعتمد على الجريمة. يضيف الامتثال لمحطات الوزن طبقة أخرى من الواقعية التي يستمتع بها اللاعبون المكرسون للنقل حقًا لأنها تؤكد التزامهم بالدور.
نظام قافلة متعدد اللاعبين
السماح لعدة سائقي شاحنات بتشكيل قوافل لتوصيلات جماعية تدفع مكافأة لكل سائق مشارك. يقبل قائد القافلة عقد شاحنات متعدد خاص يولد توصيلات مرتبطة تتجه إلى نفس منطقة الوجهة. يشارك أعضاء القافلة قناة راديو للتنسيق، ويرون مواقع بعضهم البعض على الخريطة المصغرة بعلامات قافلة خاصة، ويتلقون مكافأة قرب عند القيادة ضمن مسافة معقولة من بعضهم البعض. يشجع هذا اللعب الاجتماعي ويخلق لحظات بصرية مثيرة عندما تسير صف من الشاحنات على الطريق السريع معًا. نفذ مؤشر تشكيل القافلة الذي يظهر موقع كل عضو في الصف ويبرز أي شخص يتخلف أو يأخذ منعطفًا خاطئًا. يجب أن تكون مكافأة القافلة كبيرة بما يكفي لتحفيز التجمع، عادة من عشرين إلى ثلاثين بالمئة أكثر من الرحلات الفردية، مما يجعل الانتظار للسائقين الآخرين مجديًا بدلاً من المغادرة فورًا بمفردك.
الأداء وتدابير مكافحة الاستغلال
تولد أنظمة الشحن مركبات كبيرة لها تكاليف عرض كبيرة، لذا أدِر دورة حياتها بعناية. احذف الشاحنة والمقطورة فور إتمام أو فشل التسليم بدلاً من تركها على الخريطة. إذا انقطع السائق أثناء التسليم، نظف المركبات المولدة على جانب الخادم وعلّم العقدة كمُهملة. امنع استغلالات النقل الفوري بتتبع موقع الشاحنة على فترات منتظمة والتأكد من أنها تتبع مسارًا معقولًا من نقطة الالتقاط إلى نقطة التسليم، مع تعليم التسليمات التي غطت مسافات مستحيلة بين الفحوصات. حد من قبول العقود لمنع اللاعبين من قبول وإلغاء العقود بسرعة لاختيار الطرق الأعلى أجرًا فقط. خزّن إحصائيات التسليم لكل لاعب للوحة المتصدرين والإنجازات، لكن قم بكتابة قاعدة البيانات على دفعات بجدول زمني بدلاً من الكتابة بعد كل نقطة تفتيش لتقليل حمل قاعدة البيانات خلال ساعات الذروة عندما يكون العديد من السائقين نشطين في نفس الوقت.