Core/Objects: Implemented vignettes
Port From (https://github.com/TrinityCore/TrinityCore/commit/fccf6fb72b60b08dfbe6d5fb17fba55239944fca)
This commit is contained in:
@@ -32,6 +32,7 @@ namespace Game.Maps
|
||||
m_VisibilityNotifyPeriod = SharedConst.DefaultVisibilityNotifyPeriod;
|
||||
i_gridExpiry = expiry;
|
||||
m_terrain = Global.TerrainMgr.LoadTerrain(id);
|
||||
_vignetteUpdateTimer = new(5200, 5200);
|
||||
|
||||
for (uint x = 0; x < MapConst.MaxGrids; ++x)
|
||||
{
|
||||
@@ -398,6 +399,41 @@ namespace Game.Maps
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void AddInfiniteAOIVignette(VignetteData vignette)
|
||||
{
|
||||
_infiniteAOIVignettes.Add(vignette);
|
||||
|
||||
VignetteUpdate vignetteUpdate = new();
|
||||
vignette.FillPacket(vignetteUpdate.Added);
|
||||
vignetteUpdate.Write();
|
||||
|
||||
foreach (var player in GetPlayers())
|
||||
if (Vignettes.CanSee(player, vignette))
|
||||
player.SendPacket(vignetteUpdate);
|
||||
}
|
||||
|
||||
public void RemoveInfiniteAOIVignette(VignetteData vignette)
|
||||
{
|
||||
if (!_infiniteAOIVignettes.Remove(vignette))
|
||||
return;
|
||||
|
||||
VignetteUpdate vignetteUpdate = new();
|
||||
vignetteUpdate.Removed.Add(vignette.Guid);
|
||||
vignetteUpdate.Write();
|
||||
|
||||
if (vignette.Data.GetFlags().HasFlag(VignetteFlags.ZoneInfiniteAOI))
|
||||
{
|
||||
foreach (var player in GetPlayers())
|
||||
if (player.GetZoneId() == vignette.ZoneID)
|
||||
player.SendPacket(vignetteUpdate);
|
||||
}
|
||||
else
|
||||
SendToPlayers(vignetteUpdate);
|
||||
}
|
||||
|
||||
public List<VignetteData> GetInfiniteAOIVignettes() { return _infiniteAOIVignettes; }
|
||||
|
||||
void InitializeObject(WorldObject obj)
|
||||
{
|
||||
if (!obj.IsTypeId(TypeId.Unit) || !obj.IsTypeId(TypeId.GameObject))
|
||||
@@ -663,6 +699,24 @@ namespace Game.Maps
|
||||
transport.Update(diff);
|
||||
}
|
||||
|
||||
if (_vignetteUpdateTimer.Update((int)diff))
|
||||
{
|
||||
foreach (VignetteData vignette in _infiniteAOIVignettes)
|
||||
{
|
||||
if (vignette.NeedUpdate)
|
||||
{
|
||||
VignetteUpdate vignetteUpdate = new();
|
||||
vignette.FillPacket(vignetteUpdate.Updated);
|
||||
vignetteUpdate.Write();
|
||||
foreach (var player in GetPlayers())
|
||||
if (Vignettes.CanSee(player, vignette))
|
||||
player.SendPacket(vignetteUpdate);
|
||||
|
||||
vignette.NeedUpdate = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SendObjectUpdates();
|
||||
|
||||
// Process necessary scripts
|
||||
@@ -4780,6 +4834,9 @@ namespace Game.Maps
|
||||
MultiPersonalPhaseTracker _multiPersonalPhaseTracker = new();
|
||||
|
||||
Dictionary<int, int> _worldStateValues = new();
|
||||
|
||||
List<VignetteData> _infiniteAOIVignettes = new();
|
||||
PeriodicTimer _vignetteUpdateTimer;
|
||||
#endregion
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user