aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/DataStores/DBCStores.cpp2
-rw-r--r--src/server/game/DataStores/DBCStores.h1
-rw-r--r--src/server/game/DataStores/DBCStructure.h6
-rw-r--r--src/server/game/DataStores/DBCfmt.h1
-rw-r--r--src/server/game/Entities/Creature/GossipDef.cpp6
-rw-r--r--src/server/game/Entities/Player/Player.cpp11
-rw-r--r--src/server/game/Entities/Player/Player.h1
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp4
-rw-r--r--src/server/game/Handlers/LFGHandler.cpp2
-rw-r--r--src/server/game/Quests/QuestDef.cpp14
-rw-r--r--src/server/game/Quests/QuestDef.h5
-rw-r--r--src/server/game/Server/Packets/QuestPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/QuestPackets.h7
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