Jump to content

Help with Death Bug


Guest phelpsben

Recommended Posts

I'm really not sure why, or how, this is happening, but i would say, 1 out of every 50 deaths result in the player being in a mix of dead and alive. They can cast spells, but they can't do melee damage (hunters shots count as melee), they can't move, but they can blink/charge, they have ~100-200hp and are about to die when it happens. With a patch for instant respawn in FFA a selected zone, there are about 2-4 deaths per second when I have about 70 players online so this is happening alot, the only way to fix the player is to revive them as a GM, or the player can relog and they are back to normal. Sometimes a sheep, or hex will also take them out of the phase of dead and alive.

This has also happened once to a player in the arena, where the Avoid GY check doesn't even get ran, so thats leading me to think its not 100% my code, maybe my code is causing it to happen alot more though, not sure.

I think it might have something to do with this file, but I'm not sure. These are the edits I have made to player.cpp:

http://bphelpsen.pastebin.com/f452a5a76

I think its happening in "void Player::RepopAtGraveyard()" but i have looked over it and can't seem to find what might cause it.

void Player::RepopAtGraveyard()
{
   // note: this can be called also when the player is alive
   // for example from WorldSession::HandleMovementOpcodes

   AreaTableEntry const *zone = GetAreaEntryByAreaID(GetAreaId());

   // Such zones are considered unreachable as a ghost and the player must be automatically revived
   if ((!isAlive() && zone && zone->flags & AREA_FLAG_NEED_FLY) || GetTransport())
   {
       ResurrectPlayer(0.5f);
       SpawnCorpseBones();
   }

   WorldSafeLocsEntry const *ClosestGrave = NULL;

   // Special handle for battleground maps
   if( BattleGround *bg = GetBattleGround() )
       ClosestGrave = bg->GetClosestGraveYard(this);
   else
       ClosestGrave = sObjectMgr.GetClosestGraveYard( GetPositionX(), GetPositionY(), GetPositionZ(), GetMapId(), GetTeam() );

   // stop countdown until repop
   m_deathTimer = 0;

// !-Phelps
// Custom Avoid GY Checks


// this matches player being in Dire Maul - The Maul (FFA-PvP)
if (sMapMgr.GetZoneId(GetMapId(),GetPositionX(),GetPositionY(),GetPositionZ()) == 2557){

	TeleportTo(1, -3761.428223, 1137.259277, 131.261383, 4.729075);
	ResurrectPlayer(1.0f);
	UninviteFromGroup();
	SpawnCorpseBones();
	//RemoveArenaSpellCooldowns(); - too much burst for everyone in ffa


}
// match player in Circle of Blood and send to proper faction base
else if (sMapMgr.GetZoneId(GetMapId(),GetPositionX(),GetPositionY(),GetPositionZ()) == 3522){

	switch (GetTeam()) {
		case HORDE:
			TeleportTo(530, 2907.686, 5973.359, 2.200, 4.050);
			break;

		case ALLIANCE:
			TeleportTo(530, 2771.037, 5884.949, 2.726, 0.937);
			break;

		default:
			TeleportTo(530, 2838.707, 5928.274, 0.892, 5.606);
			break;
	}

	ResurrectPlayer(1.0f);
	SpawnCorpseBones();

}
   // if no grave found, and not in a custom GY zone, stay at the current location
   // and don't show spirit healer location
   if(ClosestGrave)
   {
       TeleportTo(ClosestGrave->map_id, ClosestGrave->x, ClosestGrave->y, ClosestGrave->z, GetOrientation());
       if(isDead())                                        // not send if alive, because it used in TeleportTo()
       {
           WorldPacket data(SMSG_DEATH_RELEASE_LOC, 4*4);  // show spirit healer position on minimap
           data << ClosestGrave->map_id;
           data << ClosestGrave->x;
           data << ClosestGrave->y;
           data << ClosestGrave->z;
           GetSession()->SendPacket(&data);
       }
   }
}

Link to comment
Share on other sites

Hi, I've got the same problem, so when I aply this patch, death bug was solved.

diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index d8773cd..33a4341 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -1271,6 +1271,11 @@ void Player::Update( uint32 p_time )
        RegenerateAll();
    }

+    if (!isAlive() && !HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST))
+    {
+        SetHealth(0);
+    }
+
    if (m_deathState == JUST_DIED)
    {
        KillPlayer();

try it

Link to comment
Share on other sites

  • 3 weeks later...
  • 3 weeks later...

If you manage to let off a spell right when you die, especially AOE's like Holy Nova since you can spam it. It counts your attack and forgets that its making you dead lol.

Thanks for that patch up there i will try it out, and let you know how it goes. I have a 254 server and it happens so much hard to rez 300 people at a time.

Link to comment
Share on other sites

×
×
  • 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