Core/Phasing: Implemented db spawns in personal phases (#26345)

Co-authored-by: Shauren <shauren.trinity@gmail.com>
This commit is contained in:
Matan Shukry
2021-12-28 14:24:10 +02:00
committed by GitHub
parent 1aad7f8ddd
commit 8fabe5a3aa
24 changed files with 574 additions and 81 deletions

View File

@@ -496,6 +496,13 @@ void PhasingHandler::InitDbPhaseShift(PhaseShift& phaseShift, uint8 phaseUseFlag
phaseShift.Flags = flags;
}
void PhasingHandler::InitDbPersonalOwnership(PhaseShift& phaseShift, ObjectGuid const& personalGuid)
{
ASSERT(phaseShift.IsDbPhaseShift);
ASSERT(phaseShift.HasPersonalPhase());
phaseShift.PersonalGuid = personalGuid;
}
void PhasingHandler::InitDbVisibleMapId(PhaseShift& phaseShift, int32 visibleMapId)
{
phaseShift.VisibleMapIds.clear();
@@ -551,9 +558,18 @@ void PhasingHandler::SetInversed(WorldObject* object, bool apply, bool updateVis
UpdateVisibilityIfNeeded(object, updateVisibility, true);
}
void PhasingHandler::PrintToChat(ChatHandler* chat, PhaseShift const& phaseShift)
void PhasingHandler::PrintToChat(ChatHandler* chat, WorldObject const* target)
{
chat->PSendSysMessage(LANG_PHASESHIFT_STATUS, phaseShift.Flags.AsUnderlyingType(), phaseShift.PersonalGuid.ToString().c_str());
PhaseShift const& phaseShift = target->GetPhaseShift();
std::string phaseOwnerName = "N/A";
if (phaseShift.HasPersonalPhase())
if (WorldObject* personalGuid = ObjectAccessor::GetWorldObject(*target, phaseShift.PersonalGuid))
phaseOwnerName = personalGuid->GetName();
chat->PSendSysMessage(LANG_PHASESHIFT_STATUS, phaseShift.Flags.AsUnderlyingType(),
phaseShift.PersonalGuid.ToString().c_str(), phaseOwnerName.c_str());
if (!phaseShift.Phases.empty())
{
std::ostringstream phases;
@@ -601,6 +617,14 @@ std::string PhasingHandler::FormatPhases(PhaseShift const& phaseShift)
return phases.str();
}
bool PhasingHandler::IsPersonalPhase(uint32 phaseId)
{
if (PhaseEntry const* phase = sPhaseStore.LookupEntry(phaseId))
return phase->GetFlags().HasFlag(PhaseEntryFlags::Personal);
return false;
}
void PhasingHandler::UpdateVisibilityIfNeeded(WorldObject* object, bool updateVisibility, bool changed)
{
if (changed && object->IsInWorld())