Core/Quests: Calculate the RewardMoney value with QuestMoneyReward.dbc and defined an unknown field
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
ALTER TABLE `quest_template` CHANGE `Float13` `RewardMoneyMultiplier` FLOAT NOT NULL DEFAULT '1';
|
||||
|
||||
UPDATE `quest_template` SET `RewardMoney`=0 WHERE `RewardMoney`>0; -- non-static data
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user