Deneme Başlık

#1
272 görüntülenme 14 yanıt Tarih: 03.09.2026 01:34:13
samikodalo

samikodalo

Community Manager
Konu Adeti
76
Mesaj Sayısı
10
Kayıt Tarihi
Mar 2026
Karakter
Tıkla
Bayrak
Jinno
Medeni Durum
Bekar
#1 · 03.09.2026 01:34:13 Konu Sahibi
Bu tarz konuları açması zaman alan bir işlem ve bu tarz konuları açmak yılların bilgi birikimini de beraberinde getiriyor. Bu konu da tabii ki de övünmüyorum ama şu noktada sitemimi bulundurmak istiyorum. Platformumuzda paylaşılan içerikler herkese açık ve isteyenlerin de kaynağı belirtmek şartıyla paylaşabileceğini sürekli belirtiyorum ama insanlara iyilik yaramıyor. Kendi yazdığım bir sistemi paylaşıyorum bakıyorum başka sitelerde kendisi yapmış gibi paylaşanlar, rehber hazırlıyorum kendisi yapmış gibi paylaşanlar. Bu yakındığım kesimin çok az olduğunu da belirtmek istiyorum; bu yüzden de olabildiğinde bu sektöre katkılarımı sunmak istiyorum. Gelelim konumuza. Bu konumuz daha çok sistem yazmak isteyen kişiler için hazırlanmıştır. Bir platform üzerinde bir şeyler geliştirmek istiyorsanız ilk önce o platformu iyice tanımanız gerek. Bu konu da en azından bu işe yarayacak. İmkan olsa tüm kodları tek tek açıklayabileceğimiz bir konu açardık ama kitap haline getirsek binlerce sayfa yer kaplar. Başlamadan önce şunu bilmelisiniz. Metin2'nin kaynak kodları 2 parçadan oluşur: Bunlar Server ve Client. Peki nedir bu server ve client? Çok oyunculu oyunlarda server oyuncuların bilgilerini hafıza da tutmak ve bağlı olan tüm clientlere bilgi göndermekle yükümlüdür. Client ise oyunumuzu oynadığımız program. Serverden gelen verileri bizim anlayacağımız şekilde gösterir. Mesela Turkmmo'dan örnek verelim. Tarayıcı ile bu siteyi açtınız ve size sunulan şeyleri görüyorsunuz. Bu kısım client oluyor. Server kısmı ise tüm herkesten gelen verileri işleyip, kaydedip başka bağlı olanlara göndermesini örnek gösterebiliriz. Metin2 gibi oyunlar da buna benzer bir yapı. Terimler de çok iyi değilim ama terimlerle sizi sıkmak istemiyorum. Merak edenler için socket programlama diye aratabilir. Metin2'nin kaynak kodlarının 2 parçadan oluştuğunu ve gerekli açıklamaları yaptım. Lakin bu her parçanın kendi arasında da parçaları mevcut. Client kısmı 16 ayrı parçaya ayrılmıştır. Tüm bu parçalar tek bir clienti oluşturur. Server kısmı ise 8 ayrı parçaya ayrılmıştır. Serverde ki bu parçalar ise game ve dbyi oluşturur. Ben server kısmının çoğuna baya hakimim ama cliente o kadar hakim değilim. Bu konu da sadece bildiğim şeyleri yazacağım. Bilmediğim yerleri bilmiyorum diye yazacağım. Eğer bilinmeyen yerlerle ilgili bilginiz varsa yorum olarak belirtirseniz konuya dahil ederim. Şimdi başlayalım Server kısmını incelemeye Not: Klasör yapısı filesten filese değişiklik gösterebilir. Ben kendi dosyalarımdan örnekliyorum! Server şu yapıda bulunur. common : Sabitlerin bulunduğu yer. db : Veritabanı işlemlerini yapan çekirdek. game : Veritabanından (db çekirdeğinden) ve clientlerden gelen bilgileri işleyen ve client ile bağlantısı olan yer. Yani oyunun kalbi. lzo : Packların şifrelenmesiyle alakalı bir şey. quest : Server filesimizde ./qc whistle.quest şeklinde komut yazıyoruz. qc'nin kaynak kodlarının bulunduğu yer burası. libgame : game'ye yardımcı dosyalar bulundurur. Daha çok envanter kutucukları ve item efsunları için. liblua : Server filesimizde bulunan lua (quest) kodlarının çalışması için. libpoly : Oyunda ki dönüşüm. libsql : Db için sql eklentisi. (veritabanı) libthecore : Bilinmiyor. Biz sadece common, db ve game içindeki dosyaları inceleyeceğiz. Sırasıyla incelemeye başlayalım o halde. Common içinde ki dosyalar; billing.h : bilinmiyor. cache.h : Adından da anlaşılayacağı üzere önbellek. d3dtype.h : Renklerle alakalı şeyler. noncopyable.h : Bilinmiyor. pool.h : Bilinmiyor. service.h : Definelerin tanımlı olduğu kısım. Makroları (#ifdef, #ifndef) tetikler. Genelde buraya sistemlerin sabitleri atanır. Örnek: #define CASRO2_OFFLINESHOP gibi. singleton.h : Bilinmiyor. teen_packet.h : Bilinmiyor. VnumHelper.h : Oyunda ki mevcut itemlerin vnumuna göre kategoriye ayrılması. Örneğin: 71136 ise cadılar bayramı ile alakalı item. building.h : Lonca binaları item_length.h : İtemlerle akalı bilgiler bulunur. Flaglar, efsunlar vs. length.h : Oyunun geneliyle alakalı bilgiler bulunur. Bir hesapta açılacak maks karakter miktarı, envanter boyutu, maks depolanan yang miktarı, karakter türleri, mob türleri, chat türleri vs. auction_table.h : Bilinmiyor. stl.h : Bilinmiyor. tables.h : Game ile db arasında burada tanımlanan bilgilere göre veri gönderir (packet). Örn: Oyuna giriş yapılan karakterin bilgileri ve eşyaları, protoların yüklenmesi vs. utils.h : Tam bilmiyorum ama kodlarda yazıları sayıya çeviren fonksiyonlar var. db içinde ki dosyalar; AuictionManager.cpp/h: Bilinmiyor. BlockCountry.cpp/h : Ülkelere göre engelleme. (Veritabanında belirtilen ip aralıklarına sahip olan yerlerden oyuna girişi yasaklar.) Cache.cpp/h : Önbellekleri bulundurur. Oyunda yerden item aldığınızda veya sattığınızda bunlar anlık olarak veritabanına yazılmaz. Hafıza da tutulur ve belli süre aralıklarla kayıt yapılır. Bu yüzden oyunu reboot attığınızda item kaybı varsa oyunu kapatırken yanlış işlem yaptığınız içindir. ClientManager.h: Bu header birden fazla cpp dosyası içindir. Bunlar sırayla; ClientManager.cpp : Burayı db çekirdeğinin kalbi diyebiliriz. game'den gelen verileri burada işler. ClientManagerBoot.cpp : Oyun açılırken veritabanında ki verileri çeker. (npcler de satılan eşyalar, protolar, loncalar, lonca binaları vs) ClientManagerEventFlag.cpp : player.quest tablosunda dwPID değeri 0 olanları çeker ve event flag olarak oyuna tanımlar. Örnek: ay ışığı eventi, exp_rate gibi. ClientManagerGuild.cpp : Loncaların oluşturulması, silinmesi, loncaya üyelerin eklenmesi gibi işlemlerin bulunduğu dosya. ClientManagerHorseName.cpp : Bunu açıklamaya gerek var mı bilmiyorum ama at şekeri ile atınıza isim verdiğinizde bu dosya da çalışır. ClientManagerLogin.cpp : Kullanıcı girişi yaparken, karakteri seçerken gereken bilgileri game gönderir. Game'den gelen bilgileri de veritabanına kayıt eder. Bu listede ki çoğu dosyanın görevi bu. Gelen verileri kayıt eder, veri gönderir. Bu dosya da kısaca oyuncu hesabı bilgilerini barındırır. ClientManagerParty.cpp : Oyunda kurduğumuz gruplar. ClientManagerPlayer.cpp : Oyuna girişte seçilen karakterin bilgilerini işler. İtemler, statüler vs. Config.cpp/h : Server filesinizin db içinde CONFIG, conf.txt gibi dosyalar var. Bunlarda ki verileri alır ve işler. CsvReader.cpp/h : Server filesinizde ki bulunan (item_names.txt, item_proto.txt, mob_names,txt, mob_proto.txt) dosyaların okunmasını için yardımcı dosya. Bu program her tab ile ayrılan şeyleri ayrı sütün olarak algılar. Excel programı ile de protoları açarsanız düzgün bir şekilde sütünlara ayrıldığını görebilirsiniz. (Bu dosyalar ClientManagerBoot.cpp'de okunur, işlenir ve game'ye gönderilir.) DBManager.cpp/h - DBManager_mainline.cpp : Sql sorguları için yazılmış. Grid.cpp/h : Envanterde bulunan kutucuklar var. Onlar için. Görevleri kısaca şu. Belirtilen kutu da item varsa bilgilerini alır. İtem olup olmama kontrolünü filan yapar. Detaylar için dosyayı inceleyebilirsiniz. GuildManager.cpp/h : Loncaların işlendiği yer. Boot aşamasında tüm loncaları veritabanından alır. Oyun kapanırken kayıt yapar vs. HB.cpp/h : Bilinmiyor. ItemAwardManager.cpp/h : player.item_award tablosunda ki verilerin okunması için. ItemIDRangeManager.cpp/h : player.item tablosunda itemlerin idsi var. Bu idlerin tanımlanması için. Lock.cpp/h : Bilinmiyor. LoginData.cpp/h : Giriş yapılan hesapla ilgili bazı bilgileri alır. Premium durumu vs. main.cpp/h : Bunu açıklamaya gerek var mı bilmiyorum ama c++ projelerinde main dosyası bulunur. Bu da onun için. Diğer tüm dosyaların kullanımını burada tanımlanır. db açıldığında sırasıyla yapılacak işlemler burada belirtilir. Marriage.cpp/h : Evlilik. Monarch.cpp/h : Bu kullanılmayan bir özellik olduğu için pas. MoneyLog.cpp/h : Oyuncunun yang log kayıtları. NetBase.cpp/h : Bilinmiyor. Peer.cpp/h : Bilinmiyor. PeerBase.cpp/h : Bilinmiyor. PrivManager.cpp/h : Oyunda drop açıyoruz. Bunla ilgili işlemler. ProtoReader.cpp/h : Protoların okunması için gerekli. QID.h : Bilinmiyor. stdafx.h : Bu da c++ projelerinde bulunan header dosyası. version.cpp : Versiyonla alakalı şey. Filesinizde VERSION.txt diye bir dosya vardır. Bu dosyayı oluşturup versiyonu yazdıran kodlar burada.
Bu konu en son 5 Eyl 2026 23:40 tarihinde düzenlendi.
samikodalo

