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

FiveM अस्पताल और EMS प्रणाली: यथार्थवादी चिकित्सा नौकरियां स्क्रिप्ट करें

FiveM के लिए एक पूर्ण अस्पताल और EMS लूप डिजाइन करें। पुनर्जीवन, रोगी चेक-इन, फार्मेसी, एम्बुलेंस लिंक और भूमिका निभाने के लिए सर्वश्रेष्ठ चिकित्सा स्क्रिप्ट।

Agency Scripts

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

अस्पताल प्रणाली वास्तुकला

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

चोट प्रकार प्रणाली

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

Config.InjuryTypes = {
    gunshot = {
        label = 'Gunshot Wound',
        severity = { min = 60, max = 100 },
        bleedRate = 2.5,
        treatments = {'clean_wound', 'remove_bullet', 'stitch', 'bandage'},
        requiredItems = {'tweezers', 'suture_kit', 'bandage'},
        healTime = 120,
    },
    stabbing = {
        label = 'Stab Wound',
        severity = { min = 40, max = 80 },
        bleedRate = 1.8,
        treatments = {'clean_wound', 'stitch', 'bandage'},
        requiredItems = {'suture_kit', 'bandage'},
        healTime = 90,
    },
    blunt = {
        label = 'Blunt Force Trauma',
        severity = { min = 20, max = 60 },
        bleedRate = 0.5,
        treatments = {'examine', 'ice_pack', 'painkillers'},
        requiredItems = {'ice_pack', 'painkillers'},
        healTime = 60,
    },
    burn = {
        label = 'Burn Injury',
        severity = { min = 30, max = 90 },
        bleedRate = 0,
        treatments = {'cool_burn', 'apply_cream', 'bandage'},
        requiredItems = {'burn_cream', 'bandage'},
        healTime = 100,
    },
    fracture = {
        label = 'Bone Fracture',
        severity = { min = 50, max = 70 },
        bleedRate = 0,
        treatments = {'x_ray', 'set_bone', 'apply_cast'},
        requiredItems = {'splint', 'cast_material'},
        healTime = 180,
    },
    vehicle_crash = {
        label = 'Vehicle Collision Injury',
        severity = { min = 30, max = 95 },
        bleedRate = 1.0,
        treatments = {'examine', 'clean_wound', 'stitch', 'bandage', 'painkillers'},
        requiredItems = {'suture_kit', 'bandage', 'painkillers'},
        healTime = 110,
    },
}

Config.BodyRegions = {
    'head', 'torso', 'left_arm', 'right_arm', 'left_leg', 'right_leg'
}

-- Severity multipliers per body region
Config.RegionMultipliers = {
    head = 1.5,
    torso = 1.3,
    left_arm = 0.8,
    right_arm = 0.8,
    left_leg = 0.9,
    right_leg = 0.9,
}

EMS डिस्पैच और फील्ड रिस्पांस

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

-- Server-side dispatch handler
local activeDispatches = {}

RegisterNetEvent('hospital:server:call911', function(description)
    local src = source
    local Player = QBCore.Functions.GetPlayer(src)
    if not Player then return end

    local ped = GetPlayerPed(src)
    local coords = GetEntityCoords(ped)
    local injuries = Player.Functions.GetMetaData('injuries') or {}

    -- Determine priority from injury severity
    local maxSeverity = 0
    for _, injury in ipairs(injuries) do
        if injury.severity > maxSeverity then
            maxSeverity = injury.severity
        end
    end

    local priority = maxSeverity >= 80 and 'CRITICAL' or maxSeverity >= 50 and 'URGENT' or 'STANDARD'

    local dispatch = {
        id = #activeDispatches + 1,
        callerId = src,
        citizenid = Player.PlayerData.citizenid,
        callerName = Player.PlayerData.charinfo.firstname .. ' ' .. Player.PlayerData.charinfo.lastname,
        coords = { x = coords.x, y = coords.y, z = coords.z },
        description = description or GenerateInjuryDescription(injuries),
        priority = priority,
        injuries = injuries,
        timestamp = os.time(),
        status = 'pending',
        responderId = nil,
    }

    table.insert(activeDispatches, dispatch)

    -- Notify all on-duty EMS
    local emsPlayers = QBCore.Functions.GetQBPlayers()
    for _, emsPlayer in pairs(emsPlayers) do
        if emsPlayer.PlayerData.job.name == 'ambulance' and emsPlayer.PlayerData.job.onduty then
            TriggerClientEvent('hospital:client:newDispatch', emsPlayer.PlayerData.source, dispatch)
        end
    end
end)

