From d8b345a5ead59307e00d4f515a69d9933edb5627 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Tue, 19 Aug 2014 11:50:39 +0200 Subject: Core/SmartScripts: fix escort quest group-complete --- src/server/game/AI/SmartScripts/SmartScript.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/server/game') diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index cd80c646a2d..c19ed4ff54b 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -477,7 +477,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (IsPlayer(*itr)) { - (*itr)->ToPlayer()->AreaExploredOrEventHappens(e.action.quest.quest); + (*itr)->ToPlayer()->GroupEventHappens(e.action.quest.quest, me); + TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_CALL_AREAEXPLOREDOREVENTHAPPENS: Player guidLow %u credited quest %u", (*itr)->GetGUIDLow(), e.action.quest.quest); } -- cgit v1.2.3 From f2b5ac87f03d909121a13b6e486a1b87bcacbeea Mon Sep 17 00:00:00 2001 From: mik1893 Date: Mon, 18 Aug 2014 09:37:30 +0200 Subject: Core/Spells: Channeled spell pushback is now affected by haste --- src/server/game/Spells/Spell.cpp | 8 ++++++-- src/server/game/Spells/Spell.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index c81b3ebc6fe..9a315d48d29 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -600,7 +600,7 @@ m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharme m_powerCost = 0; // setup to correct value in Spell::prepare, must not be used before. m_casttime = 0; // setup to correct value in Spell::prepare, must not be used before. m_timer = 0; // will set to castime in prepare - + m_channeledDuration = 0; // will be setup in Spell::handle_immediate m_immediateHandled = false; m_channelTargetEffectMask = 0; @@ -3244,6 +3244,7 @@ void Spell::handle_immediate() m_spellState = SPELL_STATE_CASTING; m_caster->AddInterruptMask(m_spellInfo->ChannelInterruptFlags); + m_channeledDuration = duration; SendChannelStart(duration); } else if (duration == -1) @@ -6325,7 +6326,10 @@ void Spell::DelayedChannel() return; //check pushback reduce - int32 delaytime = CalculatePct(m_spellInfo->GetDuration(), 25); // channeling delay is normally 25% of its time per hit + // should be affected by modifiers, not take the dbc duration. + int32 duration = ((m_channeledDuration > 0) ? m_channeledDuration : m_spellInfo->GetDuration()); + + int32 delaytime = CalculatePct(duration, 25); // channeling delay is normally 25% of its time per hit int32 delayReduce = 100; // must be initialized to 100 for percent modifiers m_caster->ToPlayer()->ApplySpellMod(m_spellInfo->Id, SPELLMOD_NOT_LOSE_CASTING_TIME, delayReduce, this); delayReduce += m_caster->GetTotalAuraModifier(SPELL_AURA_REDUCE_PUSHBACK) - 100; diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 46203f3e7bb..e1e16100141 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -514,6 +514,7 @@ class Spell WeaponAttackType m_attackType; // For weapon based attack int32 m_powerCost; // Calculated spell cost initialized only in Spell::prepare int32 m_casttime; // Calculated spell cast time initialized only in Spell::prepare + int32 m_channeledDuration; // Calculated channeled spell duration in order to calculate correct pushback. bool m_canReflect; // can reflect this spell? bool m_autoRepeat; uint8 m_runesState; -- cgit v1.2.3 From c644f2f8019428925547751acc5934701891c79b Mon Sep 17 00:00:00 2001 From: Ascathor Date: Wed, 20 Aug 2014 23:43:56 +0200 Subject: Core/Quest: Allow money reward for quests to be modified. Added a rate for both regular quest reward and for quest reward given on max level. Defaulted to 1. --- src/server/game/Quests/QuestDef.cpp | 8 ++++++-- src/server/game/World/World.cpp | 12 ++++++++++++ src/server/game/World/World.h | 2 ++ src/server/worldserver/worldserver.conf.dist | 9 +++++++++ 4 files changed, 29 insertions(+), 2 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index a26b14af4b7..eb9b1ad45b9 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -197,18 +197,22 @@ uint32 Quest::XPValue(Player* player) const int32 Quest::GetRewOrReqMoney() const { + // RequiredMoney: the amount is the negative copper sum. if (RewardOrRequiredMoney <= 0) return RewardOrRequiredMoney; - return int32(RewardOrRequiredMoney * sWorld->getRate(RATE_DROP_MONEY)); + // RewardMoney: the positive amount + return int32(RewardOrRequiredMoney * sWorld->getRate(RATE_MONEY_QUEST)); } uint32 Quest::GetRewMoneyMaxLevel() const { + // If Quest has flag to not give money on max level, it's 0 if (HasFlag(QUEST_FLAGS_NO_MONEY_FROM_XP)) return 0; - return RewardMoneyMaxLevel; + // Else, return the rewarded copper sum modified by the rate + return uint32(RewardMoneyMaxLevel * sWorld->getRate(RATE_MONEY_MAX_LEVEL_QUEST)); } bool Quest::IsAutoAccept() const diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 3f94cfbf56f..4de9cb34df6 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -557,6 +557,18 @@ void World::LoadConfigSettings(bool reload) TC_LOG_ERROR("server.loading", "DurabilityLossChance.Block (%f) must be >=0. Using 0.0 instead.", rate_values[RATE_DURABILITY_LOSS_BLOCK]); rate_values[RATE_DURABILITY_LOSS_BLOCK] = 0.0f; } + rate_values[RATE_MONEY_QUEST] = sConfigMgr->GetFloatDefault("Rate.Quest.Money.Reward", 1.0f); + if (rate_values[RATE_MONEY_QUEST] < 0.0f) + { + TC_LOG_ERROR("server.loading", "Rate.Quest.Money.Reward (%f) must be >=0. Using 0 instead.", rate_values[RATE_MONEY_QUEST]); + rate_values[RATE_MONEY_QUEST] = 0.0f; + } + rate_values[RATE_MONEY_MAX_LEVEL_QUEST] = sConfigMgr->GetFloatDefault("Rate.Quest.Money.Max.Level.Reward", 1.0f); + if (rate_values[RATE_MONEY_MAX_LEVEL_QUEST] < 0.0f) + { + TC_LOG_ERROR("server.loading", "Rate.Quest.Money.Max.Level.Reward (%f) must be >=0. Using 0 instead.", rate_values[RATE_MONEY_MAX_LEVEL_QUEST]); + rate_values[RATE_MONEY_MAX_LEVEL_QUEST] = 0.0f; + } ///- Read other configuration items from the config file m_bool_configs[CONFIG_DURABILITY_LOSS_IN_PVP] = sConfigMgr->GetBoolDefault("DurabilityLoss.InPvP", false); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 0711ead6187..cb87e1739c2 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -399,6 +399,8 @@ enum Rates RATE_DURABILITY_LOSS_ABSORB, RATE_DURABILITY_LOSS_BLOCK, RATE_MOVESPEED, + RATE_MONEY_QUEST, + RATE_MONEY_MAX_LEVEL_QUEST, MAX_RATES }; diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index dd8f213b6df..d98a061b9f3 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -1740,6 +1740,15 @@ Rate.XP.Kill = 1 Rate.XP.Quest = 1 Rate.XP.Explore = 1 +# +# Rate.Quest.Money.Reward +# Rate.Quest.Money.Max.Level.Reward +# Description: Multiplier for money quest rewards. Can not be below 0. +# Default: 1 + +Rate.Quest.Money.Reward = 1 +Rate.Quest.Money.Max.Level.Reward = 1 + # # Rate.RepairCost # Description: Repair cost rate. -- cgit v1.2.3 From 809fb9894ec5ee5aebda683ecdd264dfcdedd95b Mon Sep 17 00:00:00 2001 From: Aokromes Date: Sat, 23 Aug 2014 14:05:43 +0100 Subject: Core/Auctionhouse: Hide known recipes when the Usable box is checked in the AH By y1x2 @ cmangos Closes #12247 --- src/server/game/AuctionHouse/AuctionHouseMgr.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index f4699f0519e..6d8e695f02a 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -544,8 +544,16 @@ void AuctionHouseObject::BuildListAuctionItems(WorldPacket& data, Player* player if (levelmin != 0x00 && (proto->RequiredLevel < levelmin || (levelmax != 0x00 && proto->RequiredLevel > levelmax))) continue; - if (usable != 0x00 && player->CanUseItem(item) != EQUIP_ERR_OK) - continue; + if (usable != 0x00) + { + if (player->CanUseItem(item) != EQUIP_ERR_OK) + continue; + + if (proto->Class == ITEM_CLASS_RECIPE) + if (SpellEntry const* spell = sSpellStore.LookupEntry(proto->Spells[0].SpellId)) + if (player->HasSpell(spell->EffectTriggerSpell[EFFECT_INDEX_0])) + continue; + } // Allow search by suffix (ie: of the Monkey) or partial name (ie: Monkey) // No need to do any of this if no search term was entered -- cgit v1.2.3