aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShocker <none@none>2010-08-24 07:19:29 +0300
committerShocker <none@none>2010-08-24 07:19:29 +0300
commit5e92a8e55a0736d2d249c2c32a12894fafa84f31 (patch)
tree1a921d5b210899fb0f3717e82b6099e45249fe63 /src
parentfcebd3117a31701ce2ea836c2eee0fe30662c49a (diff)
Fix accessories for vehicle player mounts (the vendors on Traveler's Tundra Mammoth for example)
--HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp6
-rw-r--r--src/server/game/Entities/Unit/Unit.h2
-rw-r--r--src/server/game/Entities/Vehicle/Vehicle.cpp3
-rw-r--r--src/server/game/Server/Protocol/Handlers/MovementHandler.cpp5
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp2
5 files changed, 15 insertions, 3 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index ffa95ba218f..c90c891c944 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -11727,7 +11727,7 @@ float Unit::GetPPMProcChance(uint32 WeaponSpeed, float PPM, const SpellEntry * s
return floor((WeaponSpeed * PPM) / 600.0f); // result is chance in percents (probability = Speed_in_sec * (PPM / 60))
}
-void Unit::Mount(uint32 mount, uint32 VehicleId)
+void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
{
RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_MOUNT);
@@ -11759,6 +11759,10 @@ void Unit::Mount(uint32 mount, uint32 VehicleId)
{
GetVehicleKit()->Reset();
+ // mounts can also have accessories
+ GetVehicleKit()->GetBase()->SetEntry(creatureEntry); // set creature entry so InstallAllAccessories() can read correct accessories
+ GetVehicleKit()->InstallAllAccessories();
+
// Send others that we now have a vehicle
WorldPacket data(SMSG_PLAYER_VEHICLE_DATA, GetPackGUID().size()+4);
data.appendPackGUID(GetGUID());
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 50f63c05b84..596d7d15078 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1284,7 +1284,7 @@ class Unit : public WorldObject
bool IsMounted() const { return HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_MOUNT); }
uint32 GetMountID() const { return GetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID); }
- void Mount(uint32 mount, uint32 vehicleId=0);
+ void Mount(uint32 mount, uint32 vehicleId = 0, uint32 creatureEntry = 0);
void Unmount();
uint16 GetMaxSkillValueForLevel(Unit const* target = NULL) const { return (target ? getLevelForTarget(target) : getLevel()) * 5; }
diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp
index 32d5da36518..36cbc9c1360 100644
--- a/src/server/game/Entities/Vehicle/Vehicle.cpp
+++ b/src/server/game/Entities/Vehicle/Vehicle.cpp
@@ -187,6 +187,9 @@ void Vehicle::RemoveAllPassengers()
//ASSERT(!itr->second.passenger);
itr->second.passenger = NULL;
}
+ // creature passengers mounted on player mounts should be despawned at dismount
+ if (GetBase()->GetTypeId() == TYPEID_PLAYER && passenger->GetEntry())
+ passenger->ToCreature()->ForcedDespawn();
}
}
diff --git a/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp b/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
index 008853064cd..f147b26e376 100644
--- a/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
@@ -659,6 +659,11 @@ void WorldSession::HandleEjectPasenger(WorldPacket &data)
data >> guid;
if (Player* Pl=ObjectAccessor::FindPlayer(guid))
Pl->ExitVehicle();
+ else if (Unit* Un = ObjectAccessor::GetUnit(*_player, guid)) // creatures can be ejected too from player mounts
+ {
+ Un->ExitVehicle();
+ Un->ToCreature()->ForcedDespawn(1000);
+ }
}
}
}
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 5ffc862544c..41993275e57 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -3717,7 +3717,7 @@ void AuraEffect::HandleAuraMounted(AuraApplication const * aurApp, uint8 mode, b
if (GetSpellProto()->Effect[i] == SPELL_EFFECT_SUMMON
&& GetSpellProto()->EffectMiscValue[i] == GetMiscValue())
display_id = 0;
- target->Mount(display_id,ci->VehicleId);
+ target->Mount(display_id, ci->VehicleId, GetMiscValue());
}
else
{