Exemplo n.º 1
0
        protected void HandleInitializeFactions(InPacket packet)
        {
            var count = packet.ReadInt32();// ("Count");

            for (var i = 0; i < count; i++)
            {
                FactionFlag NpcFlags = (FactionFlag)packet.ReadByte();
                //var flag = packet.ReadByte(); // ("Faction Flags", i);
                var fac = packet.ReadUInt32(); //("Faction Standing", i);
            }
        }
Exemplo n.º 2
0
        protected void HandleForcedReactions(InPacket packet)
        {
            var counter = packet.ReadInt32();

            for (var i = 0; i < counter; i++)
            {
                Factions factions = new Factions();
                factions.FactionID      = packet.ReadUInt32(); //Faction Id
                factions.ReputationRank = packet.ReadUInt32(); //Reputation Rank
                Exchange.gameClient.FactionList.Add(factions.FactionID, factions);
            }
        }
Exemplo n.º 3
0
        void HandleMessageChat(InPacket packet)
        {
            var type = (ChatMessageType)packet.ReadByte();
            var lang = (Language)packet.ReadInt32();
            var guid = packet.ReadUInt64();
            var unkInt = packet.ReadInt32();

            switch (type)
            {
                case ChatMessageType.Say:
                case ChatMessageType.Yell:
                case ChatMessageType.Party:
                case ChatMessageType.PartyLeader:
                case ChatMessageType.Raid:
                case ChatMessageType.RaidLeader:
                case ChatMessageType.RaidWarning:
                case ChatMessageType.Guild:
                case ChatMessageType.Officer:
                case ChatMessageType.Emote:
                case ChatMessageType.TextEmote:
                case ChatMessageType.Whisper:
                case ChatMessageType.WhisperInform:
                case ChatMessageType.System:
                case ChatMessageType.Channel:
                case ChatMessageType.Battleground:
                case ChatMessageType.BattlegroundNeutral:
                case ChatMessageType.BattlegroundAlliance:
                case ChatMessageType.BattlegroundHorde:
                case ChatMessageType.BattlegroundLeader:
                case ChatMessageType.Achievement:
                case ChatMessageType.GuildAchievement:
                    {
                        ChatChannel channel = new ChatChannel();
                        channel.Type = type;

                        if (type == ChatMessageType.Channel)
                            channel.ChannelName = packet.ReadCString();

                        var sender = packet.ReadUInt64();

                        ChatMessage message = new ChatMessage();
                        var textLen = packet.ReadInt32();
                        message.Message = packet.ReadCString();
                        message.Language = lang;
                        message.ChatTag = (ChatTag)packet.ReadByte();
                        message.Sender = channel;

                        //! If we know the name of the sender GUID, use it
                        //! For system messages sender GUID is 0, don't need to do anything fancy
                        string senderName = null;
                        if (type == ChatMessageType.System ||
                            Game.World.PlayerNameLookup.TryGetValue(sender, out senderName))
                        {
                            message.Sender.Sender = senderName;
                            Game.UI.PresentChatMessage(message);
                            return;
                        }

                        //! If not we place the message in the queue,
                        //! .. either existent
                        Queue<ChatMessage> messageQueue = null;
                        if (Game.World.QueuedChatMessages.TryGetValue(sender, out messageQueue))
                            messageQueue.Enqueue(message);
                        //! or non existent
                        else
                        {
                            messageQueue = new Queue<ChatMessage>();
                            messageQueue.Enqueue(message);
                            Game.World.QueuedChatMessages.Add(sender, messageQueue);
                        }

                        //! Furthermore we send CMSG_NAME_QUERY to the server to retrieve the name of the sender
                        OutPacket response = new OutPacket(WorldCommand.CMSG_NAME_QUERY);
                        response.Write(sender);
                        Game.SendPacket(response);

                        //! Enqueued chat will be printed when we receive SMSG_NAME_QUERY_RESPONSE

                        break;
                    }
                default:
                    return;
            }
        }
