mrtcnaslnts

Aktif üye
8 Ara 2019
608
2
44
28
1- Bir oyun çıkıyor mesela sürümü 1.0.0 sonra güncelleme geliyor ve sürüm mesela 1.0.5 oluyor. Ya da 1.2.4 oluyor yanı bu rakamlar neye göre belirleniyor. Yani mesela oyunda 5 adet değişiklik yapıldı ya da düzeltme diyelim bu durumda 1.0."5" mi oluyor. 8 tane düzeltme vs olsaydı bu durumda 1.0.8 mi olacaktı. Nasıl oluyor bu olay.

2-Bir de bu sürüm bilgisi oyun exelerinde de yazıyor o sürüm bilgisini nereye yazıyorlar.

3- Henüz çıkmamış oyunlarda da güncelleme notları paylaşılıyor mesela mağaza sayfalarında buna gerek var mı yani? henüz çıkmamış oyunu bir sürüm belirlemiş adam 1.0 diye 1 senede oyuna 10 tane güncelleme notu paylaşmış sayfadan sürüm 2.0 olmuş ne gerek var ki buna. Oyunda yine güncellemelerini düzenlemelerini yap sonra 1.0 olarak çıkarırsın üzerinde eklemeler yapacaksan yeni sürüm olarak güncellemeler yaparsın bu olayları pek kafam almadı açıkcası.

4- Ve bir de merak ettiğim konulardan bi tanesi çıkmış bir oyunda ilerleyen zamanlarda güncelleme paylaşılacağı zaman oyunun full paketlenmiş halini mi paylaşıyorlar onu da merak ediyorum. Oyunun boyutu 10 gb diyelim 100 mb güncelleme var. Biz o 100 mb güncellemeyi nasıl paketlicez nasıl yapcaz
 
Son düzenleme:
1- Bir oyun çıkıyor mesela sürümü 1.0.0 sonra güncelleme geliyor ve sürüm mesela 1.0.5 oluyor. Ya da 1.2.4 oluyor yanı bu rakamlar neye göre belirleniyor. Yani mesela oyunda 5 adet değişiklik yapıldı ya da düzeltme diyelim bu durumda 1.0."5" mi oluyor. 8 tane düzeltme vs olsaydı bu durumda 1.0.8 mi olacaktı. Nasıl oluyor bu olay.

2-Bir de bu sürüm bilgisi oyun exelerinde de yazıyor o sürüm bilgisini nereye yazıyorlar.

3- Henüz çıkmamış oyunlarda da güncelleme notları paylaşılıyor mesela mağaza sayfalarında buna gerek var mı yani? henüz çıkmamış oyunu bir sürüm belirlemiş adam 1.0 diye 1 senede oyuna 10 tane güncelleme notu paylaşmış sayfadan sürüm 2.0 olmuş ne gerek var ki buna. Oyunda yine güncellemelerini düzenlemelerini yap sonra 1.0 olarak çıkarırsın üzerinde eklemeler yapacaksan yeni sürüm olarak güncellemeler yaparsın bu olayları pek kafam almadı açıkcası.

4- Ve bir de merak ettiğim konulardan bi tanesi çıkmış bir oyunda ilerleyen zamanlarda güncelleme paylaşılacağı zaman oyunun full paketlenmiş halini mi paylaşıyorlar onu da merak ediyorum. Oyunun boyutu 10 gb diyelim 100 mb güncelleme var. Biz o 100 mb güncellemeyi nasıl paketlicez nasıl yapcaz
Minor Major gibi numaralar bunlar.
En baştaki sayı mesela en büyük güncelleme. Mesela Unreal 4.23 ten Unreal 5.0.1 nasıl geçildi ? Motor komple değişti. Tasarım anlamında, yenilik anlamında. Teknoloji atladı.
Lumen geldi
Nanite geldi
Chaos geldi
Arayüz değişti.

Büyük bir sıçrama olduğundan 4 olan rakam 5 oldu. Ortadaki ise önemli olan güncellemeler için. Mesela 5.0.0 diyelim. Fakat Skeletal Mesh Editor diye bir sistem geldi motora o zaman 5.1.0 olur. Küçük güncellemelerde ise en sağdaki rakam oynar. Mesela bir sorun düzeltildi. Genellikle çok sık güncelleme alındığında sağdaki oynar. Sağdaki 9 olursa ortadaki 1 olur bu sefer. Çünkü küçük güncellemenin de bir sonu var bir şey 9 defa güncelleme aldıysa 10. Güncellemede artık büyük bir şey haline gelmiştir o.
Öyleyse 5.0.9 dan 5.1.0 olur. Önemli olanlar zaten ilk iki rakam. Üçüncüye fazla ihtiyacın yok aslında.
Bunu çok kafaya takmaya da gerek yok bazı oyunlarda rakam kısmı uzun oluyor.

