Core: Updated to 10.0.2

This commit is contained in:
Shauren
2022-12-04 15:13:20 +01:00
parent de7c03c838
commit e98e1283ea
132 changed files with 9328 additions and 4629 deletions

View File

@@ -371,8 +371,23 @@ NonDefaultConstructible<SpellEffectHandlerFn> SpellEffectHandlers[TOTAL_SPELL_EF
&Spell::EffectNULL, //285 SPELL_EFFECT_MODIFY_KEYSTONE_2
&Spell::EffectGrantBattlePetExperience, //286 SPELL_EFFECT_GRANT_BATTLEPET_EXPERIENCE
&Spell::EffectNULL, //287 SPELL_EFFECT_SET_GARRISON_FOLLOWER_LEVEL
&Spell::EffectUnused, //288 SPELL_EFFECT_288
&Spell::EffectNULL, //289 SPELL_EFFECT_289
&Spell::EffectNULL, //288 SPELL_EFFECT_CRAFT_ITEM
&Spell::EffectModifyAuraStacks, //289 SPELL_EFFECT_MODIFY_AURA_STACKS
&Spell::EffectModifyCooldown, //290 SPELL_EFFECT_MODIFY_COOLDOWN
&Spell::EffectModifyCooldowns, //291 SPELL_EFFECT_MODIFY_COOLDOWNS
&Spell::EffectModifyCooldownsByCategory, //292 SPELL_EFFECT_MODIFY_COOLDOWNS_BY_CATEGORY
&Spell::EffectModifySpellCharges, //293 SPELL_EFFECT_MODIFY_CHARGES
&Spell::EffectNULL, //294 SPELL_EFFECT_CRAFT_LOOT
&Spell::EffectNULL, //295 SPELL_EFFECT_SALVAGE_ITEM
&Spell::EffectNULL, //296 SPELL_EFFECT_CRAFT_SALVAGE_ITEM
&Spell::EffectNULL, //297 SPELL_EFFECT_RECRAFT_ITEM
&Spell::EffectNULL, //298 SPELL_EFFECT_CANCEL_ALL_PRIVATE_CONVERSATIONS
&Spell::EffectNULL, //299 SPELL_EFFECT_299
&Spell::EffectUnused, //300 SPELL_EFFECT_300
&Spell::EffectNULL, //301 SPELL_EFFECT_CRAFT_ENCHANT
&Spell::EffectNULL, //302 SPELL_EFFECT_GATHERING
&Spell::EffectNULL, //303 SPELL_EFFECT_CREATE_TRAIT_TREE_CONFIG
&Spell::EffectNULL, //304 SPELL_EFFECT_CHANGE_ACTIVE_COMBAT_TRAIT_CONFIG
};
void Spell::EffectNULL()
@@ -2439,30 +2454,7 @@ void Spell::EffectEnchantItemTmp()
}
// select enchantment duration
uint32 duration;
// rogue family enchantments exception by duration
if (m_spellInfo->Id == 38615)
duration = 1800; // 30 mins
// other rogue family enchantments always 1 hour (some have spell damage=0, but some have wrong data in EffBasePoints)
else if (m_spellInfo->SpellFamilyName == SPELLFAMILY_ROGUE)
duration = 3600; // 1 hour
// shaman family enchantments
else if (m_spellInfo->SpellFamilyName == SPELLFAMILY_SHAMAN)
duration = 3600; // 30 mins
// other cases with this SpellVisual already selected
else if (m_spellInfo->GetSpellVisual() == 215)
duration = 1800; // 30 mins
// some fishing pole bonuses except Glow Worm which lasts full hour
else if (m_spellInfo->GetSpellVisual() == 563 && m_spellInfo->Id != 64401)
duration = 600; // 10 mins
else if (m_spellInfo->Id == 29702)
duration = 300; // 5 mins
else if (m_spellInfo->Id == 37360)
duration = 300; // 5 mins
// default case
else
duration = 3600; // 1 hour
uint32 duration = pEnchant->Duration;
// item can be in trade slot and have owner diff. from caster
Player* item_owner = itemTarget->GetOwner();
@@ -5385,19 +5377,14 @@ void Spell::EffectChangeBattlePetQuality()
if (!unitTarget || !unitTarget->IsCreature())
return;
BattlePets::BattlePetBreedQuality quality = BattlePets::BattlePetBreedQuality::Poor;
switch (damage)
auto qualityItr = std::lower_bound(sBattlePetBreedQualityStore.begin(), sBattlePetBreedQualityStore.end(), damage, [](BattlePetBreedQualityEntry const* a1, int32 selector)
{
case 85:
quality = BattlePets::BattlePetBreedQuality::Rare;
break;
case 75:
quality = BattlePets::BattlePetBreedQuality::Uncommon;
break;
default:
// Ignore Epic Battle-Stones
break;
}
return a1->MaxQualityRoll < selector;
});
BattlePets::BattlePetBreedQuality quality = BattlePets::BattlePetBreedQuality::Poor;
if (qualityItr != sBattlePetBreedQualityStore.end())
quality = BattlePets::BattlePetBreedQuality(qualityItr->QualityEnum);
playerCaster->GetSession()->GetBattlePetMgr()->ChangeBattlePetQuality(unitTarget->GetBattlePetCompanionGUID(), quality);
}
@@ -5815,3 +5802,74 @@ void Spell::EffectLearnTransmogIllusion()
player->GetSession()->GetCollectionMgr()->AddTransmogIllusion(illusionId);
}
void Spell::EffectModifyAuraStacks()
{
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
return;
Aura* targetAura = unitTarget->GetAura(effectInfo->TriggerSpell);
if (!targetAura)
return;
switch (effectInfo->MiscValue)
{
case 0:
targetAura->ModStackAmount(damage);
break;
case 1:
targetAura->SetStackAmount(damage);
break;
default:
break;
}
}
void Spell::EffectModifyCooldown()
{
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
return;
unitTarget->GetSpellHistory()->ModifyCooldown(effectInfo->TriggerSpell, Milliseconds(damage));
}
void Spell::EffectModifyCooldowns()
{
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
return;
unitTarget->GetSpellHistory()->ModifyCoooldowns([this](SpellHistory::CooldownStorageType::iterator itr)
{
SpellInfo const* spellOnCooldown = sSpellMgr->AssertSpellInfo(itr->first, DIFFICULTY_NONE);
if (spellOnCooldown->SpellFamilyName != uint32(effectInfo->MiscValue))
return false;
int32 bitIndex = effectInfo->MiscValueB - 1;
if (bitIndex < 0 || uint32(bitIndex) >= sizeof(flag128) * 8)
return false;
flag128 reqFlag;
reqFlag[bitIndex / 32] = 1u << (bitIndex % 32);
return bool(spellOnCooldown->SpellFamilyFlags & reqFlag);
}, Milliseconds(damage));
}
void Spell::EffectModifyCooldownsByCategory()
{
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
return;
unitTarget->GetSpellHistory()->ModifyCoooldowns([this](SpellHistory::CooldownStorageType::iterator itr)
{
return sSpellMgr->AssertSpellInfo(itr->first, DIFFICULTY_NONE)->CategoryId == uint32(effectInfo->MiscValue);
}, Milliseconds(damage));
}
void Spell::EffectModifySpellCharges()
{
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
return;
for (int32 i = 0; i < damage; ++i)
unitTarget->GetSpellHistory()->RestoreCharge(effectInfo->MiscValue);
}