Index: /trunk/src/game/SpellEffects.cpp
===================================================================
--- /trunk/src/game/SpellEffects.cpp (revision 240)
+++ /trunk/src/game/SpellEffects.cpp (revision 246)
@@ -334,11 +334,24 @@
                         break;
                     }
-                    // must only affect demons
+                    // must only affect demons (also undead?)
                     case 45072:
                     {
-                        if(unitTarget->GetCreatureType() != CREATURE_TYPE_DEMON)
+                        if(unitTarget->GetCreatureType() != CREATURE_TYPE_DEMON
+                            || unitTarget->GetCreatureType() != CREATURE_TYPE_UNDEAD)
                             return;
                         break;
                     }
+                    // gruul's shatter
+                    case 33671:
+                    {
+                        // don't damage self and only players
+                        if(unitTarget->GetGUID() == m_caster->GetGUID() || unitTarget->GetTypeId() != TYPEID_PLAYER)
+                            return;
+
+                        float radius = GetSpellRadius(sSpellRadiusStore.LookupEntry(m_spellInfo->EffectRadiusIndex[0]));
+                        if(!radius) return;
+                        float distance = m_caster->GetDistance2d(unitTarget);
+                        damage = (distance > radius ) ? 0 : (int32)(m_spellInfo->EffectBasePoints[0]*((radius - distance)/radius));
+                    }break;
                 }
                 break;
@@ -2638,4 +2651,5 @@
     float radius = GetSpellRadius(sSpellRadiusStore.LookupEntry(m_spellInfo->EffectRadiusIndex[i]));
     Unit *caster = m_originalCasterGUID ? m_originalCaster : m_caster;
+    if(!caster) return;
 
     if(Player* modOwner = caster->GetSpellModOwner())
Index: /trunk/src/game/ArenaTeam.cpp
===================================================================
--- /trunk/src/game/ArenaTeam.cpp (revision 245)
+++ /trunk/src/game/ArenaTeam.cpp (revision 246)
@@ -98,5 +98,5 @@
     if(pl)
     {
-        if(pl->GetArenaTeamId(GetSlot()))
+        if(pl->GetArenaTeamId(GetType()))
         {
             sLog.outError("Arena::AddMember() : player already in this sized team");
Index: /trunk/src/game/GameObject.cpp
===================================================================
--- /trunk/src/game/GameObject.cpp (revision 230)
+++ /trunk/src/game/GameObject.cpp (revision 246)
@@ -1281,5 +1281,5 @@
     {
         trigger->setFaction(14);
-        trigger->CastSpell(target, spell, true);
+        trigger->CastSpell(target, spell, true, 0, 0, target->GetGUID());
     }
     //trigger->setDeathState(JUST_DIED);
