mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/Objects: Implemented vignettes
This commit is contained in:
@@ -54,6 +54,8 @@
|
||||
#include "Vehicle.h"
|
||||
#include "VMapFactory.h"
|
||||
#include "VMapManager2.h"
|
||||
#include "Vignette.h"
|
||||
#include "VignettePackets.h"
|
||||
#include "Weather.h"
|
||||
#include "WeatherMgr.h"
|
||||
#include "World.h"
|
||||
@@ -144,7 +146,7 @@ m_unloadTimer(0), m_VisibleDistance(DEFAULT_VISIBILITY_DISTANCE),
|
||||
m_VisibilityNotifyPeriod(DEFAULT_VISIBILITY_NOTIFY_PERIOD),
|
||||
m_activeNonPlayersIter(m_activeNonPlayers.end()), _transportsUpdateIter(_transports.end()),
|
||||
i_gridExpiry(expiry), m_terrain(sTerrainMgr.LoadTerrain(id)), m_forceEnabledNavMeshFilterFlags(0), m_forceDisabledNavMeshFilterFlags(0),
|
||||
i_scriptLock(false), _respawnTimes(std::make_unique<RespawnListContainer>()), _respawnCheckTimer(0)
|
||||
i_scriptLock(false), _respawnTimes(std::make_unique<RespawnListContainer>()), _respawnCheckTimer(0), _vignetteUpdateTimer(5200, 5200)
|
||||
{
|
||||
for (uint32 x = 0; x < MAX_NUMBER_OF_GRIDS; ++x)
|
||||
{
|
||||
@@ -511,6 +513,38 @@ void Map::SetWorldStateValue(int32 worldStateId, int32 value, bool hidden)
|
||||
}
|
||||
}
|
||||
|
||||
void Map::AddInfiniteAOIVignette(Vignettes::VignetteData* vignette)
|
||||
{
|
||||
_infiniteAOIVignettes.push_back(vignette);
|
||||
|
||||
WorldPackets::Vignette::VignetteUpdate vignetteUpdate;
|
||||
vignette->FillPacket(vignetteUpdate.Added);
|
||||
vignetteUpdate.Write();
|
||||
|
||||
for (MapReference const& ref : m_mapRefManager)
|
||||
if (Vignettes::CanSee(ref.GetSource(), *vignette))
|
||||
ref.GetSource()->SendDirectMessage(vignetteUpdate.GetRawPacket());
|
||||
}
|
||||
|
||||
void Map::RemoveInfiniteAOIVignette(Vignettes::VignetteData* vignette)
|
||||
{
|
||||
if (!std::erase(_infiniteAOIVignettes, vignette))
|
||||
return;
|
||||
|
||||
WorldPackets::Vignette::VignetteUpdate vignetteUpdate;
|
||||
vignetteUpdate.Removed.push_back(vignette->Guid);
|
||||
vignetteUpdate.Write();
|
||||
|
||||
if (vignette->Data->GetFlags().HasFlag(VignetteFlags::ZoneInfiniteAOI))
|
||||
{
|
||||
for (MapReference const& ref : m_mapRefManager)
|
||||
if (ref.GetSource()->GetZoneId() == vignette->ZoneID)
|
||||
ref.GetSource()->SendDirectMessage(vignetteUpdate.GetRawPacket());
|
||||
}
|
||||
else
|
||||
SendToPlayers(vignetteUpdate.GetRawPacket());
|
||||
}
|
||||
|
||||
template<class T>
|
||||
void Map::InitializeObject(T* /*obj*/) { }
|
||||
|
||||
@@ -774,6 +808,24 @@ void Map::Update(uint32 t_diff)
|
||||
obj->Update(t_diff);
|
||||
}
|
||||
|
||||
if (_vignetteUpdateTimer.Update(t_diff))
|
||||
{
|
||||
for (Vignettes::VignetteData* vignette : _infiniteAOIVignettes)
|
||||
{
|
||||
if (vignette->NeedUpdate)
|
||||
{
|
||||
WorldPackets::Vignette::VignetteUpdate vignetteUpdate;
|
||||
vignette->FillPacket(vignetteUpdate.Updated);
|
||||
vignetteUpdate.Write();
|
||||
for (MapReference const& ref : m_mapRefManager)
|
||||
if (Vignettes::CanSee(ref.GetSource(), *vignette))
|
||||
ref.GetSource()->SendDirectMessage(vignetteUpdate.GetRawPacket());
|
||||
|
||||
vignette->NeedUpdate = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SendObjectUpdates();
|
||||
|
||||
///- Process necessary scripts
|
||||
|
||||
Reference in New Issue
Block a user