diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/DataStores/DBCStores.cpp | 2 | ||||
-rw-r--r-- | src/server/game/DataStores/DBCStores.h | 1 | ||||
-rw-r--r-- | src/server/game/DataStores/DBCStructure.h | 6 | ||||
-rw-r--r-- | src/server/game/DataStores/DBCfmt.h | 1 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/GossipDef.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 1 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Handlers/LFGHandler.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Quests/QuestDef.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Quests/QuestDef.h | 5 | ||||
-rw-r--r-- | src/server/game/Server/Packets/QuestPackets.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Server/Packets/QuestPackets.h | 7 |
13 files changed, 41 insertions, 21 deletions
diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index fcc6a23ddf3..c65cc1679ed 100644 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -189,6 +189,7 @@ NameGenContainer sGenerateNamesMap; DBCStorage <PowerDisplayEntry> sPowerDisplayStore(PowerDisplayfmt); DBCStorage <PvPDifficultyEntry> sPvPDifficultyStore(PvPDifficultyfmt); +DBCStorage <QuestMoneyRewardEntry> sQuestMoneyRewardStore(QuestMoneyRewardfmt); DBCStorage <QuestSortEntry> sQuestSortStore(QuestSortEntryfmt); DBCStorage <QuestV2Entry> sQuestV2Store(QuestV2fmt); DBCStorage <QuestXPEntry> sQuestXPStore(QuestXPfmt); @@ -542,6 +543,7 @@ void LoadDBCStores(const std::string& dataPath) if (entry->BracketID > MAX_BATTLEGROUND_BRACKETS) ASSERT(false && "Need update MAX_BATTLEGROUND_BRACKETS by DBC data"); + LoadDBC(availableDbcLocales, bad_dbc_files, sQuestMoneyRewardStore, dbcPath, "QuestMoneyReward.dbc"); // 19865 LoadDBC(availableDbcLocales, bad_dbc_files, sQuestV2Store, dbcPath, "QuestV2.dbc");//19342 LoadDBC(availableDbcLocales, bad_dbc_files, sQuestXPStore, dbcPath, "QuestXP.dbc");//19116 LoadDBC(availableDbcLocales, bad_dbc_files, sQuestFactionRewardStore, dbcPath, "QuestFactionReward.dbc");//19116 diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h index 03eda581f28..6e46f1cff14 100644 --- a/src/server/game/DataStores/DBCStores.h +++ b/src/server/game/DataStores/DBCStores.h @@ -232,6 +232,7 @@ extern MapDifficultyMap sMapDifficultyMap; extern DBCStorage <MovieEntry> sMovieStore; extern DBCStorage <PowerDisplayEntry> sPowerDisplayStore; extern DBCStorage <QuestSortEntry> sQuestSortStore; +extern DBCStorage <QuestMoneyRewardEntry> sQuestMoneyRewardStore; extern DBCStorage <QuestXPEntry> sQuestXPStore; extern DBCStorage <QuestFactionRewEntry> sQuestFactionRewardStore; extern DBCStorage <RandomPropertiesPointsEntry> sRandomPropertiesPointsStore; diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index aac3cbd2193..cad43e9c554 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -1405,6 +1405,12 @@ struct PvPDifficultyEntry BattlegroundBracketId GetBracketId() const { return BattlegroundBracketId(BracketID); } }; +struct QuestMoneyRewardEntry +{ + uint32 Level; // 0 + uint32 Money[10]; // 1 +}; + struct QuestSortEntry { uint32 ID; // 0 diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h index c7aa00286e1..f739810aaf9 100644 --- a/src/server/game/DataStores/DBCfmt.h +++ b/src/server/game/DataStores/DBCfmt.h @@ -127,6 +127,7 @@ char const MountTypefmt[] = "niiiiiiiiiiiiiiiiiiiiiiii"; char const NameGenfmt[] = "dsii"; char const NumTalentsAtLevelfmt[] = "df"; char const QuestFactionRewardfmt[] = "niiiiiiiiii"; +char const QuestMoneyRewardfmt[] = "niiiiiiiiii"; char const QuestSortEntryfmt[] = "nx"; char const QuestV2fmt[] = "ni"; char const QuestXPfmt[] = "niiiiiiiiii"; diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index faa458d45dc..0fd001de69f 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -506,12 +506,12 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const packet.Info.RewardNextQuest = quest->GetNextQuestInChain(); packet.Info.RewardXPDifficulty = quest->GetXPDifficulty(); packet.Info.RewardXPMultiplier = quest->GetXPMultiplier(); - packet.Info.Float13 = quest->Float13; // Unk - if (quest->HasFlag(QUEST_FLAGS_HIDDEN_REWARDS)) - packet.Info.RewardMoney = quest->RewardMoney; + if (!quest->HasFlag(QUEST_FLAGS_HIDDEN_REWARDS)) + packet.Info.RewardMoney = quest->RewardMoney < 0 ? quest->RewardMoney : _session->GetPlayer()->GetQuestMoneyReward(quest); packet.Info.RewardMoneyDifficulty = quest->GetRewMoneyDifficulty(); + packet.Info.RewardMoneyMultiplier = quest->GetMoneyMultiplier(); packet.Info.RewardBonusMoney = quest->GetRewMoneyMaxLevel(); packet.Info.RewardDisplaySpell = quest->GetRewDisplaySpell(); packet.Info.RewardSpell = quest->GetRewSpell(); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 7e21d9784fd..c167e416090 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -14656,6 +14656,11 @@ void Player::IncompleteQuest(uint32 quest_id) } } +uint32 Player::GetQuestMoneyReward(Quest const* quest) +{ + return quest->MoneyValue(getLevel()) * sWorld->getRate(RATE_MONEY_QUEST); +} + uint32 Player::GetQuestXPReward(Quest const* quest) { bool rewarded = (m_RewardedQuests.find(quest->GetQuestId()) != m_RewardedQuests.end()); @@ -14791,7 +14796,7 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, else moneyRew = int32(quest->GetRewMoneyMaxLevel() * sWorld->getRate(RATE_DROP_MONEY)); - moneyRew += quest->GetRewMoney(); + moneyRew += GetQuestMoneyReward(quest); if (moneyRew) { @@ -16340,12 +16345,12 @@ void Player::SendQuestReward(Quest const* quest, uint32 XP) if (getLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)) { xp = XP; - moneyReward = quest->GetRewMoney(); + moneyReward = GetQuestMoneyReward(quest); } else // At max level, increase gold reward { xp = 0; - moneyReward = uint32(quest->GetRewMoney() + int32(quest->GetRewMoneyMaxLevel() * sWorld->getRate(RATE_DROP_MONEY))); + moneyReward = uint32(GetQuestMoneyReward(quest) + int32(quest->GetRewMoneyMaxLevel() * sWorld->getRate(RATE_DROP_MONEY))); } WorldPackets::Quest::QuestGiverQuestComplete packet; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 203682fc84b..2e4a50251a7 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1647,6 +1647,7 @@ class Player : public Unit, public GridObject<Player> void AddQuest(Quest const* quest, Object* questGiver); void CompleteQuest(uint32 quest_id); void IncompleteQuest(uint32 quest_id); + uint32 GetQuestMoneyReward(Quest const* quest); uint32 GetQuestXPReward(Quest const* quest); void RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, bool announce = true); void FailQuest(uint32 quest_id); diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index fd160532616..033fa6e3c02 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -3641,8 +3641,8 @@ void ObjectMgr::LoadQuests() QueryResult result = WorldDatabase.Query("SELECT " //0 1 2 3 4 5 6 7 8 9 10 "ID, QuestType, QuestLevel, QuestPackageID, MinLevel, QuestSortID, QuestInfoID, SuggestedGroupNum, RewardNextQuest, RewardXPDifficulty, RewardXPMultiplier, " - //11 12 13 14 15 16 17 18 19 20 21 - "RewardMoney, RewardMoneyDifficulty, Float13, RewardBonusMoney, RewardDisplaySpell, RewardSpell, RewardHonor, RewardKillHonor, StartItem, Flags, FlagsEx, " + //11 12 13 14 15 16 17 18 19 20 21 + "RewardMoney, RewardMoneyDifficulty, RewardMoneyMultiplier, RewardBonusMoney, RewardDisplaySpell, RewardSpell, RewardHonor, RewardKillHonor, StartItem, Flags, FlagsEx, " //22 23 24 25 26 27 28 29 "RewardItem1, RewardAmount1, ItemDrop1, ItemDropQuantity1, RewardItem2, RewardAmount2, ItemDrop2, ItemDropQuantity2, " //30 31 32 33 34 35 36 37 diff --git a/src/server/game/Handlers/LFGHandler.cpp b/src/server/game/Handlers/LFGHandler.cpp index 4a3866cbb1b..3a2b0cf01ed 100644 --- a/src/server/game/Handlers/LFGHandler.cpp +++ b/src/server/game/Handlers/LFGHandler.cpp @@ -52,7 +52,7 @@ void BuildQuestReward(WorldPacket& data, Quest const* quest, Player* player) { uint8 rewCount = quest->GetRewItemsCount() + quest->GetRewCurrencyCount(); - data << uint32(quest->GetRewMoney()); + data << uint32(player->GetQuestMoneyReward(quest)); data << uint32(player->GetQuestXPReward(quest)); data << uint8(rewCount); if (rewCount) diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index 148cdeab68e..93930cdba54 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -37,7 +37,7 @@ Quest::Quest(Field* questRecord) RewardXPMultiplier = questRecord[10].GetFloat(); RewardMoney = questRecord[11].GetUInt32(); RewardMoneyDifficulty = questRecord[12].GetUInt32(); - Float13 = questRecord[13].GetFloat(); + RewardMoneyMultiplier = questRecord[13].GetFloat(); RewardBonusMoney = questRecord[14].GetUInt32(); RewardDisplaySpell = questRecord[15].GetUInt32(); RewardSpell = questRecord[16].GetUInt32(); @@ -241,10 +241,14 @@ uint32 Quest::XPValue(uint32 playerLevel) const return 0; } -uint32 Quest::GetRewMoney() const +uint32 Quest::MoneyValue(uint8 playerLevel) const { - if (RewardMoney > 0) - return RewardMoney * sWorld->getRate(RATE_MONEY_QUEST); + uint8 level; + if (playerLevel) + level = Level == -1 ? playerLevel : Level; + + if (QuestMoneyRewardEntry const* money = sQuestMoneyRewardStore.LookupEntry(level)) + return money->Money[GetRewMoneyDifficulty()] * GetMoneyMultiplier(); else return 0; } @@ -253,7 +257,7 @@ void Quest::BuildQuestRewards(WorldPackets::Quest::QuestRewards& rewards, Player { rewards.ChoiceItemCount = GetRewChoiceItemsCount(); rewards.ItemCount = GetRewItemsCount(); - rewards.Money = GetRewMoney(); + rewards.Money = player->GetQuestMoneyReward(this); rewards.XP = player->GetQuestXPReward(this); rewards.Title = GetRewTitle(); rewards.Talents = GetBonusTalents(); diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h index e11794dc64c..a2a61cc5da0 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -286,6 +286,7 @@ class Quest void LoadQuestObjectiveVisualEffect(Field* fields); uint32 XPValue(uint32 playerLevel) const; + uint32 MoneyValue(uint8 playerLevel) const; bool HasFlag(uint32 flag) const { return (Flags & flag) != 0; } void SetFlag(uint32 flag) { Flags |= flag; } @@ -320,6 +321,7 @@ class Quest int32 GetRewArenaPoints() const {return RewardArenaPoints; } uint32 GetXPDifficulty() const { return RewardXPDifficulty; } float GetXPMultiplier() const { return RewardXPMultiplier; } + float GetMoneyMultiplier() const { return RewardMoneyMultiplier; } uint32 GetSrcItemId() const { return SourceItemId; } uint32 GetSrcItemCount() const { return SourceItemIdCount; } uint32 GetSrcSpell() const { return SourceSpellID; } @@ -335,7 +337,6 @@ class Quest std::string const& GetPortraitTurnInText() const { return PortraitTurnInText; } std::string const& GetPortraitTurnInName() const { return PortraitTurnInName; } QuestObjectives const& GetObjectives() const { return Objectives; } - uint32 GetRewMoney() const; uint32 GetRewMoneyDifficulty() const { return RewardMoneyDifficulty; } uint32 GetRewHonor() const { return RewardHonor; } uint32 GetRewKillHonor() const { return RewardKillHonor; } @@ -406,7 +407,7 @@ class Quest float RewardXPMultiplier; int32 RewardMoney; uint32 RewardMoneyDifficulty; - float Float13; + float RewardMoneyMultiplier; uint32 RewardBonusMoney; uint32 RewardDisplaySpell; uint32 RewardSpell; diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index d792783cf9a..7135a79a74e 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -75,7 +75,7 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write() _worldPacket << Info.RewardXPMultiplier; _worldPacket << Info.RewardMoney; _worldPacket << Info.RewardMoneyDifficulty; - _worldPacket << Info.Float13; // Unk + _worldPacket << Info.RewardMoneyMultiplier; _worldPacket << Info.RewardBonusMoney; _worldPacket << Info.RewardDisplaySpell; _worldPacket << Info.RewardSpell; diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index b2d7269ebb0..90568ed36ea 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -118,7 +118,8 @@ namespace WorldPackets int32 RewardXPDifficulty = 0; // used for calculating rewarded experience float RewardXPMultiplier = 1.0f; int32 RewardMoney = 0; // reward money (below max lvl) - int32 RewardMoneyDifficulty = 0; // used in XP calculation at client + int32 RewardMoneyDifficulty = 0; + float RewardMoneyMultiplier = 1.0f; int32 RewardBonusMoney = 0; int32 RewardDisplaySpell = 0; // reward spell, this spell will be displayed (icon) int32 RewardSpell = 0; @@ -131,6 +132,7 @@ namespace WorldPackets float POIx = 0.0f; float POIy = 0.0f; int32 POIPriority = 0; + int32 AllowableRaces = -1; std::string LogTitle; std::string LogDescription; std::string QuestDescription; @@ -163,9 +165,6 @@ namespace WorldPackets int32 RewardFactionOverride[QUEST_REWARD_REPUTATIONS_COUNT] = {}; int32 RewardCurrencyID[QUEST_REWARD_CURRENCY_COUNT] = {}; int32 RewardCurrencyQty[QUEST_REWARD_CURRENCY_COUNT] = {}; - - float Float13 = 1.0f; - int32 AllowableRaces = -1; }; class QueryQuestInfoResponse final : public ServerPacket |