RegisterNetEvent('hospital:server:acceptDispatch', function(dispatchId)
    local src = source
    local Player = QBCore.Functions.GetPlayer(src)
    if not Player or Player.PlayerData.job.name ~= 'ambulance' then return end

    for i, dispatch in ipairs(activeDispatches) do
        if dispatch.id == dispatchId and dispatch.status == 'pending' then
            dispatch.status = 'responding'
            dispatch.responderId = src
            dispatch.responseTime = os.time()

            -- Notify caller
            TriggerClientEvent('QBCore:Notify', dispatch.callerId, 'EMS is on the way!', 'success')
            -- Set GPS blip for responder
            TriggerClientEvent('hospital:client:setDispatchGPS', src, dispatch.coords)
            break
        end
    end
end)

अस्पताल चेक-इन और उपचार UI

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

ट्रीटमेंट वर्कफ़्लो

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

RegisterNetEvent('hospital:server:treatInjury', function(patientId, injuryIndex, treatmentStep)
    local src = source
    local Doctor = QBCore.Functions.GetPlayer(src)
    local Patient = QBCore.Functions.GetPlayer(patientId)

    if not Doctor or not Patient then return end
    if Doctor.PlayerData.job.name ~= 'ambulance' or not Doctor.PlayerData.job.onduty then
        TriggerClientEvent('QBCore:Notify', src, 'You must be on duty', 'error')
        return
    end

    local injuries = Patient.Functions.GetMetaData('injuries') or {}
    local injury = injuries[injuryIndex]
    if not injury then return end

    local injuryConfig = Config.InjuryTypes[injury.type]
    if not injuryConfig then return end

    -- Validate treatment step order
    local expectedStep = injury.currentStep or 1
    if treatmentStep ~= expectedStep then
        TriggerClientEvent('QBCore:Notify', src, 'Complete previous treatment steps first', 'error')
        return
    end

    local stepName = injuryConfig.treatments[treatmentStep]
    if not stepName then return end

    -- Check required item
    local requiredItem = Config.TreatmentItems[stepName]
    if requiredItem then
        local hasItem = Doctor.Functions.GetItemByName(requiredItem.name)
        if not hasItem or hasItem.amount < 1 then
            TriggerClientEvent('QBCore:Notify', src, 'Missing: ' .. requiredItem.label, 'error')
            return
        end
        Doctor.Functions.RemoveItem(requiredItem.name, 1)
    end

    -- Apply treatment
    injury.currentStep = treatmentStep + 1
    injury.treated = treatmentStep >= #injuryConfig.treatments

    if injury.treated then
        injury.bleedRate = 0
        injury.healStartTime = os.time()
    end

    injuries[injuryIndex] = injury
    Patient.Functions.SetMetaData('injuries', injuries)

    -- Notify both parties
    TriggerClientEvent('QBCore:Notify', src, 'Treatment step complete: ' .. stepName, 'success')
    TriggerClientEvent('QBCore:Notify', patientId, 'You received treatment: ' .. stepName, 'success')
    TriggerClientEvent('hospital:client:updateInjuries', patientId, injuries)
end)

ऑन-ड्यूटी और ऑफ-ड्यूटी सिस्टम

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

मेडिकल बिलिंग सिस्टम

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

एम्बुलेंस वाहन और उपकरण

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

एकीकरण और जीवन की गुणवत्ता

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

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

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