diff --git a/FFXIVClassic Map Server/WorldManager.cs b/FFXIVClassic Map Server/WorldManager.cs index dcf02d29..1d072744 100644 --- a/FFXIVClassic Map Server/WorldManager.cs +++ b/FFXIVClassic Map Server/WorldManager.cs @@ -596,6 +596,11 @@ namespace FFXIVClassic_Map_Server player.positionZ = spawnZ; player.rotation = spawnRotation; + //Delete any GL directors + GuildleveDirector glDirector = player.GetGuildleveDirector(); + if (glDirector != null) + player.RemoveDirector(glDirector); + //Delete content if have if (player.currentContentGroup != null) { diff --git a/FFXIVClassic Map Server/actors/area/Area.cs b/FFXIVClassic Map Server/actors/area/Area.cs index 8bf5a2d9..756893aa 100644 --- a/FFXIVClassic Map Server/actors/area/Area.cs +++ b/FFXIVClassic Map Server/actors/area/Area.cs @@ -501,7 +501,7 @@ namespace FFXIVClassic_Map_Server.Actors lock (directorLock) { Director director = new Director(directorIdCount, this, path, args); - currentDirectors.Add(directorIdCount, director); + currentDirectors.Add(director.actorId, director); directorIdCount++; return director; } @@ -549,7 +549,7 @@ namespace FFXIVClassic_Map_Server.Actors lock (directorLock) { GuildleveDirector director = new GuildleveDirector(directorIdCount, this, directorScriptPath, glid, difficulty, owner, args); - currentDirectors.Add(directorIdCount, director); + currentDirectors.Add(director.actorId, director); directorIdCount++; return director; } diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs index 0c4d12a2..8f33e095 100644 --- a/FFXIVClassic Map Server/actors/chara/player/Player.cs +++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs @@ -1441,12 +1441,12 @@ namespace FFXIVClassic_Map_Server.Actors } } - public Director GetGuildleveDirector() + public GuildleveDirector GetGuildleveDirector() { foreach (Director d in ownedDirectors) { if (d is GuildleveDirector) - return d; + return (GuildleveDirector)d; } return null; diff --git a/FFXIVClassic Map Server/actors/director/Director.cs b/FFXIVClassic Map Server/actors/director/Director.cs index 5203ad9f..6f382fe1 100644 --- a/FFXIVClassic Map Server/actors/director/Director.cs +++ b/FFXIVClassic Map Server/actors/director/Director.cs @@ -18,6 +18,7 @@ namespace FFXIVClassic_Map_Server.actors.director private List members = new List(); private bool isCreated = false; private bool isDeleted = false; + private bool isDeleting = false; private Script directorScript; private Coroutine currentCoroutine; @@ -121,6 +122,7 @@ namespace FFXIVClassic_Map_Server.actors.director public void EndDirector() { + isDeleting = true; if (this is GuildleveDirector) ((GuildleveDirector)this).EndGuildleveDirector(); @@ -141,7 +143,9 @@ namespace FFXIVClassic_Map_Server.actors.director public void RemoveMember(Actor actor) { if (members.Contains(actor)) - members.Remove(actor); + members.Remove(actor); + if (GetPlayerMembers().Count == 0 && !isDeleting) + EndDirector(); } public List GetMembers() diff --git a/FFXIVClassic Map Server/actors/director/GuildleveDirector.cs b/FFXIVClassic Map Server/actors/director/GuildleveDirector.cs index 7289e353..9c440474 100644 --- a/FFXIVClassic Map Server/actors/director/GuildleveDirector.cs +++ b/FFXIVClassic Map Server/actors/director/GuildleveDirector.cs @@ -46,8 +46,6 @@ namespace FFXIVClassic_Map_Server.actors.director guildleveWork.uiState[3] = 1; guildleveWork.aimNumNow[0] = guildleveWork.aimNumNow[1] = guildleveWork.aimNumNow[2] = guildleveWork.aimNumNow[3] = 0; - - LoadGuildleve(); } public void LoadGuildleve() diff --git a/FFXIVClassic Map Server/actors/group/ContentGroup.cs b/FFXIVClassic Map Server/actors/group/ContentGroup.cs index 5c866d87..0c8b9a82 100644 --- a/FFXIVClassic Map Server/actors/group/ContentGroup.cs +++ b/FFXIVClassic Map Server/actors/group/ContentGroup.cs @@ -128,7 +128,7 @@ namespace FFXIVClassic_Map_Server.actors.group public void DeleteGroup() { - SendDeletePackets(); + SendDeletePackets(members); for (int i = 0; i < members.Count; i++) { Session s = Server.GetServer().GetSession(members[i]);