improve the dest selection
This commit is contained in:
@@ -212,14 +212,22 @@ class spell_mother_shahraz_fatal_attraction : public SpellScript
|
||||
|
||||
void SetDest(SpellDestination& dest)
|
||||
{
|
||||
float constexpr minDist = 30.0f;
|
||||
float constexpr maxDist = 48.0f;
|
||||
|
||||
// Randomize the teleportation distance from the caster
|
||||
float const teleportDist = frand(minDist, maxDist);
|
||||
|
||||
// Initialize a first destination
|
||||
Position teleportDest = GetCaster()->GetRandomNearPosition(50.0f);
|
||||
Position teleportDest = GetCaster()->GetRandomNearPosition(teleportDist);
|
||||
|
||||
// Ensure that the destination is not too close to the caster.
|
||||
// @todo: Need maybe a LOS Check?
|
||||
while (teleportDest.GetExactDist(GetCaster()->GetPosition()) < 50.0f)
|
||||
// Add a check for LOS, to ensure to not be teleported under the map
|
||||
while (teleportDest.GetExactDist(GetCaster()) < minDist ||
|
||||
!GetCaster()->IsWithinLOS(teleportDest.GetPositionX(), teleportDest.GetPositionY(), teleportDest.GetPositionZ()))
|
||||
{
|
||||
teleportDest = GetCaster()->GetRandomNearPosition(50.0f);
|
||||
// If the conditions are not met, find a new destination.
|
||||
teleportDest = GetCaster()->GetRandomNearPosition(teleportDist);
|
||||
}
|
||||
|
||||
// When a valid destination is found, relocate it.
|
||||
|
||||
Reference in New Issue
Block a user