248.068.04 gibi rakamlar var. Çift haneli rakam kullan yeterli.

1.0 versiyonundan başlat mesela önemli güncellemelerinde 1.1 , 1.2 diye git. Çok büyük bir güncelleme yaptığını düşünüyorsan. Mesela oyununa Trade sistemi eklemişsindir ve oyuncular artık takas, alım-satım işlemleri yapmaya başlıyordur. Bunun yanında birkaç hata çözmüşsündür birkaç bug ve biraz tasarım değişmiştir. O zaman 2.0 yaparsın fakat 2.0 versiyonunda da bir şeyler eksik diyelim ve sen yayınlamadın. Eksikleri tamamlarsın bu sefer 2.1 diye yayınlanır o.

Versiyon sadece yayınlarken artırılmaz aslında. Bir üst seviyeye geçildiğini diğer ekiplerle paylaşmaya yarar. Github gibi yerlerde çoklu ekip olduğunda kullanılır. En stabil versiyon hangisiyse onu paylaşırsın öyle kalır.

Oyun exesini sen kendin yapabilirsin istersen. Mesela Visual Studio üzerinden en basitinden Visual Basic adlı dil ile bir windows form ya da bat dosyası üzerinde çalış.
Uygulamanın simgesini oyununun simgesi yap. Orada da aynı şekilde versiyonlar yer alıyor build yaparken.
Kodun ise şöyle olacak.

Process.start(my.application.executablepath/game.exe) Sen aslında bir Launcher yapmış olacaksın. Oyununun da ayrı bir exesi yani Unreal exesi olacak. Bu Launcher ise o exeyi çalıştıracak.
Launcher dediğim şey External Launcher. Bunu Steamde de yayınlayabiliyorsun. Play dediklerinde öncelikle Launcherin çalışmasını sağlayabilirsin. Böylece Metin 2 gibi dışarıdan Login olan oyunlar yapabilirsin. Ya da Lol Clienti gibi şeyler.

Buradaki verileri Config belgesine yazdırabilir ve Unreal ile bunları çekebilirsin.
Bunu Phyton veya C++ ya da C# ile de yapabilirsin. Fakat ben en basitinden VB.Net ile yaparım bunu. Launcherinin illa bir görüntüsü olmasına gerek yok arkaplanda çalıştırabilirsin. Sadece oyunu açmasını sağlayabilirsin. Ya da oyununun exesini direkt olarak Visual Studio da düzenleyebilirsin. O exe dediğin şey sadece bir parametreden oluşuyor. Aynı parametreleri Custom bir exe ile de çalıştırabilirsin.

Peki Launcheri Unrealden yapamaz mıyız ? Mesela küçük pencere ile başlar sonrasında büyütürüz. Yaparsın. Fakat Launcherin External olma sebebi var.

1- Anlık olarak oyun açılmadan önce güncelleme yapabilmesi
2- Dosya doğrulayabilmesi ve dış kaynaklarla bağlantı kurabilmesi. Mesela Firebase mesela herhangi bir web sitesi veya veritabanı ile. Ya da güncellemenin çekileceği bir sunucu ile bağlantı kurabilmesi. Unreal bunları yapamaz yapması için Plugin gerekebilir.
3- Oyun başlamadan önce konfigürasyon ayarları yapabilmesi. Unrealde genelde Config anlık olarak set edilemeyebiliyor bazı şeyler için.
4- Haber ve Duyuru köşesi. Mesela bunu Unreal ile yaparsın evet. Fakat anlık olarak Webten bir sayfayı çekmesi istenebilir. Yada Sunucuya yüklenmiş verilerinizin çekilmesi gerekebilir. Bunu direkt oyun içinden yapmak ne kadar mantıklı bilemem. Oyun içinde sadece oyunu ilgilendiren verilerin çekilmesi gerekir.
5- Patch yapmak için Launcher mantıklıdır. Böylece adamın versiyonu uyumsuz ile oyunu başlatmasını engellersin. Ama zaten girilmiş oyun içinde bu sorun oluşturabilir. Anlık Patch getiremeyebilirsin. Ya da uygunlanmamış olabilir. Fakat Launcher her açıldığında oyunu ve versiyonu kontrol etse uygun olmadığında oyunu başlatmaya izin verdirmezsin mesela. Senkron çalışır. Dosyalar doğrulanır ve tamamen dosyalar sunucudaki gibi ise, Version 1 artar. Böylece o versiyon uygun ise oyun açılır. Sunucudaki versiyon 1.1 ise sendeki 1.0 ise açtırmazsın. Elindeki versiyon sunucudaki ile eşit olmalı. Arkaplanda bunu kontrol eden bir kod olacak.

Mesela sadece senin external launcherinden oyun başlayacak fakat normalden başlamayacak diyelim. O zaman ne yapman gerek ?

VBNET Kodu:

Dim startInfo As New ProcessStartInfo()
startInfo.FileName = "C:\OyunKlasörü\MyGame.exe"
startInfo.Arguments = "-launcherKey=ÖzelAnahtarKeyin"
Process.Start(startInfo)

Unrealde de bir şeyler yapman gerek mesela Blueprint içerisinde GameInstancede ilk yapılacak iş bu anahtarı kontrol etmek.

Event Begin Play > Get Command Line > Branch > Contains > "launcherKey" (ÖzelAnahtarKeyin)
False ise QuitGame.



Yani daha başlamadan kapanacak oyun.
Fakat Launcherden başlatılırsa parametreye bu key girilecek dolayısıyla kontrol sırasında girildiği de belli olacak. Böyle olunca da oyun açılacak. Ve sadece Launcherden açmış olacaksın.

Sana Özel Video Hazırladım :

Bu içeriği görmek için üçüncü parti çerezlerine izin vermeniz gerekli.
Daha fazla detay için çerezler sayfasını ziyaret edin.

1742059463884.png

Mesela bu yöntem sayesinde adama öyle bir ban atarsın ki Clienti bile açamayabilir. Clienti açsa oyunu açamaz. Adamın anakart numarasını aldın diyelim ya da MAC adresini. Commandline ile kontrol edebilirsin ve açılışta o numara varsa adamı şutlarsın direkt. O Commandline Arrayını da sunucu ile senkron şekilde güncelleyebilirsin. Böylece orada MAC adresi bulunan cihazlar asla giriş yapamaz. Hatta Launcheri bile açamaz adam. Eğer internet bağlantısı varsa ve MAC adresi sunucudaki listede varsa Kapanır.


Son soruna da cevap vereyim. Oyunu Steamden paketleyip paylaşıyorsan eğer Unreal zaten her yaptığın işleme bir key atıyor. Misal veriyorum sen bir yere obje koydun onun keyi "A123B45C53" diyelim.
Steam bunları okuyor. Eğer key hala aynı ise onunla ilgili bir işlem gerçekleşmiyor. Farklı bir obje koyduysan onu güncelliyor. Yani aynı olan şeyler aynı kalırken farklı olanlar için yeni bir dosya upload edilir. Dolayısıyla sen full oyunu atacaksın o alması gereken yeri alıyor zaten merak etme. Sen yine 20 GB olan oyununu upload ettireceksin fakat o 19GB olan kısmı hızlıca Scan yapıp geçecek. Son farklı olan 1GB olan boyutu da 10 dakika içinde pakete dahil edip yükleyecek. Bitti gitti. Olay bu kadar. Yani oyuncuya yansıyan 1GB oldu o da sıkıştırıldı 300MB düştü. Açılınca 1GB oldu.
 
Son düzenleme:
Minor Major gibi numaralar bunlar.
En baştaki sayı mesela en büyük güncelleme. Mesela Unreal 4.23 ten Unreal 5.0.1 nasıl geçildi ? Motor komple değişti. Tasarım anlamında, yenilik anlamında. Teknoloji atladı.
Lumen geldi
Nanite geldi
Chaos geldi
Arayüz değişti.

Büyük bir sıçrama olduğundan 4 olan rakam 5 oldu. Ortadaki ise önemli olan güncellemeler için. Mesela 5.0.0 diyelim. Fakat Skeletal Mesh Editor diye bir sistem geldi motora o zaman 5.1.0 olur. Küçük güncellemelerde ise en sağdaki rakam oynar. Mesela bir sorun düzeltildi. Genellikle çok sık güncelleme alındığında sağdaki oynar. Sağdaki 9 olursa ortadaki 1 olur bu sefer. Çünkü küçük güncellemenin de bir sonu var bir şey 9 defa güncelleme aldıysa 10. Güncellemede artık büyük bir şey haline gelmiştir o.
Öyleyse 5.0.9 dan 5.1.0 olur. Önemli olanlar zaten ilk iki rakam. Üçüncüye fazla ihtiyacın yok aslında.
Bunu çok kafaya takmaya da gerek yok bazı oyunlarda rakam kısmı uzun oluyor.

248.068.04 gibi rakamlar var. Çift haneli rakam kullan yeterli.

1.0 versiyonundan başlat mesela önemli güncellemelerinde 1.1 , 1.2 diye git. Çok büyük bir güncelleme yaptığını düşünüyorsan. Mesela oyununa Trade sistemi eklemişsindir ve oyuncular artık takas, alım-satım işlemleri yapmaya başlıyordur. Bunun yanında birkaç hata çözmüşsündür birkaç bug ve biraz tasarım değişmiştir. O zaman 2.0 yaparsın fakat 2.0 versiyonunda da bir şeyler eksik diyelim ve sen yayınlamadın. Eksikleri tamamlarsın bu sefer 2.1 diye yayınlanır o.

