You are checking the position of all 8 hotel locations. That means you are very likely to be away from at least one of these positions at all times, hence your code is firing constantly. You could add a boolean and only show your "warning" when you are not close to any hotel. Like this:
while (true)
{
GameFiber.Yield();
bool isCloseToAnyHotel = false;
for (int index = 0; index < 8; index++)
{
if (Vector3.Distance2D(hotelLocation[index], Game.LocalPlayer.Character.AbovePosition) < 20 ) // Only activate if the player is close enough.
{
isCloseToAnyHotel = true;
Game.DisplayHelp("Menu Should Be activated");
if (activeMenu == !true)
{
mainMenu.Visible = true;
activeMenu = true;
GameFiber.StartNew(delegate
{
while (true)
{
GameFiber.Yield();
_menuPool.ProcessMenus();
}
});
}
}
}
if (!isCloseToAnyHotel)
{
// Now only fired when you are not close to any hotel.
Game.DisplayNotification("You are away from a hotel.");
}
}