aboutsummaryrefslogtreecommitdiff
path: root/src/game/Unit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Unit.cpp')
-rw-r--r--src/game/Unit.cpp36
1 files changed, 31 insertions, 5 deletions
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index 72fdd6c3fd2..bd6e494c23a 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -13042,7 +13042,6 @@ void Unit::SetCharmedOrPossessedBy(Unit* charmer, bool possess)
addUnitState(UNIT_STAT_POSSESSED);
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_24);
((Player*)charmer)->SetClientControl(this, 1);
- ((Player*)charmer)->SetMover(this);
((Player*)charmer)->SetViewpoint(this, true);
charmer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
}
@@ -13125,7 +13124,6 @@ void Unit::RemoveCharmedOrPossessedBy(Unit *charmer)
if(possess)
{
((Player*)charmer)->SetClientControl(charmer, 1);
- ((Player*)charmer)->SetMover(charmer);
((Player*)charmer)->SetViewpoint(this, false);
charmer->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
}
@@ -13500,10 +13498,19 @@ void Unit::JumpTo(WorldObject *obj, float speedZ)
GetMotionMaster()->MoveJump(x, y, z, speedXY, speedZ);
}
-void Unit::EnterVehicle(Vehicle *vehicle)
+void Unit::EnterVehicle(Vehicle *vehicle, int8 seatId)
{
if(m_Vehicle)
- ExitVehicle();
+ {
+ if(m_Vehicle == vehicle)
+ {
+ if(seatId >= 0)
+ ChangeSeat(seatId);
+ return;
+ }
+ else
+ ExitVehicle();
+ }
if(GetTypeId() == TYPEID_PLAYER)
{
@@ -13513,7 +13520,7 @@ void Unit::EnterVehicle(Vehicle *vehicle)
assert(!m_Vehicle);
m_Vehicle = vehicle;
- if(!m_Vehicle->AddPassenger(this))
+ if(!m_Vehicle->AddPassenger(this, seatId))
{
m_Vehicle = NULL;
return;
@@ -13534,6 +13541,25 @@ void Unit::EnterVehicle(Vehicle *vehicle)
}
}
+void Unit::ChangeSeat(int8 seatId, bool next)
+{
+ if(!m_Vehicle)
+ return;
+
+ if(seatId < 0)
+ {
+ seatId = m_Vehicle->GetNextEmptySeat(GetTransSeat(), next);
+ if(seatId < 0)
+ return;
+ }
+ else if(seatId == GetTransSeat() || !m_Vehicle->HasEmptySeat(seatId))
+ return;
+
+ m_Vehicle->RemovePassenger(this);
+ if(!m_Vehicle->AddPassenger(this, seatId))
+ assert(false);
+}
+
void Unit::ExitVehicle()
{
if(!m_Vehicle)