예제 #1
0
 private void View_ReceivedStream(NetMessage message, Player player)
 {
     if ((m_state & ReciveingFlag) != 0)
     {
         SyncEntry sync = default(SyncEntry), last = m_last;
         sync.OnDeserialize(message);
         if (m_time > sync.Time)
         {
             sync.Position = m_owner.Position + (sync.Position - last.Position);
             sync.Rotation = m_owner.Rotation + (sync.Rotation - last.Rotation);
         }
         m_last = sync;
         m_owner.UpdateLocation(sync.Position, sync.Rotation);
     }
 }
예제 #2
0
 private void View_ReceivedStream(NetMessage arg1, Player arg2)
 {
     _entry.OnDeserialize(arg1);
     _position = _entry.Position;
     _rotation = _entry.Rotation;
 }
예제 #3
0
        private void View_ReceivedStream(NetMessage arg1, Player arg2)
        {
            if (_resetLock)
            {
                _creature.View.Lock(_resetLock = _locked = false);
            }
            else if (_locked)
            {
                return;
            }
            _entry.OnDeserialize(arg1);
            if (_time < _entry.Time)
            {
                float distance = Vector3.DistanceSquared(_position, _entry.Position);
                _speed = distance / (float)(_entry.Time - _time);
                if (distance > Constants.EpsilonX2)
                {
                    //if (_speed > 45f && _player.User.Access < AccessLevel.TeamMember)
                    //{
                    //_locked = true;
                    //_player.Disconnect("MOV EAX, #DEADC0DE");
                    //}
                    //else
                    {
                        switch (_player.Char.Pony.Race)
                        {
                        case CharacterType.EarthPony:
                            _running = _speed > 6f;
                            break;

                        case CharacterType.Unicorn:
                            _running = _speed > 5.15f;
                            break;

                        case CharacterType.Pegasus:
                            if (_flying)
                            {
                                _running = _speed > 18f;
                            }
                            else
                            {
                                _running = _speed > 5.25f;
                            }
                            break;
                        }
                    }
                    if (_player.Shop != null && Vector3.DistanceSquared(_position, _player.Shop.Position) > Constants.MaxInteractionDistanceSquared)
                    {
                        _player.Shop.CloseShop(_player);
                    }
                    if (_player.Trade.IsTrading && Vector3.DistanceSquared(_position, _player.Trade.Target.Object.Position) > Constants.MaxInteractionDistanceSquared)
                    {
                        _player.Trade.CloseBoth();
                    }
                }
                else
                {
                    _running = false;
                }
                _time     = _entry.Time;
                _position = _entry.Position;
                _rotation = _entry.Rotation;
            }
        }