예제 #1
0
        protected void HandleMessage(InPacket packet)
        {
            var    chatType     = (Client.Chat.Definitions.ChatMessageType)packet.ReadByte();
            var    language     = (Client.Chat.Definitions.Language)packet.ReadInt32();
            UInt64 senderGuid   = packet.ReadUInt64();
            var    unkInt       = packet.ReadUInt32();
            var    receiverGuid = packet.ReadUInt64();
            UInt32 messageLen   = packet.ReadUInt32();
            string message      = packet.ReadCString();

            Console.WriteLine(chatType + "." + language + "." + senderGuid + "." + message);
            if (message == "heal")
            {
                var response = new OutPacket(WorldCommand.CMSG_CAST_SPELL);
                response.Write((Byte)1);
                response.Write((UInt32)2050);
                response.Write((Byte)0x00000000);
                response.Write((UInt32)0x00000000);

                SendPacket(response);
                Console.WriteLine("SendPacket Heal!");
            }
            else if (message == "targetme")
            {
                TargetLeader();
            }
        }
예제 #2
0
        protected void HandlePartyList(InPacket packet)
        {
            GroupType groupType = (GroupType)packet.ReadByte();

            packet.ReadByte();
            packet.ReadByte();
            packet.ReadByte();
            if (groupType.HasFlag(GroupType.GROUPTYPE_LFG))
            {
                packet.ReadByte();
                packet.ReadUInt32();
            }
            packet.ReadUInt64();
            packet.ReadUInt32();
            uint membersCount = packet.ReadUInt32();

            GroupMembersGuids.Clear();
            for (uint index = 0; index < membersCount; index++)
            {
                packet.ReadCString();
                UInt64 memberGuid = packet.ReadUInt64();
                GroupMembersGuids.Add(memberGuid);
                packet.ReadByte();
                packet.ReadByte();
                packet.ReadByte();
                packet.ReadByte();
            }
            GroupLeaderGuid = packet.ReadUInt64();
        }
예제 #3
0
        protected void HandleAttackStart(InPacket packet)
        {
            var GuidAttackers = packet.ReadUInt64();
            var GuidTarget    = packet.ReadUInt64();

            //Console.WriteLine("SMSG_ATTACKSTART : " + GuidAttackers + " | " + GuidTarget);

            if (GuidAttackers == GroupLeaderGuid)
            {
                //Console.WriteLine("GuidA : " + GuidAttackers + " | GuidT " + GuidTarget);
                AttackAssist(GuidTarget);
                cibleGuid = GuidTarget;
            }
        }
예제 #4
0
        protected void HandleTradeStatus(InPacket packet)
        {
            if (Behavior.Begger)
            {
                TradeStatus status = (TradeStatus)packet.ReadUInt32();
                switch (status)
                {
                case TradeStatus.BeginTrade:
                    TraderGUID = packet.ReadUInt64();
                    // Stop moving
                    CancelActionsByFlag(ActionFlag.Movement);
                    // Accept trade
                    OutPacket beginTrade = new OutPacket(WorldCommand.CMSG_BEGIN_TRADE);
                    SendPacket(beginTrade);
                    break;

                case TradeStatus.Canceled:
                    EnableActionsByFlag(ActionFlag.Movement);
                    TraderGUID = 0;
                    break;

                case TradeStatus.Accept:
                    OutPacket acceptTrade = new OutPacket(WorldCommand.CMSG_ACCEPT_TRADE);
                    SendPacket(acceptTrade);
                    break;

                case TradeStatus.Tradecomplete:
                    DoSayChat("Thank you!");
                    EnableActionsByFlag(ActionFlag.Movement);
                    HandleTriggerInput(TriggerActionType.TradeCompleted, TraderGUID);
                    TraderGUID = 0;
                    break;
                }
            }
        }
예제 #5
0
        protected void HandleDestroyObject(InPacket packet)
        {
            ulong       guid = packet.ReadUInt64();
            WorldObject worldObject;

            if (Objects.TryGetValue(guid, out worldObject))
            {
                worldObject.ResetPosition();
                Objects.Remove(guid);
            }
        }
예제 #6
0
        public Character(InPacket packet)
        {
            GUID    = packet.ReadUInt64();
            Name    = packet.ReadCString();
            Race    = (Race)packet.ReadByte();
            Class   = (Class)packet.ReadByte();
            Gender  = (Gender)packet.ReadByte();
            Bytes   = packet.ReadBytes(5);
            Level   = packet.ReadByte();
            ZoneId  = packet.ReadUInt32();
            MapId   = packet.ReadUInt32();
            X       = packet.ReadSingle();
            Y       = packet.ReadSingle();
            Z       = packet.ReadSingle();
            GuildId = packet.ReadUInt32();
            Flags   = packet.ReadUInt32();
            packet.ReadUInt32();    // customize (rename, etc)
            packet.ReadByte();      // first login
            PetInfoId   = packet.ReadUInt32();
            PetLevel    = packet.ReadUInt32();
            PetFamilyId = packet.ReadUInt32();

            // read items
            for (int i = 0; i < 19; ++i)
            {
                packet.ReadUInt32();
                packet.ReadByte();
                packet.ReadUInt32();    // ???
            }

            // read bags
            for (int i = 0; i < 4; ++i)
            {
                packet.ReadUInt32();
                packet.ReadByte();
                packet.ReadUInt32();
            }
        }
예제 #7
0
        protected void HandlerResurrectRequest(InPacket packet)
        {
            var       resurrectorGuid = packet.ReadUInt64();
            OutPacket response        = new OutPacket(WorldCommand.CMSG_RESURRECT_RESPONSE);

            response.Write(resurrectorGuid);
            if (Settings.Default.Behavior.AutoAcceptResurrectRequests)
            {
                response.Write((byte)1);
                SendPacket(response);

                OutPacket result = new OutPacket(WorldCommand.MSG_MOVE_TELEPORT_ACK);
                result.WritePacketGuid(Player.GUID);
                result.Write((UInt32)0);
                result.Write(DateTime.Now.Millisecond);
                SendPacket(result);
            }
            else
            {
                response.Write((byte)0);
                SendPacket(response);
            }
        }
예제 #8
0
        protected void HandleResurrectRequest(InPacket packet)
        {
            var       resurrectorGuid = packet.ReadUInt64();
            OutPacket response        = new OutPacket(NetworkOperationCode.CMSG_RESURRECT_RESPONSE);

            response.Write(resurrectorGuid);

            /*if (Behavior.AutoAcceptResurrectRequests)
             * {
             *      response.Write((byte)1);
             *      SendPacket(response);
             *
             *      OutPacket result = new OutPacket(NetworkOperationCode.MSG_MOVE_TELEPORT_ACK);
             *      result.WritePacketGuid(Player.GUID);
             *      result.Write((UInt32)0);
             *      result.Write(DateTime.Now.Millisecond);
             *      SendPacket(result);
             * }
             * else
             * {
             *      response.Write((byte)0);
             *      SendPacket(response);
             * }*/
        }
예제 #9
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();
                }
            }