Core/Misc: Kill AnyPlayerInObjectRangeCheck (duplicate of AnyUnitInObjectRangeCheck)
Port From (https://github.com/TrinityCore/TrinityCore/commit/0f9a0accf17ba3a9f20d6a7575b51ed2cb09a73c)
This commit is contained in:
@@ -638,7 +638,7 @@ namespace Game.Entities
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Environmental trap: Any player
|
// Environmental trap: Any player
|
||||||
var check = new AnyPlayerInObjectRangeCheck(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.GetTarget();
|
||||||
|
|||||||
@@ -3025,7 +3025,7 @@ namespace Game.Entities
|
|||||||
public List<Player> GetPlayerListInGrid(float maxSearchRange, bool alive = true)
|
public List<Player> GetPlayerListInGrid(float maxSearchRange, bool alive = true)
|
||||||
{
|
{
|
||||||
List<Player> playerList = new();
|
List<Player> playerList = new();
|
||||||
var checker = new AnyPlayerInObjectRangeCheck(this, maxSearchRange, alive);
|
var checker = new AnyUnitInObjectRangeCheck(this, maxSearchRange, alive);
|
||||||
var searcher = new PlayerListSearcher(this, playerList, checker);
|
var searcher = new PlayerListSearcher(this, playerList, checker);
|
||||||
|
|
||||||
Cell.VisitWorldObjects(this, searcher, maxSearchRange);
|
Cell.VisitWorldObjects(this, searcher, maxSearchRange);
|
||||||
@@ -3116,26 +3116,24 @@ namespace Game.Entities
|
|||||||
if (!IsInWorld)
|
if (!IsInWorld)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
List<Player> targets = new();
|
void destroyer(Player player)
|
||||||
var check = new AnyPlayerInObjectRangeCheck(this, GetVisibilityRange(), false);
|
|
||||||
var searcher = new PlayerListSearcher(this, targets, check);
|
|
||||||
|
|
||||||
Cell.VisitWorldObjects(this, searcher, GetVisibilityRange());
|
|
||||||
foreach (Player player in targets)
|
|
||||||
{
|
{
|
||||||
if (player == this)
|
if (player == this)
|
||||||
continue;
|
return;
|
||||||
|
|
||||||
if (!player.HaveAtClient(this))
|
if (!player.HaveAtClient(this))
|
||||||
continue;
|
return;
|
||||||
|
|
||||||
Unit unit = ToUnit();
|
Unit unit = ToUnit();
|
||||||
if (unit != null && unit.GetCharmerGUID() == player.GetGUID())// @todo this is for puppet
|
if (unit != null && unit.GetCharmerGUID() == player.GetGUID())// @todo this is for puppet
|
||||||
continue;
|
return;
|
||||||
|
|
||||||
DestroyForPlayer(player);
|
DestroyForPlayer(player);
|
||||||
player.m_clientGUIDs.Remove(GetGUID());
|
player.m_clientGUIDs.Remove(GetGUID());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PlayerDistWorker worker = new(this, GetVisibilityRange(), destroyer);
|
||||||
|
Cell.VisitWorldObjects(this, worker, GetVisibilityRange());
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void UpdateObjectVisibility(bool force = true)
|
public virtual void UpdateObjectVisibility(bool force = true)
|
||||||
|
|||||||
@@ -920,13 +920,20 @@ namespace Game.Maps
|
|||||||
{
|
{
|
||||||
WorldObject i_searcher;
|
WorldObject i_searcher;
|
||||||
float i_dist;
|
float i_dist;
|
||||||
IDoWork<Player> _do;
|
Action<Player> _do;
|
||||||
|
|
||||||
public PlayerDistWorker(WorldObject searcher, float _dist, IDoWork<Player> @do)
|
public PlayerDistWorker(WorldObject searcher, float _dist, IDoWork<Player> @do)
|
||||||
{
|
{
|
||||||
i_searcher = searcher;
|
i_searcher = searcher;
|
||||||
i_dist = _dist;
|
i_dist = _dist;
|
||||||
_do = @do;
|
_do = @do.Invoke;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlayerDistWorker(WorldObject searcher, float _dist, Action<Player> destroyer)
|
||||||
|
{
|
||||||
|
i_searcher = searcher;
|
||||||
|
i_dist = _dist;
|
||||||
|
_do = destroyer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Visit(IList<Player> objs)
|
public override void Visit(IList<Player> objs)
|
||||||
@@ -2604,31 +2611,6 @@ namespace Game.Maps
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class AnyPlayerInObjectRangeCheck : ICheck<Player>
|
|
||||||
{
|
|
||||||
public AnyPlayerInObjectRangeCheck(WorldObject obj, float range, bool reqAlive = true)
|
|
||||||
{
|
|
||||||
_obj = obj;
|
|
||||||
_range = range;
|
|
||||||
_reqAlive = reqAlive;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Invoke(Player pl)
|
|
||||||
{
|
|
||||||
if (_reqAlive && !pl.IsAlive())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (!_obj.IsWithinDist(pl, _range))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
WorldObject _obj;
|
|
||||||
float _range;
|
|
||||||
bool _reqAlive;
|
|
||||||
}
|
|
||||||
|
|
||||||
class AnyPlayerInPositionRangeCheck : ICheck<Player>
|
class AnyPlayerInPositionRangeCheck : ICheck<Player>
|
||||||
{
|
{
|
||||||
public AnyPlayerInPositionRangeCheck(Position pos, float range, bool reqAlive = true)
|
public AnyPlayerInPositionRangeCheck(Position pos, float range, bool reqAlive = true)
|
||||||
|
|||||||
@@ -51,21 +51,15 @@ namespace Scripts.Events.LoveIsInTheAir
|
|||||||
bool foundSomeone = false;
|
bool foundSomeone = false;
|
||||||
// For nearby players, check if they have the same aura. If so, cast Romantic Picnic (45123)
|
// For nearby players, check if they have the same aura. If so, cast Romantic Picnic (45123)
|
||||||
// required by achievement and "hearts" visual
|
// required by achievement and "hearts" visual
|
||||||
List<Player> playerList = new();
|
List<Player> playerList = target.GetPlayerListInGrid(SharedConst.InteractionDistance * 2);
|
||||||
AnyPlayerInObjectRangeCheck checker = new(target, SharedConst.InteractionDistance * 2);
|
foreach (Player playerFound in playerList)
|
||||||
PlayerListSearcher searcher = new(target, playerList, checker);
|
|
||||||
Cell.VisitWorldObjects(target, searcher, SharedConst.InteractionDistance * 2);
|
|
||||||
foreach (var playerFound in playerList)
|
|
||||||
{
|
{
|
||||||
if (playerFound != null)
|
if (target != playerFound && playerFound.HasAura(GetId()))
|
||||||
{
|
{
|
||||||
if (target != playerFound && playerFound.HasAura(GetId()))
|
playerFound.CastSpell(playerFound, SpellRomanticPicnicAchiev, true);
|
||||||
{
|
target.CastSpell(target, SpellRomanticPicnicAchiev, true);
|
||||||
playerFound.CastSpell(playerFound, SpellRomanticPicnicAchiev, true);
|
foundSomeone = true;
|
||||||
target.CastSpell(target, SpellRomanticPicnicAchiev, true);
|
break;
|
||||||
foundSomeone = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -648,16 +648,16 @@ namespace Scripts.Spells.Azerite
|
|||||||
{
|
{
|
||||||
Unit caster = GetCaster();
|
Unit caster = GetCaster();
|
||||||
// Check for player that is in 65 y range
|
// Check for player that is in 65 y range
|
||||||
List<Player> playerList = new();
|
List<Player> playerList = caster.GetPlayerListInGrid(65.0f);
|
||||||
AnyPlayerInObjectRangeCheck checker = new(caster, 65.0f);
|
|
||||||
PlayerListSearcher searcher = new(caster, playerList, checker);
|
|
||||||
Cell.VisitWorldObjects(caster, searcher, 65.0f);
|
|
||||||
|
|
||||||
foreach (var player in playerList)
|
foreach (var player in playerList)
|
||||||
|
{
|
||||||
// Check if found player target is on fly mount or using flying form
|
// Check if found player target is on fly mount or using flying form
|
||||||
if (player.HasAuraType(AuraType.Fly) || player.HasAuraType(AuraType.ModIncreaseMountedFlightSpeed))
|
if (player.HasAuraType(AuraType.Fly) || player.HasAuraType(AuraType.ModIncreaseMountedFlightSpeed))
|
||||||
|
{
|
||||||
// Summom Fel Cannon (bunny version) at found player
|
// Summom Fel Cannon (bunny version) at found player
|
||||||
caster.SummonCreature(NpcFelCannon2, player.GetPositionX(), player.GetPositionY(), player.GetPositionZ());
|
caster.SummonCreature(NpcFelCannon2, player.GetPositionX(), player.GetPositionY(), player.GetPositionZ());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Register()
|
public override void Register()
|
||||||
|
|||||||
Reference in New Issue
Block a user