OYUN GÜNDEMİ

Metin2 Inventory Penceresinin Konumunu Kaydetme

Bu düzenleme ile inventory penceresinin ekrandaki son konumu kaydedilir. Oyuncu inventory’yi nereye taşıdıysa, client tekrar açıldığında pencere aynı koordinattan yüklenir.

image-403 Metin2 Inventory Penceresinin Konumunu Kaydetme

Burada sadece X ve Y pozisyonlarını kaydediyoruz. Visibility, minimized, height gibi diğer değerlerle uğraşmıyoruz.

1. UserInterface/PythonSystem.cpp dosyasını aç

Aşağıdaki fonksiyonu bul:

void CPythonSystem::SaveInterfaceStatus()
{
...
}

Bununla değiştir:

void CPythonSystem::SaveInterfaceStatus()
{
if (m_poInterfaceHandler)
{
PyCallClassMemberFunc(
m_poInterfaceHandler,
"OnSaveInterfaceStatus",
Py_BuildValue("()")
);
} FILE* File = fopen("interface.cfg", "wb"); if (!File)
{
TraceError("Cannot open interface.cfg");
return;
} fwrite(
m_WindowStatus,
1,
sizeof(TWindowStatus) * WINDOW_MAX_NUM,
File
); fclose(File);
}

Buradaki amaç şu:
interface.cfg dosyasına pencere durumlarını yazıyoruz. Eğer m_poInterfaceHandler mevcutsa Python tarafındaki kayıt fonksiyonunu da çağırıyoruz.

2. interfaceModule.py dosyasını aç

Inventory kapatılırken konumunu kaydetmemiz gerekiyor.

Şu kodu bul:

if self.wndInventory:
self.wndInventory.Hide()
self.wndInventory.Destroy()

Bununla değiştir:

if self.wndInventory:
xInventory, yInventory = self.wndInventory.GetGlobalPosition() systemSetting.SaveWindowStatus(
systemSetting.WINDOW_INVENTORY,
False,
True,
xInventory,
yInventory,
0
) self.wndInventory.Hide()
self.wndInventory.Destroy()

Bu kısımda inventory penceresi destroy edilmeden hemen önce mevcut ekran pozisyonu alınıyor ve WINDOW_INVENTORY için kaydediliyor.

3. Inventory oluşturulurken kayıtlı konumu geri yükle

Yine interfaceModule.py içinde şu kısmı bul:

self.wndInventory = uiInventory.InventoryWindow()
self.wndInventory.BindInterfaceClass(self)

Bununla değiştir:

self.wndInventory = uiInventory.InventoryWindow()
self.wndInventory.BindInterfaceClass(self)(_, _, invX, invY, _) = systemSetting.GetWindowStatus(
systemSetting.WINDOW_INVENTORY
)if (
invX > 0 and
invY > 0 and
invX + self.wndInventory.GetWidth() < wndMgr.GetScreenWidth() and
invY + self.wndInventory.GetHeight() < wndMgr.GetScreenHeight()
):
self.wndInventory.SetPosition(invX, invY)

Bu kontrol önemli. Çünkü kayıtlı koordinat ekran dışına taşıyorsa pencereyi oraya basmıyoruz. Mesela oyuncu çözünürlük değiştirdiyse inventory ekran dışında kalabilir. Bu yüzden önce ekran sınırı kontrol ediliyor.

Daha Temiz Kullanım İçin Önerilen Yardımcı Fonksiyon

Aynı sistemi ileride character, skill, messenger, guild gibi başka pencerelere de uygulayacaksan her yere aynı kodu yazmak yerine küçük bir yardımcı fonksiyon kullanmak daha temiz olur.

interfaceModule.py içine uygun bir yere ekleyebilirsin:

def __SaveWindowPosition(self, window, windowType):
if not window:
return x, y = window.GetGlobalPosition() systemSetting.SaveWindowStatus(
windowType,
False,
True,
x,
y,
0
)

Sonra inventory kapatılırken şöyle kullanırsın:

if self.wndInventory:
self.__SaveWindowPosition(
self.wndInventory,
systemSetting.WINDOW_INVENTORY
) self.wndInventory.Hide()
self.wndInventory.Destroy()

Konumu geri yüklemek için de ayrı bir yardımcı fonksiyon yazılabilir:

def __LoadWindowPosition(self, window, windowType):
if not window:
return (_, _, x, y, _) = systemSetting.GetWindowStatus(windowType) if (
x > 0 and
y > 0 and
x + window.GetWidth() < wndMgr.GetScreenWidth() and
y + window.GetHeight() < wndMgr.GetScreenHeight()
):
window.SetPosition(x, y)

Inventory oluşturulduktan sonra kullanımı:

self.wndInventory = uiInventory.InventoryWindow()
self.wndInventory.BindInterfaceClass(self)self.__LoadWindowPosition(
self.wndInventory,
systemSetting.WINDOW_INVENTORY
)

Son olarak açıklayayım

Bu sistemle inventory penceresi kapatılırken pozisyonu kaydedilir, tekrar oluşturulduğunda da aynı yerden açılır. En mantıklı tarafı da sadece X ve Y koordinatlarını kullanması. Gereksiz window state bilgileriyle uğraşmadan, oyuncunun pencere düzeni korunmuş olur.

Paylaş :

Bu Kategoriden

Metin2 Cinsiyet Değiştirme Quest Sistemi: Sorunsuz Çalışan Güncel Kod 09.05.2026 Metin2 sistem ekleme aracı ile source dosyalarına otomatik kod uygulama ve patch sürecini gösteren arayüz görseli. Metin2 Sistem Ekleme Aracı: Kodları Otomatik Uygulayan Yardımcı Program 09.05.2026 Metin2 ruh taşı scripti ile Grand Master beceri geliştirme sistemini anlatan Seungryong Vadisi görseli. Metin2 Ruh Taşı Scripti: Tek Seferde Çoklu Grand Master Eğitimi 06.05.2026 Metin2 Shader Sistemi: Grafik Kodlarında Tam Temizlik ve Stabilizasyon Süreci 06.05.2026
Okuma Önerisi

Benzer rehberlere ve güncel oyun içeriklerine göz atabilirsin.

Okumaya Devam Et

Subnautica 2'de derin deniz keşiflerini mümkün kılan Modification Station ve araç modüllerinin üretim paneli. Subnautica 2 Modification Station Rehberi: Araç Yükseltmeleri ve Celestine Tarımı 19.05.2026 Subnautica 2 Biomod yetenek listesindeki en güçlü siber-biyolojik gen mutasyonları ve hücre paneli gösterimi. Subnautica 2 En İyi Yetenekler Tier List: En Güçlü Biomod Seçimleri 19.05.2026 Subnautica 2 Feedback Resonator yükseltmesini açmak için Root Canyon biyomunda taranması gereken antik laboratuvar kalıntıları. Subnautica 2 Feedback Resonator Nasıl Alınır? Root Canyon ve Tarama Rehberi 19.05.2026 Subnautica 2 Power Center ana salonunda yer alan ve dördüncü Angel Comb ile kilitleri açılan devasa uzaylı türbini. Subnautica 2 Power Center Türbini Nasıl Çalıştırılır? Alien Ruins Bulmaca Rehberi 19.05.2026

Hızlı Geçiş

Rehber Haber Önizleme Mobil Oyun