Versiyon sadece yayınlarken artırılmaz aslında. Bir üst seviyeye geçildiğini diğer ekiplerle paylaşmaya yarar. Github gibi yerlerde çoklu ekip olduğunda kullanılır. En stabil versiyon hangisiyse onu paylaşırsın öyle kalır.

Oyun exesini sen kendin yapabilirsin istersen. Mesela Visual Studio üzerinden en basitinden Visual Basic adlı dil ile bir windows form ya da bat dosyası üzerinde çalış.
Uygulamanın simgesini oyununun simgesi yap. Orada da aynı şekilde versiyonlar yer alıyor build yaparken.
Kodun ise şöyle olacak.

Process.start(my.application.executablepath/game.exe) Sen aslında bir Launcher yapmış olacaksın. Oyununun da ayrı bir exesi yani Unreal exesi olacak. Bu Launcher ise o exeyi çalıştıracak.
Launcher dediğim şey External Launcher. Bunu Steamde de yayınlayabiliyorsun. Play dediklerinde öncelikle Launcherin çalışmasını sağlayabilirsin. Böylece Metin 2 gibi dışarıdan Login olan oyunlar yapabilirsin. Ya da Lol Clienti gibi şeyler.

Buradaki verileri Config belgesine yazdırabilir ve Unreal ile bunları çekebilirsin.
Bunu Phyton veya C++ ya da C# ile de yapabilirsin. Fakat ben en basitinden VB.Net ile yaparım bunu. Launcherinin illa bir görüntüsü olmasına gerek yok arkaplanda çalıştırabilirsin. Sadece oyunu açmasını sağlayabilirsin. Ya da oyununun exesini direkt olarak Visual Studio da düzenleyebilirsin. O exe dediğin şey sadece bir parametreden oluşuyor. Aynı parametreleri Custom bir exe ile de çalıştırabilirsin.

Peki Launcheri Unrealden yapamaz mıyız ? Mesela küçük pencere ile başlar sonrasında büyütürüz. Yaparsın. Fakat Launcherin External olma sebebi var.

1- Anlık olarak oyun açılmadan önce güncelleme yapabilmesi
2- Dosya doğrulayabilmesi ve dış kaynaklarla bağlantı kurabilmesi. Mesela Firebase mesela herhangi bir web sitesi veya veritabanı ile. Ya da güncellemenin çekileceği bir sunucu ile bağlantı kurabilmesi. Unreal bunları yapamaz yapması için Plugin gerekebilir.
3- Oyun başlamadan önce konfigürasyon ayarları yapabilmesi. Unrealde genelde Config anlık olarak set edilemeyebiliyor bazı şeyler için.
4- Haber ve Duyuru köşesi. Mesela bunu Unreal ile yaparsın evet. Fakat anlık olarak Webten bir sayfayı çekmesi istenebilir. Yada Sunucuya yüklenmiş verilerinizin çekilmesi gerekebilir. Bunu direkt oyun içinden yapmak ne kadar mantıklı bilemem. Oyun içinde sadece oyunu ilgilendiren verilerin çekilmesi gerekir.
5- Patch yapmak için Launcher mantıklıdır. Böylece adamın versiyonu uyumsuz ile oyunu başlatmasını engellersin. Ama zaten girilmiş oyun içinde bu sorun oluşturabilir. Anlık Patch getiremeyebilirsin. Ya da uygunlanmamış olabilir. Fakat Launcher her açıldığında oyunu ve versiyonu kontrol etse uygun olmadığında oyunu başlatmaya izin verdirmezsin mesela. Senkron çalışır. Dosyalar doğrulanır ve tamamen dosyalar sunucudaki gibi ise, Version 1 artar. Böylece o versiyon uygun ise oyun açılır. Sunucudaki versiyon 1.1 ise sendeki 1.0 ise açtırmazsın. Elindeki versiyon sunucudaki ile eşit olmalı. Arkaplanda bunu kontrol eden bir kod olacak.

Mesela sadece senin external launcherinden oyun başlayacak fakat normalden başlamayacak diyelim. O zaman ne yapman gerek ?

VBNET Kodu:

Dim startInfo As New ProcessStartInfo()
startInfo.FileName = "C:\OyunKlasörü\MyGame.exe"
startInfo.Arguments = "-launcherKey=ÖzelAnahtarKeyin"
Process.Start(startInfo)

Unrealde de bir şeyler yapman gerek mesela Blueprint içerisinde GameInstancede ilk yapılacak iş bu anahtarı kontrol etmek.

Event Begin Play > Get Command Line > Branch > Contains > "launcherKey" (ÖzelAnahtarKeyin)
False ise QuitGame.



