ayrıca cannot find accumulation data in file sorununda çözümüdür 
Size sadece mantığı öğreteceğim ve bundan sonra hangi dosyada syserr verirse bu şekilde düzelteceksiniz.
Örnek olursak Aslan bineğini (Vahşi, Yavru,Cesur) sürerken moblar geç yükleniyor veyahut hiç yüklenmiyor npcler/metinler kayboluyor. Çözüm için aşamaları takip edin;
Karşısında yazan 0-589 ile devam eden değer sizin .gr2 dosyanızda ne ise o şekilde değiştireceksiniz.
Aynı şekilde server-tarafına da uyguluyoruz yani /usr/game/share/data/monster/lion dizinine gidip run.msa'yı daha önce düzenlediğimizle değiştiriyoruz.
Ekteki gibi;
Bu işlemi neden yaptığımızın açıklaması: Accumulation değeri model animasyonunun hız değeridir. Eğer bu değeri yanlış bir atama yaparsak veya boş bırakırsak model ve animasyon birbirinden bağımsız olarak çalışır. Eğer client tarafı ve server tarafı accumulation değeri birbiriyle uyuşursa, animasyonu gerçek hızıyla görmüş olursunuz.
Metin2 özel sunucularında geliştirme yaparken karşılaşılan yaygın sorunlardan birisi, oyuncu binek üzerindeyken bazı slotların geç yüklenmesi veya tamamen kaybolmasıdır. Bu durum hem kullanıcı deneyimini ciddi anlamda etkiler hem de PvP odaklı sunucularda ciddi dezavantajlara neden olabilir. Bu yazıda, binek üzerindeyken slotların geç yüklenmesi veya kaybolması sorununun nedenlerini ve kalıcı çözümlerini ele alacağız.
Sorunun Kaynağı Nedir?
Bu sorun genellikle C++ kaynak kod tarafında, binek sistemlerinin karaktere entegrasyonundan kaynaklanır. Oyuncu bineğe bindiğinde, bazı GUI öğeleri yeniden yüklenir veya gecikmeli olarak güncellenir. Bu esnada slotlar doğru şekilde render edilmezse, slot verileri eksik veya bozuk bir şekilde ekrana yansıtılır. Özellikle UIScript veya Python GUI ile yapılan özelleştirmelerde bu durum daha sık rastlanır.
Çözüm Adımları
Öncelikle game/src/char.cpp dosyasında bulunan binek yükleme fonksiyonlarını incelemek gerekir. Buradaki MountVnum ile ilgili işlemler sırasında, UI tarafına slot yenileme komutunun gönderildiğinden emin olunmalıdır. Örneğin:
Bu örnekte, DelayedPacket fonksiyonu sayesinde binek bindikten sonra belirli bir süre sonra slotlar tekrar yüklenir. Ancak bu çözüm geçici olup, daha kalıcı bir yaklaşım için client-side değişiklikleri de gerekebilir.
Client Tarafında İyileştirme
Client-side geliştirme yaparken, uiscript/slotwindow.py dosyasında binek durumu kontrol eden bir yapı kurulmalıdır. Eğer karakter binek üzerindeyse, slot penceresi yeniden oluşturulmalı veya slot verileri yeniden yüklenmelidir. Bu işlem, bineğe bindikten sonra belirli bir gecikmeyle yapılmalıdır.
PyRoot üzerinden slotları yeniden çizmek için örnek bir fonksiyon aşağıdaki gibidir:
Bu fonksiyon, binek bindiğinde ekipman ve envanter slotlarını yeniden yükler. Bu yöntem, kullanıcıya daha akıcı bir deneyim sunar.
Sunucu Tarafında Kalıcı Çözüm
Sunucu tarafında kalıcı çözüm için, binek bindikten sonra packet olarak refresh_slot komutu gönderilmelidir. Bu komut, istemcinin slotları yeniden yüklemesini sağlar. Örnek paket:
Bu komut, client-side da yakalanarak slot yenileme fonksiyonu tetiklenebilir.
Sıkıştırılmış Paketleme ve Pack Sistemleri
Bu tür sistemsel sorunlar, doğru paketleme ile önlenemezse, sunucu pack dosyalarında özel bir patch sistemi kurmak da faydalı olabilir. Özellikle Martysama gibi sistemlerle birlikte çalışan paketlerde, binek slotları için özel bir sistem entegre edilebilir.
Sonuç
Metin2 özel sunucularında geliştirme yaparken, kullanıcı deneyimi için kritik olan küçük detaylara dikkat etmek büyük fark yaratır. Binek üzerinde slotların geç yüklenmesi ya da kaybolması gibi sorunlar, hem server-side hem de client-side geliştirmelerle çözülebilir. Doğru source edit ve compile işlemleri ile bu sorunlar tamamen ortadan kaldırılabilir. Metin2Lobby olarak, bu tür sistemsel hataların çözümünde aktif rol alıyoruz. Daha fazla bilgi ve destek için sitemizi ziyaret edebilirsiniz.
Kaynaklar:
Metin2 Lobby - Development Resources
One of the common issues encountered during development of Metin2 private servers is delayed loading or complete disappearance of certain slots while the player is riding a mount. This situation significantly affects user experience and can cause major disadvantages in PvP-focused servers. In this article, we will examine the causes and permanent solutions for the issue where slots load late or disappear when the player is mounted.
What Causes This Issue?
This problem generally stems from the integration of mount systems with the character, specifically on the C++ source code side. When a player mounts, some GUI elements reload or update with delay. If slots are not rendered correctly during this process, slot data may appear missing or corrupted. This issue is more frequent in customizations made using UIScript or Python GUI.
Solution Steps
Firstly, it is necessary to examine mount-loading functions within the file game/src/char.cpp. During operations related to MountVnum, ensure that a refresh command is sent to the UI side for slots. For example:
In this example, the DelayedPacket function ensures that slots reload after a certain period following mounting. However, for a more permanent solution, changes on the client-side may also be required.
Improvements on Client Side
When developing on the client-side, a structure should be established in the file uiscript/slotwindow.py that checks for mount status. If the character is mounted, the slot window must be rebuilt or slot data reloaded. This process should occur with a short delay after mounting.
An example function to redraw slots via PyRoot is shown below:
This function reloads both equipment and inventory slots upon mounting, providing a smoother experience for the user.
Permanent Solution on Server Side
For a permanent fix on the server side, send a packet named refresh_slot after mounting. This packet forces the client to reload its slots. Example packet:
This command can be caught client-side to trigger a slot-refresh function.
Packaging and Pack Systems
If such systemic issues cannot be resolved through correct packaging, creating a custom patch system within server pack files may prove helpful. Especially in packages working alongside systems like Martysama, a special system can be integrated for mount slots.
Conclusion
While developing private Metin2 servers, paying attention to small but critical details affecting user experience makes a big difference. Issues like delayed or missing slots while mounted can be resolved by both server-side and client-side improvements. With proper source edit and compile procedures, these issues can be completely eliminated. At Metin2Lobby, we actively contribute to solving such systematic errors. Visit our website for more information and support.
Resources:
Metin2 Lobby - Development Resources
Size sadece mantığı öğreteceğim ve bundan sonra hangi dosyada syserr verirse bu şekilde düzelteceksiniz.
Örnek olursak Aslan bineğini (Vahşi, Yavru,Cesur) sürerken moblar geç yükleniyor veyahut hiç yüklenmiyor npcler/metinler kayboluyor. Çözüm için aşamaları takip edin;
- <li data-xf-list-type="ul">
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız! Giriş yap veya üye ol.granny viewer indiriyoruz ve kuruyoruz. <li data-xf-list-type="ul">pack klasörü içerisinde patch2,eix ve epk açıyoruz. <li data-xf-list-type="ul">sırasıyla \patch2\ymir work\npc\lion dizinine gidiyoruz ve run.msa buluyoruz notepad++ ile açıyoruz (bu burada kalsın diğer işleme geçiyoruz.) <li data-xf-list-type="ul">run.gr2 granny viewer ile açıyoruz ve "Animation List" sekmesine geçiyoruz. Animasyon dosyasına sağ tıklayarak "View in detail" butonuna basıyoruz. <li data-xf-list-type="ul">Açılan sekmede void **TrackGroups karşısındaki "click to view sub-structure" butonuna tıklıyoruz. <li data-xf-list-type="ul">Bir pencere aşağı doğru açılıyor ve burada bizim işimize yaracak değer "granny_real32 Loop Translation` karşısında ki değeri daha önce açtığımız run.msa dosyasına ekleyeceğiz. <li data-xf-list-type="ul">Şimdi run.msa dosyasına dönüyoruz ve şu satırı ekliyoruz;
Karşısında yazan 0-589 ile devam eden değer sizin .gr2 dosyanızda ne ise o şekilde değiştireceksiniz.
Aynı şekilde server-tarafına da uyguluyoruz yani /usr/game/share/data/monster/lion dizinine gidip run.msa'yı daha önce düzenlediğimizle değiştiriyoruz.
Ekteki gibi;
Bu işlemi neden yaptığımızın açıklaması: Accumulation değeri model animasyonunun hız değeridir. Eğer bu değeri yanlış bir atama yaparsak veya boş bırakırsak model ve animasyon birbirinden bağımsız olarak çalışır. Eğer client tarafı ve server tarafı accumulation değeri birbiriyle uyuşursa, animasyonu gerçek hızıyla görmüş olursunuz.
Metin2 Lobby
Fix: Binek Üzerindeyken Slotların Geç Yüklenmesi veya Kaybolması Sorunu
Metin2 özel sunucularında geliştirme yaparken karşılaşılan yaygın sorunlardan birisi, oyuncu binek üzerindeyken bazı slotların geç yüklenmesi veya tamamen kaybolmasıdır. Bu durum hem kullanıcı deneyimini ciddi anlamda etkiler hem de PvP odaklı sunucularda ciddi dezavantajlara neden olabilir. Bu yazıda, binek üzerindeyken slotların geç yüklenmesi veya kaybolması sorununun nedenlerini ve kalıcı çözümlerini ele alacağız.
Sorunun Kaynağı Nedir?
Bu sorun genellikle C++ kaynak kod tarafında, binek sistemlerinin karaktere entegrasyonundan kaynaklanır. Oyuncu bineğe bindiğinde, bazı GUI öğeleri yeniden yüklenir veya gecikmeli olarak güncellenir. Bu esnada slotlar doğru şekilde render edilmezse, slot verileri eksik veya bozuk bir şekilde ekrana yansıtılır. Özellikle UIScript veya Python GUI ile yapılan özelleştirmelerde bu durum daha sık rastlanır.
Çözüm Adımları
Öncelikle game/src/char.cpp dosyasında bulunan binek yükleme fonksiyonlarını incelemek gerekir. Buradaki MountVnum ile ilgili işlemler sırasında, UI tarafına slot yenileme komutunun gönderildiğinden emin olunmalıdır. Örneğin:
Kod:
[COLOR=#9365b8]void CHARACTER::MountVnum(DWORD vnum)[BR][/BR]{[BR][/BR] // ... diğer kodlar[BR][/BR] ChatPacket(CHAT_TYPE_INFO, 'Slotlar guncelleniyor...');[BR][/BR] m_desc->DelayedPacket('LoadSlot', 500);[BR][/BR]}[/COLOR]
Bu örnekte, DelayedPacket fonksiyonu sayesinde binek bindikten sonra belirli bir süre sonra slotlar tekrar yüklenir. Ancak bu çözüm geçici olup, daha kalıcı bir yaklaşım için client-side değişiklikleri de gerekebilir.
Client Tarafında İyileştirme
Client-side geliştirme yaparken, uiscript/slotwindow.py dosyasında binek durumu kontrol eden bir yapı kurulmalıdır. Eğer karakter binek üzerindeyse, slot penceresi yeniden oluşturulmalı veya slot verileri yeniden yüklenmelidir. Bu işlem, bineğe bindikten sonra belirli bir gecikmeyle yapılmalıdır.
PyRoot üzerinden slotları yeniden çizmek için örnek bir fonksiyon aşağıdaki gibidir:
Kod:
[COLOR=#9365b8]def ReloadSlotIfMounted(self):[BR][/BR] if player.IsMountingHorse():[BR][/BR] self.RefreshInventorySlot()[BR][/BR] self.RefreshEquipmentSlot()[/COLOR]
Bu fonksiyon, binek bindiğinde ekipman ve envanter slotlarını yeniden yükler. Bu yöntem, kullanıcıya daha akıcı bir deneyim sunar.
Sunucu Tarafında Kalıcı Çözüm
Sunucu tarafında kalıcı çözüm için, binek bindikten sonra packet olarak refresh_slot komutu gönderilmelidir. Bu komut, istemcinin slotları yeniden yüklemesini sağlar. Örnek paket:
Kod:
[COLOR=#9365b8]ChatPacket(CHAT_TYPE_COMMAND, 'refresh_slot')[/COLOR]
Bu komut, client-side da yakalanarak slot yenileme fonksiyonu tetiklenebilir.
Sıkıştırılmış Paketleme ve Pack Sistemleri
Bu tür sistemsel sorunlar, doğru paketleme ile önlenemezse, sunucu pack dosyalarında özel bir patch sistemi kurmak da faydalı olabilir. Özellikle Martysama gibi sistemlerle birlikte çalışan paketlerde, binek slotları için özel bir sistem entegre edilebilir.
Sonuç
Metin2 özel sunucularında geliştirme yaparken, kullanıcı deneyimi için kritik olan küçük detaylara dikkat etmek büyük fark yaratır. Binek üzerinde slotların geç yüklenmesi ya da kaybolması gibi sorunlar, hem server-side hem de client-side geliştirmelerle çözülebilir. Doğru source edit ve compile işlemleri ile bu sorunlar tamamen ortadan kaldırılabilir. Metin2Lobby olarak, bu tür sistemsel hataların çözümünde aktif rol alıyoruz. Daha fazla bilgi ve destek için sitemizi ziyaret edebilirsiniz.
Kaynaklar:
Metin2 Lobby - Development Resources
Metin2 Lobby
Fix: Delayed Loading or Disappearing Slots While Riding Mounts
One of the common issues encountered during development of Metin2 private servers is delayed loading or complete disappearance of certain slots while the player is riding a mount. This situation significantly affects user experience and can cause major disadvantages in PvP-focused servers. In this article, we will examine the causes and permanent solutions for the issue where slots load late or disappear when the player is mounted.
What Causes This Issue?
This problem generally stems from the integration of mount systems with the character, specifically on the C++ source code side. When a player mounts, some GUI elements reload or update with delay. If slots are not rendered correctly during this process, slot data may appear missing or corrupted. This issue is more frequent in customizations made using UIScript or Python GUI.
Solution Steps
Firstly, it is necessary to examine mount-loading functions within the file game/src/char.cpp. During operations related to MountVnum, ensure that a refresh command is sent to the UI side for slots. For example:
Kod:
[COLOR=#9365b8]void CHARACTER::MountVnum(DWORD vnum)[BR][/BR]{[BR][/BR] // ... other codes[BR][/BR] ChatPacket(CHAT_TYPE_INFO, 'Slots updating...');[BR][/BR] m_desc->DelayedPacket('LoadSlot', 500);[BR][/BR]}[/COLOR]
In this example, the DelayedPacket function ensures that slots reload after a certain period following mounting. However, for a more permanent solution, changes on the client-side may also be required.
Improvements on Client Side
When developing on the client-side, a structure should be established in the file uiscript/slotwindow.py that checks for mount status. If the character is mounted, the slot window must be rebuilt or slot data reloaded. This process should occur with a short delay after mounting.
An example function to redraw slots via PyRoot is shown below:
Kod:
[COLOR=#9365b8]def ReloadSlotIfMounted(self):[BR][/BR] if player.IsMountingHorse():[BR][/BR] self.RefreshInventorySlot()[BR][/BR] self.RefreshEquipmentSlot()[/COLOR]
This function reloads both equipment and inventory slots upon mounting, providing a smoother experience for the user.
Permanent Solution on Server Side
For a permanent fix on the server side, send a packet named refresh_slot after mounting. This packet forces the client to reload its slots. Example packet:
Kod:
[COLOR=#9365b8]ChatPacket(CHAT_TYPE_COMMAND, 'refresh_slot')[/COLOR]
This command can be caught client-side to trigger a slot-refresh function.
Packaging and Pack Systems
If such systemic issues cannot be resolved through correct packaging, creating a custom patch system within server pack files may prove helpful. Especially in packages working alongside systems like Martysama, a special system can be integrated for mount slots.
Conclusion
While developing private Metin2 servers, paying attention to small but critical details affecting user experience makes a big difference. Issues like delayed or missing slots while mounted can be resolved by both server-side and client-side improvements. With proper source edit and compile procedures, these issues can be completely eliminated. At Metin2Lobby, we actively contribute to solving such systematic errors. Visit our website for more information and support.
Resources:
Metin2 Lobby - Development Resources
