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

FiveM डकैती और हीस्ट सिस्टम: बैंक, स्टोर और वॉल्ट

FiveM में डकैती और हीस्ट के लिए स्क्रिप्ट। Fleeca, Paleto, ज्वेलरी स्टोर्स, पुलिस और कठोर रोलप्ले सर्वरों के लिए सर्वश्रेष्ठ हीस्ट स्क्रिप्ट।

Agency Scripts

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

डकैती सिस्टम वास्तुकला अवलोकन

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

डकैती स्थानों और स्तरों को कॉन्फ़िगर करना

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

Config.Robberies = {
    ['store_1'] = {
        label = 'LTD Gasoline - Davis',
        type = 'store',
        coords = vector3(-47.02, -1757.23, 29.42),
        register = vector3(-43.43, -1748.60, 29.42),
        tier = 1,
        cooldown = 1800,  -- 30 minutes
        minPolice = 2,
        requiredItems = {'weapon_pistol'},
        reward = {min = 2500, max = 6000, type = 'cash'},
        securityLayers = {
            {type = 'intimidate', time = 30},
            {type = 'grab_cash', time = 15},
        },
    },
    ['fleeca_legion'] = {
        label = 'Fleeca Bank - Legion Square',
        type = 'bank',
        coords = vector3(149.73, -1042.65, 29.37),
        vault = vector3(144.87, -1044.16, 29.37),
        tier = 2,
        cooldown = 7200,  -- 2 hours
        minPolice = 4,
        requiredItems = {'electronickit', 'thermite'},
        reward = {min = 45000, max = 90000, type = 'markedbills'},
        securityLayers = {
            {type = 'hack', difficulty = 'medium', time = 25},
            {type = 'thermite', time = 10},
            {type = 'drill', time = 40},
        },
    },
    ['pacific_standard'] = {
        label = 'Pacific Standard Bank',
        type = 'vault',
        coords = vector3(255.85, 225.60, 101.88),
        vault = vector3(262.20, 222.10, 101.68),
        tier = 3,
        cooldown = 14400,  -- 4 hours
        minPolice = 6,
        requiredItems = {'electronickit', 'thermite', 'advancedlaptop', 'duffelbag'},
        reward = {min = 250000, max = 500000, type = 'markedbills'},
        securityLayers = {
            {type = 'hack', difficulty = 'hard', time = 20},
            {type = 'hack', difficulty = 'hard', time = 20},
            {type = 'thermite', time = 8},
            {type = 'drill', time = 60},
            {type = 'hack', difficulty = 'expert', time = 15},
        },
    },
}

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

सर्वर-साइड स्टेट मशीन

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

local RobberyState = {}

function InitializeRobbery(robberyId)
    RobberyState[robberyId] = {
        status = 'idle',      -- idle | active | cooldown | locked
        participants = {},
        currentLayer = 0,
        startedAt = 0,
        cooldownUntil = 0,
    }
end

RegisterNetEvent('robbery:server:startRobbery', function(robberyId)
    local src = source
    local Player = QBCore.Functions.GetPlayer(src)
    if not Player then return end

    local config = Config.Robberies[robberyId]
    local state = RobberyState[robberyId]
    if not config or not state then return end

    -- Validate state
    if state.status ~= 'idle' then
        TriggerClientEvent('QBCore:Notify', src, 'This location is not available', 'error')
        return
    end

    -- Check cooldown
    if os.time() < state.cooldownUntil then
        TriggerClientEvent('QBCore:Notify', src, 'Location on cooldown', 'error')
        return
    end

    -- Check minimum police online
    local policeCount = GetOnlinePolicCount()
    if policeCount < config.minPolice then
        TriggerClientEvent('QBCore:Notify', src, 'Not enough police online', 'error')
        return
    end

    -- Check required items
    for _, item in ipairs(config.requiredItems) do
        if not Player.Functions.GetItemByName(item) then
            TriggerClientEvent('QBCore:Notify', src, 'Missing required equipment', 'error')
            return
        end
    end

    -- Start robbery
    state.status = 'active'
    state.participants = {src}
    state.currentLayer = 1
    state.startedAt = os.time()

    -- Alert police dispatch
    TriggerEvent('dispatch:server:notify', {
        type = 'robbery',
        coords = config.coords,
        message = 'Silent alarm triggered at ' .. config.label,
        tier = config.tier,
    })

    -- Send first security layer to client
    TriggerClientEvent('robbery:client:startLayer', src, robberyId, config.securityLayers[1])
end)

