Jump to content

Chasterx

Members
  • Posts

    12
  • Joined

  • Last visited

    Never
  • Donations

    0.00 GBP 

Posts posted by Chasterx

  1. Thanks i come now to SMSG_CHAR_ENUM but something is wrong. Could you take a look on my code?

    Here the structure

    struct CharacterData
    {
             uint64 GUID;
             CString Name;
             byte Race;
             byte Class;
             byte Gender;
             byte Skin;
             byte Face;
             byte HairStyle;
             byte HairColor;
             byte FacialHair;
             byte level;
             uint32 ZoneId;
             uint32 MapId;
             float X;
             float Y;
             float Z;
             uint64 Unk;
             uint32 CharacterFlags;
             uint32 CustomizationFlags;
             byte FirstLogin;
             uint32 PetDisplayId;
             uint32 PetLevel;
             uint32 PetFamily;
             CharacterItem Items[23]; 
    };

    *p_data << uint64(MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER));
       *p_data << fields[1].GetString();                       // name
       *p_data << uint8(pRace);                                // race
       *p_data << uint8(pClass);                               // class
       *p_data << uint8(fields[4].GetUInt8());                 // gender
    
       uint32 playerBytes = fields[5].GetUInt32();
       *p_data << uint8(playerBytes);                          // skin
       *p_data << uint8(playerBytes >> 8);                     // face
       *p_data << uint8(playerBytes >> 16);                    // hair style
       *p_data << uint8(playerBytes >> 24);                    // hair color
    
       uint32 playerBytes2 = fields[6].GetUInt32();
       *p_data << uint8(playerBytes2 & 0xFF);                  // facial hair
    
       *p_data << uint8(fields[7].GetUInt8());                 // level
       *p_data << uint32(fields[8].GetUInt32());               // zone
       *p_data << uint32(fields[9].GetUInt32());               // map
    
       *p_data << fields[10].GetFloat();                       // x
       *p_data << fields[11].GetFloat();                       // y
       *p_data << fields[12].GetFloat();                       // z
       *p_data    << uint64(0);
       //*p_data << uint32(fields[13].GetUInt32());              // guild id
    
       uint32 char_flags = 0;
       uint32 playerFlags = fields[13].GetUInt32();
       uint32 atLoginFlags = fields[14].GetUInt32();
       if (playerFlags & PLAYER_FLAGS_HIDE_HELM)
           char_flags |= CHARACTER_FLAG_HIDE_HELM;
       if (playerFlags & PLAYER_FLAGS_HIDE_CLOAK)
           char_flags |= CHARACTER_FLAG_HIDE_CLOAK;
       if (playerFlags & PLAYER_FLAGS_GHOST)
           char_flags |= CHARACTER_FLAG_GHOST;
       if (atLoginFlags & AT_LOGIN_RENAME)
           char_flags |= CHARACTER_FLAG_RENAME;
       if (fields[19].GetUInt32())
           char_flags |= CHARACTER_FLAG_LOCKED_BY_BILLING;
       if (sWorld.getBoolConfig(CONFIG_DECLINED_NAMES_USED))
       {
           if (!fields[20].GetString().empty())
               char_flags |= CHARACTER_FLAG_DECLINED;
       }
       else
           char_flags |= CHARACTER_FLAG_DECLINED;
    
       *p_data << uint32(char_flags);                          // character flags
    
       // character customize flags
       if (atLoginFlags & AT_LOGIN_CUSTOMIZE)
           *p_data << uint32(CHAR_CUSTOMIZE_FLAG_CUSTOMIZE);
       else if (atLoginFlags & AT_LOGIN_CHANGE_FACTION)
           *p_data << uint32(CHAR_CUSTOMIZE_FLAG_FACTION);
       else if (atLoginFlags & AT_LOGIN_CHANGE_RACE)
           *p_data << uint32(CHAR_CUSTOMIZE_FLAG_RACE);
       else
           *p_data << uint32(CHAR_CUSTOMIZE_FLAG_NONE);
    
       // First login
       *p_data << uint8(atLoginFlags & AT_LOGIN_FIRST ? 1 : 0);
    
       // Pets info
       {
           uint32 petDisplayId = 0;
           uint32 petLevel   = 0;
           uint32 petFamily  = 0;
    
           // show pet at selection character in character list only for non-ghost character
           if (result && !(playerFlags & PLAYER_FLAGS_GHOST) && (pClass == CLASS_WARLOCK || pClass == CLASS_HUNTER || pClass == CLASS_DEATH_KNIGHT))
           {
               uint32 entry = fields[15].GetUInt32();
               CreatureInfo const* cInfo = sCreatureStorage.LookupEntry<CreatureInfo>(entry);
               if (cInfo)
               {
                   petDisplayId = fields[16].GetUInt32();
                   petLevel     = fields[17].GetUInt32();
                   petFamily    = cInfo->family;
               }
           }
    
           *p_data << uint32(petDisplayId);
           *p_data << uint32(petLevel);
           *p_data << uint32(petFamily);
       }
    
       Tokens data = StrSplit(fields[18].GetString(), " ");
       for (uint8 slot = 0; slot < EQUIPMENT_SLOT_END; ++slot)
       {
           uint32 visualbase = slot * 2;
           uint32 item_id = GetUInt32ValueFromArray(data, visualbase);
           const ItemPrototype * proto = sObjectMgr.GetItemPrototype(item_id);
           if (!proto)
           {
               *p_data << uint32(0);
               *p_data << uint8(0);
               *p_data << uint32(0);
               continue;
           }
    
           SpellItemEnchantmentEntry const *enchant = NULL;
    
           uint32 enchants = GetUInt32ValueFromArray(data, visualbase + 1);
           for (uint8 enchantSlot = PERM_ENCHANTMENT_SLOT; enchantSlot <= TEMP_ENCHANTMENT_SLOT; ++enchantSlot)
           {
               // values stored in 2 uint16
               uint32 enchantId = 0x0000FFFF & (enchants >> enchantSlot*16);
               if (!enchantId)
                   continue;
    
               enchant = sSpellItemEnchantmentStore.LookupEntry(enchantId);
               if (enchant)
                   break;
           }
    
           *p_data << uint32(proto->DisplayInfoID);
           *p_data << uint8(proto->InventoryType);
           *p_data << uint32(enchant ? enchant->aura_id : 0);
       }
    
       *p_data << uint32(0);                                   // bag 1 display id
       *p_data << uint8(0);                                    // bag 1 inventory type
       *p_data << uint32(0);                                   // enchant?
       *p_data << uint32(0);                                   // bag 2 display id
       *p_data << uint8(0);                                    // bag 2 inventory type
       *p_data << uint32(0);                                   // enchant?
       *p_data << uint32(0);                                   // bag 3 display id
       *p_data << uint8(0);                                    // bag 3 inventory type
       *p_data << uint32(0);                                   // enchant?
       *p_data << uint32(0);                                   // bag 4 display id
       *p_data << uint8(0);                                    // bag 4 inventory type
       *p_data << uint32(0);                                   // enchant?

  2. My git Account is ChasterX

    Email is [email protected]

    @tyrael your are right but I think the main problem is SMSG_REDIRECT_CLIENT

    EDIT#1:

    I updated WorldSocket::HandleAuthSession to 4.0.3a structure but it doesnt work. Could somebody look at my work and tell me my mistakes?

            
            uint8 digest[20];
            uint8 h[20];
            uint8 unk;
            uint8 unk1;
            uint64 unk2;
            uint32 unk3;
            uint32 unk4;
            uint32 unk5;
            uint16 ClientBuild;
            uint32 unk6;
            uint32 ClientSeed;
            uint32 unk7;
            std::string account;
            uint32 id, security;
        LocaleConstant locale;
        SHA1Hash sha1;
        BigNumber v, s, g, N, K;
        WorldPacket packet, SendAddonPacked;
        uint32 m_addonSize;
        uint32 m_addonLenCompressed;
        uint8* m_addonCompressed;
    
    
    
       recvPacket >> unk >> h[16] >> ClientBuild >> h[6] >> unk1 >> unk2 >> h[14] >> h[11] >> h[2];
       recvPacket >> unk3 >> h[13] >> h[5] >> h[19] >> h[9] >> unk4 >> h[12] >> h[10];
       recvPacket >> h[3] >> unk5 >> h[7] >> h[17] >> ClientSeed >> unk6 >> h[0];
       recvPacket >> h[8] >> h[1] >> h[4] >> h[18] >> h[15];
       recvPacket >> account;
       memcpy(digest, h, 20);
       uint32 ByteSize = 0, SizeUncompressed;
       recvPacket >> ByteSize >> SizeUncompressed;
       m_addonSize = SizeUncompressed;
       m_addonLenCompressed = ByteSize - 4;
       m_addonCompressed = new uint8[byteSize - 4];
       recvPacket.read(m_addonCompressed, ByteSize - 4);

  3. SMSG_AUTH_CHALLENGE = 0x3400   //4.0.3.13329
    16 bytes key 
    uint8 connectionCount 
    uint32 serverSeed 
    16 bytes key 

    It's

    packet << uint32(0);

    packet << uint32(0);

    packet << uint32(m_Seed);

    packet << uint32(0);

    packet << uint8(1);

    packet << uint32(0);

    packet << uint32(0);

    packet << uint32(0);

    packet << uint32(0);

    packet << uint32(0);

    Yours is

    8 Bytes key

    seed

    4 Bytes Key

    uint8 ConnectionCount

    20 Bytes key

    but it should be

    16 byte key

    seed

    connectioncount

    16byte key

           
    packet << uint32(0);
    packet << uint32(0);
    packet << uint32(0);
    packet << uint32(0);
    packet << uint32(m_Seed);
    packet << uint8(1);
    packet << uint32(0);
    packet << uint32(0);
    packet << uint32(0);
    packet << uint32(0);
    

    Here a few opcodes for 4.0.3.13329

    SMSG_AUTH_CHALLENGE = 0x3400, 
    CMSG_AUTH_SESSION = 0x880A, 
    SMSG_AUTH_RESPONSE = 0x1454, 
    SMSG_ACCOUNT_DATA_TIMES = 0xFD55, 
    SMSG_REALM_SPLIT = 0x3454, 
    SMSG_CHAR_ENUM = 0x775E, 
    CMSG_CHAR_ENUM = 0x6655, 
    CMSG_PLAYER_LOGIN = 0x05A1, 
    SMSG_COMPRESSED_UPDATE_OBJECT = 0x6C7D, 
    SMSG_UPDATE_OBJECT = 0xFC7D, 
    SMSG_COMPRESSED_MOVES = 0x621C, 
    SMSG_TUTORIAL_FLAGS = 0x8657, 
    SMSG_FEATURE_SYSTEM_STATUS = 0x5C74, 
    SMSG_MOTD = 0x077C, 
    SMSG_LOGIN_VERIFY_WORLD = 0xEC7C, 
    SMSG_QUESTUPDATE_ADD_KILL = 0x157F, 
    SMSG_CONTACT_LIST = 0x1675, 
    SMSG_BINDPOINTUPDATE = 0x175D, 
    CMSG_VOICE_SESSION_ENABLE = 0x477C, 
    MSG_QUERY_NEXT_MAIL_TIME = 0x7457, 
    SMSG_INITIALIZE_FACTIONS = 0xE674, 
    SMSG_GMTICKET_GETTICKET = 0xF47F, 
    CMSG_SET_SELECTION = 0x5577, 
    CMSG_CAST_SPELL = 0x4C56, 
    SMSG_SPELL_START = 0x7C75, 
    SMSG_SPELL_GO = 0xE654, 
    SMSG_MONSTER_MOVE = 0xA65D, 
    SMSG_ATTACKERSTATEUPDATE = 0xBF56, 
    CMSG_REALM_SPLIT = 0x477D, 
    CMSG_ZONEUPDATE = 0x5C7D, 
    SMSG_COMBAT_LOG_MULTIPLE = 0x8F75, 
    CMSG_CANCEL_TRADE = 0x0C2A, 
    CMSG_PING = 0x882A, 
    SMSG_PONG = 0xB000, 
    CMSG_TIME_SYNC_RESP = 0x0D57, 
    SMSG_TIME_SYNC_REQ = 0x6F5E, 
    CMSG_CANCEL_AURA = 0x545E, 
    SMSG_AURA_UPDATE = 0xCE7D, 
    SMSG_LOG_XPGAIN = 0x7656, 
    SMSG_THREAT_UPDATE = 0x4E5F, 
    SMSG_HIGHEST_THREAT_UPDATE = 0x3F7E, 
    SMSG_ACTION_BUTTONS = 0x4574, 
    SMSG_INITIAL_SPELLS = 0x565D, 
    CMSG_CREATURE_QUERY = 0x8454, 
    SMSG_CREATURE_QUERY_RESPONSE = 0xE45E, 
    CMSG_GAMEOBJECT_QUERY = 0x0455, 
    SMSG_GAMEOBJECT_QUERY_RESPONSE = 0x0577, 
    CMSG_CHAT_MSG_SAY = 0x5A90, 
    CMSG_CHAT_MSG_YELL = 0x3A10, 
    CMSG_CHAT_MSG_CHANNEL_SAY = 0x3A88, 
    CMSG_CHAT_MSG_GUILD = 0x2A88, 
    CMSG_CHAT_MSG_WISPER = 0x5A80, 
    CMSG_CHAT_MSG_AFK = 0x6A88, 
    CMSG_CHAT_MSG_DND = 0x3A00, 
    SMSG_CHANNEL_NOTIFY = 0xC574, 
    SMSG_MESSAGECHAT = 0x867F, 
    MSG_MOVE_SET_FACING = 0x865D, 
    MSG_MOVE_START_FORWARD = 0xF576, 
    MSG_MOVE_START_BACKWARD = 0xCC7C, 
    MSG_MOVE_STOP = 0x4E76, 
    MSG_MOVE_START_STRAFE_LEFT = 0x5F5C, 
    MSG_MOVE_START_STRAFE_RIGHT = 0x265C, 
    MSG_MOVE_STOP_STRAFE = 0x0D7F, 
    MSG_MOVE_JUMP = 0x7477, 
    MSG_MOVE_FALL_LAND = 0xF474, 
    MSG_MOVE_START_TURN_LEFT = 0x945F, 
    MSG_MOVE_START_TURN_RIGHT = 0x6657, 
    MSG_MOVE_STOP_TURN = 0x6d54, 
    MSG_MOVE_HEARTBEAT = 0x177C, 
    CMSG_SET_ACTION_BUTTON = 0x355C, 
    CMSG_LOGOUT_REQUEST = 0x8E56, 
    SMSG_LOGOUT_RESPONSE = 0x000, 
    CMSG_LOOT = 0xBD77, 
    CMSG_PAGE_TEXT_QUERY = 0x2C75, 
    SMSG_PAGE_TEXT_QUERY_RESPONSE = 0x775F, 
    CMSG_NPC_TEXT_QUERY = 0x5654, 
    SMSG_NPC_TEXT_UPDATE = 0x365E, 
    CMSG_NAME_QUERY = 0xC57E, 
    SMSG_NAME_QUERY_RESPONSE = 0x4D5E, 
    CMSG_JOIN_CHANNEL = 0x3A98, 
    CMSG_EMOTE = 0x7F5C, 
    SMSG_EMOTE = 0x000, 
    CMSG_TEXT_EMOTE = 0x4A90, 
    SMSG_TEXT_EMOTE = 0x000, 
    SMSG_PARTYKILLLOG = 0xE775, 
    MSG_CHANNEL_START = 0x8574, 
    MSG_CHANNEL_UPDATE = 0x000, 
    CMSG_CANCEL_CHANNELLING = 0x957C, 
    CMSG_ITEM_QUERY_SINGLE = 0x0180, 
    SMSG_ITEM_QUERY_SINGLE_RESPONSE = 0x0828, 
    SMSG_SEND_QUEUED_PACKETS = 0x1400, 
    SMSG_REDIRECT_CLIENT = 0x9000, 
    SMSG_NOTIFICATION = 0x620A, 
    SMSG_PLAYED_TIME = 0x4108, 
    SMSG_TRANSFER_PENDING = 0x502B, 
    SMSG_TRANSFER_ABORTED= 0xA2A, 
    SMSG_KICK_REASON= 0x3320, 
    SMSG_NPC_TEXT_RESPONSE= 0x320A, 
    SMSG_GUILD_QUERY_RESPONSE= 0x3208, 
    SMSG_QUEST_QUERY_RESPONSE= 0x720B, 
    SMSG_PET_NAME_QUERY_RESPONSE= 0xE20A, 
    SMSG_PETITION_QUERY_RESPONSE= 0x7301, 
    SMSG_ITEM_TEXT_QUERY_RESPONSE= 0xA929, 
    SMSG_INVALIDATE_PLAYER= 0xFB0A, 
    SMSG_ARENA_TEAM_QUERY_RESPONSE= 0xC02B, 
    SMSG_INVALIDATE_DANCE= 0x9229, 
    SMSG_DANCE_QUERY_RESPONSE= 0x7800, 
    SMSG_WHO= 0xCB28, 
    SMSG_WHOIS= 0x3328, 
    SMSG_RWHOIS= 0x3228, 
    SMSG_FRIEND_STATUS= 0xBB22, 
    SMSG_WARDEN_DATA= 0x212B, 
    SMSG_ITEM_PUSH_RESULT= 0xDB00, 
    SMSG_LEARNED_SPELL= 0x9004, 
    SMSG_TUTORIAL_FLAGS= 0x8203, 
    SMSG_CHAR_DELETE= 0x7F56, 
    SMSG_ADDON_INFO= 0xEE5D, 
    SMSG_CLIENTCACHE_VERSION= 0xCE74, 
    ServerAuthResponse= 0x1454, 
    SMSG_LOGIN_FAILED= 0x2C56, 
    SMSG_COMSAT_CONNECT_FAIL= 0x602A, 
    SMSG_UNK_CHAT_SERVER_RECONNECTED= 0xD928, 
    SMSG_CHANNEL_LIST= 0x7009, 
    SMSG_ZONE_UNDER_ATTACK= 0xE801, 
    SMSG_DEFENSE_MESSAGE= 0x6020, 
    SMSG_SERVER_MESSAGE= 0x2100, 
    SMSG_RAID_INSTANCE_MESSAGE= 0xD929, 
    SMSG_INSTANCE_RESET= 0x1B28, 
    SMSG_INSTANCE_RESET_FAILED= 0xD208, 
    SMSG_UPDATE_LAST_INSTANCE= 0x9B21, 
    SMSG_UPDATE_INSTANCE_OWNERSHIP= 0x8321, 
    SMSG_EXPECTED_SPAM_RECORDS= 0xA108, 
    SMSG_TITLE_EARNED= 0x420B, 
    SMSG_UNK_off_854450= 0xB908, 
    SMSG_GM_MESSAGECHAT= 0x2902, 
    SMSG_LOG_XPGAIN= 0x7202, 
    SMSG_UNK_sub_853DB0= 0xE328, 
    SMSG_CHANNEL_MEMBER_COUNT= 0x823, 
    SMSG_COMSAT_RECONNECT_TRY= 0x7A2A, 
    SMSG_COMSAT_DISCONNECT= 0x2A03, 
    SMSG_COMSAT_CONNECTION_FAILED= 0xF202, 
    SMSG_VOICE_CHAT_STATUS= 0x8923, 
    SMSG_USERLIST_ADD= 0xBA20, 
    SMSG_USERLIST_REMOVE= 0x2228, 
    SMSG_USERLIST_UPDATE= 0xE30B, 
    SMSG_COMSAT_VOICE_SESSION_FULL= 0xA002, 
    SMSG_SERVER_FIRST_ACHIEVEMENT= 0xA92A, 
    SMSG_GOSSIP_MESSAGE= 0xD12A, 
    SMSG_GOSSIP_COMPLETE= 0x430B, 
    SMSG_GOSSIP_POI= 0x1002, 
    SMSG_DUEL_REQUESTED= 0x530A, 
    SMSG_DUEL_OUTOFBOUNDS= 0xB829, 
    SMSG_DUEL_INBOUNDS= 0x9B00, 
    SMSG_DUEL_COUNTDOWN= 0x8A21, 
    SMSG_DUEL_COMPLETE= 0xE323, 
    SMSG_DUEL_WINNER= 0x2329, 
    SMSG_MINIGAME_SETUP= 0x1824, 
    SMSG_MINIGAME_STATE= 0x482B, 
    SMSG_OFFER_PETITION_ERROR= 0xBB2A, 
    SMSG_GUILD_BANK_LIST= 0xB822, 
    MSG_GUILD_BANK_LOG_QUERY= 0x6308, 
    MSG_GUILD_BANK_MONEY_WITHDRAWN= 0x302A, 
    MSG_QUERY_GUILD_BANK_TEXT = 0x2322, 
    SMSG_PLAY_DANCE= 0xC203, 
    SMSG_STOP_DANCE= 0x4002, 
    SMSG_NOTIFY_DANCE= 0xE308, 
    SMSG_LEARNED_DANCE_MOVES= 0xF209, 
    SMSG_ARENA_TEAM_ROSTER= 0xA80A, 
    SMSG_ARENA_TEAM_STATS= 0x9B0B, 
    SMSG_PET_SPELLS= 0x5928, 
    SMSG_PET_MODE= 0xFA0B, 
    SMSG_PET_ACTION_FEEDBACK= 0xA800, 
    SMSG_PET_BROKEN= 0xE92B, 
    SMSG_PET_RENAMEABLE= 0x520A, 
    SMSG_PET_UPDATE_COMBO_POINTS= 0xD20B, 
    SMSG_PET_GUIDS= 0xFA08, 
    SMSG_UNK_MSG_INSPECT_ARENA_TEAMS= 0x6108, 
    SMSG_UNK_MSG_AUCTION_HELLO= 0xD120, 
    SMSG_AUCTION_COMMAND_RESULT= 0xEB22, 
    SMSG_AUCTION_BIDDER_LIST_RESULT= 0xEA0A, 
    SMSG_AUCTION_OWNER_LIST_RESULT= 0xDA22, 
    SMSG_AUCTION_LIST_RESULT= 0xAB03, 
    SMSG_AUCTION_BIDDER_NOTIFICATION= 0x3021, 
    SMSG_AUCTION_OWNER_NOTIFICATION= 0xC009, 
    SMSG_AUCTION_REMOVED_NOTIFICATION= 0xA0A, 
    SMSG_AUCTION_LIST_PENDING_SALES= 0xDB29, 
    SMSG_SEND_MAIL_RESULT= 0x8B23, 
    SMSG_MAIL_LIST_RESULT= 0x3804, 
    SMSG_UNK_MSG_QUERY_NEXT_MAIL_TIME= 0x7003, 
    SMSG_RECEIVED_MAIL= 0x2122, 
    SMSG_UNK_MSG_LIST_STABLED_PETS= 0x5A09, 
    SMSG_STABLE_RESULT= 0xE300, 
    SMSG_ARENA_OPPONENT_UPDATE= 0x5B29, 
    SMSG_UNK_MSG_GUILD_PERMISSIONS= 0x2A00, 
    SMSG_UNK_MSG_GUILD_EVENT_LOG_QUERY= 0xF90A, 
    SMSG_UNK_MSG_RAID_TARGET_UPDATE= 0x380B, 
    SMSG_UNK_MSG_RAID_READY_CHECK= 0x8B22, 
    SMSG_UNK_MSG_RAID_READY_CHECK_CONFIRM= 0xB123, 
    SMSG_RAID_READY_CHECK_FINISHED= 0xF821, 
    SMSG_RAID_READY_CHECK_ERROR= 0x502A, 
    SMSG_UNK_MSG_NOTIFY_PARTY_SQUELCH= 0xE120, 
    SMSG_ECHO_PARTY_SQUELCH= 0x1303, 
    SMSG_UNK_EVENT_UPDATE_INSTANCE_INFO= 0x90B, 

  4. Hum.. How can i do it ? And after it's possible to connect in game with 4.0.X client ?

    This is for HandleAuthSession

         uint8 digest[20];
        uint8 h[20];
        uint8 unkb;
        uint32 unkd;
        uint64 unkq;
            uint32 unk2;
            uint32 unk4;
            uint8 unk5;
            uint16 ClientBuild;
            uint32 unk6;
            uint32 ClientSeed;
            uint32 unk7;
            std::string account;
        uint32 id, security;
        LocaleConstant locale;
        SHA1Hash sha1;
        BigNumber v, s, g, N, K;
        WorldPacket packet, SendAddonPacked;
        uint32 m_addonSize;
        uint32 m_addonLenCompressed;
        uint8* m_addonCompressed;
    
    
    
       recvPacket >> h[4] >> h[8] >> h[14] >> h[17] >> unkb >> h[3] >> unkd >> h[5];
       recvPacket >> unkb >> h[0] >> h[10] >> unkd >> h[12] >> h[6] >> unkd >> ClientBuild;
       recvPacket >> h[7] >> h[11] >> h[16] >> h[18] >> h[13] >> unkq >> h[15];
       recvPacket >> ClientSeed >> h[9] >> unkd >> h[1] >> h[2] >> h[19];
       memcpy(digest, h, 20);
       uint32 ByteSize = 0, SizeUncompressed;
       recvPacket >> ByteSize >> SizeUncompressed;
       m_addonSize = SizeUncompressed;
       m_addonLenCompressed = ByteSize - 4;
       m_addonCompressed = new uint8[byteSize - 4];
       recvPacket.read(m_addonCompressed, ByteSize - 4);
       recvPacket >> account; 

    This is for SMSG_AUTH_CHALLENGE

        BigNumber key1, key2;
       key1.SetRand(64);
       key2.SetRand(64);
       uint32* k1 = (uint32*)key1.AsByteArray();
       uint32* k2 = (uint32*)key2.AsByteArray();
       uint8 ConnectionCount = 1;
    
       packet << k2[2] << k1[0];
       packet << ConnectionCount;
       packet << m_Seed;
       packet << k1[2] << k1[1];
       packet << k2[0] << k2[1];
       packet << k1[3] << k2[3];

    This is for SMSG_AUTH_RESPONSE

    void WorldSession::SendAuthResponse(uint8 code, bool shortForm, uint32 queuePos)
    {
    
    
       WorldPacket packet(SMSG_AUTH_RESPONSE, 1 + 4 + 1 + 4 + 1 + (shortForm ? 0 : (4 + 1)));
       packet << uint8(code);
       packet << uint32(0);                                   // BillingTimeRemaining
       packet << uint8(0);                                    // BillingPlanFlags
       packet << uint32(0);                                   // BillingTimeRested
       packet << uint16(Expansion());                          // 0 - normal, 1 - TBC, 2 - WOTLK, 3 - Cataclysm must be set in database manually for each account
    
       if (!shortForm)
       {
           packet << uint32(queuePos);                             // Queue position
           packet << uint8(0);                                     // Unk 3.3.0
       }
    
       SendPacket(&packet);
    }

    After this was changed you come to packet SMSG_CHAR_ENUM

    This is the structure of the character datas.... the function for this you can find in CharacterHandler with reference to player.cpp

            uint64 GUID;
             CString Name;
             byte Race;
             byte Class;
             byte Gender;
             byte Skin;
             byte Face;
             byte HairStyle;
             byte HairColor;
             byte FacialHair;
             byte level;
             uint32 ZoneId;
             uint32 MapId;
             float X;
             float Y;
             float Z;
             uint64 Unk;
             uint32 CharacterFlags;
             uint32 CustomizationFlags;
             byte FirstLogin;
             uint32 PetDisplayId;
             uint32 PetLevel;
             uint32 PetFamily;
             CharacterItem Items[23];

    After this 4 things are done you can enter the characterlist.

    Now you only have to change the opcodes opcodes.h to enter the world.

    Btw here are new opcodes from cromon:

    PH_Handle_SMSG_NOTIFICATION    0x1380
    PH_Handle_SMSG_PLAYED_TIME    0x1470
    PH_Handle_SMSG_TRANSFER_PENDING    0x1560
    PH_Handle_SMSG_TRANSFER_ABORTED    0x34a0
    PH_Handle_SMSG_LOGIN_VERIFY_WORLD    0x3960
    PH_Handle_SMSG_NEW_WORLD    0x39f0
    PH_Handle_SMSG_DESTROY_OBJECT    0x966f0
    PH_Handle_SMSG_CREATURE_QUERY_RESPONSE    0x9ec00
    PH_Handle_SMSG_GAMEOBJECT_QUERY_RESPONSE    0x9ec20
    PH_Handle_SMSG_NPC_TEXT_UPDATE    0x9ec40
    PH_Handle_SMSG_QUEST_QUERY_RESPONSE    0x9ec60
    PH_Handle_SMSG_PAGE_TEXT_QUERY_RESPONSE    0x9ecd0
    PH_Handle_SMSG_PET_NAME_QUERY_RESPONSE    0x9ecf0
    PH_Handle_SMSG_PETITION_QUERY_RESPONSE    0x9edc0
    PH_Handle_SMSG_INVALIDATE_PLAYER    0x9ee30
    PH_Handle_SMSG_ARENA_TEAM_QUERY_RESPONSE    0x9eeb0
    PH_Handle_SMSG_INVALIDATE_DANCE    0x9ef00
    PH_Handle_SMSG_NAME_QUERY_RESPONSE    0x9f120
    PH_Handle_SMSG_GUILD_QUERY_RESPONSE    0x9f350
    PH_Handle_SMSG_ITEM_TEXT_QUERY_RESPONSE    0x9f3b0
    PH_Handle_SMSG_DANCE_QUERY_RESPONSE    0x9f420
    PH_Handle_SMSG_WHOIS    0xd5740
    PH_Handle_SMSG_RWHOIS    0xd5780
    PH_Handle_SMSG_FRIEND_STATUS    0xda890
    PH_Handle_SMSG_CONTACT_LIST    0xda8e0
    PH_Handle_SMSG_WHO    0xda900
    PH_Handle_SMSG_UPDATE_ACCOUNT_DATA_COMPLETE    0xdb210
    PH_Handle_SMSG_ACCOUNT_DATA_TIMES    0xdb690
    PH_Handle_SMSG_CHECK_FOR_BOTS    0xdb830
    PH_Handle_SMSG_UPDATE_ACCOUNT_DATA    0xdb8f0
    PH_Handle_SMSG_GAMESPEED_SET    0xdc9b0
    PH_Handle_SMSG_LOGIN_SETTIMESPEED    0xdca50
    PH_Handle_SMSG_GAMETIME_UPDATE    0xdcb30
    PH_Handle_SMSG_SERVERTIME    0xdcbc0
    PH_Handle_SMSG_GAMETIME_SET    0xdccb0
    PH_Handle_SMSG_GROUP_ACTION_THROTTLED    0x15bb00
    PH_Handle_SMSG_GUILD_COMMAND_RESULT    0x15c4a0
    PH_Handle_SMSG_GUILD_INVITE    0x15c4f0
    PH_Handle_SMSG_VOICE_SESSION_ROSTER    0x15c5e0
    PH_Handle_SMSG_VOID_SESSION_LEAVE    0x15c8c0
    PH_Handle_SMSG_CALENDAR_INVITE_RESULT    0x15ca90
    PH_Handle_SMSG_ARENA_TEAM_COMMAND_RESULT    0x15fc00
    PH_Handle_VoiceSessionParentalSomething    0x160080
    PH_Handle_DamageRelated    0x163aa0
    PH_Handle_SMSG_TRAINER_BUY_SPELL_FAILED    0x167fc0
    PH_Handle_SMSG_TIME_SYNC_REQ    0x16a4f0
    PH_Handle_SMSG_GUILD_EVENT    0x16def0
    PH_Handle_SMSG_CROSSED_INEBRIATION_THRESHOLD    0x1757c0
    PH_Handle_SMSG_LOOT_LIST    0x1b4de0
    PH_Handle_SMSG_FLIGHT_SPLINE_SYNC    0x1b4e40
    PH_Handle_SMSG_COMPRESSED_MOVES    0x1b4ea0
    PH_Handle_SMSG_AI_REACTION    0x1b4f60
    PH_Handle_SMSG_PET_ACTION_SOUND    0x1b4fe0
    PH_Handle_SMSG_PET_DISMISS_SOUND    0x1b5050
    PH_Handle_SMSG_FORCE_DISPLAY_UPDATE    0x1b5160
    PH_Handle_SMSG_HEALTH_UPDATE    0x1b51b0
    PH_Handle_SMSG_MOUNTSPECIAL_ANIM    0x1bc2f0
    PH_Handle_SMSG_POWER_UPDATE    0x1c2f90
    PH_Handle_SMSG_CLIENT_CONTROL_UPDATE    0x1cea40
    PH_Handle_SMSG_CANCEL_AUTO_REPEAT    0x1ceac0
    PH_Handle_SMSG_AURA_UPDATE__ALL    0x1d1c70
    PH_Handle_SMSG_MIRRORIMAGE_DATA    0x1d3f60
    PH_Handle_SMSG_STANDSTATE_UPDATE    0x1e3440
    PH_Handle_SMSG_DISMOUNT    0x1e5e00
    PH_Handle_SMSG___HIGHEST___THREAT_UPDATE    0x1e6060
    PH_Handle_SMSG_PARTYKILLLOG    0x1fc5a0
    PH_Handle_SMSG_PROCRESIST    0x1fc610
    PH_Handle_SMSG_DISPEL_FAILED    0x1fc710
    PH_Handle_SMSG_ENCHANTMENTLOG    0x1fc850
    PH_Handle_SMSG_PERIODICAURALOG    0x1fe780
    PH_Handle_SMSG_DESTRUCTIBLE_BUILDING_DAMAGE    0x1fe7a0
    PH_Handle_SMSG_FACTION_CHANGE    0x35bfc0
    PH_Handle_SMSG_KICK_REASON    0x35c1f0
    PH_Handle_SMSG_SET_PLAYER_DECLINED_NAMES_RESULT    0x35de00
    PH_Handle_SMSG_GAMEOBJECT_RESET_STATE    0x3fd240
    PH_Handle_SMSG_FEIGN_DEATH_RESISTED    0x3fd290
    PH_Handle_SMSG_FLAT_AND_PCT_SPELL_MODIFIER    0x3fd300
    PH_Handle_SMSG_SPELL_DELAYED    0x3fe7d0
    PH_Handle__MAYBE_MSG_CHANNEL_START    0x3fe8c0
    PH_Handle_MSG_CHANNEL_UPDATE    0x3fea10
    PH_Handle_SMSG_SPELL_UPDATE_CHAIN_TARGETS    0x3fefe0
    PH_Handle_SMSG_CONTROL_VECHICLE    0x3ff080
    PH_Handle_SMSG_UNKNOWN_1215    0x3ff0c0
    PH_Handle_SMSG_PLAY_SPELL_VISUAL    0x3ff140
    PH_Handle_SMSG_PLAY_SPELL_IMPACT    0x3ff1f0
    PH_Handle_SMSG_DAMAGE_TAKEN_OBSOLETE    0x3ff2a0
    PH_Handle_SMSG_PET_TAME_FAILURE    0x401c00
    PH_Handle_SMSG_SPELL_MISC_COOLDOWN    0x403820
    PH_Handle_SMSG_COOLDOWN_CHEAT    0x403920
    PH_Handle_SMSG_SPELL_FAILED_OTHER    0x405d80
    PH_Handle_SMSG_PET_CAST_FAILED    0x405e70
    PH_Handle_SMSG_ITEM_COOLDOWN    0x405fe0
    PH_Handle_SMSG_MEETINGSTONE_IN_PROGRESS    0x406140
    PH_Handle_SMSG_CAST_FAILED    0x409da0
    PH_Handle_SMSG_SPELL_FAILURE    0x409ef0
    PH_Handle_SMSG_SPELL_COOLDOWN    0x40a050
    PH_Handle_SMSG_SPELL_START_AND_GO    0x411820
    PH_Handle_SMSG_NOTIFY_DEST_LOC_SPELL_CAST    0x411910
    PH_Handle_Mirror_Times    0x41fd50
    PH_Handle_SMSG_CHANNEL_MEMBER_COUNT    0x439900
    PH_Handle_SMSG_COMSAT_RECONNECT_TRY    0x4399e0
    PH_Handle_SMSG_COMSAT_DISCONNECT    0x439a00
    PH_Handle_SMSG_COMSAT_CONNECTION_FAILED    0x439a20
    PH_Handle_SMSG_COMSAT_VOICE_SESSION_FULL    0x439a40
    PH_Handle_SMSG_UPDATE_INSTANCE_OWNERSHIP    0x439d50
    PH_Handle_SMSG_UPDATE_LAST_INSTANCE    0x43c680
    PH_Handle_SMSG_VOICE_CHAT_STATUS    0x43f510
    PH_Handle_SMSG_USERLIST_UPDATE    0x43f650
    PH_Handle_SMSG_EXCPECTED_SPAM_RECORDS    0x440c90
    PH_Handle_SMSG_TEXT_EMOTE    0x443370
    PH_Handle_SMSG_USERLIST_ADD    0x443430
    PH_Handle_SMSG_USERLIST_REMOVE    0x443600
    PH_Handle_SMSG_CHANNEL_LIST    0x445190
    PH_Handle_SMSG_SERVER_FIRST_ACHIEVEMENT    0x44a680
    PH_Handle_SMSG_ZONE_UNDER_ATTACK    0x44bbc0
    PH_Handle_SMSG_TITLE_EARNED    0x44bd20
    PH_Handle_SMSG_XP_GAIN    0x44bf80
    PH_Handle_SMSG_DURABILITY_DAMAGE_DEATH    0x44c070
    PH_Handle_SMSG_DEFENSE_MESSAGE    0x44c0a0
    PH_Handle_SMSG_SERVER_MESSAGE    0x44c200
    PH_Handle_SMSG_RAID_INSTANCE_MESSAGE    0x44c300
    PH_Handle_SMSG_INSTANCE_RESET    0x44c500
    PH_Handle_SMSG_INSTANCE_RESET_FAILED    0x44c5d0
    PH_Handle_SMSG_CHANNEL_NOTIFY    0x44d6b0
    PH_Handle_SMSG_MESSAGECHAT    0x44e5e0
    PH_Handle_SMSG_GM_MESSAGECHAT    0x44e600
    PH_Handle_SMSG_UPDATE_LAST_INSTANCE_CREATED    0x44ef10
    PH_Handle_SMSG_POWERGAINLOG_OBSOLETE    0x44f900
    PH_Handle_SMSG_BARBER_SHOP_RESULT    0x4519c0
    PH_Handle_SMSG_ENABLE_BARBER_SHOP    0x452e10
    PH_Handle_SMSG_TUTORIAL_FLAGS    0x4540a0
    PH_Handle_SMSG_COMMENTATOR_UNK2    0x4762f0
    PH_Handle_SMSG_COMMENTATOR_PLAYER_INFO    0x479340
    PH_Handle_SMSG_COMMENTATOR_STATE_CHANGED    0x4799a0
    PH_Handle_SMSG_COMMENTATOR_UNK1    0x479c70
    PH_Handle_SMSG_COMMENTATOR_MAP_INFO    0x47a0a0
    PH_Handle_MSG_RAID_READY_CHECK_FINISHED    0x47a490
    PH_Handle_SMSG_RAID_READY_CHECK_ERROR    0x47a4d0
    PH_Handle_MSG_NOTIFY_PART_SQUELCH    0x47a4f0
    PH_Handle_SMSG_ECHO_PARTY_SQUELCH    0x47a540
    PH_Handle_MSG_RAID_TARGET_UPDATE    0x47cc30
    PH_Handle_MSG_RAID_READY_CHECK_CONFIRM    0x47cd70
    PH_Handle_MSG_RAID_READY_CHECK    0x47da90
    PH_Handle_SMSG_GROUP_JOINED_BATTLEGROUND    0x48b610
    PH_Handle_MSG_BATTLEGROUND_PLAYER_POSITIONS    0x48b780
    PH_Handle_SMSG_BATTLEGROUND_PLAYER_JOINED    0x48b8a0
    PH_Handle_SMSG_BATTLEGROUND_PLAYER_LEFT    0x48b900
    PH_Handle_SMSG_VICTIMSTATEUPDATE_OBSOLETE    0x48d6b0
    PH_Handle_SMSG_PET_BROKEN    0x493440
    PH_Handle_SMSG_PET_RENAMEABLE    0x493460
    PH_Handle_SMSG_PET_UN_LEARNED_SPELL    0x493980
    PH_Handle_SMSG_PET_MODE    0x493b10
    PH_Handle_SMSG_PET_ACTION_FEEDBACK    0x493b80
    PH_Handle_SMSG_PET_UPDATE_COMBO_POINTS    0x493c90
    PH_Handle_SMSG_PET_GUIDS    0x496b30
    PH_Handle_SMSG_PET_SPELLS    0x497190
    PH_Handle_MSG_QUERY_NEXT_MAIL_TIME    0x4affa0
    PH_Handle_SMSG_MEETINGSTONE_COMPLETE    0x4b0080
    PH_Handle_SMSG_MAIL_SEND_RESULT    0x4b2830
    PH_Handle_SMSG_RECEIVED_MAIL    0x4b2a90
    PH_Handle_SMSG_MAIL_LIST_RESULT    0x4b2d80
    PH_Handle_MSG_AUCTION_HELLO    0x4b7ad0
    PH_Handle_SMSG_AUCTION_COMMAND_RESULT    0x4b7b40
    PH_Handle_SMSG_AUCTION_BIDDER_NOTIFICATION    0x4b86e0
    PH_Handle_SMSG_AUCTION_OWNER_NOTIFICATION    0x4b8a20
    PH_Handle_SMSG_AUCTION_REMOVED_NOTIFICATION    0x4b8d80
    PH_Handle_SMSG_AUCTION_LIST_RESULT    0x4b9e40
    PH_Handle_SMSG_AUCTION_OWNER_LIST_RESULT    0x4ba160
    PH_Handle_SMSG_AUCTION_LIST_PENDING_SALES    0x4ba570
    PH_Handle_SMSG_AUCTION_BIDDER_LIST_RESULT    0x4ba9f0
    PH_Handle_SMSG_EQUIPMENT_SET_LIST    0x4dfc40
    PH_Handle_SMSG_EQUIPMENT_SET_SAVED    0x4dfe70
    PH_Handle_SMSG_EQUIPMENT_SET_USE_RESULT    0x4dfec0
    PH_Handle_SMSG_CURRENCY_GAINED    0x4e3590
    PH_Handle_SMSG_RESPOND_INSPECT_ACHIEVEMENTS    0x4e6120
    PH_Handle_SMSG_CRITERIA_UPDATE    0x4e8270
    PH_Handle_SMSG_INITIALIZE_FACTIONS    0x4eeb10
    PH_Handle_SMSG_ARENA_TEAM_STATS    0x4ef210
    PH_Handle_SMSG_ARENA_TEAM_ROSTER    0x4f0280
    PH_Handle_SMSG_STOP_DANCE    0x4fd870
    PH_Handle_SMSG_LEARNED_DANCE_MOVES    0x4fd8c0
    PH_Handle_SMSG_PLAY_DANCE    0x4fdad0
    PH_Handle_SMSG_NOTIFY_DANCE    0x4fe840
    PH_Handle_MSG_GUILD_BANK_MONEY_WITHDRAWN    0x5046d0
    PH_Handle_MSG_QUERY_GUILD_BANK_TEXT    0x504700
    PH_Handle_SMSG_GUILD_BANK_LIST    0x506080
    PH_Handle_MSG_GUILD_BANK_LOG_QUERY    0x507640
    PH_Handle_SMSG_OFFER_PETITION_ERROR    0x519fd0
    PH_Handle_SMSG_GOSSIP_COMPLETE    0x51b130
    PH_Handle_SMSG_GOSSIP_POI    0x51b160
    PH_Handle_SMSG_GOSSIP_MESSAGE    0x51bc70
    PH_Handle_SMSG_DUEL_OUTOFBOUNDS    0x521390
    PH_Handle_SMSG_DUEL_INBOUNDS    0x5213b0
    PH_Handle_SMSG_DUEL_COUNTDOWN    0x521560
    PH_Handle_SMSG_DUEL_COMPLETE    0x5215a0
    PH_Handle_SMSG_DUEL_REQUESTED    0x5217c0
    PH_Handle_SMSG_MINIGAME_STATE    0x537ad0
    PH_Handle_SMSG_MINIGAME_SETUP    0x537cc0

  5. This little program tells the client that SMSG_REDIRECT_CLIENT is already done and the connection is correct. You have to run this program while you are in the character list...

    This code is not written by me but by Cromon... Big Thanks

    class Program
    {
       private const uint gNetClient = 0x8A5C34;
    
       static void Main(string[] args)
       {
           try
           {
               Memory mem = new Memory("WoW");
               uint netClient = gNetClient + mem.Base;
               uint basePtr = mem.Read<uint>(netClient);
               uint ofs1 = basePtr + 0x464C; // bool QueuePacketsForConnection1;
               uint ofs2 = basePtr + 0x464D; // bool QueuePacketsForConnection2;
               uint ofs3 = basePtr + 0x461C; // ServerConnection* pConnection1;
               uint ofs4 = basePtr + 0x4620; // ServerConnection* pConnection2;
               byte val1 = mem.Read<byte>(ofs1);
               uint ptr1 = mem.Read<uint>(ofs3);
               mem.Write(ofs2, val1); // QueuePacketsForConnection2 = QueuePacketsForConnection1;
               mem.Write(ofs4, ptr1); // pConnection2 = pConnection1;
               Console.WriteLine("WoW patched! You may now enter the world!");
               Console.WriteLine("When disconnected from the server press enter and run the program again when back in character list!");
               Console.WriteLine("When you wanna close WoW press enter to make changes undone!");
               Console.ReadKey();
               mem.Write(ofs2, (byte)1);
               mem.Write(ofs4, (uint)0);
               Console.WriteLine("WoW patched back! You can now login again or close wow without error! Press any key to close program!");
               Console.ReadKey();
               return;
           }
           catch (ArgumentException)
           {
               Console.WriteLine("Could not open WoW! Please start WoW first, enter the character list and run the program!");
               Console.ReadKey();
               return;
           }
       }
    }

    And here the memory class

    public class Memory
    {
       IntPtr m_hProcess;
       uint m_modBase;
    
       public Memory(string processName)
       {
           Process[] matches = Process.GetProcessesByName(processName);
           if (matches == null || matches.Length == 0)
               throw new ArgumentException("No process exists with that name!", "processName");
           m_hProcess = matches[0].Handle;
           m_modBase = (uint)matches[0].MainModule.BaseAddress.ToInt32();
       }
    
       public uint Base { get { return m_modBase; } }
    
       public T Read<T>(IntPtr address) where T : struct
       {
           return Read<T>((uint)address.ToInt32());
       }
    
       public unsafe T Read<T>(uint address) where T : struct
       {
           int size = Marshal.SizeOf(typeof(T));
           byte[] buffer = new byte[size];
           int ret = ReadProcessMemory(m_hProcess, address, buffer, size);
           if (ret == 0)
               throw new ArgumentException("address is not valid!", "address");
           fixed(byte* ptr = buffer)
           {
               IntPtr pMem = new IntPtr(ptr);
               return (T)Marshal.PtrToStructure(pMem, typeof(T));
           }
       }
    
       public void Write<T>(IntPtr addr, T value) where T : struct
       {
           Write((uint)addr.ToInt32(), value);
       }
    
       public void Write<T>(uint addr, T value) where T : struct
       {
           int size = Marshal.SizeOf(value);
           IntPtr ptr = Marshal.AllocCoTaskMem(size);
           Marshal.StructureToPtr(value, ptr, false);
           int ret = WriteProcessMemory(m_hProcess, addr, ptr, size);
           Marshal.FreeCoTaskMem(ptr);
           if (ret == 0)
               throw new ArgumentException("address is not valid!", "address");
       }
    
       [DllImport("Kernel32.dll")]
       private static extern int ReadProcessMemory(IntPtr proc, uint addr, [in, Out]byte[] buffer, int len, uint ret = 0);
    
       [DllImport("Kernel32.dll")]
       private static extern int WriteProcessMemory(IntPtr proc, uint addr, IntPtr buffer, int len, uint ret = 0);
    }

  6. struct SMSG_AUTH_CHALLENGE // Opcode: 0x8500
    {
            uint32 unk1[2];
            byte connectionIndex;
            uint32 ServerSeed;
            uint32 unk2[5];
    };
    
    

    Thank you, btw SMSG_AUTH_CHALLENGE is:

    struct SMSG_AUTH_CHALLENGE // Opcode: 0x8500
    {
       uint32 ClientKey_part3;
       uint32 ServerKey_part1;
       uint8  unk;
       uint32 Seed;
       uint32 ServerKey_part3;
       uint32 ServerKey_part2;
       uint32 ClientKey_part1;
       uint32 ClientKey_part2;
       uint32 ServerKey_part4;
       uint32 ClientKey_part4;
    }

    struct SMSG_AUTH_CHALLENGE // Opcode: 0x8500

    {

    uint32 unk1[2];

    byte connectionIndex;

    uint32 ServerSeed;

    uint32 unk2[5];

    };

    works fine for me... I can enter the character list and i can enter the world

  7. Hi Mangos Community,

    I have a few informations for patch 4.0.1

    I hope this helps the community to support 4.0.1 soon. (ClientBuild 13205)

    struct SMSG_AUTH_CHALLENGE // Opcode: 0x8500
    {
            uint32 unk1[2];
            byte connectionIndex;
            uint32 ServerSeed;
            uint32 unk2[5];
    };
    
    struct CMSG_AUTH_SESSION // Opcode: 0x3000
    {
            byte hash4;
            byte hash8;
            byte hash14;
            byte hash17
            byte unk1;
            byte hash3;
            uint32 unk2;
            byte hash5;
            byte unk3;
            byte hash0;
            byte hash10;
            uint32 unk4;
            byte hash12;
            byte hash6;
            uint unk5;
            uint16 ClientBuild;
            byte hash7;
            byte hash11;
            byte hash16;
            byte hash18;
            byte hash13;
            uint32 unk6;
            byte hash15;
            uint32 ClientSeed;
            byte hash9;
            uint32 unk7;
            byte hash1;
            byte hash2;
            byte hash19;
            uint32 AddonSize;
            uint32 AddonSizeUncompressed;
            byte AddonDataCompressed[AddonSize - 4];
            CString AccountName;
    };

    struct SMSG_AUTH_RESPONSE // Opcode: 0xEB58
    {
             byte ErrorCode;
             uint32 unk1;
             byte unk2;
             uint32 unk3;
             uint16 ClientId; // 3 -> Cata, 2 -> Wotlk, 1 -> BC, 0 -> Classic
    };
    
    struct CMSG_CHAR_ENUM // Opcode: 0x3F8
    {
    };
    
    struct SMSG_CHAR_ENUM // Opcode: 0x429C
    {
             byte NumCharacters;
             CharacterData Characters[NumCharacters]; 
    };
    
    struct CharacterData
    {
             uint64 GUID;
             CString Name;
             byte Race;
             byte Class;
             byte Gender;
             byte Skin;
             byte Face;
             byte HairStyle;
             byte HairColor;
             byte FacialHair;
             byte level;
             uint32 ZoneId;
             uint32 MapId;
             float X;
             float Y;
             float Z;
             uint64 Unk;
             uint32 CharacterFlags;
             uint32 CustomizationFlags;
             byte FirstLogin;
             uint32 PetDisplayId;
             uint32 PetLevel;
             uint32 PetFamily;
             CharacterItem Items[23]; 
    };
    
    struct CharacterItem
    {
             uint32 DisplayId;
             byte InventorySlot;
             uint32 EnchantId;
    };

    CMSG_CHAR_CREATE => 0x2BF0 
    CMSG_CHAR_DELETE => 0x8A78 
    SMSG_CHAR_CREATE => 0xC211 
    SMSG_CHAR_DELETE => 0x278 
    
    
    
    SMSG_NEW_WORLD = 0x4A5D 
    SMSG_CREATURE_QUERY_RESPONSE = 0x83B8 
    SMSG_TRIGGER_CINEMATIC = 0x6310 
    SMSG_SET_PROFICIENCY = 0x22D4 
    SMSG_BINDPOINTUPDATE = 0xA255 
    SMSG_EXPLORATION_EXPERIENCE = 0x8B58 
    SMSG_CALENDAR_EVENT_INVITE = 0xE2FC 
    SMSG_UPDATE_OBJECT = 0x8BF0 
    
    
    SMSG_REALM_SPLIT 0x4270 
    CMSG_REALM_SPLIT 0xAB58 
    CMSG_CHAR_CUSTOMIZE 0x250 
    SMSG_CHAR_CUSTOMIZE 0xE2B5 
    CMSG_READY_FOR_ACCOUNT_DATA_TIMES 0x6A99 
    CMSG_PING 0x1001 
    SMSG_ACCOUNT_DATA_TIMES 0x82B5 
    CMSG_CHAR_RENAME 0xAB38 
    SMSG_CHAR_RENAME 0xA33C 

    And here is the algorithm in C for the dynamic opcodes.

    You can get it in ResetOpcodeHandler

    unsigned int __cdecl ResetOpcodeHandler(unsigned int opcode) 
    { 
    unsigned int result; 
    int v2; 
    
    v2 = gNetClient; 
    result = opcode & 1 | ((opcode & 0xC | ((opcode & 0x1E0 | ((opcode & 0x800 | (opcode >> 1) & 0x7000) >> 2)) >> 1)) >> 1); 
    *(_DWORD *)(gNetClient + 4 * result + 0x560) = 0; 
    *(_DWORD *)(v2 + 4 * result + 0x2560) = 0; 
    return result; 
    } 

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy Terms of Use