- Mesaj
- 88
- Çözümler
- 2
- Beğeni
- 69
- Puan
- 679
- Ticaret Puanı
- 0
Selamlar,
Kullandığım filesta bulunan battlepass yazılabilecek en kötü şekilde yazılmıştı.
Başlıca sorunları aşağıdaki gibiydi:
1) Oyunda iki tip battlepass bulunuyordu, premium ve normal, premium implementasyonu tamamen normal bp kodları çoklanarak yapılmıştı. Öncelikle bunları refactor ederek ortak fonksiyonları battle_pass_common.h dosyasına toplayıp kod duplikasyonunun önüne geçtim:
2) Her battlepass görevi için tüm listeyi itere ederek kontroller yapılmaktaydı, bunun yerine bp initialize edilirken fastlookup tablelar oluşturdum:
3)Battlepass görev isimlerini db'de yazılan şekli ile ekranda gösteriyordu, bunun yerine vnumlarla mission spesifik locale textler kullandım:
4)Clientta her BP için ayrı ekran yapılmıştı bunları tek bir classtan türetecek hale getirdim (yarın bp 3-4-5 eklenmesi durumunda konfigüratif olarak yönetilebiliyor):
5) Battlepass oyuncu progresslerini oyuncu adı ile file system'e de txt dosyaları oluşturarak tutuyordu, bunu tamamen kaldırdım sebebi her 1 progresste dosya açılır, okunur, yazılır kapatılır işlemi gereğinden fazla IO yapmakta ve player name dediğiniz şey constant değil değişebilir, artık progress database de kendi tablosunda pid ile tutuluyor, aynı zamanda her yazma işlemi için db ye gidilmiyor, cache eklendi, belli sürede bir bp progressleri db ye flush ediliyor: (not: delete ettikten sonra replace kullanmaya gerek yok aslında):
6) Görevlere gruplama ve aynı anda yalnızca bir görev ilerletecek şekilde düzenleme yaptım (örneğin aynı görevden 2 tane olması durumunda yalnızca birini ilerletecek).
7)Battlepass görevleri güncellenemiyordu, yeni sistemde görevler anlık olarak tüm corelarda güncellenebiliyor.
8) Battlepass anlık olarak kapatıp açılabiliyor, herhangi bir sorun eksik fazla görev durumunda oyun içerisinden deaktif edilebilecek bir config haline getirildi.
9) Item silme görevlerinde eğer aynı itemden 2 farklı görev şeklinde 5-5 var ise 10 item silince yalnızca ilk görev geçiyordu, bu kısmı düzelttim.
Not1:
Yukarıda saydıklarımın yanında sayısız optimizasyon iyileştirme refactoring işlemi yapıldı. Yaparken nerdeyse her adımda @Reached destek oldu.
Not2:
UI yapmayı bilmediğim için ekranlar kötü duruyor farkındayım
Demo:
Kullandığım filesta bulunan battlepass yazılabilecek en kötü şekilde yazılmıştı.
Başlıca sorunları aşağıdaki gibiydi:
1) Oyunda iki tip battlepass bulunuyordu, premium ve normal, premium implementasyonu tamamen normal bp kodları çoklanarak yapılmıştı. Öncelikle bunları refactor ederek ortak fonksiyonları battle_pass_common.h dosyasına toplayıp kod duplikasyonunun önüne geçtim:

2) Her battlepass görevi için tüm listeyi itere ederek kontroller yapılmaktaydı, bunun yerine bp initialize edilirken fastlookup tablelar oluşturdum:


3)Battlepass görev isimlerini db'de yazılan şekli ile ekranda gösteriyordu, bunun yerine vnumlarla mission spesifik locale textler kullandım:

4)Clientta her BP için ayrı ekran yapılmıştı bunları tek bir classtan türetecek hale getirdim (yarın bp 3-4-5 eklenmesi durumunda konfigüratif olarak yönetilebiliyor):

5) Battlepass oyuncu progresslerini oyuncu adı ile file system'e de txt dosyaları oluşturarak tutuyordu, bunu tamamen kaldırdım sebebi her 1 progresste dosya açılır, okunur, yazılır kapatılır işlemi gereğinden fazla IO yapmakta ve player name dediğiniz şey constant değil değişebilir, artık progress database de kendi tablosunda pid ile tutuluyor, aynı zamanda her yazma işlemi için db ye gidilmiyor, cache eklendi, belli sürede bir bp progressleri db ye flush ediliyor: (not: delete ettikten sonra replace kullanmaya gerek yok aslında):


6) Görevlere gruplama ve aynı anda yalnızca bir görev ilerletecek şekilde düzenleme yaptım (örneğin aynı görevden 2 tane olması durumunda yalnızca birini ilerletecek).
7)Battlepass görevleri güncellenemiyordu, yeni sistemde görevler anlık olarak tüm corelarda güncellenebiliyor.
8) Battlepass anlık olarak kapatıp açılabiliyor, herhangi bir sorun eksik fazla görev durumunda oyun içerisinden deaktif edilebilecek bir config haline getirildi.
9) Item silme görevlerinde eğer aynı itemden 2 farklı görev şeklinde 5-5 var ise 10 item silince yalnızca ilk görev geçiyordu, bu kısmı düzelttim.
Not1:
Yukarıda saydıklarımın yanında sayısız optimizasyon iyileştirme refactoring işlemi yapıldı. Yaparken nerdeyse her adımda @Reached destek oldu.
Not2:
UI yapmayı bilmediğim için ekranlar kötü duruyor farkındayım

Demo: