Core/Objects: Unify Searcher classes into one common implementation
Port From (https://github.com/TrinityCore/TrinityCore/commit/261eb201bf107cef441d9b075e8f23bf0edfbaf0) Port From (https://github.com/TrinityCore/TrinityCore/commit/526b16fea41fb69a302fdebe8a727e175949f04b) Port From (https://github.com/TrinityCore/TrinityCore/commit/8b7dce6521323e788ebf28297ec941a6f9bf876f) Port From (https://github.com/TrinityCore/TrinityCore/commit/5334467f493eb16141f4ad0bce956bc3e19244a0) Port From (https://github.com/TrinityCore/TrinityCore/commit/1e7725c15b149baaf96731231239769e482ec2ed) Port From (https://github.com/TrinityCore/TrinityCore/commit/21712f475383f6f3fae107706f5de5195f75b760)
This commit is contained in:
@@ -210,8 +210,5 @@ namespace System.Collections.Generic
|
|||||||
bool Invoke(T obj);
|
bool Invoke(T obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IDoWork<in T>
|
public delegate void IDoWork<in T>(T obj);
|
||||||
{
|
|
||||||
void Invoke(T obj);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ namespace Game.AI
|
|||||||
var u_check = new NearestAttackableUnitInObjectRangeCheck(me, me.GetCharmerOrOwnerOrSelf(), max_range);
|
var u_check = new NearestAttackableUnitInObjectRangeCheck(me, me.GetCharmerOrOwnerOrSelf(), max_range);
|
||||||
var checker = new UnitLastSearcher(me, u_check);
|
var checker = new UnitLastSearcher(me, u_check);
|
||||||
Cell.VisitAllObjects(me, checker, max_range + extraSearchRadius);
|
Cell.VisitAllObjects(me, checker, max_range + extraSearchRadius);
|
||||||
victim = checker.GetTarget();
|
victim = checker.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
// If have target
|
// If have target
|
||||||
|
|||||||
@@ -372,7 +372,7 @@ namespace Game.AI
|
|||||||
var searcher = new UnitLastSearcher(me, u_check);
|
var searcher = new UnitLastSearcher(me, u_check);
|
||||||
Cell.VisitAllObjects(me, searcher, range);
|
Cell.VisitAllObjects(me, searcher, range);
|
||||||
|
|
||||||
return searcher.GetTarget();
|
return searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Returns a list of friendly CC'd units within range
|
//Returns a list of friendly CC'd units within range
|
||||||
@@ -404,7 +404,7 @@ namespace Game.AI
|
|||||||
var searcher = new PlayerSearcher(me, check);
|
var searcher = new PlayerSearcher(me, check);
|
||||||
Cell.VisitWorldObjects(me, searcher, minimumRange);
|
Cell.VisitWorldObjects(me, searcher, minimumRange);
|
||||||
|
|
||||||
return searcher.GetTarget();
|
return searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetEquipmentSlots(bool loadDefault, int mainHand = -1, int offHand = -1, int ranged = -1)
|
public void SetEquipmentSlots(bool loadDefault, int mainHand = -1, int offHand = -1, int ranged = -1)
|
||||||
|
|||||||
@@ -4257,7 +4257,7 @@ namespace Game.AI
|
|||||||
var u_check = new MostHPMissingInRange<Unit>(_me, range, MinHPDiff);
|
var u_check = new MostHPMissingInRange<Unit>(_me, range, MinHPDiff);
|
||||||
var searcher = new UnitLastSearcher(_me, u_check);
|
var searcher = new UnitLastSearcher(_me, u_check);
|
||||||
Cell.VisitGridObjects(_me, searcher, range);
|
Cell.VisitGridObjects(_me, searcher, range);
|
||||||
return searcher.GetTarget();
|
return searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Unit DoSelectBelowHpPctFriendlyWithEntry(uint entry, float range, byte minHPDiff = 1, bool excludeSelf = true)
|
public Unit DoSelectBelowHpPctFriendlyWithEntry(uint entry, float range, byte minHPDiff = 1, bool excludeSelf = true)
|
||||||
@@ -4266,7 +4266,7 @@ namespace Game.AI
|
|||||||
UnitLastSearcher searcher = new(_me, u_check);
|
UnitLastSearcher searcher = new(_me, u_check);
|
||||||
Cell.VisitAllObjects(_me, searcher, range);
|
Cell.VisitAllObjects(_me, searcher, range);
|
||||||
|
|
||||||
return searcher.GetTarget();
|
return searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
Unit DoSelectLowestHpPercentFriendly(float range, uint minHpPct, uint maxHpPct)
|
Unit DoSelectLowestHpPercentFriendly(float range, uint minHpPct, uint maxHpPct)
|
||||||
@@ -4277,7 +4277,7 @@ namespace Game.AI
|
|||||||
MostHPPercentMissingInRange u_check = new(_me, range, minHpPct, maxHpPct);
|
MostHPPercentMissingInRange u_check = new(_me, range, minHpPct, maxHpPct);
|
||||||
UnitLastSearcher searcher = new(_me, u_check);
|
UnitLastSearcher searcher = new(_me, u_check);
|
||||||
Cell.VisitGridObjects(_me, searcher, range);
|
Cell.VisitGridObjects(_me, searcher, range);
|
||||||
return searcher.GetTarget();
|
return searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DoFindFriendlyCC(List<Creature> creatures, float range)
|
void DoFindFriendlyCC(List<Creature> creatures, float range)
|
||||||
@@ -4308,7 +4308,7 @@ namespace Game.AI
|
|||||||
var u_check = new AnyFriendlyUnitInObjectRangeCheck(_me, _me, range);
|
var u_check = new AnyFriendlyUnitInObjectRangeCheck(_me, _me, range);
|
||||||
var searcher = new UnitLastSearcher(_me, u_check);
|
var searcher = new UnitLastSearcher(_me, u_check);
|
||||||
Cell.VisitAllObjects(_me, searcher, range);
|
Cell.VisitAllObjects(_me, searcher, range);
|
||||||
return searcher.GetTarget();
|
return searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetTimedActionList(SmartScriptHolder e, uint entry, Unit invoker, uint startFromEventId = 0)
|
public void SetTimedActionList(SmartScriptHolder e, uint entry, Unit invoker, uint startFromEventId = 0)
|
||||||
|
|||||||
@@ -558,7 +558,7 @@ namespace Game
|
|||||||
|
|
||||||
void SendCalendarEventInviteAlert(CalendarEvent calendarEvent, CalendarInvite invite)
|
void SendCalendarEventInviteAlert(CalendarEvent calendarEvent, CalendarInvite invite)
|
||||||
{
|
{
|
||||||
var packetBuilder = (Player receiver) =>
|
IDoWork<Player> packetBuilder = (Player receiver) =>
|
||||||
{
|
{
|
||||||
CalendarInviteAlert packet = new();
|
CalendarInviteAlert packet = new();
|
||||||
packet.Date.SetUtcTimeFromUnixTime(calendarEvent.Date);
|
packet.Date.SetUtcTimeFromUnixTime(calendarEvent.Date);
|
||||||
|
|||||||
@@ -400,7 +400,7 @@ namespace Game.Chat
|
|||||||
NearestGameObjectCheck check = new(pl);
|
NearestGameObjectCheck check = new(pl);
|
||||||
GameObjectLastSearcher searcher = new(pl, check);
|
GameObjectLastSearcher searcher = new(pl, check);
|
||||||
Cell.VisitGridObjects(pl, searcher, MapConst.SizeofGrids);
|
Cell.VisitGridObjects(pl, searcher, MapConst.SizeofGrids);
|
||||||
return searcher.GetTarget();
|
return searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string PlayerLink(string name)
|
public string PlayerLink(string name)
|
||||||
|
|||||||
@@ -142,7 +142,7 @@ namespace Game.Chat
|
|||||||
var check = new AllCreaturesOfEntryInRange(handler.GetPlayer(), entry, 20.0f);
|
var check = new AllCreaturesOfEntryInRange(handler.GetPlayer(), entry, 20.0f);
|
||||||
var searcher = new CreatureSearcher(handler.GetPlayer(), check);
|
var searcher = new CreatureSearcher(handler.GetPlayer(), check);
|
||||||
Cell.VisitAllObjects(handler.GetPlayer(), searcher, 30.0f);
|
Cell.VisitAllObjects(handler.GetPlayer(), searcher, 30.0f);
|
||||||
var passenger = searcher.GetTarget();
|
var passenger = searcher.GetResult();
|
||||||
if (passenger == null || passenger == target)
|
if (passenger == null || passenger == target)
|
||||||
return false;
|
return false;
|
||||||
passenger.EnterVehicle(target, seatId);
|
passenger.EnterVehicle(target, seatId);
|
||||||
|
|||||||
@@ -1571,7 +1571,8 @@ namespace Game.Chat
|
|||||||
}
|
}
|
||||||
|
|
||||||
// First handle any creatures that still have a corpse around
|
// First handle any creatures that still have a corpse around
|
||||||
var worker = new WorldObjectWorker(player, new RespawnDo());
|
RespawnDo u_do = new();
|
||||||
|
WorldObjectWorker<Creature> worker = new(player, u_do);
|
||||||
Cell.VisitGridObjects(player, worker, player.GetGridActivationRange());
|
Cell.VisitGridObjects(player, worker, player.GetGridActivationRange());
|
||||||
|
|
||||||
// Now handle any that had despawned, but had respawn time logged.
|
// Now handle any that had despawned, but had respawn time logged.
|
||||||
|
|||||||
@@ -1589,7 +1589,7 @@ namespace Game.Entities
|
|||||||
|
|
||||||
AreaTriggerAI _ai;
|
AreaTriggerAI _ai;
|
||||||
|
|
||||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
class ValuesUpdateForPlayerWithMaskSender
|
||||||
{
|
{
|
||||||
AreaTrigger Owner;
|
AreaTrigger Owner;
|
||||||
ObjectFieldData ObjectMask = new();
|
ObjectFieldData ObjectMask = new();
|
||||||
@@ -1609,6 +1609,8 @@ namespace Game.Entities
|
|||||||
udata.BuildPacket(out UpdateObject updateObject);
|
udata.BuildPacket(out UpdateObject updateObject);
|
||||||
player.SendPacket(updateObject);
|
player.SendPacket(updateObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static implicit operator IDoWork<Player>(ValuesUpdateForPlayerWithMaskSender obj) => obj.Invoke;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -386,7 +386,7 @@ namespace Game.Entities
|
|||||||
|
|
||||||
ConversationAI _ai;
|
ConversationAI _ai;
|
||||||
|
|
||||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
class ValuesUpdateForPlayerWithMaskSender
|
||||||
{
|
{
|
||||||
Conversation Owner;
|
Conversation Owner;
|
||||||
ObjectFieldData ObjectMask = new();
|
ObjectFieldData ObjectMask = new();
|
||||||
@@ -406,6 +406,8 @@ namespace Game.Entities
|
|||||||
udata.BuildPacket(out UpdateObject packet);
|
udata.BuildPacket(out UpdateObject packet);
|
||||||
player.SendPacket(packet);
|
player.SendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static implicit operator IDoWork<Player>(ValuesUpdateForPlayerWithMaskSender obj) => obj.Invoke;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -320,7 +320,7 @@ namespace Game.Entities
|
|||||||
long m_time;
|
long m_time;
|
||||||
CellCoord _cellCoord; // gride for corpse position for fast search
|
CellCoord _cellCoord; // gride for corpse position for fast search
|
||||||
|
|
||||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
class ValuesUpdateForPlayerWithMaskSender
|
||||||
{
|
{
|
||||||
Corpse Owner;
|
Corpse Owner;
|
||||||
ObjectFieldData ObjectMask = new();
|
ObjectFieldData ObjectMask = new();
|
||||||
@@ -340,6 +340,8 @@ namespace Game.Entities
|
|||||||
udata.BuildPacket(out UpdateObject packet);
|
udata.BuildPacket(out UpdateObject packet);
|
||||||
player.SendPacket(packet);
|
player.SendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static implicit operator IDoWork<Player>(ValuesUpdateForPlayerWithMaskSender obj) => obj.Invoke;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -747,7 +747,7 @@ namespace Game.Entities
|
|||||||
var searcher = new CreatureLastSearcher(this, u_check);
|
var searcher = new CreatureLastSearcher(this, u_check);
|
||||||
Cell.VisitGridObjects(this, searcher, radius);
|
Cell.VisitGridObjects(this, searcher, radius);
|
||||||
|
|
||||||
var creature = searcher.GetTarget();
|
var creature = searcher.GetResult();
|
||||||
|
|
||||||
SetNoSearchAssistance(true);
|
SetNoSearchAssistance(true);
|
||||||
|
|
||||||
@@ -2323,7 +2323,7 @@ namespace Game.Entities
|
|||||||
var searcher = new UnitLastSearcher(this, u_check);
|
var searcher = new UnitLastSearcher(this, u_check);
|
||||||
Cell.VisitAllObjects(this, searcher, dist);
|
Cell.VisitAllObjects(this, searcher, dist);
|
||||||
|
|
||||||
return searcher.GetTarget();
|
return searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
// select nearest hostile unit within the given attack distance (i.e. distance is ignored if > than ATTACK_DISTANCE), regardless of threat list.
|
// select nearest hostile unit within the given attack distance (i.e. distance is ignored if > than ATTACK_DISTANCE), regardless of threat list.
|
||||||
@@ -2340,7 +2340,7 @@ namespace Game.Entities
|
|||||||
|
|
||||||
Cell.VisitAllObjects(this, searcher, Math.Max(dist, SharedConst.AttackDistance));
|
Cell.VisitAllObjects(this, searcher, Math.Max(dist, SharedConst.AttackDistance));
|
||||||
|
|
||||||
return searcher.GetTarget();
|
return searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendAIReaction(AiReaction reactionType)
|
public void SendAIReaction(AiReaction reactionType)
|
||||||
@@ -3327,7 +3327,7 @@ namespace Game.Entities
|
|||||||
var u_check = new NearestHostileUnitInAggroRangeCheck(this, useLOS, ignoreCivilians);
|
var u_check = new NearestHostileUnitInAggroRangeCheck(this, useLOS, ignoreCivilians);
|
||||||
var searcher = new UnitSearcher(this, u_check);
|
var searcher = new UnitSearcher(this, u_check);
|
||||||
Cell.VisitGridObjects(this, searcher, SharedConst.MaxAggroRadius);
|
Cell.VisitGridObjects(this, searcher, SharedConst.MaxAggroRadius);
|
||||||
return searcher.GetTarget();
|
return searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override float GetNativeObjectScale()
|
public override float GetNativeObjectScale()
|
||||||
@@ -3880,7 +3880,7 @@ namespace Game.Entities
|
|||||||
base.ClearUpdateMask(remove);
|
base.ClearUpdateMask(remove);
|
||||||
}
|
}
|
||||||
|
|
||||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
class ValuesUpdateForPlayerWithMaskSender
|
||||||
{
|
{
|
||||||
Creature Owner;
|
Creature Owner;
|
||||||
ObjectFieldData ObjectMask = new();
|
ObjectFieldData ObjectMask = new();
|
||||||
@@ -3900,6 +3900,8 @@ namespace Game.Entities
|
|||||||
udata.BuildPacket(out UpdateObject packet);
|
udata.BuildPacket(out UpdateObject packet);
|
||||||
player.SendPacket(packet);
|
player.SendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static implicit operator IDoWork<Player>(ValuesUpdateForPlayerWithMaskSender obj) => obj.Invoke;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -307,7 +307,7 @@ namespace Game.Entities
|
|||||||
int _duration; // for non-aura dynobjects
|
int _duration; // for non-aura dynobjects
|
||||||
bool _isViewpoint;
|
bool _isViewpoint;
|
||||||
|
|
||||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
class ValuesUpdateForPlayerWithMaskSender
|
||||||
{
|
{
|
||||||
DynamicObject Owner;
|
DynamicObject Owner;
|
||||||
ObjectFieldData ObjectMask = new();
|
ObjectFieldData ObjectMask = new();
|
||||||
@@ -327,6 +327,8 @@ namespace Game.Entities
|
|||||||
udata.BuildPacket(out UpdateObject packet);
|
udata.BuildPacket(out UpdateObject packet);
|
||||||
player.SendPacket(packet);
|
player.SendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static implicit operator IDoWork<Player>(ValuesUpdateForPlayerWithMaskSender obj) => obj.Invoke;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -633,7 +633,7 @@ namespace Game.Entities
|
|||||||
var checker = new NearestAttackableNoTotemUnitInObjectRangeCheck(this, radius);
|
var checker = new NearestAttackableNoTotemUnitInObjectRangeCheck(this, radius);
|
||||||
var searcher = new UnitLastSearcher(this, checker);
|
var searcher = new UnitLastSearcher(this, checker);
|
||||||
Cell.VisitAllObjects(this, searcher, radius);
|
Cell.VisitAllObjects(this, searcher, radius);
|
||||||
target = searcher.GetTarget();
|
target = searcher.GetResult();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -641,7 +641,7 @@ namespace Game.Entities
|
|||||||
var check = new AnyUnitInObjectRangeCheck(this, radius);
|
var check = new AnyUnitInObjectRangeCheck(this, radius);
|
||||||
var searcher = new PlayerSearcher(this, check);
|
var searcher = new PlayerSearcher(this, check);
|
||||||
Cell.VisitWorldObjects(this, searcher, radius);
|
Cell.VisitWorldObjects(this, searcher, radius);
|
||||||
target = searcher.GetTarget();
|
target = searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (target != null)
|
if (target != null)
|
||||||
@@ -1465,7 +1465,7 @@ namespace Game.Entities
|
|||||||
var checker = new GameObjectSearcher(this, u_check);
|
var checker = new GameObjectSearcher(this, u_check);
|
||||||
|
|
||||||
Cell.VisitGridObjects(this, checker, range);
|
Cell.VisitGridObjects(this, checker, range);
|
||||||
return checker.GetTarget();
|
return checker.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResetDoorOrButton()
|
public void ResetDoorOrButton()
|
||||||
@@ -3975,7 +3975,7 @@ namespace Game.Entities
|
|||||||
ObjectGuid m_linkedTrap;
|
ObjectGuid m_linkedTrap;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
class ValuesUpdateForPlayerWithMaskSender
|
||||||
{
|
{
|
||||||
public GameObject Owner;
|
public GameObject Owner;
|
||||||
public ObjectFieldData ObjectMask = new();
|
public ObjectFieldData ObjectMask = new();
|
||||||
@@ -3995,6 +3995,8 @@ namespace Game.Entities
|
|||||||
udata.BuildPacket(out UpdateObject packet);
|
udata.BuildPacket(out UpdateObject packet);
|
||||||
player.SendPacket(packet);
|
player.SendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static implicit operator IDoWork<Player>(ValuesUpdateForPlayerWithMaskSender obj) => obj.Invoke;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -224,7 +224,7 @@ namespace Game.Entities
|
|||||||
return (uint)m_azeriteEmpoweredItemData.Selections[tier];
|
return (uint)m_azeriteEmpoweredItemData.Selections[tier];
|
||||||
}
|
}
|
||||||
|
|
||||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
class ValuesUpdateForPlayerWithMaskSender
|
||||||
{
|
{
|
||||||
AzeriteEmpoweredItem Owner;
|
AzeriteEmpoweredItem Owner;
|
||||||
ObjectFieldData ObjectMask = new();
|
ObjectFieldData ObjectMask = new();
|
||||||
@@ -245,6 +245,8 @@ namespace Game.Entities
|
|||||||
udata.BuildPacket(out UpdateObject packet);
|
udata.BuildPacket(out UpdateObject packet);
|
||||||
player.SendPacket(packet);
|
player.SendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static implicit operator IDoWork<Player>(ValuesUpdateForPlayerWithMaskSender obj) => obj.Invoke;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,7 +510,7 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
class ValuesUpdateForPlayerWithMaskSender
|
||||||
{
|
{
|
||||||
AzeriteItem Owner;
|
AzeriteItem Owner;
|
||||||
ObjectFieldData ObjectMask = new();
|
ObjectFieldData ObjectMask = new();
|
||||||
@@ -531,6 +531,8 @@ namespace Game.Entities
|
|||||||
udata.BuildPacket(out UpdateObject packet);
|
udata.BuildPacket(out UpdateObject packet);
|
||||||
player.SendPacket(packet);
|
player.SendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static implicit operator IDoWork<Player>(ValuesUpdateForPlayerWithMaskSender obj) => obj.Invoke;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -259,7 +259,7 @@ namespace Game.Entities
|
|||||||
ContainerData m_containerData;
|
ContainerData m_containerData;
|
||||||
Item[] m_bagslot = new Item[98];
|
Item[] m_bagslot = new Item[98];
|
||||||
|
|
||||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
class ValuesUpdateForPlayerWithMaskSender
|
||||||
{
|
{
|
||||||
Bag Owner;
|
Bag Owner;
|
||||||
ObjectFieldData ObjectMask = new();
|
ObjectFieldData ObjectMask = new();
|
||||||
@@ -280,6 +280,8 @@ namespace Game.Entities
|
|||||||
udata.BuildPacket(out UpdateObject packet);
|
udata.BuildPacket(out UpdateObject packet);
|
||||||
player.SendPacket(packet);
|
player.SendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static implicit operator IDoWork<Player>(ValuesUpdateForPlayerWithMaskSender obj) => obj.Invoke;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2838,7 +2838,7 @@ namespace Game.Entities
|
|||||||
Array<uint> m_gemScalingLevels = new(ItemConst.MaxGemSockets);
|
Array<uint> m_gemScalingLevels = new(ItemConst.MaxGemSockets);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
class ValuesUpdateForPlayerWithMaskSender
|
||||||
{
|
{
|
||||||
Item Owner;
|
Item Owner;
|
||||||
ObjectFieldData ObjectMask = new();
|
ObjectFieldData ObjectMask = new();
|
||||||
@@ -2858,6 +2858,8 @@ namespace Game.Entities
|
|||||||
udata.BuildPacket(out UpdateObject packet);
|
udata.BuildPacket(out UpdateObject packet);
|
||||||
player.SendPacket(packet);
|
player.SendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static implicit operator IDoWork<Player>(ValuesUpdateForPlayerWithMaskSender obj) => obj.Invoke;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1642,7 +1642,7 @@ namespace Game.Entities
|
|||||||
var searcher = new CreatureLastSearcher(this, checker);
|
var searcher = new CreatureLastSearcher(this, checker);
|
||||||
|
|
||||||
Cell.VisitAllObjects(this, searcher, range);
|
Cell.VisitAllObjects(this, searcher, range);
|
||||||
return searcher.GetTarget();
|
return searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature FindNearestCreatureWithOptions(float range, FindCreatureOptions options)
|
public Creature FindNearestCreatureWithOptions(float range, FindCreatureOptions options)
|
||||||
@@ -1654,7 +1654,7 @@ namespace Game.Entities
|
|||||||
searcher.i_phaseShift = PhasingHandler.GetAlwaysVisiblePhaseShift();
|
searcher.i_phaseShift = PhasingHandler.GetAlwaysVisiblePhaseShift();
|
||||||
|
|
||||||
Cell.VisitAllObjects(this, searcher, range);
|
Cell.VisitAllObjects(this, searcher, range);
|
||||||
return searcher.GetTarget();
|
return searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public GameObject FindNearestGameObject(uint entry, float range, bool spawnedOnly = true)
|
public GameObject FindNearestGameObject(uint entry, float range, bool spawnedOnly = true)
|
||||||
@@ -1663,7 +1663,7 @@ namespace Game.Entities
|
|||||||
var searcher = new GameObjectLastSearcher(this, checker);
|
var searcher = new GameObjectLastSearcher(this, checker);
|
||||||
|
|
||||||
Cell.VisitGridObjects(this, searcher, range);
|
Cell.VisitGridObjects(this, searcher, range);
|
||||||
return searcher.GetTarget();
|
return searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public GameObject FindNearestGameObjectWithOptions(float range, FindGameObjectOptions options)
|
public GameObject FindNearestGameObjectWithOptions(float range, FindGameObjectOptions options)
|
||||||
@@ -1675,7 +1675,7 @@ namespace Game.Entities
|
|||||||
searcher.i_phaseShift = PhasingHandler.GetAlwaysVisiblePhaseShift();
|
searcher.i_phaseShift = PhasingHandler.GetAlwaysVisiblePhaseShift();
|
||||||
|
|
||||||
Cell.VisitGridObjects(this, searcher, range);
|
Cell.VisitGridObjects(this, searcher, range);
|
||||||
return searcher.GetTarget();
|
return searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public GameObject FindNearestUnspawnedGameObject(uint entry, float range)
|
public GameObject FindNearestUnspawnedGameObject(uint entry, float range)
|
||||||
@@ -1684,7 +1684,7 @@ namespace Game.Entities
|
|||||||
GameObjectLastSearcher searcher = new(this, checker);
|
GameObjectLastSearcher searcher = new(this, checker);
|
||||||
|
|
||||||
Cell.VisitGridObjects(this, searcher, range);
|
Cell.VisitGridObjects(this, searcher, range);
|
||||||
return searcher.GetTarget();
|
return searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public GameObject FindNearestGameObjectOfType(GameObjectTypes type, float range)
|
public GameObject FindNearestGameObjectOfType(GameObjectTypes type, float range)
|
||||||
@@ -1693,7 +1693,7 @@ namespace Game.Entities
|
|||||||
var searcher = new GameObjectLastSearcher(this, checker);
|
var searcher = new GameObjectLastSearcher(this, checker);
|
||||||
|
|
||||||
Cell.VisitGridObjects(this, searcher, range);
|
Cell.VisitGridObjects(this, searcher, range);
|
||||||
return searcher.GetTarget();
|
return searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player SelectNearestPlayer(float range)
|
public Player SelectNearestPlayer(float range)
|
||||||
@@ -1701,7 +1701,7 @@ namespace Game.Entities
|
|||||||
var checker = new NearestPlayerInObjectRangeCheck(this, range);
|
var checker = new NearestPlayerInObjectRangeCheck(this, range);
|
||||||
var searcher = new PlayerLastSearcher(this, checker);
|
var searcher = new PlayerLastSearcher(this, checker);
|
||||||
Cell.VisitWorldObjects(this, searcher, range);
|
Cell.VisitWorldObjects(this, searcher, range);
|
||||||
return searcher.GetTarget();
|
return searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ObjectGuid GetCharmerOrOwnerOrOwnGUID()
|
public ObjectGuid GetCharmerOrOwnerOrOwnGUID()
|
||||||
@@ -4059,7 +4059,7 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class CombatLogSender : IDoWork<Player>
|
class CombatLogSender
|
||||||
{
|
{
|
||||||
CombatLogServerPacket i_message;
|
CombatLogServerPacket i_message;
|
||||||
|
|
||||||
@@ -4075,6 +4075,8 @@ namespace Game.Entities
|
|||||||
|
|
||||||
player.SendPacket(i_message);
|
player.SendPacket(i_message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static implicit operator IDoWork<Player>(CombatLogSender obj) => obj.Invoke;
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct FindCreatureOptions
|
public struct FindCreatureOptions
|
||||||
@@ -4257,7 +4259,7 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct WorldObjectClientDestroyWork : IDoWork<Player>
|
struct WorldObjectClientDestroyWork
|
||||||
{
|
{
|
||||||
public WorldObject obj;
|
public WorldObject obj;
|
||||||
|
|
||||||
@@ -4276,5 +4278,7 @@ namespace Game.Entities
|
|||||||
obj.DestroyForPlayer(player);
|
obj.DestroyForPlayer(player);
|
||||||
player.m_clientGUIDs.Remove(obj.GetGUID());
|
player.m_clientGUIDs.Remove(obj.GetGUID());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static implicit operator IDoWork<Player>(WorldObjectClientDestroyWork obj) => obj.Invoke;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -255,7 +255,7 @@ namespace Game.Entities
|
|||||||
List<uint> _playerDataElementsNeedSave = new();
|
List<uint> _playerDataElementsNeedSave = new();
|
||||||
List<uint> _playerDataFlagsNeedSave = new();
|
List<uint> _playerDataFlagsNeedSave = new();
|
||||||
|
|
||||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
class ValuesUpdateForPlayerWithMaskSender
|
||||||
{
|
{
|
||||||
Player Owner;
|
Player Owner;
|
||||||
ObjectFieldData ObjectMask = new();
|
ObjectFieldData ObjectMask = new();
|
||||||
@@ -277,6 +277,8 @@ namespace Game.Entities
|
|||||||
udata.BuildPacket(out UpdateObject packet);
|
udata.BuildPacket(out UpdateObject packet);
|
||||||
player.SendPacket(packet);
|
player.SendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static implicit operator IDoWork<Player>(ValuesUpdateForPlayerWithMaskSender obj) => obj.Invoke;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ namespace Game.Entities
|
|||||||
|
|
||||||
public void SetCreatedBySpellCast(ObjectGuid castId) { _createdBySpellCast = castId; }
|
public void SetCreatedBySpellCast(ObjectGuid castId) { _createdBySpellCast = castId; }
|
||||||
|
|
||||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
class ValuesUpdateForPlayerWithMaskSender
|
||||||
{
|
{
|
||||||
SceneObject Owner;
|
SceneObject Owner;
|
||||||
ObjectFieldData ObjectMask = new();
|
ObjectFieldData ObjectMask = new();
|
||||||
@@ -203,6 +203,8 @@ namespace Game.Entities
|
|||||||
udata.BuildPacket(out UpdateObject packet);
|
udata.BuildPacket(out UpdateObject packet);
|
||||||
player.SendPacket(packet);
|
player.SendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static implicit operator IDoWork<Player>(ValuesUpdateForPlayerWithMaskSender obj) => obj.Invoke;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2473,17 +2473,6 @@ namespace Game.Guilds
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void BroadcastWorker(Action<Player> _do, Player except = null)
|
|
||||||
{
|
|
||||||
foreach (var member in m_members.Values)
|
|
||||||
{
|
|
||||||
Player player = member.FindPlayer();
|
|
||||||
if (player != null)
|
|
||||||
if (player != except)
|
|
||||||
_do.Invoke(player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int GetMembersCount() { return m_members.Count; }
|
public int GetMembersCount() { return m_members.Count; }
|
||||||
|
|
||||||
public GuildAchievementMgr GetAchievementMgr() { return m_achievementSys; }
|
public GuildAchievementMgr GetAchievementMgr() { return m_achievementSys; }
|
||||||
|
|||||||
+946
-1727
File diff suppressed because it is too large
Load Diff
@@ -601,7 +601,7 @@ namespace Game.Maps
|
|||||||
// update active cells around players and active objects
|
// update active cells around players and active objects
|
||||||
ResetMarkedCells();
|
ResetMarkedCells();
|
||||||
|
|
||||||
var update = new UpdaterNotifier(diff);
|
var update = new ObjectUpdater(diff);
|
||||||
|
|
||||||
var grid_object_update = new Visitor(update, GridMapTypeMask.AllGrid);
|
var grid_object_update = new Visitor(update, GridMapTypeMask.AllGrid);
|
||||||
var world_object_update = new Visitor(update, GridMapTypeMask.AllWorld);
|
var world_object_update = new Visitor(update, GridMapTypeMask.AllWorld);
|
||||||
|
|||||||
@@ -2860,8 +2860,7 @@ namespace Game.Spells
|
|||||||
if (containerTypeMask != 0)
|
if (containerTypeMask != 0)
|
||||||
{
|
{
|
||||||
WorldObjectSpellAreaTargetCheck check = new(radius, unitOwner, refe, unitOwner, GetSpellInfo(), selectionType, condList, SpellTargetObjectTypes.Unit);
|
WorldObjectSpellAreaTargetCheck check = new(radius, unitOwner, refe, unitOwner, GetSpellInfo(), selectionType, condList, SpellTargetObjectTypes.Unit);
|
||||||
UnitListSearcher searcher = new(unitOwner, units, check);
|
UnitListSearcher searcher = new(PhasingHandler.GetAlwaysVisiblePhaseShift(), units, check);
|
||||||
searcher.i_phaseShift = PhasingHandler.GetAlwaysVisiblePhaseShift();
|
|
||||||
Spell.SearchTargets(searcher, containerTypeMask, unitOwner, unitOwner, radius + extraSearchRadius);
|
Spell.SearchTargets(searcher, containerTypeMask, unitOwner, unitOwner, radius + extraSearchRadius);
|
||||||
|
|
||||||
// by design WorldObjectSpellAreaTargetCheck allows not-in-world units (for spells) but for auras it is not acceptable
|
// by design WorldObjectSpellAreaTargetCheck allows not-in-world units (for spells) but for auras it is not acceptable
|
||||||
|
|||||||
@@ -1747,9 +1747,9 @@ namespace Game.Spells
|
|||||||
return null;
|
return null;
|
||||||
|
|
||||||
var check = new WorldObjectSpellNearbyTargetCheck(range, m_caster, m_spellInfo, selectionType, condList, objectType);
|
var check = new WorldObjectSpellNearbyTargetCheck(range, m_caster, m_spellInfo, selectionType, condList, objectType);
|
||||||
var searcher = new WorldObjectLastSearcher(m_caster, check, containerTypeMask);
|
var searcher = new WorldObjectLastSearcher(PhasingHandler.GetAlwaysVisiblePhaseShift(), check, containerTypeMask);
|
||||||
SearchTargets(searcher, containerTypeMask, m_caster, m_caster.GetPosition(), range);
|
SearchTargets(searcher, containerTypeMask, m_caster, m_caster.GetPosition(), range);
|
||||||
return searcher.GetTarget();
|
return searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SearchAreaTargets(List<WorldObject> targets, SpellEffectInfo spellEffectInfo, float range, Position position, WorldObject referer,
|
void SearchAreaTargets(List<WorldObject> targets, SpellEffectInfo spellEffectInfo, float range, Position position, WorldObject referer,
|
||||||
@@ -1761,7 +1761,7 @@ namespace Game.Spells
|
|||||||
|
|
||||||
float extraSearchRadius = range > 0.0f ? SharedConst.ExtraCellSearchRadius : 0.0f;
|
float extraSearchRadius = range > 0.0f ? SharedConst.ExtraCellSearchRadius : 0.0f;
|
||||||
var check = new WorldObjectSpellAreaTargetCheck(range, position, m_caster, referer, m_spellInfo, selectionType, condList, objectType, searchReason);
|
var check = new WorldObjectSpellAreaTargetCheck(range, position, m_caster, referer, m_spellInfo, selectionType, condList, objectType, searchReason);
|
||||||
var searcher = new WorldObjectListSearcher(m_caster, targets, check, containerTypeMask);
|
var searcher = new WorldObjectListSearcher(PhasingHandler.GetAlwaysVisiblePhaseShift(), targets, check, containerTypeMask);
|
||||||
SearchTargets(searcher, containerTypeMask, m_caster, position, range + extraSearchRadius);
|
SearchTargets(searcher, containerTypeMask, m_caster, position, range + extraSearchRadius);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1870,7 +1870,7 @@ namespace Game.Spells
|
|||||||
var check = new GameObjectFocusCheck(m_caster, m_spellInfo.RequiresSpellFocus);
|
var check = new GameObjectFocusCheck(m_caster, m_spellInfo.RequiresSpellFocus);
|
||||||
var searcher = new GameObjectSearcher(m_caster, check);
|
var searcher = new GameObjectSearcher(m_caster, check);
|
||||||
SearchTargets(searcher, GridMapTypeMask.GameObject, m_caster, m_caster, m_caster.GetVisibilityRange());
|
SearchTargets(searcher, GridMapTypeMask.GameObject, m_caster, m_caster, m_caster.GetVisibilityRange());
|
||||||
return searcher.GetTarget();
|
return searcher.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrepareDataForTriggerSystem()
|
void PrepareDataForTriggerSystem()
|
||||||
|
|||||||
@@ -5239,17 +5239,15 @@ namespace Game.Spells
|
|||||||
if (unitTarget == null)
|
if (unitTarget == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
List<WorldObject> objs = new();
|
var check = new ObjectEntryAndPrivateOwnerIfExistsCheck(unitTarget.GetGUID(), (uint)effectInfo.MiscValue);
|
||||||
ObjectEntryAndPrivateOwnerIfExistsCheck check = new(unitTarget.GetGUID(), (uint)effectInfo.MiscValue);
|
IDoWork<Conversation> work = conversation =>
|
||||||
WorldObjectListSearcher checker = new(unitTarget, objs, check, GridMapTypeMask.Conversation);
|
|
||||||
Cell.VisitGridObjects(unitTarget, checker, 100.0f);
|
|
||||||
|
|
||||||
foreach (WorldObject obj in objs)
|
|
||||||
{
|
{
|
||||||
Conversation convo = obj.ToConversation();
|
if (check.Invoke(conversation))
|
||||||
if (convo != null)
|
conversation.Remove();
|
||||||
convo.Remove();
|
};
|
||||||
}
|
|
||||||
|
ConversationWorker worker = new(unitTarget, work);
|
||||||
|
Cell.VisitGridObjects(unitTarget, worker, 100.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
[SpellEffectHandler(SpellEffectName.AddGarrisonFollower)]
|
[SpellEffectHandler(SpellEffectName.AddGarrisonFollower)]
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ using Game.DataStorage;
|
|||||||
using Game.Entities;
|
using Game.Entities;
|
||||||
using Game.Networking;
|
using Game.Networking;
|
||||||
using Game.Networking.Packets;
|
using Game.Networking.Packets;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace Game.Chat
|
namespace Game.Chat
|
||||||
@@ -16,7 +17,7 @@ namespace Game.Chat
|
|||||||
public virtual dynamic Invoke(Locale locale = Locale.enUS) { return default; }
|
public virtual dynamic Invoke(Locale locale = Locale.enUS) { return default; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ChatPacketSender : IDoWork<Player>
|
public class ChatPacketSender
|
||||||
{
|
{
|
||||||
ChatMsg Type;
|
ChatMsg Type;
|
||||||
Language Language;
|
Language Language;
|
||||||
@@ -72,6 +73,8 @@ namespace Game.Chat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static implicit operator IDoWork<Player>(ChatPacketSender obj) => obj.Invoke;
|
||||||
|
|
||||||
public void Invoke(Player player)
|
public void Invoke(Player player)
|
||||||
{
|
{
|
||||||
if (!player.MeetPlayerCondition(PlayerConditionID))
|
if (!player.MeetPlayerCondition(PlayerConditionID))
|
||||||
|
|||||||
@@ -447,8 +447,12 @@ namespace Game
|
|||||||
Max = 2,
|
Max = 2,
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CreatureTextLocalizer : IDoWork<Player>
|
public class CreatureTextLocalizer
|
||||||
{
|
{
|
||||||
|
Dictionary<Locale, ChatPacketSender> _packetCache = new();
|
||||||
|
MessageBuilder _builder;
|
||||||
|
ChatMsg _msgType;
|
||||||
|
|
||||||
public CreatureTextLocalizer(MessageBuilder builder, ChatMsg msgType)
|
public CreatureTextLocalizer(MessageBuilder builder, ChatMsg msgType)
|
||||||
{
|
{
|
||||||
_builder = builder;
|
_builder = builder;
|
||||||
@@ -484,9 +488,7 @@ namespace Game
|
|||||||
sender.Invoke(player);
|
sender.Invoke(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
Dictionary<Locale, ChatPacketSender> _packetCache = new();
|
public static implicit operator IDoWork<Player>(CreatureTextLocalizer obj) => obj.Invoke;
|
||||||
MessageBuilder _builder;
|
|
||||||
ChatMsg _msgType;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CreatureTextBuilder : MessageBuilder
|
public class CreatureTextBuilder : MessageBuilder
|
||||||
|
|||||||
@@ -2728,15 +2728,17 @@ namespace Game
|
|||||||
uint i_textId;
|
uint i_textId;
|
||||||
object[] i_args;
|
object[] i_args;
|
||||||
|
|
||||||
public class MultiplePacketSender : IDoWork<Player>
|
public class MultiplePacketSender
|
||||||
{
|
{
|
||||||
|
public List<ServerPacket> Packets = new();
|
||||||
|
|
||||||
public void Invoke(Player receiver)
|
public void Invoke(Player receiver)
|
||||||
{
|
{
|
||||||
foreach (var packet in Packets)
|
foreach (var packet in Packets)
|
||||||
receiver.SendPacket(packet);
|
receiver.SendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ServerPacket> Packets = new();
|
public static implicit operator IDoWork<Player>(MultiplePacketSender obj) => obj.Invoke;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -678,9 +678,9 @@ namespace Scripts.Spells.Generic
|
|||||||
AnyDeadUnitSpellTargetInRangeCheck<WorldObject> check = new(caster, max_range, GetSpellInfo(), SpellTargetCheckTypes.Enemy, SpellTargetObjectTypes.CorpseEnemy);
|
AnyDeadUnitSpellTargetInRangeCheck<WorldObject> check = new(caster, max_range, GetSpellInfo(), SpellTargetCheckTypes.Enemy, SpellTargetObjectTypes.CorpseEnemy);
|
||||||
WorldObjectSearcher searcher = new(caster, check);
|
WorldObjectSearcher searcher = new(caster, check);
|
||||||
Cell.VisitWorldObjects(caster, searcher, max_range);
|
Cell.VisitWorldObjects(caster, searcher, max_range);
|
||||||
if (searcher.GetTarget() == null)
|
if (searcher.GetResult() == null)
|
||||||
Cell.VisitGridObjects(caster, searcher, max_range);
|
Cell.VisitGridObjects(caster, searcher, max_range);
|
||||||
if (searcher.GetTarget() == null)
|
if (searcher.GetResult() == null)
|
||||||
return SpellCastResult.NoEdibleCorpses;
|
return SpellCastResult.NoEdibleCorpses;
|
||||||
return SpellCastResult.SpellCastOk;
|
return SpellCastResult.SpellCastOk;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user