Metin2 Sistem Geliştirme Rehberi: C++ Tabanlı Yeni Sistem Ekleme Mantığı
Metin2 pvp server projelerinde hazır yapıları kullanmanın ötesine geçip oyuna tamamen özgün mekanikler (Örneğin: Yeni bir ticaret camı, uzaktan biyolog veya gelişmiş savaş geçişi sistemi) kazandırma sürecine Sistem Geliştirme adı verilir. Sistem geliştirme, oyunun tüm katmanlarına hakim olmayı gerektiren en üst düzey geliştiricilik (developer) aşamasıdır. Sadece Python veya Lua ile yazılan yüzeysel eklentilerin aksine, gerçek bir sistem oyunun çekirdeğine (Source) işlenmek zorundadır. Bu rehberde, Metin2'de C++ tabanlı yeni bir sistem geliştirmenin mantığını ve izlenmesi gereken teknik adımları ele alıyoruz.
1. Katman: Game Source (Sunucu Çekirdeği) Kodlaması
Geliştirmek istediğiniz sistemin tüm mantıksal hesaplamaları, güvenlik kontrolleri ve kuralları ilk olarak sunucu tarafında (
game) yazılır. Kodlama Süreci: Sunucu kaynak kodlarında, sistemin amacına uygun
.cpp ve .h dosyaları düzenlenir veya sıfırdan yeni sınıflar (class) oluşturulur. Örneğin karakterlerin hasarını etkileyen bir sistem yazıyorsanız char_battle.cpp, eşya kullanımını etkiliyorsa item.cpp dosyasına müdahale edersiniz. Sunucu tarafında yazılan kodların en önemli görevi hile kontrollerini yapmaktır; istemciden gelen her istek sunucu kodlarında doğrulanmadan işleme alınmaz.2. Katman: Paket İletişimi (Client-Server Veri Köprüsü)
Yazılan sistemin sunucu tarafı ile oyuncunun bilgisayarındaki istemci (client) tarafının birbiriyle eş zamanlı konuşabilmesi için paket iletişimi kurgulanmalıdır.
Packet Mimarisi: Hem Game Source hem de Client Source tarafında bulunan
packet.h dosyalarına sisteminiz için benzersiz birer başlık (Header) kodu tanımlanır (Örn: HEADER_CG_NEW_SYSTEM = 150). Oyuncu arayüzde bir butona tıkladığında, istemci bu header koduyla sunucuya bir paket gönderir. Sunucu paketi alır, işler ve sonucu yine bir paket yardımıyla istemciye geri postalar. Bu köprü kurulmadan sistemlerin stabil çalışması imkansızdır.3. Katman: Client Source ve Python Entegrasyonu
Paket köprüsü kurulduktan sonra, sunucudan gelen verilerin oyuncunun ekranına yansıtılabilmesi için istemci kaynak kodlarının (
Binary) ve Python arayüzünün düzenlenmesi gerekir.Son Aşamalar: Client Source tarafındaki
PythonNetworkStreamPhaseGame.cpp gibi dosyalarda sunucudan gelen paketler yakalanır. Yakalanan bu veriler, oyun motoru içerisinden Python scriptlerine (Arayüze) birer fonksiyon çağrısı olarak aktarılır. Python tarafında da bu veriler işlenerek tasarlanan görsel pencereler, butonlar veya efektler oyuncunun ekranında canlandırılır. Tüm bu katmanlar (C++, Paketler, Python) hatasız bir şekilde bir araya getirildiğinde, sistem geliştirme süreci başarıyla tamamlanmış olur.