*Mangos [7034] Add support 96 bit spell family mask to triggers. By DiSlord.
*Mangos [7035] Disable wrong use some spell effects (changed in 303). By DiSlord. *Mangos [7036] Implement one warlock glyph. By DiSlord. --HG-- branch : trunk
This commit is contained in:
@@ -565,8 +565,8 @@ enum SpellEffects
|
||||
SPELL_EFFECT_DISPEL = 38,
|
||||
SPELL_EFFECT_LANGUAGE = 39,
|
||||
SPELL_EFFECT_DUAL_WIELD = 40,
|
||||
SPELL_EFFECT_SUMMON_WILD = 41,
|
||||
SPELL_EFFECT_SUMMON_GUARDIAN = 42,
|
||||
SPELL_EFFECT_JUMP = 41,
|
||||
SPELL_EFFECT_JUMP2 = 42,
|
||||
SPELL_EFFECT_TELEPORT_UNITS_FACE_CASTER= 43,
|
||||
SPELL_EFFECT_SKILL_STEP = 44,
|
||||
SPELL_EFFECT_ADD_HONOR = 45,
|
||||
@@ -621,7 +621,7 @@ enum SpellEffects
|
||||
SPELL_EFFECT_SELF_RESURRECT = 94,
|
||||
SPELL_EFFECT_SKINNING = 95,
|
||||
SPELL_EFFECT_CHARGE = 96,
|
||||
SPELL_EFFECT_SUMMON_CRITTER = 97,
|
||||
SPELL_EFFECT_97 = 97,
|
||||
SPELL_EFFECT_KNOCK_BACK = 98,
|
||||
SPELL_EFFECT_DISENCHANT = 99,
|
||||
SPELL_EFFECT_INEBRIATE = 100,
|
||||
@@ -636,7 +636,7 @@ enum SpellEffects
|
||||
SPELL_EFFECT_SUMMON_DEAD_PET = 109,
|
||||
SPELL_EFFECT_DESTROY_ALL_TOTEMS = 110,
|
||||
SPELL_EFFECT_DURABILITY_DAMAGE = 111,
|
||||
SPELL_EFFECT_SUMMON_DEMON = 112,
|
||||
SPELL_EFFECT_112 = 112,
|
||||
SPELL_EFFECT_RESURRECT_NEW = 113,
|
||||
SPELL_EFFECT_ATTACK_ME = 114,
|
||||
SPELL_EFFECT_DURABILITY_DAMAGE_PCT = 115,
|
||||
|
||||
+2
-6
@@ -4161,9 +4161,7 @@ uint8 Spell::CanCast(bool strict)
|
||||
|
||||
break;
|
||||
}
|
||||
// This is generic summon effect now and don't make this check for summon types similar
|
||||
// SPELL_EFFECT_SUMMON_CRITTER, SPELL_EFFECT_SUMMON_WILD or SPELL_EFFECT_SUMMON_GUARDIAN.
|
||||
// These won't show up in m_caster->GetPetGUID()
|
||||
// This is generic summon effect
|
||||
case SPELL_EFFECT_SUMMON:
|
||||
{
|
||||
switch(m_spellInfo->EffectMiscValueB[i])
|
||||
@@ -4184,10 +4182,8 @@ uint8 Spell::CanCast(bool strict)
|
||||
}
|
||||
break;
|
||||
}
|
||||
// Don't make this check for SPELL_EFFECT_SUMMON_CRITTER, SPELL_EFFECT_SUMMON_WILD or SPELL_EFFECT_SUMMON_GUARDIAN.
|
||||
// These won't show up in m_caster->GetPetGUID()
|
||||
// Not used for summon?
|
||||
case SPELL_EFFECT_SUMMON_PHANTASM:
|
||||
case SPELL_EFFECT_SUMMON_DEMON:
|
||||
{
|
||||
if(m_caster->GetPetGUID())
|
||||
return SPELL_FAILED_ALREADY_HAVE_SUMMON;
|
||||
|
||||
@@ -104,8 +104,8 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]=
|
||||
&Spell::EffectDispel, // 38 SPELL_EFFECT_DISPEL
|
||||
&Spell::EffectUnused, // 39 SPELL_EFFECT_LANGUAGE
|
||||
&Spell::EffectDualWield, // 40 SPELL_EFFECT_DUAL_WIELD
|
||||
&Spell::EffectSummonWild, // 41 SPELL_EFFECT_SUMMON_WILD
|
||||
&Spell::EffectSummonGuardian, // 42 SPELL_EFFECT_SUMMON_GUARDIAN
|
||||
&Spell::EffectUnused, // 41 SPELL_EFFECT_JUMP
|
||||
&Spell::EffectUnused, // 42 SPELL_EFFECT_JUMP2
|
||||
&Spell::EffectTeleUnitsFaceCaster, // 43 SPELL_EFFECT_TELEPORT_UNITS_FACE_CASTER
|
||||
&Spell::EffectLearnSkill, // 44 SPELL_EFFECT_SKILL_STEP
|
||||
&Spell::EffectAddHonor, // 45 SPELL_EFFECT_ADD_HONOR honor/pvp related
|
||||
@@ -160,7 +160,7 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]=
|
||||
&Spell::EffectSelfResurrect, // 94 SPELL_EFFECT_SELF_RESURRECT
|
||||
&Spell::EffectSkinning, // 95 SPELL_EFFECT_SKINNING
|
||||
&Spell::EffectCharge, // 96 SPELL_EFFECT_CHARGE
|
||||
&Spell::EffectSummonCritter, // 97 SPELL_EFFECT_SUMMON_CRITTER
|
||||
&Spell::EffectUnused, // 97 SPELL_EFFECT_97
|
||||
&Spell::EffectKnockBack, // 98 SPELL_EFFECT_KNOCK_BACK
|
||||
&Spell::EffectDisEnchant, // 99 SPELL_EFFECT_DISENCHANT
|
||||
&Spell::EffectInebriate, //100 SPELL_EFFECT_INEBRIATE
|
||||
@@ -175,7 +175,7 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]=
|
||||
&Spell::EffectSummonDeadPet, //109 SPELL_EFFECT_SUMMON_DEAD_PET
|
||||
&Spell::EffectDestroyAllTotems, //110 SPELL_EFFECT_DESTROY_ALL_TOTEMS
|
||||
&Spell::EffectDurabilityDamage, //111 SPELL_EFFECT_DURABILITY_DAMAGE
|
||||
&Spell::EffectSummonDemon, //112 SPELL_EFFECT_SUMMON_DEMON
|
||||
&Spell::EffectUnused, //112 SPELL_EFFECT_112
|
||||
&Spell::EffectResurrectNew, //113 SPELL_EFFECT_RESURRECT_NEW
|
||||
&Spell::EffectTaunt, //114 SPELL_EFFECT_ATTACK_ME
|
||||
&Spell::EffectDurabilityDamagePCT, //115 SPELL_EFFECT_DURABILITY_DAMAGE_PCT
|
||||
|
||||
+16
-17
@@ -36,8 +36,8 @@ SpellMgr::SpellMgr()
|
||||
case SPELL_EFFECT_PERSISTENT_AREA_AURA: //27
|
||||
case SPELL_EFFECT_SUMMON: //28
|
||||
case SPELL_EFFECT_TRIGGER_MISSILE: //32
|
||||
case SPELL_EFFECT_SUMMON_WILD: //41
|
||||
case SPELL_EFFECT_SUMMON_GUARDIAN: //42
|
||||
//case SPELL_EFFECT_SUMMON_WILD: //41 not 303
|
||||
//case SPELL_EFFECT_SUMMON_GUARDIAN: //42 not 303
|
||||
case SPELL_EFFECT_TRANS_DOOR: //50 summon object
|
||||
case SPELL_EFFECT_SUMMON_PET: //56
|
||||
case SPELL_EFFECT_ADD_FARSIGHT: //72
|
||||
@@ -48,13 +48,13 @@ SpellMgr::SpellMgr()
|
||||
//case SPELL_EFFECT_SUMMON_TOTEM_SLOT2: //88
|
||||
//case SPELL_EFFECT_SUMMON_TOTEM_SLOT3: //89
|
||||
//case SPELL_EFFECT_SUMMON_TOTEM_SLOT4: //90
|
||||
case SPELL_EFFECT_SUMMON_CRITTER: //97
|
||||
//case SPELL_EFFECT_SUMMON_CRITTER: //97 not 303
|
||||
case SPELL_EFFECT_SUMMON_OBJECT_SLOT1: //104
|
||||
case SPELL_EFFECT_SUMMON_OBJECT_SLOT2: //105
|
||||
case SPELL_EFFECT_SUMMON_OBJECT_SLOT3: //106
|
||||
case SPELL_EFFECT_SUMMON_OBJECT_SLOT4: //107
|
||||
case SPELL_EFFECT_SUMMON_DEAD_PET: //109
|
||||
case SPELL_EFFECT_SUMMON_DEMON: //112
|
||||
//case SPELL_EFFECT_SUMMON_DEMON: //112 not 303
|
||||
case SPELL_EFFECT_TRIGGER_SPELL_2: //151 ritual of summon
|
||||
EffectTargetType[i] = SPELL_REQUIRE_DEST;
|
||||
break;
|
||||
@@ -1019,15 +1019,12 @@ void SpellMgr::LoadSpellProcEvents()
|
||||
|
||||
uint32 count = 0;
|
||||
|
||||
// 0 1 2 3 4 5 6 7 8
|
||||
QueryResult *result = WorldDatabase.Query("SELECT entry, SchoolMask, SpellFamilyName, SpellFamilyMask, procFlags, procEx, ppmRate, CustomChance, Cooldown FROM spell_proc_event");
|
||||
// 0 1 2 3 4 5 6 7 8 9 10
|
||||
QueryResult *result = WorldDatabase.Query("SELECT entry, SchoolMask, SpellFamilyName, SpellFamilyMask0, SpellFamilyMask1, SpellFamilyMask2, procFlags, procEx, ppmRate, CustomChance, Cooldown FROM spell_proc_event");
|
||||
if( !result )
|
||||
{
|
||||
|
||||
barGoLink bar( 1 );
|
||||
|
||||
bar.step();
|
||||
|
||||
sLog.outString();
|
||||
sLog.outString( ">> Loaded %u spell proc event conditions", count );
|
||||
return;
|
||||
@@ -1054,12 +1051,13 @@ void SpellMgr::LoadSpellProcEvents()
|
||||
|
||||
spe.schoolMask = fields[1].GetUInt32();
|
||||
spe.spellFamilyName = fields[2].GetUInt32();
|
||||
spe.spellFamilyMask = fields[3].GetUInt64();
|
||||
spe.procFlags = fields[4].GetUInt32();
|
||||
spe.procEx = fields[5].GetUInt32();
|
||||
spe.ppmRate = fields[6].GetFloat();
|
||||
spe.customChance = fields[7].GetFloat();
|
||||
spe.cooldown = fields[8].GetUInt32();
|
||||
spe.spellFamilyMask = (uint64)fields[3].GetUInt32()|((uint64)fields[4].GetUInt32()<<32);
|
||||
spe.spellFamilyMask2= fields[5].GetUInt32();
|
||||
spe.procFlags = fields[6].GetUInt32();
|
||||
spe.procEx = fields[7].GetUInt32();
|
||||
spe.ppmRate = fields[8].GetFloat();
|
||||
spe.customChance = fields[9].GetFloat();
|
||||
spe.cooldown = fields[10].GetUInt32();
|
||||
|
||||
mSpellProcEventMap[entry] = spe;
|
||||
|
||||
@@ -1120,9 +1118,10 @@ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const * spellP
|
||||
return false;
|
||||
|
||||
// spellFamilyName is Ok need check for spellFamilyMask if present
|
||||
if(spellProcEvent->spellFamilyMask)
|
||||
if(spellProcEvent->spellFamilyMask || spellProcEvent->spellFamilyMask2)
|
||||
{
|
||||
if ((spellProcEvent->spellFamilyMask & procSpell->SpellFamilyFlags) == 0)
|
||||
if ((spellProcEvent->spellFamilyMask & procSpell->SpellFamilyFlags ) == 0 &&
|
||||
(spellProcEvent->spellFamilyMask2 & procSpell->SpellFamilyFlags2) == 0)
|
||||
return false;
|
||||
active = true; // Spell added manualy -> so its active spell
|
||||
}
|
||||
|
||||
+2
-1
@@ -568,7 +568,8 @@ struct SpellProcEventEntry
|
||||
{
|
||||
uint32 schoolMask; // if nonzero - bit mask for matching proc condition based on spell candidate's school: Fire=2, Mask=1<<(2-1)=2
|
||||
uint32 spellFamilyName; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyNamer value
|
||||
uint64 spellFamilyMask; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyFlags (like auras 107 and 108 do)
|
||||
uint64 spellFamilyMask; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyFlags (like auras 107 and 108 do)
|
||||
uint32 spellFamilyMask2; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyFlags2 (like auras 107 and 108 do)
|
||||
uint32 procFlags; // bitmask for matching proc event
|
||||
uint32 procEx; // proc Extend info (see ProcFlagsEx)
|
||||
float ppmRate; // for melee (ranged?) damage spells - proc rate per minute. if zero, falls back to flat chance from Spell.dbc
|
||||
|
||||
@@ -4775,6 +4775,15 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu
|
||||
target = this;
|
||||
break;
|
||||
}
|
||||
// Vampiric Touch (generic, used by some boss)
|
||||
case 52723:
|
||||
case 60501:
|
||||
{
|
||||
triggered_spell_id = 52724;
|
||||
basepoints0 = damage / 2;
|
||||
target = this;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -7678,6 +7687,16 @@ bool Unit::isSpellCrit(Unit *pVictim, SpellEntry const *spellProto, SpellSchoolM
|
||||
}
|
||||
}
|
||||
}
|
||||
// Glyph of Shadowburn
|
||||
if (spellProto->SpellFamilyName == SPELLFAMILY_WARLOCK &&
|
||||
spellProto->SpellFamilyFlags & 0x0000000000000080 &&
|
||||
pVictim->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT))
|
||||
{
|
||||
AuraList const& mOverrideClassScript = GetAurasByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS);
|
||||
for(AuraList::const_iterator i = mOverrideClassScript.begin(); i != mOverrideClassScript.end(); ++i)
|
||||
if((*i)->GetModifier()->m_miscvalue == 7917)
|
||||
crit_chance+=(*i)->GetModifier()->m_amount;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user