From 019e305525ad0448f90f1773d3c2a8caab40cb7f Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Sun, 25 Jun 2017 14:52:32 -0400 Subject: [PATCH] Fixed redundant looping when removing/finishing a director. Fixed issue where packets to delete content group wouldn't send. Fixed issue where ContentGroups/Directors weren't clearing after deletion causing a growing amount of zombie groups/directors. --- FFXIVClassic Map Server/WorldManager.cs | 5 +++++ FFXIVClassic Map Server/actors/area/Area.cs | 4 ++-- FFXIVClassic Map Server/actors/chara/player/Player.cs | 4 ++-- FFXIVClassic Map Server/actors/director/Director.cs | 6 +++++- .../actors/director/GuildleveDirector.cs | 2 -- FFXIVClassic Map Server/actors/group/ContentGroup.cs | 2 +- 6 files changed, 15 insertions(+), 8 deletions(-) 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]);