ब्लॉग पर वापस
Tutorial10 मिनट पढ़ें

FiveM न्यूज रिपोर्टर सिस्टम: स्क्रिप्ट लाइव टीवी ब्रॉडकास्ट

FiveM में एक कार्यशील समाचार रिपोर्टर नौकरी जोड़ें। लाइव कैमरे, प्रसारण UI, टिप्स और पूरे शहर के रोलप्ले कहानी के लिए सर्वश्रेष्ठ समाचार स्क्रिप्ट।

Agency Scripts

Agency Scripts के संस्थापक और प्रमुख डेवलपर

रोलप्ले में समाचार रिपोर्टर्स की भूमिका

एक न्यूज रिपोर्टर जॉब आपके FiveM सर्वर में एक अनोखी सामाजिक परत जोड़ता है जो कोई अन्य जॉब प्रदान नहीं करता। रिपोर्टर सर्वर घटनाओं के बीच कनेक्टिव टिशू की तरह काम करते हैं, अपराधों का दस्तावेजीकरण करते हैं, खिलाड़ियों का साक्षात्कार लेते हैं, और ऐसी कहानियां प्रसारित करते हैं जो आपके शहर की कथा को आकार देती हैं। अधिकांश जॉब्स जो अलग-थलग काम करते हैं, के विपरीत, रिपोर्टिंग स्वाभाविक रूप से सर्वर के हर फ्रैक्शन के साथ इंटरसेक्ट करती है: पुलिस की पीछा करने वाली घटनाएं ब्रेकिंग न्यूज बन जाती हैं, गैंग संघर्ष जांची जाने वाली कहानियां बन जाते हैं, और सिटी काउंसिल के फैसले संपादकीय लेख बन जाते हैं। यह जैविक क्रॉस-फ्रैक्शन रोलप्ले बनाता है जिसे सर्वर मालिक लगातार प्रोत्साहित करने की कोशिश करते हैं लेकिन केवल मैकेनिक्स के माध्यम से शायद ही कभी प्राप्त करते हैं। एक अच्छा न्यूज सिस्टम रिपोर्टर्स को घटनाओं को कैप्चर करने, सभी खिलाड़ियों के लिए दिखाई देने वाले लेख लिखने, और लाइव रिपोर्ट प्रसारित करने के उपकरण देता है जो मानचित्र के चारों ओर स्क्रीन पर दिखाई देते हैं। जब खिलाड़ी देखते हैं कि उनके कार्य हेडलाइंस बना रहे हैं, तो यह उन्हें यह महसूस कराता है कि उनकी रोलप्ले मायने रखती है और उन्हें अधिक सम्मोहक कहानियां बनाने के लिए प्रोत्साहित करता है।

न्यूज स्टेशन सेटअप और जॉब संरचना

न्यूज स्टेशन वह केंद्र है जहाँ रिपोर्टर क्लॉक इन करते हैं, उपकरणों तक पहुंचते हैं, लेख लिखते हैं, और अपनी टीम के साथ समन्वय करते हैं। अपने कॉन्फ़िगरेशन में स्टेशन का स्थान, उपकरण भंडारण, और प्रसारण स्टूडियो परिभाषित करें। नौकरी पदानुक्रम को इंटर्न, रिपोर्टर, एंकर, और संपादक-इन-चीफ जैसे रोल्स के साथ संरचित करें, प्रत्येक के पास बढ़ती अनुमतियाँ हों। इंटर्न ड्राफ्ट लिख सकते हैं लेकिन प्रकाशन से पहले संपादक की मंजूरी चाहिए। रिपोर्टर लेख प्रकाशित कर सकते हैं और कैमरा उपकरण का उपयोग कर सकते हैं। एंकर लाइव रिपोर्ट के लिए प्रसारण स्टूडियो तक पहुंच प्राप्त करते हैं। संपादक-इन-चीफ टीम का प्रबंधन करता है और हर खिलाड़ी की स्क्रीन पर चलने वाले न्यूज टिकर को नियंत्रित करता है:

