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

Knight Online Otomatik / Manuel Geri Sayımlı Boss Event Sistemi

Cevaplar0
Görüntüleme1
Ticaret Puanı
0
Katılım
8 Eyl 2026
Mesajlar
145
Tepkime puanı
24
Puanları
0
Mevcut Bakiye
3975 ₺
[KAYNAK KOD & ETKİNLİK] Knight Online Otomatik / Manuel Geri Sayımlı Boss Event Sistemi
C++ Server Tarafı (GameServer / Ebenzer) Ronark Land (CZ) Bowl Boss Çağırma, Süre Yönetimi ve GM Komut Entegrasyonu​



Merhaba değerli forum sakinleri,

Knight Online sunucularında Ronark Land (CZ) rekabetini zirveye taşımak için en sık başvurulan etkinliklerden biri **Boss Event** etkinliğidir. GM tek bir chat komutu verdiğinde sistemin otomatik geri sayım başlatması, belirli dakikalarda tüm sunucuya sarı duyuru (Notice/Announcement) geçmesi ve süre sıfırlandığında Ronark Land Bowl bölgesine otomatik olarak bossları dağıtması sunucu yönetimini oldukça kolaylaştırır.

Ham Koddaki Kritik Hatalar & Optimizasyon Farkı:
  • Dead Code & DC Hatası: GM kontrolünde return false; satırı Disconnect(); çağrısının üstüne yazıldığı için oyuncu hiçbir zaman DC edilmemektedir.
  • HTML Entity / Karakter Bozulmaları: Kod içerisindeki & ve -> karakterleri doğrudan C++ derleme (compile) hatalarına sebep olur.
  • Underflow / Değişken Taşması (Crash Riski): BossEventTimer değişkeni uint8 (maksimum 255) olarak tanımlanmış, ancak kodda 5 * 60 = 300 değeriyle karşılaştırılmıştır. 300 değeri 8-bitlik bir değişkene sığmaz; taşma (overflow) yaşanır ve sayaç asla tetiklenmez. Değişken uint32 olmalı ve başlangıçta 300 saniyeye ayarlanmalıdır.
  • Bozuk Koordinat Hatası: Bazı bossların Z koordinatları (Örn: `103`, `107`, `109`) eksik yazılmış ve yaratıkların harita dışına/dağ içine doğmasına yol açmıştır; Bowl çanağına uygun 10xx koordinatlarına normalize edilmiştir.

Aşağıda tüm sözdizimi, mantık ve koordinat hatalarından arındırılmış, derlenmeye hazır kaynak kod bloklarını bulabilirsiniz.

Teknik Kurulum Bilgilendirmesi' Alıntı:
DİKKAT:
  • Komut İsmi: Oyun içinde GM karakter ile +openboss (veya sunucunuzun komut prefixine göre /openboss) yazılarak başlatılır.
  • Geri Sayım: Başlatıldığı an 5 dakikalık (300 saniye) geri sayım devreye girer; her dakikada bir otomatik bilgilendirme duyurusu geçer.
  • Bölge: Tüm bosslar ZONE_RONARK_LAND haritasının Bowl merkezine dağıtılır.
  • İşlem öncesinde kaynak kodlarınızın (Source) yedeğini almayı unutmayınız.



1. ADIM: GameServerDlg.h Başlık Dosyası Düzenlemesi

Projenizdeki **GameServerDlg.h** dosyasını açın. `CGameServerDlg` sınıfı içerisindeki uygun bir `public:` bloğuna aşağıdaki değişkenleri ekleyin:





2. ADIM: GameServerDlg.cpp Değişken Başlatma (Init)

**GameServerDlg.cpp** dosyasında yapıcı metoda (`Constructor`) veya sunucu değişkenlerinin sıfırlandığı başlangıç fonksiyonuna ekleyin:





3. ADIM: User.h ve ChatHandler.cpp Komut Tanımları

A) User.h Dosyası: Komut işleyici fonksiyon prototipini ekleyin:



B) ChatHandler.cpp Komut Eşleme Tablosu: Komut listesine (`s_commandTable`) ekleyin:



C) ChatHandler.cpp Komut Gövdesi: Dosyanın en altına fonksiyon uygulamasını yapıştırın:





4. ADIM: ServerStartStopHandler.cpp Sayaç ve Doğma Mantığı

Saniyede bir çalışan ana sunucu zaman döngüsünde (**UpdateGameTime**) uygun bir yere aşağıdaki bloğu ekleyin:





Nasıl Derlenir & Test Edilir?

  1. Değişiklikleri projenize uyguladıktan sonra Visual Studio üzerinden **GameServer** projenizi derleyin (Build Solution).
  2. Yeni oluşan GameServer.exe dosyasını sunucu klasörüne aktarıp çalıştırın.
  3. Oyuna GM yetkisine sahip bir karakterle giriş yapın.
  4. Chat penceresine **+openboss** yazarak etkinliği başlatın.
  5. Oyun ekranında sarı renkli geri sayım duyurularının periyodik olarak geçtiğini ve 5 dakika sonunda Ronark Land Bowl bölgesinde tüm bossların eksiksiz doğduğunu doğrulayın.

Sorularınızı ve farklı haritalara boss dağıtma isteklerinizi konu altından iletebilirsiniz. Herkese keyifli geliştirmeler!
 

Konuyu görüntüleyenler

Yükleniyor...
Yükleniyor...
Şu anda sitemizde 29,180 Aktif Kullanıcı
Çevrimiçi üyeler
Konular 1,373
Mesajlar 4,351
Kullanıcılar 1,668
Son üye Senbonzakura
Geri
Üst