*Fix the bug that all vehicles are broken.

--HG--
branch : trunk
This commit is contained in:
megamage
2009-04-21 14:05:54 -05:00
parent e20e65ced9
commit 297498f1f7
6 changed files with 9 additions and 15 deletions
+1 -1
View File
@@ -718,7 +718,7 @@ bool ChatHandler::HandleDebugEnterVehicle(const char * args)
if(!passenger || passenger == target) if(!passenger || passenger == target)
return false; return false;
((Vehicle*)target)->AddPassenger(passenger); passenger->EnterVehicle(target);
PSendSysMessage("Creature entered vehicle"); PSendSysMessage("Creature entered vehicle");
return true; return true;
+1 -1
View File
@@ -1697,7 +1697,7 @@ void WorldSession::HandleSpellClick( WorldPacket & recv_data )
return; return;
} }
vehicle->AddPassenger(_player); _player->EnterVehicle(vehicle);
} }
void WorldSession::HandleInspectAchievements( WorldPacket & recv_data ) void WorldSession::HandleInspectAchievements( WorldPacket & recv_data )
+2 -8
View File
@@ -475,12 +475,7 @@ void WorldSession::HandleDismissControlledVehicle(WorldPacket &recv_data)
MovementInfo mi; MovementInfo mi;
ReadMovementInfo(recv_data, &mi); ReadMovementInfo(recv_data, &mi);
_player->m_movementInfo = mi; _player->m_movementInfo = mi;
_player->ExitVehicle();
// using charm guid, because we don't have vehicle guid...
if(Vehicle *vehicle = ObjectAccessor::GetVehicle(vehicleGUID))
{
vehicle->RemovePassenger(_player);
}
} }
void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket &recv_data) void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket &recv_data)
@@ -519,8 +514,7 @@ void WorldSession::HandleRequestVehicleExit(WorldPacket &recv_data)
{ {
sLog.outDebug("WORLD: Recvd CMSG_REQUEST_VEHICLE_EXIT"); sLog.outDebug("WORLD: Recvd CMSG_REQUEST_VEHICLE_EXIT");
recv_data.hexlike(); recv_data.hexlike();
if(GetPlayer()->m_Vehicle) GetPlayer()->ExitVehicle();
GetPlayer()->m_Vehicle->RemovePassenger(GetPlayer());
} }
void WorldSession::HandleMountSpecialAnimOpcode(WorldPacket& /*recvdata*/) void WorldSession::HandleMountSpecialAnimOpcode(WorldPacket& /*recvdata*/)
+2 -2
View File
@@ -16569,6 +16569,8 @@ void Player::RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent)
void Player::StopCastingCharm() void Player::StopCastingCharm()
{ {
ExitVehicle();
Unit* charm = GetCharm(); Unit* charm = GetCharm();
if(!charm) if(!charm)
return; return;
@@ -16577,8 +16579,6 @@ void Player::StopCastingCharm()
{ {
if(((Creature*)charm)->isPet() && ((Pet*)charm)->getPetType() == POSSESSED_PET) if(((Creature*)charm)->isPet() && ((Pet*)charm)->getPetType() == POSSESSED_PET)
((Pet*)charm)->Remove(PET_SAVE_AS_DELETED); ((Pet*)charm)->Remove(PET_SAVE_AS_DELETED);
else if(((Creature*)charm)->isVehicle())
((Vehicle*)charm)->RemovePassenger(this);
} }
if(GetCharmGUID()) if(GetCharmGUID())
{ {
+1 -1
View File
@@ -6540,7 +6540,7 @@ void Spell::SummonVehicle(uint32 entry, SummonPropertiesEntry const *properties)
if(damage) if(damage)
{ {
m_caster->CastSpell(vehicle, damage, true); m_caster->CastSpell(vehicle, damage, true);
vehicle->AddPassenger(m_caster); m_caster->EnterVehicle(vehicle);
} }
} }
+2 -2
View File
@@ -10206,7 +10206,7 @@ void Unit::setDeathState(DeathState s)
UnsummonAllTotems(); UnsummonAllTotems();
RemoveAllControlled(); RemoveAllControlled();
RemoveAllAurasOnDeath(); RemoveAllAurasOnDeath();
if(m_Vehicle) m_Vehicle->RemovePassenger(this); ExitVehicle();
//This is needed to clear visible auras after unit dies //This is needed to clear visible auras after unit dies
ModifyAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, false); ModifyAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, false);
@@ -11172,7 +11172,7 @@ void Unit::RemoveFromWorld()
RemoveCharmAuras(); RemoveCharmAuras();
RemoveBindSightAuras(); RemoveBindSightAuras();
RemoveNotOwnSingleTargetAuras(); RemoveNotOwnSingleTargetAuras();
if(m_Vehicle) m_Vehicle->RemovePassenger(this); ExitVehicle();
if(GetCharmerGUID()) if(GetCharmerGUID())
sLog.outCrash("Unit %u has charmer guid when removed from world", GetEntry()); sLog.outCrash("Unit %u has charmer guid when removed from world", GetEntry());