Misc cleanups/Fixes
This commit is contained in:
@@ -89,7 +89,7 @@ namespace Framework.Collections
|
|||||||
Exchange(1, Size--);
|
Exchange(1, Size--);
|
||||||
Sink(1);
|
Sink(1);
|
||||||
_qp[min] = -1;
|
_qp[min] = -1;
|
||||||
_keys[_pq[Size + 1]] = default(T);
|
_keys[_pq[Size + 1]] = default;
|
||||||
_pq[Size + 1] = -1;
|
_pq[Size + 1] = -1;
|
||||||
return min;
|
return min;
|
||||||
}
|
}
|
||||||
@@ -143,7 +143,7 @@ namespace Framework.Collections
|
|||||||
Exchange(i, Size--);
|
Exchange(i, Size--);
|
||||||
Swim(i);
|
Swim(i);
|
||||||
Sink(i);
|
Sink(i);
|
||||||
_keys[index] = default(T);
|
_keys[index] = default;
|
||||||
_qp[index] = -1;
|
_qp[index] = -1;
|
||||||
}
|
}
|
||||||
private bool Greater(int i, int j)
|
private bool Greater(int i, int j)
|
||||||
|
|||||||
@@ -137,7 +137,7 @@ namespace System.Collections.Generic
|
|||||||
{
|
{
|
||||||
if (!_interalStorage.ContainsKey(key))
|
if (!_interalStorage.ContainsKey(key))
|
||||||
{
|
{
|
||||||
value = default(TValue);
|
value = default;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
value = _interalStorage[key].Last();
|
value = _interalStorage[key].Last();
|
||||||
@@ -381,7 +381,7 @@ namespace System.Collections.Generic
|
|||||||
{
|
{
|
||||||
if (!_interalStorage.ContainsKey(key))
|
if (!_interalStorage.ContainsKey(key))
|
||||||
{
|
{
|
||||||
value = default(TValue);
|
value = default;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
value = _interalStorage[key].Last();
|
value = _interalStorage[key].Last();
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ namespace Framework.Database
|
|||||||
var value = _reader[column];
|
var value = _reader[column];
|
||||||
|
|
||||||
if (value == DBNull.Value)
|
if (value == DBNull.Value)
|
||||||
return default(T);
|
return default;
|
||||||
|
|
||||||
if (value.GetType() != typeof(T))
|
if (value.GetType() != typeof(T))
|
||||||
return (T)Convert.ChangeType(value, typeof(T));//todo remove me when all fields are the right type this is super slow
|
return (T)Convert.ChangeType(value, typeof(T));//todo remove me when all fields are the right type this is super slow
|
||||||
@@ -105,7 +105,7 @@ namespace Framework.Database
|
|||||||
var value = _currentRow[column];
|
var value = _currentRow[column];
|
||||||
|
|
||||||
if (value == DBNull.Value)
|
if (value == DBNull.Value)
|
||||||
return default(T);
|
return default;
|
||||||
|
|
||||||
if (value.GetType() != typeof(T))
|
if (value.GetType() != typeof(T))
|
||||||
return (T)Convert.ChangeType(value, typeof(T));//todo remove me when all fields are the right type this is super slow
|
return (T)Convert.ChangeType(value, typeof(T));//todo remove me when all fields are the right type this is super slow
|
||||||
|
|||||||
@@ -317,7 +317,7 @@ namespace Framework.Dynamic
|
|||||||
/// Cancel events belonging to specified group.
|
/// Cancel events belonging to specified group.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="group">Group to cancel.</param>
|
/// <param name="group">Group to cancel.</param>
|
||||||
void CancelEventGroup(uint group)
|
public void CancelEventGroup(uint group)
|
||||||
{
|
{
|
||||||
if (group == 0 || group > 8 || Empty())
|
if (group == 0 || group > 8 || Empty())
|
||||||
return;
|
return;
|
||||||
@@ -334,7 +334,7 @@ namespace Framework.Dynamic
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="eventId">Wanted event id.</param>
|
/// <param name="eventId">Wanted event id.</param>
|
||||||
/// <returns>Time of found event.</returns>
|
/// <returns>Time of found event.</returns>
|
||||||
uint GetNextEventTime(uint eventId)
|
public uint GetNextEventTime(uint eventId)
|
||||||
{
|
{
|
||||||
if (Empty())
|
if (Empty())
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -64,145 +64,145 @@ namespace Framework.IO
|
|||||||
public char NextChar(string delimiters = " ")
|
public char NextChar(string delimiters = " ")
|
||||||
{
|
{
|
||||||
if (!MoveNext(delimiters))
|
if (!MoveNext(delimiters))
|
||||||
return default(char);
|
return default;
|
||||||
|
|
||||||
char value;
|
char value;
|
||||||
if (char.TryParse(Current, out value))
|
if (char.TryParse(Current, out value))
|
||||||
return value;
|
return value;
|
||||||
|
|
||||||
return default(char);
|
return default;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte NextByte(string delimiters = " ")
|
public byte NextByte(string delimiters = " ")
|
||||||
{
|
{
|
||||||
if (!MoveNext(delimiters))
|
if (!MoveNext(delimiters))
|
||||||
return default(byte);
|
return default;
|
||||||
|
|
||||||
byte value;
|
byte value;
|
||||||
if (byte.TryParse(Current, out value))
|
if (byte.TryParse(Current, out value))
|
||||||
return value;
|
return value;
|
||||||
|
|
||||||
return default(byte);
|
return default;
|
||||||
}
|
}
|
||||||
|
|
||||||
public sbyte NextSByte(string delimiters = " ")
|
public sbyte NextSByte(string delimiters = " ")
|
||||||
{
|
{
|
||||||
if (!MoveNext(delimiters))
|
if (!MoveNext(delimiters))
|
||||||
return default(sbyte);
|
return default;
|
||||||
|
|
||||||
sbyte value;
|
sbyte value;
|
||||||
if (sbyte.TryParse(Current, out value))
|
if (sbyte.TryParse(Current, out value))
|
||||||
return value;
|
return value;
|
||||||
|
|
||||||
return default(sbyte);
|
return default;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ushort NextUInt16(string delimiters = " ")
|
public ushort NextUInt16(string delimiters = " ")
|
||||||
{
|
{
|
||||||
if (!MoveNext(delimiters))
|
if (!MoveNext(delimiters))
|
||||||
return default(ushort);
|
return default;
|
||||||
|
|
||||||
ushort value;
|
ushort value;
|
||||||
if (ushort.TryParse(Current, out value))
|
if (ushort.TryParse(Current, out value))
|
||||||
return value;
|
return value;
|
||||||
|
|
||||||
return default(ushort);
|
return default;
|
||||||
}
|
}
|
||||||
|
|
||||||
public short NextInt16(string delimiters = " ")
|
public short NextInt16(string delimiters = " ")
|
||||||
{
|
{
|
||||||
if (!MoveNext(delimiters))
|
if (!MoveNext(delimiters))
|
||||||
return default(short);
|
return default;
|
||||||
|
|
||||||
short value;
|
short value;
|
||||||
if (short.TryParse(Current, out value))
|
if (short.TryParse(Current, out value))
|
||||||
return value;
|
return value;
|
||||||
|
|
||||||
return default(short);
|
return default;
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint NextUInt32(string delimiters = " ")
|
public uint NextUInt32(string delimiters = " ")
|
||||||
{
|
{
|
||||||
if (!MoveNext(delimiters))
|
if (!MoveNext(delimiters))
|
||||||
return default(uint);
|
return default;
|
||||||
|
|
||||||
uint value;
|
uint value;
|
||||||
if (uint.TryParse(Current, out value))
|
if (uint.TryParse(Current, out value))
|
||||||
return value;
|
return value;
|
||||||
|
|
||||||
return default(uint);
|
return default;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int NextInt32(string delimiters = " ")
|
public int NextInt32(string delimiters = " ")
|
||||||
{
|
{
|
||||||
if (!MoveNext(delimiters))
|
if (!MoveNext(delimiters))
|
||||||
return default(int);
|
return default;
|
||||||
|
|
||||||
int value;
|
int value;
|
||||||
if (int.TryParse(Current, out value))
|
if (int.TryParse(Current, out value))
|
||||||
return value;
|
return value;
|
||||||
|
|
||||||
return default(int);
|
return default;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ulong NextUInt64(string delimiters = " ")
|
public ulong NextUInt64(string delimiters = " ")
|
||||||
{
|
{
|
||||||
if (!MoveNext(delimiters))
|
if (!MoveNext(delimiters))
|
||||||
return default(ulong);
|
return default;
|
||||||
|
|
||||||
ulong value;
|
ulong value;
|
||||||
if (ulong.TryParse(Current, out value))
|
if (ulong.TryParse(Current, out value))
|
||||||
return value;
|
return value;
|
||||||
|
|
||||||
return default(ulong);
|
return default;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long NextInt64(string delimiters = " ")
|
public long NextInt64(string delimiters = " ")
|
||||||
{
|
{
|
||||||
if (!MoveNext(delimiters))
|
if (!MoveNext(delimiters))
|
||||||
return default(long);
|
return default;
|
||||||
|
|
||||||
long value;
|
long value;
|
||||||
if (long.TryParse(Current, out value))
|
if (long.TryParse(Current, out value))
|
||||||
return value;
|
return value;
|
||||||
|
|
||||||
return default(long);
|
return default;
|
||||||
}
|
}
|
||||||
|
|
||||||
public float NextSingle(string delimiters = " ")
|
public float NextSingle(string delimiters = " ")
|
||||||
{
|
{
|
||||||
if (!MoveNext(delimiters))
|
if (!MoveNext(delimiters))
|
||||||
return default(float);
|
return default;
|
||||||
|
|
||||||
float value;
|
float value;
|
||||||
if (float.TryParse(Current, out value))
|
if (float.TryParse(Current, out value))
|
||||||
return value;
|
return value;
|
||||||
|
|
||||||
return default(float);
|
return default;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double NextDouble(string delimiters = " ")
|
public double NextDouble(string delimiters = " ")
|
||||||
{
|
{
|
||||||
if (!MoveNext(delimiters))
|
if (!MoveNext(delimiters))
|
||||||
return default(double);
|
return default;
|
||||||
|
|
||||||
double value;
|
double value;
|
||||||
if (double.TryParse(Current, out value))
|
if (double.TryParse(Current, out value))
|
||||||
return value;
|
return value;
|
||||||
|
|
||||||
return default(double);
|
return default;
|
||||||
}
|
}
|
||||||
|
|
||||||
public decimal NextDecimal(string delimiters = " ")
|
public decimal NextDecimal(string delimiters = " ")
|
||||||
{
|
{
|
||||||
if (!MoveNext(delimiters))
|
if (!MoveNext(delimiters))
|
||||||
return default(decimal);
|
return default;
|
||||||
|
|
||||||
decimal value;
|
decimal value;
|
||||||
if (decimal.TryParse(Current, out value))
|
if (decimal.TryParse(Current, out value))
|
||||||
return value;
|
return value;
|
||||||
|
|
||||||
return default(decimal);
|
return default;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AlignToNextChar()
|
public void AlignToNextChar()
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ namespace Framework.Threading
|
|||||||
|
|
||||||
public bool Pop(out T value)
|
public bool Pop(out T value)
|
||||||
{
|
{
|
||||||
value = default(T);
|
value = default;
|
||||||
lock (_queueLock)
|
lock (_queueLock)
|
||||||
{
|
{
|
||||||
if (_queue.Count == 0 || _shutdown)
|
if (_queue.Count == 0 || _shutdown)
|
||||||
@@ -61,7 +61,7 @@ namespace Framework.Threading
|
|||||||
|
|
||||||
public void WaitAndPop(out T value)
|
public void WaitAndPop(out T value)
|
||||||
{
|
{
|
||||||
value = default(T);
|
value = default;
|
||||||
lock (_queueLock)
|
lock (_queueLock)
|
||||||
{
|
{
|
||||||
while (_queue.Count == 0 && !_shutdown)
|
while (_queue.Count == 0 && !_shutdown)
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ namespace System.Collections.Generic
|
|||||||
/// <returns>The value, or the default value of the element type.</returns>
|
/// <returns>The value, or the default value of the element type.</returns>
|
||||||
public static T LookupByIndex<T>(this IList<T> list, int index)
|
public static T LookupByIndex<T>(this IList<T> list, int index)
|
||||||
{
|
{
|
||||||
return index >= list.Count ? default(T) : list[index];
|
return index >= list.Count ? default : list[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -57,17 +57,17 @@ namespace System.Collections.Generic
|
|||||||
{
|
{
|
||||||
TValue val;
|
TValue val;
|
||||||
TKey newkey = (TKey)Convert.ChangeType(key, typeof(TKey));
|
TKey newkey = (TKey)Convert.ChangeType(key, typeof(TKey));
|
||||||
return dict.TryGetValue(newkey, out val) ? val : default(TValue);
|
return dict.TryGetValue(newkey, out val) ? val : default;
|
||||||
}
|
}
|
||||||
public static TValue LookupByKey<TKey, TValue>(this IDictionary<TKey, TValue> dict, TKey key)
|
public static TValue LookupByKey<TKey, TValue>(this IDictionary<TKey, TValue> dict, TKey key)
|
||||||
{
|
{
|
||||||
TValue val;
|
TValue val;
|
||||||
return dict.TryGetValue(key, out val) ? val : default(TValue);
|
return dict.TryGetValue(key, out val) ? val : default;
|
||||||
}
|
}
|
||||||
public static KeyValuePair<TKey, TValue> Find<TKey, TValue>(this IDictionary<TKey, TValue> dict, TKey key)
|
public static KeyValuePair<TKey, TValue> Find<TKey, TValue>(this IDictionary<TKey, TValue> dict, TKey key)
|
||||||
{
|
{
|
||||||
if (!dict.ContainsKey(key))
|
if (!dict.ContainsKey(key))
|
||||||
return default(KeyValuePair<TKey, TValue>);
|
return default;
|
||||||
|
|
||||||
return new KeyValuePair<TKey, TValue>(key, dict[key]);
|
return new KeyValuePair<TKey, TValue>(key, dict[key]);
|
||||||
}
|
}
|
||||||
@@ -106,7 +106,7 @@ namespace System.Collections.Generic
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (var i = list.Count; i < size; ++i)
|
for (var i = list.Count; i < size; ++i)
|
||||||
list.Add(default(T));
|
list.Add(default);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -161,7 +161,7 @@ namespace System.Collections.Generic
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return default(T);
|
return default;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<TSource> Intersect<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second, Func<TSource, TSource, bool> comparer)
|
public static IEnumerable<TSource> Intersect<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second, Func<TSource, TSource, bool> comparer)
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ namespace System
|
|||||||
{
|
{
|
||||||
T value;
|
T value;
|
||||||
if (!Enum.TryParse(str, out value))
|
if (!Enum.TryParse(str, out value))
|
||||||
return default(T);
|
return default;
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -492,6 +492,7 @@ namespace Game.AI
|
|||||||
|
|
||||||
protected EventMap _events = new EventMap();
|
protected EventMap _events = new EventMap();
|
||||||
protected TaskScheduler _scheduler = new TaskScheduler();
|
protected TaskScheduler _scheduler = new TaskScheduler();
|
||||||
|
protected InstanceScript _instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct AISpellInfoType
|
public struct AISpellInfoType
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ namespace Game.AI
|
|||||||
|
|
||||||
public class NullCreatureAI : CreatureAI
|
public class NullCreatureAI : CreatureAI
|
||||||
{
|
{
|
||||||
public NullCreatureAI(Creature c) : base(c)
|
public NullCreatureAI(Creature creature) : base(creature)
|
||||||
{
|
{
|
||||||
me.SetReactState(ReactStates.Passive);
|
me.SetReactState(ReactStates.Passive);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ namespace Game.AI
|
|||||||
/// Select the best target (in <targetType> order) satisfying <predicate> from the threat list.
|
/// Select the best target (in <targetType> order) satisfying <predicate> from the threat list.
|
||||||
/// If <offset> is nonzero, the first <offset> entries in <targetType> order (or MAXTHREAT order, if <targetType> is RANDOM) are skipped.
|
/// If <offset> is nonzero, the first <offset> entries in <targetType> order (or MAXTHREAT order, if <targetType> is RANDOM) are skipped.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Unit SelectTarget(SelectAggroTarget targetType, uint offset, ISelector selector)
|
public Unit SelectTarget(SelectAggroTarget targetType, uint offset, ICheck<Unit> selector)
|
||||||
{
|
{
|
||||||
ThreatManager mgr = GetThreatManager();
|
ThreatManager mgr = GetThreatManager();
|
||||||
// shortcut: if we ignore the first <offset> elements, and there are at most <offset> elements, then we ignore ALL elements
|
// shortcut: if we ignore the first <offset> elements, and there are at most <offset> elements, then we ignore ALL elements
|
||||||
@@ -170,7 +170,7 @@ namespace Game.AI
|
|||||||
/// - Does not have aura with ID -<aura> (if aura < 0)
|
/// - Does not have aura with ID -<aura> (if aura < 0)
|
||||||
/// The resulting targets are stored in <targetList> (which is cleared first).
|
/// The resulting targets are stored in <targetList> (which is cleared first).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<Unit> SelectTargetList(uint num, SelectAggroTarget targetType, uint offset, float dist, bool playerOnly, bool withTank, int aura = 0)
|
public List<Unit> SelectTargetList(uint num, SelectAggroTarget targetType, uint offset = 0, float dist = 0f, bool playerOnly = false, bool withTank = true, int aura = 0)
|
||||||
{
|
{
|
||||||
return SelectTargetList(num, targetType, offset, new DefaultTargetSelector(me, dist, playerOnly, withTank, aura));
|
return SelectTargetList(num, targetType, offset, new DefaultTargetSelector(me, dist, playerOnly, withTank, aura));
|
||||||
}
|
}
|
||||||
@@ -179,7 +179,7 @@ namespace Game.AI
|
|||||||
/// Select the best (up to) <num> targets (in <targetType> order) satisfying <predicate> from the threat list and stores them in <targetList> (which is cleared first).
|
/// Select the best (up to) <num> targets (in <targetType> order) satisfying <predicate> from the threat list and stores them in <targetList> (which is cleared first).
|
||||||
/// If <offset> is nonzero, the first <offset> entries in <targetType> order (or MAXTHREAT order, if <targetType> is RANDOM) are skipped.
|
/// If <offset> is nonzero, the first <offset> entries in <targetType> order (or MAXTHREAT order, if <targetType> is RANDOM) are skipped.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<Unit> SelectTargetList(uint num, SelectAggroTarget targetType, uint offset, ISelector selector)
|
public List<Unit> SelectTargetList(uint num, SelectAggroTarget targetType, uint offset, ICheck<Unit> selector)
|
||||||
{
|
{
|
||||||
var targetList = new List<Unit>();
|
var targetList = new List<Unit>();
|
||||||
|
|
||||||
@@ -238,7 +238,7 @@ namespace Game.AI
|
|||||||
}
|
}
|
||||||
|
|
||||||
// then finally filter by predicate
|
// then finally filter by predicate
|
||||||
targetList.RemoveAll(target => { return !selector.Check(target); });
|
targetList.RemoveAll(unit => !selector.Invoke(unit));
|
||||||
|
|
||||||
if (targetList.Count <= num)
|
if (targetList.Count <= num)
|
||||||
return targetList;
|
return targetList;
|
||||||
@@ -289,7 +289,7 @@ namespace Game.AI
|
|||||||
|
|
||||||
DefaultTargetSelector targetSelector = new DefaultTargetSelector(me, range, playerOnly, true, -(int)spellId);
|
DefaultTargetSelector targetSelector = new DefaultTargetSelector(me, range, playerOnly, true, -(int)spellId);
|
||||||
if (!spellInfo.HasAuraInterruptFlag(SpellAuraInterruptFlags.NotVictim)
|
if (!spellInfo.HasAuraInterruptFlag(SpellAuraInterruptFlags.NotVictim)
|
||||||
&& targetSelector.Check(me.GetVictim()))
|
&& targetSelector.Invoke(me.GetVictim()))
|
||||||
target = me.GetVictim();
|
target = me.GetVictim();
|
||||||
else
|
else
|
||||||
target = SelectTarget(SelectAggroTarget.Random, 0, targetSelector);
|
target = SelectTarget(SelectAggroTarget.Random, 0, targetSelector);
|
||||||
@@ -549,13 +549,8 @@ namespace Game.AI
|
|||||||
MinDistance // prefer targets closer to us
|
MinDistance // prefer targets closer to us
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface ISelector
|
|
||||||
{
|
|
||||||
bool Check(Unit target);
|
|
||||||
}
|
|
||||||
|
|
||||||
// default predicate function to select target based on distance, player and/or aura criteria
|
// default predicate function to select target based on distance, player and/or aura criteria
|
||||||
public class DefaultTargetSelector : ISelector
|
public class DefaultTargetSelector : ICheck<Unit>
|
||||||
{
|
{
|
||||||
Unit me;
|
Unit me;
|
||||||
float m_dist;
|
float m_dist;
|
||||||
@@ -577,7 +572,7 @@ namespace Game.AI
|
|||||||
m_aura = aura;
|
m_aura = aura;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Check(Unit target)
|
public bool Invoke(Unit target)
|
||||||
{
|
{
|
||||||
if (me == null)
|
if (me == null)
|
||||||
return false;
|
return false;
|
||||||
@@ -611,13 +606,13 @@ namespace Game.AI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Target selector for spell casts checking range, auras and attributes
|
// Target selector for spell casts checking range, auras and attributes
|
||||||
// todo Add more checks from Spell.CheckCast
|
// todo Add more checks from Spell.CheckCast
|
||||||
public class SpellTargetSelector : ISelector
|
public class SpellTargetSelector : ICheck<Unit>
|
||||||
{
|
{
|
||||||
public SpellTargetSelector(Unit caster, uint spellId)
|
public SpellTargetSelector(Unit caster, uint spellId)
|
||||||
{
|
{
|
||||||
@@ -627,7 +622,7 @@ namespace Game.AI
|
|||||||
Cypher.Assert(_spellInfo != null);
|
Cypher.Assert(_spellInfo != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Check(Unit target)
|
public bool Invoke(Unit target)
|
||||||
{
|
{
|
||||||
if (target == null)
|
if (target == null)
|
||||||
return false;
|
return false;
|
||||||
@@ -698,7 +693,7 @@ namespace Game.AI
|
|||||||
// Very simple target selector, will just skip main target
|
// Very simple target selector, will just skip main target
|
||||||
// NOTE: When passing to UnitAI.SelectTarget remember to use 0 as position for random selection
|
// NOTE: When passing to UnitAI.SelectTarget remember to use 0 as position for random selection
|
||||||
// because tank will not be in the temporary list
|
// because tank will not be in the temporary list
|
||||||
public class NonTankTargetSelector : ISelector
|
public class NonTankTargetSelector : ICheck<Unit>
|
||||||
{
|
{
|
||||||
public NonTankTargetSelector(Unit source, bool playerOnly = true)
|
public NonTankTargetSelector(Unit source, bool playerOnly = true)
|
||||||
{
|
{
|
||||||
@@ -706,7 +701,7 @@ namespace Game.AI
|
|||||||
_playerOnly = playerOnly;
|
_playerOnly = playerOnly;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Check(Unit target)
|
public bool Invoke(Unit target)
|
||||||
{
|
{
|
||||||
if (target == null)
|
if (target == null)
|
||||||
return false;
|
return false;
|
||||||
@@ -726,7 +721,7 @@ namespace Game.AI
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Simple selector for units using mana
|
// Simple selector for units using mana
|
||||||
class PowerUsersSelector : ISelector
|
class PowerUsersSelector : ICheck<Unit>
|
||||||
{
|
{
|
||||||
public PowerUsersSelector(Unit unit, PowerType power, float dist, bool playerOnly)
|
public PowerUsersSelector(Unit unit, PowerType power, float dist, bool playerOnly)
|
||||||
{
|
{
|
||||||
@@ -736,7 +731,7 @@ namespace Game.AI
|
|||||||
_playerOnly = playerOnly;
|
_playerOnly = playerOnly;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Check(Unit target)
|
public bool Invoke(Unit target)
|
||||||
{
|
{
|
||||||
if (_me == null || target == null)
|
if (_me == null || target == null)
|
||||||
return false;
|
return false;
|
||||||
@@ -762,7 +757,7 @@ namespace Game.AI
|
|||||||
bool _playerOnly;
|
bool _playerOnly;
|
||||||
}
|
}
|
||||||
|
|
||||||
class FarthestTargetSelector : ISelector
|
class FarthestTargetSelector : ICheck<Unit>
|
||||||
{
|
{
|
||||||
public FarthestTargetSelector(Unit unit, float dist, bool playerOnly, bool inLos)
|
public FarthestTargetSelector(Unit unit, float dist, bool playerOnly, bool inLos)
|
||||||
{
|
{
|
||||||
@@ -772,7 +767,7 @@ namespace Game.AI
|
|||||||
_inLos = inLos;
|
_inLos = inLos;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Check(Unit target)
|
public bool Invoke(Unit target)
|
||||||
{
|
{
|
||||||
if (_me == null || target == null)
|
if (_me == null || target == null)
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -1366,7 +1366,7 @@ namespace Game.AI
|
|||||||
bool _isFollowing;
|
bool _isFollowing;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ValidTargetSelectPredicate : ISelector
|
struct ValidTargetSelectPredicate : ICheck<Unit>
|
||||||
{
|
{
|
||||||
UnitAI _ai;
|
UnitAI _ai;
|
||||||
|
|
||||||
@@ -1375,7 +1375,7 @@ namespace Game.AI
|
|||||||
_ai = ai;
|
_ai = ai;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Check(Unit target)
|
public bool Invoke(Unit target)
|
||||||
{
|
{
|
||||||
return _ai.CanAIAttack(target);
|
return _ai.CanAIAttack(target);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ namespace Game.AI
|
|||||||
_difficulty = me.GetMap().GetDifficultyID();
|
_difficulty = me.GetMap().GetDifficultyID();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AttackStartNoMove(Unit target)
|
public void AttackStartNoMove(Unit target)
|
||||||
{
|
{
|
||||||
if (target == null)
|
if (target == null)
|
||||||
return;
|
return;
|
||||||
@@ -150,7 +150,7 @@ namespace Game.AI
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="victim"></param>
|
/// <param name="victim"></param>
|
||||||
/// <param name="who"></param>
|
/// <param name="who"></param>
|
||||||
void ResetThreat(Unit victim, Unit who)
|
public void ResetThreat(Unit victim, Unit who)
|
||||||
{
|
{
|
||||||
if (!victim)
|
if (!victim)
|
||||||
return;
|
return;
|
||||||
@@ -189,7 +189,7 @@ namespace Game.AI
|
|||||||
|
|
||||||
return who.GetThreatManager().GetThreat(victim);
|
return who.GetThreatManager().GetThreat(victim);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Spawns a creature relative to me
|
//Spawns a creature relative to me
|
||||||
public Creature DoSpawnCreature(uint entry, float offsetX, float offsetY, float offsetZ, float angle, TempSummonType type, uint despawntime)
|
public Creature DoSpawnCreature(uint entry, float offsetX, float offsetY, float offsetZ, float angle, TempSummonType type, uint despawntime)
|
||||||
{
|
{
|
||||||
@@ -261,7 +261,7 @@ namespace Game.AI
|
|||||||
return apSpell[RandomHelper.IRand(0, (int)(spellCount - 1))];
|
return apSpell[RandomHelper.IRand(0, (int)(spellCount - 1))];
|
||||||
}
|
}
|
||||||
|
|
||||||
void DoTeleportTo(float x, float y, float z, uint time = 0)
|
public void DoTeleportTo(float x, float y, float z, uint time = 0)
|
||||||
{
|
{
|
||||||
me.Relocate(x, y, z);
|
me.Relocate(x, y, z);
|
||||||
float speed = me.GetDistance(x, y, z) / (time * 0.001f);
|
float speed = me.GetDistance(x, y, z) / (time * 0.001f);
|
||||||
@@ -274,7 +274,7 @@ namespace Game.AI
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Teleports a player without dropping threat (only teleports to same map)
|
//Teleports a player without dropping threat (only teleports to same map)
|
||||||
void DoTeleportPlayer(Unit unit, float x, float y, float z, float o)
|
public void DoTeleportPlayer(Unit unit, float x, float y, float z, float o)
|
||||||
{
|
{
|
||||||
if (unit == null)
|
if (unit == null)
|
||||||
return;
|
return;
|
||||||
@@ -527,7 +527,7 @@ namespace Game.AI
|
|||||||
ScheduleTasks();
|
ScheduleTasks();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeleportCheaters()
|
public void TeleportCheaters()
|
||||||
{
|
{
|
||||||
float x, y, z;
|
float x, y, z;
|
||||||
me.GetPosition(out x, out y, out z);
|
me.GetPosition(out x, out y, out z);
|
||||||
@@ -748,6 +748,11 @@ namespace Game.AI
|
|||||||
|
|
||||||
public void Despawn(Creature summon) { Remove(summon.GetGUID()); }
|
public void Despawn(Creature summon) { Remove(summon.GetGUID()); }
|
||||||
|
|
||||||
|
public void DespawnIf(ICheck<ObjectGuid> predicate)
|
||||||
|
{
|
||||||
|
this.RemoveAll(predicate);
|
||||||
|
}
|
||||||
|
|
||||||
public void DespawnIf(Predicate<ObjectGuid> predicate)
|
public void DespawnIf(Predicate<ObjectGuid> predicate)
|
||||||
{
|
{
|
||||||
RemoveAll(predicate);
|
RemoveAll(predicate);
|
||||||
@@ -762,6 +767,14 @@ namespace Game.AI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void DoAction(int info, ICheck<ObjectGuid> predicate, ushort max = 0)
|
||||||
|
{
|
||||||
|
// We need to use a copy of SummonList here, otherwise original SummonList would be modified
|
||||||
|
List<ObjectGuid> listCopy = new List<ObjectGuid>(this);
|
||||||
|
listCopy.RandomResize(predicate.Invoke, max);
|
||||||
|
DoActionImpl(info, listCopy);
|
||||||
|
}
|
||||||
|
|
||||||
public void DoAction(int info, Predicate<ObjectGuid> predicate, ushort max = 0)
|
public void DoAction(int info, Predicate<ObjectGuid> predicate, ushort max = 0)
|
||||||
{
|
{
|
||||||
// We need to use a copy of SummonList here, otherwise original SummonList would be modified
|
// We need to use a copy of SummonList here, otherwise original SummonList would be modified
|
||||||
@@ -794,4 +807,16 @@ namespace Game.AI
|
|||||||
|
|
||||||
Creature me;
|
Creature me;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class EntryCheckPredicate : ICheck<ObjectGuid>
|
||||||
|
{
|
||||||
|
public EntryCheckPredicate(uint entry)
|
||||||
|
{
|
||||||
|
_entry = entry;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Invoke(ObjectGuid guid) { return guid.GetEntry() == _entry; }
|
||||||
|
|
||||||
|
uint _entry;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ namespace Game.AI
|
|||||||
_activeAttacker = true;
|
_activeAttacker = true;
|
||||||
_despawnAtEnd = true;
|
_despawnAtEnd = true;
|
||||||
_despawnAtFar = true;
|
_despawnAtFar = true;
|
||||||
|
|
||||||
|
_path = new WaypointPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player GetPlayerForEscort()
|
public Player GetPlayerForEscort()
|
||||||
|
|||||||
@@ -117,6 +117,7 @@ namespace Game.AI
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_path = new WaypointPath();
|
||||||
_path.id = path.id;
|
_path.id = path.id;
|
||||||
_path.nodes = path.nodes;
|
_path.nodes = path.nodes;
|
||||||
foreach (WaypointNode waypoint in _path.nodes)
|
foreach (WaypointNode waypoint in _path.nodes)
|
||||||
|
|||||||
@@ -385,6 +385,8 @@ namespace Game.Combat
|
|||||||
return iUnitGuid;
|
return iUnitGuid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Unit GetVictim() { return GetTarget(); }
|
||||||
|
|
||||||
public new HostileReference Next() { return (HostileReference)base.Next(); }
|
public new HostileReference Next() { return (HostileReference)base.Next(); }
|
||||||
|
|
||||||
float iThreat;
|
float iThreat;
|
||||||
|
|||||||
@@ -474,8 +474,8 @@ namespace Game.Entities
|
|||||||
uint visualStateAfter = (m_goValue.Transport.StateUpdateTimer / 20000) & 1;
|
uint visualStateAfter = (m_goValue.Transport.StateUpdateTimer / 20000) & 1;
|
||||||
if (visualStateBefore != visualStateAfter)
|
if (visualStateBefore != visualStateAfter)
|
||||||
{
|
{
|
||||||
m_gameObjectData.ModifyValue(m_gameObjectData.Level);
|
m_values.ModifyValue(m_gameObjectData).ModifyValue(m_gameObjectData.Level);
|
||||||
m_gameObjectData.ModifyValue(m_gameObjectData.State);
|
m_values.ModifyValue(m_gameObjectData).ModifyValue(m_gameObjectData.State);
|
||||||
ForceUpdateFieldChange();
|
ForceUpdateFieldChange();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -285,7 +285,7 @@ namespace Game.Entities
|
|||||||
float verticalDelta = GetPositionZ() - center.GetPositionZ();
|
float verticalDelta = GetPositionZ() - center.GetPositionZ();
|
||||||
return IsInDist2d(center, radius) && Math.Abs(verticalDelta) <= height;
|
return IsInDist2d(center, radius) && Math.Abs(verticalDelta) <= height;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool HasInArc(float arc, Position obj, float border = 2.0f)
|
public bool HasInArc(float arc, Position obj, float border = 2.0f)
|
||||||
{
|
{
|
||||||
// always have self in arc
|
// always have self in arc
|
||||||
|
|||||||
@@ -1504,6 +1504,11 @@ namespace Game.Entities
|
|||||||
return summon;
|
return summon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SummonCreatureGroup(byte group)
|
||||||
|
{
|
||||||
|
SummonCreatureGroup(group, out _);
|
||||||
|
}
|
||||||
|
|
||||||
public void SummonCreatureGroup(byte group, out List<TempSummon> list)
|
public void SummonCreatureGroup(byte group, out List<TempSummon> list)
|
||||||
{
|
{
|
||||||
Cypher.Assert((IsTypeId(TypeId.GameObject) || IsTypeId(TypeId.Unit)), "Only GOs and creatures can summon npc groups!");
|
Cypher.Assert((IsTypeId(TypeId.GameObject) || IsTypeId(TypeId.Unit)), "Only GOs and creatures can summon npc groups!");
|
||||||
@@ -2028,12 +2033,11 @@ namespace Game.Entities
|
|||||||
UpdateGroundPositionZ(rand_x, rand_y, ref rand_z); // update to LOS height if available
|
UpdateGroundPositionZ(rand_x, rand_y, ref rand_z); // update to LOS height if available
|
||||||
}
|
}
|
||||||
|
|
||||||
public void GetRandomPoint(Position srcPos, float distance, out Position pos)
|
public Position GetRandomPoint(Position srcPos, float distance)
|
||||||
{
|
{
|
||||||
pos = new Position();
|
|
||||||
float x, y, z;
|
float x, y, z;
|
||||||
GetRandomPoint(srcPos, distance, out x, out y, out z);
|
GetRandomPoint(srcPos, distance, out x, out y, out z);
|
||||||
pos.Relocate(x, y, z, GetOrientation());
|
return new Position(x, y, z, GetOrientation());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateGroundPositionZ(float x, float y, ref float z)
|
public void UpdateGroundPositionZ(float x, float y, ref float z)
|
||||||
|
|||||||
@@ -7692,14 +7692,17 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Helpers
|
//Helpers
|
||||||
public void ADD_GOSSIP_ITEM(GossipOptionIcon icon, string message, uint sender, uint action) { PlayerTalkClass.GetGossipMenu().AddMenuItem(-1, icon, message, sender, action, "", 0); }
|
public void AddGossipItem(GossipOptionIcon icon, string message, uint sender, uint action) { PlayerTalkClass.GetGossipMenu().AddMenuItem(-1, icon, message, sender, action, "", 0); }
|
||||||
public void ADD_GOSSIP_ITEM_DB(uint menuId, uint menuItemId, uint sender, uint action) { PlayerTalkClass.GetGossipMenu().AddMenuItem(menuId, menuItemId, sender, action); }
|
public void ADD_GOSSIP_ITEM_DB(uint menuId, uint menuItemId, uint sender, uint action) { PlayerTalkClass.GetGossipMenu().AddMenuItem(menuId, menuItemId, sender, action); }
|
||||||
public void ADD_GOSSIP_ITEM_EXTENDED(GossipOptionIcon icon, string message, uint sender, uint action, string boxmessage, uint boxmoney, bool coded) { PlayerTalkClass.GetGossipMenu().AddMenuItem(-1, icon, message, sender, action, boxmessage, boxmoney, coded); }
|
public void ADD_GOSSIP_ITEM_EXTENDED(GossipOptionIcon icon, string message, uint sender, uint action, string boxmessage, uint boxmoney, bool coded) { PlayerTalkClass.GetGossipMenu().AddMenuItem(-1, icon, message, sender, action, boxmessage, boxmoney, coded); }
|
||||||
|
|
||||||
// This fuction Sends the current menu to show to client, a - NPCTEXTID(uint32), b - npc guid(uint64)
|
// This fuction Sends the current menu to show to client, a - NPCTEXTID(uint32), b - npc guid(uint64)
|
||||||
public void SEND_GOSSIP_MENU(uint titleId, ObjectGuid objGUID) { PlayerTalkClass.SendGossipMenu(titleId, objGUID); }
|
public void SendGossipMenu(uint titleId, ObjectGuid objGUID) { PlayerTalkClass.SendGossipMenu(titleId, objGUID); }
|
||||||
|
|
||||||
// Closes the Menu
|
// Closes the Menu
|
||||||
public void CLOSE_GOSSIP_MENU() { PlayerTalkClass.SendCloseGossip(); }
|
public void CloseGossipMenu() { PlayerTalkClass.SendCloseGossip(); }
|
||||||
|
|
||||||
|
//Clears the Menu
|
||||||
|
public void ClearGossipMenu() { PlayerTalkClass.ClearMenus(); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -514,9 +514,9 @@ namespace Game.Entities
|
|||||||
public bool HealthBelowPct(int pct) { return GetHealth() < CountPctFromMaxHealth(pct); }
|
public bool HealthBelowPct(int pct) { return GetHealth() < CountPctFromMaxHealth(pct); }
|
||||||
public bool HealthBelowPctDamaged(int pct, uint damage) { return GetHealth() - damage < CountPctFromMaxHealth(pct); }
|
public bool HealthBelowPctDamaged(int pct, uint damage) { return GetHealth() - damage < CountPctFromMaxHealth(pct); }
|
||||||
public bool HealthAbovePct(int pct) { return GetHealth() > CountPctFromMaxHealth(pct); }
|
public bool HealthAbovePct(int pct) { return GetHealth() > CountPctFromMaxHealth(pct); }
|
||||||
bool HealthAbovePctHealed(int pct, uint heal) { return GetHealth() + heal > CountPctFromMaxHealth(pct); }
|
public bool HealthAbovePctHealed(int pct, uint heal) { return GetHealth() + heal > CountPctFromMaxHealth(pct); }
|
||||||
public ulong CountPctFromMaxHealth(int pct) { return MathFunctions.CalculatePct(GetMaxHealth(), pct); }
|
public ulong CountPctFromMaxHealth(int pct) { return MathFunctions.CalculatePct(GetMaxHealth(), pct); }
|
||||||
ulong CountPctFromCurHealth(int pct) { return MathFunctions.CalculatePct(GetHealth(), pct); }
|
public ulong CountPctFromCurHealth(int pct) { return MathFunctions.CalculatePct(GetHealth(), pct); }
|
||||||
|
|
||||||
public virtual float GetHealthMultiplierForTarget(WorldObject target) { return 1.0f; }
|
public virtual float GetHealthMultiplierForTarget(WorldObject target) { return 1.0f; }
|
||||||
public virtual float GetDamageMultiplierForTarget(WorldObject target) { return 1.0f; }
|
public virtual float GetDamageMultiplierForTarget(WorldObject target) { return 1.0f; }
|
||||||
|
|||||||
@@ -509,7 +509,7 @@ namespace Game.Entities
|
|||||||
public Unit GetDispeller() { return _dispellerUnit; }
|
public Unit GetDispeller() { return _dispellerUnit; }
|
||||||
uint GetDispellerSpellId() { return _dispellerSpell; }
|
uint GetDispellerSpellId() { return _dispellerSpell; }
|
||||||
public byte GetRemovedCharges() { return _chargesRemoved; }
|
public byte GetRemovedCharges() { return _chargesRemoved; }
|
||||||
void SetRemovedCharges(byte amount)
|
public void SetRemovedCharges(byte amount)
|
||||||
{
|
{
|
||||||
_chargesRemoved = amount;
|
_chargesRemoved = amount;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ namespace Game.Entities
|
|||||||
{
|
{
|
||||||
return m_movementInfo.HasMovementFlag(MovementFlag.Walking);
|
return m_movementInfo.HasMovementFlag(MovementFlag.Walking);
|
||||||
}
|
}
|
||||||
bool IsHovering() { return m_movementInfo.HasMovementFlag(MovementFlag.Hover); }
|
public bool IsHovering() { return m_movementInfo.HasMovementFlag(MovementFlag.Hover); }
|
||||||
public bool IsStopped() { return !HasUnitState(UnitState.Moving); }
|
public bool IsStopped() { return !HasUnitState(UnitState.Moving); }
|
||||||
public bool IsMoving() { return m_movementInfo.HasMovementFlag(MovementFlag.MaskMoving); }
|
public bool IsMoving() { return m_movementInfo.HasMovementFlag(MovementFlag.MaskMoving); }
|
||||||
public bool IsTurning() { return m_movementInfo.HasMovementFlag(MovementFlag.MaskTurning); }
|
public bool IsTurning() { return m_movementInfo.HasMovementFlag(MovementFlag.MaskTurning); }
|
||||||
|
|||||||
@@ -1113,7 +1113,7 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
|
|
||||||
public UnitAI GetAI() { return i_AI; }
|
public UnitAI GetAI() { return i_AI; }
|
||||||
void SetAI(UnitAI newAI) { i_AI = newAI; }
|
public void SetAI(UnitAI newAI) { i_AI = newAI; }
|
||||||
|
|
||||||
public bool IsPossessing()
|
public bool IsPossessing()
|
||||||
{
|
{
|
||||||
@@ -2351,7 +2351,7 @@ namespace Game.Entities
|
|||||||
else
|
else
|
||||||
return ToCreature().GetCreatureTemplate().CreatureType;
|
return ToCreature().GetCreatureTemplate().CreatureType;
|
||||||
}
|
}
|
||||||
Player GetAffectingPlayer()
|
public Player GetAffectingPlayer()
|
||||||
{
|
{
|
||||||
if (GetCharmerOrOwnerGUID().IsEmpty())
|
if (GetCharmerOrOwnerGUID().IsEmpty())
|
||||||
return IsTypeId(TypeId.Player) ? ToPlayer() : null;
|
return IsTypeId(TypeId.Player) ? ToPlayer() : null;
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ using Game.Networking.Packets;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Framework.Collections;
|
using Framework.Collections;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace Game
|
namespace Game
|
||||||
{
|
{
|
||||||
@@ -1559,7 +1560,7 @@ namespace Game
|
|||||||
{
|
{
|
||||||
GameEventAIHookWorker worker = new GameEventAIHookWorker(event_id, activate);
|
GameEventAIHookWorker worker = new GameEventAIHookWorker(event_id, activate);
|
||||||
var visitor = new Visitor(worker, GridMapTypeMask.None);
|
var visitor = new Visitor(worker, GridMapTypeMask.None);
|
||||||
visitor.Visit(map.GetObjectsStore());
|
visitor.Visit(map.GetObjectsStore().Values.ToList());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ namespace Game.Garrisons
|
|||||||
Log.outDebug(LogFilter.Maps, "{0} GameObjects and {1} Creatures loaded for grid {2} on map {3}", i_gameObjects, i_creatures, i_grid.GetGridId(), i_map.GetId());
|
Log.outDebug(LogFilter.Maps, "{0} GameObjects and {1} Creatures loaded for grid {2} on map {3}", i_gameObjects, i_creatures, i_grid.GetGridId(), i_map.GetId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Visit(IList<WorldObject> objs)
|
public override void Visit(IList<GameObject> objs)
|
||||||
{
|
{
|
||||||
ICollection<Garrison.Plot> plots = i_garrison.GetPlots();
|
ICollection<Garrison.Plot> plots = i_garrison.GetPlots();
|
||||||
if (!plots.Empty())
|
if (!plots.Empty())
|
||||||
@@ -131,6 +131,8 @@ namespace Game.Garrisons
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<Creature> objs) { }
|
||||||
|
|
||||||
Cell i_cell;
|
Cell i_cell;
|
||||||
Grid i_grid;
|
Grid i_grid;
|
||||||
GarrisonMap i_map;
|
GarrisonMap i_map;
|
||||||
|
|||||||
@@ -293,7 +293,7 @@ namespace Game.Maps
|
|||||||
visitor.Visit(_container.corpses);
|
visitor.Visit(_container.corpses);
|
||||||
visitor.Visit(_container.areaTriggers);
|
visitor.Visit(_container.areaTriggers);
|
||||||
visitor.Visit(_container.conversations);
|
visitor.Visit(_container.conversations);
|
||||||
visitor.Visit(_container.worldObjects);
|
visitor.Visit(_container.worldObjects.ToArray());
|
||||||
break;
|
break;
|
||||||
case GridMapTypeMask.AllWorld:
|
case GridMapTypeMask.AllWorld:
|
||||||
visitor.Visit(_objects.players);
|
visitor.Visit(_objects.players);
|
||||||
|
|||||||
+372
-140
@@ -73,8 +73,6 @@ namespace Game.Maps
|
|||||||
public void Visit(IList<Corpse> corpses) { _notifier.Visit(corpses); }
|
public void Visit(IList<Corpse> corpses) { _notifier.Visit(corpses); }
|
||||||
public void Visit(IList<Player> players) { _notifier.Visit(players); }
|
public void Visit(IList<Player> players) { _notifier.Visit(players); }
|
||||||
|
|
||||||
public void Visit(Dictionary<ObjectGuid, WorldObject> dict) { Visit(dict.Values.ToList()); }
|
|
||||||
|
|
||||||
Notifier _notifier;
|
Notifier _notifier;
|
||||||
internal GridMapTypeMask _mask;
|
internal GridMapTypeMask _mask;
|
||||||
}
|
}
|
||||||
@@ -563,11 +561,10 @@ namespace Game.Maps
|
|||||||
|
|
||||||
public override void Visit(IList<WorldObject> objs)
|
public override void Visit(IList<WorldObject> objs)
|
||||||
{
|
{
|
||||||
for (var i = 0; i < objs.Count; ++i)
|
foreach (var obj in objs)
|
||||||
{
|
{
|
||||||
var obj = objs[i];
|
|
||||||
if (obj.IsTypeId(TypeId.Player) || obj.IsTypeId(TypeId.Corpse))
|
if (obj.IsTypeId(TypeId.Player) || obj.IsTypeId(TypeId.Corpse))
|
||||||
continue;
|
return;
|
||||||
|
|
||||||
if (obj.IsInWorld)
|
if (obj.IsInWorld)
|
||||||
obj.Update(i_timeDiff);
|
obj.Update(i_timeDiff);
|
||||||
@@ -645,42 +642,85 @@ namespace Game.Maps
|
|||||||
i_do = _do;
|
i_do = _do;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Visit(IList<WorldObject> objs)
|
public override void Visit(IList<GameObject> objs)
|
||||||
{
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.GameObject))
|
||||||
|
return;
|
||||||
|
|
||||||
foreach (var obj in objs)
|
foreach (var obj in objs)
|
||||||
{
|
{
|
||||||
switch (obj.GetTypeId())
|
if (obj.IsInPhase(_searcher))
|
||||||
{
|
i_do.Invoke(obj);
|
||||||
case TypeId.GameObject:
|
}
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.GameObject))
|
}
|
||||||
return;
|
|
||||||
break;
|
|
||||||
case TypeId.Player:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Player))
|
|
||||||
return;
|
|
||||||
break;
|
|
||||||
case TypeId.Unit:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Creature))
|
|
||||||
return;
|
|
||||||
break;
|
|
||||||
case TypeId.Corpse:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Corpse))
|
|
||||||
return;
|
|
||||||
break;
|
|
||||||
case TypeId.DynamicObject:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.DynamicObject))
|
|
||||||
return;
|
|
||||||
break;
|
|
||||||
case TypeId.AreaTrigger:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.AreaTrigger))
|
|
||||||
return;
|
|
||||||
break;
|
|
||||||
case TypeId.Conversation:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Conversation))
|
|
||||||
return;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
public override void Visit(IList<Player> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Player))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
{
|
||||||
|
if (obj.IsInPhase(_searcher))
|
||||||
|
i_do.Invoke(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<Creature> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Creature))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
{
|
||||||
|
if (obj.IsInPhase(_searcher))
|
||||||
|
i_do.Invoke(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<Corpse> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Corpse))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
{
|
||||||
|
if (obj.IsInPhase(_searcher))
|
||||||
|
i_do.Invoke(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<DynamicObject> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.DynamicObject))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
{
|
||||||
|
if (obj.IsInPhase(_searcher))
|
||||||
|
i_do.Invoke(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<AreaTrigger> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.AreaTrigger))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
{
|
||||||
|
if (obj.IsInPhase(_searcher))
|
||||||
|
i_do.Invoke(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<Conversation> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Conversation))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
{
|
||||||
if (obj.IsInPhase(_searcher))
|
if (obj.IsInPhase(_searcher))
|
||||||
i_do.Invoke(obj);
|
i_do.Invoke(obj);
|
||||||
}
|
}
|
||||||
@@ -918,46 +958,17 @@ namespace Game.Maps
|
|||||||
i_check = check;
|
i_check = check;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Visit(IList<WorldObject> objs)
|
public override void Visit(IList<GameObject> objs)
|
||||||
{
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.GameObject))
|
||||||
|
return;
|
||||||
|
|
||||||
// already found
|
// already found
|
||||||
if (i_object)
|
if (i_object)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
foreach (var obj in objs)
|
foreach (var obj in objs)
|
||||||
{
|
{
|
||||||
switch (obj.GetTypeId())
|
|
||||||
{
|
|
||||||
case TypeId.Player:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Player))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
case TypeId.GameObject:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.GameObject))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
case TypeId.Corpse:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Corpse))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
case TypeId.Unit:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Creature))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
case TypeId.DynamicObject:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.DynamicObject))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
case TypeId.AreaTrigger:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.AreaTrigger))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
case TypeId.Conversation:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Conversation))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!obj.IsInPhase(_searcher))
|
if (!obj.IsInPhase(_searcher))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -966,7 +977,138 @@ namespace Game.Maps
|
|||||||
i_object = obj;
|
i_object = obj;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<Player> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Player))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// already found
|
||||||
|
if (i_object)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
{
|
||||||
|
if (!obj.IsInPhase(_searcher))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (i_check.Invoke(obj))
|
||||||
|
{
|
||||||
|
i_object = obj;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<Creature> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Creature))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// already found
|
||||||
|
if (i_object)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
{
|
||||||
|
if (!obj.IsInPhase(_searcher))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (i_check.Invoke(obj))
|
||||||
|
{
|
||||||
|
i_object = obj;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<Corpse> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Corpse))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// already found
|
||||||
|
if (i_object)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
{
|
||||||
|
if (!obj.IsInPhase(_searcher))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (i_check.Invoke(obj))
|
||||||
|
{
|
||||||
|
i_object = obj;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<DynamicObject> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.DynamicObject))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// already found
|
||||||
|
if (i_object)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
{
|
||||||
|
if (!obj.IsInPhase(_searcher))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (i_check.Invoke(obj))
|
||||||
|
{
|
||||||
|
i_object = obj;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<AreaTrigger> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.AreaTrigger))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// already found
|
||||||
|
if (i_object)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
{
|
||||||
|
if (!obj.IsInPhase(_searcher))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (i_check.Invoke(obj))
|
||||||
|
{
|
||||||
|
i_object = obj;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<Conversation> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Conversation))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// already found
|
||||||
|
if (i_object)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
{
|
||||||
|
if (!obj.IsInPhase(_searcher))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (i_check.Invoke(obj))
|
||||||
|
{
|
||||||
|
i_object = obj;
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -986,42 +1128,103 @@ namespace Game.Maps
|
|||||||
i_check = check;
|
i_check = check;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Visit(IList<WorldObject> objs)
|
public override void Visit(IList<GameObject> objs)
|
||||||
{
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.GameObject))
|
||||||
|
return;
|
||||||
|
|
||||||
foreach (var obj in objs)
|
foreach (var obj in objs)
|
||||||
{
|
{
|
||||||
switch (obj.GetTypeId())
|
if (!obj.IsInPhase(_searcher))
|
||||||
{
|
continue;
|
||||||
case TypeId.Player:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Player))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
case TypeId.GameObject:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.GameObject))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
case TypeId.Corpse:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Corpse))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
case TypeId.Unit:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Creature))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
case TypeId.DynamicObject:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.DynamicObject))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
case TypeId.AreaTrigger:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.AreaTrigger))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
case TypeId.Conversation:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Conversation))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (i_check.Invoke(obj))
|
||||||
|
i_object = obj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<Player> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Player))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
{
|
||||||
|
if (!obj.IsInPhase(_searcher))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (i_check.Invoke(obj))
|
||||||
|
i_object = obj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<Creature> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Creature))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
{
|
||||||
|
if (!obj.IsInPhase(_searcher))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (i_check.Invoke(obj))
|
||||||
|
i_object = obj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<Corpse> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Corpse))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
{
|
||||||
|
if (!obj.IsInPhase(_searcher))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (i_check.Invoke(obj))
|
||||||
|
i_object = obj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<DynamicObject> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.DynamicObject))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
{
|
||||||
|
if (!obj.IsInPhase(_searcher))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (i_check.Invoke(obj))
|
||||||
|
i_object = obj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<AreaTrigger> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.AreaTrigger))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
{
|
||||||
|
if (!obj.IsInPhase(_searcher))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (i_check.Invoke(obj))
|
||||||
|
i_object = obj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<Conversation> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Conversation))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
{
|
||||||
if (!obj.IsInPhase(_searcher))
|
if (!obj.IsInPhase(_searcher))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -1047,45 +1250,74 @@ namespace Game.Maps
|
|||||||
i_check = check;
|
i_check = check;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Visit(IList<WorldObject> objs)
|
public override void Visit(IList<Player> objs)
|
||||||
{
|
{
|
||||||
foreach (var obj in objs)
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Player))
|
||||||
{
|
return;
|
||||||
switch (obj.GetTypeId())
|
|
||||||
{
|
|
||||||
case TypeId.Player:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Player))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
case TypeId.GameObject:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.GameObject))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
case TypeId.Corpse:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Corpse))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
case TypeId.Unit:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Creature))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
case TypeId.DynamicObject:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.DynamicObject))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
case TypeId.AreaTrigger:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.AreaTrigger))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
case TypeId.Conversation:
|
|
||||||
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Conversation))
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
if (i_check.Invoke(obj))
|
||||||
|
i_objects.Add(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<Creature> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Creature))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
if (i_check.Invoke(obj))
|
||||||
|
i_objects.Add(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<Corpse> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Corpse))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
if (i_check.Invoke(obj))
|
||||||
|
i_objects.Add(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<GameObject> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.GameObject))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
if (i_check.Invoke(obj))
|
||||||
|
i_objects.Add(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<DynamicObject> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.DynamicObject))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
if (i_check.Invoke(obj))
|
||||||
|
i_objects.Add(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<AreaTrigger> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.AreaTrigger))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
|
if (i_check.Invoke(obj))
|
||||||
|
i_objects.Add(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(IList<Conversation> objs)
|
||||||
|
{
|
||||||
|
if (!i_mapTypeMask.HasAnyFlag(GridMapTypeMask.Conversation))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var obj in objs)
|
||||||
if (i_check.Invoke(obj))
|
if (i_check.Invoke(obj))
|
||||||
i_objects.Add(obj);
|
i_objects.Add(obj);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GridMapTypeMask i_mapTypeMask;
|
GridMapTypeMask i_mapTypeMask;
|
||||||
@@ -2099,7 +2331,7 @@ namespace Game.Maps
|
|||||||
float m_fRange;
|
float m_fRange;
|
||||||
}
|
}
|
||||||
|
|
||||||
class AllCreaturesOfEntryInRange : ICheck<Creature>
|
public class AllCreaturesOfEntryInRange : ICheck<Creature>
|
||||||
{
|
{
|
||||||
public AllCreaturesOfEntryInRange(WorldObject obj, uint entry, float maxRange)
|
public AllCreaturesOfEntryInRange(WorldObject obj, uint entry, float maxRange)
|
||||||
{
|
{
|
||||||
@@ -2181,7 +2413,7 @@ namespace Game.Maps
|
|||||||
float m_fRange;
|
float m_fRange;
|
||||||
}
|
}
|
||||||
|
|
||||||
class ObjectTypeIdCheck : ICheck<WorldObject>
|
public class ObjectTypeIdCheck : ICheck<WorldObject>
|
||||||
{
|
{
|
||||||
public ObjectTypeIdCheck(TypeId typeId, bool equals)
|
public ObjectTypeIdCheck(TypeId typeId, bool equals)
|
||||||
{
|
{
|
||||||
@@ -2218,7 +2450,7 @@ namespace Game.Maps
|
|||||||
ObjectGuid _GUID;
|
ObjectGuid _GUID;
|
||||||
}
|
}
|
||||||
|
|
||||||
class HeightDifferenceCheck : ICheck<WorldObject>
|
public class HeightDifferenceCheck : ICheck<WorldObject>
|
||||||
{
|
{
|
||||||
public HeightDifferenceCheck(WorldObject go, float diff, bool reverse)
|
public HeightDifferenceCheck(WorldObject go, float diff, bool reverse)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -725,7 +725,7 @@ namespace Game.Maps
|
|||||||
instance.SendToPlayers(new InstanceEncounterEnd());
|
instance.SendToPlayers(new InstanceEncounterEnd());
|
||||||
}
|
}
|
||||||
|
|
||||||
void SendBossKillCredit(uint encounterId)
|
public void SendBossKillCredit(uint encounterId)
|
||||||
{
|
{
|
||||||
BossKill bossKillCreditMessage = new BossKill();
|
BossKill bossKillCreditMessage = new BossKill();
|
||||||
bossKillCreditMessage.DungeonEncounterID = encounterId;
|
bossKillCreditMessage.DungeonEncounterID = encounterId;
|
||||||
|
|||||||
@@ -3558,7 +3558,7 @@ namespace Game.Maps
|
|||||||
return info.DefaultWeather;
|
return info.DefaultWeather;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetZoneWeather(uint zoneId, WeatherState weatherId, float weatherGrade)
|
public void SetZoneWeather(uint zoneId, WeatherState weatherId, float weatherGrade)
|
||||||
{
|
{
|
||||||
if (!_zoneDynamicInfo.ContainsKey(zoneId))
|
if (!_zoneDynamicInfo.ContainsKey(zoneId))
|
||||||
_zoneDynamicInfo[zoneId] = new ZoneDynamicInfo();
|
_zoneDynamicInfo[zoneId] = new ZoneDynamicInfo();
|
||||||
@@ -3580,7 +3580,7 @@ namespace Game.Maps
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetZoneOverrideLight(uint zoneId, uint lightId, uint fadeInTime)
|
public void SetZoneOverrideLight(uint zoneId, uint lightId, uint fadeInTime)
|
||||||
{
|
{
|
||||||
if (!_zoneDynamicInfo.ContainsKey(zoneId))
|
if (!_zoneDynamicInfo.ContainsKey(zoneId))
|
||||||
_zoneDynamicInfo[zoneId] = new ZoneDynamicInfo();
|
_zoneDynamicInfo[zoneId] = new ZoneDynamicInfo();
|
||||||
|
|||||||
@@ -271,7 +271,7 @@ namespace Game.Maps
|
|||||||
{
|
{
|
||||||
foreach (var obj in objs)
|
foreach (var obj in objs)
|
||||||
{
|
{
|
||||||
if (obj.IsTypeId(TypeId.Player) || obj.IsTypeId(TypeId.Corpse))
|
if (obj.IsTypeId(TypeId.Corpse))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// if option set then object already saved at this moment
|
// if option set then object already saved at this moment
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ namespace Game.Movement
|
|||||||
if (_arrivalSpellId != 0)
|
if (_arrivalSpellId != 0)
|
||||||
owner.CastSpell(Global.ObjAccessor.GetUnit(owner, _arrivalSpellTargetGuid), _arrivalSpellId, true);
|
owner.CastSpell(Global.ObjAccessor.GetUnit(owner, _arrivalSpellTargetGuid), _arrivalSpellId, true);
|
||||||
|
|
||||||
if (owner.ToCreature().GetAI() != null)
|
if (owner.ToCreature() && owner.ToCreature().GetAI() != null)
|
||||||
owner.ToCreature().GetAI().MovementInform(MovementGeneratorType.Effect, _pointId);
|
owner.ToCreature().GetAI().MovementInform(MovementGeneratorType.Effect, _pointId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -270,7 +270,7 @@ namespace Game.Movement
|
|||||||
StartMovement(new PointMovementGenerator<Creature>(id, x, y, z, generatePath), MovementSlot.Active);
|
StartMovement(new PointMovementGenerator<Creature>(id, x, y, z, generatePath), MovementSlot.Active);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveCloserAndStop(uint id, Unit target, float distance)
|
public void MoveCloserAndStop(uint id, Unit target, float distance)
|
||||||
{
|
{
|
||||||
float distanceToTravel = _owner.GetExactDist2d(target) - distance;
|
float distanceToTravel = _owner.GetExactDist2d(target) - distance;
|
||||||
if (distanceToTravel > 0.0f)
|
if (distanceToTravel > 0.0f)
|
||||||
@@ -303,7 +303,7 @@ namespace Game.Movement
|
|||||||
StartMovement(new EffectMovementGenerator(id), MovementSlot.Active);
|
StartMovement(new EffectMovementGenerator(id), MovementSlot.Active);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveTakeoff(uint id, Position pos)
|
public void MoveTakeoff(uint id, Position pos)
|
||||||
{
|
{
|
||||||
float x, y, z;
|
float x, y, z;
|
||||||
pos.GetPosition(out x, out y, out z);
|
pos.GetPosition(out x, out y, out z);
|
||||||
@@ -421,7 +421,7 @@ namespace Game.Movement
|
|||||||
StartMovement(new EffectMovementGenerator(id, arrivalSpellId, arrivalSpellTargetGuid), MovementSlot.Controlled);
|
StartMovement(new EffectMovementGenerator(id, arrivalSpellId, arrivalSpellTargetGuid), MovementSlot.Controlled);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveCirclePath(float x, float y, float z, float radius, bool clockwise, byte stepCount)
|
public void MoveCirclePath(float x, float y, float z, float radius, bool clockwise, byte stepCount)
|
||||||
{
|
{
|
||||||
float step = 2 * MathFunctions.PI / stepCount * (clockwise ? -1.0f : 1.0f);
|
float step = 2 * MathFunctions.PI / stepCount * (clockwise ? -1.0f : 1.0f);
|
||||||
Position pos = new Position(x, y, z, 0.0f);
|
Position pos = new Position(x, y, z, 0.0f);
|
||||||
@@ -480,7 +480,7 @@ namespace Game.Movement
|
|||||||
//MovePoint(EVENT_CHARGE_PREPATH, pos, false);
|
//MovePoint(EVENT_CHARGE_PREPATH, pos, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveAlongSplineChain(uint pointId, uint dbChainId, bool walk)
|
public void MoveAlongSplineChain(uint pointId, uint dbChainId, bool walk)
|
||||||
{
|
{
|
||||||
Creature owner = _owner.ToCreature();
|
Creature owner = _owner.ToCreature();
|
||||||
if (!owner)
|
if (!owner)
|
||||||
@@ -606,7 +606,7 @@ namespace Game.Movement
|
|||||||
StartMovement(new WaypointMovementGenerator(path, repeatable), MovementSlot.Idle);
|
StartMovement(new WaypointMovementGenerator(path, repeatable), MovementSlot.Idle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveRotate(uint time, RotateDirection direction)
|
public void MoveRotate(uint time, RotateDirection direction)
|
||||||
{
|
{
|
||||||
if (time == 0)
|
if (time == 0)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -540,7 +540,7 @@ namespace Game.Scripting
|
|||||||
Global.ScriptMgr.AddScript(this);
|
Global.ScriptMgr.AddScript(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool IsDatabaseBound() { return true; }
|
public override bool IsDatabaseBound() { return false; }
|
||||||
|
|
||||||
// Called when an additional criteria is checked.
|
// Called when an additional criteria is checked.
|
||||||
public virtual bool OnCheck(Player source, Unit target) { return false; }
|
public virtual bool OnCheck(Player source, Unit target) { return false; }
|
||||||
|
|||||||
@@ -168,6 +168,7 @@ namespace Game.Scripting
|
|||||||
case "GuildScript":
|
case "GuildScript":
|
||||||
case "GroupScript":
|
case "GroupScript":
|
||||||
case "AreaTriggerEntityScript":
|
case "AreaTriggerEntityScript":
|
||||||
|
case "OnlyOnceAreaTriggerScript":
|
||||||
case "SceneScript":
|
case "SceneScript":
|
||||||
if (!attribute.Name.IsEmpty())
|
if (!attribute.Name.IsEmpty())
|
||||||
name = attribute.Name;
|
name = attribute.Name;
|
||||||
|
|||||||
@@ -1676,7 +1676,7 @@ namespace Game.Spells
|
|||||||
|
|
||||||
[AuraEffectHandler(AuraType.ModScale)]
|
[AuraEffectHandler(AuraType.ModScale)]
|
||||||
[AuraEffectHandler(AuraType.ModScale2)]
|
[AuraEffectHandler(AuraType.ModScale2)]
|
||||||
void HandleAuraModScale(AuraApplication aurApp, AuraEffectHandleModes mode, bool apply)
|
public void HandleAuraModScale(AuraApplication aurApp, AuraEffectHandleModes mode, bool apply)
|
||||||
{
|
{
|
||||||
if (!mode.HasAnyFlag(AuraEffectHandleModes.ChangeAmountSendForClientMask))
|
if (!mode.HasAnyFlag(AuraEffectHandleModes.ChangeAmountSendForClientMask))
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -1720,7 +1720,7 @@ namespace Game.Spells
|
|||||||
pos = destTarget;
|
pos = destTarget;
|
||||||
else
|
else
|
||||||
// randomize position for multiple summons
|
// randomize position for multiple summons
|
||||||
m_caster.GetRandomPoint(destTarget, radius, out pos);
|
pos = m_caster.GetRandomPoint(destTarget, radius);
|
||||||
|
|
||||||
summon = m_originalCaster.SummonCreature(entry, pos, summonType, (uint)duration, 0, personalSpawn);
|
summon = m_originalCaster.SummonCreature(entry, pos, summonType, (uint)duration, 0, personalSpawn);
|
||||||
if (summon == null)
|
if (summon == null)
|
||||||
@@ -4972,7 +4972,7 @@ namespace Game.Spells
|
|||||||
pos = destTarget;
|
pos = destTarget;
|
||||||
else
|
else
|
||||||
// randomize position for multiple summons
|
// randomize position for multiple summons
|
||||||
m_caster.GetRandomPoint(destTarget, radius, out pos);
|
pos = m_caster.GetRandomPoint(destTarget, radius);
|
||||||
|
|
||||||
TempSummon summon = map.SummonCreature(entry, pos, properties, (uint)duration, caster, m_spellInfo.Id);
|
TempSummon summon = map.SummonCreature(entry, pos, properties, (uint)duration, caster, m_spellInfo.Id);
|
||||||
if (summon == null)
|
if (summon == null)
|
||||||
|
|||||||
@@ -3611,7 +3611,6 @@ namespace Game.Spells
|
|||||||
|
|
||||||
Dictionary<uint, SpellEffectInfo> _effects = new Dictionary<uint, SpellEffectInfo>();
|
Dictionary<uint, SpellEffectInfo> _effects = new Dictionary<uint, SpellEffectInfo>();
|
||||||
List<SpellXSpellVisualRecord> _visuals = new List<SpellXSpellVisualRecord>();
|
List<SpellXSpellVisualRecord> _visuals = new List<SpellXSpellVisualRecord>();
|
||||||
bool _hasPowerDifficultyData;
|
|
||||||
SpellSpecificType _spellSpecific;
|
SpellSpecificType _spellSpecific;
|
||||||
AuraStateType _auraState;
|
AuraStateType _auraState;
|
||||||
|
|
||||||
|
|||||||
@@ -256,7 +256,7 @@ namespace Game
|
|||||||
return dist;
|
return dist;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SendSound(Creature source, uint sound, ChatMsg msgType, WorldObject whisperTarget = null, CreatureTextRange range = CreatureTextRange.Normal, Team team = Team.Other, bool gmOnly = false)
|
public void SendSound(Creature source, uint sound, ChatMsg msgType, WorldObject whisperTarget = null, CreatureTextRange range = CreatureTextRange.Normal, Team team = Team.Other, bool gmOnly = false)
|
||||||
{
|
{
|
||||||
if (sound == 0 || !source)
|
if (sound == 0 || !source)
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user