Yani daha başlamadan kapanacak oyun.
Fakat Launcherden başlatılırsa parametreye bu key girilecek dolayısıyla kontrol sırasında girildiği de belli olacak. Böyle olunca da oyun açılacak. Ve sadece Launcherden açmış olacaksın.

Sana Özel Video Hazırladım :

Bu içeriği görmek için üçüncü parti çerezlerine izin vermeniz gerekli.
Daha fazla detay için çerezler sayfasını ziyaret edin.

Ekli dosyayı görüntüle 607

Mesela bu yöntem sayesinde adama öyle bir ban atarsın ki Clienti bile açamayabilir. Clienti açsa oyunu açamaz. Adamın anakart numarasını aldın diyelim ya da MAC adresini. Commandline ile kontrol edebilirsin ve açılışta o numara varsa adamı şutlarsın direkt. O Commandline Arrayını da sunucu ile senkron şekilde güncelleyebilirsin. Böylece orada MAC adresi bulunan cihazlar asla giriş yapamaz. Hatta Launcheri bile açamaz adam. Eğer internet bağlantısı varsa ve MAC adresi sunucudaki listede varsa Kapanır.


Son soruna da cevap vereyim. Oyunu Steamden paketleyip paylaşıyorsan eğer Unreal zaten her yaptığın işleme bir key atıyor. Misal veriyorum sen bir yere obje koydun onun keyi "A123B45C53" diyelim.
Steam bunları okuyor. Eğer key hala aynı ise onunla ilgili bir işlem gerçekleşmiyor. Farklı bir obje koyduysan onu güncelliyor. Yani aynı olan şeyler aynı kalırken farklı olanlar için yeni bir dosya upload edilir. Dolayısıyla sen full oyunu atacaksın o alması gereken yeri alıyor zaten merak etme. Sen yine 20 GB olan oyununu upload ettireceksin fakat o 19GB olan kısmı hızlıca Scan yapıp geçecek. Son farklı olan 1GB olan boyutu da 10 dakika içinde pakete dahil edip yükleyecek. Bitti gitti. Olay bu kadar. Yani oyuncuya yansıyan 1GB oldu o da sıkıştırıldı 300MB düştü. Açılınca 1GB oldu.
Harika bir anlatım olmuş hocam elinize sağlık. Launcher kullanmadan patch kontrolü nasıl yapabiliriz bilginiz var mı? Mesela launcherı olmayan büyük oyunlarda güncelleme geldiğinde oyundaki kişilere feedback geliyor.
 
Harika bir anlatım olmuş hocam elinize sağlık. Launcher kullanmadan patch kontrolü nasıl yapabiliriz bilginiz var mı? Mesela launcherı olmayan büyük oyunlarda güncelleme geldiğinde oyundaki kişilere feedback geliyor.
O Oyunların içerisinde kendi Web arayüzleri var. Ya da JSON gibi motor içinde eklentisi olan şeylerle internet üzerinden veri çekiyorlar.
Mesela senin oyunun versiyonu 1.0 ve senin websiten var ya da sunucun. Orada da versiyon 1.0 diyelim.
Sonra sen gittin siteye update attın, yani oyunu aldın güncelledin ve sunucuya attın fakat oyuncular anlık olarak oyunda diyelim.
Versiyonu tuttun sitede 1.1 yaptın.
Oyun da lobideyken tuttu çekti JSON ile bu veriyi. Baktı kendi versiyonu 1.0 ama sunucuda 1.1
Bu sefer bildirim atabilirsin. Hostingversion>currentversion dersin eğer sonuç TRUE ise önceden hazırladığın yeni bir versiyon mevcuttur bildirimini atarsın. Ya da bir sistem yaparsın bildirim de siteden çekilir. Siteye ne yazarsan onu yazar oyunculara. O bilgiyi de JSON ile çekersin.

Mesela siteye versiyon girersin ve açıklamaya şunu yazarsın : Önemli bir güncelleme mevcut.
Oyunun versiyon farkını görüp updatenotify widgetini aktif edebilir. Widget Texti ise tamamen JSON ile o siteye yazdığın yazıyı çekecektir. Böylelikle hem versiyon değişti hem güncelleme widgeti çıktı hem de siteye yazdığın mesaj alındı.

