[Paylaşım] Mount Costume System — Binili Durumun Korunması + Hata Düzeltmeleri

Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

Furion99

MT Üye
MT Üye
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.


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:
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst