العودة إلى المدونة
Guide8 دقيقة قراءة

نظام وظائف الشحن 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 أو يعمل بها لاعبين بوظيفة سلطة النقل. في محطة الوزن، يتم فحص الوزن الإجمالي للشاحنة مقابل الحدود القانونية، التحقق من مطابقة بيان الحمولة لما تم تحميله، وفحص حالة المركبة. تتلقى الشاحنات التي تتجاوز الوزن غرامات تقلل من أرباح التسليم، مما يحفز السائقين على الالتزام بالحدود القانونية. إذا كان لدى خادمك قوة شرطة، امنح الضباط القدرة على إجراء تفتيشات على جانب الطريق مع فحوصات مماثلة، مما يخلق لقاءات إنفاذ قانون عضوية لا تعتمد على الجريمة. يضيف الامتثال لمحطات الوزن طبقة أخرى من الواقعية التي يستمتع بها اللاعبون المكرسون للنقل حقًا لأنها تؤكد التزامهم بالدور.

نظام قافلة متعدد اللاعبين

السماح لعدة سائقي شاحنات بتشكيل قوافل لتوصيلات جماعية تدفع مكافأة لكل سائق مشارك. يقبل قائد القافلة عقد شاحنات متعدد خاص يولد توصيلات مرتبطة تتجه إلى نفس منطقة الوجهة. يشارك أعضاء القافلة قناة راديو للتنسيق، ويرون مواقع بعضهم البعض على الخريطة المصغرة بعلامات قافلة خاصة، ويتلقون مكافأة قرب عند القيادة ضمن مسافة معقولة من بعضهم البعض. يشجع هذا اللعب الاجتماعي ويخلق لحظات بصرية مثيرة عندما تسير صف من الشاحنات على الطريق السريع معًا. نفذ مؤشر تشكيل القافلة الذي يظهر موقع كل عضو في الصف ويبرز أي شخص يتخلف أو يأخذ منعطفًا خاطئًا. يجب أن تكون مكافأة القافلة كبيرة بما يكفي لتحفيز التجمع، عادة من عشرين إلى ثلاثين بالمئة أكثر من الرحلات الفردية، مما يجعل الانتظار للسائقين الآخرين مجديًا بدلاً من المغادرة فورًا بمفردك.

الأداء وتدابير مكافحة الاستغلال

تولد أنظمة الشحن مركبات كبيرة لها تكاليف عرض كبيرة، لذا أدِر دورة حياتها بعناية. احذف الشاحنة والمقطورة فور إتمام أو فشل التسليم بدلاً من تركها على الخريطة. إذا انقطع السائق أثناء التسليم، نظف المركبات المولدة على جانب الخادم وعلّم العقدة كمُهملة. امنع استغلالات النقل الفوري بتتبع موقع الشاحنة على فترات منتظمة والتأكد من أنها تتبع مسارًا معقولًا من نقطة الالتقاط إلى نقطة التسليم، مع تعليم التسليمات التي غطت مسافات مستحيلة بين الفحوصات. حد من قبول العقود لمنع اللاعبين من قبول وإلغاء العقود بسرعة لاختيار الطرق الأعلى أجرًا فقط. خزّن إحصائيات التسليم لكل لاعب للوحة المتصدرين والإنجازات، لكن قم بكتابة قاعدة البيانات على دفعات بجدول زمني بدلاً من الكتابة بعد كل نقطة تفتيش لتقليل حمل قاعدة البيانات خلال ساعات الذروة عندما يكون العديد من السائقين نشطين في نفس الوقت.

جاهز للبدء؟

احصل على السكربتات من متجرنا، أو انضم إلى Discord للدعم والتحديثات ونظرة على ما هو قادم.