fCraft.Portals.PortalHandler.Player_Moved C# (CSharp) Метод

Player_Moved() приватный статический Метод

private static Player_Moved ( object sender, Events e ) : void
sender object
e Events
Результат void
        private static void Player_Moved( object sender, Events.PlayerMovedEventArgs e )
        {
            try {
                if ( e.Player.PortalsEnabled ) {
                    lock ( e.Player.PortalLock ) {
                        if ( e.Player.CanUsePortal ) {
                            if ( ( e.OldPosition.X != e.NewPosition.X ) || ( e.OldPosition.Y != e.NewPosition.Y ) || ( e.OldPosition.Z != ( e.NewPosition.Z ) ) ) {
                                if ( e.Player.Can( Permission.UsePortal ) ) {
                                    if ( PortalHandler.GetInstance().GetPortal( e.Player ) != null && !e.Player.StandingInPortal ) {
                                        if ( e.Player.LastUsedPortal != null && ( DateTime.UtcNow - e.Player.LastUsedPortal ).TotalSeconds < 4 ) {
                                            // To prevent portal loops
                                            if ( e.Player.LastWarnedPortal == null || ( DateTime.UtcNow - e.Player.LastWarnedPortal ).TotalSeconds > 2 ) {
                                                e.Player.LastWarnedPortal = DateTime.UtcNow;
                                                e.Player.Message( "You cannot use portals for another {0} seconds.", 4 - ( DateTime.UtcNow - e.Player.LastUsedPortal ).Seconds );
                                            }
                                            return;
                                        }

                                        // Make sure this method isn't called twice
                                        e.Player.CanUsePortal = false;

                                        e.Player.StandingInPortal = true;
                                        Portal portal = PortalHandler.GetInstance().GetPortal( e.Player );

                                        World world = WorldManager.FindWorldExact( portal.World );
                                        if ( world == null )
                                            return;
                                        // Teleport player, portal protection
                                        switch ( world.AccessSecurity.CheckDetailed( e.Player.Info ) ) {
                                            case SecurityCheckResult.Allowed:
                                            case SecurityCheckResult.WhiteListed:
                                                if ( world.IsFull ) {
                                                    e.Player.Message( "Cannot join {0}&S: world is full.", world.ClassyName );
                                                    return;
                                                }
                                                e.Player.StopSpectating();
                                                if ( portal.World == e.Player.World.Name ) {
                                                    if ( !portal.HasDesiredOutput ) {
                                                        e.Player.TeleportTo( e.Player.World.Map.Spawn );
                                                    } else {
                                                        e.Player.TeleportTo( new Position( ( short )portal.DesiredOutputX, ( short )portal.DesiredOutputY, ( short )portal.DesiredOutputZ, portal.DesiredOutputR, portal.DesiredOutputL ) );
                                                    }
                                                    e.Player.LastWarnedPortal = DateTime.UtcNow;
                                                    e.Player.StandingInPortal = false;
                                                    e.Player.CanUsePortal = true;
                                                    e.Player.LastUsedPortal = DateTime.UtcNow;
                                                } else {
                                                    if ( !portal.HasDesiredOutput ) {
                                                        e.Player.JoinWorld( WorldManager.FindWorldExact( portal.World ), WorldChangeReason.Portal );
                                                    } else {
                                                        e.Player.JoinWorld( WorldManager.FindWorldExact( portal.World ), WorldChangeReason.Portal, new Position( ( short )portal.DesiredOutputX, ( short )portal.DesiredOutputY, ( short )portal.DesiredOutputZ, portal.DesiredOutputR, portal.DesiredOutputL ) );
                                                    }
                                                }
                                                e.Player.Message( "You used portal: " + portal.Name );
                                                break;

                                            case SecurityCheckResult.BlackListed:
                                                e.Player.Message( "Cannot join world {0}&S: you are blacklisted.",
                                                    world.ClassyName );
                                                break;

                                            case SecurityCheckResult.RankTooLow:
                                                e.Player.Message( "Cannot join world {0}&S: must be {1}+",
                                                             world.ClassyName, world.AccessSecurity.MinRank.ClassyName );
                                                break;
                                        }
                                    } else {
                                        e.Player.StandingInPortal = false;
                                    }
                                }
                            }
                        }
                    }
                }
            } catch ( Exception ex ) {
                Logger.Log( LogType.Error, "PortalHandler.Player_Moved: " + ex );
            }
        }