aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Quests
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Quests')
-rw-r--r--src/server/game/Quests/QuestDef.cpp47
-rw-r--r--src/server/game/Quests/QuestDef.h9
2 files changed, 40 insertions, 16 deletions
diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp
index 2903c93823f..8a18705f92d 100644
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -277,20 +277,23 @@ void Quest::LoadQuestObjective(Field* fields)
obj.StorageIndex = fields[3].GetInt8();
obj.ObjectID = fields[4].GetInt32();
obj.Amount = fields[5].GetInt32();
- obj.Flags = fields[6].GetUInt32();
- obj.Flags2 = fields[7].GetUInt32();
- obj.ProgressBarWeight = fields[8].GetFloat();
- obj.Description = fields[9].GetStringView();
-
- bool hasCompletionEffect = std::any_of(fields + 10, fields + 15, [](Field const& f) { return !f.IsNull(); });
+ obj.SecondaryAmount = fields[6].GetInt32();
+ obj.Flags = fields[7].GetUInt32();
+ obj.Flags2 = fields[8].GetUInt32();
+ obj.ProgressBarWeight = fields[9].GetFloat();
+ obj.ParentObjectiveID = fields[10].GetInt32();
+ obj.Visible = fields[11].GetBool();
+ obj.Description = fields[12].GetStringView();
+
+ bool hasCompletionEffect = std::any_of(fields + 13, fields + 18, [](Field const& f) { return !f.IsNull(); });
if (hasCompletionEffect)
{
obj.CompletionEffect = new QuestObjectiveAction();
- obj.CompletionEffect->GameEventId = fields[10].GetUInt32OrNull();
- obj.CompletionEffect->SpellId = fields[11].GetUInt32OrNull();
- obj.CompletionEffect->ConversationId = fields[12].GetUInt32OrNull();
- obj.CompletionEffect->UpdatePhaseShift = fields[13].GetBool();
- obj.CompletionEffect->UpdateZoneAuras = fields[14].GetBool();
+ obj.CompletionEffect->GameEventId = fields[13].GetUInt32OrNull();
+ obj.CompletionEffect->SpellId = fields[14].GetUInt32OrNull();
+ obj.CompletionEffect->ConversationId = fields[15].GetUInt32OrNull();
+ obj.CompletionEffect->UpdatePhaseShift = fields[16].GetBool();
+ obj.CompletionEffect->UpdateZoneAuras = fields[17].GetBool();
}
_usedQuestObjectiveTypes[obj.Type] = true;
@@ -411,6 +414,16 @@ void Quest::LoadTreasurePickers(Field* fields)
_treasurePickerID.push_back(fields[1].GetInt32());
}
+void Quest::LoadRewardHouseRoom(Field* fields)
+{
+ _rewardHouseRoomIDs.push_back(fields[1].GetInt32());
+}
+
+void Quest::LoadRewardHouseDecor(Field* fields)
+{
+ _rewardHouseDecorIDs.push_back(fields[1].GetInt32());
+}
+
uint32 Quest::XPValue(Player const* player) const
{
return XPValue(player, GetContentTuningId(), _rewardXPDifficulty, _rewardXPMultiplier, _expansion);
@@ -472,7 +485,7 @@ uint32 Quest::MoneyValue(Player const* player) const
uint32 Quest::MaxMoneyValue() const
{
uint32 value = 0;
- if (Optional<ContentTuningLevels> questLevels = sDB2Manager.GetContentTuningData(GetContentTuningId(), 0))
+ if (Optional<ContentTuningLevels> questLevels = sDB2Manager.GetContentTuningData(GetContentTuningId(), {}))
if (QuestMoneyRewardEntry const* money = sQuestMoneyRewardStore.LookupEntry(questLevels->MaxLevel))
value = money->Difficulty[GetRewMoneyDifficulty()] * GetMoneyMultiplier();
@@ -661,18 +674,18 @@ WorldPacket Quest::BuildQueryData(LocaleConstant loc, Player* player) const
response.Info.PortraitGiverName = GetPortraitGiverName();
response.Info.PortraitTurnInText = GetPortraitTurnInText();
response.Info.PortraitTurnInName = GetPortraitTurnInName();
- std::transform(GetConditionalQuestDescription().begin(), GetConditionalQuestDescription().end(), std::back_inserter(response.Info.ConditionalQuestDescription), [loc](QuestConditionalText const& text)
+ std::ranges::transform(GetConditionalQuestDescription(), std::back_inserter(response.Info.ConditionalQuestDescription), [loc](QuestConditionalText const& text) -> WorldPackets::Quest::ConditionalQuestText
{
std::string_view content = text.Text[LOCALE_enUS];
ObjectMgr::GetLocaleString(text.Text, loc, content);
- return WorldPackets::Quest::ConditionalQuestText { text.PlayerConditionId, text.QuestgiverCreatureId, content };
+ return { .PlayerConditionID = text.PlayerConditionId, .QuestGiverCreatureID = text.QuestgiverCreatureId, .Text = content };
});
- std::transform(GetConditionalQuestCompletionLog().begin(), GetConditionalQuestCompletionLog().end(), std::back_inserter(response.Info.ConditionalQuestCompletionLog), [loc](QuestConditionalText const& text)
+ std::ranges::transform(GetConditionalQuestCompletionLog(), std::back_inserter(response.Info.ConditionalQuestCompletionLog), [loc](QuestConditionalText const& text) -> WorldPackets::Quest::ConditionalQuestText
{
std::string_view content = text.Text[LOCALE_enUS];
ObjectMgr::GetLocaleString(text.Text, loc, content);
- return WorldPackets::Quest::ConditionalQuestText { text.PlayerConditionId, text.QuestgiverCreatureId, content };
+ return { .PlayerConditionID = text.PlayerConditionId, .QuestGiverCreatureID = text.QuestgiverCreatureId, .Text = content };
});
if (loc != LOCALE_enUS)
@@ -779,6 +792,8 @@ WorldPacket Quest::BuildQueryData(LocaleConstant loc, Player* player) const
response.Info.ManagedWorldStateID = GetManagedWorldStateId();
response.Info.QuestSessionBonus = 0; //GetQuestSessionBonus(); // this is only sent while quest session is active
response.Info.QuestGiverCreatureID = 0; // only sent during npc interaction
+ response.Info.RewardHouseRoomIDs = GetRewardHouseRoomIds();
+ response.Info.RewardHouseDecorIDs = GetRewardRewardHouseDecorIds();
for (QuestObjective const& questObjective : GetObjectives())
{
diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h
index 59f38eed53b..b798da637ad 100644
--- a/src/server/game/Quests/QuestDef.h
+++ b/src/server/game/Quests/QuestDef.h
@@ -484,9 +484,12 @@ struct QuestObjective
int8 StorageIndex = 0;
int32 ObjectID = 0;
int32 Amount = 0;
+ int32 SecondaryAmount = 0;
uint32 Flags = 0;
uint32 Flags2 = 0;
float ProgressBarWeight = 0.0f;
+ int32 ParentObjectiveID = 0;
+ bool Visible = false;
std::string Description;
std::vector<int32> VisualEffects;
QuestObjectiveAction* CompletionEffect = nullptr;
@@ -600,6 +603,8 @@ class TC_GAME_API Quest
void LoadConditionalConditionalOfferRewardText(Field* fields);
void LoadConditionalConditionalQuestCompletionLog(Field* fields);
void LoadTreasurePickers(Field* fields);
+ void LoadRewardHouseRoom(Field* fields);
+ void LoadRewardHouseDecor(Field* fields);
uint32 XPValue(Player const* player) const;
static uint32 XPValue(Player const* player, uint32 contentTuningId, uint32 xpDifficulty, float xpMultiplier = 1.0f, int32 expansion = -1);
@@ -716,6 +721,8 @@ class TC_GAME_API Quest
int32 GetQuestGiverPortraitMount() const { return _questGiverPortraitMount; }
int32 GetQuestGiverPortraitModelSceneId() const { return _questGiverPortraitModelSceneId; }
uint32 GetQuestTurnInPortrait() const { return _questTurnInPortrait; }
+ std::vector<int32> const& GetRewardHouseRoomIds() const { return _rewardHouseRoomIDs; }
+ std::vector<int32> const& GetRewardRewardHouseDecorIds() const { return _rewardHouseDecorIDs; }
bool IsDaily() const { return (_flags & QUEST_FLAGS_DAILY) != 0; }
bool IsWeekly() const { return (_flags & QUEST_FLAGS_WEEKLY) != 0; }
bool IsMonthly() const { return (_specialFlags & QUEST_SPECIAL_FLAGS_MONTHLY) != 0; }
@@ -823,6 +830,8 @@ class TC_GAME_API Quest
int32 _expansion = 0;
int32 _managedWorldStateID = 0;
int32 _questSessionBonus = 0;
+ std::vector<int32> _rewardHouseRoomIDs;
+ std::vector<int32> _rewardHouseDecorIDs;
std::string _logTitle;
std::string _logDescription;
std::string _questDescription;