From b328cc10b89fdd1171bd168a2f1406918d128719 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Fri, 30 Apr 2021 13:42:04 +0200 Subject: [PATCH] Core/Spells: defined and implemented SPELL_AURA_MOD_CURRENCY_CATEGORY_GAIN_PCT --- src/server/game/Loot/Loot.cpp | 11 +++++++++-- src/server/game/Spells/Auras/SpellAuraDefines.h | 2 +- src/server/game/Spells/Auras/SpellAuraEffects.cpp | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/server/game/Loot/Loot.cpp b/src/server/game/Loot/Loot.cpp index b125cb3332..1e1f045ac2 100644 --- a/src/server/game/Loot/Loot.cpp +++ b/src/server/game/Loot/Loot.cpp @@ -120,6 +120,8 @@ void Loot::AddItem(LootStoreItem const& item) std::vector& lootItems = item.needs_quest ? quest_items : items; uint32 limit = item.needs_quest ? MAX_NR_QUEST_ITEMS : MAX_NR_LOOT_ITEMS; + Player* player = ObjectAccessor::FindPlayer(lootOwnerGUID); + if (item.is_currency) { CurrencyTypesEntry const* currency = sCurrencyTypesStore.LookupEntry(item.itemid); @@ -128,6 +130,11 @@ void Loot::AddItem(LootStoreItem const& item) uint32 totalCap = currency->MaxQty > 0 ? currency->MaxQty : 1; uint32 count = urand(item.mincount, item.maxcount); + + // SPELL_AURA_MOD_CURRENCY_CATEGORY_GAIN_PCT bonus + if (player) + count *= player->GetTotalAuraMultiplierByMiscValue(SPELL_AURA_MOD_CURRENCY_CATEGORY_GAIN_PCT, currency->CategoryID); + uint32 stacks = count / totalCap + ((count % totalCap) ? 1 : 0); for (uint32 i = 0; i < stacks && lootItems.size() < limit; ++i) @@ -139,7 +146,7 @@ void Loot::AddItem(LootStoreItem const& item) // In some cases, a dropped item should be visible/lootable only for some players in group bool canSeeItemInLootWindow = false; - if (Player* player = ObjectAccessor::FindPlayer(lootOwnerGUID)) + if (player) { if (Group* group = player->GetGroup()) { @@ -178,7 +185,7 @@ void Loot::AddItem(LootStoreItem const& item) // In some cases, a dropped item should be visible/lootable only for some players in group bool canSeeItemInLootWindow = false; - if (Player* player = ObjectAccessor::FindPlayer(lootOwnerGUID)) + if (player) { if (Group* group = player->GetGroup()) { diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h index 2a41c16e9b..c2fe19bc33 100644 --- a/src/server/game/Spells/Auras/SpellAuraDefines.h +++ b/src/server/game/Spells/Auras/SpellAuraDefines.h @@ -426,7 +426,7 @@ enum AuraType : uint32 SPELL_AURA_DEPOSIT_BONUS_MONEY_IN_GUILD_BANK_ON_LOOT = 348, SPELL_AURA_MOD_CURRENCY_GAIN = 349, SPELL_AURA_MOD_GATHERING_ITEMS_GAINED_PERCENT = 350, // NYI - SPELL_AURA_351 = 351, + SPELL_AURA_MOD_CURRENCY_CATEGORY_GAIN_PCT = 351, SPELL_AURA_352 = 352, SPELL_AURA_MOD_CAMOUFLAGE = 353, // NYI SPELL_AURA_MOD_HEALING_DONE_PCT_VERSUS_TARGET_HEALTH = 354, // Restoration Shaman mastery - mod healing based on target's health (less = more healing) diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index acac221b8b..d4fe5aa18a 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -416,7 +416,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleNoImmediateEffect, //348 SPELL_AURA_DEPOSIT_BONUS_MONEY_IN_GUILD_BANK_ON_LOOT implemented in WorldSession::HandleLootMoneyOpcode &AuraEffect::HandleNoImmediateEffect, //349 SPELL_AURA_MOD_CURRENCY_GAIN implemented in Player::ModifyCurrency &AuraEffect::HandleNULL, //350 SPELL_AURA_MOD_GATHERING_ITEMS_GAINED_PERCENT - &AuraEffect::HandleNULL, //351 SPELL_AURA_351 + &AuraEffect::HandleNoImmediateEffect, //351 SPELL_AURA_MOD_CURRENCY_CATEGORY_GAIN_PCT implemented Loot::AddItem &AuraEffect::HandleNULL, //352 SPELL_AURA_352 &AuraEffect::HandleNULL, //353 SPELL_AURA_MOD_CAMOUFLAGE &AuraEffect::HandleNoImmediateEffect, //354 SPELL_AURA_MOD_HEALING_FROM_TARGET_HEALTH implemented in Unit::SpellHealingPctDone