If all clients act as you've stated, I think the best solution would be.
Code:
diff --git a/world/client.cpp b/world/client.cpp
index 57c60c0..0fd2117 100644
--- a/world/client.cpp
+++ b/world/client.cpp
@@ -709,7 +709,7 @@ bool Client::HandleEnterWorldPacket(const EQApplicationPacket *app) {
return true;
}
- if(!pZoning && ew->return_home)
+ if(!pZoning && ew->return_home && !ew->tutorial)
{
CharacterSelect_Struct* cs = new CharacterSelect_Struct;
memset(cs, 0, sizeof(CharacterSelect_Struct));
Unless someone chimes in and confirms what you said is true for all clients, some probably need to test them.