Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- BOOL md2bs::MCPReceiveIntercept(BYTE* data, DWORD length)
- {
- MCPheader* MCPh = (MCPheader*)data;
- if(!MCPh)
- return FALSE;
- if(myFLAG(_CFG_bMCPDebug))
- {
- char t[1024], _prefix[64];
- _snprintf_s(_prefix, sizeof(_prefix), _TRUNCATE, "MCP RECV %02X", MCPh->identifier);
- FormatDataPkt(t, sizeof(t), _prefix, data, length);
- PrintDebug(t);
- }
- switch(MCPh->identifier)
- {
- case 0x01:
- {
- DWORD dwResult = *(DWORD*)&data[1];
- switch(dwResult)
- {
- case 0x7e:
- PrintLog("Your CD-Key is disabled from playing realm games.");
- SetFlag(BS_FLAG_CDKEY_BANNED, TRUE);
- SetFlag(BS_FLAG_REALM_DOWN, TRUE);
- #ifdef PLUGIN_SUPPORT
- ProcessCallBack(EVENT_BUILDUP_ERROR, (LPVOID)BUILDUP_ERROR_CDKEY_BANNED);
- #endif
- CloseConnection();
- break;
- case 0x7f:
- PrintLog("You have a temporary IP ban on this realm server.");
- SetFlag(BS_FLAG_REALM_DOWN, TRUE);
- #ifdef PLUGIN_SUPPORT
- ProcessCallBack(EVENT_BUILDUP_ERROR, (LPVOID)BUILDUP_ERROR_IP_BANNED);
- #endif
- CloseConnection();
- break;
- case 0x02:
- case 0x0a:
- case 0x0b:
- case 0x0c:
- case 0x0d:
- PrintLog("Realm is unavailable. No Battle.net connection detected.");
- SetFlag(BS_FLAG_REALM_DOWN, TRUE);
- #ifdef PLUGIN_SUPPORT
- ProcessCallBack(EVENT_BUILDUP_ERROR, (LPVOID)BUILDUP_ERROR_REALM_DEAD);
- #endif
- CloseConnection();
- break;
- default: //success
- {
- SetConnectionState(CONN_STATE_ACCOUNT);
- InitRealmHandler();
- if(GetFlag(BS_FLAG_REALM_LOGON_FROM_GAME))
- {
- SetHandlerState(HANDLER_REALM,REALM_STATE_CLOSE_THREAD,REALM_STATE_CHOOSE_CHAR);
- }
- else
- SetHandlerState(HANDLER_REALM,REALM_STATE_CLOSE_THREAD,REALM_STATE_CHARLIST_SEND);
- }
- }
- break;
- }
- #define MCP_CREATE_CHAR_SUCCESS 0x00
- #define MCP_CREATE_CHAR_EXISTS 0x14
- #define MCP_CREATE_CHAR_INVALID 0x15
- case 0x02:
- {
- DWORD dwStatus = *(DWORD*)&data[1];
- PrintLog("Received create char status: %s",
- GetCreateCharStatus(dwStatus));
- SetHandlerState(HANDLER_REALM,REALM_STATE_CHARLIST_SEND);
- return TRUE;
- }
- #define MCP_CREATE_GAME_SUCCESS 0x00
- case 0x03: //CREATE GAME
- PrintLog("Received create game status: %s", MCPh->status == MCP_CREATE_GAME_SUCCESS ? "SUCCESS" : "FAILED");
- curr_game.requestid = MCPh->cookie;
- *(DWORD*)lib->GetCoreVarAddr(HCONN_SERVER_TOKEN) = *(DWORD*)&data[3];
- if(MCPh->status == MCP_CREATE_GAME_SUCCESS)
- curr_game.bCreateGameFlag = TRUE;
- else
- {
- SendCoreMessage(GetID(), EVENT_ERR_CREATEGAME_FAILED, NULL);
- }
- return TRUE;
- #define MCP_JOIN_GAME_SUCCESS 0x00
- case 0x04: //JOIN GAME
- {
- *(DWORD*)lib->GetCoreVarAddr(HCONN_SERVER_TOKEN) = *(DWORD*)&data[3];
- *(WORD*)D2GETMEM(hClient, client, &client->wServerToken, WORD) = (WORD)lib->GetCoreVar(HCONN_SERVER_TOKEN);
- *(DWORD*)D2GETMEM(hClient, client, &client->dwGameHash, DWORD) = *(DWORD*)&data[11];
- DWORD dwStatus = *(DWORD*)&data[15];
- if(dwStatus == MCP_JOIN_GAME_SUCCESS)
- {
- #ifdef MCP_DEBUG_FLAG
- PrintLog("Connected to game server: %d.%d.%d.%d",
- MCPh->D2GS_IP[0],MCPh->D2GS_IP[1],MCPh->D2GS_IP[2],MCPh->D2GS_IP[3]
- );
- #endif
- strcpy(D2GETMEM(hClient, client, client->gameip, char), lib->FOG_GetIPStringFromByteOrder(*(DWORD*)&MCPh->D2GS_IP[0]));
- strcpy(D2GETMEM(hClient, client, client->gamename, char), curr_game.name);
- strcpy(D2GETMEM(hClient, client, client->gamepass, char), curr_game.pass);
- strcpy(D2GETMEM(hClient, client, client->gamedesc, char), curr_game.desc);
- SetHandlerState(HANDLER_BNET,BNET_STATE_JOIN_GAME);
- }
- else
- {
- PrintLog("Failed to join game: %s",
- GetJoinGameStatus(dwStatus)
- );
- DisconnectGame(TRUE, TRUE);
- SendCoreMessage(GetID(), EVENT_ERR_JOINGAME_FAILED, NULL);
- }
- return TRUE;
- }
- case 0x05: //GAMELIST REQUEST
- EnumGames(MCPh);
- return FALSE;
- case 0x06: //GAMEINFO REQUEST
- ParseGameInfo(MCPh,length);
- return TRUE;
- case 0x07:
- switch(*(DWORD*)data)
- {
- case 0x46: //not found
- PrintLog("Error: Player not found");
- break;
- case 0x7A: //logon failed
- PrintLog("Error: Logon failed");
- break;
- case 0x7B: //char expired
- PrintLog("Error: Character expired");
- break;
- default:
- {
- PrintLog("Character logon success");
- m_ChooseCharRetries = 0;
- return TRUE;
- }
- }
- //retry to choose character
- if(++m_ChooseCharRetries >= MAX_CHOOSE_CHAR_RETRIES)
- {
- m_ChooseCharRetries = 0;
- CloseConnection();
- }
- else
- {
- PrintLog("Failed to choose character. Retrying..");
- SetHandlerState(HANDLER_REALM,REALM_STATE_CHARLIST_SEND,REALM_STATE_IDLE);
- }
- return TRUE;
- case 0x19: //CHARLIST REQUEST
- #ifdef MCP_DEBUG_FLAG
- PrintLog("Received account charlist");
- #endif
- InitPlayers();
- GameList.RemoveAll();
- EnumPlayers((PMCPheader2)MCPh);
- return TRUE;
- default:;
- }
- return FALSE;
- }
Add Comment
Please, Sign In to add comment