Bvural41 1
Bvural41
Fethi Polat 1
Fethi Polat
Mt2Hizmet 1
Mt2Hizmet
Sevdamsın 1
Sevdamsın
Nedved35 1
Nedved35
Hikaye Ekle

Metin2 Hile İstek Getting specific text from chat/named window in python

  • Konuyu başlatan Konuyu başlatan lowb ott
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 5
  • Görüntüleme Görüntüleme 708

Ayyıldız2 | 2008 TR Yapısı • 1-99 Orta Emek Destan • Oto Avsız • 10 Temmuz 21:00 HEMEN TIKLA!

Hello,
Is it possible to get specific chat text from chat window?
Example: Player1 write in chat [Player1 : Buy THIS item]
Is possible to validate the text does exist in chat window in python?Eventually how to get specific window data from the game ?(I know it does exist in c++,altough I'm beginner and learning python,for now)
I would like if someone could find a way to help and willing to invest their time to answer a question sometime, in Discord: heheboi#5281


edit:
this one work pretty good.

def log_append_chat(func):

def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
print("chat.AppendChat was called with arguments: {}, keyword arguments: {}".format (args, kwargs))
return result
return wrapper
chat.AppendChat = log_append_chat(chat .AppendChat)
 
Son düzenleme:

En Çok Reaksiyon Alan Mesajlar

If I were you, I would detour RecvChatPacket function, then filter it to your specific needs.

bool CPythonNetworkStream::RecvChatPacket() { TPacketGCChat kChat; char buf[1024 + 1]; char line[1024 + 1]; if (!Recv(sizeof(kChat), &kChat)) return false; UINT uChatSize=kChat.size - sizeof(kChat); if (!Recv(uChatSize, buf)) return false; buf[uChatSize]='\0'; // À¯·´ ¾Æ¶ø ¹öÀü ó¸® // "À̸§: ³»¿ë" ÀÔ·ÂÀ» "³»¿ë: À̸§" ¼ø¼·Î Ãâ·ÂÇϱâ À§ÇØ ÅÇ(0x08)À» ³ÖÀ½ // ÅÇÀ» ¾Æ¶ø¾î ±âÈ£·Î ó¸®ÇØ (¿µ¾î1) : (¿µ¾î2) ·Î ÀԷµǾ (¿µ¾î2) : (¿µ¾î1) ·Î Ãâ·ÂÇÏ°Ô ¸¸µç´Ù if (LocaleService_IsEUROPE() && GetDefaultCodePage() == 1256) { char * p = strchr(buf, ':'); if (p && p[1] == ' ') p[1] = 0x08; } if (kChat.type >= CHAT_TYPE_MAX_NUM) return true; if (CHAT_TYPE_COMMAND == kChat.type) { ServerCommand(buf); return true; } if (kChat.dwVID != 0) { CPythonCharacterManager& rkChrMgr=CPythonCharacterManager::Instance(); CInstanceBase * pkInstChatter = rkChrMgr.GetInstancePtr(kChat.dwVID); if (NULL == pkInstChatter) return true; switch (kChat.type) { case CHAT_TYPE_TALKING: /* ±×³É äÆÃ */ case CHAT_TYPE_PARTY: /* ÆÄƼ¸» */ case CHAT_TYPE_GUILD: /* ±æµå¸» */ case CHAT_TYPE_SHOUT: /* ¿ÜÄ¡±â */ case CHAT_TYPE_WHISPER: // ¼¹ö¿Í´Â ¿¬µ¿µÇÁö ¾Ê´Â Only Client Enum { char * p = strchr(buf, ':'); if (p) p += 2; else p = buf; DWORD dwEmoticon; if (ParseEmoticon(p, &dwEmoticon)) { pkInstChatter->SetEmoticon(dwEmoticon); return true; } else { if (gs_bEmpireLanuageEnable) { CInstanceBase* pkInstMain=rkChrMgr.GetMainInstancePtr(); if (pkInstMain) if (!pkInstMain->IsSameEmpire(*pkInstChatter)) __ConvertEmpireText(pkInstChatter->GetEmpireID(), p); } if (m_isEnableChatInsultFilter) { if (false == pkInstChatter->IsNPC() && false == pkInstChatter->IsEnemy()) { __FilterInsult(p, strlen(p)); } } _snprintf(line, sizeof(line), "%s", p); } } break; case CHAT_TYPE_COMMAND: /* ¸í·É */ case CHAT_TYPE_INFO: /* Á¤º¸ (¾ÆÀÌÅÛÀ» Áý¾ú´Ù, °æÇèÄ¡¸¦ ¾ò¾ú´Ù. µî) */ case CHAT_TYPE_NOTICE: /* °øÁö»çÇ× */ case CHAT_TYPE_BIG_NOTICE: case CHAT_TYPE_MAX_NUM: default: _snprintf(line, sizeof(line), "%s", buf); break; } if (CHAT_TYPE_SHOUT != kChat.type) { CPythonTextTail::Instance().RegisterChatTail(kChat.dwVID, line); } if (pkInstChatter->IsPC()) CPythonChat::Instance().AppendChat(kChat.type, buf); } else { if (CHAT_TYPE_NOTICE == kChat.type) { PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_SetTipMessage", Py_BuildValue("(s)", buf)); } else if (CHAT_TYPE_BIG_NOTICE == kChat.type) { PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_SetBigMessage", Py_BuildValue("(s)", buf)); } else if (CHAT_TYPE_SHOUT == kChat.type) { char * p = strchr(buf, ':'); if (p) { if (m_isEnableChatInsultFilter) __FilterInsult(p, strlen(p)); } } CPythonChat::Instance().AppendChat(kChat.type, buf); } return true; }
I don't know if it is possible in Python i don't have such a knowledge in Python. In c++ u can just detour chat box.
 
I don't know if it is possible in Python i don't have such a knowledge in Python. In c++ u can just detour chat box.
Yes, That's what I found out aswell.
I'm getting inspiration from , but struggling to understand it's implementation to my script(Is very simple,just to detect if dungeon notice(or any notice) does append in chat,or does exist in that specific window location,
 
If I were you, I would detour RecvChatPacket function, then filter it to your specific needs.

bool CPythonNetworkStream::RecvChatPacket() { TPacketGCChat kChat; char buf[1024 + 1]; char line[1024 + 1]; if (!Recv(sizeof(kChat), &kChat)) return false; UINT uChatSize=kChat.size - sizeof(kChat); if (!Recv(uChatSize, buf)) return false; buf[uChatSize]='\0'; // À¯·´ ¾Æ¶ø ¹öÀü ó¸® // "À̸§: ³»¿ë" ÀÔ·ÂÀ» "³»¿ë: À̸§" ¼ø¼·Î Ãâ·ÂÇϱâ À§ÇØ ÅÇ(0x08)À» ³ÖÀ½ // ÅÇÀ» ¾Æ¶ø¾î ±âÈ£·Î ó¸®ÇØ (¿µ¾î1) : (¿µ¾î2) ·Î ÀԷµǾ (¿µ¾î2) : (¿µ¾î1) ·Î Ãâ·ÂÇÏ°Ô ¸¸µç´Ù if (LocaleService_IsEUROPE() && GetDefaultCodePage() == 1256) { char * p = strchr(buf, ':'); if (p && p[1] == ' ') p[1] = 0x08; } if (kChat.type >= CHAT_TYPE_MAX_NUM) return true; if (CHAT_TYPE_COMMAND == kChat.type) { ServerCommand(buf); return true; } if (kChat.dwVID != 0) { CPythonCharacterManager& rkChrMgr=CPythonCharacterManager::Instance(); CInstanceBase * pkInstChatter = rkChrMgr.GetInstancePtr(kChat.dwVID); if (NULL == pkInstChatter) return true; switch (kChat.type) { case CHAT_TYPE_TALKING: /* ±×³É äÆÃ */ case CHAT_TYPE_PARTY: /* ÆÄƼ¸» */ case CHAT_TYPE_GUILD: /* ±æµå¸» */ case CHAT_TYPE_SHOUT: /* ¿ÜÄ¡±â */ case CHAT_TYPE_WHISPER: // ¼¹ö¿Í´Â ¿¬µ¿µÇÁö ¾Ê´Â Only Client Enum { char * p = strchr(buf, ':'); if (p) p += 2; else p = buf; DWORD dwEmoticon; if (ParseEmoticon(p, &dwEmoticon)) { pkInstChatter->SetEmoticon(dwEmoticon); return true; } else { if (gs_bEmpireLanuageEnable) { CInstanceBase* pkInstMain=rkChrMgr.GetMainInstancePtr(); if (pkInstMain) if (!pkInstMain->IsSameEmpire(*pkInstChatter)) __ConvertEmpireText(pkInstChatter->GetEmpireID(), p); } if (m_isEnableChatInsultFilter) { if (false == pkInstChatter->IsNPC() && false == pkInstChatter->IsEnemy()) { __FilterInsult(p, strlen(p)); } } _snprintf(line, sizeof(line), "%s", p); } } break; case CHAT_TYPE_COMMAND: /* ¸í·É */ case CHAT_TYPE_INFO: /* Á¤º¸ (¾ÆÀÌÅÛÀ» Áý¾ú´Ù, °æÇèÄ¡¸¦ ¾ò¾ú´Ù. µî) */ case CHAT_TYPE_NOTICE: /* °øÁö»çÇ× */ case CHAT_TYPE_BIG_NOTICE: case CHAT_TYPE_MAX_NUM: default: _snprintf(line, sizeof(line), "%s", buf); break; } if (CHAT_TYPE_SHOUT != kChat.type) { CPythonTextTail::Instance().RegisterChatTail(kChat.dwVID, line); } if (pkInstChatter->IsPC()) CPythonChat::Instance().AppendChat(kChat.type, buf); } else { if (CHAT_TYPE_NOTICE == kChat.type) { PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_SetTipMessage", Py_BuildValue("(s)", buf)); } else if (CHAT_TYPE_BIG_NOTICE == kChat.type) { PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_SetBigMessage", Py_BuildValue("(s)", buf)); } else if (CHAT_TYPE_SHOUT == kChat.type) { char * p = strchr(buf, ':'); if (p) { if (m_isEnableChatInsultFilter) __FilterInsult(p, strlen(p)); } } CPythonChat::Instance().AppendChat(kChat.type, buf); } return true; }
 
Yes, That's what I found out aswell.
I'm getting inspiration from , but struggling to understand it's implementation to my script(Is very simple,just to detect if dungeon notice(or any notice) does append in chat,or does exist in that specific window location,
That’s an interesting code. U can look for how they used it in their code and replicate it.
like that
 
Son düzenleme:

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

Geri
Üst