improve the dest selection

This commit is contained in:
Grimdhex
2024-09-15 19:12:29 +02:00
parent 58bd4a74c6
commit c57d97ac9f

View File

@@ -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.