Jump to content

Falling Through The World


Guest Commander
 Share

Recommended Posts

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.

Link to comment
Share on other sites

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy Terms of Use