Pencerelerin ekranda kalmaması için alttaki prompt'u ai asistanı ile kullanabilirsiniz.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.
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.
daha kolayı var python fonksiyonları ile geçiçi süreligine kapatıp iş bittikten sonra aktif etmek daha iyi answer255 işe yaramıyorAnswer(255) - [0xFF] gönder geçer.
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.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.
evet answer255 işe yaramıyor denedim ben dedaha kolayı var python fonksiyonları ile geçiçi süreligine kapatıp iş bittikten sonra aktif etmek daha iyi answer255 işe yaramıyor
@n9z3'ün belirttiği sistem bu geçici olarak susturmahocam 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.
evet answer255 işe yaramıyor denedim ben de
Answer(255) - [0xFF] gönder
bunu biliyorum ancak okumamda gerekiyor biraz ortada kaldım bir şekil çözücem@n9z3'ün belirttiği sistem bu geçici olarak susturma
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 1
- Görüntüleme
- 89
- Cevaplar
- 151
- Görüntüleme
- 18K
- Cevaplar
- 13
- Görüntüleme
- 2K
