Hondacrx
2025-08-31 13:23:49 -04:00
parent 59c983d3ff
commit c5cccdec10
31 changed files with 1045 additions and 1807 deletions
@@ -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);
}
} }
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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)
+4 -4
View File
@@ -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)
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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);
+2 -1
View File
@@ -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;
} }
} }
} }
+3 -1
View File
@@ -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;
} }
} }
+3 -1
View File
@@ -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;
} }
} }
} }
+7 -5
View File
@@ -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;
} }
} }
+3 -1
View File
@@ -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;
} }
} }
} }
+3 -1
View File
@@ -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;
} }
} }
+3 -1
View File
@@ -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;
} }
} }
} }
+3 -1
View File
@@ -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;
} }
} }
+13 -9
View File
@@ -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;
} }
} }
+3 -1
View File
@@ -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;
} }
} }
+3 -1
View File
@@ -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;
} }
} }
} }
-11
View File
@@ -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; }
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -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);
+1 -2
View File
@@ -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
+4 -4
View File
@@ -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()
+8 -10
View File
@@ -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)]
+4 -1
View File
@@ -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))
+6 -4
View File
@@ -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
+4 -2
View File
@@ -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;
} }
} }
+2 -2
View File
@@ -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;
} }