diff options
-rw-r--r-- | src/game/CreatureAI.h | 3 | ||||
-rw-r--r-- | src/game/Unit.cpp | 6 | ||||
-rw-r--r-- | src/game/Vehicle.cpp | 8 | ||||
-rw-r--r-- | src/game/Vehicle.h | 2 |
4 files changed, 17 insertions, 2 deletions
diff --git a/src/game/CreatureAI.h b/src/game/CreatureAI.h index 061b3d273c2..6f8a14afbe1 100644 --- a/src/game/CreatureAI.h +++ b/src/game/CreatureAI.h @@ -159,6 +159,9 @@ class TRINITY_DLL_SPEC CreatureAI : public UnitAI void SetGazeOn(Unit *target); + virtual void PassengerBoarded(Unit *who, int8 seatId) {} + virtual void PassengerLeft(Unit *who, int8 seatId) {} + protected: bool _EnterEvadeMode(); }; diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 567a3628c9c..038a8cdcb1a 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -14555,11 +14555,17 @@ void Unit::EnterVehicle(Vehicle *vehicle, int8 seatId) if(m_Vehicle == vehicle) { if(seatId >= 0) + { + sLog.outDebug("EnterVehicle: %u leave vehicle %u seat %d and enter %d.", GetEntry(), m_Vehicle->GetEntry(), GetTransSeat(), seatId); ChangeSeat(seatId); + } return; } else + { + sLog.outDebug("EnterVehicle: %u exit %u and enter %u.", GetEntry(), m_Vehicle->GetEntry(), vehicle->GetEntry()); ExitVehicle(); + } } if(GetTypeId() == TYPEID_PLAYER) diff --git a/src/game/Vehicle.cpp b/src/game/Vehicle.cpp index 3cad7963d0b..d54bd04dcec 100644 --- a/src/game/Vehicle.cpp +++ b/src/game/Vehicle.cpp @@ -300,7 +300,7 @@ bool Vehicle::AddPassenger(Unit *unit, int8 seatId) assert(!seat->second.passenger); } - sLog.outDebug("Unit %s enter vehicle entry %u id %u dbguid %u", unit->GetName(), GetEntry(), m_vehicleInfo->m_ID, GetDBTableGUIDLow()); + sLog.outDebug("Unit %s enter vehicle entry %u id %u dbguid %u seat %d", unit->GetName(), GetEntry(), m_vehicleInfo->m_ID, GetDBTableGUIDLow(), (int32)seat->first); seat->second.passenger = unit; if(seat->second.seatInfo->IsUsable()) @@ -335,6 +335,9 @@ bool Vehicle::AddPassenger(Unit *unit, int8 seatId) GetMap()->CreatureRelocation(this, GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation()); } + if(AI()) + AI()->PassengerBoarded(unit, seat->first); + //if(unit->GetTypeId() == TYPEID_PLAYER) // ((Player*)unit)->SendTeleportAckMsg(); //unit->SendMovementFlagUpdate(); @@ -372,6 +375,9 @@ void Vehicle::RemovePassenger(Unit *unit) if(unit->GetTypeId() == TYPEID_PLAYER && seat->first == 0 && seat->second.seatInfo->m_flags & 0x800) RemoveCharmedBy(unit); + if(AI()) + AI()->PassengerLeft(unit, seat->first); + // only for flyable vehicles? //CastSpell(this, 45472, true); // Parachute } diff --git a/src/game/Vehicle.h b/src/game/Vehicle.h index 9639597bd8f..075644e5cba 100644 --- a/src/game/Vehicle.h +++ b/src/game/Vehicle.h @@ -57,6 +57,7 @@ class TRINITY_DLL_SPEC Vehicle : public Creature int8 GetNextEmptySeat(int8 seatId, bool next) const; bool AddPassenger(Unit *passenger, int8 seatId = -1); void RemovePassenger(Unit *passenger); + void RemoveAllPassengers(); void InstallAllAccessories(); void Dismiss(); @@ -67,7 +68,6 @@ class TRINITY_DLL_SPEC Vehicle : public Creature VehicleEntry const *m_vehicleInfo; uint32 m_usableSeatNum; - void RemoveAllPassengers(); void InstallAccessory(uint32 entry, int8 seatId); private: |