FiveM mağaza ve banka soygun komut dosyaları: kurulum ve sunucu tarafı tasarım

FiveM'de mağaza ve banka soygunları nasıl kurulur ve tasarlanır: polis sayısı, sunucu tarafı soğutma, yalnızca sunucu tarafından verilen ödüller, polis uyarıları ve mesafe kontrolleri.

Belirti: oyuncular çevrimiçi hiçbir polis olmadan mağazayı soygunu, aynı mağaza arka arkaya on kez soygunu veya bir hile yapıcı bir olayı ateşleyerek tüm ödülü alır.

Soygun komut dosyası küçük sunucu tarafı durum makinesi: kuralları kontrol edin, başlatın, bekleyin, ödeyin. Açığın çoğu bu adımları istemciye koymanın gelmesi. Bu makale güvenli tasarım ve yukarıdaki sorunlara neden olan yapılandırma hatalarını kapsar.

İstediğiniz akış

Her soyğunu dört adım olarak düşünün ve adımlar 1, 2 ve 4'ü sunucuda çalıştırın:

  1. Başlatma isteği: istemci mağazayı soymak istemeye sorar. Sunucu polis sayısını, soğutmayı, mesafeyi ve kimsenin onu zaten soymadığını kontrol eder.
  2. Kilit: sunucu mağazayı soygunu işaretler ve soğutmayı ayarlar.
  3. Eylem: istemci ilerleme çubuğunu, kırılmayı veya kilidi açma oynatır.
  4. Finish: istemci yapıldığını bildirir, sunucu geçen zamanı ve mesafeyi tekrar kontrol eder, ardından öder.

İstemci yalnızca görsellerle ilgilenir. Sonucu asla karar almaz.

Polis sayısı

Sunucu üzerinde sayılan minimum sayıda görev dışı polis gerektir. İstemciden sayıyı okuyan veya istemcinin gönderdiği değerden okuyan bir komut dosyası, önemsizdir. Sayma kodu polis işi kurulumunda öğesindedir. Soygun başladığında kontrol edin ve ödülden önce tekrar kontrol edilip edilmeyeceğine karar verin.

Sunucuda depolanan soğutmalar

Durumu konum kimliğine göre anahtarlanan sunucu tablosunda tutun:

lua
-- server
-- [id] = { busy = bool, last = os.time(), robber = source, started = os.time() }
local robberies = {}

local function canRob(id, cooldown)
    local state = robberies[id]
    if not state then return true end
    if state.busy then return false end
    return (os.time() - state.last) >= cooldown
end

İki ayrıntı önemli:

  • Bellekteki tablo kaynak yeniden başlatıldığında sıfırlanır. Soğutmanın yeniden başlatmayı kaldırmasını istiyorsanız, son soygun saatini veritabanında depolayın.
  • Soygun başladığında busy ayarlayın ve sona erdiğinde veya soyguncu bağlantıyı kestiğinde temizleyin; aksi halde mağaza sonsuza kadar kilitli kalır.

Yalnızca sunucudan ödüller

En yaygın açık, istemcinin kendi başına tetikleyebileceği ödül olayıdır:

lua
-- WRONG: any client can fire this
RegisterNetEvent('robbery:reward', function(amount)
    exports.ox_inventory:AddItem(source, 'money', amount)
end)

Düzeltme, bu olayı hiç sahip olmamaktır. Sunucu tutarı karar alır ve soyğunu doğrulayan kod içinde öder:

lua
-- server (ox_lib callback)
lib.callback.register('robbery:finish', function(source, id)
    local state = robberies[id]
    if not state or state.robber ~= source then return false end
    if os.time() - state.started < Config.MinDuration then return false end

    local ped = GetPlayerPed(source)
    if #(GetEntityCoords(ped) - Config.Stores[id].coords) > 5.0 then return false end

    state.busy = false
    state.last = os.time()
    local amount = math.random(Config.Reward.min, Config.Reward.max)
    exports.ox_inventory:AddItem(source, 'money', amount)
    return true
end)

Üç kontrolü fark edin: aynı oyuncu onu başlattı, yeterli zaman geçti ve oyuncu hala mağazada. Sunucu tarafı mesafe çalışır çünkü sunucu OneSync ile oyuncunun konumunu bilir. Sunucu olaylarını güvenli hale getirmek ve sunucu geri çağırmaları için desen bölümüne bakın.

