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:

lua
-- 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ş:

lua
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
end

Gerç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:

lua
-- 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:

lua
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:

  1. Tam bir döngüyü (toplama, işleme, satış) zamanla ve kaç dakika aldığını sayın.
  2. Saat başı parayı hesaplayın: payout saatte döngüler zamanını.
  3. 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.
  4. 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 →

Okumaya devam edin