Index: src/game/SpellAuras.cpp =================================================================== --- src/game/SpellAuras.cpp (revision 5578) +++ src/game/SpellAuras.cpp (working copy) @@ -3099,6 +3099,41 @@ } } } + if(m_target->GetTypeId() == TYPEID_PLAYER) + { + if(((Player*)m_target)->InBattleGround()) + { + BattleGround *bg = ((Player*)m_target)->GetBattleGround(); + if(bg) + { + switch(bg->GetTypeID()) + { + case BATTLEGROUND_AV: + { + break; + } + case BATTLEGROUND_WS: + { + if(((BattleGroundWS*)bg)->IsHordeFlagPickedup()) + // Warsong Flag, horde + ((BattleGroundWS*)bg)->EventPlayerDroppedFlag(((Player*)m_target)); + if(((BattleGroundWS*)bg)->IsAllianceFlagPickedup()) + // Silverwing Flag, alliance + ((BattleGroundWS*)bg)->EventPlayerDroppedFlag(((Player*)m_target)); + break; + } + case BATTLEGROUND_AB: + { + break; + } + case BATTLEGROUND_EY: + { + break; + } + } + } + } + } } } Index: src/game/SpellHandler.cpp =================================================================== --- src/game/SpellHandler.cpp (revision 5578) +++ src/game/SpellHandler.cpp (working copy) @@ -479,6 +479,8 @@ // check player team if(_player->GetTeam() == ALLIANCE) return; + if ((Unit*)_player->HasAuraType(SPELL_AURA_SCHOOL_IMMUNITY)) + return; spellId = 23335; // Silverwing Flag break; case 179831: @@ -494,6 +496,8 @@ // check player team if(_player->GetTeam() == HORDE) return; + if ((Unit*)_player->HasAuraType(SPELL_AURA_SCHOOL_IMMUNITY)) + return; spellId = 23333; // Warsong Flag break; case 184141: @@ -534,15 +538,18 @@ // check if flag dropped if(((BattleGroundWS*)bg)->GetFlagState(ALLIANCE) != BG_WS_FLAG_STATE_ON_GROUND) return; - obj->Delete(); if(_player->GetTeam() == ALLIANCE) { ((BattleGroundWS*)bg)->EventPlayerReturnedFlag(_player); + obj->Delete(); return; } else { + if ((Unit*)_player->HasAuraType(SPELL_AURA_SCHOOL_IMMUNITY)) + return; _player->CastSpell(_player, 23335, true); + obj->Delete(); return; } break; @@ -553,15 +560,18 @@ // check if flag dropped if(((BattleGroundWS*)bg)->GetFlagState(HORDE) != BG_WS_FLAG_STATE_ON_GROUND) return; - obj->Delete(); if(_player->GetTeam() == HORDE) { ((BattleGroundWS*)bg)->EventPlayerReturnedFlag(_player); + obj->Delete(); return; } else { + if ((Unit*)_player->HasAuraType(SPELL_AURA_SCHOOL_IMMUNITY)) + return; _player->CastSpell(_player, 23333, true); + obj->Delete(); return; } break;