mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-17 13:39:46 -04:00
Core/Objects: Implemented vignettes
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user