samikodalo

Community Manager
Konu Adeti
76
Mesaj Sayısı
10
Kayıt Tarihi
Mar 2026
Karakter
Tıkla
Bayrak
Jinno
Medeni Durum
Bekar
#2 · 03.09.2026 01:41:38
[quote=samikodalo][b]Bu birf deneme yazıdır.[/b] Geri kalan yazılar[/quote]
samikodalo2

samikodalo2

Developer Leaders
Konu Adeti
24
Mesaj Sayısı
6
Kayıt Tarihi
Şub 2026
Karakter
Tıkla
Bayrak
Jinno
Medeni Durum
Bekar
#3 · 03.09.2026 01:46:00
[quote=samikodalo][b]Bu birf deneme yazıdır.[/b] Geri kalan yazılar[/quote] Teşekkürler
samikodalo2

samikodalo2

Developer Leaders
Konu Adeti
24
Mesaj Sayısı
6
Kayıt Tarihi
Şub 2026
Karakter
Tıkla
Bayrak
Jinno
Medeni Durum
Bekar
#4 · 03.09.2026 08:28:12
[img]https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRbfxXUuSYrzII7tryWt-bMuwRfzbTzvc3MNeslG8iblQ&s=10[/img]
samikodalo2

samikodalo2

Developer Leaders
Konu Adeti
24
Mesaj Sayısı
6
Kayıt Tarihi
Şub 2026
Karakter
Tıkla
Bayrak
Jinno
Medeni Durum
Bekar
#5 · 03.09.2026 08:32:48
[img]https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRbfxXUuSYrzII7tryWt-bMuwRfzbTzvc3MNeslG8iblQ&s=10[/img] bu resim test için gönderildi.
samikodalo2

samikodalo2

Developer Leaders
Konu Adeti
24
Mesaj Sayısı
6
Kayıt Tarihi
Şub 2026
Karakter
Tıkla
Bayrak
Jinno
Medeni Durum
Bekar
#6 · 03.09.2026 08:33:28
Buda deneme etiket mesajıdır. @samikodalo
1 2 3

Bu konuya yanıt verebilmek için giriş yapmalısın.

KULLANICI — KARAKTERLER
Discord
Resmi sunucu: duyurular, etkinlikler ve destek merkezi.
  • Resmi duyuru kanalları
  • Çekiliş ve ödüller
  • 7/24 destek
Sunucuya Katıl