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

FiveM नाव मछली पकड़ने का सिस्टम: यथार्थवादी महासागर नौकरियां स्क्रिप्ट करें

FiveM में एक पूर्ण नाव मछली पकड़ने का सिस्टम बनाएं। स्थान, पकड़ लॉजिक, बिक्री श्रृंखलाएं, नाव किराए और आपके तटीय रोलप्ले को सशक्त करने के लिए शीर्ष स्क्रिप्ट्स।

Agency Scripts

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

गेमप्ले सिस्टम के रूप में डीप सी फिशिंग

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

बोट कॉन्फ़िगरेशन और फ्लीट प्रबंधन

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

Config.Boats = {
    ['dinghy'] = {
        label = 'Fishing Dinghy',
        model = 'dinghy',
        price = 15000,
        fuelCapacity = 60,
        storageSlots = 10,
        maxWeight = 200,
        rodHolders = 1,
        maxCrew = 2,
        durability = 100,
        speed = 'slow',
        fishingZones = { 'nearshore' },
    },
    ['marquis'] = {
        label = 'Sport Fisher',
        model = 'marquis',
        price = 85000,
        fuelCapacity = 200,
        storageSlots = 30,
        maxWeight = 800,
        rodHolders = 4,
        maxCrew = 6,
        durability = 250,
        speed = 'medium',
        fishingZones = { 'nearshore', 'offshore', 'deep_sea' },
    },
    ['tug'] = {
        label = 'Commercial Trawler',
        model = 'tug',
        price = 250000,
        fuelCapacity = 500,
        storageSlots = 60,
        maxWeight = 3000,
        rodHolders = 6,
        maxCrew = 8,
        durability = 500,
        speed = 'slow',
        fishingZones = { 'nearshore', 'offshore', 'deep_sea', 'abyssal' },
    },
}

Config.FishingZones = {
    ['nearshore'] = {
        areas = {
            { center = vector3(-1850.0, -1250.0, 0.0), radius = 300.0 },
            { center = vector3(-3420.0, 970.0, 0.0), radius = 400.0 },
        },
        fish = {
            { item = 'bass',     weight = { 1, 8 },   chance = 35, price = 15 },
            { item = 'mackerel', weight = { 0.5, 4 },  chance = 40, price = 10 },
            { item = 'snapper',  weight = { 2, 12 },   chance = 20, price = 25 },
            { item = 'grouper',  weight = { 5, 25 },   chance = 5,  price = 40 },
        },
    },
    ['deep_sea'] = {
        areas = {
            { center = vector3(-4200.0, -800.0, 0.0), radius = 600.0 },
            { center = vector3(-3800.0, 2200.0, 0.0), radius = 500.0 },
        },
        fish = {
            { item = 'tuna',      weight = { 20, 120 },  chance = 25, price = 80 },
            { item = 'swordfish', weight = { 30, 200 },  chance = 15, price = 120 },
            { item = 'marlin',    weight = { 50, 350 },  chance = 8,  price = 200 },
            { item = 'shark',     weight = { 80, 500 },  chance = 2,  price = 500 },
        },
    },
}

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

सोनार और मछली खोजने की यांत्रिकी

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

मछली पकड़ने का मिनीगेम और लड़ाई तंत्र

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

local fishFight = {
    active = false,
    tension = 50,       -- 0-100, snaps at 100
    progress = 0,       -- 0-100, fish landed at 100
    fishStrength = 0,
    fishBehavior = 'steady',
    reeling = false,
}

function StartFishFight(fishData)
    fishFight.active = true
    fishFight.tension = 30
    fishFight.progress = 0
    fishFight.fishStrength = fishData.weight * 0.5

    SendNUIMessage({
        action = 'showFishFight',
        species = fishData.item,
        estimatedWeight = fishData.weight,
    })

    CreateThread(function()
        while fishFight.active do
            -- Fish behavior changes randomly
            local behaviorRoll = math.random(100)
            if behaviorRoll < 15 then
                fishFight.fishBehavior = 'surge'    -- strong pull
            elseif behaviorRoll < 40 then
                fishFight.fishBehavior = 'resist'   -- moderate pull
            else
                fishFight.fishBehavior = 'steady'   -- light pull
            end

            -- Apply fish force
            local force = fishFight.fishStrength * 0.02
            if fishFight.fishBehavior == 'surge' then
                force = force * 3.0
                fishFight.progress = math.max(0, fishFight.progress - 2)
            elseif fishFight.fishBehavior == 'resist' then
                force = force * 1.5
            end

            -- Reeling input
            if IsControlPressed(0, 38) then -- E key
                fishFight.reeling = true
                fishFight.progress = fishFight.progress + 0.8
                fishFight.tension = fishFight.tension + force + 1.5
            else
                fishFight.reeling = false
                fishFight.tension = math.max(0, fishFight.tension - 3)
            end

            -- Check win/lose conditions
            if fishFight.tension >= 100 then
                EndFishFight(false, 'Line snapped!')
                return
            end

            if fishFight.progress >= 100 then
                EndFishFight(true, fishData)
                return
            end

            -- Update HUD
            SendNUIMessage({
                action = 'updateFishFight',
                tension = fishFight.tension,
                progress = fishFight.progress,
                behavior = fishFight.fishBehavior,
            })

            Wait(100)
        end
    end)
end

Weather and Ocean Conditions

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

मछली बाजार और अर्थव्यवस्था एकीकरण

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

प्रदर्शन और एंटिटी प्रबंधन

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

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

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