Core/Scenes: Implemented spell created SceneObjects

Port From (https://github.com/TrinityCore/TrinityCore/commit/d7302ffd1499433fef2cc4e824ae9443c3d2c79f)
This commit is contained in:
hondacrx
2021-10-11 17:21:33 -04:00
parent b0528d1ad3
commit d2bcc321f5
11 changed files with 374 additions and 17 deletions
+9 -1
View File
@@ -292,6 +292,7 @@ namespace Game.Maps
visitor.Visit(_container.dynamicObjects);
visitor.Visit(_container.corpses);
visitor.Visit(_container.areaTriggers);
visitor.Visit(_container.sceneObjects);
visitor.Visit(_container.conversations);
visitor.Visit(_container.worldObjects);
break;
@@ -349,7 +350,7 @@ namespace Game.Maps
MultiTypeContainer _objects;
/// <summary>
/// Holds all Grid objects - GameObjects, Creatures(except pets), DynamicObject, Corpse(Bones), AreaTrigger, Conversation
/// Holds all Grid objects - GameObjects, Creatures(except pets), DynamicObject, Corpse(Bones), AreaTrigger, Conversation, SceneObject
/// </summary>
MultiTypeContainer _container;
}
@@ -379,6 +380,9 @@ namespace Game.Maps
case TypeId.AreaTrigger:
areaTriggers.Add((AreaTrigger)obj);
break;
case TypeId.SceneObject:
sceneObjects.Add((SceneObject)obj);
break;
case TypeId.Conversation:
conversations.Add((Conversation)obj);
break;
@@ -408,6 +412,9 @@ namespace Game.Maps
case TypeId.AreaTrigger:
areaTriggers.Remove((AreaTrigger)obj);
break;
case TypeId.SceneObject:
sceneObjects.Remove((SceneObject)obj);
break;
case TypeId.Conversation:
conversations.Remove((Conversation)obj);
break;
@@ -447,6 +454,7 @@ namespace Game.Maps
public List<Corpse> corpses = new();
public List<DynamicObject> dynamicObjects = new();
public List<AreaTrigger> areaTriggers = new();
public List<SceneObject> sceneObjects = new();
public List<Conversation> conversations = new();
public List<GameObject> gameObjects = new();
public List<WorldObject> worldObjects = new();
+67
View File
@@ -31,6 +31,7 @@ namespace Game.Maps
public virtual void Visit(IList<WorldObject> objs) { }
public virtual void Visit(IList<Creature> objs) { }
public virtual void Visit(IList<AreaTrigger> objs) { }
public virtual void Visit(IList<SceneObject> objs) { }
public virtual void Visit(IList<Conversation> objs) { }
public virtual void Visit(IList<GameObject> objs) { }
public virtual void Visit(IList<DynamicObject> objs) { }
@@ -66,6 +67,7 @@ namespace Game.Maps
public void Visit(IList<WorldObject> collection) { _notifier.Visit(collection); }
public void Visit(IList<Creature> creatures) { _notifier.Visit(creatures); }
public void Visit(IList<AreaTrigger> areatriggers) { _notifier.Visit(areatriggers); }
public void Visit(IList<SceneObject> sceneObjects) { _notifier.Visit(sceneObjects); }
public void Visit(IList<Conversation> conversations) { _notifier.Visit(conversations); }
public void Visit(IList<GameObject> gameobjects) { _notifier.Visit(gameobjects); }
public void Visit(IList<DynamicObject> dynamicobjects) { _notifier.Visit(dynamicobjects); }
@@ -767,6 +769,19 @@ namespace Game.Maps
}
}
public override void Visit(IList<SceneObject> objs)
{
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.SceneObject))
return;
for (var i = 0; i < objs.Count; ++i)
{
SceneObject sceneObject = objs[i];
if (sceneObject.IsInPhase(_searcher))
i_do.Invoke(sceneObject);
}
}
public override void Visit(IList<Conversation> objs)
{
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Conversation))
@@ -1129,6 +1144,29 @@ namespace Game.Maps
}
}
public override void Visit(IList<SceneObject> objs)
{
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.SceneObject))
return;
// already found
if (i_object)
return;
for (var i = 0; i < objs.Count; ++i)
{
SceneObject sceneObject = objs[i];
if (!sceneObject.IsInPhase(_searcher))
continue;
if (i_check.Invoke(sceneObject))
{
i_object = sceneObject;
return;
}
}
}
public override void Visit(IList<Conversation> objs)
{
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Conversation))
@@ -1264,6 +1302,22 @@ namespace Game.Maps
}
}
public override void Visit(IList<SceneObject> objs)
{
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.SceneObject))
return;
for (var i = 0; i < objs.Count; ++i)
{
SceneObject sceneObject = objs[i];
if (!sceneObject.IsInPhase(_searcher))
continue;
if (i_check.Invoke(sceneObject))
i_object = sceneObject;
}
}
public override void Visit(IList<Conversation> objs)
{
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Conversation))
@@ -1375,6 +1429,19 @@ namespace Game.Maps
}
}
public override void Visit(IList<SceneObject> objs)
{
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Conversation))
return;
for (var i = 0; i < objs.Count; ++i)
{
SceneObject sceneObject = objs[i];
if (i_check.Invoke(sceneObject))
i_objects.Add(sceneObject);
}
}
public override void Visit(IList<Conversation> objs)
{
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Conversation))
+7 -1
View File
@@ -21,7 +21,6 @@ using Framework.Dynamic;
using Framework.GameMath;
using Game.BattleGrounds;
using Game.Collision;
using Game.Combat;
using Game.DataStorage;
using Game.Entities;
using Game.Groups;
@@ -3824,14 +3823,21 @@ namespace Game.Maps
return (AreaTrigger)_objectsStore.LookupByKey(guid);
}
public SceneObject GetSceneObject(ObjectGuid guid)
{
return _objectsStore.LookupByKey(guid) as SceneObject;
}
public Conversation GetConversation(ObjectGuid guid)
{
return (Conversation)_objectsStore.LookupByKey(guid);
}
public Player GetPlayer(ObjectGuid guid)
{
return Global.ObjAccessor.GetPlayer(this, guid);
}
public Corpse GetCorpse(ObjectGuid guid)
{
if (!guid.IsCorpse())