rendered paste bodyIndex: 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)