Jump to content

4.0.1 Protocol


Chasterx

Recommended Posts

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; 
} 

Link to comment
Share on other sites

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;
}

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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);
}

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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];

Where i've to enter it..?

PS : What about 4.0.3?

Link to comment
Share on other sites

ok thanks, where i give the code you tell me for 4.0.1?

nowhere. this code shows developers the structure of the packets, so that they can implement it. there are also people who can read that and write code for it, not only copy it and ask where to paste it.

How can i do a 4.0.X's server than?

Link to comment
Share on other sites

ok thanks, where i give the code you tell me for 4.0.1?

nowhere. this code shows developers the structure of the packets, so that they can implement it. there are also people who can read that and write code for it, not only copy it and ask where to paste it.

How can i do a 4.0.X's server than?

if you have to ask, then you probably can't. There is NO support for 4.x.

Link to comment
Share on other sites

Okay but this post talk about 4.0.X, and say it possible to access character list and enter world.. I need to do it, but if i can't enter code, how can i do this ?

the 4.x branch on GIT is for people who know what they are doing with it. You will get NO help with it on the forum. It is completely unsupported, if you dont know how to use it, then you shouldnt be using it. And PLEASE, no more questions about 4.x and how to use it.

Link to comment
Share on other sites

Okay but this post talk about 4.0.X, and say it possible to access character list and enter world.. I need to do it, but if i can't enter code, how can i do this ?

the 4.x branch on GIT is for people who know what they are doing with it. You will get NO help with it on the forum. It is completely unsupported, if you dont know how to use it, then you shouldnt be using it. And PLEASE, no more questions about 4.x and how to use it.

Sorry.. But if we need to learn it?

Simple question, why mangos doesn't give it possible tu access with 4.0.X client revision, if is it possible ? Mangos never works this client?

Link to comment
Share on other sites

×
×
  • 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