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:
- 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.
- Kilit: sunucu mağazayı soygunu işaretler ve soğutmayı ayarlar.
- Eylem: istemci ilerleme çubuğunu, kırılmayı veya kilidi açma oynatır.
- 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:
-- 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
busyayarlayı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:
-- 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:
-- 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:
-- 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 →