From d02298509fc106b31009e8eb65cff2ae8ded583d Mon Sep 17 00:00:00 2001 From: Retriman Date: Thu, 11 Oct 2012 01:32:28 -0400 Subject: Core/Spell: *Barkskin can be used to stun and sleep. --- src/server/game/Spells/Spell.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/server/game/Spells/Spell.cpp') diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 6b51f240b28..940bf7fdd1c 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -5621,7 +5621,7 @@ SpellCastResult Spell::CheckCasterAuras() const break; } } - if (foundNotStun) + if (foundNotStun && m_spellInfo->Id != 22812) prevented_reason = SPELL_FAILED_STUNNED; } else -- cgit v1.2.3 From ca276292dcce939d65649d434a08796269789901 Mon Sep 17 00:00:00 2001 From: kaelima Date: Wed, 17 Oct 2012 16:56:35 +0200 Subject: Core/BG: - Force removal of stealth and invisible auras when using gameobjects with type GAMEOBJECT_TYPE_FLAGSTAND and GAMEOBJECT_TYPE_FLAGDROP - Do not allow players to use unfriendly battleground objects (prevents flag cap with Nitro Boosts active for example) --- src/server/game/Entities/GameObject/GameObject.cpp | 12 ++++++++++-- src/server/game/Entities/Player/Player.cpp | 10 +++++++--- src/server/game/Entities/Player/Player.h | 2 +- src/server/game/Spells/Spell.cpp | 2 +- 4 files changed, 19 insertions(+), 7 deletions(-) (limited to 'src/server/game/Spells/Spell.cpp') diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index da6e4ef8407..59f68a0494f 100755 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1522,14 +1522,18 @@ void GameObject::Use(Unit* user) Player* player = user->ToPlayer(); - if (player->CanUseBattlegroundObject()) + if (player->CanUseBattlegroundObject(this)) { // in battleground check Battleground* bg = player->GetBattleground(); if (!bg) return; + if (player->GetVehicle()) return; + + player->RemoveAurasByType(SPELL_AURA_MOD_STEALTH); + player->RemoveAurasByType(SPELL_AURA_MOD_INVISIBILITY); // BG flag click // AB: // 15001 @@ -1562,14 +1566,18 @@ void GameObject::Use(Unit* user) Player* player = user->ToPlayer(); - if (player->CanUseBattlegroundObject()) + if (player->CanUseBattlegroundObject(this)) { // in battleground check Battleground* bg = player->GetBattleground(); if (!bg) return; + if (player->GetVehicle()) return; + + player->RemoveAurasByType(SPELL_AURA_MOD_STEALTH); + player->RemoveAurasByType(SPELL_AURA_MOD_INVISIBILITY); // BG flag dropped // WS: // 179785 - Silverwing Flag diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 501379228e2..161fdc2be1d 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -23488,10 +23488,14 @@ WorldObject* Player::GetViewpoint() const return NULL; } -bool Player::CanUseBattlegroundObject() +bool Player::CanUseBattlegroundObject(GameObject* gameobject) { - // TODO : some spells gives player ForceReaction to one faction (ReputationMgr::ApplyForceReaction) - // maybe gameobject code should handle that ForceReaction usage + FactionTemplateEntry const* playerFaction = getFactionTemplateEntry(); + FactionTemplateEntry const* faction = sFactionTemplateStore.LookupEntry(gameobject->GetUInt32Value(GAMEOBJECT_FACTION)); + + if (playerFaction && faction && !playerFaction->IsFriendlyTo(*faction)) + return false; + // BUG: sometimes when player clicks on flag in AB - client won't send gameobject_use, only gameobject_report_use packet // Note: Mount, stealth and invisibility will be removed when used return (!isTotalImmune() && // Damage immune diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 5670ca05a85..c417c73cdbc 100755 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2237,7 +2237,7 @@ class Player : public Unit, public GridObject bool GetBGAccessByLevel(BattlegroundTypeId bgTypeId) const; bool isTotalImmunity(); - bool CanUseBattlegroundObject(); + bool CanUseBattlegroundObject(GameObject* gameobject); bool isTotalImmune(); bool CanCaptureTowerPoint(); diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 85a1d0d3c7f..295c8216b7f 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -5210,7 +5210,7 @@ SpellCastResult Spell::CheckCast(bool strict) if (m_spellInfo->Id != 1842 || (m_targets.GetGOTarget() && m_targets.GetGOTarget()->GetGOInfo()->type != GAMEOBJECT_TYPE_TRAP)) if (m_caster->ToPlayer()->InBattleground() && // In Battleground players can use only flags and banners - !m_caster->ToPlayer()->CanUseBattlegroundObject()) + !m_caster->ToPlayer()->CanUseBattlegroundObject(m_targets.GetGOTarget())) return SPELL_FAILED_TRY_AGAIN; // get the lock entry -- cgit v1.2.3