Finding the players zone can be convoluted - there are a number of events to watch for.

To make matters more confusing, Inspect.Zone.Detail(Inspect.Unit.Detail("player").zone).name does not always return the 'actual' zone the player is in.

The Chronicles pre-Storm Legion, all return the zone the chronicle is housed in, so Chronicle: GSB, gives the .zone and .name for GSB itself, not the Chronicle.

This also applies to the 10 man raid slivers, and Conquest: Stillmoor.

It is possible to work around this, by checking for the zone quests to complete the content.

libZoneChange does all this for you, and raises a simple event to let your addon know the zone the player is in has changed, and what is has changed to.


HOW TO USE libZoneChange

1. Create a lib directory in your addon directory, and copy libZoneChange there:

	Addon
		lib
			libZoneChange
				libZone.lua
				RiftAddon.toc
		RiftAddon.toc
		Addon.lua

2. Add entries for libZoneChange into  your RiftAddon.toc:

	Embed = {
		["lib/libZoneChange"] = true
	}

	Dependencies = 
	{
		libZoneChange = {"required", "before"},
	}

3. Subscribe to the libZoneChange event:

	Command.Event.Attach(Library.libZoneChange.Player, zc_function, "Library.LibZoneChange.Player")

4. Have your function do whatever it needs to do!

	local function zc_function(h, zoneName, zoneID)
		print(string.format("Zone Change: %s (%s)", zoneName, zoneID))
	end

The function is called with three parameters - a handle, the zonename and the zoneID.

NOTE: These are usually, but not always the same as

	Inspect.Unit.Detail("player").zone
	Inspect.Zone.Detail(Inspect.Unit.Detail("player").zone).name
	
If the player has zoned into a chronicle, a 10 man sliver or a conquest, then the parameters passed in will be updated.

The zoneName will be the zoneName as seen on a guild roster ('Conquest: Stillmoor')

The zoneID will be the zoneID as reported by Inspect.Unit.Detail("player").zone, but will have a 3 letter code appended to the end of it.

If you require the unmodified details for any reason, then they are available via the globals:

LIBZONECHANGE.actualZoneID		-- unmodified
LIBZONECHANGE.actualZoneName	-- unmodified
LIBZONECHANGE.currentZoneID		-- modified
LIBZONECHANGE.currentZoneName	-- modified