- Mesaj
- 205
- Çözümler
- 6
- Beğeni
- 92
- Puan
- 769
- Ticaret Puanı
- 0
Merhaba,
Bu paylaşım, forumda daha önce yayınlanmış olan Mount Costume System kurulumuna yönelik bir revizedir. Sistemi baştan kurmaz; hâlihazırda kurulu olan sistemin üzerine uygulanır.
Orijinal sistemde oyuncu bineğine binmişken çıkış-giriş yaparsa veya maplar arası ışınlanırsa binekten iniyor. Sunucumda bunu rahatsız edici buldum ve binili durumun korunmasını istedim.
Bu revizenin ana amacı bu: oyuncu artık binek üzerindeyken çıkış-giriş yapsa da, warp atsa da bineğinden inmiyor.
Binili olma bilgisini binek iteminin bir socket alanında saklıyoruz. Böylece bu bilgi veritabanına kaydediliyor ve oyuncu tekrar giriş yaptığında sistem onu doğrudan bineğine bindiriyor.
Bu mekanizma orijinal paylaşımda yok; bu revize ile geliyor. Fikri başka bir server files kurulumunu inceleyerek uyarladım, ardından kendi ihtiyacıma göre geliştirdim.
Binili durumu korumak tek satırlık bir iş değil. Devreye alınca şu sorunlar ortaya çıkıyor ve anlatımdaki kod blokları hepsini kapsıyor:
Bunların yanında, orijinal sistemde de bulunan bir sorunu düzelttim: binek üzerinde warp atınca syserr'e CMapManager::GetHeight ... map not created uyarısı düşüyordu.
Bu kısmı özellikle vurgulamak istiyorum, çünkü fark etmesi zor.
Kostüm bineği ile klasik at, sunucu tarafında aynı efekt tipini paylaşıyor. Dolayısıyla binili durumu korumak için yazılan kod dikkatli yazılmazsa, ata binmiş oyuncular çıkış-giriş yaptığında attan iner.
Bunu test ederken bizzat yaşadım. Anlatımdaki kod blokları buna göre yazıldı; kostüm bineğine ait olan ile klasik ata ait olan durumlar ayrı ayrı ele alındı.
Bonus olarak, klasik atın girişte yaklaşık bir saniye geç binmesine yol açan gecikmeyi de kısalttım. Bu vanilya kaynaklı bir davranıştı ve revize ile ilgisi yok, ama madem oradaydım düzelttim.
Anlatım "aratılır / değiştirilir" biçiminde hazırlandı. Aranacak kod blokları orijinal paylaşımın kodudur, yani kurulumunuzda birebir bulacağınız hâlidir.
Toplam 7 dosyada değişiklik var, hepsi sunucu tarafında. Client'a dokunulmuyor.
İki yerde sıralama kritik; ilgili adımlarda ayrıca belirtildi. Sırayı değiştirirseniz titreme geri gelir veya at görünmez olur.
Sonda bir test listesi bulacaksınız. Klasik at kısmını atlamamanızı öneririm; çoğu kişi yalnızca kostüm bineğini test edip o tarafı gözden kaçırabilir.
Sorularınızı ve geri bildirimlerinizi konu altına yazabilirsiniz. Farklı alt yapılarda karşılaşılan durumları paylaşırsanız anlatımı ona göre güncelleyebilirim.
İyi forumlar.
Bu paylaşım, forumda daha önce yayınlanmış olan Mount Costume System kurulumuna yönelik bir revizedir. Sistemi baştan kurmaz; hâlihazırda kurulu olan sistemin üzerine uygulanır.
Amaç
Orijinal sistemde oyuncu bineğine binmişken çıkış-giriş yaparsa veya maplar arası ışınlanırsa binekten iniyor. Sunucumda bunu rahatsız edici buldum ve binili durumun korunmasını istedim.
Bu revizenin ana amacı bu: oyuncu artık binek üzerindeyken çıkış-giriş yapsa da, warp atsa da bineğinden inmiyor.
Nasıl çalışıyor?
Binili olma bilgisini binek iteminin bir socket alanında saklıyoruz. Böylece bu bilgi veritabanına kaydediliyor ve oyuncu tekrar giriş yaptığında sistem onu doğrudan bineğine bindiriyor.
Bu mekanizma orijinal paylaşımda yok; bu revize ile geliyor. Fikri başka bir server files kurulumunu inceleyerek uyarladım, ardından kendi ihtiyacıma göre geliştirdim.
Uygulayacaklar için önemli uyarı: Hangi socket alanını kullandığınız kritik. Sunucu kodunda item başına yalnızca 3 socket tanımlı; yani geçerli numaralar sadece 0, 1 ve 2. Bunun dışında bir numara yazarsanız veri bellekte yan taraftaki alana taşar. Orada da itemin birinci bonus satırı duruyor ve bozuluyor — üstelik bu bozulma veritabanına da kaydediliyor.
İşin sinsi tarafı şu: koddaki güvenlik kontrolü derleme sırasında devre dışı kaldığı için hiçbir hata görmezsiniz. Derleme sorunsuz tamamlanır, sistem çalışıyor gibi görünür, ama arka planda item verisi bozulmaya devam eder.
Anlatımda socket 2 kullanılmıştır ve gerekçesi ilgili bölümde ayrıca açıklanmıştır.
Bu özelliği eklerken çıkan sorunlar
Binili durumu korumak tek satırlık bir iş değil. Devreye alınca şu sorunlar ortaya çıkıyor ve anlatımdaki kod blokları hepsini kapsıyor:
- Bonuslar ikiye katlanıyor — çıkış-giriş sonrası +20 bonus +40 oluyordu
- Karakter titriyor — yükleme ekranı kapandıktan sonra karakter ve binek bir anlığına yenileniyor, o esnada oyuncu tuşlara bassa da hareket edemiyordu
- Binek belirip kayboluyor — binili girişte yanda bir an binek beliriyor, hemen siliniyordu
- Klasik at bozuluyor — bu en tehlikelisi, aşağıda ayrıca anlattım
Bunların yanında, orijinal sistemde de bulunan bir sorunu düzelttim: binek üzerinde warp atınca syserr'e CMapManager::GetHeight ... map not created uyarısı düşüyordu.
Klasik at sistemi hakkında
Bu kısmı özellikle vurgulamak istiyorum, çünkü fark etmesi zor.
Kostüm bineği ile klasik at, sunucu tarafında aynı efekt tipini paylaşıyor. Dolayısıyla binili durumu korumak için yazılan kod dikkatli yazılmazsa, ata binmiş oyuncular çıkış-giriş yaptığında attan iner.
Bunu test ederken bizzat yaşadım. Anlatımdaki kod blokları buna göre yazıldı; kostüm bineğine ait olan ile klasik ata ait olan durumlar ayrı ayrı ele alındı.
Bonus olarak, klasik atın girişte yaklaşık bir saniye geç binmesine yol açan gecikmeyi de kısalttım. Bu vanilya kaynaklı bir davranıştı ve revize ile ilgisi yok, ama madem oradaydım düzelttim.
Uygulama hakkında
Anlatım "aratılır / değiştirilir" biçiminde hazırlandı. Aranacak kod blokları orijinal paylaşımın kodudur, yani kurulumunuzda birebir bulacağınız hâlidir.
Toplam 7 dosyada değişiklik var, hepsi sunucu tarafında. Client'a dokunulmuyor.
İki yerde sıralama kritik; ilgili adımlarda ayrıca belirtildi. Sırayı değiştirirseniz titreme geri gelir veya at görünmez olur.
Sonda bir test listesi bulacaksınız. Klasik at kısmını atlamamanızı öneririm; çoğu kişi yalnızca kostüm bineğini test edip o tarafı gözden kaçırabilir.
Sorularınızı ve geri bildirimlerinizi konu altına yazabilirsiniz. Farklı alt yapılarda karşılaşılan durumları paylaşırsanız anlatımı ona göre güncelleyebilirim.
İyi forumlar.
Son düzenleme: