Core/Scenes: Delay scenes sent when not in world until adding to map

Port From (https://github.com/TrinityCore/TrinityCore/commit/6d93f0a5f79c5465341a850279466ce36232e72e)
This commit is contained in:
hondacrx
2021-10-05 13:48:39 -04:00
parent d9355fc4c7
commit cf248ca95a
3 changed files with 28 additions and 9 deletions
+2
View File
@@ -5655,6 +5655,8 @@ namespace Game.Entities
else
ClearQuestSharingInfo();
}
GetSceneMgr().TriggerDelayedScenes();
}
public void RemoveSocial()
+15 -1
View File
@@ -17,6 +17,7 @@
using Framework.Constants;
using Game.DataStorage;
using Game.Networking;
using Game.Networking.Packets;
using System;
using System.Collections.Generic;
@@ -28,6 +29,7 @@ namespace Game.Entities
Player _player;
Dictionary<uint, SceneTemplate> _scenesByInstance = new();
uint _standaloneSceneInstanceID;
List<ServerPacket> _delayedScenes = new();
bool _isDebuggingScenes;
public SceneMgr(Player player)
@@ -69,8 +71,12 @@ namespace Game.Entities
playScene.Location = position;
playScene.TransportGUID = GetPlayer().GetTransGUID();
playScene.Encrypted = sceneTemplate.Encrypted;
playScene.Write();
GetPlayer().SendPacket(playScene);
if (GetPlayer().IsInWorld)
GetPlayer().SendPacket(playScene);
else
_delayedScenes.Add(playScene);
AddInstanceIdToSceneMap(sceneInstanceID, sceneTemplate);
@@ -230,6 +236,14 @@ namespace Game.Entities
return activeSceneCount;
}
public void TriggerDelayedScenes()
{
foreach (var playScene in _delayedScenes)
GetPlayer().SendPacket(playScene);
_delayedScenes.Clear();
}
Player GetPlayer() { return _player; }
void RecreateScene(uint sceneScriptPackageId, SceneFlags playbackflags = SceneFlags.Unk16, Position position = null)