Chat global
Sistema de Notificação de PM
Bom, está aí um sistema simples de notificação, pra quando o jogo estiver em segundo plano recebermos determinada informação do Windows.
pra contexto, estou utilizando source WorldPT, e implementei a notificação apenas quando recebo uma mensagem pessoal (PM) quando o jogo está em segundo plano.
Na source do game, procure pelo arquivo Winmain.cpp, e dentro desse diretório procure por: WINAPI WinMain, continue a busca até chegar na função que começa assim:
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPreInst, LPSTR lpCmdLine, INT nCmdShow)
{
SetUnhandledExceptionFilter(unhandled_handler);
HookAPI("kernel32.dll", "SetUnhandledExceptionFilter", RedirectedSetUnhandledExceptionFilter);
Tenho certeza que você encontrou!, então acima dessa função WinMain, copie e cole essa nova função:
void ShowGameNotification(HWND hWnd,const char* title,const char* message) {
NOTIFYICONDATA ntf = { 0 };
ntf.cbSize = sizeof(ntf);
ntf.hWnd = hWnd;
ntf.uFlags = NIF_ICON | NIF_INFO;
ntf.dwInfoFlags = NIIF_USER | NIIF_LARGE_ICON;
ntf.hIcon = LoadIcon(GetModuleHandleA(NULL), MAKEINTRESOURCE(IDI_DEFAULT_ICON));
if (!Shell_NotifyIcon(NIM_ADD, &ntf)) Shell_NotifyIcon(NIM_MODIFY, &ntf);
strcpy_s(ntf.szInfoTitle, title);
strcpy_s(ntf.szInfo,message );
//by ViGo , discord: 7vig0
if (!Shell_NotifyIcon(NIM_ADD, &ntf)) Shell_NotifyIcon(NIM_MODIFY, &ntf);
}
Já está praticamente pronto! vamos continuar? Ainda na source do game, procure pelo arquivo: ChatWindow.cpp, então dentro desse diretório, procure pela função responsável pelas mensagens que o game recebe do servidor :
void Window::HandlePacket(PacketChatBoxMessage* psPacket)
Dentro dessa função, adicione esse esse if:
if ((psPacket->iChatColor == EChatColor::CHATCOLOR_Whisper || psPacket->iChatColor == EChatColor::CHATCOLOR_Blue) &&
strncmp(psPacket->szChatBoxMessage, "De>", 3) == 0)
{
if (GetForegroundWindow() != hwnd)
{
char szTitle[64] = "Nova Mensagem";
std::string strMsg = psPacket->szChatBoxMessage;
size_t posDoisPontos = strMsg.find(':');
if (posDoisPontos != std::string::npos && posDoisPontos > 3)
{
std::string senderName = strMsg.substr(3, posDoisPontos - 3);
sprintf_s(szTitle, "PM de%s", senderName.c_str());
}
ShowGameNotification(hwnd, szTitle, psPacket->szChatBoxMessage);
}
}
Se você é ansioso e já tentou compilar, tenho certeza que recebeu um erro durante a compilação, e já está achando que fez algo de errado não é mesmo? Fique tranquilo nobre, vamos resolver isso, no topo do arquivo ChatWindow.cpp, onde tem
#include "ChatWindow.h"
observe onde termina todos os #include, então copie e cole:
extern void ShowGameNotification(HWND hWnd, const char* title, const char* message);
Agora sim você já pode compilar, e todas as vezes que você estiver fazendo outra atividade no computador, ou utilizando o computador em outra janela que não seja o game para fazer outra atividade fora do computador, você será notificado pelo Windows sobre as notícias do jogo.
Lembrando que é totalmente possível expandir esse sistema pra mostrar diversas informações, como horário do boss, aviso dos 5 minutos que antecedem o nascimento do boss, algum comando de GM para notificar que algum evento vai ocorrer, ai vai depender da sua imaginação.
1 por amor, 2 por dinheiro
Mito kkk vlw cuidado pra não ter nego vendendo a 500$ kkkkPostado por: @vigoBom, está aí um sistema simples de notificação, pra quando o jogo estiver em segundo plano recebermos determinada informação do Windows.
SpoilerResultadopra contexto, estou utilizando source WorldPT, e implementei a notificação apenas quando recebo uma mensagem pessoal (PM) quando o jogo está em segundo plano.
Na source do game, procure pelo arquivo Winmain.cpp, e dentro desse diretório procure por: WINAPI WinMain, continue a busca até chegar na função que começa assim:
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPreInst, LPSTR lpCmdLine, INT nCmdShow) { SetUnhandledExceptionFilter(unhandled_handler); HookAPI("kernel32.dll", "SetUnhandledExceptionFilter", RedirectedSetUnhandledExceptionFilter);
Tenho certeza que você encontrou!, então acima dessa função WinMain, copie e cole essa nova função:
void ShowGameNotification(HWND hWnd,const char* title,const char* message) { NOTIFYICONDATA ntf = { 0 }; ntf.cbSize = sizeof(ntf); ntf.hWnd = hWnd; ntf.uFlags = NIF_ICON | NIF_INFO; ntf.dwInfoFlags = NIIF_USER | NIIF_LARGE_ICON; ntf.hIcon = LoadIcon(GetModuleHandleA(NULL), MAKEINTRESOURCE(IDI_DEFAULT_ICON)); if (!Shell_NotifyIcon(NIM_ADD, &ntf)) Shell_NotifyIcon(NIM_MODIFY, &ntf); strcpy_s(ntf.szInfoTitle, title); strcpy_s(ntf.szInfo,message ); //by ViGo , discord: 7vig0 if (!Shell_NotifyIcon(NIM_ADD, &ntf)) Shell_NotifyIcon(NIM_MODIFY, &ntf); }
Já está praticamente pronto! vamos continuar? Ainda na source do game, procure pelo arquivo: ChatWindow.cpp, então dentro desse diretório, procure pela função responsável pelas mensagens que o game recebe do servidor :
void Window::HandlePacket(PacketChatBoxMessage* psPacket)
Dentro dessa função, adicione esse esse if:
if ((psPacket->iChatColor == EChatColor::CHATCOLOR_Whisper || psPacket->iChatColor == EChatColor::CHATCOLOR_Blue) && strncmp(psPacket->szChatBoxMessage, "De>", 3) == 0) { if (GetForegroundWindow() != hwnd) { char szTitle[64] = "Nova Mensagem"; std::string strMsg = psPacket->szChatBoxMessage; size_t posDoisPontos = strMsg.find(':'); if (posDoisPontos != std::string::npos && posDoisPontos > 3) { std::string senderName = strMsg.substr(3, posDoisPontos - 3); sprintf_s(szTitle, "PM de%s", senderName.c_str()); } ShowGameNotification(hwnd, szTitle, psPacket->szChatBoxMessage); } }
Se você é ansioso e já tentou compilar, tenho certeza que recebeu um erro durante a compilação, e já está achando que fez algo de errado não é mesmo? Fique tranquilo nobre, vamos resolver isso, no topo do arquivo ChatWindow.cpp, onde tem
#include "ChatWindow.h"observe onde termina todos os #include, então copie e cole:
extern void ShowGameNotification(HWND hWnd, const char* title, const char* message);Agora sim você já pode compilar, e todas as vezes que você estiver fazendo outra atividade no computador, ou utilizando o computador em outra janela que não seja o game para fazer outra atividade fora do computador, você será notificado pelo Windows sobre as notícias do jogo.
Lembrando que é totalmente possível expandir esse sistema pra mostrar diversas informações, como horário do boss, aviso dos 5 minutos que antecedem o nascimento do boss, algum comando de GM para notificar que algum evento vai ocorrer, ai vai depender da sua imaginação.
@manezinho minha parte eu fiz, kkkkk, vamos ver, quem sabe em breve eu não libere mais sistemas pequenos e interessantes como esse aí, quem sabe um organizador de inventário? 🍺
1 por amor, 2 por dinheiro
Eu acho que para códigos, seria bom ter uma seção "Codigos "Premium", que só acessa quem é assinante nem que seja R$9,90, e cada valor da assinatura de quem faz parte desse "grupo" ganhar uma porcentagem ex: quem posto 70%, o forum ficaria com 30%, apenas uma idéia.
#DEFINE -> | |
The Witcher
Poise tem nego que se aproveita , e complicadoPostado por: @vigo@manezinho minha parte eu fiz, kkkkk, vamos ver, quem sabe em breve eu não libere mais sistemas pequenos e interessantes como esse aí, quem sabe um organizador de inventário? 🍺
@potras18 seria interessante aprimorar a ideia do @ALUCARD, criar uma sessão de marketplace pra venda de sistemas, semelhante a DFG por exemplo.
Criaria uma sessão para divulgação de devs, o fórum geraria renda pois iria ganhar % pelo intermédio da venda, e dependendo da logística de entrega do código, o dono do fórum ainda teria acesso a todos os códigos free, gg, todo mundo ganha.
1 por amor, 2 por dinheiro
eu digo no quesito de outras pessoas quiserem usar, pois tem umas que só sugam, essas precisam "pagar" contribuir para incentivar os caras postarem mais.
#DEFINE -> | |
The Witcher

A ideia do Alucard é boa demais, eu to dentro

Parabens Vigo, codigo muito bomm !


Pra quem quer a notificação de BOSS tmb.
#define BOSS_ALERT_PREFIX "BOSS_ALERT>"
#define BOSS_ALERT_PREFIX_LEN 11
--------------------------------------------------------
- 20 Fóruns
- 247 Tópicos
- 1,409 Posts
- 7 Online
- 262 Membros

