Hello.
After blind and other flee effects the character can fall through textures and die, when his z-coord < 500.0f (from MovementHandler.cpp):
if(movementInfo.z < -500.0f)
{
if(GetPlayer()->InBattleGround()
&& GetPlayer()->GetBattleGround()
&& GetPlayer()->GetBattleGround()->HandlePlayerUnderMap(_player))
{
// do nothing, the handle already did if returned true
}
else
{
if(GetPlayer()->isAlive())
GetPlayer()->EnvironmentalDamage(GetPlayer()->GetGUID(),DAMAGE_FALL_TO_VOID, GetPlayer()->GetMaxHealth());
GetPlayer()->BuildPlayerRepop();
GetPlayer()->RepopAtGraveyard();
}
}
But when he appears at graveyard, he stays and can't move or take other actions. Inserting some clearUnitState-s does nothing. How to fix this bug? Is there some patches, fixing it?
Also, I have next question: why after blind character can move underground? I have vmaps enabled. In FleeingMovementGeneratos.cpp I tried to add after
if( !(new_z - z) || distance / fabs(new_z - z) > 1.0f)
{
float new_z_left = _map->GetHeight(temp_x + 1.0f*cos(angle+M_PI/2),temp_y + 1.0f*sin(angle+M_PI/2),z,true);
float new_z_right = _map->GetHeight(temp_x + 1.0f*cos(angle-M_PI/2),temp_y + 1.0f*sin(angle-M_PI/2),z,true);
if(fabs(new_z_left - new_z) < 1.2f && fabs(new_z_right - new_z) < 1.2f)
{
x = temp_x;
y = temp_y;
z = new_z;
next lines:
float zz = _map->GetHeight(temp_x, temp_y, MAX_HEIGHT);
if(z < zz)
z = zz + 1;
On my oppinion this step must make unavailable to fall through world while fleeing, but really it does nothing.
Please, help me, if anybody can read, what i wrote =)
Thanks.