Index: /Trunk/src/SpellHandlers/ItemSpells_1.cpp
===================================================================
--- /Trunk/src/SpellHandlers/ItemSpells_1.cpp (revision 1108)
+++ /Trunk/src/SpellHandlers/ItemSpells_1.cpp (revision 1148)
@@ -606,4 +606,39 @@
 }
 
+bool Invincible(uint32 i, Aura * pAura, bool apply)
+{
+	if( pAura->GetTarget()->GetTypeId() != TYPEID_PLAYER )
+		return true;
+
+	if( apply )
+	{
+		uint32 newspell = 0;
+		Player* pPlayer = TO_PLAYER( pAura->GetTarget() );
+		AreaTable *pArea = dbcArea.LookupEntry(pPlayer->GetAreaID());
+
+		if( pPlayer->_GetSkillLineCurrent( SKILL_RIDING, true) >= 225 &&
+			( ( pArea->AreaFlags & 1024 && pPlayer->GetMapId() != 571 ) ||
+				( pArea->AreaFlags & 1024 && pPlayer->GetMapId() == 571 && pPlayer->HasSpellwithNameHash( SPELL_HASH_COLD_WEATHER_FLYING ) ) ) )
+		{
+		if( pPlayer->_GetSkillLineCurrent( SKILL_RIDING, true) == 300 )
+			newspell = 72284;
+		else
+			newspell = 72283;
+		}
+
+		else if( pPlayer->_GetSkillLineCurrent( SKILL_RIDING, true ) >= 150 )
+			{
+				newspell = 72282;
+		}
+			else
+				newspell = 72281;
+
+	SpellEntry *sp = dbcSpell.LookupEntry(newspell);
+	sEventMgr.AddEvent( pAura->GetTarget() ,&Unit::EventCastSpell , pAura->GetTarget() , sp , EVENT_UNK, 1 , 1, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT );
+	}
+
+
+	return true;
+}
 // ADD NEW FUNCTIONS ABOVE THIS LINE
 // *****************************************************************************
@@ -642,4 +677,5 @@
 	mgr->register_dummy_aura( 47977, &MagicBroomMount);			// Magic Broom Mount
 	mgr->register_dummy_aura( 65917, &MagicRoosterMount);		// Magic Rooster Mount
+	mgr->register_dummy_aura( 72286, &Invincible);				// Invincible
 
 