Ya da sitende bir arayüz yaparsın güncelleme bilmem ne diye button şeklinde, Oyununda da bir web arayüzü eklentisi olur. Webview gibi. O Webview ise sadece o buttonun olduğu kısmı çeker. Böylece sitedeki update yazısını oyununa widgetine çekmiş oluyorsun web ile linkle beraber. Adam oraya tıkladığında ise tarayıcıda siteye yönlendirebilir. Ya da yeni versiyonun indirileceği yere yönlendirebilir.
Yine bir eklenti ile ya da kendi kodların ile yazmış olduğun bir sistem olabilir. Oyun açıldığında patch attırabilirsin.
Upload/Download yapan bir sisteme ihtiyacın var. Yeni dosyaları oyunun kurulu olduğu yere atıp sunucudaki ile doğrulayacak bir sistem yazman gerek.
Versiyonu farklı olan oyuncular birbiri ile oynamamalı.
Yeni versiyon geldiğinde anlık olarak yeni maç bulmalar vs kilitlenmeli.
Oyuncuların oyunu bittikten sonra yeni oyuna girmemeliler. Zaten o an oyunda olanların versiyonu aynı olduğundan güncel versiyon problemiyle karşılaşmazlar. Ancak çıkıp girdiklerinde karşılaşırlar. İşte böyle bir durumda da oyunu kitlemen lazım.
Ancak versiyonları sitedekiyle eşitse kilit açılmalı. Yani bu da demek oluyor ki update yapıp patch atmışlar.

Unrealde patch sistemi yazmak istiyorsan C++ kullanman gerekir. Blueprint kullanıyorsan plugin bulmalısın. Ya da Blueprintle çalışırsın yine ama o kısmı C++ ile yazıp entegre edersin.
Unreal içinde benim bildiğim epicin kendi yaptığı plugin var HTTP işlemleri için. GET bilgisi ile versiyonu çekebilirsin mesela. Fakat dosya indirme kısmını yazman gerekir bu sefer de :)
 
Son düzenleme:
  • Beğen
Tepkiler: kinglord34
O Oyunların içerisinde kendi Web arayüzleri var. Ya da JSON gibi motor içinde eklentisi olan şeylerle internet üzerinden veri çekiyorlar.
Mesela senin oyunun versiyonu 1.0 ve senin websiten var ya da sunucun. Orada da versiyon 1.0 diyelim.
Sonra sen gittin siteye update attın, yani oyunu aldın güncelledin ve sunucuya attın fakat oyuncular anlık olarak oyunda diyelim.
Versiyonu tuttun sitede 1.1 yaptın.
Oyun da lobideyken tuttu çekti JSON ile bu veriyi. Baktı kendi versiyonu 1.0 ama sunucuda 1.1
Bu sefer bildirim atabilirsin. Hostingversion>currentversion dersin eğer sonuç TRUE ise önceden hazırladığın yeni bir versiyon mevcuttur bildirimini atarsın. Ya da bir sistem yaparsın bildirim de siteden çekilir. Siteye ne yazarsan onu yazar oyunculara. O bilgiyi de JSON ile çekersin.

Mesela siteye versiyon girersin ve açıklamaya şunu yazarsın : Önemli bir güncelleme mevcut.
Oyunun versiyon farkını görüp updatenotify widgetini aktif edebilir. Widget Texti ise tamamen JSON ile o siteye yazdığın yazıyı çekecektir. Böylelikle hem versiyon değişti hem güncelleme widgeti çıktı hem de siteye yazdığın mesaj alındı.

Ya da sitende bir arayüz yaparsın güncelleme bilmem ne diye button şeklinde, Oyununda da bir web arayüzü eklentisi olur. Webview gibi. O Webview ise sadece o buttonun olduğu kısmı çeker. Böylece sitedeki update yazısını oyununa widgetine çekmiş oluyorsun web ile linkle beraber. Adam oraya tıkladığında ise tarayıcıda siteye yönlendirebilir. Ya da yeni versiyonun indirileceği yere yönlendirebilir.
Yine bir eklenti ile ya da kendi kodların ile yazmış olduğun bir sistem olabilir. Oyun açıldığında patch attırabilirsin.
Upload/Download yapan bir sisteme ihtiyacın var. Yeni dosyaları oyunun kurulu olduğu yere atıp sunucudaki ile doğrulayacak bir sistem yazman gerek.
Versiyonu farklı olan oyuncular birbiri ile oynamamalı.
Yeni versiyon geldiğinde anlık olarak yeni maç bulmalar vs kilitlenmeli.
Oyuncuların oyunu bittikten sonra yeni oyuna girmemeliler. Zaten o an oyunda olanların versiyonu aynı olduğundan güncel versiyon problemiyle karşılaşmazlar. Ancak çıkıp girdiklerinde karşılaşırlar. İşte böyle bir durumda da oyunu kitlemen lazım.
Ancak versiyonları sitedekiyle eşitse kilit açılmalı. Yani bu da demek oluyor ki update yapıp patch atmışlar.

