Core/Spells: Implemented SPELL_EFFECT_CANCEL_CONVERSATION

Port From (https://github.com/TrinityCore/TrinityCore/commit/1673b6e2ff69b9a59522892280e91cc5085a5ec0)
This commit is contained in:
hondacrx
2021-10-11 19:49:26 -04:00
parent d2bcc321f5
commit 58550514e6
3 changed files with 41 additions and 1 deletions
+1 -1
View File
@@ -80,7 +80,7 @@ namespace Game.Entities
base.Update(diff); base.Update(diff);
} }
void Remove() public void Remove()
{ {
if (IsInWorld) if (IsInWorld)
{ {
+18
View File
@@ -1341,6 +1341,7 @@ namespace Game.Maps
WorldObject _searcher; WorldObject _searcher;
ICheck<WorldObject> i_check; ICheck<WorldObject> i_check;
} }
public class WorldObjectListSearcher : Notifier public class WorldObjectListSearcher : Notifier
{ {
public WorldObjectListSearcher(WorldObject searcher, List<WorldObject> objects, ICheck<WorldObject> check, GridMapTypeMask mapTypeMask = GridMapTypeMask.All) public WorldObjectListSearcher(WorldObject searcher, List<WorldObject> objects, ICheck<WorldObject> check, GridMapTypeMask mapTypeMask = GridMapTypeMask.All)
@@ -2642,6 +2643,23 @@ namespace Game.Maps
ObjectGuid _casterGUID; ObjectGuid _casterGUID;
} }
class ObjectEntryAndPrivateOwnerIfExistsCheck : ICheck<WorldObject>
{
ObjectGuid _ownerGUID;
uint _entry;
public ObjectEntryAndPrivateOwnerIfExistsCheck(ObjectGuid ownerGUID, uint entry)
{
_ownerGUID = ownerGUID;
_entry = entry;
}
public bool Invoke(WorldObject obj)
{
return obj.GetEntry() == _entry && (!obj.IsPrivateObject() || obj.GetPrivateObjectOwner() == _ownerGUID);
}
}
class GameObjectFocusCheck : ICheck<GameObject> class GameObjectFocusCheck : ICheck<GameObject>
{ {
public GameObjectFocusCheck(WorldObject caster, uint focusId) public GameObjectFocusCheck(WorldObject caster, uint focusId)
+22
View File
@@ -5336,6 +5336,28 @@ namespace Game.Spells
Conversation.CreateConversation((uint)effectInfo.MiscValue, unitCaster, destTarget.GetPosition(), ObjectGuid.Empty, GetSpellInfo()); Conversation.CreateConversation((uint)effectInfo.MiscValue, unitCaster, destTarget.GetPosition(), ObjectGuid.Empty, GetSpellInfo());
} }
[SpellEffectHandler(SpellEffectName.CancelConversation)]
void EffectCancelConversation()
{
if (effectHandleMode != SpellEffectHandleMode.HitTarget)
return;
if (!unitTarget)
return;
List<WorldObject> objs = new();
ObjectEntryAndPrivateOwnerIfExistsCheck check = new(unitTarget.GetGUID(), (uint)effectInfo.MiscValue);
WorldObjectListSearcher checker = new(unitTarget, objs, check, GridMapTypeMask.Conversation);
Cell.VisitGridObjects(unitTarget, checker, 100.0f);
foreach (WorldObject obj in objs)
{
Conversation convo = obj.ToConversation();
if (convo != null)
convo.Remove();
}
}
[SpellEffectHandler(SpellEffectName.AddGarrisonFollower)] [SpellEffectHandler(SpellEffectName.AddGarrisonFollower)]
void EffectAddGarrisonFollower() void EffectAddGarrisonFollower()
{ {