Dali OfflineShop Tooltip Saçmalama Fixi

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 43

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Offlineshop'a item koyduğum'da fiyatların altında won masasının kalan nesneler ve senin alabileceğin miktar yazıları başka bir zaman Yıl dönümü tüccarındaki yıl dönümü parası gibi tooltipler gözüküyordu. Ben bu şekilde çözdüm. Kullanan vardır belki faydası olur. Eğer sizde bu sistemleri kullanıyorsanız böyle çözebilirsiniz.


uiTooltip.py açılır ve aratılır :

Kod:
def SetShopItem(self, slotIndex):

ve değiştirilir: (komple değiştirmeyin kendinize göre düzenleyin)


Kod:
def SetShopItem(self, slotIndex):         itemVnum = shop.GetItemID(slotIndex)         if 0 == itemVnum:             return         price = shop.GetItemPrice(slotIndex)         if app.ENABLE_CHEQUE_SYSTEM:             cheque = shop.GetItemCheque(slotIndex)         self.ClearToolTip()         self.isShopItem = True         metinSlot = [*]         for i in xrange(player.METIN_SOCKET_MAX_NUM):             metinSlot.append(shop.GetItemMetinSocket(slotIndex, i))         attrSlot = [*]         for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM):             attrSlot.append(shop.GetItemAttribute(slotIndex, i))         self.AddItemData(itemVnum, metinSlot, attrSlot)         if app.BL_TRANSMUTATION_SYSTEM:             self.AppendChangeLookInfoShopWIndow(slotIndex)         if shop.IsOwner():             self.AppendOfflineShopPrice(price, cheque)         else:             if shop.IsYearRound():                 self.AppendYearRound(price)             elif shop.IsChequeDeskNpc():                 self.AppendLimitedCountChequeDesk(shop.GetLimitedPurchaseCount(slotIndex), shop.GetMyStok(slotIndex))             elif app.ENABLE_12ZI and shop.IsLimitedItemShop():                 count = shop.GetLimitedCount(slotIndex)                 if count != 0:                     purchaseCount = shop.GetLimitedPurchaseCount(slotIndex)                     self.AppendLimitedCount(count, purchaseCount)             else:                 if app.ENABLE_CHEQUE_SYSTEM:                     self.AppendPrice(price, cheque)                 else:                     self.AppendPrice(price)

Bunuda bir yerlere ekleyin: Normal AppendPrice içinde price < 1 için ücretsiz yazsın gibi kodlamanız varsa altdakini ekleyin yoksa IsOwner'in altındakini normal appendpriceye çevirin. Bende normal npclerde 1 den küçükse ücretsiz yazdır var o nedenle ayrı fonksyiona taşıdım. daha temiz.

Kod:
if app.ENABLE_OFFLINE_SHOP:         def AppendOfflineShopPrice(self, price, cheque = 0):             self.AppendSpace(5)             self.AppendTextLine(localeInfo.CHEQUE_SYSTEM_SELL_PRICE, grp.GenerateColor(1.0, 0.9686, 0.3098, 1.0))                            if cheque > 0:                 self.AppendTextLine(localeInfo.CHEQUE_SYSTEM_WON % (str(cheque)), grp.GenerateColor(0.0, 0.8470, 1.0, 1.0))                        if price > 0:                 self.AppendTextLine(localeInfo.CHEQUE_SYSTEM_YANG % (localeInfo.NumberToMoneyString(price)), self.GetPriceColor(price))

Dali OfflineShop Tooltip Saçmalama Fixi: Metin2 Sunucularında Karakter Sorunlarının Giderilmesi

Metin2 özel sunucu geliştirme sürecinde karşılaşılan birçok küçük ama dikkat gerektiren sorundan birisi de Dali OfflineShop Tooltip Saçmalama hatasıdır. Bu hata, oyuncuların offline shop (çevrimdışı mağaza) sistemini kullandıklarında tooltip (bilgi baloncuğu) üzerinde rastgele ve anlamsız karakterlerin görünmesine neden olur. Bu durum, kullanıcı deneyimini ciddi şekilde olumsuz etkileyebilir.

Sorun Nedir?

OfflineShop sistemi, oyuncuların sunucudan ayrıldıktan sonra da eşyalarını satabilmesini sağlayan gelişmiş bir özelliktir. Ancak bazı sistemlerde, özellikle eski veya yetersiz optimize edilmiş sistemlerde, tooltip kısmında karakterlerin bozulması gibi bir durum meydana gelir. Bu durum genellikle Unicode ve ANSI[/COORD] kodlama uyumsuzluklarından veya string (dize) işlemleri sırasında yapılan hatalardan kaynaklanır.

Nedenleri:

- Hatalı karakter kodlaması: Tooltip için verilen metin doğru kodlamayla aktarılmazsa, karakterler bozulabilir.
- Hatalı string işlemleri: C++ veya Python tarafında yapılan string manipülasyonları sırasında bellek adresleri yanlış okunabilir.
- Eksik dil desteği: Tooltip içinde Türkçe karakterler veya özel semboller doğru şekilde desteklenmeyebilir.

