Core/Spells: Implemented SPELL_EFFECT_CANCEL_CONVERSATION (#27037)
This commit is contained in:
@@ -1608,6 +1608,21 @@ namespace Trinity
|
||||
ObjectGuid _casterGUID;
|
||||
};
|
||||
|
||||
class ObjectEntryAndPrivateOwnerIfExistsCheck
|
||||
{
|
||||
public:
|
||||
ObjectEntryAndPrivateOwnerIfExistsCheck(ObjectGuid ownerGUID, uint32 entry) : _ownerGUID(ownerGUID), _entry(entry) { }
|
||||
|
||||
bool operator()(WorldObject* object) const
|
||||
{
|
||||
return object->GetEntry() == _entry && (!object->IsPrivateObject() || object->GetPrivateObjectOwner() == _ownerGUID);
|
||||
}
|
||||
|
||||
private:
|
||||
ObjectGuid _ownerGUID;
|
||||
uint32 _entry;
|
||||
};
|
||||
|
||||
// Player checks and do
|
||||
|
||||
// Prepare using Builder localized packets with caching and send to player
|
||||
|
||||
@@ -371,6 +371,7 @@ class TC_GAME_API Spell
|
||||
void EffectLearnGarrisonBuilding();
|
||||
void EffectCreateGarrison();
|
||||
void EffectCreateConversation();
|
||||
void EffectCancelConversation();
|
||||
void EffectAddGarrisonFollower();
|
||||
void EffectActivateGarrisonBuilding();
|
||||
void EffectHealBattlePetPct();
|
||||
|
||||
@@ -194,7 +194,7 @@ NonDefaultConstructible<SpellEffectHandlerFn> SpellEffectHandlers[TOTAL_SPELL_EF
|
||||
&Spell::EffectDestroyAllTotems, //110 SPELL_EFFECT_DESTROY_ALL_TOTEMS
|
||||
&Spell::EffectDurabilityDamage, //111 SPELL_EFFECT_DURABILITY_DAMAGE
|
||||
&Spell::EffectNULL, //112 SPELL_EFFECT_112
|
||||
&Spell::EffectNULL, //113 SPELL_EFFECT_CANCEL_CONVERSATION
|
||||
&Spell::EffectCancelConversation, //113 SPELL_EFFECT_CANCEL_CONVERSATION
|
||||
&Spell::EffectTaunt, //114 SPELL_EFFECT_ATTACK_ME
|
||||
&Spell::EffectDurabilityDamagePCT, //115 SPELL_EFFECT_DURABILITY_DAMAGE_PCT
|
||||
&Spell::EffectSkinPlayerCorpse, //116 SPELL_EFFECT_SKIN_PLAYER_CORPSE one spell: Remove Insignia, bg usage, required special corpse flags...
|
||||
@@ -5547,6 +5547,26 @@ void Spell::EffectCreateConversation()
|
||||
Conversation::CreateConversation(effectInfo->MiscValue, unitCaster, destTarget->GetPosition(), ObjectGuid::Empty, GetSpellInfo());
|
||||
}
|
||||
|
||||
void Spell::EffectCancelConversation()
|
||||
{
|
||||
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
|
||||
return;
|
||||
|
||||
if (!unitTarget)
|
||||
return;
|
||||
|
||||
std::vector<WorldObject*> objs;
|
||||
Trinity::ObjectEntryAndPrivateOwnerIfExistsCheck check(unitTarget->GetGUID(), effectInfo->MiscValue);
|
||||
Trinity::WorldObjectListSearcher<Trinity::ObjectEntryAndPrivateOwnerIfExistsCheck> checker(unitTarget, objs, check, GRID_MAP_TYPE_MASK_CONVERSATION);
|
||||
Cell::VisitGridObjects(unitTarget, checker, 100.0f);
|
||||
|
||||
for (WorldObject* obj : objs)
|
||||
{
|
||||
if (Conversation* convo = obj->ToConversation())
|
||||
convo->Remove();
|
||||
}
|
||||
}
|
||||
|
||||
void Spell::EffectAddGarrisonFollower()
|
||||
{
|
||||
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
|
||||
|
||||
Reference in New Issue
Block a user