diff options
author | Shocker <none@none> | 2010-08-24 07:19:29 +0300 |
---|---|---|
committer | Shocker <none@none> | 2010-08-24 07:19:29 +0300 |
commit | 5e92a8e55a0736d2d249c2c32a12894fafa84f31 (patch) | |
tree | 1a921d5b210899fb0f3717e82b6099e45249fe63 /src | |
parent | fcebd3117a31701ce2ea836c2eee0fe30662c49a (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.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Vehicle/Vehicle.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Handlers/MovementHandler.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 2 |
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 { |