- #1
Konu Sahibi
: serkankacan
[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
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):
BossEventTimerdeğişkeniuint8(maksimum 255) olarak tanımlanmış, ancak kodda5 * 60 = 300değ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şkenuint32olmalı 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
10xxkoordinatları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_LANDharitası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:
İçeriği görüntülemek için Giriş yapın veya Kayıt olun.
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:
İçeriği görüntülemek için Giriş yapın veya Kayıt olun.
3. ADIM: User.h ve ChatHandler.cpp Komut Tanımları
A)
User.h Dosyası: Komut işleyici fonksiyon prototipini ekleyin:
İçeriği görüntülemek için Giriş yapın veya Kayıt olun.
B)
ChatHandler.cpp Komut Eşleme Tablosu: Komut listesine (`s_commandTable`) ekleyin:
İçeriği görüntülemek için Giriş yapın veya Kayıt olun.
C)
ChatHandler.cpp Komut Gövdesi: Dosyanın en altına fonksiyon uygulamasını yapıştırın:
İçeriği görüntülemek için Giriş yapın veya Kayıt olun.
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:
İçeriği görüntülemek için Giriş yapın veya Kayıt olun.
Nasıl Derlenir & Test Edilir?
- Değişiklikleri projenize uyguladıktan sonra Visual Studio üzerinden **GameServer** projenizi derleyin (Build Solution).
- Yeni oluşan
GameServer.exedosyasını sunucu klasörüne aktarıp çalıştırın. - Oyuna GM yetkisine sahip bir karakterle giriş yapın.
- Chat penceresine **
+openboss** yazarak etkinliği başlatın. - 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!