Config.NewsStation = {
    label = 'Weazel News',
    jobName = 'reporter',
    location = vector3(-598.97, -929.54, 23.89),
    studioRoom = vector3(-592.12, -924.88, 23.89),
    equipmentLocker = vector3(-601.33, -932.17, 23.89),
    grades = {
        [0] = { name = 'Intern',   canPublish = false, canBroadcast = false },
        [1] = { name = 'Reporter', canPublish = true,  canBroadcast = false },
        [2] = { name = 'Anchor',   canPublish = true,  canBroadcast = true  },
        [3] = { name = 'Editor',   canPublish = true,  canBroadcast = true,
                canManage = true },
    },
    equipment = {
        { item = 'news_camera',     label = 'News Camera' },
        { item = 'news_microphone', label = 'Microphone' },
        { item = 'press_badge',     label = 'Press Badge' },
        { item = 'news_notepad',    label = 'Notepad' },
    },
    vehicles = {
        { model = 'rumpo',  label = 'News Van',    grade = 1 },
        { model = 'frogger', label = 'News Chopper', grade = 2 },
    },
}

न्यूज वैन आवश्यक है क्योंकि यह एक मोबाइल प्रसारण स्टेशन के रूप में काम करता है। इसे छत पर सैटेलाइट डिश प्रॉप से लैस करें और रिपोर्टरों को किसी भी स्थान से लाइव प्रसारण शुरू करने की अनुमति दें जब तक वे वैन के पास हों। हेलीकॉप्टर एंकरों को बड़े पैमाने पर घटनाओं जैसे पुलिस पीछा या शहरव्यापी आपात स्थितियों को कवर करने के लिए हवाई फुटेज क्षमताएं प्रदान करता है। प्रत्येक वाहन को नौकरी ग्रेड द्वारा प्रतिबंधित किया जाना चाहिए ताकि इंटर्न अपने पहले दिन हेलीकॉप्टर न उड़ा सकें।

कैमरा और रिकॉर्डिंग सिस्टम

कैमरा सिस्टम वह मुख्य यांत्रिकी है जो समाचार रिपोर्टिंग को प्रामाणिक महसूस कराता है। जब एक रिपोर्टर समाचार कैमरा आइटम पहनता है, तो रिकॉर्डिंग ओवरले के साथ पहले व्यक्ति के कैमरा दृश्य में स्विच करें जो एक लाल REC संकेतक, एक टाइमर, और बैटरी स्तर दिखाता है। कैमरा को स्क्रॉल व्हील इनपुट का उपयोग करके ज़ूम नियंत्रण का समर्थन करना चाहिए और एक फोटो कैप्चर मोड होना चाहिए जो इन-गेम स्क्रीनशॉट लेता है और इसे एक लेख संलग्नक के रूप में संग्रहीत करता है। GTA के मूल कैमरा सिस्टम का उपयोग करके एक चिकनी हैंडहेल्ड कैमरा अनुभव बनाएं जिसमें हल्की गति की झुकाव हो जो फुटेज को प्राकृतिक दिखाए न कि पूरी तरह से स्थिर:

local isRecording = false
local recordingCam = nil
local recordTimer = 0

function StartCamera()
    if isRecording then return end
    isRecording = true

    local playerPed = PlayerPedId()
    recordingCam = CreateCam('DEFAULT_SCRIPTED_CAMERA', true)

    -- Position camera at player's head height
    local headBone = GetPedBoneCoords(playerPed, 31086, 0.0, 0.0, 0.0)
    SetCamCoord(recordingCam, headBone.x, headBone.y, headBone.z)
    SetCamRot(recordingCam, GetEntityRotation(playerPed, 2))
    SetCamFov(recordingCam, 50.0)
    SetCamActive(recordingCam, true)
    RenderScriptCams(true, true, 500, true, false)

    -- Show recording overlay via NUI
    SendNUIMessage({
        action = 'showRecordingOverlay',
        stationName = 'WEAZEL NEWS',
        reporterName = GetPlayerName(PlayerId())
    })

    -- Camera control thread
    CreateThread(function()
        local currentFov = 50.0
        while isRecording do
            -- Follow player head position
            local head = GetPedBoneCoords(playerPed, 31086, 0.0, 0.0, 0.0)
            SetCamCoord(recordingCam, head.x, head.y, head.z)

            -- Mouse look controls
            local pitch = GetDisabledControlNormal(0, 2) * -5.0
            local yaw = GetDisabledControlNormal(0, 1) * -8.0
            local rot = GetCamRot(recordingCam, 2)
            SetCamRot(recordingCam, rot.x + pitch, rot.y, rot.z + yaw, 2)

            -- Zoom with scroll wheel
            if IsDisabledControlPressed(0, 241) then
                currentFov = math.max(15.0, currentFov - 2.0)
            elseif IsDisabledControlPressed(0, 242) then
                currentFov = math.min(80.0, currentFov + 2.0)
            end
            SetCamFov(recordingCam, currentFov)

            -- Update timer
            recordTimer = recordTimer + 1
            SendNUIMessage({
                action = 'updateTimer',
                time = math.floor(recordTimer / 60)
            })

            DisableAllControlActions(0)
            EnableControlAction(0, 249, true) -- Allow push to talk
            Wait(0)
        end
    end)