Unrealde patch sistemi yazmak istiyorsan C++ kullanman gerekir. Blueprint kullanıyorsan plugin bulmalısın. Ya da Blueprintle çalışırsın yine ama o kısmı C++ ile yazıp entegre edersin.
Unreal içinde benim bildiğim epicin kendi yaptığı plugin var HTTP işlemleri için. GET bilgisi ile versiyonu çekebilirsin mesela. Fakat dosya indirme kısmını yazman gerekir bu sefer de :)
Patchle ilgili bilgiğiniz plugin ya da tutorial var mı? Siz oyununuzda launcher mi kullanıyorsunuz?
 
Patchle ilgili bilgiğiniz plugin ya da tutorial var mı? Siz oyununuzda launcher mi kullanıyorsunuz?
Launcheri şey için kullanıyorum, ekrana resim geliyor ya bazı oyunlar açılırken. Splash gibi.
Onu yapmak için kullanıyorum.
Patch ile ilgili bir plugin bilmiyorum yani ben patch işlemi yapacak olsam External bir Launcher ile yaparım bunu. Oyun içinde patch yapma işlemi sadece işleri daha komplike hale getirir. Fakat oyun içinde yeni bir güncelleştirme olduğuna dair bir bildirim yollatabilirsin.
Visual Basic ile bir Launcher tasarlayıp her girişte bir patch kontrolü sağlanabilir. Her durumda bir sunucu lazım olacak size.
Eski versiyonları sunucuda fazla tutmayacaksanız 100GB alanı olan, trafik sayısı ortalama düzeyde bir sunucu şart.
Aylık en fazla 3-4K civarı tutar. En azından başlangıçta böyle yaparsınız.
Visual Basic ile patch işlemini yapmak en fazla 15 dakikanızı alacak kısa bir kod ile halledilir.




Bu tarz üç adet sağlam patcher sistem var. Fakat Chunk okuyorlar. Chunkları bir sunucuya upload etmeniz gerekebilir. Assetleri Chunk şeklinde ayırmak ve upload etmek nasıl olur bilgim yok. Fakat Chunk eşleştirmesi yaparak yeni versiyonu anlık oyun içinde kurabilecek eklentiler bunlar.
Status kısmında ise ilerleme aşamasını gösterebilirsin. Sonuç kısmında ise Success ya da Fail gibi şeyleri gösterebilirsin. Örneğin bir ProgressBar ile status kısmını yansıtırsın işlem bitince başarılı ise Patching Complated. Mesela.
Başarısız ise Patching Failed! Gibi.
Ayrıca bu eklentiler üst düzey JSON okuma ve HTTP Request sağlıyor. Yani Web üzerinde bilgi çekme bilgi okuma iletme gibi şeyler yapabiliyorsunuz.

Ayrıca elemanın biri bir eklenti ile External Launcher tasarlamış fakat ne kadar External ?
Aslında External değil fakat oyun ilk çalıştığında devreye giren bir şey büyük ihtimalle. Lol Clienti gibi bir şey yapmış.


Son linki tavsiye ederim. Çünkü size kendi hostingini sağlıyor. Ayrıca Google Drive gibi şeyleri de kullanabiliyorsunuz. Sistem büyük oranda hazır sadece dökümantasyonu okuyup düzgün uygulamak lazım gerisi basit iş. Büyük ihtimalle size kendi sunusundan bir üyelik verecek. Siz de oradan bir hesap açacaksınız ve sunucunuz olacak. Bu sunucu da zaten bu sistem için kurulmuştur. Orta seviyeli oyunlarınızın Chunkunu okuyup arkaplanda bağlantı sağlayıp versiyon kontrolü yapan bir sistem. Yani böyle bir şeye kalkışacaksanız son verdiğim linki incelemeniz önerilir. İşinizi %90 kolaylaştıracaktır.

Aslında Launcher içinden de patch yapılmaz. Patcher adında ekstra bir uygulama olur. Ve Launcher açılırken önce patcheri açar. Çünkü Launcherin de güncellenmesi gerekebilir.
Bu uygulama da tam olarak böyle çalışıyor. SelfPatcher özelliği bulunuyor.

Tamamen oyun içi bir şey istiyorsan en basitiyle bu var.

 
Son düzenleme:
  • Beğen
Tepkiler: kinglord34
Launcheri şey için kullanıyorum, ekrana resim geliyor ya bazı oyunlar açılırken. Splash gibi.
Onu yapmak için kullanıyorum.
Patch ile ilgili bir plugin bilmiyorum yani ben patch işlemi yapacak olsam External bir Launcher ile yaparım bunu. Oyun içinde patch yapma işlemi sadece işleri daha komplike hale getirir. Fakat oyun içinde yeni bir güncelleştirme olduğuna dair bir bildirim yollatabilirsin.
Visual Basic ile bir Launcher tasarlayıp her girişte bir patch kontrolü sağlanabilir. Her durumda bir sunucu lazım olacak size.
Eski versiyonları sunucuda fazla tutmayacaksanız 100GB alanı olan, trafik sayısı ortalama düzeyde bir sunucu şart.
Aylık en fazla 3-4K civarı tutar. En azından başlangıçta böyle yaparsınız.
Visual Basic ile patch işlemini yapmak en fazla 15 dakikanızı alacak kısa bir kod ile halledilir.




