示例#1
0
        internal static bool FilterClient(WorldRegion region, Client player, Packet packet)
        {
            if (packet.PacketID != PlayerPositionLookClient.ID)
                return false;

            CoordDouble pos = player.Session.Position;
            
            //Inner region
            if (region.SubRegions.Count == 0)
                return false;
            WorldRegion inner = region.SubRegions[0];
			
            //Find proportions between region edges
            double dOuter = pos.X - region.MinX;
            dOuter = Math.Min(dOuter, region.MaxX - pos.X);
            dOuter = Math.Min(dOuter, pos.Z - region.MinZ);
            dOuter = Math.Min(dOuter, region.MaxZ - pos.Z);
            double dInner = inner.MinX - pos.X;
            dInner = Math.Max(dInner, pos.X - inner.MaxX);
            dInner = Math.Max(dInner, inner.MinZ - pos.Z);
            dInner = Math.Max(dInner, pos.Z - inner.MaxZ);

            double frac = dOuter / (dOuter + dInner);
#if DEBUG
            //player.Tell(frac.ToString("0.00") + ": " + dOuter + " " + dInner);
#endif

            player.SendToClient(NightTime(frac));
			
            return false;
        }
示例#2
0
        #pragma warning disable 162
        static bool Show(Packet packet)
        {
            #if !DEBUGPACKET
            return false;
            #else
            byte id = packet.PacketID;
            if (id == PassThrough.ID)
                id = packet.PacketBuffer[0];

            switch (id)
            {
                case EntityHeadYaw.ID:
                case EntityRelativeMove.ID:
                case ChunkData.ID:
                case ChunkDataBulk.ID:
                case EntityVelocity.ID:
                case PlayerGround.ID:
                case EntityLookRelativeMove.ID:
                    return false;
                default:
                case LoginSuccess.ID:
                case SpawnPlayer.ID:
                case PlayerListItem.ID:
                    return true;
            }
            #endif
        }
示例#3
0
        public static bool Filter(VanillaSession real, Packet p)
        {
            Client player = real.Player;
            IEntity e = p as IEntity;
            if (e == null)
                return false;
			
            //Pass all own actions normally
            if (e.EID == player.EntityID)
                return false;
			
            Client namedPlayer = null;
            VanillaSession r = World.Main.GetPlayer(e.EID); 
            if (r != null)
                namedPlayer = r.Player;
		
            byte pid = p.PacketID;

            //New named entity
            if (pid == SpawnPlayer.ID)
            {
                SpawnPlayer spawnNamedEntity = (SpawnPlayer)p;
			
                //Search by vanilla uuid since we ahv enot yet modified the packet
                if (namedPlayer == null)
                    namedPlayer = PlayerList.GetPlayerByVanillaUUID(spawnNamedEntity.PlayerUUID);
                if (namedPlayer == null)
                {
                    Debug.WriteLine("NamedEntity not found in player list: " + spawnNamedEntity.PlayerUUID);
                    return false; //Still let through
                }
                				
                //pass any none cloaked player
                if (namedPlayer.Settings.Cloaked == null)
                    return false;
				
                //Invisible mode, hide everything about entity
                if (namedPlayer.Settings.Cloaked == MobType.None.ToString())
                    return true;
				
                if (namedPlayer.Settings.Cloaked == null)
                {
                    //Debug.WriteLine ("Spawning player " + ne.PlayerName + " as nick " + np.Name);
                    return false;
                }
                //Debug.WriteLine ("Spawning player " + ne.PlayerName + " cloaked as \"" + np.Cloaked + "\" nick: " + np.Name);
				
                MobType mt;
                try
                {
                    mt = (MobType)Enum.Parse(typeof(MobType), namedPlayer.Settings.Cloaked);
                } catch (Exception)
                {
                    Debug.WriteLine("Unknown cloak for " + namedPlayer.MinecraftUsername + ": " + namedPlayer.Settings.Cloaked);
                    return false;
                }
				
                SpawnMob ms = new SpawnMob(mt);
                ms.EID = spawnNamedEntity.EID;
                ms.Pos = spawnNamedEntity.Position;
                ms.Pitch = spawnNamedEntity.Pitch;
                ms.Yaw = spawnNamedEntity.Yaw;
				
                //Add metadata to specific mobs - some already set in constructor

                if (ms.Type == MobType.MagmaCube || ms.Type == MobType.Slime)
                    ms.Metadata.SetByte(16, 1);
                if (ms.Type == MobType.Ghast)
                    ms.Metadata.SetByte(16, 0);
                if (ms.Type == MobType.Enderman)
                {
                    ms.Metadata.SetByte(16, (sbyte)BlockID.Dirt);
                    ms.Metadata.SetByte(17, 0);
                }
                if (ms.Type == MobType.Blaze)
                    ms.Metadata.SetByte(16, 0);
                if (ms.Type == MobType.Sheep)
                    ms.Metadata.SetByte(16, 0);
                if (ms.Type == MobType.Spider)
                    ms.Metadata.SetByte(16, 0);
				
                player.Queue.Queue(ms);
                return true;
            }
			
            if (pid == DestroyEntities.ID)
                return false;
			
            //Not in list
            if (namedPlayer == null)
                return false;
			
            //Not cloaked
            if (namedPlayer.Settings.Cloaked == null)
                return false;
			
            //Invisible mode, hide everything about entity
            if (namedPlayer.Settings.Cloaked == MobType.None.ToString())
                return true;
			
            //Else any mob
            if (pid == Animation.ID)
                return true;
			
            if (pid == EntityEquipment.ID)
                return true;
			
            return false;
        }