स्टेट मशीन को सक्रिय डकैती के दौरान सर्वर पुनः आरंभ जैसे किनारे के मामलों को भी संभालना चाहिए। जब सर्वर शुरू होता है, तो सभी डकैती की स्थिति को idle पर रीसेट करें और किसी भी सक्रिय प्रतिभागी को साफ़ करें। कूलडाउन टाइमस्टैम्प को एक स्थायी तालिका में संग्रहीत करें ताकि वे पुनः आरंभ के बाद भी जीवित रहें।

मिनीगेम इंटीग्रेशन

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

-- Client-side minigame dispatcher
function StartMinigame(layerType, difficulty, callback)
    if layerType == 'hack' then
        local config = HackDifficulty[difficulty]
        exports['ps-ui']:Circle(function(success)
            callback(success)
        end, config.circles, config.speed)

    elseif layerType == 'thermite' then
        exports['ps-ui']:Thermite(function(success)
            callback(success)
        end, 10, 5, 3)

    elseif layerType == 'drill' then
        exports['drilling']:StartDrill(function(success)
            callback(success)
        end)

    elseif layerType == 'intimidate' then
        -- Store clerk intimidation: aim weapon at NPC
        StartClerkIntimidation(function(success)
            callback(success)
        end)
    end
end

RegisterNetEvent('robbery:client:startLayer', function(robberyId, layer)
    local ped = PlayerPedId()

    -- Play appropriate animation
    if layer.type == 'hack' then
        PlayHackingAnimation(ped)
    elseif layer.type == 'drill' then
        PlayDrillingAnimation(ped)
    end

    StartMinigame(layer.type, layer.difficulty, function(success)
        ClearPedTasks(ped)
        TriggerServerEvent('robbery:server:layerResult', robberyId, success)
    end)
end)

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

पुलिस डिस्पैच और प्रतिक्रिया इंटीग्रेशन

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

लूट वितरण और मनी लॉन्ड्रिंग

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

RegisterNetEvent('robbery:server:distributeLoot', function(robberyId)
    local src = source
    local config = Config.Robberies[robberyId]
    local state = RobberyState[robberyId]
    if not config or not state then return end

    if state.status ~= 'active' then return end

    local rewardAmount = math.random(config.reward.min, config.reward.max)
    local participants = state.participants
    local perPlayer = math.floor(rewardAmount / #participants)

    for _, playerId in ipairs(participants) do
        local Player = QBCore.Functions.GetPlayer(playerId)
        if Player then
            if config.reward.type == 'markedbills' then
                local billStacks = math.ceil(perPlayer / 5000)
                for i = 1, billStacks do
                    local amount = math.min(5000, perPlayer - ((i - 1) * 5000))
                    Player.Functions.AddItem('markedbills', 1, nil, {
                        worth = amount,
                        source = config.label,
                    })
                end
            elseif config.reward.type == 'cash' then
                Player.Functions.AddMoney('cash', perPlayer, 'robbery-' .. robberyId)
            end
            TriggerClientEvent('inventory:client:ItemBox', playerId, QBCore.Shared.Items['markedbills'], 'add')
        end
    end

    -- Set cooldown
    state.status = 'cooldown'
    state.cooldownUntil = os.time() + config.cooldown
    state.participants = {}

    -- Log the robbery for admin review
    LogRobbery(robberyId, participants, rewardAmount)
end)

एंटी-एक्सप्लॉइट और कूलडाउन प्रबंधन

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

एस्केप रूट्स और डायनामिक इवेंट्स

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

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

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