All pastes #912912 Raw Edit

Unnamed

public text v1 · immutable
·published 2008-02-21 18:40 UTC
rendered paste body
Index: game/Spell.cpp
===================================================================
--- game/Spell.cpp	(revision 5268)
+++ game/Spell.cpp	(working copy)
@@ -2378,14 +2379,10 @@
         m_caster->SetUInt32Value(UNIT_CHANNEL_SPELL,0);
     }
 
-    if (m_caster->GetTypeId() != TYPEID_PLAYER)
-        return;
-
     WorldPacket data( MSG_CHANNEL_UPDATE, 8+4 );
     data.append(m_caster->GetPackGUID());
     data << time;
-
-    ((Player*)m_caster)->GetSession()->SendPacket( &data );
+	m_caster->SendMessageToSet(&data,true);
 }
 
 void Spell::SendChannelStart(uint32 duration)
@@ -3838,7 +3835,7 @@
             case SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL:
             {
                 if(m_caster->GetTypeId() != TYPEID_PLAYER) return SPELL_FAILED_TARGET_NOT_PLAYER;
-                if(m_spellInfo->rangeIndex == 1 || m_spellInfo->rangeIndex == 2 || m_spellInfo->rangeIndex == 7)
+				if(m_spellInfo->rangeIndex == 1 || m_spellInfo->rangeIndex == 2 || m_spellInfo->rangeIndex == 6 || m_spellInfo->rangeIndex == 7)
                     break;
                 Item *pItem = ((Player*)m_caster)->GetItemByPos( INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_RANGED );
                 if(!pItem || pItem->IsBroken() || pItem->GetProto()->Class != ITEM_CLASS_WEAPON )
@@ -3901,7 +3898,7 @@
 
 void Spell::Delayed(int32 delaytime)
 {
-    if(!m_caster || m_caster->GetTypeId() != TYPEID_PLAYER)
+    if(!m_caster)
         return;
 
     if (m_spellState == SPELL_STATE_DELAYED)
@@ -3912,35 +3909,40 @@
         return;
 
     //check resist chance
-    int32 resistChance = 100;                               //must be initialized to 100 for percent modifiers
-    ((Player*)m_caster)->ApplySpellMod(m_spellInfo->Id,SPELLMOD_NOT_LOSE_CASTING_TIME,resistChance, this);
-    resistChance += m_caster->GetTotalAuraModifier(SPELL_AURA_RESIST_PUSHBACK) - 100;
-    if (roll_chance_f(resistChance))
-        return;
+	if ( m_caster->GetTypeId() == TYPEID_PLAYER )
+	{
+		int32 resistChance = 100;                               //must be initialized to 100 for percent modifiers
+		((Player*)m_caster)->ApplySpellMod(m_spellInfo->Id,SPELLMOD_NOT_LOSE_CASTING_TIME,resistChance, this);
+		resistChance += m_caster->GetTotalAuraModifier(SPELL_AURA_RESIST_PUSHBACK) - 100;
+		if (roll_chance_f(resistChance))
+			return;
+	}
 
     m_timer += delaytime;
 
     if(int32(m_timer) > casttime)
         ReSetTimer();
 
-    WorldPacket data(SMSG_SPELL_DELAYED, 8+4);
-    data.append(m_caster->GetPackGUID());
-    data << uint32(delaytime);
-
-    ((Player*)m_caster)->GetSession()->SendPacket(&data);
+	WorldPacket data(SMSG_SPELL_DELAYED, 8+4);
+	data.append(m_caster->GetPackGUID());
+	data << uint32(delaytime);
+	m_caster->SendMessageToSet(&data, true);
 }
 
 void Spell::DelayedChannel(int32 delaytime)
 {
-    if(!m_caster || m_caster->GetTypeId() != TYPEID_PLAYER || getState() != SPELL_STATE_CASTING)
+    if(!m_caster || getState() != SPELL_STATE_CASTING)
         return;
 
     //check resist chance
-    int32 resistChance = 100;                               //must be initialized to 100 for percent modifiers
-    ((Player*)m_caster)->ApplySpellMod(m_spellInfo->Id,SPELLMOD_NOT_LOSE_CASTING_TIME,resistChance, this);
-    resistChance += m_caster->GetTotalAuraModifier(SPELL_AURA_RESIST_PUSHBACK) - 100;
-    if (roll_chance_f(resistChance))
-        return;
+	if ( m_caster->GetTypeId() == TYPEID_PLAYER )
+	{
+		int32 resistChance = 100;                               //must be initialized to 100 for percent modifiers
+		((Player*)m_caster)->ApplySpellMod(m_spellInfo->Id,SPELLMOD_NOT_LOSE_CASTING_TIME,resistChance, this);
+		resistChance += m_caster->GetTotalAuraModifier(SPELL_AURA_RESIST_PUSHBACK) - 100;
+		if (roll_chance_f(resistChance))
+			return;
+	}
 
     int32 appliedDelayTime = delaytime;
 
Index: game/Unit.cpp
===================================================================
--- game/Unit.cpp	(revision 5268)
+++ game/Unit.cpp	(working copy)
@@ -924,9 +925,23 @@
             }
         }
 