Bu tarz üç adet sağlam patcher sistem var. Fakat Chunk okuyorlar. Chunkları bir sunucuya upload etmeniz gerekebilir. Assetleri Chunk şeklinde ayırmak ve upload etmek nasıl olur bilgim yok. Fakat Chunk eşleştirmesi yaparak yeni versiyonu anlık oyun içinde kurabilecek eklentiler bunlar.
Status kısmında ise ilerleme aşamasını gösterebilirsin. Sonuç kısmında ise Success ya da Fail gibi şeyleri gösterebilirsin. Örneğin bir ProgressBar ile status kısmını yansıtırsın işlem bitince başarılı ise Patching Complated. Mesela.
Başarısız ise Patching Failed! Gibi.
Ayrıca bu eklentiler üst düzey JSON okuma ve HTTP Request sağlıyor. Yani Web üzerinde bilgi çekme bilgi okuma iletme gibi şeyler yapabiliyorsunuz.

Ayrıca elemanın biri bir eklenti ile External Launcher tasarlamış fakat ne kadar External ?
Aslında External değil fakat oyun ilk çalıştığında devreye giren bir şey büyük ihtimalle. Lol Clienti gibi bir şey yapmış.


Son linki tavsiye ederim. Çünkü size kendi hostingini sağlıyor. Ayrıca Google Drive gibi şeyleri de kullanabiliyorsunuz. Sistem büyük oranda hazır sadece dökümantasyonu okuyup düzgün uygulamak lazım gerisi basit iş. Büyük ihtimalle size kendi sunusundan bir üyelik verecek. Siz de oradan bir hesap açacaksınız ve sunucunuz olacak. Bu sunucu da zaten bu sistem için kurulmuştur. Orta seviyeli oyunlarınızın Chunkunu okuyup arkaplanda bağlantı sağlayıp versiyon kontrolü yapan bir sistem. Yani böyle bir şeye kalkışacaksanız son verdiğim linki incelemeniz önerilir. İşinizi %90 kolaylaştıracaktır.

Aslında Launcher içinden de patch yapılmaz. Patcher adında ekstra bir uygulama olur. Ve Launcher açılırken önce patcheri açar. Çünkü Launcherin de güncellenmesi gerekebilir.
Bu uygulama da tam olarak böyle çalışıyor. SelfPatcher özelliği bulunuyor.

Tamamen oyun içi bir şey istiyorsan en basitiyle bu var.

Peki steamde de bu durum aynı mı? Mesela senin oyunun üzerinden ilerleyelim. A ile B oyuncusu oyunda diyelim ve sen o esnada güncelleme attın ve bunlar hala oyunu oynamaya devam ediyor. C oyuncusu steamden oyunun son sürümünü güncelledi ve oyuna girdi. A ile B oyuncusunun serverına girebiliyor mu? Ya da A ile B oyuncusu C oyuncusunun serverına girebiliyor mu? Bu durumlarda nasıl bir şey oluyor?
 
Peki steamde de bu durum aynı mı? Mesela senin oyunun üzerinden ilerleyelim. A ile B oyuncusu oyunda diyelim ve sen o esnada güncelleme attın ve bunlar hala oyunu oynamaya devam ediyor. C oyuncusu steamden oyunun son sürümünü güncelledi ve oyuna girdi. A ile B oyuncusunun serverına girebiliyor mu? Ya da A ile B oyuncusu C oyuncusunun serverına girebiliyor mu? Bu durumlarda nasıl bir şey oluyor?
Öncelikle benim oyunda sonradan oyuna katılma diye bir şey yok. Çıkan adam da geri giremez zaten. Oyun kurulduktan sonra aynı lol gibi o şekilde oynanmak zorunda.
Lobiye katılabilir mi peki ? Hayır katılamaz. Çünkü Advanced Steam Sessions kullanıyorum. Bunu kullanırsan sürümü farklı olan oyuncu o lobiyi göremez.
 
  • Beğen
Tepkiler: kinglord34
Öncelikle benim oyunda sonradan oyuna katılma diye bir şey yok. Çıkan adam da geri giremez zaten. Oyun kurulduktan sonra aynı lol gibi o şekilde oynanmak zorunda.
Lobiye katılabilir mi peki ? Hayır katılamaz. Çünkü Advanced Steam Sessions kullanıyorum. Bunu kullanırsan sürümü farklı olan oyuncu o lobiyi göremez.
Advanced Steam Sessions eklentisinin bu özelliğini bilmiyordum teşekkürler.