Added (blizzlike) packet broadcast to near teleport. Thanks to Zor and nalimleinad (AKA anonymous colleague #1) for research.

--HG--
branch : trunk
This commit is contained in:
Xanadu
2010-03-18 17:58:27 +01:00
parent 302af79bc2
commit 59e0d42260
5 changed files with 17 additions and 29 deletions
+12 -3
View File
@@ -1640,7 +1640,16 @@ uint8 Player::chatTag() const
return 0;
}
void Player::SendTeleportAckMsg()
void Player::SendTeleportPacket(Position &oldPos)
{
WorldPacket data2(MSG_MOVE_TELEPORT, 38);
data2.append(GetPackGUID());
BuildMovementPacket(&data2);
Relocate(&oldPos);
SendMessageToSet(&data2, false);
}
void Player::SendTeleportAckPacket()
{
WorldPacket data(MSG_MOVE_TELEPORT_ACK, 41);
data.append(GetPackGUID());
@@ -1777,8 +1786,8 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
Position oldPos;
GetPosition(&oldPos);
Relocate(x, y, z, orientation);
SendTeleportAckMsg();
Relocate(&oldPos);
SendTeleportAckPacket();
SendTeleportPacket(oldPos); // this automatically relocates to oldPos in order to broadcast the packet in the right place
}
}
else
+2 -1
View File
@@ -1825,7 +1825,8 @@ class Player : public Unit, public GridObject<Player>
void SendMessageToSetInRange(WorldPacket *data, float fist, bool self);// overwrite Object::SendMessageToSetInRange
void SendMessageToSetInRange(WorldPacket *data, float dist, bool self, bool own_team_only);
void SendTeleportAckMsg();
void SendTeleportPacket(Position &oldPos);
void SendTeleportAckPacket();
static void DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmChars = true);
+1 -1
View File
@@ -3898,7 +3898,7 @@ void Spell::EffectDistract(uint32 /*i*/)
{
// For players just turn them
unitTarget->ToPlayer()->SetPosition(unitTarget->GetPositionX(), unitTarget->GetPositionY(), unitTarget->GetPositionZ(), angle, false);
unitTarget->ToPlayer()->SendTeleportAckMsg();
unitTarget->ToPlayer()->SendTeleportAckPacket();
}
else
{
+1 -23
View File
@@ -15990,7 +15990,7 @@ void Unit::ExitVehicle()
if (GetTypeId() == TYPEID_PLAYER)
{
//this->ToPlayer()->SetClientControl(this, 1);
this->ToPlayer()->SendTeleportAckMsg();
this->ToPlayer()->SendTeleportAckPacket();
this->ToPlayer()->SetFallInformation(0, GetPositionZ());
}
WorldPacket data;
@@ -16109,31 +16109,9 @@ void Unit::NearTeleportTo( float x, float y, float z, float orientation, bool ca
this->ToPlayer()->TeleportTo(GetMapId(), x, y, z, orientation, TELE_TO_NOT_LEAVE_TRANSPORT | TELE_TO_NOT_LEAVE_COMBAT | TELE_TO_NOT_UNSUMMON_PET | (casting ? TELE_TO_SPELL : 0));
else
{
WorldPacket data;
/*data.Initialize(MSG_MOVE_TELEPORT, 30);
data.append(GetPackGUID());
data << uint32(GetUnitMovementFlags());
data << uint16(0); // Probably walk flags here
data << getMSTime(); // time
data << x; // destination coords
data << y;
data << z;
data << orientation;
data << uint32 (0);
// Other information here: jumping angle etc
SendMessageToSet(&data, false);*/
// FIXME: this interrupts spell visual
DestroyForNearbyPlayers();
SetPosition(x, y, z, orientation, true);
//ObjectAccessor::UpdateObjectVisibility(this);
//WorldPacket data;
// Work strange for many spells: triggered active mover set for targeted player to creature
//BuildTeleportAckMsg(&data, x, y, z, orientation);
//BuildHeartBeatMsg(&data);
//SendMessageToSet(&data, false);
}
}
+1 -1
View File
@@ -341,7 +341,7 @@ bool Vehicle::AddPassenger(Unit *unit, int8 seatId)
}
//if(unit->GetTypeId() == TYPEID_PLAYER)
// unit->ToPlayer()->SendTeleportAckMsg();
// unit->ToPlayer()->SendTeleportAckPacket();
//unit->SendMovementFlagUpdate();
return true;