Core/Objects: Implemented vignettes

This commit is contained in:
Shauren
2024-03-09 00:54:27 +01:00
parent 1439535c6a
commit fccf6fb72b
27 changed files with 743 additions and 11 deletions

View File

@@ -85,6 +85,8 @@
#include "Util.h"
#include "Vehicle.h"
#include "VehiclePackets.h"
#include "Vignette.h"
#include "VignettePackets.h"
#include "World.h"
#include "WorldPacket.h"
#include "WorldSession.h"
@@ -8629,6 +8631,9 @@ void Unit::setDeathState(DeathState s)
SetEmoteState(EMOTE_ONESHOT_NONE);
SetStandState(UNIT_STAND_STATE_STAND);
if (m_vignette && !m_vignette->Data->GetFlags().HasFlag(VignetteFlags::PersistsThroughDeath))
SetVignette(0);
// players in instance don't have ZoneScript, but they have InstanceScript
if (ZoneScript* zoneScript = GetZoneScript() ? GetZoneScript() : GetInstanceScript())
zoneScript->OnUnitDeath(this);
@@ -9665,6 +9670,8 @@ void Unit::CleanupBeforeRemoveFromMap(bool finalCleanup)
// This needs to be before RemoveFromWorld to make GetCaster() return a valid pointer on aura removal
InterruptNonMeleeSpells(true);
SetVignette(0);
if (IsInWorld())
RemoveFromWorld();
else
@@ -10706,6 +10713,18 @@ void Unit::SetMeleeAnimKitId(uint16 animKitId)
}
}
if (Vignettes::VignetteData const* vignette = victim->GetVignette())
{
for (Player* tapper : tappers)
{
if (Quest const* reward = sObjectMgr->GetQuestTemplate(vignette->Data->RewardQuestID))
tapper->RewardQuest(reward, LootItemType::Item, 0, victim, false);
if (vignette->Data->VisibleTrackingQuestID)
tapper->SetRewardedQuest(vignette->Data->VisibleTrackingQuestID);
}
}
KillRewarder(Trinity::IteratorPair(tappers.data(), tappers.data() + tappers.size()), victim, false).Reward();
}
@@ -12412,6 +12431,10 @@ bool Unit::UpdatePosition(float x, float y, float z, float orientation, bool tel
if (isInWater)
RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::Swimming);
// TODO: on heartbeat
if (m_vignette)
Vignettes::Update(*m_vignette, this);
return (relocated || turn);
}
@@ -13733,6 +13756,21 @@ float Unit::GetCollisionHeight() const
return collisionHeight == 0.0f ? DEFAULT_COLLISION_HEIGHT : collisionHeight;
}
void Unit::SetVignette(uint32 vignetteId)
{
if (m_vignette)
{
if (m_vignette->Data->ID == vignetteId)
return;
Vignettes::Remove(*m_vignette, this);
m_vignette = nullptr;
}
if (VignetteEntry const* vignette = sVignetteStore.LookupEntry(vignetteId))
m_vignette = Vignettes::Create(vignette, this);
}
std::string Unit::GetDebugInfo() const
{
std::stringstream sstr;