FiveM uyuşturucu sistemi tasarımı: güvenli şekilde toplama, işleme ve satış
FiveM uyuşturucu sistemini tasarlama: sunucu tarafı öğe kontrolleriyle toplama ve işleme, oran sınırları, NPC'lere güvenli satış, polis uyarıları ve denge ödemeleri.
Belirti: oyuncuların dakikalar içinde binlerce uyuşturucu vardır, aynı öğeyi aynı NPC'ye sonsuza kadar satarlar veya polis uyarısı olmadan bir işin ödediği on kat kazanırlar.
Uyuşturucu sistemi üç aşamaya sahiptir: toplama, işleme ve satış. Üçü de aynı kuralı izler: istemci sorar, sunucu kontrol eder ve karar verir. Bu makale önemli kontrolleri ve denge sorularını gösterir.
Üç aşama
| Aşama | Olur | Sunucu kontrol etmeli |
|---|---|---|
| Toplama | Oyuncu bitki toplar, kaynak çıkarır | Konum, soğuma, oran sınırı |
| İşleme | Ham öğeler bitmiş ürüne dönüşür | Oyuncunun öğeleri var, işleme yerinde |
| Satış | Ürün para veya kara paraya dönüşür | Öğe, alıcı, fiyat, soğuma |
Her aşama öğeleri tüketir veya oluşturur, bu nedenle güvenli tasarım envanterin sunucu işlevlerini kullanır. Öğe oluşturma tarafı ox_inventory'ye öğeler nasıl eklenir içinde.
Sunucu tarafı öğe kontrolleri
Hiçbir zaman "bununun 10'una sahibim" diyen istemciye güvenmeyin. Envanterde sunucuda sorun, girdileri kaldırın, çıkışları ekleyin, bir yerde:
-- server
RegisterNetEvent('drugs:process', function()
local src = source
if not isNearProcessor(src) then return end -- distance check on the server
local count = exports.ox_inventory:GetItemCount(src, 'weed_leaf')
if count < 3 then return end
if exports.ox_inventory:RemoveItem(src, 'weed_leaf', 3) then
exports.ox_inventory:AddItem(src, 'weed_bag', 1)
end
end)Önce kaldırın, ikinci olarak ekleyin ve yalnızca kaldırılması başarılı olduğunda ekleyin. Önce eklerseniz olayı spammed bir oyuncu çıkışı tutabilir ve hiçbir şey kaybetmez. Oyuncular dolu olabilirse eklemeyi eklemeden önce canCarryItem kontrol edin.
Oran sınırları
Bile meşru bir olay bir döngüden ateş ederek suistimal edilebilir. Her eyleme oyuncu başına minimum gecikme verin, sunucuda tutulmuş:
local lastAction = {}
local function rateLimited(src, key, ms)
local now = GetGameTimer()
lastAction[src] = lastAction[src] or {}
if lastAction[src][key] and now - lastAction[src][key] < ms then
return true
end
lastAction[src][key] = now
return false
endGerçek eylemin aldığından biraz daha az bir gecikme ayarlayın, bu nedenle dürüst oyuncular hiçbir zaman engellenmez. playerDropped üzerinde lastAction[src] temizlemeyi hatırlayın, böylece tablo sonsuza kadar büyümez. Toplama da konum tarafından sınırlandırılmalıdır: bir alanda var olan bitki herhangi bir yerden toplanamaz.
NPC'lere güvenli satış
NPC'lere satış en çok suiistimal edilen kısımdır, çünkü istemci ped seçer. Hedef kitaplığınızla istemciye seçeneği ekleyin, örneğin tüm pedlarda:
-- client (ox_target)
exports.ox_target:addGlobalPed({
{
label = 'Offer drugs',
icon = 'fa-solid fa-cannabis',
distance = 2.0,
canInteract = function(entity)
return not IsPedAPlayer(entity) and not IsEntityDead(entity)
end,
onSelect = function(data)
TriggerServerEvent('drugs:sell', 'weed_bag')
end,
},
})Hedef essentials ox_target bölgeleri ekleme içinde. İstemcinin sadece öğe adı gönderdiğine dikkat edin. Diğer her şey sunucuda karar verilir:
RegisterNetEvent('drugs:sell', function(item)
local src = source
local price = Config.Prices[item]
if not price then return end -- only allowed items
if rateLimited(src, 'sell', 4000) then return end -- cooldown between deals
if exports.ox_inventory:RemoveItem(src, item, 1) then
local payout = math.random(price.min, price.max)
exports.ox_inventory:AddItem(src, 'black_money', payout)
end
end)Fiyat sunucu yapılandırmasından gelir, hiçbir zaman istemciden değil. Öğe adı izin verilen listeye karşı kontrol edilmelidir, çünkü istemci herhangi bir ad gönderebilir. NPC'nin reddedilmesi veya sizin hakkınızda rapor etme şansını ekleyin. Satış oyuncunun bölgede veya sadece gece olması gerekiyorsa, sunucuda da kontrol edin. black_money öğe adı kurulumunuza bağlıdır; bkz. para türleri.
Polis uyarıları
Risk uyuşturucuları ilginç yapan şeydir. Şans verilen sunucu üzerinde, anlaşmanın konumuyla polis uyarısı verin:
- Her satışta yüzde şansı (örneğin NPC'nin polis çağırma şansı).
- Sakin bir alanda daha az anlaşma yapıldığında daha büyük şans veya birçok anlaşma aynı yerde olduğunda.
- Satış ve işleme için gerekli minimum görevli polis sayısı, polis işi kurulumu gibi sunucuda sayılır.
Anlaşmalar için telefon uygulaması kullanırsanız, siparişler ve buluşma noktaları yine de sunucuda oluşturulmalı ve kontrol edilmelidir.
Drug Dealer Applb-phone uygulaması olarak sokak satışı: bölgeler, NPC alıcılar, seviyeler ve polis ihbarları.başlangıç €18,15Scripti gör →
Denge ödemeleri
Duyguya değil sayılara göre dengeleyin:
- Tam bir döngüyü (toplama, işleme, satış) zamanla ve kaç dakika aldığını sayın.
- Saat başı parayı hesaplayın: payout saatte döngüler zamanını.
- En iyi yasal işinizin maaş çeki ile karşılaştırın. Uyuşturucular risk nedeniyle daha fazla ödeyebilir, ancak iki veya üç faktörü bol.
- Sürtünme ekleyin: işleme süresi, öğe ağırlığı, NPC başına sınırlı satış sayısı, konum başına soğuma.
Ardından bir hafta sonra veritabanındaki parayı izleyin ve ayarlayın. Yöntem sunucu ekonomisini dengeleme içinde.
Kontrol Listesi
| Belirtisi | Düzeltme |
|---|---|
| Sonsuz öğeler | Konumu kontrol edin, sunucuda girdileri önce ve oran sınırı kaldırın |
| İstemci fiyatı belirler | Fiyatları sunucu yapılandırmasından sadece alın |
| Herhangi bir öğeyi uyuşturucu olarak satır | Öğe adını izin verilen listeye karşı kontrol edin |
| Aynı NPC sonsuza kadar satın alır | Oyuncu ve ped veya konum başına soğuma ekleyin |
| Uyuşturucular çok fazla ödüyor | Saat başı parayı normal işle karşılaştırın |
| Polis tepkisi yok | Şans verilen sunucudan uyarı verin |
Kısa yanıtlar
Oyuncular neden sınırsız uyuşturucu alıyor?
Toplama veya işlem olayı konum, zaman veya sınırlar kontrol etmeden sunucuda çalışır, bu nedenle değiştirilen istemci bunu döngüde ateşleyebilir. Sunucuda kontrolleri ve oran sınırını ekleyin.
Oyunculara NPC'lere uyuşturucu satmasını nasıl izin verir?
İstemcide yayalar içine hedef seçeneği ekleyin, ardından sunucunun öğeyi, mesafeyi, soğuma süresi ve fiyatı kontrol edin. İstemci sadece sorar.
Uyuşturucu ödünü nasıl dengelerim?
Oyuncunun saatte kazanabileceği parayı çalışın ve bunu normal bir işle karşılaştırın. Uyuşturucular risk nedeniyle daha fazla ödeyebilir, ancak kimse başka hiçbir şey yapmadığından çok fazla değil.
Bu sorunu yaşatmayan scriptler
Drug Dealer Applb-phone uygulaması olarak sokak satışı: bölgeler, NPC alıcılar, seviyeler ve polis ihbarları.Scripti gör →
Item Creator V2Animasyonlar, proplar, efektler ve daha fazlasıyla kullanılabilir eşyalar oluşturun — kod yazmadan.Scripti gör →
Pawn Shop Applb-phone içinde oyuncudan oyuncuya rehin pazarı.Scripti gör →