diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 08d2abdc5..4df7d36f4 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1466,7 +1466,7 @@ void GameObject::Use(Unit* user) // by default spell caster is user Unit* spellCaster = user; uint32 spellId = 0; - bool triggered = false; + uint32 triggeredFlags = TRIGGERED_NONE; if (Player* playerUser = user->ToPlayer()) { @@ -1486,6 +1486,10 @@ void GameObject::Use(Unit* user) m_cooldownTime = GameTime::GetGameTimeMS().count() + cooldown * IN_MILLISECONDS; } + if (user->IsPlayer() && GetGoType() != GAMEOBJECT_TYPE_TRAP) // workaround for GO casting + if (!m_goInfo->IsUsableMounted()) + user->RemoveAurasByType(SPELL_AURA_MOUNTED); + switch (GetGoType()) { case GAMEOBJECT_TYPE_DOOR: //0 @@ -1886,7 +1890,6 @@ void GameObject::Use(Unit* user) } } - user->RemoveAurasByType(SPELL_AURA_MOUNTED); spellId = info->spellcaster.spellId; break; } @@ -2056,12 +2059,15 @@ void GameObject::Use(Unit* user) return; } + if (m_goInfo->IsUsableMounted()) + triggeredFlags |= TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE; + if (Player* player = user->ToPlayer()) sOutdoorPvPMgr->HandleCustomSpell(player, spellId, this); if (spellCaster) { - if ((spellCaster->CastSpell(user, spellInfo, triggered) == SPELL_CAST_OK) && GetGoType() == GAMEOBJECT_TYPE_SPELLCASTER) + if ((spellCaster->CastSpell(user, spellInfo, TriggerCastFlags(triggeredFlags)) == SPELL_CAST_OK) && GetGoType() == GAMEOBJECT_TYPE_SPELLCASTER) AddUse(); } else diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index e4e703492..beb0bc431 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1573,17 +1573,6 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati if (oldmap) oldmap->RemovePlayerFromMap(this, false); - // xinef: do this before setting fall information! - if (IsMounted() && (!GetMap()->GetEntry()->IsDungeon() && !GetMap()->GetEntry()->IsBattlegroundOrArena()) && !m_transport) - { - AuraEffectList const& auras = GetAuraEffectsByType(SPELL_AURA_MOUNTED); - if (!auras.empty()) - { - SetMountBlockId((*auras.begin())->GetId()); - RemoveAurasByType(SPELL_AURA_MOUNTED); - } - } - teleportStore_dest = WorldLocation(mapid, x, y, z, orientation); SetFallInformation(GameTime::GetGameTime().count(), z); // if the player is saved before worldportack (at logout for example)