-        if (damagetype != NODAMAGE)
+		if (damagetype != NODAMAGE && damage)
         {
-            if(pVictim->m_currentSpells[CURRENT_CHANNELED_SPELL] && pVictim->GetTypeId() == TYPEID_PLAYER && damage)
+
+			for (uint32 i = CURRENT_FIRST_NON_MELEE_SPELL; i < CURRENT_MAX_SPELL; i++)
+			{
+				// skip channeled spell (processed differently below)
+				if (i == CURRENT_CHANNELED_SPELL)
+					continue;
+
+				if(pVictim->m_currentSpells[i] && damagetype != DOT)
+				{
+					sLog.outDetail("Spell Delayed!%d",(int32)(0.25f * pVictim->m_currentSpells[i]->casttime));
+					pVictim->m_currentSpells[i]->Delayed((int32)(0.25f * pVictim->m_currentSpells[i]->casttime));
+				}
+			}
+
+            if(pVictim->m_currentSpells[CURRENT_CHANNELED_SPELL])
             {
                 if (pVictim->m_currentSpells[CURRENT_CHANNELED_SPELL]->getState() == SPELL_STATE_CASTING)
                 {
@@ -2325,47 +2354,7 @@
         }
     }
 
-    if (pVictim->GetTypeId() == TYPEID_PLAYER && *damage)
-    {
-        for (uint32 i = CURRENT_FIRST_NON_MELEE_SPELL; i < CURRENT_MAX_SPELL; i++)
-        {
-            // skip channeled spell (processed differently below)
-            if (i == CURRENT_CHANNELED_SPELL)
-                continue;
-
-            if(pVictim->m_currentSpells[i])
-            {
-                sLog.outDetail("Spell Delayed!%d",(int32)(0.25f * pVictim->m_currentSpells[i]->casttime));
-                pVictim->m_currentSpells[i]->Delayed((int32)(0.25f * pVictim->m_currentSpells[i]->casttime));
-            }
-        }
-
-        // process channeled spell separately
-        if (pVictim->m_currentSpells[CURRENT_CHANNELED_SPELL])
-        {
-            if (pVictim->m_currentSpells[CURRENT_CHANNELED_SPELL]->getState() == SPELL_STATE_CASTING)
-            {
-                uint32 channelInterruptFlags = pVictim->m_currentSpells[CURRENT_CHANNELED_SPELL]->m_spellInfo->ChannelInterruptFlags;
-                if( channelInterruptFlags & CHANNEL_FLAG_DELAY )
-                {
-                    sLog.outDetail("Spell Delayed!%d",(int32)(0.25f * GetDuration(pVictim->m_currentSpells[CURRENT_CHANNELED_SPELL]->m_spellInfo)));
-                    pVictim->m_currentSpells[CURRENT_CHANNELED_SPELL]->DelayedChannel((int32)(0.25f * GetDuration(pVictim->m_currentSpells[CURRENT_CHANNELED_SPELL]->m_spellInfo)));
-                    return;
-                }
-                else if( !(channelInterruptFlags & (CHANNEL_FLAG_DAMAGE | CHANNEL_FLAG_DAMAGE2)) )
-                    return;
-
-                sLog.outDetail("Spell Canceled!");
-                pVictim->m_currentSpells[CURRENT_CHANNELED_SPELL]->cancel();
-            }
-            else if (pVictim->m_currentSpells[CURRENT_CHANNELED_SPELL]->getState() == SPELL_STATE_DELAYED)
-            {
-                // break channeled spell in delayed state on damage
-                sLog.outDetail("Spell Canceled!");
-                pVictim->m_currentSpells[CURRENT_CHANNELED_SPELL]->cancel();
-            }
-        }
-    }
+ 
 }
 
 void Unit::AttackerStateUpdate (Unit *pVictim, WeaponAttackType attType, bool isTriggered)