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);
|
||||
}
|
||||
|
||||
public interface IDoWork<in T>
|
||||
{
|
||||
void Invoke(T obj);
|
||||
}
|
||||
public delegate void IDoWork<in T>(T obj);
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace Game.AI
|
||||
var u_check = new NearestAttackableUnitInObjectRangeCheck(me, me.GetCharmerOrOwnerOrSelf(), max_range);
|
||||
var checker = new UnitLastSearcher(me, u_check);
|
||||
Cell.VisitAllObjects(me, checker, max_range + extraSearchRadius);
|
||||
victim = checker.GetTarget();
|
||||
victim = checker.GetResult();
|
||||
}
|
||||
|
||||
// If have target
|
||||
|
||||
@@ -372,7 +372,7 @@ namespace Game.AI
|
||||
var searcher = new UnitLastSearcher(me, u_check);
|
||||
Cell.VisitAllObjects(me, searcher, range);
|
||||
|
||||
return searcher.GetTarget();
|
||||
return searcher.GetResult();
|
||||
}
|
||||
|
||||
//Returns a list of friendly CC'd units within range
|
||||
@@ -404,7 +404,7 @@ namespace Game.AI
|
||||
var searcher = new PlayerSearcher(me, check);
|
||||
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)
|
||||
|
||||
@@ -4257,7 +4257,7 @@ namespace Game.AI
|
||||
var u_check = new MostHPMissingInRange<Unit>(_me, range, MinHPDiff);
|
||||
var searcher = new UnitLastSearcher(_me, u_check);
|
||||
Cell.VisitGridObjects(_me, searcher, range);
|
||||
return searcher.GetTarget();
|
||||
return searcher.GetResult();
|
||||
}
|
||||
|
||||
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);
|
||||
Cell.VisitAllObjects(_me, searcher, range);
|
||||
|
||||
return searcher.GetTarget();
|
||||
return searcher.GetResult();
|
||||
}
|
||||
|
||||
Unit DoSelectLowestHpPercentFriendly(float range, uint minHpPct, uint maxHpPct)
|
||||
@@ -4277,7 +4277,7 @@ namespace Game.AI
|
||||
MostHPPercentMissingInRange u_check = new(_me, range, minHpPct, maxHpPct);
|
||||
UnitLastSearcher searcher = new(_me, u_check);
|
||||
Cell.VisitGridObjects(_me, searcher, range);
|
||||
return searcher.GetTarget();
|
||||
return searcher.GetResult();
|
||||
}
|
||||
|
||||
void DoFindFriendlyCC(List<Creature> creatures, float range)
|
||||
@@ -4308,7 +4308,7 @@ namespace Game.AI
|
||||
var u_check = new AnyFriendlyUnitInObjectRangeCheck(_me, _me, range);
|
||||
var searcher = new UnitLastSearcher(_me, u_check);
|
||||
Cell.VisitAllObjects(_me, searcher, range);
|
||||
return searcher.GetTarget();
|
||||
return searcher.GetResult();
|
||||
}
|
||||
|
||||
public void SetTimedActionList(SmartScriptHolder e, uint entry, Unit invoker, uint startFromEventId = 0)
|
||||
|
||||
@@ -558,7 +558,7 @@ namespace Game
|
||||
|
||||
void SendCalendarEventInviteAlert(CalendarEvent calendarEvent, CalendarInvite invite)
|
||||
{
|
||||
var packetBuilder = (Player receiver) =>
|
||||
IDoWork<Player> packetBuilder = (Player receiver) =>
|
||||
{
|
||||
CalendarInviteAlert packet = new();
|
||||
packet.Date.SetUtcTimeFromUnixTime(calendarEvent.Date);
|
||||
|
||||
@@ -400,7 +400,7 @@ namespace Game.Chat
|
||||
NearestGameObjectCheck check = new(pl);
|
||||
GameObjectLastSearcher searcher = new(pl, check);
|
||||
Cell.VisitGridObjects(pl, searcher, MapConst.SizeofGrids);
|
||||
return searcher.GetTarget();
|
||||
return searcher.GetResult();
|
||||
}
|
||||
|
||||
public string PlayerLink(string name)
|
||||
|
||||
@@ -142,7 +142,7 @@ namespace Game.Chat
|
||||
var check = new AllCreaturesOfEntryInRange(handler.GetPlayer(), entry, 20.0f);
|
||||
var searcher = new CreatureSearcher(handler.GetPlayer(), check);
|
||||
Cell.VisitAllObjects(handler.GetPlayer(), searcher, 30.0f);
|
||||
var passenger = searcher.GetTarget();
|
||||
var passenger = searcher.GetResult();
|
||||
if (passenger == null || passenger == target)
|
||||
return false;
|
||||
passenger.EnterVehicle(target, seatId);
|
||||
|
||||
@@ -1571,7 +1571,8 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
// 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());
|
||||
|
||||
// Now handle any that had despawned, but had respawn time logged.
|
||||
|
||||
@@ -1589,7 +1589,7 @@ namespace Game.Entities
|
||||
|
||||
AreaTriggerAI _ai;
|
||||
|
||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
||||
class ValuesUpdateForPlayerWithMaskSender
|
||||
{
|
||||
AreaTrigger Owner;
|
||||
ObjectFieldData ObjectMask = new();
|
||||
@@ -1609,6 +1609,8 @@ namespace Game.Entities
|
||||
udata.BuildPacket(out UpdateObject updateObject);
|
||||
player.SendPacket(updateObject);
|
||||
}
|
||||
|
||||
public static implicit operator IDoWork<Player>(ValuesUpdateForPlayerWithMaskSender obj) => obj.Invoke;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -386,7 +386,7 @@ namespace Game.Entities
|
||||
|
||||
ConversationAI _ai;
|
||||
|
||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
||||
class ValuesUpdateForPlayerWithMaskSender
|
||||
{
|
||||
Conversation Owner;
|
||||
ObjectFieldData ObjectMask = new();
|
||||
@@ -406,6 +406,8 @@ namespace Game.Entities
|
||||
udata.BuildPacket(out UpdateObject packet);
|
||||
player.SendPacket(packet);
|
||||
}
|
||||
|
||||
public static implicit operator IDoWork<Player>(ValuesUpdateForPlayerWithMaskSender obj) => obj.Invoke;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -320,7 +320,7 @@ namespace Game.Entities
|
||||
long m_time;
|
||||
CellCoord _cellCoord; // gride for corpse position for fast search
|
||||
|
||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
||||
class ValuesUpdateForPlayerWithMaskSender
|
||||
{
|
||||
Corpse Owner;
|
||||
ObjectFieldData ObjectMask = new();
|
||||
@@ -340,6 +340,8 @@ namespace Game.Entities
|
||||
udata.BuildPacket(out UpdateObject 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);
|
||||
Cell.VisitGridObjects(this, searcher, radius);
|
||||
|
||||
var creature = searcher.GetTarget();
|
||||
var creature = searcher.GetResult();
|
||||
|
||||
SetNoSearchAssistance(true);
|
||||
|
||||
@@ -2323,7 +2323,7 @@ namespace Game.Entities
|
||||
var searcher = new UnitLastSearcher(this, u_check);
|
||||
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.
|
||||
@@ -2340,7 +2340,7 @@ namespace Game.Entities
|
||||
|
||||
Cell.VisitAllObjects(this, searcher, Math.Max(dist, SharedConst.AttackDistance));
|
||||
|
||||
return searcher.GetTarget();
|
||||
return searcher.GetResult();
|
||||
}
|
||||
|
||||
public void SendAIReaction(AiReaction reactionType)
|
||||
@@ -3327,7 +3327,7 @@ namespace Game.Entities
|
||||
var u_check = new NearestHostileUnitInAggroRangeCheck(this, useLOS, ignoreCivilians);
|
||||
var searcher = new UnitSearcher(this, u_check);
|
||||
Cell.VisitGridObjects(this, searcher, SharedConst.MaxAggroRadius);
|
||||
return searcher.GetTarget();
|
||||
return searcher.GetResult();
|
||||
}
|
||||
|
||||
public override float GetNativeObjectScale()
|
||||
@@ -3880,7 +3880,7 @@ namespace Game.Entities
|
||||
base.ClearUpdateMask(remove);
|
||||
}
|
||||
|
||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
||||
class ValuesUpdateForPlayerWithMaskSender
|
||||
{
|
||||
Creature Owner;
|
||||
ObjectFieldData ObjectMask = new();
|
||||
@@ -3900,6 +3900,8 @@ namespace Game.Entities
|
||||
udata.BuildPacket(out UpdateObject 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
|
||||
bool _isViewpoint;
|
||||
|
||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
||||
class ValuesUpdateForPlayerWithMaskSender
|
||||
{
|
||||
DynamicObject Owner;
|
||||
ObjectFieldData ObjectMask = new();
|
||||
@@ -327,6 +327,8 @@ namespace Game.Entities
|
||||
udata.BuildPacket(out UpdateObject 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 searcher = new UnitLastSearcher(this, checker);
|
||||
Cell.VisitAllObjects(this, searcher, radius);
|
||||
target = searcher.GetTarget();
|
||||
target = searcher.GetResult();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -641,7 +641,7 @@ namespace Game.Entities
|
||||
var check = new AnyUnitInObjectRangeCheck(this, radius);
|
||||
var searcher = new PlayerSearcher(this, check);
|
||||
Cell.VisitWorldObjects(this, searcher, radius);
|
||||
target = searcher.GetTarget();
|
||||
target = searcher.GetResult();
|
||||
}
|
||||
|
||||
if (target != null)
|
||||
@@ -1465,7 +1465,7 @@ namespace Game.Entities
|
||||
var checker = new GameObjectSearcher(this, u_check);
|
||||
|
||||
Cell.VisitGridObjects(this, checker, range);
|
||||
return checker.GetTarget();
|
||||
return checker.GetResult();
|
||||
}
|
||||
|
||||
public void ResetDoorOrButton()
|
||||
@@ -3975,7 +3975,7 @@ namespace Game.Entities
|
||||
ObjectGuid m_linkedTrap;
|
||||
#endregion
|
||||
|
||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
||||
class ValuesUpdateForPlayerWithMaskSender
|
||||
{
|
||||
public GameObject Owner;
|
||||
public ObjectFieldData ObjectMask = new();
|
||||
@@ -3995,6 +3995,8 @@ namespace Game.Entities
|
||||
udata.BuildPacket(out UpdateObject 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];
|
||||
}
|
||||
|
||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
||||
class ValuesUpdateForPlayerWithMaskSender
|
||||
{
|
||||
AzeriteEmpoweredItem Owner;
|
||||
ObjectFieldData ObjectMask = new();
|
||||
@@ -245,6 +245,8 @@ namespace Game.Entities
|
||||
udata.BuildPacket(out UpdateObject 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;
|
||||
ObjectFieldData ObjectMask = new();
|
||||
@@ -531,6 +531,8 @@ namespace Game.Entities
|
||||
udata.BuildPacket(out UpdateObject packet);
|
||||
player.SendPacket(packet);
|
||||
}
|
||||
|
||||
public static implicit operator IDoWork<Player>(ValuesUpdateForPlayerWithMaskSender obj) => obj.Invoke;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -259,7 +259,7 @@ namespace Game.Entities
|
||||
ContainerData m_containerData;
|
||||
Item[] m_bagslot = new Item[98];
|
||||
|
||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
||||
class ValuesUpdateForPlayerWithMaskSender
|
||||
{
|
||||
Bag Owner;
|
||||
ObjectFieldData ObjectMask = new();
|
||||
@@ -280,6 +280,8 @@ namespace Game.Entities
|
||||
udata.BuildPacket(out UpdateObject 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);
|
||||
#endregion
|
||||
|
||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
||||
class ValuesUpdateForPlayerWithMaskSender
|
||||
{
|
||||
Item Owner;
|
||||
ObjectFieldData ObjectMask = new();
|
||||
@@ -2858,6 +2858,8 @@ namespace Game.Entities
|
||||
udata.BuildPacket(out UpdateObject 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);
|
||||
|
||||
Cell.VisitAllObjects(this, searcher, range);
|
||||
return searcher.GetTarget();
|
||||
return searcher.GetResult();
|
||||
}
|
||||
|
||||
public Creature FindNearestCreatureWithOptions(float range, FindCreatureOptions options)
|
||||
@@ -1654,7 +1654,7 @@ namespace Game.Entities
|
||||
searcher.i_phaseShift = PhasingHandler.GetAlwaysVisiblePhaseShift();
|
||||
|
||||
Cell.VisitAllObjects(this, searcher, range);
|
||||
return searcher.GetTarget();
|
||||
return searcher.GetResult();
|
||||
}
|
||||
|
||||
public GameObject FindNearestGameObject(uint entry, float range, bool spawnedOnly = true)
|
||||
@@ -1663,7 +1663,7 @@ namespace Game.Entities
|
||||
var searcher = new GameObjectLastSearcher(this, checker);
|
||||
|
||||
Cell.VisitGridObjects(this, searcher, range);
|
||||
return searcher.GetTarget();
|
||||
return searcher.GetResult();
|
||||
}
|
||||
|
||||
public GameObject FindNearestGameObjectWithOptions(float range, FindGameObjectOptions options)
|
||||
@@ -1675,7 +1675,7 @@ namespace Game.Entities
|
||||
searcher.i_phaseShift = PhasingHandler.GetAlwaysVisiblePhaseShift();
|
||||
|
||||
Cell.VisitGridObjects(this, searcher, range);
|
||||
return searcher.GetTarget();
|
||||
return searcher.GetResult();
|
||||
}
|
||||
|
||||
public GameObject FindNearestUnspawnedGameObject(uint entry, float range)
|
||||
@@ -1684,7 +1684,7 @@ namespace Game.Entities
|
||||
GameObjectLastSearcher searcher = new(this, checker);
|
||||
|
||||
Cell.VisitGridObjects(this, searcher, range);
|
||||
return searcher.GetTarget();
|
||||
return searcher.GetResult();
|
||||
}
|
||||
|
||||
public GameObject FindNearestGameObjectOfType(GameObjectTypes type, float range)
|
||||
@@ -1693,7 +1693,7 @@ namespace Game.Entities
|
||||
var searcher = new GameObjectLastSearcher(this, checker);
|
||||
|
||||
Cell.VisitGridObjects(this, searcher, range);
|
||||
return searcher.GetTarget();
|
||||
return searcher.GetResult();
|
||||
}
|
||||
|
||||
public Player SelectNearestPlayer(float range)
|
||||
@@ -1701,7 +1701,7 @@ namespace Game.Entities
|
||||
var checker = new NearestPlayerInObjectRangeCheck(this, range);
|
||||
var searcher = new PlayerLastSearcher(this, checker);
|
||||
Cell.VisitWorldObjects(this, searcher, range);
|
||||
return searcher.GetTarget();
|
||||
return searcher.GetResult();
|
||||
}
|
||||
|
||||
public ObjectGuid GetCharmerOrOwnerOrOwnGUID()
|
||||
@@ -4059,7 +4059,7 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
class CombatLogSender : IDoWork<Player>
|
||||
class CombatLogSender
|
||||
{
|
||||
CombatLogServerPacket i_message;
|
||||
|
||||
@@ -4075,6 +4075,8 @@ namespace Game.Entities
|
||||
|
||||
player.SendPacket(i_message);
|
||||
}
|
||||
|
||||
public static implicit operator IDoWork<Player>(CombatLogSender obj) => obj.Invoke;
|
||||
}
|
||||
|
||||
public struct FindCreatureOptions
|
||||
@@ -4257,7 +4259,7 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
struct WorldObjectClientDestroyWork : IDoWork<Player>
|
||||
struct WorldObjectClientDestroyWork
|
||||
{
|
||||
public WorldObject obj;
|
||||
|
||||
@@ -4276,5 +4278,7 @@ namespace Game.Entities
|
||||
obj.DestroyForPlayer(player);
|
||||
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> _playerDataFlagsNeedSave = new();
|
||||
|
||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
||||
class ValuesUpdateForPlayerWithMaskSender
|
||||
{
|
||||
Player Owner;
|
||||
ObjectFieldData ObjectMask = new();
|
||||
@@ -277,6 +277,8 @@ namespace Game.Entities
|
||||
udata.BuildPacket(out UpdateObject 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; }
|
||||
|
||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
||||
class ValuesUpdateForPlayerWithMaskSender
|
||||
{
|
||||
SceneObject Owner;
|
||||
ObjectFieldData ObjectMask = new();
|
||||
@@ -203,6 +203,8 @@ namespace Game.Entities
|
||||
udata.BuildPacket(out UpdateObject 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 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
|
||||
ResetMarkedCells();
|
||||
|
||||
var update = new UpdaterNotifier(diff);
|
||||
var update = new ObjectUpdater(diff);
|
||||
|
||||
var grid_object_update = new Visitor(update, GridMapTypeMask.AllGrid);
|
||||
var world_object_update = new Visitor(update, GridMapTypeMask.AllWorld);
|
||||
|
||||
@@ -2860,8 +2860,7 @@ namespace Game.Spells
|
||||
if (containerTypeMask != 0)
|
||||
{
|
||||
WorldObjectSpellAreaTargetCheck check = new(radius, unitOwner, refe, unitOwner, GetSpellInfo(), selectionType, condList, SpellTargetObjectTypes.Unit);
|
||||
UnitListSearcher searcher = new(unitOwner, units, check);
|
||||
searcher.i_phaseShift = PhasingHandler.GetAlwaysVisiblePhaseShift();
|
||||
UnitListSearcher searcher = new(PhasingHandler.GetAlwaysVisiblePhaseShift(), units, check);
|
||||
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
|
||||
|
||||
@@ -1747,9 +1747,9 @@ namespace Game.Spells
|
||||
return null;
|
||||
|
||||
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);
|
||||
return searcher.GetTarget();
|
||||
return searcher.GetResult();
|
||||
}
|
||||
|
||||
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;
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -1870,7 +1870,7 @@ namespace Game.Spells
|
||||
var check = new GameObjectFocusCheck(m_caster, m_spellInfo.RequiresSpellFocus);
|
||||
var searcher = new GameObjectSearcher(m_caster, check);
|
||||
SearchTargets(searcher, GridMapTypeMask.GameObject, m_caster, m_caster, m_caster.GetVisibilityRange());
|
||||
return searcher.GetTarget();
|
||||
return searcher.GetResult();
|
||||
}
|
||||
|
||||
void PrepareDataForTriggerSystem()
|
||||
|
||||
@@ -5239,17 +5239,15 @@ namespace Game.Spells
|
||||
if (unitTarget == null)
|
||||
return;
|
||||
|
||||
List<WorldObject> objs = new();
|
||||
ObjectEntryAndPrivateOwnerIfExistsCheck check = new(unitTarget.GetGUID(), (uint)effectInfo.MiscValue);
|
||||
WorldObjectListSearcher checker = new(unitTarget, objs, check, GridMapTypeMask.Conversation);
|
||||
Cell.VisitGridObjects(unitTarget, checker, 100.0f);
|
||||
|
||||
foreach (WorldObject obj in objs)
|
||||
var check = new ObjectEntryAndPrivateOwnerIfExistsCheck(unitTarget.GetGUID(), (uint)effectInfo.MiscValue);
|
||||
IDoWork<Conversation> work = conversation =>
|
||||
{
|
||||
Conversation convo = obj.ToConversation();
|
||||
if (convo != null)
|
||||
convo.Remove();
|
||||
}
|
||||
if (check.Invoke(conversation))
|
||||
conversation.Remove();
|
||||
};
|
||||
|
||||
ConversationWorker worker = new(unitTarget, work);
|
||||
Cell.VisitGridObjects(unitTarget, worker, 100.0f);
|
||||
}
|
||||
|
||||
[SpellEffectHandler(SpellEffectName.AddGarrisonFollower)]
|
||||
|
||||
@@ -7,6 +7,7 @@ using Game.DataStorage;
|
||||
using Game.Entities;
|
||||
using Game.Networking;
|
||||
using Game.Networking.Packets;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Game.Chat
|
||||
@@ -16,7 +17,7 @@ namespace Game.Chat
|
||||
public virtual dynamic Invoke(Locale locale = Locale.enUS) { return default; }
|
||||
}
|
||||
|
||||
public class ChatPacketSender : IDoWork<Player>
|
||||
public class ChatPacketSender
|
||||
{
|
||||
ChatMsg Type;
|
||||
Language Language;
|
||||
@@ -72,6 +73,8 @@ namespace Game.Chat
|
||||
}
|
||||
}
|
||||
|
||||
public static implicit operator IDoWork<Player>(ChatPacketSender obj) => obj.Invoke;
|
||||
|
||||
public void Invoke(Player player)
|
||||
{
|
||||
if (!player.MeetPlayerCondition(PlayerConditionID))
|
||||
|
||||
@@ -447,8 +447,12 @@ namespace Game
|
||||
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)
|
||||
{
|
||||
_builder = builder;
|
||||
@@ -484,9 +488,7 @@ namespace Game
|
||||
sender.Invoke(player);
|
||||
}
|
||||
|
||||
Dictionary<Locale, ChatPacketSender> _packetCache = new();
|
||||
MessageBuilder _builder;
|
||||
ChatMsg _msgType;
|
||||
public static implicit operator IDoWork<Player>(CreatureTextLocalizer obj) => obj.Invoke;
|
||||
}
|
||||
|
||||
public class CreatureTextBuilder : MessageBuilder
|
||||
|
||||
@@ -2728,15 +2728,17 @@ namespace Game
|
||||
uint i_textId;
|
||||
object[] i_args;
|
||||
|
||||
public class MultiplePacketSender : IDoWork<Player>
|
||||
public class MultiplePacketSender
|
||||
{
|
||||
public List<ServerPacket> Packets = new();
|
||||
|
||||
public void Invoke(Player receiver)
|
||||
{
|
||||
foreach (var packet in Packets)
|
||||
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);
|
||||
WorldObjectSearcher searcher = new(caster, check);
|
||||
Cell.VisitWorldObjects(caster, searcher, max_range);
|
||||
if (searcher.GetTarget() == null)
|
||||
if (searcher.GetResult() == null)
|
||||
Cell.VisitGridObjects(caster, searcher, max_range);
|
||||
if (searcher.GetTarget() == null)
|
||||
if (searcher.GetResult() == null)
|
||||
return SpellCastResult.NoEdibleCorpses;
|
||||
return SpellCastResult.SpellCastOk;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user