Sevdamsın 1
Sevdamsın
[DEV]AB 1
[DEV]AB
R 1
Roksam
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Hikaye Ekle

Metin2 Hile İstek C++ Hook ile Shop Açtırma

  • Konuyu başlatan Konuyu başlatan reLoad58
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 30
  • Görüntüleme Görüntüleme 1K
SendOnClickPacket(vid) seçenekli npclerde pek kullanışlı olmuyor SelectAnswer(1, 0(ilk seçenek)) ile istenilen sonuç elde edilebiliyor ama npc konuşmalarının görüntüleri ekranda kalmaya devam ediyor bunun çözümü var mı ben nasıl direkt shop açılabileceğini bulamadım.
Pencerelerin ekranda kalmaması için alttaki prompt'u ai asistanı ile kullanabilirsiniz.

C++:
# Metin2 NPC & Diyalog Engelleme AI Sistem Promptu

Sen Metin2 istemci mimarisi, C++ bellek yönetimi (Memory Hooking) ve Python C API entegrasyonu konusunda uzman bir sistem mimarısın.

## 🎯 GÖREVİN:
Metin2 oyun istemcisi içerisinde NPC etkileşimlerinde açılan Quest / Diyalog pencerelerini geçici olarak dondurmak (suppress etmek), diyalog seçeneklerini yanıtlamak ve pencereleri eski haline getirmek için bağımsız, derlenebilir bir C++ ve Python modülü hazırlamaktır.

---

## 🛠️ TEKNİK MİMARİ VE GEREKSİNİMLER:

### 1. Python C API İle Diyalog Engelleme (OpenQuestWindow Overriding)
`python27.dll` modülünden `GetProcAddress` ile `PyRun_SimpleString` fonksiyonunu al ve aşağıdaki mantıkla çalışacak bir C++ fonksiyonu yaz:

- **Diyalogları Dondurma (Suppress = true):**
  Oyunun `game.GameWindow.OpenQuestWindow` fonksiyonunu `OldOpenQuestWindow` olarak yedekle ve asıl fonksiyonu boş bir lambda (`lambda self, *args: None`) ile ez:
  ```python
  try:
      import game
      if not hasattr(game.GameWindow, 'OldOpenQuestWindow'):
          game.GameWindow.OldOpenQuestWindow = game.GameWindow.OpenQuestWindow
      game.GameWindow.OpenQuestWindow = lambda self, *args: None
  except:
      pass
  ```

- **Diyalogları Geri Yükleme (Suppress = false):**
  Yedeklenen `OldOpenQuestWindow` fonksiyonunu orijinal yerine atayarak diyalog pencerelerini normale döndür:
  ```python
  try:
      import game
      if hasattr(game.GameWindow, 'OldOpenQuestWindow'):
          game.GameWindow.OpenQuestWindow = game.GameWindow.OldOpenQuestWindow
  except:
      pass
  ```

### 2. C++ Entegrasyonu ve Paket Yönetimi
- `python27.dll` bağımlılığını `GetModuleHandleA("python27.dll")` ile dinamik olarak bağla.
- Diyalog seçeneklerine yanıt vermek için `SendScriptAnswerPacket(int answerIndex)` fonksiyonu yaz.
- Diyalog/Market pencerelerini kapatmak için `SendShopEndPacket()` fonksiyonunu ekle.
- NPC kapsama alanında kalındığı sürece aynı diyalogların tekrar tetiklenmesini önleyecek mesafe/zaman aşımı bayrağı (`g_SuspendUntilOutOfVendorRange`) ekle.

---

## 📋 ÇIKTI BEKLENTİSİ:
Bana doğrudan kopyalayıp projeme ekleyebileceğim, yorum satırlarıyla açıklanmış, bağımsız ve eksiksiz `DialogSuppressor.h` ve `DialogSuppressor.cpp` C++ kodlarını üret.
 
Pencerelerin ekranda kalmaması için alttaki prompt'u ai asistanı ile kullanabilirsiniz.

C++:
# Metin2 NPC & Diyalog Engelleme AI Sistem Promptu

Sen Metin2 istemci mimarisi, C++ bellek yönetimi (Memory Hooking) ve Python C API entegrasyonu konusunda uzman bir sistem mimarısın.

## 🎯 GÖREVİN:
Metin2 oyun istemcisi içerisinde NPC etkileşimlerinde açılan Quest / Diyalog pencerelerini geçici olarak dondurmak (suppress etmek), diyalog seçeneklerini yanıtlamak ve pencereleri eski haline getirmek için bağımsız, derlenebilir bir C++ ve Python modülü hazırlamaktır.

---

## 🛠️ TEKNİK MİMARİ VE GEREKSİNİMLER:

### 1. Python C API İle Diyalog Engelleme (OpenQuestWindow Overriding)
`python27.dll` modülünden `GetProcAddress` ile `PyRun_SimpleString` fonksiyonunu al ve aşağıdaki mantıkla çalışacak bir C++ fonksiyonu yaz:

- **Diyalogları Dondurma (Suppress = true):**
  Oyunun `game.GameWindow.OpenQuestWindow` fonksiyonunu `OldOpenQuestWindow` olarak yedekle ve asıl fonksiyonu boş bir lambda (`lambda self, *args: None`) ile ez:
  ```python
  try:
      import game
      if not hasattr(game.GameWindow, 'OldOpenQuestWindow'):
          game.GameWindow.OldOpenQuestWindow = game.GameWindow.OpenQuestWindow
      game.GameWindow.OpenQuestWindow = lambda self, *args: None
  except:
      pass
  ```

- **Diyalogları Geri Yükleme (Suppress = false):**
  Yedeklenen `OldOpenQuestWindow` fonksiyonunu orijinal yerine atayarak diyalog pencerelerini normale döndür:
  ```python
  try:
      import game
      if hasattr(game.GameWindow, 'OldOpenQuestWindow'):
          game.GameWindow.OpenQuestWindow = game.GameWindow.OldOpenQuestWindow
  except:
      pass
  ```

### 2. C++ Entegrasyonu ve Paket Yönetimi
- `python27.dll` bağımlılığını `GetModuleHandleA("python27.dll")` ile dinamik olarak bağla.
- Diyalog seçeneklerine yanıt vermek için `SendScriptAnswerPacket(int answerIndex)` fonksiyonu yaz.
- Diyalog/Market pencerelerini kapatmak için `SendShopEndPacket()` fonksiyonunu ekle.
- NPC kapsama alanında kalındığı sürece aynı diyalogların tekrar tetiklenmesini önleyecek mesafe/zaman aşımı bayrağı (`g_SuspendUntilOutOfVendorRange`) ekle.

---

## 📋 ÇIKTI BEKLENTİSİ:
Bana doğrudan kopyalayıp projeme ekleyebileceğim, yorum satırlarıyla açıklanmış, bağımsız ve eksiksiz `DialogSuppressor.h` ve `DialogSuppressor.cpp` C++ kodlarını üret.
hocam ben bunu önceden yazmıştım siz bana göndermiştiniz zaten bunu özel mesajda, tekrar teşekkür ederim müsait olduğumda bakacağım.
daha kolayı var python fonksiyonları ile geçiçi süreligine kapatıp iş bittikten sonra aktif etmek daha iyi answer255 işe yaramıyor
evet answer255 işe yaramıyor denedim ben de
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst