Core/Vehicles:

- Set MovementFlagsExtra (2) correctly depending on vehicle 'template' flags. This makes certain vehicles such as demolishers unable to jump/strafe (as intended)
- Fix SMSG_MONSTER_MOVE_TRANSPORT stucture, prevents a client crash when entering certain vehicles, as well as *properly* broadcast position relative to the vehicle.
- Send SMSG_BREAK_TARGET to player when entering vehicle.
- Set MOVEMENTFLAG_ROOT on passenger when entering vehicle
- Cleanup in affected code
This commit is contained in:
Machiavelli
2010-12-29 05:45:38 +01:00
parent 13e85f861f
commit 68c6189201
5 changed files with 67 additions and 24 deletions
+21 -1
View File
@@ -317,7 +317,7 @@ bool Vehicle::AddPassenger(Unit *unit, int8 seatId, bool byAura)
if (seat->second.seatInfo->m_flags && !(seat->second.seatInfo->m_flags & VEHICLE_SEAT_FLAG_UNK11))
unit->AddUnitState(UNIT_STAT_ONVEHICLE);
unit->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
unit->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT | MOVEMENTFLAG_ROOT);
VehicleSeatEntry const *veSeat = seat->second.seatInfo;
unit->m_movementInfo.t_pos.m_positionX = veSeat->m_attachmentOffsetX;
unit->m_movementInfo.t_pos.m_positionY = veSeat->m_attachmentOffsetY;
@@ -449,3 +449,23 @@ void Vehicle::Dismiss()
me->CombatStop();
me->AddObjectToRemoveList();
}
uint16 Vehicle::GetExtraMovementFlagsForBase() const
{
uint16 movementMask = MOVEMENTFLAG2_NONE;
uint32 vehicleFlags = GetVehicleInfo()->m_flags;
if (vehicleFlags & VEHICLE_FLAG_NO_STRAFE)
movementMask |= MOVEMENTFLAG2_NO_STRAFE;
if (vehicleFlags & VEHICLE_FLAG_NO_JUMPING)
movementMask |= MOVEMENTFLAG2_NO_JUMPING;
if (vehicleFlags & VEHICLE_FLAG_FULLSPEEDTURNING)
movementMask |= MOVEMENTFLAG2_FULL_SPEED_TURNING;
if (vehicleFlags & VEHICLE_FLAG_ALLOW_PITCHING)
movementMask |= MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING;
if (vehicleFlags & VEHICLE_FLAG_FULLSPEEDPITCHING)
movementMask |= MOVEMENTFLAG2_FULL_SPEED_PITCHING;
sLog->outDebug("Vehicle::GetExtraMovementFlagsForBase() returned %u", movementMask);
return movementMask;
}