Exemplo n.º 4
0
            void ReadMovementUpdateData(InPacket packet)
            {
                flags = (ObjectUpdateFlags)packet.ReadUInt16();
                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_LIVING))
                {
                    ReadMovementInfo(packet);

                    movementSpeeds = new Dictionary<UnitMoveType,float>();
                    movementSpeeds[UnitMoveType.MOVE_WALK] = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_RUN] = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_RUN_BACK] = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_SWIM] = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_SWIM_BACK] = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_FLIGHT] = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_FLIGHT_BACK] = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_TURN_RATE] = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_PITCH_RATE] = packet.ReadSingle();

                    if (movementInfo.Flags.HasFlag(MovementFlags.MOVEMENTFLAG_SPLINE_ENABLED))
                    {
                        splineFlags = (SplineFlags)packet.ReadUInt32();
                        if (splineFlags.HasFlag(SplineFlags.Final_Angle))
                            splineFacingAngle = packet.ReadSingle();
                        else if (splineFlags.HasFlag(SplineFlags.Final_Target))
                            splineFacingTargetGuid = packet.ReadUInt64();
                        else if (splineFlags.HasFlag(SplineFlags.Final_Point))
                            splineFacingPointX = packet.ReadVector3();

                        splineTimePassed = packet.ReadInt32();
                        splineDuration = packet.ReadInt32();
                        splineId = packet.ReadUInt32();
                        packet.ReadSingle();
                        packet.ReadSingle();
                        splineVerticalAcceleration = packet.ReadSingle();
                        splineEffectStartTime = packet.ReadInt32();
                        uint splineCount = packet.ReadUInt32();
                        for (uint index = 0; index < splineCount; index++)
                            splinePoints.Add(packet.ReadVector3());
                        splineEvaluationMode = (SplineEvaluationMode)packet.ReadByte();
                        splineEndPoint = packet.ReadVector3();
                    }
                }
                else if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_POSITION))
                {
                    transportGuid = packet.ReadPackedGuid();
                    position = packet.ReadVector3();
                    transportOffset = packet.ReadVector3();
                    o = packet.ReadSingle();
                    corpseOrientation = packet.ReadSingle();
                }
                else if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_STATIONARY_POSITION))
                {
                    position = packet.ReadVector3();
                    o = packet.ReadSingle();
                }

                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_UNKNOWN))
                    packet.ReadUInt32();

                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_LOWGUID))
                    lowGuid = packet.ReadUInt32();

                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_HAS_TARGET))
                    targetGuid = packet.ReadPackedGuid();

                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_TRANSPORT))
                    transportTimer = packet.ReadUInt32();

                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_VEHICLE))
                {
                    vehicledID = packet.ReadUInt32();
                    vehicleOrientation = packet.ReadSingle();
                }

                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_ROTATION))
                    goRotation = packet.ReadInt64();
            }
Exemplo n.º 5
0
        protected void HandleAllAchievementData(InPacket packet)
        {
            CompletedAchievements.Clear();
            AchievementCriterias.Clear();

            for (;;)
            {
                uint achievementId = packet.ReadUInt32();
                if (achievementId == 0xFFFFFFFF)
                    break;

                packet.ReadPackedTime();

                CompletedAchievements.Add(achievementId);
            }

            for (;;)
            {
                uint criteriaId = packet.ReadUInt32();
                if (criteriaId == 0xFFFFFFFF)
                    break;
                ulong criteriaCounter = packet.ReadPackedGuid();
                packet.ReadPackedGuid();
                packet.ReadInt32();
                packet.ReadPackedTime();
                packet.ReadInt32();
                packet.ReadInt32();

                AchievementCriterias[criteriaId] = criteriaCounter;
            }
        }