end

NUI के माध्यम से प्रदर्शित रिकॉर्डिंग ओवरले को एक पेशेवर समाचार कैमरा व्यूफ़ाइंडर की नकल करनी चाहिए जिसमें कोने के ब्रैकेट शॉट को फ्रेम करते हैं, स्टेशन लोगो वॉटरमार्क, और रिपोर्टर का नाम दिखाने वाला स्क्रॉलिंग लोअर-थर्ड बार हो। जब रिपोर्टर रिकॉर्डिंग बंद करता है, तो ओवरले को फीका करें और नियमित गेमप्ले कैमरा पर सुचारू रूप से वापस संक्रमण करें। रिकॉर्डिंग अवधि और स्थान डेटा संग्रहीत करें ताकि संबंधित लेख लिखते समय इसका संदर्भ लिया जा सके।

लेख लेखन और प्रकाशन

रिपोर्टरों को एक पूर्ण लेख संपादक दें जो न्यूज स्टेशन से या उनके नोटपैड आइटम के माध्यम से क्षेत्र में सुलभ हो। संपादक को एक NUI-आधारित रिच टेक्स्ट इंटरफ़ेस का उपयोग करना चाहिए जहां रिपोर्टर एक हेडलाइन टाइप करें, लेख का मुख्य भाग लिखें, अपराध, राजनीति, खेल, या मनोरंजन जैसी श्रेणी चुनें, और कैमरा सिस्टम से ली गई कोई भी तस्वीरें संलग्न करें। प्रकाशित लेख इन-गेम समाचारपत्र में दिखाई देते हैं जो शहर में रखे गए समाचारपत्र बॉक्स प्रॉप्स और फोन ऐप्स से सुलभ होते हैं यदि आपका सर्वर फोन सिस्टम का उपयोग करता है। लेखों को डेटाबेस में टाइमस्टैम्प, लेखक जानकारी, और व्यू काउंट के साथ स्टोर करें ताकि यह ट्रैक किया जा सके कि कौन सी कहानियां सबसे अधिक खिलाड़ी सहभागिता उत्पन्न करती हैं:

RegisterNetEvent('news:server:publishArticle', function(articleData)
    local src = source
    local Player = QBCore.Functions.GetPlayer(src)

    -- Verify job and permissions
    if Player.PlayerData.job.name ~= 'reporter' then return end
    local grade = Config.NewsStation.grades[Player.PlayerData.job.grade.level]
    if not grade or not grade.canPublish then
        TriggerClientEvent('QBCore:Notify', src,
            'Your rank cannot publish articles', 'error')
        return
    end

    -- Sanitize input
    local headline = articleData.headline:sub(1, 120)
    local body = articleData.body:sub(1, 5000)
    local category = articleData.category or 'general'

    -- Insert into database
    local articleId = MySQL.insert.await(
        'INSERT INTO news_articles (author_id, author_name, headline, body, category, created_at) VALUES (?, ?, ?, ?, ?, NOW())',
        {Player.PlayerData.citizenid, Player.PlayerData.charinfo.firstname ..
         ' ' .. Player.PlayerData.charinfo.lastname,
         headline, body, category}
    )

    -- Broadcast notification to all players
    TriggerClientEvent('news:client:newArticle', -1, {
        id = articleId,
        headline = headline,
        category = category,
        author = Player.PlayerData.charinfo.firstname .. ' ' ..
                 Player.PlayerData.charinfo.lastname
    })

    -- Update news ticker
    TriggerClientEvent('news:client:updateTicker', -1,
        'BREAKING: ' .. headline)

    TriggerClientEvent('QBCore:Notify', src,
        'Article published successfully!', 'success')
end)

