Merge pull request #86 from H0zen/develop21

Validate the spawn distance passed to RandomMovementGenerator ctor
This commit is contained in:
Antz 2016-02-19 15:22:54 +00:00
commit 435d78e1aa
4 changed files with 16 additions and 12 deletions

View File

@ -30,6 +30,17 @@
#include "movement/MoveSplineInit.h" #include "movement/MoveSplineInit.h"
#include "movement/MoveSpline.h" #include "movement/MoveSpline.h"
template<>
RandomMovementGenerator<Creature>::RandomMovementGenerator(float x, float y, float z, float radius, float verticalZ) :
i_nextMoveTime(0), i_x(x), i_y(y), i_z(z), i_radius(radius), i_verticalZ(verticalZ)
{
if (radius < 0.1f)
{
DEBUG_FILTER_LOG(LOG_FILTER_AI_AND_MOVEGENSS, "RandomMovementGenerator<Creature> constructor: wrong value for spawn distance. Set to 0.1f");
i_radius = 0.1f;
}
}
template<> template<>
RandomMovementGenerator<Creature>::RandomMovementGenerator(const Creature& creature) RandomMovementGenerator<Creature>::RandomMovementGenerator(const Creature& creature)
{ {

View File

@ -36,8 +36,7 @@ class RandomMovementGenerator
{ {
public: public:
explicit RandomMovementGenerator(const Creature&); explicit RandomMovementGenerator(const Creature&);
explicit RandomMovementGenerator(float x, float y, float z, float radius, float verticalZ = 0.0f) : explicit RandomMovementGenerator(float x, float y, float z, float radius, float verticalZ = 0.0f);
i_nextMoveTime(0), i_x(x), i_y(y), i_z(z), i_radius(radius), i_verticalZ(verticalZ) {}
void _setRandomLocation(T&); void _setRandomLocation(T&);
void Initialize(T&); void Initialize(T&);

View File

@ -2280,21 +2280,19 @@ bool Map::GetReachableRandomPosition(Unit* unit, float& x, float& y, float& z, f
isSwimming = static_cast<Creature*>(unit)->IsSwimming(); isSwimming = static_cast<Creature*>(unit)->IsSwimming();
break; break;
default: default:
sLog.outError("Map::GetReachableRandomPosition> Unsupported unit type is passed!"); sLog.outError("Map::GetReachableRandomPosition> Unsupported unit (%s) is passed!", unit->GetGuidStr().c_str());
return false; return false;
} }
if (radius < 0.1f) if (radius < 0.1f)
{ {
sLog.outError("Map::GetReachableRandomPosition> Unsupported unit type is passed!"); sLog.outError("Map::GetReachableRandomPosition> Invalid radius (%f) for %s", radius, unit->GetGuidStr().c_str());
return false; return false;
} }
if (isFlying) if (isFlying)
{ {
newDestAssigned = GetRandomPointInTheAir(i_x, i_y, i_z, radius); newDestAssigned = GetRandomPointInTheAir(i_x, i_y, i_z, radius);
/*if (newDestAssigned)
sLog.outString("Generating air random point for %s", GetGuidStr().c_str());*/
} }
else else
{ {
@ -2303,14 +2301,10 @@ bool Map::GetReachableRandomPosition(Unit* unit, float& x, float& y, float& z, f
if (isSwimming && (res & (LIQUID_MAP_UNDER_WATER | LIQUID_MAP_IN_WATER))) if (isSwimming && (res & (LIQUID_MAP_UNDER_WATER | LIQUID_MAP_IN_WATER)))
{ {
newDestAssigned = GetRandomPointUnderWater(i_x, i_y, i_z, radius, liquid_status); newDestAssigned = GetRandomPointUnderWater(i_x, i_y, i_z, radius, liquid_status);
/*if (newDestAssigned)
sLog.outString("Generating swim random point for %s", GetGuidStr().c_str());*/
} }
else else
{ {
newDestAssigned = GetReachableRandomPointOnGround(i_x, i_y, i_z, radius); newDestAssigned = GetReachableRandomPointOnGround(i_x, i_y, i_z, radius);
/*if (newDestAssigned)
sLog.outString("Generating ground random point for %s", GetGuidStr().c_str());*/
} }
} }

View File

@ -38,6 +38,6 @@
#define WORLD_DB_VERSION_NR 21 #define WORLD_DB_VERSION_NR 21
#define WORLD_DB_STRUCTURE_NR 3 #define WORLD_DB_STRUCTURE_NR 3
#define WORLD_DB_CONTENT_NR 1 #define WORLD_DB_CONTENT_NR 2
#define WORLD_DB_UPDATE_DESCRIPTION "Fix SoR paladin" #define WORLD_DB_UPDATE_DESCRIPTION "Fix Random MMGen Scripts"
#endif // __REVISION_H__ #endif // __REVISION_H__