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:
@@ -5655,6 +5655,8 @@ namespace Game.Entities
|
||||
else
|
||||
ClearQuestSharingInfo();
|
||||
}
|
||||
|
||||
GetSceneMgr().TriggerDelayedScenes();
|
||||
}
|
||||
|
||||
public void RemoveSocial()
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user