Beispiel #1
0
        public void OnUpdate(object sender, ElapsedEventArgs e)
        {
            if (Main.worldID == 0)
            {
                return;
            }
            if (ULock)
            {
                return;
            }
            ULock = true;
            var Start = DateTime.Now;

            if (Main.rand == null)
            {
                Main.rand = new UnifiedRandom();
            }
            lock (HPlayers)
            {
                var I = HousingDistricts.HPlayers.Count;
                for (int i = 0; i < I; i++)
                {
                    if (UTimeout(Start))
                    {
                        return;
                    }
                    var           player       = HousingDistricts.HPlayers[i];
                    List <string> NewCurHouses = new List <string>(player.CurHouses);
                    int           HousesNotIn  = 0;
                    try
                    {
                        House.UpdateAction((house) =>
                        {
                            if (UTimeout(Start))
                            {
                                return;
                            }
                            try
                            {
                                if (house.HouseArea.Intersects(new Rectangle(player.TSPlayer.TileX, player.TSPlayer.TileY, 1, 1)))
                                {
                                    if (house.Locked == 1 && !player.TSPlayer.Group.HasPermission("house.enterlocked"))
                                    {
                                        if (!HTools.CanVisitHouse(player.TSPlayer.User, house))
                                        {
                                            player.TSPlayer.Teleport((int)player.LastTilePos.X * 16, (int)player.LastTilePos.Y * 16);
                                            player.TSPlayer.SendMessage("House: '" + house.Name + "' Is locked", Color.LightSeaGreen);
                                        }
                                        else
                                        {
                                            if (!player.CurHouses.Contains(house.Name) && HConfig.NotifyOnEntry)
                                            {
                                                NewCurHouses.Add(house.Name);
                                                if (HTools.OwnsHouse(player.TSPlayer.User, house) && HConfig.NotifySelf)
                                                {
                                                    player.TSPlayer.SendMessage(HConfig.NotifyOnOwnHouseEntryString.Replace("$HOUSE_NAME", house.Name), Color.LightSeaGreen);
                                                }
                                                else
                                                {
                                                    if (HConfig.NotifyVisitor)
                                                    {
                                                        player.TSPlayer.SendMessage(HConfig.NotifyOnEntryString.Replace("$HOUSE_NAME", house.Name), Color.LightSeaGreen);
                                                    }

                                                    if (HConfig.NotifyOwner)
                                                    {
                                                        HTools.BroadcastToHouseOwners(house.Name, HConfig.NotifyOnOtherEntryString.Replace("$PLAYER_NAME", player.TSPlayer.Name).Replace("$HOUSE_NAME", house.Name));
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        if (!player.CurHouses.Contains(house.Name) && HConfig.NotifyOnEntry)
                                        {
                                            NewCurHouses.Add(house.Name);
                                            if (HTools.OwnsHouse(player.TSPlayer.User, house) && HConfig.NotifySelf)
                                            {
                                                player.TSPlayer.SendMessage(HConfig.NotifyOnOwnHouseEntryString.Replace("$HOUSE_NAME", house.Name), Color.LightSeaGreen);
                                            }
                                            else
                                            {
                                                if (HConfig.NotifyVisitor)
                                                {
                                                    player.TSPlayer.SendMessage(HConfig.NotifyOnEntryString.Replace("$HOUSE_NAME", house.Name), Color.LightSeaGreen);
                                                }

                                                if (HConfig.NotifyOwner)
                                                {
                                                    HTools.BroadcastToHouseOwners(house.Name, HConfig.NotifyOnOtherEntryString.Replace("$PLAYER_NAME", player.TSPlayer.Name).Replace("$HOUSE_NAME", house.Name));
                                                }
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    NewCurHouses.Remove(house.Name);
                                    HousesNotIn++;
                                }
                            }
                            catch (Exception ex)
                            {
                                TShock.Log.Error(ex.ToString());
                            }
                        });
                    }
                    catch (Exception ex)
                    {
                        TShock.Log.Error(ex.ToString());
                        continue;
                    }

                    if (HConfig.NotifyOnExit)
                    {
                        {
                            var K = player.CurHouses.Count;
                            for (int k = 0; k < K; k++)
                            {
                                if (UTimeout(Start))
                                {
                                    return;
                                }
                                var cHouse = player.CurHouses[k];
                                if (!NewCurHouses.Contains(cHouse))
                                {
                                    if (HTools.OwnsHouse(player.TSPlayer.User, cHouse))
                                    {
                                        if (HConfig.NotifySelf)
                                        {
                                            player.TSPlayer.SendMessage(HConfig.NotifyOnOwnHouseExitString.Replace("$HOUSE_NAME", cHouse), Color.LightSeaGreen);
                                        }
                                    }
                                    else
                                    {
                                        if (HConfig.NotifyVisitor)
                                        {
                                            player.TSPlayer.SendMessage(HConfig.NotifyOnExitString.Replace("$HOUSE_NAME", cHouse), Color.LightSeaGreen);
                                        }

                                        if (HConfig.NotifyOwner)
                                        {
                                            HTools.BroadcastToHouseOwners(cHouse, HConfig.NotifyOnOtherExitString.Replace("$PLAYER_NAME", player.TSPlayer.Name).Replace("$HOUSE_NAME", cHouse));
                                        }
                                    }
                                }
                            }
                        }
                    }

                    player.CurHouses   = NewCurHouses;
                    player.LastTilePos = new Vector2(player.TSPlayer.TileX, player.TSPlayer.TileY);
                }
            }
            ULock = false;
        }
Beispiel #2
0
        public void OnUpdate()
        {
            lock (HPlayers)
            {
                foreach (HPlayer player in HPlayers)
                {
                    int HousesNotIn = 0;
                    foreach (House house in HousingDistricts.Houses)
                    {
                        if (HConfig.NotifyOnEntry)
                        {
                            if (house.HouseArea.Intersects(new Rectangle(player.TSPlayer.TileX, player.TSPlayer.TileY, 1, 1)) && house.WorldID == Main.worldID.ToString())
                            {
                                if (house.Locked == 1 && !player.TSPlayer.Group.HasPermission("enterlocked"))
                                {
                                    if (!HTools.OwnsHouse(player.TSPlayer.UserID.ToString(), house.Name))
                                    {
                                        player.TSPlayer.Teleport((int)player.LastTilePos.X, (int)player.LastTilePos.Y + 3);
                                        player.TSPlayer.SendMessage("House: '" + house.Name + "' Is locked", Color.MediumPurple);
                                    }
                                }
                                else
                                {
                                    if (player.CurHouse != house.Name)
                                    {
                                        player.CurHouse = house.Name;
                                        player.InHouse  = true;

                                        if (HTools.OwnsHouse(player.TSPlayer.UserID.ToString(), player.CurHouse))
                                        {
                                            player.TSPlayer.SendMessage("Entered your house: '" + house.Name + "'", Color.MediumPurple);
                                        }
                                        else
                                        {
                                            player.TSPlayer.SendMessage("Entered the house: '" + house.Name + "'", Color.MediumPurple);
                                            HTools.BroadcastToHouseOwners(player.CurHouse, "'" + player.TSPlayer.Name + "' Entered your house: " + player.CurHouse);
                                        }
                                    }
                                }
                            }
                            else
                            {
                                HousesNotIn++;
                            }
                        }
                    }

                    if (HConfig.NotifyOnExit)
                    {
                        if (HousesNotIn == HousingDistricts.Houses.Count && player.InHouse)
                        {
                            if (HTools.OwnsHouse(player.TSPlayer.UserID.ToString(), player.CurHouse))
                            {
                                player.TSPlayer.SendMessage("Left your house: '" + player.CurHouse + "'", Color.MediumPurple);
                            }
                            else
                            {
                                player.TSPlayer.SendMessage("Left house: '" + player.CurHouse + "'", Color.MediumPurple);
                                HTools.BroadcastToHouseOwners(player.CurHouse, "'" + player.TSPlayer.Name + "' Left your house: " + player.CurHouse);
                            }
                            player.CurHouse = "";
                            player.InHouse  = false;
                        }
                    }
                    player.LastTilePos = new Vector2(player.TSPlayer.TileX, player.TSPlayer.TileY);
                }
            }
        }