Exemplo n.º 6
0
            private void ReadValuesUpdateData(InPacket packet)
            {
                byte blockCount = packet.ReadByte();
                int[] updateMask = new int[blockCount];
                for (var i = 0; i < blockCount; i++)
                    updateMask[i] = packet.ReadInt32();
                var mask = new BitArray(updateMask);

                for (var i = 0; i < mask.Count; ++i)
                {
                    if (!mask[i])
                        continue;

                    updateFields[i] = packet.ReadUInt32();
                }
            }
Exemplo n.º 7
0
        protected void HandleMessageChat(InPacket packet)
        {
            var    chatType   = (ChatMessageType)packet.ReadByte();
            var    language   = (Language)packet.ReadInt32();
            UInt64 senderGuid = packet.ReadUInt64();
            var    unkInt     = packet.ReadUInt32();

            UInt32 senderNameLen   = 0;
            string senderName      = null;
            UInt64 receiverGuid    = 0;
            UInt32 receiverNameLen = 0;
            string receiverName    = null;
            string channelName     = null;

            switch (chatType)
            {
            case ChatMessageType.MonsterSay:
            case ChatMessageType.MonsterParty:
            case ChatMessageType.MonsterYell:
            case ChatMessageType.MonsterWhisper:
            case ChatMessageType.MonsterEmote:
            case ChatMessageType.RaidBossEmote:
            case ChatMessageType.RaidBossWhisper:
            case ChatMessageType.BattleNet:
                senderNameLen = packet.ReadUInt32();
                senderName    = packet.ReadCString();
                receiverGuid  = packet.ReadUInt64();
                if (receiverGuid != 0 && !receiverGuid.IsPlayer() && !receiverGuid.IsPet())
                {
                    receiverNameLen = packet.ReadUInt32();
                    receiverName    = packet.ReadCString();
                }
                break;

            case ChatMessageType.WhisperForeign:
                senderNameLen = packet.ReadUInt32();
                senderName    = packet.ReadCString();
                receiverGuid  = packet.ReadUInt64();
                break;

            case ChatMessageType.BattlegroundNeutral:
            case ChatMessageType.BattlegroundAlliance:
            case ChatMessageType.BattlegroundHorde:
                receiverGuid = packet.ReadUInt64();
                if (receiverGuid != 0 && !receiverGuid.IsPlayer())
                {
                    receiverNameLen = packet.ReadUInt32();
                    receiverName    = packet.ReadCString();
                }
                break;

            case ChatMessageType.Achievement:
            case ChatMessageType.GuildAchievement:
                receiverGuid = packet.ReadUInt64();
                break;

            default:
                if (packet.Header.Command == WorldCommand.SMSG_GM_MESSAGECHAT)
                {
                    senderNameLen = packet.ReadUInt32();
                    senderName    = packet.ReadCString();
                }

                if (chatType == ChatMessageType.Channel)
                {
                    channelName = packet.ReadCString();
                }

                receiverGuid = packet.ReadUInt64();
                break;
            }

            UInt32 messageLen = packet.ReadUInt32();
            string message    = packet.ReadCString();
            var    chatTag    = (ChatTag)packet.ReadByte();

            if (chatType == ChatMessageType.Achievement || chatType == ChatMessageType.GuildAchievement)
            {
                var achievementId = packet.ReadUInt32();
            }

            ChatChannel channel = new ChatChannel();

            channel.Type = chatType;

            if (chatType == ChatMessageType.Channel)
            {
                channel.ChannelName = channelName;
            }

            ChatMessage chatMessage = new ChatMessage();

            chatMessage.Message  = message;
            chatMessage.Language = language;
            chatMessage.ChatTag  = chatTag;
            chatMessage.Sender   = channel;

            //! If we know the name of the sender GUID, use it
            //! For system messages sender GUID is 0, don't need to do anything fancy
            if (senderGuid == 0 || !string.IsNullOrEmpty(senderName) ||
                Game.World.PlayerNameLookup.TryGetValue(senderGuid, out senderName))
            {
                chatMessage.Sender.Sender = senderName;
                Game.UI.PresentChatMessage(chatMessage);
                return;
            }

            //! If not we place the message in the queue,
            //! .. either existent
            Queue <ChatMessage> messageQueue = null;

            if (Game.World.QueuedChatMessages.TryGetValue(senderGuid, out messageQueue))
            {
                messageQueue.Enqueue(chatMessage);
            }
            //! or non existent
            else
            {
                messageQueue = new Queue <ChatMessage>();
                messageQueue.Enqueue(chatMessage);
                Game.World.QueuedChatMessages.Add(senderGuid, messageQueue);
            }

            //! Furthermore we send CMSG_NAME_QUERY to the server to retrieve the name of the sender
            OutPacket response = new OutPacket(WorldCommand.CMSG_NAME_QUERY);

            response.Write(senderGuid);
            Game.SendPacket(response);

            //! Enqueued chat will be printed when we receive SMSG_NAME_QUERY_RESPONSE
        }
