Beispiel #1
0
 //cuboid over-fix?
 public static void PlayerPlacedDoor(object sender, Events.PlayerPlacingBlockEventArgs e)
 {
     if (e.Map.Doors == null)
     {
         return;
     }
     if (e.Map.World != null)
     {
         if (e.Map != null)
         {
             if (e.Map.Doors.Count > 0)
             {
                 lock (e.Map.Doors.SyncRoot) {
                     foreach (Door door in e.Map.Doors)
                     {
                         if (e.Map == null)
                         {
                             break;
                         }
                         if (door.IsInRange(e.Coords))
                         {
                             e.Result = CanPlaceResult.Revert;
                         }
                     }
                 }
             }
         }
     }
 }
Beispiel #2
0
        static void Player_PlacingBlock(object sender, Events.PlayerPlacingBlockEventArgs e)
        {
            try {
                if (e.Player.World.Map.Portals != null && e.Player.World.Map.Portals.Count > 0 && e.Context != BlockChangeContext.Portal)
                {
                    lock (e.Player.World.Map.Portals.SyncRoot) {
                        foreach (Portal portal in e.Player.World.Map.Portals)
                        {
                            if (portal.IsInRange(e.Coords))
                            {
                                e.Result = CanPlaceResult.Revert;
                                e.Player.Message("You can not place a block inside portal: " + portal.Name);
                                return;
                            }
                        }
                    }
                }

                if (e.NewBlock == Block.Red)
                {
                    if (e.Context == BlockChangeContext.Manual)
                    {
                        if (e.Player.PortalCache.Name != null)
                        {
                            if (e.Player.PortalCache.AffectedBlocks != null)
                            {
                                if (e.Player.PortalCache.AffectedBlocks.Contains(e.Coords))       //stop output being inside the unfinished portal
                                {
                                    e.Result = CanPlaceResult.Revert;
                                    e.Player.Message("You can not place a block inside a portal");
                                    return;
                                }
                                e.Player.PortalCache.DesiredOutputX = e.Coords.ToPlayerCoords().X;
                                e.Player.PortalCache.DesiredOutputY = e.Coords.ToPlayerCoords().Y;
                                e.Player.PortalCache.DesiredOutputZ = (e.Coords.Z + 2) * 32;
                                e.Player.PortalCache.DesiredOutputR = e.Player.Position.R;
                                e.Player.PortalCache.DesiredOutputL = e.Player.Position.L;

                                e.Player.PortalCache.Name = Portal.GenerateName(e.Player.PortalCache.World, true);
                                string oldWorld = e.Player.PortalCache.World;
                                e.Player.PortalCache.World = e.Player.World.Name;
                                PortalHandler.CreatePortal(e.Player.PortalCache, WorldManager.FindWorldExact(oldWorld), true);
                                e.Player.Message(" Portal finalized: Exit point at {0} on world {1}", e.Coords.ToString(), e.Player.World.ClassyName);
                                e.Player.PortalCache = new Portal();
                                e.Result             = CanPlaceResult.Revert;
                            }
                        }
                    }
                }
            } catch (Exception ex) {
                Logger.Log(LogType.Error, "PortalHandler.Player_PlacedBlock: " + ex);
            }
        }
Beispiel #3
0
 private static void Player_Clicked(object sender, Events.PlayerPlacingBlockEventArgs e)    //placing air
 {
     if (e.Player.IsFlying)
     {
         if (e.Context == BlockChangeContext.Manual)  //ignore all other things {
         {
             if (e.Player.FlyCache.Values.Contains(e.Coords))
             {
                 e.Result = CanPlaceResult.Revert; //nothing saves to blockcount or blockdb
             }
         }
     }
 }
Beispiel #4
0
 // Placing air.
 private static void PlayerClicked(object sender, Events.PlayerPlacingBlockEventArgs e)
 {
     if (e.Player.IsFlying)
     {
         // Ignore all other things.
         if (e.Context == BlockChangeContext.Manual)
         {
             if (e.Player.FlyCache.Values.Contains(e.Coords))
             {
                 // Nothing saves to blockcount or BlockDB.
                 e.Result = CanPlaceResult.Revert;
             }
         }
     }
 }