diff options
| author | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-08-23 16:41:54 +0200 |
|---|---|---|
| committer | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-08-23 16:41:54 +0200 |
| commit | 4a29c73403c4dc713a8a31cb96289adff2b910c1 (patch) | |
| tree | de0c6b191031bac7fb2764edb2a81382a331f81c /src/server/game | |
| parent | b90329d63acaecb1f074dd2b303561baa9f639a2 (diff) | |
| parent | 1255434882777053bca06656786abc1a598deda9 (diff) | |
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Diffstat (limited to 'src/server/game')
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 3 | ||||
| -rw-r--r-- | src/server/game/AuctionHouse/AuctionHouseMgr.cpp | 12 | ||||
| -rw-r--r-- | src/server/game/Quests/QuestDef.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Spells/Spell.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Spells/Spell.h | 1 | ||||
| -rw-r--r-- | src/server/game/World/World.cpp | 12 | ||||
| -rw-r--r-- | src/server/game/World/World.h | 2 |
7 files changed, 39 insertions, 7 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 9dba0fe3bf9..55f69a113be 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); } diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index 40935a0712c..07b41edebbe 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -547,8 +547,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 diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index 7c089eee07b..89ca3749a05 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -232,10 +232,12 @@ 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)); } void Quest::BuildExtraQuestInfo(WorldPacket& data, Player* player) const @@ -313,10 +315,12 @@ void Quest::BuildExtraQuestInfo(WorldPacket& data, Player* player) const 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/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index e75ef03d392..5080733bb66 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -602,7 +602,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; @@ -3253,6 +3253,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) @@ -6361,7 +6362,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 fa5d051635b..5d854659f4e 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -519,6 +519,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; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index edf67a9563e..f66c693098b 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -568,6 +568,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 bf488c7edf0..51a5f726051 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -416,6 +416,8 @@ enum Rates RATE_DURABILITY_LOSS_ABSORB, RATE_DURABILITY_LOSS_BLOCK, RATE_MOVESPEED, + RATE_MONEY_QUEST, + RATE_MONEY_MAX_LEVEL_QUEST, MAX_RATES }; |
