FiveM रेंटल कार सिस्टम: अस्थायी वाहन स्क्रिप्टिंग
अपने FiveM सर्वर में किराये के वाहन जोड़ें। समयबद्ध चाबियाँ, जमा, ऑटो-रिटर्न लॉजिक और QBCore, ESX और स्टैंडअलोन नौकरियों के लिए सर्वश्रेष्ठ किराये की स्क्रिप्ट।
Agency Scripts
Agency Scripts के संस्थापक और प्रमुख डेवलपर
रेंटल सिस्टम रोलप्ले को कैसे बेहतर बनाते हैं
हर रोलप्ले सर्वर पर हर खिलाड़ी के पास वाहन नहीं होता, खासकर नए पात्रों के लिए जो अभी शुरू कर रहे हैं। एक रेंटल कार और बाइक सिस्टम इस अंतर को भरता है जो अस्थायी परिवहन सस्ती दरों पर प्रदान करता है, किराये के काउंटर पर प्राकृतिक रोलप्ले अवसर बनाता है और नए खिलाड़ियों को सार्वजनिक परिवहन या पैदल चलने पर निर्भर किए बिना मानचित्र का अन्वेषण करने की स्वतंत्रता देता है। बुनियादी परिवहन से परे, रेंटल सिस्टम पर्यटन रोलप्ले का समर्थन करता है जहां आगंतुक दृश्य ड्राइव के लिए कन्वर्टिबल किराए पर लेते हैं, डिलीवरी नौकरियां जो विशिष्ट वाहन प्रकारों की मांग करती हैं, और आयोजन परिदृश्य जहां खिलाड़ियों को संगठित क्रूज या रेस के लिए मेल खाते वाहन चाहिए। सिस्टम किराया शुल्क, नुकसान जमा, और देर से वापसी दंड के माध्यम से सर्वर अर्थव्यवस्था के लिए एक निष्क्रिय राजस्व धारा भी उत्पन्न करता है।
फ्लीट कॉन्फ़िगरेशन और वाहन श्रेणियाँ
अपने रेंटल बेड़े को श्रेणियों में व्यवस्थित करें जो विभिन्न खिलाड़ी आवश्यकताओं और बजटों को पूरा करें। इकोनॉमी वाहन किफायती बुनियादी परिवहन प्रदान करते हैं, मिड-रेंज कारें अधिक आराम और प्रदर्शन देती हैं, प्रीमियम वाहन लक्ज़री अनुभव के लिए होते हैं, और मोटरसाइकिलें खिलाड़ियों को दोपहिया विकल्प देती हैं। प्रत्येक श्रेणी में स्पष्ट मूल्य निर्धारण के साथ कई वाहन विकल्प होने चाहिए। घंटेवार और दैनिक किराए की दरें शामिल करें ताकि खिलाड़ी अपनी आवश्यकताओं के लिए सबसे आर्थिक विकल्प चुन सकें। बेड़े को एक कॉन्फ़िगरेशन तालिका में परिभाषित करें जो हर उपलब्ध वाहन को उसके किराए की कीमत, आवश्यक जमा, श्रेणी, और स्पॉन मॉडल के साथ निर्दिष्ट करे:
Config.RentalLocations = {
['airport'] = {
label = 'LS Airport Car Rental',
pedModel = 's_f_y_airhostess_01',
pedCoords = vector4(-1037.34, -2736.82, 20.17, 238.52),
spawnPoint = vector4(-1029.12, -2728.91, 20.17, 148.76),
returnZone = vector3(-1035.00, -2730.00, 20.17),
returnRadius = 10.0,
categories = {'economy', 'midrange', 'premium', 'motorcycle'},
},
['downtown'] = {
label = 'Downtown Bike Rental',
pedModel = 'a_m_y_business_02',
pedCoords = vector4(-259.68, -892.41, 31.08, 69.24),
spawnPoint = vector4(-264.30, -888.12, 31.08, 339.87),
returnZone = vector3(-260.00, -890.00, 31.08),
returnRadius = 8.0,
categories = {'motorcycle', 'bicycle'},
},
}
Config.RentalFleet = {
economy = {
{model = 'blista', label = 'Blista', priceHour = 150, priceDay = 800, deposit = 500},
{model = 'asea', label = 'Asea', priceHour = 120, priceDay = 650, deposit = 400},
{model = 'stanier', label = 'Stanier', priceHour = 130, priceDay = 700, deposit = 450},
},
midrange = {
{model = 'schafter2', label = 'Schafter', priceHour = 300, priceDay = 1600, deposit = 1000},
{model = 'oracle', label = 'Oracle', priceHour = 280, priceDay = 1500, deposit = 900},
},
premium = {
{model = 'felon', label = 'Felon GT', priceHour = 600, priceDay = 3200, deposit = 2500},
{model = 'exemplar', label = 'Exemplar', priceHour = 550, priceDay = 3000, deposit = 2000},
},
motorcycle = {
{model = 'pcj', label = 'PCJ-600', priceHour = 100, priceDay = 500, deposit = 300},
{model = 'sanchez', label = 'Sanchez', priceHour = 80, priceDay = 400, deposit = 250},
},
bicycle = {
{model = 'cruiser', label = 'Cruiser Bike', priceHour = 30, priceDay = 150, deposit = 50},
{model = 'tribike', label = 'Tri-Cycles Race', priceHour = 25, priceDay = 120, deposit = 50},
},
}
किराया प्रक्रिया और NUI इंटरफ़ेस
किराया इंटरैक्शन तब शुरू होता है जब कोई खिलाड़ी किराया काउंटर NPC के पास आता है। एक लक्ष्य प्रणाली या निकटता जांच का उपयोग करके, एक NUI मेनू खोलें जो उपलब्ध वाहन श्रेणियों को फ़िल्टरिंग विकल्पों के साथ दिखाता है। प्रत्येक वाहन लिस्टिंग में मॉडल नाम, यदि संभव हो तो एक छवि पूर्वावलोकन, प्रति घंटा और दैनिक दरें, आवश्यक जमा राशि, और उपलब्धता स्थिति दिखानी चाहिए। जब खिलाड़ी वाहन चुनता है और किराए की अवधि की पुष्टि करता है, तो सर्वर लेनदेन को संसाधित करता है। कुल शुल्क चयनित अवधि के लिए किराया शुल्क प्लस नुकसान जमा होता है। जमा राशि सिस्टम द्वारा रखी जाती है और वाहन बिना नुकसान लौटाए जाने पर वापस की जाती है। किराया पुष्टि को एक सर्वर इवेंट के रूप में लागू करें जो खिलाड़ी के पास पर्याप्त धनराशि होने का सत्यापन करता है, चयनित वाहन की उपलब्धता जांचता है, खिलाड़ी से शुल्क लेता है, और निर्दिष्ट स्पॉन पॉइंट पर किराए का वाहन स्पॉन करता है:
RegisterNetEvent('rental:server:rentVehicle', function(locationId, vehicleModel, duration)
local src = source
local Player = QBCore.Functions.GetPlayer(src)
if not Player then return end
local location = Config.RentalLocations[locationId]
if not location then return end
-- Check if player already has an active rental
if ActiveRentals[Player.PlayerData.citizenid] then
TriggerClientEvent('QBCore:Notify', src, 'You already have an active rental', 'error')
return
end
-- Find vehicle config
local vehicleConfig = nil
for _, category in pairs(Config.RentalFleet) do
for _, v in ipairs(category) do
if v.model == vehicleModel then
vehicleConfig = v
break
end
end
if vehicleConfig then break end
end
if not vehicleConfig then return end
-- Calculate cost
local rentalFee = duration == 'day' and vehicleConfig.priceDay or vehicleConfig.priceHour
local totalCost = rentalFee + vehicleConfig.deposit
if Player.Functions.GetMoney('bank') < totalCost then
TriggerClientEvent('QBCore:Notify', src, 'Insufficient funds. Need $' .. totalCost, 'error')
return
end
-- Charge player
Player.Functions.RemoveMoney('bank', totalCost, 'vehicle-rental')
-- Generate rental plate
local plate = 'RNT' .. math.random(10000, 99999)
-- Store active rental
ActiveRentals[Player.PlayerData.citizenid] = {
model = vehicleModel,
plate = plate,
deposit = vehicleConfig.deposit,
rentalFee = rentalFee,
startTime = os.time(),
duration = duration,
expiresAt = os.time() + (duration == 'day' and 86400 or 3600),
locationId = locationId,
initialHealth = 1000,
}
TriggerClientEvent('rental:client:spawnVehicle', src, vehicleModel, plate, location.spawnPoint)
TriggerClientEvent('QBCore:Notify', src, 'Vehicle rented! Return before your time expires.', 'success')
end)
डैमेज डिपॉजिट और रिटर्न मैकेनिक्स
डैमेज डिपॉजिट सिस्टम यह जिम्मेदारी बनाता है कि खिलाड़ी किराये की गाड़ियों के साथ कैसा व्यवहार करते हैं। जब वाहन लौटाया जाता है, तो इसकी वर्तमान स्वास्थ्य मानों की तुलना किराये के समय रिकॉर्ड की गई प्रारंभिक मानों से करें। GTA वाहनों के पास इंजन, बॉडी, और व्यक्तिगत घटकों के लिए अलग-अलग स्वास्थ्य मान होते हैं, जो आपको नुकसान के आकलन पर सूक्ष्म नियंत्रण देते हैं। हुए नुकसान के आधार पर मरम्मत लागत की गणना करें और जमा राशि से इसे काटकर शेष राशि वापस करें। यदि नुकसान जमा राशि से अधिक है, तो खिलाड़ी को कोई रिफंड नहीं मिलता और अतिरिक्त शुल्क लगाया जा सकता है। यदि वाहन पूरी तरह से सही स्थिति में लौटाया जाता है, तो पूरी जमा राशि वापस की जाती है। यह प्रणाली सावधानीपूर्वक ड्राइविंग को प्रोत्साहित करती है बिना GTA की ड्राइविंग भौतिकी में अपरिहार्य मामूली खरोंचों के लिए दंडात्मक हुए:
RegisterNetEvent('rental:server:returnVehicle', function(vehicleNet)
local src = source
local Player = QBCore.Functions.GetPlayer(src)
if not Player then return end
local citizenid = Player.PlayerData.citizenid
local rental = ActiveRentals[citizenid]
if not rental then return end
local vehicle = NetworkGetEntityFromNetworkId(vehicleNet)
if not DoesEntityExist(vehicle) then return end
-- Check plate matches
local plate = GetVehicleNumberPlateText(vehicle)
if plate:trim() ~= rental.plate then
TriggerClientEvent('QBCore:Notify', src, 'This is not your rental vehicle', 'error')
return
end
-- Calculate damage
local bodyHealth = GetVehicleBodyHealth(vehicle)
local engineHealth = GetVehicleEngineHealth(vehicle)
local damagePercent = 1.0 - ((bodyHealth + engineHealth) / 2000.0)
local repairCost = math.floor(rental.deposit * damagePercent)
-- Calculate late fee
local lateFee = 0
if os.time() > rental.expiresAt then
local overHours = math.ceil((os.time() - rental.expiresAt) / 3600)
lateFee = overHours * 200
end
-- Refund deposit minus costs
local refund = math.max(0, rental.deposit - repairCost - lateFee)
if refund > 0 then
Player.Functions.AddMoney('bank', refund, 'rental-deposit-refund')
end
DeleteEntity(vehicle)
ActiveRentals[citizenid] = nil
local message = string.format('Vehicle returned. Deposit: $%d | Repairs: $%d | Late fee: $%d | Refund: $%d',
rental.deposit, repairCost, lateFee, refund)
TriggerClientEvent('QBCore:Notify', src, message, refund > 0 and 'success' or 'warning')
end)
समाप्ति और स्वचालित वापसी प्रणाली
किराया वाहन अनिश्चित काल तक मौजूद नहीं रहना चाहिए। एक टाइमर सिस्टम लागू करें जो प्रत्येक किराए की समाप्ति को ट्रैक करता है और तदनुसार कार्रवाई करता है। समाप्ति से तीस मिनट पहले खिलाड़ी को सूचना भेजें, फिर दस मिनट पर एक और, और पांच मिनट पर अंतिम चेतावनी। जब किराया समाप्त हो जाए, तो प्रति मिनट विलंब शुल्क लेना शुरू करें जो अधिकतम सीमा तक हो सकता है। यदि खिलाड़ी समाप्ति के बाद मोहलत अवधि के भीतर वाहन वापस नहीं करता है, तो वाहन को स्वचालित रूप से डीस्पॉन करें और पूरी जमा राशि जब्त करें। यह छोड़े गए किराया वाहनों को सर्वर पर जमा होने से रोकता है। समाप्ति जांच नियमित अंतराल पर सर्वर-साइड चलनी चाहिए, सभी सक्रिय किराए की समीक्षा करते हुए और शेष समय के आधार पर उचित कार्रवाई करते हुए। वाहन का नेटवर्क ID संग्रहित करें ताकि आवश्यक होने पर इसे दूरस्थ रूप से हटा सकें, और उस स्थिति को संभालें जहाँ वाहन समाप्ति से पहले नष्ट हो चुका हो, स्वचालित रूप से पूरी जमा राशि जब्त करते हुए किराया बंद करें।
मल्टीपल रेंटल लोकेशंस
नक्शे के चारों ओर रणनीतिक बिंदुओं पर किराये के स्थान रखें जहाँ अस्थायी परिवहन सबसे अधिक उपयुक्त हो। हवाई अड्डा एक स्पष्ट विकल्प है, जो उन खिलाड़ियों की सेवा करता है जो अभी शहर में आए हैं। सरकारी भवनों के पास डाउनटाउन स्थान उन खिलाड़ियों की सेवा करते हैं जो अदालत के मामलों या व्यापार बैठकों में भाग ले रहे हैं। समुद्र तट के स्थान मनोरंजन गतिविधियों के लिए मोटरसाइकिल और साइकिल प्रदान करते हैं। प्रत्येक स्थान बेड़े के एक अलग उपसमूह की पेशकश कर सकता है, हवाई अड्डे पर अर्थव्यवस्था से प्रीमियम तक की पूरी रेंज होती है, जबकि समुद्र तट के स्थान केवल मोटरसाइकिल और साइकिल स्टॉक करते हैं। प्रत्येक स्थान पर NPC मॉडल को सेटिंग के अनुसार अनुकूलित करें। हवाई अड्डा किराए पेशेवर व्यवसाय मॉडल का उपयोग करता है, समुद्र तट किराए कैज़ुअल सर्फर मॉडल का उपयोग करते हैं, और डाउनटाउन स्थान सूट पहने क्लर्क का उपयोग करते हैं। यह विवरण पर ध्यान प्रत्येक किराये की जगह को एक अलग व्यवसाय जैसा महसूस कराता है न कि एक ही प्रणाली की समान प्रतियां।
GPS ट्रैकिंग और एंटी-थेफ्ट
किराया वाहन में अंतर्निर्मित GPS ट्रैकिंग होनी चाहिए जो किराया कंपनी और खिलाड़ी दोनों को किसी भी समय वाहन का पता लगाने देती है। किराया वाहन के स्थान को खिलाड़ी के मानचित्र पर एक विशिष्ट ब्लिप आइकन के साथ प्रदर्शित करें। यदि वाहन एक कॉन्फ़िगर योग्य सीमा के बाहर चला जाता है, तो एक चेतावनी सूचना भेजें। चोरी-रोधी उपाय लागू करें जो अन्य खिलाड़ियों को किराया वाहन को संग्रहित या गैराज में रखने से रोकते हैं, जिससे यह किराया प्रणाली के नियंत्रण में रहता है। जब कोई खिलाड़ी किराया वाहन को अपने व्यक्तिगत गैराज में रखने का प्रयास करता है, तो सिस्टम कार्रवाई को एक सूचना के साथ अवरुद्ध कर दे जो बताती है कि किराया वाहन संग्रहित नहीं किए जा सकते। मोटरसाइकिल और साइकिल के लिए, एक वर्चुअल लॉक जोड़ें जिसे केवल किराए पर लेने वाला खिलाड़ी खोल सकता है, जिससे आकस्मिक चोरी रोकी जा सके। यदि किराया वाहन चोरी हो जाता है, तो किराए पर लेने वाला खिलाड़ी इसे फोन ऐप के माध्यम से रिपोर्ट कर सकता है, जिससे GPS पिंग सक्रिय होता है जो वाहन का पता लगाने में मदद करता है। उच्च-माइलेज किराए पर संभावित अतिरिक्त शुल्क के लिए कुल माइलेज ट्रैक करें, जो यथार्थवादी वाहन किराया प्रबंधन की एक और परत जोड़ता है।
व्यवसाय एकीकरण और खिलाड़ी-स्वामित्व वाले किराए
व्यवसाय स्वामित्व प्रणाली वाले सर्वरों के लिए, खिलाड़ियों को अपना खुद का किराये का व्यवसाय खरीदने और संचालित करने की अनुमति दें। व्यवसाय मालिक किराये के पूल में जोड़ने के लिए वाहन खरीदकर बेड़े की संरचना निर्धारित करता है, मूल्य निर्धारण तय करता है, काउंटर के लिए कर्मचारियों को नियुक्त करता है, और किराये से राजस्व एकत्र करता है। व्यवसाय मालिकों के पास एक प्रबंधन डैशबोर्ड होना चाहिए जो सक्रिय किराये, दैनिक राजस्व, बेड़े उपयोग दर, और कई किरायों के दौरान क्षति प्राप्त वाहनों के रखरखाव लागत दिखाता है। कर्मचारी फ्रंट-डेस्क संचालन जैसे किराये और वापसी प्रक्रिया, लौटाए गए वाहनों की क्षति निरीक्षण, और विवादों को मालिक तक बढ़ाने का काम कर सकते हैं। यह खिलाड़ी-चालित दृष्टिकोण किराये की प्रणाली को एक स्थिर गेम मैकेनिक से एक गतिशील व्यवसाय में बदल देता है जो रोलप्ले सर्वरों की उद्यमशीलता भावना को दर्शाता है और उन खिलाड़ियों के लिए रोजगार के अवसर बनाता है जो उच्च-क्रिया गेमप्ले की तुलना में ग्राहक सेवा भूमिकाओं को पसंद करते हैं।