Jump to content
Araştır
  • Diğer seçenekler ...
Sonuçları bul ...
Sonuçları bul ...
espandot

Database / files / exe iliskisi nedir? 1299

Önerilen Mesajlar

Öncelikle herkeze merhaba developers ailesi.
Şimdi başlıkta özetledim burada konuyu açıyorum;

Her clıent ile her oyuna gıremıyoruz atıyorum bazı genel clıentler her oyuna giriş yapıyor ancak bazı clientler oyuna gırerken start dedıkten sonra kapat verıyor, bunun nedenını anlamak ve cozumlemek ıstıyorum ancak oncellıkle baslıkta verdıgım üçlünün nasıl calıstıgını bılmem lazım. Anlatabilecek yada özetleyebilecek arkadaşları beklıyorum

İletiyi paylaş


Link to post
Sitelerde Paylaş
Ahmetçiğim aldığın hata şu; muhtemelen kullandığın data ile ko.exe uyumsuz tblleri kendine göre şifrelemen gerekiyor. Kendi tbllerini başka clientte kullanıyorsanda sorun ui dosyalarının uyumsuzluğu.

İletiyi paylaş


Link to post
Sitelerde Paylaş
Ahmetçiğim aldığın hata şu; muhtemelen kullandığın data ile ko.exe uyumsuz tblleri kendine göre şifrelemen gerekiyor. Kendi tbllerini başka clientte kullanıyorsanda sorun ui dosyalarının uyumsuzluğu.

teşekkürler Orçun reyiz yalnız anlamadığım kısım TBL'leri şifrelemekten kastın Soacs tbl editör ile tblleri convert etmek mi? eğer buysa 4 çeşitede convert ederek denedım ancak yınede sorunu cozemedım

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı
teşekkürler Orçun reyiz yalnız anlamadığım kısım TBL'leri şifrelemekten kastın Soacs tbl editör ile tblleri convert etmek mi? eğer buysa 4 çeşitede convert ederek denedım ancak yınede sorunu cozemedım


Sorun tam olarak 4 çeşite convert etmende :D tbl editörden tblleri SOACS'a uyumlu olarak kaydedeceksin sadece. Eğer hala hata alıyorsan kullandığın ui_us .tbl ile o clientin içindeki ui_uslar uyuşmadığı için login ekranını göremiyorsun.

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı
tamamdır orcun tesekkur ederım sorunun ui_us'larla alakalı oldugunu sanmıyorum cunku clıent kendı orjınal serverınde login ekranı gelıyor


Onların datasıyla seninki farklı olduğu için olabilir mi güzel kardeşim :D

İletiyi paylaş


Link to post
Sitelerde Paylaş
Onların datasıyla seninki farklı olduğu için olabilir mi güzel kardeşim :D

çok üstü kapalı cevap veriyorsun yardımcı olmuyor orçuncum :D ama kafamda birşeyler oluştu uğraşmaya devam :) teşekkürler

İletiyi paylaş


Link to post
Sitelerde Paylaş
Admin

Bu Client ile her oyuna girebiliyorum diye bir mantık yok onu baştan belirteyim.
Sebebini şimdi anlatacağım bütün hepsine değinmiş oluruz böylelikle anlarsın.

Bu arada aşağıdaki anlatacağım şeyler KO için geçerlidir. Ayrıca öyle ahım şahım bilimsel terimler ile anlatmayacağım, anlayacağınız dilden anlatacağım.

İlk öncelikle Database yani bizim dilimizde Veritabanı nedir ve oyun ile ilişkisi nasıl oluyor?

Siz oyuna girdiğinizde eğer ki girdiğiniz sunucu otomatik üyelik ise yani direk Login ekranında ID PW yazdığınızda üyelik oluşturabiliyorsanız bu sizin girdiğiniz ID PW gibi bilgilerini o sunucunun tutması gerekiyor.

Peki sunucu ID PW gibi bilgileri neden tutmak zorunda ondan bahsedelim. Bir daha ki oyuna girdiğinde ID PW yazdığında sunucu bunu kontrol etmek zorunda. Doğru bilgiler mi girdin, bu üyelik yasaklanmış mı, bu üyelik şuan oyunda mı gibi kontrolleri sağlayacak. Bunları sağlamak için de bu bilgileri veritabanı içerisinde tutması gerekiyor.

