aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorVincent-Michael <Vincent_Michael@gmx.de>2013-06-30 00:36:03 +0200
committerVincent-Michael <Vincent_Michael@gmx.de>2013-06-30 00:36:03 +0200
commit676c7341d69bc93e95f147608635655fd91c79b9 (patch)
tree934a1bae2a8c791aad0bde4fe4acd04ecc7e2bf4 /src/server/game
parent83066a200202d7a487d11389e73173c1db0c391e (diff)
parent718fc5bfc94bdfa8c94a5ed646f31305ab2b08bd (diff)
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Conflicts: src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/AI/CoreAI/CombatAI.cpp2
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp6
-rw-r--r--src/server/game/DataStores/DBCEnums.h2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp4
-rw-r--r--src/server/game/Entities/Unit/Unit.h3
-rw-r--r--src/server/game/Entities/Vehicle/Vehicle.cpp40
-rw-r--r--src/server/game/Entities/Vehicle/VehicleDefines.h22
-rw-r--r--src/server/game/Scripting/ScriptLoader.cpp12
8 files changed, 56 insertions, 35 deletions
diff --git a/src/server/game/AI/CoreAI/CombatAI.cpp b/src/server/game/AI/CoreAI/CombatAI.cpp
index 85dd9cca90c..85088bbeff4 100644
--- a/src/server/game/AI/CoreAI/CombatAI.cpp
+++ b/src/server/game/AI/CoreAI/CombatAI.cpp
@@ -328,7 +328,7 @@ void VehicleAI::CheckConditions(const uint32 diff)
if (!conditions.empty())
{
for (SeatMap::iterator itr = m_vehicle->Seats.begin(); itr != m_vehicle->Seats.end(); ++itr)
- if (Unit* passenger = ObjectAccessor::GetUnit(*m_vehicle->GetBase(), itr->second.Passenger))
+ if (Unit* passenger = ObjectAccessor::GetUnit(*m_vehicle->GetBase(), itr->second.Passenger.Guid))
{
if (Player* player = passenger->ToPlayer())
{
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 2abc526134c..86c246ff387 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -475,7 +475,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (IsUnit(*itr))
if (Vehicle* vehicle = (*itr)->ToUnit()->GetVehicleKit())
for (SeatMap::iterator it = vehicle->Seats.begin(); it != vehicle->Seats.end(); ++it)
- if (Player* player = ObjectAccessor::FindPlayer(it->second.Passenger))
+ if (Player* player = ObjectAccessor::FindPlayer(it->second.Passenger.Guid))
player->AreaExploredOrEventHappens(e.action.quest.quest);
if (IsPlayer(*itr))
@@ -783,7 +783,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
// Special handling for vehicles
if (Vehicle* vehicle = unit->GetVehicleKit())
for (SeatMap::iterator it = vehicle->Seats.begin(); it != vehicle->Seats.end(); ++it)
- if (Player* player = ObjectAccessor::FindPlayer(it->second.Passenger))
+ if (Player* player = ObjectAccessor::FindPlayer(it->second.Passenger.Guid))
player->GroupEventHappens(e.action.quest.quest, GetBaseObject());
break;
}
@@ -915,7 +915,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (IsUnit(*itr))
if (Vehicle* vehicle = (*itr)->ToUnit()->GetVehicleKit())
for (SeatMap::iterator it = vehicle->Seats.begin(); it != vehicle->Seats.end(); ++it)
- if (Player* player = ObjectAccessor::FindPlayer(it->second.Passenger))
+ if (Player* player = ObjectAccessor::FindPlayer(it->second.Passenger.Guid))
player->RewardPlayerAndGroupAtEvent(e.action.killedMonster.creature, player);
if (!IsPlayer(*itr))
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h
index 1daf69f0b5f..11ca372625a 100644
--- a/src/server/game/DataStores/DBCEnums.h
+++ b/src/server/game/DataStores/DBCEnums.h
@@ -506,7 +506,7 @@ enum VehicleSeatFlags
VEHICLE_SEAT_FLAG_UNK18 = 0x00020000, // Needs research and support (28 vehicles): Allow entering vehicles while keeping specific permanent(?) auras that impose visuals (states like beeing under freeze/stun mechanic, emote state animations).
VEHICLE_SEAT_FLAG_HAS_VEH_EXIT_ANIM_VOLUNTARY_EXIT = 0x00040000,
VEHICLE_SEAT_FLAG_HAS_VEH_EXIT_ANIM_FORCED_EXIT = 0x00080000,
- VEHICLE_SEAT_FLAG_UNK21 = 0x00100000,
+ VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE = 0x00100000,
VEHICLE_SEAT_FLAG_UNK22 = 0x00200000,
VEHICLE_SEAT_FLAG_REC_HAS_VEHICLE_ENTER_ANIM = 0x00400000,
VEHICLE_SEAT_FLAG_IS_USING_VEHICLE_CONTROLS = 0x00800000, // Lua_IsUsingVehicleControls
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 5d0c56d8d01..45b8cb38da2 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -15771,7 +15771,7 @@ void Unit::ChangeSeat(int8 seatId, bool next)
SeatMap::const_iterator seat = (seatId < 0 ? m_vehicle->GetNextEmptySeat(GetTransSeat(), next) : m_vehicle->Seats.find(seatId));
// The second part of the check will only return true if seatId >= 0. @Vehicle::GetNextEmptySeat makes sure of that.
- if (seat == m_vehicle->Seats.end() || seat->second.Passenger)
+ if (seat == m_vehicle->Seats.end() || !seat->second.IsEmpty())
return;
AuraEffect* rideVehicleEffect = NULL;
@@ -16426,7 +16426,7 @@ void Unit::OutDebugInfo() const
{
o << "Passenger List: ";
for (SeatMap::iterator itr = GetVehicleKit()->Seats.begin(); itr != GetVehicleKit()->Seats.end(); ++itr)
- if (Unit* passenger = ObjectAccessor::GetUnit(*GetVehicleBase(), itr->second.Passenger))
+ if (Unit* passenger = ObjectAccessor::GetUnit(*GetVehicleBase(), itr->second.Passenger.Guid))
o << passenger->GetGUID() << ", ";
TC_LOG_INFO(LOG_FILTER_UNITS, "%s", o.str().c_str());
}
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 8eee9264582..bd4b5b85de6 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -516,7 +516,6 @@ enum UnitState
UNIT_STATE_POSSESSED = 0x00010000,
UNIT_STATE_CHARGING = 0x00020000,
UNIT_STATE_JUMPING = 0x00040000,
- UNIT_STATE_ONVEHICLE = 0x00080000,
UNIT_STATE_MOVE = 0x00100000,
UNIT_STATE_ROTATING = 0x00200000,
UNIT_STATE_EVADE = 0x00400000,
@@ -526,7 +525,7 @@ enum UnitState
UNIT_STATE_CHASE_MOVE = 0x04000000,
UNIT_STATE_FOLLOW_MOVE = 0x08000000,
UNIT_STATE_IGNORE_PATHFINDING = 0x10000000, // do not use pathfinding in any MovementGenerator
- UNIT_STATE_UNATTACKABLE = (UNIT_STATE_IN_FLIGHT | UNIT_STATE_ONVEHICLE),
+ UNIT_STATE_UNATTACKABLE = UNIT_STATE_IN_FLIGHT,
// for real move using movegen check and stop (except unstoppable flight)
UNIT_STATE_MOVING = UNIT_STATE_ROAMING_MOVE | UNIT_STATE_CONFUSED_MOVE | UNIT_STATE_FLEEING_MOVE | UNIT_STATE_CHASE_MOVE | UNIT_STATE_FOLLOW_MOVE,
UNIT_STATE_CONTROLLED = (UNIT_STATE_CONFUSED | UNIT_STATE_STUNNED | UNIT_STATE_FLEEING),
diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp
index f690160b464..8dbe08990c5 100644
--- a/src/server/game/Entities/Vehicle/Vehicle.cpp
+++ b/src/server/game/Entities/Vehicle/Vehicle.cpp
@@ -62,7 +62,7 @@ Vehicle::~Vehicle()
/// @Uninstall must be called before this.
ASSERT(_status == STATUS_UNINSTALLING);
for (SeatMap::const_iterator itr = Seats.begin(); itr != Seats.end(); ++itr)
- ASSERT(!itr->second.Passenger);
+ ASSERT(itr->second.IsEmpty());
}
/**
@@ -299,7 +299,7 @@ bool Vehicle::HasEmptySeat(int8 seatId) const
SeatMap::const_iterator seat = Seats.find(seatId);
if (seat == Seats.end())
return false;
- return !seat->second.Passenger;
+ return seat->second.IsEmpty();
}
/**
@@ -321,7 +321,7 @@ Unit* Vehicle::GetPassenger(int8 seatId) const
if (seat == Seats.end())
return NULL;
- return ObjectAccessor::GetUnit(*GetBase(), seat->second.Passenger);
+ return ObjectAccessor::GetUnit(*GetBase(), seat->second.Passenger.Guid);
}
/**
@@ -344,7 +344,7 @@ SeatMap::const_iterator Vehicle::GetNextEmptySeat(int8 seatId, bool next) const
if (seat == Seats.end())
return seat;
- while (seat->second.Passenger || (!seat->second.SeatInfo->CanEnterOrExit() && !seat->second.SeatInfo->IsUsableByOverride()))
+ while (!seat->second.IsEmpty() || (!seat->second.SeatInfo->CanEnterOrExit() && !seat->second.SeatInfo->IsUsableByOverride()))
{
if (next)
{
@@ -449,7 +449,7 @@ bool Vehicle::AddPassenger(Unit* unit, int8 seatId)
if (seatId < 0) // no specific seat requirement
{
for (seat = Seats.begin(); seat != Seats.end(); ++seat)
- if (!seat->second.Passenger && (seat->second.SeatInfo->CanEnterOrExit() || seat->second.SeatInfo->IsUsableByOverride()))
+ if (seat->second.IsEmpty() && (seat->second.SeatInfo->CanEnterOrExit() || seat->second.SeatInfo->IsUsableByOverride()))
break;
if (seat == Seats.end()) // no available seat
@@ -472,14 +472,14 @@ bool Vehicle::AddPassenger(Unit* unit, int8 seatId)
e->Seat = seat;
_pendingJoinEvents.push_back(e);
- if (seat->second.Passenger)
+ if (!seat->second.IsEmpty())
{
- Unit* passenger = ObjectAccessor::GetUnit(*GetBase(), seat->second.Passenger);
+ Unit* passenger = ObjectAccessor::GetUnit(*GetBase(), seat->second.Passenger.Guid);
ASSERT(passenger);
passenger->ExitVehicle();
}
- ASSERT(!seat->second.Passenger);
+ ASSERT(seat->second.IsEmpty());
}
return true;
@@ -507,11 +507,14 @@ Vehicle* Vehicle::RemovePassenger(Unit* unit)
TC_LOG_DEBUG(LOG_FILTER_VEHICLES, "Unit %s exit vehicle entry %u id %u dbguid %u seat %d",
unit->GetName().c_str(), _me->GetEntry(), _vehicleInfo->m_ID, _me->GetGUIDLow(), (int32)seat->first);
- seat->second.Passenger = 0;
if (seat->second.SeatInfo->CanEnterOrExit() && ++UsableSeatNum)
_me->SetFlag(UNIT_NPC_FLAGS, (_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK));
- unit->ClearUnitState(UNIT_STATE_ONVEHICLE);
+ // Remove UNIT_FLAG_NOT_SELECTABLE if passenger did not have it before entering vehicle
+ if (seat->second.SeatInfo->m_flags & VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE && !seat->second.Passenger.IsUnselectable)
+ unit->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+
+ seat->second.Passenger.Reset();
if (_me->GetTypeId() == TYPEID_UNIT && unit->GetTypeId() == TYPEID_PLAYER && seat->second.SeatInfo->m_flags & VEHICLE_SEAT_FLAG_CAN_CONTROL)
_me->RemoveCharmedBy(unit);
@@ -549,7 +552,7 @@ void Vehicle::RelocatePassengers()
// not sure that absolute position calculation is correct, it must depend on vehicle pitch angle
for (SeatMap::const_iterator itr = Seats.begin(); itr != Seats.end(); ++itr)
{
- if (Unit* passenger = ObjectAccessor::GetUnit(*GetBase(), itr->second.Passenger))
+ if (Unit* passenger = ObjectAccessor::GetUnit(*GetBase(), itr->second.Passenger.Guid))
{
ASSERT(passenger->IsInWorld());
@@ -576,7 +579,7 @@ void Vehicle::RelocatePassengers()
bool Vehicle::IsVehicleInUse() const
{
for (SeatMap::const_iterator itr = Seats.begin(); itr != Seats.end(); ++itr)
- if (itr->second.Passenger)
+ if (!itr->second.IsEmpty())
return true;
return false;
@@ -623,7 +626,7 @@ void Vehicle::InitMovementInfoForBase()
VehicleSeatEntry const* Vehicle::GetSeatForPassenger(Unit const* passenger) const
{
for (SeatMap::const_iterator itr = Seats.begin(); itr != Seats.end(); ++itr)
- if (itr->second.Passenger == passenger->GetGUID())
+ if (itr->second.Passenger.Guid == passenger->GetGUID())
return itr->second.SeatInfo;
return NULL;
@@ -646,7 +649,7 @@ SeatMap::iterator Vehicle::GetSeatIteratorForPassenger(Unit* passenger)
{
SeatMap::iterator itr;
for (itr = Seats.begin(); itr != Seats.end(); ++itr)
- if (itr->second.Passenger == passenger->GetGUID())
+ if (itr->second.Passenger.Guid == passenger->GetGUID())
return itr;
return Seats.end();
@@ -668,7 +671,7 @@ uint8 Vehicle::GetAvailableSeatCount() const
uint8 ret = 0;
SeatMap::const_iterator itr;
for (itr = Seats.begin(); itr != Seats.end(); ++itr)
- if (!itr->second.Passenger && (itr->second.SeatInfo->CanEnterOrExit() || itr->second.SeatInfo->IsUsableByOverride()))
+ if (itr->second.IsEmpty() && (itr->second.SeatInfo->CanEnterOrExit() || itr->second.SeatInfo->IsUsableByOverride()))
++ret;
return ret;
@@ -804,7 +807,8 @@ bool VehicleJoinEvent::Execute(uint64, uint32)
Target->RemovePendingEventsForPassenger(Passenger);
Passenger->SetVehicle(Target);
- Seat->second.Passenger = Passenger->GetGUID();
+ Seat->second.Passenger.Guid = Passenger->GetGUID();
+ Seat->second.Passenger.IsUnselectable = Passenger->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
if (Seat->second.SeatInfo->CanEnterOrExit())
{
ASSERT(Target->UsableSeatNum);
@@ -834,8 +838,8 @@ bool VehicleJoinEvent::Execute(uint64, uint32)
player->UnsummonPetTemporaryIfAny();
}
- if (Seat->second.SeatInfo->m_flags & VEHICLE_SEAT_FLAG_HIDE_PASSENGER)
- Passenger->AddUnitState(UNIT_STATE_ONVEHICLE);
+ if (Seat->second.SeatInfo->m_flags & VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE)
+ Passenger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
VehicleSeatEntry const* veSeat = Seat->second.SeatInfo;
Passenger->m_movementInfo.transport.pos.Relocate(veSeat->m_attachmentOffsetX, veSeat->m_attachmentOffsetY, veSeat->m_attachmentOffsetZ);
diff --git a/src/server/game/Entities/Vehicle/VehicleDefines.h b/src/server/game/Entities/Vehicle/VehicleDefines.h
index 55c47df86ad..802e63346c1 100644
--- a/src/server/game/Entities/Vehicle/VehicleDefines.h
+++ b/src/server/game/Entities/Vehicle/VehicleDefines.h
@@ -75,11 +75,29 @@ enum VehicleSpells
VEHICLE_SPELL_PARACHUTE = 45472
};
+struct PassengerInfo
+{
+ uint64 Guid;
+ bool IsUnselectable;
+
+ void Reset()
+ {
+ Guid = 0;
+ IsUnselectable = false;
+ }
+};
+
struct VehicleSeat
{
- explicit VehicleSeat(VehicleSeatEntry const* seatInfo) : SeatInfo(seatInfo), Passenger(0) {}
+ explicit VehicleSeat(VehicleSeatEntry const* seatInfo) : SeatInfo(seatInfo)
+ {
+ Passenger.Reset();
+ }
+
+ bool IsEmpty() const { return !Passenger.Guid; }
+
VehicleSeatEntry const* SeatInfo;
- uint64 Passenger;
+ PassengerInfo Passenger;
};
struct VehicleAccessory
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index f644047b298..e2fae8a8042 100644
--- a/src/server/game/Scripting/ScriptLoader.cpp
+++ b/src/server/game/Scripting/ScriptLoader.cpp
@@ -129,17 +129,17 @@ void AddSC_boss_gyth();
void AddSC_boss_rend_blackhand();
void AddSC_instance_blackrock_spire();
void AddSC_boss_razorgore(); //Blackwing lair
-void AddSC_boss_vael();
+void AddSC_boss_vaelastrasz();
void AddSC_boss_broodlord();
void AddSC_boss_firemaw();
void AddSC_boss_ebonroc();
void AddSC_boss_flamegor();
void AddSC_boss_chromaggus();
void AddSC_boss_nefarian();
-void AddSC_boss_victor_nefarius();
-void AddSC_boss_mr_smite();
+void AddSC_instance_blackwing_lair();
void AddSC_deadmines(); //Deadmines
void AddSC_instance_deadmines();
+void AddSC_boss_mr_smite();
void AddSC_gnomeregan(); //Gnomeregan
void AddSC_instance_gnomeregan();
void AddSC_boss_attumen(); //Karazhan
@@ -771,16 +771,16 @@ void AddEasternKingdomsScripts()
AddSC_boss_rend_blackhand();
AddSC_instance_blackrock_spire();
AddSC_boss_razorgore(); //Blackwing lair
- AddSC_boss_vael();
+ AddSC_boss_vaelastrasz();
AddSC_boss_broodlord();
AddSC_boss_firemaw();
AddSC_boss_ebonroc();
AddSC_boss_flamegor();
AddSC_boss_chromaggus();
AddSC_boss_nefarian();
- AddSC_boss_victor_nefarius();
- AddSC_boss_mr_smite();
+ AddSC_instance_blackwing_lair();
AddSC_deadmines(); //Deadmines
+ AddSC_boss_mr_smite();
AddSC_instance_deadmines();
AddSC_gnomeregan(); //Gnomeregan
AddSC_instance_gnomeregan();