diff --git a/contrib/extractor/ad.exe b/contrib/extractor/ad.exe index e9606e8e0..eec43be65 100755 Binary files a/contrib/extractor/ad.exe and b/contrib/extractor/ad.exe differ diff --git a/src/game/GameObject.cpp b/src/game/GameObject.cpp index 795a95988..2544640c5 100644 --- a/src/game/GameObject.cpp +++ b/src/game/GameObject.cpp @@ -206,7 +206,7 @@ void GameObject::Update(uint32 /*p_time*/) if(caster && caster->GetTypeId()==TYPEID_PLAYER) { SetGoState(0); - SetUInt32Value(GAMEOBJECT_FLAGS, 32); + SetUInt32Value(GAMEOBJECT_FLAGS, GO_FLAG_NODESPAWN); UpdateData udata; WorldPacket packet; diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 356deb8b9..03b4e7042 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -6514,7 +6514,7 @@ bool PlayerCondition::Meets(Player const * player) const { Unit::AuraMap const& auras = player->GetAuras(); for(Unit::AuraMap::const_iterator itr = auras.begin(); itr != auras.end(); ++itr) - if((itr->second->GetSpellProto()->Attributes & 0x1000010) && itr->second->GetSpellProto()->SpellVisual==3580) + if((itr->second->GetSpellProto()->Attributes & 0x1000010) && itr->second->GetSpellProto()->SpellVisual[0]==3580) return true; return false; } diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 324573aba..bcc975f19 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -18141,7 +18141,7 @@ uint32 Player::GetResurrectionSpellId() for(AuraList::const_iterator itr = dummyAuras.begin(); itr != dummyAuras.end(); ++itr) { // Soulstone Resurrection // prio: 3 (max, non death persistent) - if( prio < 2 && (*itr)->GetSpellProto()->SpellVisual == 99 && (*itr)->GetSpellProto()->SpellIconID == 92 ) + if( prio < 2 && (*itr)->GetSpellProto()->SpellVisual[0] == 99 && (*itr)->GetSpellProto()->SpellIconID == 92 ) { switch((*itr)->GetId()) { diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index 5f1037d37..7e9b81eb5 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -775,7 +775,7 @@ enum SpellImmunity IMMUNITY_MECHANIC = 5 // enum Mechanics }; -#define MAX_SPELL_IMMUNITY 6 +#define MAX_SPELL_IMMUNITY 6 enum Targets { @@ -913,13 +913,13 @@ enum GameobjectTypes enum GameObjectFlags { - GO_FLAG_IN_USE = 0x01, //disables interaction while animated - GO_FLAG_LOCKED = 0x02, //require key, spell, event, etc to be opened. Makes "Locked" appear in tooltip - GO_FLAG_INTERACT_COND = 0x04, //cannot interact (condition to interact) - GO_FLAG_TRANSPORT = 0x08, //any kind of transport? Object can transport (elevator, boat, car) - GO_FLAG_UNK1 = 0x10, // - GO_FLAG_NODESPAWN = 0x20, //never despawn, typically for doors, they just change state - GO_FLAG_TRIGGERED = 0x40, //typically, summoned objects. Triggered by spell or other events + GO_FLAG_IN_USE = 0x00000001, //disables interaction while animated + GO_FLAG_LOCKED = 0x00000002, //require key, spell, event, etc to be opened. Makes "Locked" appear in tooltip + GO_FLAG_INTERACT_COND = 0x00000004, //cannot interact (condition to interact) + GO_FLAG_TRANSPORT = 0x00000008, //any kind of transport? Object can transport (elevator, boat, car) + GO_FLAG_UNK1 = 0x00000010, // + GO_FLAG_NODESPAWN = 0x00000020, //never despawn, typically for doors, they just change state + GO_FLAG_TRIGGERED = 0x00000040 //typically, summoned objects. Triggered by spell or other events }; enum TextEmotes diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index bb27bbd55..0dcab744f 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -1550,7 +1550,7 @@ void Spell::SetTargetMap(uint32 i,uint32 cur,std::list &TagUnitMap) cell.data.Part.reserved = ALL_DISTRICT; cell.SetNoCreate(); - bool inFront = m_spellInfo->SpellVisual != 3879; + bool inFront = m_spellInfo->SpellVisual[0] != 3879; MaNGOS::SpellNotifierCreatureAndPlayer notifier(*this, TagUnitMap, radius, inFront ? PUSH_IN_FRONT : PUSH_IN_BACK,SPELL_TARGETS_AOE_DAMAGE); TypeContainerVisitor world_object_notifier(notifier); @@ -3551,7 +3551,7 @@ uint8 Spell::CanCast(bool strict) case SPELL_EFFECT_SCHOOL_DAMAGE: { // Hammer of Wrath - if(m_spellInfo->SpellVisual == 7250) + if(m_spellInfo->SpellVisual[0] == 7250) { if (!m_targets.getUnitTarget()) return SPELL_FAILED_BAD_IMPLICIT_TARGETS; diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index e76997017..6b1536855 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -4066,7 +4066,7 @@ void Aura::HandlePeriodicDamage(bool apply, bool Real) case SPELLFAMILY_ROGUE: { // Deadly poison aura state - if((m_spellProto->SpellFamilyFlags & 0x10000) && m_spellProto->SpellVisual==5100) + if((m_spellProto->SpellFamilyFlags & 0x10000) && m_spellProto->SpellVisual[0]==5100) { if(apply) m_target->ModifyAuraState(AURA_STATE_DEADLY_POISON,true); @@ -4078,7 +4078,7 @@ void Aura::HandlePeriodicDamage(bool apply, bool Real) for(Unit::AuraList::const_iterator itr = auras.begin(); itr != auras.end(); ++itr) { SpellEntry const* itr_spell = (*itr)->GetSpellProto(); - if(itr_spell && itr_spell->SpellFamilyName==SPELLFAMILY_ROGUE && (itr_spell->SpellFamilyFlags & 0x10000) && itr_spell->SpellVisual==5100) + if(itr_spell && itr_spell->SpellFamilyName==SPELLFAMILY_ROGUE && (itr_spell->SpellFamilyFlags & 0x10000) && itr_spell->SpellVisual[0]==5100) { found = true; break; @@ -5765,7 +5765,7 @@ void Aura::PeriodicTick() return; // heal for caster damage (must be alive) - if(m_target != pCaster && GetSpellProto()->SpellVisual==163 && !pCaster->isAlive()) + if(m_target != pCaster && GetSpellProto()->SpellVisual[0]==163 && !pCaster->isAlive()) return; // ignore non positive values (can be result apply spellmods to aura damage @@ -5810,7 +5810,7 @@ void Aura::PeriodicTick() bool haveCastItem = GetCastItemGUID()!=0; // heal for caster damage - if(m_target!=pCaster && spellProto->SpellVisual==163) + if(m_target!=pCaster && spellProto->SpellVisual[0]==163) { uint32 dmg = spellProto->manaPerSecond; if(pCaster->GetHealth() <= dmg && pCaster->GetTypeId()==TYPEID_PLAYER) diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 5c4c02e1b..2ef1da977 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -386,7 +386,7 @@ void Spell::EffectSchoolDMG(uint32 effect_idx) case SPELLFAMILY_DRUID: { // Ferocious Bite - if((m_spellInfo->SpellFamilyFlags & 0x000800000) && m_spellInfo->SpellVisual==6587) + if((m_spellInfo->SpellFamilyFlags & 0x000800000) && m_spellInfo->SpellVisual[0]==6587) { // converts each extra point of energy into ($f1+$AP/630) additional damage float multiple = m_caster->GetTotalAttackPowerValue(BASE_ATTACK) / 630 + m_spellInfo->DmgMultiplier[effect_idx]; @@ -466,7 +466,7 @@ void Spell::EffectSchoolDMG(uint32 effect_idx) { // Deadly poison (only attacker applied) if( (*itr)->GetSpellProto()->SpellFamilyName==SPELLFAMILY_ROGUE && ((*itr)->GetSpellProto()->SpellFamilyFlags & 0x10000) && - (*itr)->GetSpellProto()->SpellVisual==5100 && (*itr)->GetCasterGUID()==m_caster->GetGUID() ) + (*itr)->GetSpellProto()->SpellVisual[0]==5100 && (*itr)->GetCasterGUID()==m_caster->GetGUID() ) { --combo; ++doses; @@ -504,7 +504,7 @@ void Spell::EffectSchoolDMG(uint32 effect_idx) case SPELLFAMILY_HUNTER: { // Mongoose Bite - if((m_spellInfo->SpellFamilyFlags & 0x000000002) && m_spellInfo->SpellVisual==342) + if((m_spellInfo->SpellFamilyFlags & 0x000000002) && m_spellInfo->SpellVisual[0]==342) { damage += int32(m_caster->GetTotalAttackPowerValue(BASE_ATTACK)*0.2); } @@ -1191,7 +1191,7 @@ void Spell::EffectDummy(uint32 i) break; case SPELLFAMILY_WARRIOR: // Charge - if(m_spellInfo->SpellFamilyFlags & 0x1 && m_spellInfo->SpellVisual == 867) + if(m_spellInfo->SpellFamilyFlags & 0x1 && m_spellInfo->SpellVisual[0] == 867) { int32 chargeBasePoints0 = damage; m_caster->CastCustomSpell(m_caster,34846,&chargeBasePoints0,NULL,NULL,true); @@ -3838,13 +3838,13 @@ void Spell::EffectEnchantItemTmp(uint32 i) else if(m_spellInfo->SpellFamilyName==SPELLFAMILY_SHAMAN) duration = 1800; // 30 mins // other cases with this SpellVisual already selected - else if(m_spellInfo->SpellVisual==215) + else if(m_spellInfo->SpellVisual[0]==215) duration = 1800; // 30 mins // some fishing pole bonuses - else if(m_spellInfo->SpellVisual==563) + else if(m_spellInfo->SpellVisual[0]==563) duration = 600; // 10 mins // shaman rockbiter enchantments - else if(m_spellInfo->SpellVisual==0) + else if(m_spellInfo->SpellVisual[0]==0) duration = 1800; // 30 mins else if(m_spellInfo->Id==29702) duration = 300; // 5 mins @@ -4177,7 +4177,7 @@ void Spell::EffectWeaponDmg(uint32 i) spell_bonus += m_caster->CalculateDamage (OFF_ATTACK, normalized); } // Devastate bonus and sunder armor refresh - else if(m_spellInfo->SpellVisual == 671 && m_spellInfo->SpellIconID == 1508) + else if(m_spellInfo->SpellVisual[0] == 671 && m_spellInfo->SpellIconID == 1508) { customBonusDamagePercentMod = true; bonusDamagePercentMod = 0.0f; // only applied if auras found @@ -4186,7 +4186,7 @@ void Spell::EffectWeaponDmg(uint32 i) for(Unit::AuraList::const_iterator itr=list.begin();itr!=list.end();++itr) { SpellEntry const *proto = (*itr)->GetSpellProto(); - if(proto->SpellVisual == 406 && proto->SpellIconID == 565) + if(proto->SpellVisual[0] == 406 && proto->SpellIconID == 565) { int32 duration = GetSpellDuration(proto); (*itr)->SetAuraDuration(duration); diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index d0c4b8d9a..6fac0888f 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -203,7 +203,7 @@ SpellSpecific GetSpellSpecific(uint32 spellId) } // only warlock armor/skin have this (in additional to family cases) - if( spellInfo->SpellVisual == 130 && spellInfo->SpellIconID == 89) + if( spellInfo->SpellVisual[0] == 130 && spellInfo->SpellIconID == 89) { return SPELL_WARLOCK_ARMOR; } @@ -1062,14 +1062,14 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons // Soulstone Resurrection and Twisting Nether (resurrector) if( spellInfo_1->SpellIconID == 92 && spellInfo_2->SpellIconID == 92 && ( - spellInfo_1->SpellVisual == 99 && spellInfo_2->SpellVisual == 0 || - spellInfo_2->SpellVisual == 99 && spellInfo_1->SpellVisual == 0 ) ) + spellInfo_1->SpellVisual[0] == 99 && spellInfo_2->SpellVisual[0] == 0 || + spellInfo_2->SpellVisual[0] == 99 && spellInfo_1->SpellVisual[0] == 0 ) ) return false; // Heart of the Wild and (Primal Instinct (Idol of Terror) triggering spell or Agility) if( spellInfo_1->SpellIconID == 240 && spellInfo_2->SpellIconID == 240 && ( - spellInfo_1->SpellVisual == 0 && spellInfo_2->SpellVisual == 78 || - spellInfo_2->SpellVisual == 0 && spellInfo_1->SpellVisual == 78 ) ) + spellInfo_1->SpellVisual[0] == 0 && spellInfo_2->SpellVisual[0] == 78 || + spellInfo_2->SpellVisual[0] == 0 && spellInfo_1->SpellVisual[0] == 78 ) ) return false; // Personalized Weather (thunder effect should overwrite rainy aura) @@ -1086,7 +1086,7 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons case SPELLFAMILY_WARRIOR: { // Scroll of Protection and Defensive Stance (multi-family check) - if( spellInfo_1->SpellIconID == 276 && spellInfo_1->SpellVisual == 196 && spellInfo_2->Id == 71) + if( spellInfo_1->SpellIconID == 276 && spellInfo_1->SpellVisual[0] == 196 && spellInfo_2->Id == 71) return false; // Improved Hamstring -> Hamstring (multi-family check) @@ -1098,7 +1098,7 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons case SPELLFAMILY_DRUID: { // Scroll of Stamina and Leader of the Pack (multi-family check) - if( spellInfo_1->SpellIconID == 312 && spellInfo_1->SpellVisual == 216 && spellInfo_2->Id == 24932 ) + if( spellInfo_1->SpellIconID == 312 && spellInfo_1->SpellVisual[0] == 216 && spellInfo_2->Id == 24932 ) return false; // Dragonmaw Illusion (multi-family check) @@ -1129,11 +1129,11 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons case SPELLFAMILY_PALADIN: { // Unstable Currents and other -> *Sanctity Aura (multi-family check) - if( spellInfo_2->SpellIconID==502 && spellInfo_1->SpellIconID==502 && spellInfo_1->SpellVisual==969 ) + if( spellInfo_2->SpellIconID==502 && spellInfo_1->SpellIconID==502 && spellInfo_1->SpellVisual[0]==969 ) return false; // *Band of Eternal Champion and Seal of Command(multi-family check) - if( spellId_1 == 35081 && spellInfo_2->SpellIconID==561 && spellInfo_2->SpellVisual==7992) + if( spellId_1 == 35081 && spellInfo_2->SpellIconID==561 && spellInfo_2->SpellVisual[0]==7992) return false; break; @@ -1149,16 +1149,16 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons return false; // Blink & Improved Blink - if( (spellInfo_1->SpellFamilyFlags & 0x0000000000010000LL) && (spellInfo_2->SpellVisual == 72 && spellInfo_2->SpellIconID == 1499) || - (spellInfo_2->SpellFamilyFlags & 0x0000000000010000LL) && (spellInfo_1->SpellVisual == 72 && spellInfo_1->SpellIconID == 1499) ) + if( (spellInfo_1->SpellFamilyFlags & 0x0000000000010000LL) && (spellInfo_2->SpellVisual[0] == 72 && spellInfo_2->SpellIconID == 1499) || + (spellInfo_2->SpellFamilyFlags & 0x0000000000010000LL) && (spellInfo_1->SpellVisual[0] == 72 && spellInfo_1->SpellIconID == 1499) ) return false; } // Detect Invisibility and Mana Shield (multi-family check) - if( spellInfo_2->Id == 132 && spellInfo_1->SpellIconID == 209 && spellInfo_1->SpellVisual == 968 ) + if( spellInfo_2->Id == 132 && spellInfo_1->SpellIconID == 209 && spellInfo_1->SpellVisual[0] == 968 ) return false; // Combustion and Fire Protection Aura (multi-family check) - if( spellInfo_1->Id == 11129 && spellInfo_2->SpellIconID == 33 && spellInfo_2->SpellVisual == 321 ) + if( spellInfo_1->Id == 11129 && spellInfo_2->SpellIconID == 33 && spellInfo_2->SpellVisual[0] == 321 ) return false; break; @@ -1187,7 +1187,7 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons return false; } // Detect Invisibility and Mana Shield (multi-family check) - if( spellInfo_1->Id == 132 && spellInfo_2->SpellIconID == 209 && spellInfo_2->SpellVisual == 968 ) + if( spellInfo_1->Id == 132 && spellInfo_2->SpellIconID == 209 && spellInfo_2->SpellVisual[0] == 968 ) return false; break; case SPELLFAMILY_WARRIOR: @@ -1209,11 +1209,11 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons return false; // Defensive Stance and Scroll of Protection (multi-family check) - if( spellInfo_1->Id == 71 && spellInfo_2->SpellIconID == 276 && spellInfo_2->SpellVisual == 196 ) + if( spellInfo_1->Id == 71 && spellInfo_2->SpellIconID == 276 && spellInfo_2->SpellVisual[0] == 196 ) return false; // Bloodlust and Bloodthirst (multi-family check) - if( spellInfo_2->Id == 2825 && spellInfo_1->SpellIconID == 38 && spellInfo_1->SpellVisual == 0 ) + if( spellInfo_2->Id == 2825 && spellInfo_1->SpellIconID == 38 && spellInfo_1->SpellVisual[0] == 0 ) return false; break; @@ -1258,7 +1258,7 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons } // Leader of the Pack and Scroll of Stamina (multi-family check) - if( spellInfo_1->Id == 24932 && spellInfo_2->SpellIconID == 312 && spellInfo_2->SpellVisual == 216 ) + if( spellInfo_1->Id == 24932 && spellInfo_2->SpellIconID == 312 && spellInfo_2->SpellVisual[0] == 216 ) return false; // Dragonmaw Illusion (multi-family check) @@ -1275,7 +1275,7 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons } // Garrote -> Garrote-Silence (multi-family check) - if( spellInfo_1->SpellIconID == 498 && spellInfo_2->SpellIconID == 498 && spellInfo_2->SpellVisual == 0 ) + if( spellInfo_1->SpellIconID == 498 && spellInfo_2->SpellIconID == 498 && spellInfo_2->SpellVisual[0] == 0 ) return false; break; case SPELLFAMILY_HUNTER: @@ -1312,15 +1312,15 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons return true; } // Combustion and Fire Protection Aura (multi-family check) - if( spellInfo_2->Id == 11129 && spellInfo_1->SpellIconID == 33 && spellInfo_1->SpellVisual == 321 ) + if( spellInfo_2->Id == 11129 && spellInfo_1->SpellIconID == 33 && spellInfo_1->SpellVisual[0] == 321 ) return false; // *Sanctity Aura -> Unstable Currents and other (multi-family check) - if( spellInfo_1->SpellIconID==502 && spellInfo_2->SpellFamilyName == SPELLFAMILY_GENERIC && spellInfo_2->SpellIconID==502 && spellInfo_2->SpellVisual==969 ) + if( spellInfo_1->SpellIconID==502 && spellInfo_2->SpellFamilyName == SPELLFAMILY_GENERIC && spellInfo_2->SpellIconID==502 && spellInfo_2->SpellVisual[0]==969 ) return false; // *Seal of Command and Band of Eternal Champion (multi-family check) - if( spellInfo_1->SpellIconID==561 && spellInfo_1->SpellVisual==7992 && spellId_2 == 35081) + if( spellInfo_1->SpellIconID==561 && spellInfo_1->SpellVisual[0]==7992 && spellId_2 == 35081) return false; break; case SPELLFAMILY_SHAMAN: @@ -1336,7 +1336,7 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons return false; } // Bloodlust and Bloodthirst (multi-family check) - if( spellInfo_1->Id == 2825 && spellInfo_2->SpellIconID == 38 && spellInfo_2->SpellVisual == 0 ) + if( spellInfo_1->Id == 2825 && spellInfo_2->SpellIconID == 38 && spellInfo_2->SpellVisual[0] == 0 ) return false; break; default: diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index 222833a63..9c739a589 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -234,12 +234,12 @@ enum SpellFamilyNames SPELLFAMILY_HUNTER = 9, SPELLFAMILY_PALADIN = 10, SPELLFAMILY_SHAMAN = 11, - SPELLFAMILY_UNK2 = 12, + SPELLFAMILY_UNK2 = 12, // 2 spells (silence resistance) SPELLFAMILY_POTION = 13, // 14 - unused SPELLFAMILY_DEATHKNIGHT = 15, // 16 - unused - SPELLFAMILY_UNK3 = 17 + SPELLFAMILY_PET = 17 }; //Some SpellFamilyFlags diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 5860d8261..cfb0702cd 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -6023,7 +6023,7 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB break; } // Shadowguard - if((auraSpellInfo->SpellFamilyFlags & 0x80000000LL) && auraSpellInfo->SpellVisual==7958) + if((auraSpellInfo->SpellFamilyFlags & 0x80000000LL) && auraSpellInfo->SpellVisual[0]==7958) { switch(triggeredByAura->GetSpellProto()->Id) { @@ -6382,14 +6382,14 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB } // Water Shield (we can't set cooldown for main spell - it's player casted spell - if((auraSpellInfo->SpellFamilyFlags & 0x0000002000000000LL) && auraSpellInfo->SpellVisual==7358) + if((auraSpellInfo->SpellFamilyFlags & 0x0000002000000000LL) && auraSpellInfo->SpellVisual[0]==7358) { target = this; break; } // Lightning Shield - if((auraSpellInfo->SpellFamilyFlags & 0x00000400) && auraSpellInfo->SpellVisual==37) + if((auraSpellInfo->SpellFamilyFlags & 0x00000400) && auraSpellInfo->SpellVisual[0]==37) { // overwrite non existing triggered spell call in spell.dbc switch(triggeredByAura->GetSpellProto()->Id) @@ -6475,21 +6475,21 @@ bool Unit::HandleOverrideClassScriptAuraProc(Unit *pVictim, int32 scriptId, uint { case 836: // Improved Blizzard (Rank 1) { - if (!procSpell || procSpell->SpellVisual!=9487) + if (!procSpell || procSpell->SpellVisual[0]!=9487) return false; triggered_spell_id = 12484; break; } case 988: // Improved Blizzard (Rank 2) { - if (!procSpell || procSpell->SpellVisual!=9487) + if (!procSpell || procSpell->SpellVisual[0]!=9487) return false; triggered_spell_id = 12485; break; } case 989: // Improved Blizzard (Rank 3) { - if (!procSpell || procSpell->SpellVisual!=9487) + if (!procSpell || procSpell->SpellVisual[0]!=9487) return false; triggered_spell_id = 12486; break; @@ -7772,7 +7772,7 @@ uint32 Unit::SpellHealingBonus(SpellEntry const *spellProto, uint32 healamount, AuraList const& mDummyAuras = pVictim->GetAurasByType(SPELL_AURA_DUMMY); for(AuraList::const_iterator i = mDummyAuras.begin();i != mDummyAuras.end(); ++i) { - if((*i)->GetSpellProto()->SpellVisual == 9180) + if((*i)->GetSpellProto()->SpellVisual[0] == 9180) { // Flash of Light if ((spellProto->SpellFamilyFlags & 0x0000000040000000LL) && (*i)->GetEffIndex() == 1) diff --git a/src/shared/Database/DBCStructure.h b/src/shared/Database/DBCStructure.h index c98c87fb1..ab5ef29f3 100644 --- a/src/shared/Database/DBCStructure.h +++ b/src/shared/Database/DBCStructure.h @@ -1088,8 +1088,7 @@ struct SpellEntry //uint32 EffectSpellClassMaskA[3]; // 125-127 m_effectSpellClassMaskA not used //uint32 EffectSpellClassMaskB[3]; // 128-130 m_effectSpellClassMaskB not used //uint32 EffectSpellClassMaskC[3]; // 131-133 m_effectSpellClassMaskC not used - uint32 SpellVisual; // 134 m_spellVisualID - // 135 not used - no data and name in client? + uint32 SpellVisual[2]; // 134-135 m_spellVisualID uint32 SpellIconID; // 136 m_spellIconID uint32 activeIconID; // 137 m_activeIconID //uint32 spellPriority; // 138 m_spellPriority not used @@ -1107,19 +1106,20 @@ struct SpellEntry uint32 MaxTargetLevel; // 210 m_maxTargetLevel uint32 SpellFamilyName; // 211 m_spellClassSet uint64 SpellFamilyFlags; // 212-213 m_spellClassMask - uint32 MaxAffectedTargets; // 214 m_maxTargets - uint32 DmgClass; // 215 m_defenseType - uint32 PreventionType; // 216 m_preventionType - //uint32 StanceBarOrder; // 217 m_stanceBarOrder not used - float DmgMultiplier[3]; // 218-220 m_effectChainAmplitude - //uint32 MinFactionId; // 221 m_minFactionID not used - //uint32 MinReputation; // 222 m_minReputation not used - //uint32 RequiredAuraVision; // 223 m_requiredAuraVision not used - uint32 TotemCategory[2]; // 224-225 m_requiredTotemCategoryID - int32 AreaId; // 226 m_requiredAreasID - uint32 SchoolMask; // 227 m_schoolMask - uint32 runeCostID; // 228 m_runeCostID - //uint32 spellMissileID; // 229 m_spellMissileID not used + uint32 SpellFamilyFlags2; // 214 addition to m_spellClassMask + uint32 MaxAffectedTargets; // 215 m_maxTargets + uint32 DmgClass; // 216 m_defenseType + uint32 PreventionType; // 217 m_preventionType + //uint32 StanceBarOrder; // 218 m_stanceBarOrder not used + float DmgMultiplier[3]; // 219-221 m_effectChainAmplitude + //uint32 MinFactionId; // 222 m_minFactionID not used + //uint32 MinReputation; // 223 m_minReputation not used + //uint32 RequiredAuraVision; // 224 m_requiredAuraVision not used + uint32 TotemCategory[2]; // 225-226 m_requiredTotemCategoryID + int32 AreaId; // 227 m_requiredAreasID + uint32 SchoolMask; // 228 m_schoolMask + uint32 runeCostID; // 229 m_runeCostID + //uint32 spellMissileID; // 230 m_spellMissileID not used private: // prevent creating custom entries (copy data from original in fact) diff --git a/src/shared/Database/DBCfmt.cpp b/src/shared/Database/DBCfmt.cpp index 1fbb324d9..c465cf372 100644 --- a/src/shared/Database/DBCfmt.cpp +++ b/src/shared/Database/DBCfmt.cpp @@ -68,7 +68,7 @@ const char SkillLineAbilityfmt[]="niiiixxiiiiixx"; const char SoundEntriesfmt[]="nxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; const char SpellCastTimefmt[]="nixx"; const char SpellDurationfmt[]="niii"; -const char SpellEntryfmt[]="niiiiiiiiixiiiiiiiiiixxxxiiiiiiiiiiiiiiiiiiifxiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffffffiiiiiiiiiiiiiiiiiiiiifffiiiiiiiiiiiiiiifffxxxxxxxxxixiixssssssssssssssssxssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiiiiiiixiiixfffxxxiiiiix"; +const char SpellEntryfmt[]="niiiiiiiiixiiiiiiiiiixxxxiiiiiiiiiiiiiiiiiiifxiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffffffiiiiiiiiiiiiiiiiiiiiifffiiiiiiiiiiiiiiifffxxxxxxxxxiiiixssssssssssssssssxssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiiiiiiiiiiixfffxxxiiiiix"; const char SpellFocusObjectfmt[]="nxxxxxxxxxxxxxxxxx"; const char SpellItemEnchantmentfmt[]="nxiiiiiixxxiiissssssssssssssssxiiiixx"; const char SpellItemEnchantmentConditionfmt[]="nbbbbbxxxxxbbbbbbbbbbiiiiiXXXXX";