Fix Nasıl Uygulanır?

Öncelikle py_root klasöründe yer alan offline shop modülü incelenmelidir. Özellikle tooltip metni üretilen fonksiyonlar kontrol edilmelidir. Örnek olarak:

Kod:
[B]def get_tooltip_text(item_name):[BR][/BR]    return item_name.encode('utf-8').decode('utf-8')[/B]


Bu fonksiyon, UTF-8 desteğiyle karakterlerin doğru şekilde gösterilmesini sağlayabilir. Ayrıca, C++ tarafında std::wstring kullanarak Unicode destekli stringlerle çalışmak önemlidir.

Python Tarafında Düzeltme:

PySide veya PyGUI tabanlı arayüzlerde tooltip metinleri için doğrudan Unicode karakterlerin aktarılması gerekir. Eğer stringler ANSI olarak aktarılırsa, karakterler bozulabilir. Python tarafında şu değişiklik yapılabilir:

Kod:
[B]tooltip = str(item['name']).encode('utf-8').decode('utf-8', errors='ignore')[/B]


C++ Tarafında Düzeltme:

GameClient veya UI katmanında tooltip gösterimi yapılırken, stringlerin doğru şekilde Unicode olarak işlendiğinden emin olunmalıdır. Özellikle MultiByteToWideChar fonksiyonları kullanılabilir:

Kod:
[B]std::wstring ConvertStringToWString(const std::string& str)[/B]


Sunucu Taraflı Önemli Notlar:

Bu tür sorunlar genellikle client tarafında oluşur ancak veritabanından gelen verilerde de aynı sorun yaşanıyorsa, db_core tarafında da UTF-8 desteği eksik olabilir. MySQL veya MSSQL bağlantısında karakter seti ayarları kontrol edilmelidir:

Kod:
[B]SET NAMES utf8mb4;[/B]


Sonuç:

Dali OfflineShop Tooltip Saçmalama Fixi, Metin2 özel sunucularında kullanıcı dostu bir deneyim sunmak açısından kritik öneme sahiptir. Hataların kök nedenini belirlemek için hem client hem de server tarafı detaylıca incelenmelidir. Doğru karakter kodlaması ve uygun string işlemlerinin yapılması, bu sorunun kalıcı çözümüne yardımcı olacaktır. Bu fix sayesinde oyuncular artık anlamsız karakterler yerine doğru ürün adlarını görebileceklerdir.


Dali OfflineShop Tooltip Garbled Text Fix: Solving Character Issues in Metin2 Servers

One of the minor yet important issues encountered during Metin2 private server development is the Dali OfflineShop Tooltip Garbled Text error. This error causes random and meaningless characters to appear on the tooltip when players use the offline shop system. This situation can significantly worsen the user experience.

What is the Issue?

The OfflineShop system allows players to sell items even after disconnecting from the server. However, in some systems, especially older or poorly optimized ones, character corruption occurs in the tooltip section. This issue typically stems from Unicode and ANSI encoding mismatches or errors during string operations.

Causes:

- Incorrect character encoding: If the text sent for the tooltip is not encoded correctly, characters may become corrupted.
- Faulty string operations: Incorrect memory address reads during string manipulation in C++ or Python can cause this issue.
- Insufficient language support: Turkish or special characters within the tooltip might not be properly supported.

How to Apply the Fix?

Firstly, examine the offline shop module located in the py_root folder. Specifically, functions generating tooltip text should be checked. For example:

Kod:
[B]def get_tooltip_text(item_name):[BR][/BR]    return item_name.encode('utf-8').decode('utf-8')[/B]


This function ensures correct display of characters with UTF-8 support. Additionally, using std::wstring in C++ ensures Unicode string handling.

Fix in Python Side:

In PySide or PyGUI-based interfaces, Unicode characters must be directly passed for tooltip texts. If strings are transmitted as ANSI, they might get corrupted. The following adjustment can be made in Python:

Kod:
[B]tooltip = str(item['name']).encode('utf-8').decode('utf-8', errors='ignore')[/B]


Fix in C++ Side:

When displaying tooltips in the GameClient or UI layer, ensure that strings are properly processed as Unicode. Functions like MultiByteToWideChar can be used:

Kod:
[B]std::wstring ConvertStringToWString(const std::string& str)[/B]


Important Notes Server-Side:

Such issues usually occur on the client side, but if the same problem occurs with data coming from the database, UTF-8 support may be missing in the db_core side. Character set settings in MySQL or MSSQL connections should be checked:

Kod:
[B]SET NAMES utf8mb4;[/B]


Conclusion:

The Dali OfflineShop Tooltip Garbled Text Fix is critical for delivering a user-friendly experience in Metin2 private servers. To identify the root cause, both client and server sides must be thoroughly examined. Correct character encoding and proper string handling will help permanently resolve this issue. With this fix, players will see correct product names instead of meaningless characters.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Benzer konular

Geri
Üst Alt