लाइव ब्रॉडकास्ट सिस्टम

लाइव प्रसारण एक न्यूज़ रिपोर्टर सिस्टम की सबसे रोमांचक विशेषता है क्योंकि वे सर्वर-व्यापी घटनाएं बनाते हैं जिन्हें हर खिलाड़ी वास्तविक समय में देख सकता है। जब एक एंकर स्टूडियो से या न्यूज़ वैन के पास से लाइव प्रसारण शुरू करता है, तो उनकी आवाज़ वॉइस चैट के माध्यम से सर्वर पर हर खिलाड़ी तक एक कॉन्फ़िगर करने योग्य सीमा के भीतर या आपकी पसंद के अनुसार सर्वर-व्यापी पहुंचनी चाहिए। हर खिलाड़ी की स्क्रीन पर स्टेशन का लोगो, एंकर का नाम, और एक लाइव संकेतक दिखाने वाला प्रसारण बैनर प्रदर्शित करें। प्रसारण वैकल्पिक रूप से इन-गेम टीवी स्क्रीन पर कैमरा फीड दिखा सकता है जो नक्शे के अंदरूनी हिस्सों में रेंडर टारगेट्स का उपयोग करके रखे गए हैं। स्पैम रोकने के लिए प्रसारण कूलडाउन लागू करें और हर इंटर्न को उनके पहले दिन लाइव जाने से रोकने के लिए एंकर भूमिका आवश्यक करें। प्रसारण प्रणाली को किनारे के मामलों को सहजता से संभालना चाहिए: यदि एंकर प्रसारण के बीच में डिस्कनेक्ट हो जाता है, तो स्वचालित रूप से प्रसारण समाप्त करें और तकनीकी कठिनाइयों का संदेश दिखाएं। यदि एंकर फील्ड प्रसारण के दौरान न्यूज़ वैन से बहुत दूर चला जाता है, तो उन्हें चेतावनी दें कि वे सिग्नल खो रहे हैं और यदि वे उचित दूरी के भीतर वापस नहीं आते हैं तो प्रसारण समाप्त करें।

न्यूज टिकर और सूचनाएं

न्यूज टिकर एक स्थायी UI एलिमेंट है जो हर खिलाड़ी की स्क्रीन के नीचे शीर्षक स्क्रॉल करता है, केबल न्यूज चैनलों के समान। इसे एक NUI लेयर के रूप में लागू करें जो सबसे हाल के प्रकाशित लेखों से पढ़ता है और टाइमर पर शीर्षकों को घुमाता है। संपादक-इन-चीफ को अनुमति दें कि वे आपातकालीन ब्रेकिंग न्यूज अलर्ट भेज सकें जो नियमित टिकर को लाल हाइलाइटेड बैनर और अलर्ट साउंड के साथ ओवरराइड कर दें। टिकर को व्यक्तिगत खिलाड़ियों द्वारा बंद किया जा सकता है जो इसे विचलित करने वाला पाते हैं, फोन या सेटिंग्स मेनू के माध्यम से इसे ऑन या ऑफ करने का विकल्प होना चाहिए। सर्वर साइड पर टिकर अपडेट्स को रेट-लिमिट करें ताकि दुरुपयोग न हो, और टिकर कतार को पांच सबसे हाल के शीर्षकों तक सीमित रखें ताकि खिलाड़ियों को पुरानी खबरों से अभिभूत न किया जाए। जब कोई खिलाड़ी टिकर शीर्षक पर क्लिक करता है, तो पूरा लेख NUI समाचार पत्र दर्शक में खोलें ताकि वे पूरी कहानी पढ़ सकें बिना भौतिक समाचार पत्र बॉक्स पर जाए।