Dikkat: nakitlenmek için öğe adı kurulumunuza bağlıdır. Sunucunuzun para için kullandığı öğeyi veya çerçeve işlevini kullanın ve sunucuda tutun.

Polisleri uyarma

Soygun başladığında, sunucudan her görev dışı polis oyuncusuna memurlar söyleyin:

lua
-- server: send to each on-duty officer you found with your police count
TriggerClientEvent('robbery:policeAlert', officerSrc, Config.Stores[id].coords, Config.Stores[id].label)

İstemci üzerinde, blip ve bildirim ekleyin. Uyarıyı kendi inşaatınız yerine gönderme kaynağına da verebilirsiniz; bu, polisjleri tüm çağrılar için tek bir yere verir. Küçük bir gecikme veya sessiz bir alarm şansı soyğunu daha az komut dosyası gösterir. Blip'ler blip oluşturmada kapsanmıştır.

Yaygın yapılandırma hatları

  • Polis sayısı 0 olarak ayarlandı test ederken, sonra canlı sunucuda bu şekilde bırakıldı.
  • Ödül aralığı çok yüksek. Herhangi bir işin bir saatinden daha fazla ödeyen soygun tarım yapılır. Sunucu ekonomisini dengeleme bölümünde maaş ile karşılaştırın.
  • Soğutma çok kısa. Az sayıda mağaza ve hızlı soğutmalarla, oyuncular aralarında döner.
  • Bitiş adımında mesafe kontrolü yok, oyuncu soyğunu başlatabilir ve harita arasından toplayabilir.
  • Gerekli öğeler (kilit açma, matkap) hiç kaldırılmaz veya istemci üzerinde kaldırılır.
  • Meşgul bayrağı asla temizlenmez bağlantı kesildikten sonra veya komut dosyası hatasından sonra.
  • Başka haritadan kopyalanan koordinatlar. Farklı MLO veya harita kullanırsanız, mağaza konumu yanlıştır.

Admin izinleri kaçırılan kontrolü gizleyebileceği için, yönetici olmayan ikinci hesapla test edin.

Kontrol listesi

Belirti Çözüm
Çevrimiçi hiçbir polis olmadan soygun Sunucu üzerinde görev dışı polis sayın, 0 üzerinde minimum ayarlayın
Mağaza hemen tekrar soygunu Mağaza kimliğine göre anahtarlanan sunucu soğutması ekleyin
Hile yapıcı ödülü alır İstemci ödül olaylarını kaldırın, doğrulanan sunucu kodunda ödeyin
Uzaklardan ödeme Sunucuda başlangıç ve bitiş sırasında mesafeyi kontrol edin
Mağaza sonsuza kadar kilitli Bitiş, başarısızlık ve bağlantı kesilmesinde meşgul bayrağını temizleyin
Yeniden başlatmada soğutma kayboldu Son soygun saatini veritabanında depolayın

Kısa yanıtlar

Soygun soğutması nereye depolanmalı?

Sunucuda, mağaza veya banka kimliğine göre anahtarlanan bir tabloda. İstemcide tutulan soğutma, her yeniden bağlantıda sıfırlanır ve atlanması kolaydır.

Oyuncular soygunlardan neden bunları yapmadan para alıyorlar?

Ödül olayı istemciyi güveniyor. Ödülü yalnızca soyğunu başlatan ve kontrol eden sunucu kodu içinde verin; istemcinin tek başına ateşleyebileceği olaydan asla değil.

Soygun kaç polis gerektirmeli?

Sunucunuzun genellikle kaç memuru olduğuna bağlı. Yaygın başlangıç küçük mağaza için bir veya iki ve banka için daha fazla, ardından gördüğünüzden ayarlayın.

Bu sorunu yaşatmayan scriptler

CCTV Security CamerasYerleştirilebilir kameralar, canlı çoklu görüntü tableti ve basılı delil fotoğrafları.Scripti gör →Advanced BoostingTabletten araç boosting: D’den S+ sınıfına kontratlar, ekipler ve canlı sıra.Scripti gör →Shop CreatorBir dakikadan kısa sürede dükkân kurun — sahipler, çalışanlar, kasalar ve soygunlar dahil.Scripti gör →

Okumaya devam edin