示例#4
0
 internal static bool FilterServer(WorldSession player, Packet packet)
 {
     return packet.PacketID == TimeUpdate.ID;
 }
示例#5
0
 public PrevException(Packet p) : base(p == null?"No Error":p.ToString())
 {
     Packet = p;
 }
示例#6
0
        public static bool FilterServer(WorldSession player, Packet packet)
        {
            if (player.Mode == GameMode.Creative && player.Player.Admin())
                return false;
			
            byte pid = packet.PacketID;

            //Never stop raining
            if (pid == ChangeGameState.ID)
            {
                ChangeGameState ns = packet as ChangeGameState;
                if (ns.Reason == GameState.EndRaining)
                    return true;
            }
			
            //Block Time
            if (pid == TimeUpdate.ID)
            {
                player.Player.SendToClient(new TimeUpdate(18000));
                return true;
            }
			
            return false;
        }
示例#7
0
        static internal bool FilterClient(Client player, Packet packet)
        {
            if (player.Session.Mode == GameMode.Creative)
                return false;
			
            //Pick up lava is drawn into it
            PlayerBlockPlacement placement = packet as PlayerBlockPlacement;
            if (placement != null)
                return CursedLand(player, placement);

            PlayerDigging pd = packet as PlayerDigging;
            if (pd != null)
            if (DiggProtect(player, pd))
                return true;
						
            return false;
        }
示例#8
0
        void ReceiverRunServer()
        {
            PacketFromServer p = null;
            try
            {
                thread.State = "Active loop";
                while (phase == Phases.Gaming)
                {
                    try
                    {
#if DEBUG
                        prev8 = prev7;
                        prev7 = prev6;
                        prev6 = prev5;
                        prev5 = prev4;
                        prev4 = prev3;
                        prev3 = prev2;
                        prev2 = prev1;
                        prev1 = p;
#endif
                        //thread.State = "Active loop, prev: " + p;
                        p = PacketFromServer.ReadServer(serverStream);
                        thread.WatchdogTick = DateTime.Now;

                        Debug.FromServer(p, Player);
                        //thread.State = "Got Packet " + p;
                    }
                    catch (EndOfStreamException)
                    {
                        phase = Phases.FinalClose;
                        return;
                    }
                    catch (IOException)
                    {
                        phase = Phases.FinalClose;
                        return;
                    }
                    catch (ObjectDisposedException)
                    {
                        phase = Phases.FinalClose;
                        return;
                    }
                    catch (Exception e)
                    {
                        if (phase != Phases.FinalClose)
                        {
#if DEBUG
                            Log.Write(new PrevException(prev8), Player);
                            Log.Write(new PrevException(prev7), Player);
                            Log.Write(new PrevException(prev6), Player);
                            Log.Write(new PrevException(prev5), Player);
                            Log.Write(new PrevException(prev4), Player);
                            Log.Write(new PrevException(prev3), Player);
                            Log.Write(new PrevException(prev2), Player);
                            Log.Write(new PrevException(prev1), Player);
#endif
                            Log.Write(e, Player);
                            phase = Phases.FinalClose;
                        }
                        return;
                    }
                
                    if (phase == Phases.FinalClose)
                        break;
            
                    try
                    {
                        FromServerGaming(p);
                    }
                    catch (Exception e)
                    {
                        Log.Write(e, Player);
                        return;
                    }
                }
            }
            finally
            {
                thread.State = "Loop ended, closing";
                    
#if DEBUG
                Console.WriteLine("ServerReceiver Ended: " + Player);
#endif
                serverStream.Close();
                thread.State = "Stream closed";                 
            }
        }