İçeriğe geç
Türkiye'nin SRO tanıtım & topluluk platformu

Knight Online Klan Bankası (Clan Warehouse / Bank) Sistem Mimarisi

Cevaplar0
Görüntüleme2
Ticaret Puanı
0
Katılım
8 Eyl 2026
Mesajlar
145
Tepkime puanı
24
Puanları
0
Mevcut Bakiye
3975 ₺
[KAYNAK KOD & GELİŞTİRME] Knight Online Klan Bankası (Clan Warehouse / Bank) Sistem Mimarisi
CUser (ClanWarehouse.cpp) Üzerinden Klan Deposu Paket Protokolü, Eşya Giriş/Çıkış Yönetimi ve Güvenlik Filtreleri​



Merhaba değerli forum sakinleri,

Knight Online sunucularında (v19xx, v2xxx ve üzeri sourceler) klan üyelerinin ortak eşya ve kaynak havuzu oluşturabilmesi için en çok tercih edilen sistemlerin başında **Klan Bankası (Clan Warehouse)** gelir.

Klan bankası süreçlerinde oyuncuların eşya kopyalama (dupe), klan bankası açıkken Genie çalıştırma veya aynı anda birden fazla üyenin aynı slottaki eşyayı çekmesi gibi senkronizasyon açıklarını engellemek adına paket protokolü ve durum kontrolleri titizlikle kurgulanmalıdır.

Ham Koddaki Eksikler & Optimizasyon Farkı:
  • Klan ve Yetki Kontrolü Eksikliği: Karakterin bir klana mensup olup olmadığı (isInClan()), klanın depoyu açmaya yetecek seviye/dereceye ulaşıp ulaşmadığı veya rütbe yetkisi kontrol edilmediğinde klanı olmayan oyuncular paketi manipüle edebilir.
  • Eşzamanlı İşlem (Concurrent Lock) Riski: İki klan üyesi aynı anda depoyu açıp aynı eşyayı çekmeye çalıştığında dupe açığı oluşmaması için klan seviyesinde bir `Mutex` veya `m_bClanBankInUse` bayrağı gereklidir.
  • Genel Güvenlik Filtreleri: Oyuncu ölü, ticarette (Trade), pazarda (Merchant) veya etkinlik bölgesindeyken deponun açılması engellenmelidir.

Aşağıda hem sözdizimi tamamlanmış ana işleyiciyi (ClanWareHouseProcess) hem de eşzamanlılık ve yetki kontrolleri eklenmiş optimize C++ kod bloğunu bulabilirsiniz.

Teknik Güvenlik Uyarısı' Alıntı:
DİKKAT (Dupe ve Çakışma Önleme):
  • Klan bankasında eşya giriş (ClanBankInput) ve çıkış (ClanBankOutPut) işlemleri sırasında ilgili klanın veri bloğu mutlaka kilitlenmeli (`GuardLock`) veya eşya işlem kuyruğu senkron çalıştırılmalıdır.
  • Oyuncu klansızsa veya klan lideri/asistanı dışındaki üyelere eşya çekme kısıtlaması getirilecekse op-kod ayrımında kontrol edilmelidir.
  • İşlem öncesinde **GameServer** kaynak kodlarınızın yedeğini almayı unutmayınız.



Hatasız & Güvenlik Korumalı ClanWarehouse.cpp Kodu

Kaynak kodunuzda **ClanWarehouse.cpp** (veya klan deposunu yönettiğiniz kaynak dosya) içerisindeki bloğu aşağıdaki gibi yapılandırın:





Neden Bu Mimari Tercih Edilmelidir?

  1. Klansız Kullanıcı İstismarı Engellendi: Paket manipülasyonu ile klanda olmayan karakterlerin sahte klan bankası sorgusu gönderip sunucu belleğini çökertmesi önlenir.
  2. Eksik Kod ve Süslü Parantez Kapanışları Giderildi: Yarım kalan anahtar-değer (switch-case) bloğu tamamlanarak derleme hataları ortadan kaldırıldı.
  3. Hile Bildirimi (Default Trace): Tanımlanan op-kodlar haricinde sunucuya bilinmeyen/sahte veri basan şüpheli istemciler log ekranına yazdırılır.



Nasıl Uygulanır & Test Edilir?

  1. Visual Studio üzerinden projenizi açıp ilgili fonksiyonu yukarıdaki temiz kodla güncelleyin.
  2. GameServer projenizi **Build / Rebuild** ederek yeni GameServer.exe dosyasını derleyin.
  3. Oyuna klanı olan ve olmayan iki farklı karakterle giriş yapın.
  4. Klansız karakterle banka açmaya çalışarak erişim engeli aldığınızı doğrulayın.
  5. Klan üyesi karakterle Genie açıkken bankanın açılmadığını, Genie kapatıldığında ise eşya alım ve aktarım işlemlerinin sorunsuz çalıştığını test edin.

Sorularınızı ve eşya giriş-çıkış fonksiyon detaylarını konu altından paylaşabilirsiniz. Herkese keyifli kodlamalar!
 

Konuyu görüntüleyenler

Yükleniyor...
Yükleniyor...
Şu anda sitemizde 28,895 Aktif Kullanıcı
Çevrimiçi üyeler
Konular 1,373
Mesajlar 4,353
Kullanıcılar 1,670
Son üye Canbey
Geri
Üst