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; }
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); } } }