Exemplo n.º 8
0
        protected void HandleMessageChat(InPacket packet)
        {
            var type   = (ChatMessageType)packet.ReadByte();
            var lang   = (Language)packet.ReadInt32();
            var guid   = packet.ReadUInt64();
            var unkInt = packet.ReadInt32();

            switch (type)
            {
            case ChatMessageType.Say:
            case ChatMessageType.Yell:
            case ChatMessageType.Party:
            case ChatMessageType.PartyLeader:
            case ChatMessageType.Raid:
            case ChatMessageType.RaidLeader:
            case ChatMessageType.RaidWarning:
            case ChatMessageType.Guild:
            case ChatMessageType.Officer:
            case ChatMessageType.Emote:
            case ChatMessageType.TextEmote:
            case ChatMessageType.Whisper:
            case ChatMessageType.WhisperInform:
            case ChatMessageType.System:
            case ChatMessageType.Channel:
            case ChatMessageType.Battleground:
            case ChatMessageType.BattlegroundNeutral:
            case ChatMessageType.BattlegroundAlliance:
            case ChatMessageType.BattlegroundHorde:
            case ChatMessageType.BattlegroundLeader:
            case ChatMessageType.Achievement:
            case ChatMessageType.GuildAchievement:
            {
                ChatChannel channel = new ChatChannel();
                channel.Type = type;

                if (type == ChatMessageType.Channel)
                {
                    channel.ChannelName = packet.ReadCString();
                }

                var sender = packet.ReadUInt64();

                ChatMessage message = new ChatMessage();
                var         textLen = packet.ReadInt32();
                message.Message  = packet.ReadCString();
                message.Language = lang;
                message.ChatTag  = (ChatTag)packet.ReadByte();
                message.Sender   = channel;

                //! If we know the name of the sender GUID, use it
                //! For system messages sender GUID is 0, don't need to do anything fancy
                string senderName = null;
                if (type == ChatMessageType.System ||
                    Game.World.PlayerNameLookup.TryGetValue(sender, out senderName))
                {
                    message.Sender.Sender = senderName;
                    Game.UI.PresentChatMessage(message);
                    return;
                }

                //! If not we place the message in the queue,
                //! .. either existent
                Queue <ChatMessage> messageQueue = null;
                if (Game.World.QueuedChatMessages.TryGetValue(sender, out messageQueue))
                {
                    messageQueue.Enqueue(message);
                }
                //! or non existent
                else
                {
                    messageQueue = new Queue <ChatMessage>();
                    messageQueue.Enqueue(message);
                    Game.World.QueuedChatMessages.Add(sender, messageQueue);
                }

                //! Furthermore we send CMSG_NAME_QUERY to the server to retrieve the name of the sender
                OutPacket response = new OutPacket(NetworkOperationCode.CMSG_NAME_QUERY);
                response.Write(sender);
                Game.SendPacket(response);

                //! Enqueued chat will be printed when we receive SMSG_NAME_QUERY_RESPONSE

                break;
            }

            default:
                return;
            }
        }