Here's my compiled version which uses a variation of screamingogre's fix for the zone_id=0 problem.  You can get the world.exe file here.  The only difference I made is that it waits up to 20 seconds to get a zone_id that's not equal to zero rather than running through a counter.  Here is the code incase anyone is interested.
In client.cpp in the World project replace the line
	Code:
	charid = database.GetCharacterInfo(char_name, &tmpaccid, &zoneID);
 with this:
	Code:
	__time64_t curtime1,curtime2;
_time64(&curtime1);		
do
{				
   charid = database.GetCharacterInfo(char_name, &tmpaccid, &zoneID);				
   _time64(&curtime2);
}while(curtime2 - curtime1 <= 20 && zoneID == 0);
 Nothing fancy, just a quick fix for now so we can zone without locking up.
Edit: Removed link as the file has been removed.  Look my post later in this thread.