Peki bu bilgilere erişmesi için nasıl bir yol izlemesi gerekiyor. Knight OnLine için SQL Server kullanıyoruz veritabanı için tabi daha başka veritabanı türleri var ama biz SQL kullanıyoruz. SQL içerisinde senin ID PW kontrolünü yapmak için Query komutları girmemiz gerekiyor ve bu komutlar ve kontroller baya uzun olduğu için tek bir Query komutu ile bitmeyeceği için SQL taraflı prosedür çağırıyoruz. Bu prosedür içerisinde gerekli kontrolleri yapıyoruz ona göre sunucu geriye bir değer alıyor yani oyuna girip girememe açısından ve bunu sana yönlendiriyor. Bütün geri kalan olaylar da aynı bu şekilde işlemektedir. Sunucu veritabanı içerisinde bilgileri depolar oradan erişim sağlar ve ona göre işlemler uygular. Hani yok benim elimde öyle bir sorunsuz veritabanı var, yok her şey fixlenmiş durumda dediklerine buradan inanmıyorsunuz. Veritabanı sadece verileri tutmaya yarıyor bu kadar basit. Veritabanı olayını anlattık şimdi gelelim diğer mantıklar nelerdir?

Her Client ile oyuna giremezsin sebebini anlatayım. KnightOnLine.exe Client içerisindeki gördüğün dosyaları okuyor bu dosyaların aslında bir okuma sırası mevcut. Örnek verelim;
TBL dosyalarının okuması neden değişiyor yada üst sürümlerde UI_IUS.tbl hatası alıyoruz bunun sebebi nedir?
Şimdi TBL dosyaları normal öbür gördüğün dosyalar gibi doğrudan açılmıyor bunlar şifrelenmiş durumdadır. Şifrelemek hem dosya boyutunu küçültüyor hem de başkalarının bu dosyayı açmasını engelliyor. (tabi herkesin değil hani işi bilen kişi uğraşıp bunun şifrelemesini çözebiliyor kırılmayacak sistem yok :) )
KnightOnLine.exe açıldığında dosyaları okumaya başlıyor ilk öncelikle ilk açıldığında hangi dosya lazım onu düşünelim. Oyunu açtık ilk karşımıza Logo geliyor değil mi NTTGame yazıyor önceden K2 Network yazardı hani girişteki cinematic Logo geliyor. İlk önce yani okuması gereken şey bu Logo'nun dosyaları oluyor. Onlar da UI klasörü içerisindeki co_logo_us.uif gibi bir dosyaydı hatırladığım kadarıyla. Sen böyle oyuna girmeye devam ettikçe karşına gelecek şeyleri yüklüyor ona göre işleme alıyor.

TBL okumasına gelelim neden bahsettik UI_US.tbl dosyasından değil mi?
Genellikle sürüm değiştirdiğimizde bu dosyanın hata verdiğini görürüz.
Sebebi ise şudur, KnightOnLine.exe dosyanın şifrelemesini açtıktan sonra ilk önce sütun bilgilerini alıyor dosya içerisinden bunlarda sütun sırasının hangi veri tipinde olacağı hakkında oluyor. Yine bir örnek verelim Item_Org_us.tbl için ilk sütun UInt32 okur ondan sonraki Byte gelir daha sonrası String gelir gibisinden.

Bundan önce şunu da anlatayım oyuna girişteki Logo yada Login penceresini okumak için UI_US.tbl içerisindeki sütun sırasına göre okuyor o dosyaların isimlerini yani Logo için atıyorum ilk sütundaki co_logo_us.tbl dosyasını alıyor.

Şimdi sütun bilgilerini okudu ve artık elimizde tüm UI_US.tbl var.
Ama söyle bir durum mevcut KO.exe içerisinde bu bilgileri tutması gereken bir alan lazım ve bunu struct ile tutuyor. Aşağıya kafamdan bir örnek yazıyorum.


struct _TABLE_UI
{
std::string m_szLogo;
std::string m_szLogin;
std::string m_szCharacterSelect;
std::string m_szInventory;
...
};


Eğer ki bizim struct içerisindeki dosya uzantısı olarak tuttuğumuz string değerleri UI_US.tbl içerisindeki sütun sayısı ile uyuşmazsa KnightOnLine.exe okuyamayacaktır ve patlayacaktır.

Aynı şekil diğer dosyalar içinde geçerlidir. Bütün dosyaların bir okuma sırası vardır yani hayal ederseniz sütun gibi düşünebilirsiniz.

Tabi bunun yanında girememe yada herhangi bir sunucuya ait KO.exe kullanamama gibi durumların başka sebepleri de mevcut.

Belki VERSION değerini değiştirmiş olabilirler, port değiştirmiş olabilirler, gelen giden paketleri şifrelemiş olabilirler, daha sayamayacağım tonla şey var. Bunların hepsi senin her Client ile girmeni engelliyor.

İletiyi paylaş


Link to post
Sitelerde Paylaş

×
×
  • Yeni Oluştur...