FiveM Çete Bölgesi Sistemi: Bölge Savaşlarını Scriptleme
Çalışan bir FiveM çete bölgesi sistemi kurun. Bölgeler, ele geçirmeler, ödüller, uyuşturucu kontrolü bağlantıları ve derin rol yapma savaşları için en iyi çete scriptleri.
Agency Scripts
Agency Scripts Kurucusu ve Baş Geliştiricisi
Bölge Sistemi Tasarımı
Çete bölgesi sistemleri, bir FiveM roleplay sunucusuna ekleyebileceğiniz en ilgi çekici mekaniklerden biridir; çünkü suç örgütlerine rekabet etmek, iş birliği yapmak ve oluşumlarının büyümesine yatırım yapmak için somut bir neden sunar. Temelinde bir bölge sistemi, haritayı çetelerin hak iddia edip kontrol edebileceği bölgelere ayırır ve bu sınırlar içinde bölge sahibi çeteye belirli avantajlar sağlar. Burada alacağınız tasarım kararları sunucunuzdaki tüm illegal roleplay deneyimini şekillendirir. Kaç bölge oluşturulacağını, her bölgenin ne kadar büyüklükte olması gerektiğini, bir bölgeyi kontrol etmenin ne gibi avantajlar sağladığını, bölgeler için ne sıklıkla mücadele edilebileceğini ve bir çete tüm bölgesini kaybettiğinde ne olacağını hesaba katmalısınız. Çok az bölge olması yalnızca en büyük çetelerin katılabileceği anlamına gelirken, çok fazla bölge olması çatışmayı dağıtır ve münferit bölgeleri anlamsız hissettirir. Dengeli bir yaklaşım, uyuşturucu satış noktaları, depo bölgeleri ve düşük gelirli konut alanları gibi halihazırda illegal roleplay açısından önem taşıyan alanlarda 15 ila 25 bölge oluşturmaktır.
Bölge Veri Yapısı
Veri katmanının bölge sahipliğini, ele geçirme durumunu ve her bölgeyle ilişkili avantajları takip etmesi gerekir. Bölge düzenlerinin kalıcı verilere dokunulmadan ayarlanabilmesi için bölge tanımlarını bir yapılandırma dosyasında, sahiplik verilerini ise veritabanında saklayın. Her bölgenin benzersiz bir tanımlayıcıya, alanını belirleyen sınır koordinatlarına, mevcut sahibine ve son ele geçirildiği zaman damgasına ihtiyacı vardır. Poligon tabanlı sınırlar kullanmak, sokakları ve simge yapıları doğal olarak takip eden bölge şekilleri üzerinde hassas kontrol sağlar; ancak basit yarıçap tabanlı bölgelerin uygulanması daha kolaydır ve daha iyi performans gösterir:
Config.Territories = {
['grove_street'] = {
label = 'Grove Street',
center = vector3(105.5, -1942.5, 20.8),
radius = 150.0, -- Simple radius approach
blip = { sprite = 543, scale = 1.2 },
perks = { 'drug_selling_boost', 'reduced_police_alert' },
captureTime = 300, -- Seconds to capture
cooldown = 3600, -- Seconds before re-capture
},
['ballas_territory'] = {
label = 'Forum Drive',
center = vector3(78.0, -1812.0, 29.0),
radius = 120.0,
blip = { sprite = 543, scale = 1.0 },
perks = { 'weapon_discount', 'safe_stash' },
captureTime = 300,
cooldown = 3600,
},
}
-- Database table for ownership
--[[
CREATE TABLE IF NOT EXISTS gang_territories (
zone_id VARCHAR(50) PRIMARY KEY,
owner_gang VARCHAR(50) DEFAULT NULL,
captured_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
capture_count INT DEFAULT 0,
last_war_at TIMESTAMP DEFAULT NULL
);
]]
Şunu eklemeyi değerlendirin: capture_count bir bölgenin kaç kez el değiştirdiğini takip eden sütun: Bunu analizler için ve aşırı çekişmeli bölgeleri tespit etmek için kullanabilirsiniz; bu durum, söz konusu alanlar için bekleme süresini veya ele geçirme zorluğunu ayarlamanız gerekebileceğini gösterir.
Ele Geçirme Mekanikleri
Ele geçirme mekaniği, tüm bölge sistemini yöneten oynanış döngüsüdür. Rakip bir çete bir bölgeye girip ele geçirme girişiminde bulunduğunda, saldıranların tamamlanana kadar hayatta kalması gereken bir zamanlayıcı başlar; bu sırada savunan çete uyarılar alır ve karşılık verebilir. En ilgi çekici ele geçirme sistemleri, saldıran çetenin ele geçirme süresi boyunca bölge içinde minimum sayıda üye bulundurmasını gerektirerek doğal çatışma noktaları yaratır. Saldırgan sayısı eşiğin altına düşerse ele geçirme ilerlemesi duraklar veya gerilemeye başlar. İşte temel ele geçirme mantığının sunucu tarafı uygulaması:
local activeCaptures = {}
RegisterNetEvent('territory:server:startCapture', function(zoneId)
local src = source
local Player = QBCore.Functions.GetPlayer(src)
if not Player then return end
local gang = Player.PlayerData.gang.name
if gang == 'none' then return end
local zone = Config.Territories[zoneId]
if not zone then return end
-- Check cooldown
local territory = MySQL.query.await(
'SELECT * FROM gang_territories WHERE zone_id = ?', {zoneId}
)
if territory and territory[1] then
local lastWar = territory[1].last_war_at
if lastWar and (os.time() - lastWar) < zone.cooldown then
TriggerClientEvent('QBCore:Notify', src, 'Territory on cooldown', 'error')
return
end
if territory[1].owner_gang == gang then
TriggerClientEvent('QBCore:Notify', src, 'You already own this', 'error')
return
end
end
-- Check minimum gang members in zone
local membersInZone = GetGangMembersInZone(gang, zoneId)
if #membersInZone < Config.MinCaptureMembers then
TriggerClientEvent('QBCore:Notify', src,
'Need ' .. Config.MinCaptureMembers .. ' members in zone', 'error')
return
end
activeCaptures[zoneId] = {
attackingGang = gang,
startTime = os.time(),
progress = 0,
}
-- Alert defending gang
local defender = territory and territory[1] and territory[1].owner_gang
if defender then
AlertGangMembers(defender, 'Your territory is under attack: ' .. zone.label)
end
TriggerClientEvent('territory:client:captureStarted', -1, zoneId, gang)
end)
Minimum saldırgan sayısının korunduğunu ve hiçbir cooldown ihlalinin gerçekleşmediğini kontrol ederek ele geçirme ilerlemesini güncellemek için birkaç saniyede bir çalışan sunucu taraflı bir thread yürütün. Ele geçirme tamamlandığında veritabanını güncelleyin, ilgili tüm oyunculara bildirim gönderin ve yeni sahipliği sunucu genelinde uygulayın. Harita blip'lerini gerçek zamanlı olarak güncelleyebilmeleri için bölge değişikliğini bağlı tüm istemcilere yayınlayın.
Harita Blip'leri ve Görsel Geri Bildirim
Minimap ve duraklatma menüsü haritasındaki bölge blip'leri, hangi alanların hangi çeteler tarafından kontrol edildiğini oyunculara göstermek için kritik öneme sahiptir. Her bölge, sahibi olan çetenin rengiyle eşleşen renkli bir blip göstermelidir; sahipsiz bölgeler ise nötr gri veya beyaz renkte görünmelidir. Bir ele geçirme işlemi devam ederken, sunucudaki tüm oyuncuların dikkatini çekmek için blip yanıp sönmeli veya çekişmeli bir renge dönüşmelidir. Şunları kullanın AddBlipForRadius bölge alanları için, çünkü harita üzerinde bölgenin sınırlarını net bir şekilde gösteren dairesel bir alan katmanı oluşturur:
function CreateTerritoryBlip(zoneId, data, ownerGang)
local zone = Config.Territories[zoneId]
if not zone then return end
-- Remove existing blip if any
if territoryBlips[zoneId] then
RemoveBlip(territoryBlips[zoneId].radius)
RemoveBlip(territoryBlips[zoneId].icon)
end
-- Radius blip for territory area
local radiusBlip = AddBlipForRadius(
zone.center.x, zone.center.y, zone.center.z, zone.radius
)
local gangColor = GetGangBlipColor(ownerGang) -- Returns blip color ID
SetBlipColour(radiusBlip, gangColor)
SetBlipAlpha(radiusBlip, 80)
-- Center icon blip
local iconBlip = AddBlipForCoord(zone.center.x, zone.center.y, zone.center.z)
SetBlipSprite(iconBlip, zone.blip.sprite)
SetBlipScale(iconBlip, zone.blip.scale)
SetBlipColour(iconBlip, gangColor)
SetBlipAsShortRange(iconBlip, true)
BeginTextCommandSetBlipName('STRING')
AddTextComponentSubstringPlayerName(zone.label .. ' [' .. (ownerGang or 'Unclaimed') .. ']')
EndTextCommandSetBlipName(iconBlip)
territoryBlips[zoneId] = { radius = radiusBlip, icon = iconBlip }
end
Harita blip'lerinin ötesinde, bir bölge ele geçirildiğinde bölge içindeki kilit noktalarda ortaya çıkan renkli duman, grafiti prop'ları veya çete bayrakları gibi oyun içi görsel göstergeler eklemeyi düşünün. Bu çevresel ipuçları, oyuncuları çete savaşı anlatısına dahil eder ve minimap görünür olmadığında bile bölge sınırlarının hissedilmesini sağlar. Şunu kullanabilirsiniz: CreateObject her bölge içindeki önceden tanımlanmış konumlarda çeteye özel prop'lar oluşturmak için native.
Çete Avantajları ve Ödülleri
Bölge avantajları, çeteleri kendi bölgeleri için savaşmaya ve orayı savunmaya motive eden unsurlardır. Anlamlı ödüller olmadan bölge kontrolü, oyuncuların yalnızca bir kez deneyimleyip ardından görmezden geldiği bir yenilikten ibaret kalır. En iyi avantajlar, bir çete daha fazla bölgeyi kontrol ettikçe katlanan ekonomik ve stratejik faydalar sağlar. Ekonomik avantajlar: bölge içindeki uyuşturucu satış kârlarına yüzdelik bir artış, özel karaborsa satıcılarına erişim, çeteyle bağlantılı dükkanlarda indirimli fiyatlar veya düzenli aralıklarla çetenin ortak banka hesabına para aktaran pasif gelir üretimini içerebilir. Stratejik avantajlar ise bölge içinde daha hızlı respawn süreleri, bölgede işlenen suçlar için daha az polis ihbarı oluşturulması, silah ve uyuşturucu depolamak için gizli depo (stash) konumlarına erişim veya çeteye özel tuzaklar ve savunmalar yerleştirme yeteneğini kapsayabilir. Avantajları, doğru çete üyeliğine sahip bir oyuncu çetesinin sahip olduğu bir bölgede eylem gerçekleştirdiğinde etkinleşen sunucu taraflı kontroller olarak uygulayın. Avantaj sistemini modüler tutun, böylece tüm kod tabanını yeniden yapılandırmadan oyuncu geri bildirimlerine göre yeni avantajlar ekleyebilir veya mevcut olanları kolayca ayarlayabilirsiniz.
Turf Savaşı Etkinlikleri ve Zamanlama
Yapılandırılmış bölge savaşı etkinlikleri, bölge sistemine planlanmış rekabetçi bir unsur ekleyerek oyuncular için yorucu olabilen sürekli düşük seviyeli çatışmaları önler. Bölgelerin herhangi bir zamanda ele geçirilmesine izin vermek yerine, bölge savaşlarını cuma ve cumartesi akşamları gibi belirli zaman dilimleriyle sınırlandırabilir, oyuncuların plan yaptığı ve tüm kadrolarını getirdiği beklenen etkinlikler oluşturabilirsiniz. Alternatif olarak, bir çetenin oyun içi bir mekanik aracılığıyla başka bir çeteye resmen savaş ilan etmesi gereken ve bölgeler tartışmalı hale gelmeden önce 30 dakikalık bir hazırlık süresi tetikleyen bir savaş ilanı sistemi uygulayın. Bu, savunan çeteye üyelerini toplama ve savunma hazırlama zamanı tanıyarak daha büyük ve daha dramatik savaşlarla sonuçlanır. Öldürme, ölme, kazanılan ve kaybedilen bölgeler ile verilen hasar gibi savaş istatistiklerini takip edin, ardından savaş dönemi sona erdiğinde sonuçları sunucu genelinde duyurun. Oyuncuların inceleyebileceği bir liderlik tablosu veya savaş geçmişi sistemi, aktif savaş dönemleri arasında çeteleri oyunda tutan ve sunucu tarihinin parçası haline gelen hikayeler oluşturan rekabetçi bir sıralama unsuru ekler.
Anti-Exploit Önlemleri
Bölge sistemleri, oyun içi ekonomiyi ve güç dengelerini doğrudan etkilediği için istismara en açık hedeflerdir. En yaygın suiistimal, bir çete üyesinin oyuncu sayısının az olduğu saatlerde giriş yaparak bölgeleri direniş olmadan sessizce ele geçirdiği zombi ele geçirmedir (zombie capturing). Ele geçirmelerin başlatılabilmesi için minimum sunucu oyuncu sayısı şartı koşarak ve ele geçirme başladığında Discord webhook bildirimleri göndererek savunucuların o sırada çevrim içi olmasalar bile yanıt verebilmelerini sağlayarak bunun önüne geçin. Diğer bir suiistimal ise birden fazla grup için bölge ele geçirmek amacıyla çete üyelikleri arasında hızla geçiş yapmayı içerir. Gerçek zamanlı olarak en az 24 saatlik bir çete değiştirme bekleme süresi uygulayın ve bir çeteden ayrılır ayrılmaz bölgeyle ilgili tüm izinleri hemen kaldırın. Sabotaj taktiği olarak sürekli ele geçirme başlatılmasını önlemek için çete başına ele geçirme denemelerine sınırlandırma (rate-limit) getirin. Teknik açıdan ise tüm bölge etkileşimlerini sunucu tarafında doğrulayın, bir oyuncunun bölge sınırları içinde olup olmadığını bildirme konusunda asla istemciye güvenmeyin ve sunucu tarafı konum kontrollerini şununla gerçekleştirin GetEntityCoords(GetPlayerPed(src)) ele geçirme tick'leri sırasında oyuncu konumlarını doğrulamak için. Şüpheli kalıpları inceleyebilmeniz ve açık kullananlara karşı net kanıtlarla işlem yapabilmeniz için her ele geçirme denemesini, başarısını ve başarısızlığını zaman damgaları ve oyuncu tanımlayıcılarıyla kaydedin.
Diğer Sistemlerle Entegrasyon
Bir bölge hakimiyeti sistemi, sunucunuzdaki diğer oynanış sistemleriyle bağlantı kurduğunda tam potansiyeline ulaşır. Bölgeleri uyuşturucu satış sisteminize bağlayarak bir uyuşturucu bölgesini kontrol etmenin satış fiyatlarını artırmasını veya NPC müdahalesi riskini azaltmasını sağlayın. Çetelerin sahip olduğu bölgelerin indirimli emlak vergileri veya özel güvenli evler sunması için sistemi konut sisteminize bağlayın. Bölgelerin dispatch önceliğini etkilemesini sağlayarak polis sisteminizle entegre edin; çete kontrolündeki bölgelerdeki suçlar gecikmeli veya azaltılmış polis bildirimleri oluşturabilir ve bu da çete kontrolündeki mahallelerde polislik yapmanın gerçek dünyadaki zorluğunu simüle eder. Çete liderlerinin haritanın herhangi bir yerinden bölge durumunu kontrol edebilmesi, ele geçirme geçmişini görebilmesi ve savunma çabalarını koordine edebilmesi için bölge verilerini telefonunuza veya bildirim sisteminize aktarın. Sunucunuzda bir ilerleme veya itibar sistemi varsa, bölge kontrolünü daha üst düzey aktivitelerin ve ekipmanların kilidini açan çete itibarı kazanımlarına bağlayın. Bölge sahipliğine ne kadar çok sistem başvurursa, mekanizma o kadar etkili ve ilgi çekici hale gelerek bağımsız bir mini oyundan sunucunuzun suç roleplay ekosisteminin merkezi bir direğine dönüşür.