साक्षात्कार और प्रेस कॉन्फ्रेंस मैकेनिक्स

साक्षात्कार करने के लिए समर्पित मैकेनिक्स जोड़ें जो सामान्य बातचीत से आगे जाते हैं। जब एक रिपोर्टर माइक्रोफोन आइटम के साथ दूसरे खिलाड़ी को लक्षित करता है, तो एक साक्षात्कार अनुरोध भेजें जिसे लक्ष्य स्वीकार या अस्वीकार कर सकता है। स्वीकार किए गए साक्षात्कार एक दृश्य प्रेस इंटरैक्शन बनाते हैं जहां दोनों खिलाड़ी एक-दूसरे का सामना करते हैं, रिपोर्टर माइक्रोफोन प्रॉप पकड़ता है, और आसपास के खिलाड़ी उनके सिर के ऊपर एक प्रेस संकेतक देख सकते हैं। साक्षात्कार के दौरान कही गई हर बात वैकल्पिक रूप से रिपोर्टर के नोटपैड से जुड़ी ट्रांसक्रिप्ट के रूप में लॉग की जा सकती है बाद में लेख लेखन के लिए। प्रेस कॉन्फ्रेंस के लिए, सिटी हॉल, पुलिस स्टेशन और अस्पताल में निर्दिष्ट पोडियम स्थान बनाएं जहां अधिकारी एक साथ कई रिपोर्टरों को संबोधित कर सकते हैं। पोडियम स्थान वक्ता की आवाज़ की सीमा बढ़ाता है और उनके नाम और पद को एक लोअर-थर्ड ग्राफिक पर दिखाता है जो सभी आसपास के खिलाड़ियों को दिखाई देता है, एक प्रामाणिक प्रेस इवेंट वातावरण बनाता है जो राजनीतिक और संस्थागत रोलप्ले को प्रोत्साहित करता है।

प्रदर्शन और एकीकरण सुझाव

न्यूज सिस्टम हर खिलाड़ी को टिकर और प्रसारण सुविधाओं के माध्यम से छूता है, इसलिए प्रदर्शन अनुकूलन महत्वपूर्ण है। न्यूज टिकर को एक हल्के NUI एलिमेंट के रूप में चलाएं जो हर फ्रेम के बजाय लंबे अंतराल पर अपडेट होता है। प्रकाशित लेखों को क्लाइंट साइड पर कैश करें और केवल तब अपडेट का अनुरोध करें जब खिलाड़ी समाचार पत्र दर्शक खोले या नया लेख सूचना आए। लाइव प्रसारण के लिए, ऑडियो को मौजूदा वॉइस चैट सिस्टम के माध्यम से रूट करें ताकि अलग ऑडियो चैनल बनाने से बैंडविड्थ ओवरहेड से बचा जा सके। डेटाबेस में संग्रहित लेखों की संख्या को सीमित करें, तीस दिन से पुराने प्रविष्टियों को अलग तालिका में संग्रहित करें जिसे खिलाड़ी समाचार पत्र संग्रह मेनू के माध्यम से एक्सेस कर सकते हैं। जब रिपोर्टर जॉब बदलता है, रिसोर्स रिस्टार्ट होता है, या खिलाड़ी डिस्कनेक्ट होता है तो कैमरा एंटिटीज़ और NUI ओवरले को आक्रामक रूप से साफ करें ताकि विजुअल आर्टिफैक्ट्स न रहें। अपने फोन सिस्टम के साथ एकीकरण पर विचार करें ताकि खिलाड़ी सीधे अपने फोन से समाचार लेख पढ़ सकें, विशिष्ट श्रेणियों की सदस्यता ले सकें, और अपने रुचि के क्षेत्रों में ब्रेकिंग न्यूज के लिए पुश नोटिफिकेशन प्राप्त कर सकें।

शुरू करने के लिए तैयार?

हमारी शॉप से स्क्रिप्ट लें, या सपोर्ट, अपडेट और आगे आने वाली चीज़ों की झलक के लिए Discord से जुड़ें।