コード例 #1
0
        /// <summary>Processes each client update packet sent from the client, updating internal state.</summary>
        internal void ProcessClientUpdate(PlayerPositionUpdateClient ppuc, out SpawnAppearance sa, out PlayerPositionUpdateServer ppus)
        {
            float dist = 0, tmp;
            tmp = this.X - ppuc.XPos;
            dist += tmp * tmp;
            tmp = this.Y - ppuc.YPos;
            dist += tmp * tmp;
            dist = (float)Math.Sqrt(dist);

            // TODO: Perhaps a warp check in the future, for now just log stuff
            if (dist > 50.0f * 50.0f)
            {
                _log.WarnFormat("{0}: Large position change: {1} units", this.Name, Math.Sqrt(dist));
                _log.WarnFormat("Coords: ({0:F4}, {1:F4}, {2:F4}) -> ({3:F4}, {4:F4}, {5:F4})", this.X, this.Y, this.Z, ppuc.XPos, ppuc.YPos, ppuc.ZPos);
                _log.WarnFormat("Deltas: ({0:F2}, {1:F2}, {2:F2}) -> ({3:F2}, {4:F2}, {5:F2})", _deltaX, _deltaY, _deltaZ, ppuc.DeltaX, ppuc.DeltaY, ppuc.DeltaZ);
            }

            // TODO: proximity timer?

            _deltaX = ppuc.DeltaX;
            _deltaY = ppuc.DeltaY;
            _deltaZ = ppuc.DeltaZ;
            _deltaHeading = ppuc.DeltaHeading;
            this.Heading = ppuc.Heading;

            // TODO: tracking skill increase check

            sa = new SpawnAppearance();
            if (ppuc.YPos != this.Y || ppuc.XPos != this.X)
            {
                if (!_sneaking && !_invis)
                {
                    _hidden = false;
                    _improvedHidden = false;
                    sa = new SpawnAppearance((ushort)this.ID, 0x03, 0);
                }
            }

            ppus = new PlayerPositionUpdateServer();
            if (ppuc.YPos != this.Y || ppuc.XPos != this.X || ppuc.Heading != this.Heading || ppuc.Animation != this.Animation)
                ppus = GetSpawnUpdate();

            this.X = ppuc.XPos;
            this.Y = ppuc.YPos;
            this.Z = ppuc.ZPos;
            this.Animation = ppuc.Animation;
        }
コード例 #2
0
ファイル: Mob.cs プロジェクト: natedahl32/EqEmulator-net
        internal virtual PlayerPositionUpdateServer GetSpawnUpdateNoDelta()
        {
            PlayerPositionUpdateServer ppus = new PlayerPositionUpdateServer();
            ppus.SpawnId = (ushort)this.ID;
            ppus.XPos = this.X;
            ppus.YPos = this.Y;
            ppus.ZPos = this.Z;
            ppus.DeltaX = 0;
            ppus.DeltaY = 0;
            ppus.DeltaZ = 0;
            ppus.Heading = this.Heading;
            ppus.Animation = 0;
            ppus.DeltaHeading = 0;
            ppus.Padding0002 = 0;
            ppus.Padding0006 = 7;
            ppus.Padding0014 = 0x7f;
            ppus.Padding0018 = 0x5df27;

            return ppus;
        }