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)
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.
Yes, That's what I found out aswell.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'm getting inspiration from
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
, 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;
}
That’s an interesting code. U can look for how they used it in their code and replicate it.Yes, That's what I found out aswell.
I'm getting inspiration fromLinkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir., 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,
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
like that
Son düzenleme:
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 9
- Görüntüleme
- 588
- Cevaplar
- 4
- Görüntüleme
- 150
- Cevaplar
- 8
- Görüntüleme
- 699
- Cevaplar
- 1
- Görüntüleme
- 252
- Cevaplar
- 2
- Görüntüleme
- 273