fix(Core/Quests): Create quest money reward config and adjust max level bonus reward function. (#18222)
* Init. * Drop RewardBonusMoney column. How's that for deprecation. * Add formula source link. * Remove deprecated info in conf. * Newline.
This commit is contained in:
@@ -0,0 +1 @@
|
|||||||
|
ALTER TABLE `quest_template` DROP COLUMN `RewardBonusMoney`;
|
||||||
@@ -2740,10 +2740,17 @@ Quests.IgnoreAutoAccept = 0
|
|||||||
|
|
||||||
Quests.IgnoreAutoComplete = 0
|
Quests.IgnoreAutoComplete = 0
|
||||||
|
|
||||||
|
#
|
||||||
|
# Rate.RewardQuestMoney
|
||||||
|
# Description: Allows to tweak the amount of money rewarded by quests (does not affect RewardBonusMoney).
|
||||||
|
# Default: 1
|
||||||
|
|
||||||
|
Rate.RewardQuestMoney = 1
|
||||||
|
|
||||||
#
|
#
|
||||||
# Rate.RewardBonusMoney
|
# Rate.RewardBonusMoney
|
||||||
# Description: Allows to further tweak the amount of extra money rewarded by quests when the player
|
# Description: Allows to further tweak the amount of extra money rewarded by quests when the player
|
||||||
# is at MaxPlayerLevel (this amount is specified in quest_template.RewardBonusMoney).
|
# is at MaxPlayerLevel.
|
||||||
# Default: 1
|
# Default: 1
|
||||||
|
|
||||||
Rate.RewardBonusMoney = 1
|
Rate.RewardBonusMoney = 1
|
||||||
|
|||||||
@@ -4413,27 +4413,27 @@ void ObjectMgr::LoadQuests()
|
|||||||
"ID, QuestType, QuestLevel, MinLevel, QuestSortID, QuestInfoID, SuggestedGroupNum, TimeAllowed, AllowableRaces,"
|
"ID, QuestType, QuestLevel, MinLevel, QuestSortID, QuestInfoID, SuggestedGroupNum, TimeAllowed, AllowableRaces,"
|
||||||
// 9 10 11 12
|
// 9 10 11 12
|
||||||
"RequiredFactionId1, RequiredFactionId2, RequiredFactionValue1, RequiredFactionValue2, "
|
"RequiredFactionId1, RequiredFactionId2, RequiredFactionValue1, RequiredFactionValue2, "
|
||||||
// 13 14 15 16 17 18 19 20 21
|
// 13 14 15 16 17 18 19 20
|
||||||
"RewardNextQuest, RewardXPDifficulty, RewardMoney, RewardMoneyDifficulty, RewardBonusMoney, RewardDisplaySpell, RewardSpell, RewardHonor, RewardKillHonor, "
|
"RewardNextQuest, RewardXPDifficulty, RewardMoney, RewardMoneyDifficulty, RewardDisplaySpell, RewardSpell, RewardHonor, RewardKillHonor, "
|
||||||
// 22 23 24 25 26 27
|
// 21 22 23 24 25 26
|
||||||
"StartItem, Flags, RewardTitle, RequiredPlayerKills, RewardTalents, RewardArenaPoints, "
|
"StartItem, Flags, RewardTitle, RequiredPlayerKills, RewardTalents, RewardArenaPoints, "
|
||||||
// 28 29 30 31 32 33 34 35
|
// 27 28 29 30 31 32 33 34
|
||||||
"RewardItem1, RewardAmount1, RewardItem2, RewardAmount2, RewardItem3, RewardAmount3, RewardItem4, RewardAmount4, "
|
"RewardItem1, RewardAmount1, RewardItem2, RewardAmount2, RewardItem3, RewardAmount3, RewardItem4, RewardAmount4, "
|
||||||
// 36 37 38 39 40 41 42 43 44 45 46 47
|
// 35 36 37 38 39 40 41 42 43 44 45 46
|
||||||
"RewardChoiceItemID1, RewardChoiceItemQuantity1, RewardChoiceItemID2, RewardChoiceItemQuantity2, RewardChoiceItemID3, RewardChoiceItemQuantity3, RewardChoiceItemID4, RewardChoiceItemQuantity4, RewardChoiceItemID5, RewardChoiceItemQuantity5, RewardChoiceItemID6, RewardChoiceItemQuantity6, "
|
"RewardChoiceItemID1, RewardChoiceItemQuantity1, RewardChoiceItemID2, RewardChoiceItemQuantity2, RewardChoiceItemID3, RewardChoiceItemQuantity3, RewardChoiceItemID4, RewardChoiceItemQuantity4, RewardChoiceItemID5, RewardChoiceItemQuantity5, RewardChoiceItemID6, RewardChoiceItemQuantity6, "
|
||||||
// 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
// 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
||||||
"RewardFactionID1, RewardFactionValue1, RewardFactionOverride1, RewardFactionID2, RewardFactionValue2, RewardFactionOverride2, RewardFactionID3, RewardFactionValue3, RewardFactionOverride3, RewardFactionID4, RewardFactionValue4, RewardFactionOverride4, RewardFactionID5, RewardFactionValue5, RewardFactionOverride5,"
|
"RewardFactionID1, RewardFactionValue1, RewardFactionOverride1, RewardFactionID2, RewardFactionValue2, RewardFactionOverride2, RewardFactionID3, RewardFactionValue3, RewardFactionOverride3, RewardFactionID4, RewardFactionValue4, RewardFactionOverride4, RewardFactionID5, RewardFactionValue5, RewardFactionOverride5,"
|
||||||
// 62 64 65 66
|
// 61 63 64 65
|
||||||
"POIContinent, POIx, POIy, POIPriority, "
|
"POIContinent, POIx, POIy, POIPriority, "
|
||||||
// 67 68 69 70 71
|
// 66 67 68 69 70
|
||||||
"LogTitle, LogDescription, QuestDescription, AreaDescription, QuestCompletionLog, "
|
"LogTitle, LogDescription, QuestDescription, AreaDescription, QuestCompletionLog, "
|
||||||
// 72 73 74 75 76 77 78 79
|
// 71 72 73 74 75 76 77 78
|
||||||
"RequiredNpcOrGo1, RequiredNpcOrGo2, RequiredNpcOrGo3, RequiredNpcOrGo4, RequiredNpcOrGoCount1, RequiredNpcOrGoCount2, RequiredNpcOrGoCount3, RequiredNpcOrGoCount4, "
|
"RequiredNpcOrGo1, RequiredNpcOrGo2, RequiredNpcOrGo3, RequiredNpcOrGo4, RequiredNpcOrGoCount1, RequiredNpcOrGoCount2, RequiredNpcOrGoCount3, RequiredNpcOrGoCount4, "
|
||||||
// 80 81 82 83 84 85 86 87
|
// 79 80 81 82 83 84 85 86
|
||||||
"ItemDrop1, ItemDrop2, ItemDrop3, ItemDrop4, ItemDropQuantity1, ItemDropQuantity2, ItemDropQuantity3, ItemDropQuantity4, "
|
"ItemDrop1, ItemDrop2, ItemDrop3, ItemDrop4, ItemDropQuantity1, ItemDropQuantity2, ItemDropQuantity3, ItemDropQuantity4, "
|
||||||
// 88 89 90 91 92 93 94 95 96 97 98 99
|
// 87 88 89 90 91 92 93 94 95 96 97 98
|
||||||
"RequiredItemId1, RequiredItemId2, RequiredItemId3, RequiredItemId4, RequiredItemId5, RequiredItemId6, RequiredItemCount1, RequiredItemCount2, RequiredItemCount3, RequiredItemCount4, RequiredItemCount5, RequiredItemCount6, "
|
"RequiredItemId1, RequiredItemId2, RequiredItemId3, RequiredItemId4, RequiredItemId5, RequiredItemId6, RequiredItemCount1, RequiredItemCount2, RequiredItemCount3, RequiredItemCount4, RequiredItemCount5, RequiredItemCount6, "
|
||||||
// 100 101 102 103 104
|
// 99 100 101 102 103
|
||||||
"Unknown0, ObjectiveText1, ObjectiveText2, ObjectiveText3, ObjectiveText4"
|
"Unknown0, ObjectiveText1, ObjectiveText2, ObjectiveText3, ObjectiveText4"
|
||||||
" FROM quest_template");
|
" FROM quest_template");
|
||||||
if (!result)
|
if (!result)
|
||||||
|
|||||||
@@ -47,22 +47,21 @@ Quest::Quest(Field* questRecord)
|
|||||||
RewardXPDifficulty = questRecord[14].Get<uint8>();
|
RewardXPDifficulty = questRecord[14].Get<uint8>();
|
||||||
RewardMoney = questRecord[15].Get<int32>();
|
RewardMoney = questRecord[15].Get<int32>();
|
||||||
RewardMoneyDifficulty = questRecord[16].Get<uint32>();
|
RewardMoneyDifficulty = questRecord[16].Get<uint32>();
|
||||||
RewardBonusMoney = questRecord[17].Get<uint32>();
|
RewardDisplaySpell = questRecord[17].Get<uint32>();
|
||||||
RewardDisplaySpell = questRecord[18].Get<uint32>();
|
RewardSpell = questRecord[18].Get<int32>();
|
||||||
RewardSpell = questRecord[19].Get<int32>();
|
RewardHonor = questRecord[19].Get<uint32>();
|
||||||
RewardHonor = questRecord[20].Get<uint32>();
|
RewardKillHonor = questRecord[20].Get<float>();
|
||||||
RewardKillHonor = questRecord[21].Get<float>();
|
StartItem = questRecord[21].Get<uint32>();
|
||||||
StartItem = questRecord[22].Get<uint32>();
|
Flags = questRecord[22].Get<uint32>();
|
||||||
Flags = questRecord[23].Get<uint32>();
|
RewardTitleId = questRecord[23].Get<uint8>();
|
||||||
RewardTitleId = questRecord[24].Get<uint8>();
|
RequiredPlayerKills = questRecord[24].Get<uint8>();
|
||||||
RequiredPlayerKills = questRecord[25].Get<uint8>();
|
RewardTalents = questRecord[25].Get<uint8>();
|
||||||
RewardTalents = questRecord[26].Get<uint8>();
|
RewardArenaPoints = questRecord[26].Get<uint16>();
|
||||||
RewardArenaPoints = questRecord[27].Get<uint16>();
|
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_REWARDS_COUNT; ++i)
|
for (int i = 0; i < QUEST_REWARDS_COUNT; ++i)
|
||||||
{
|
{
|
||||||
RewardItemId[i] = questRecord[28 + i * 2].Get<uint32>();
|
RewardItemId[i] = questRecord[27 + i * 2].Get<uint32>();
|
||||||
RewardItemIdCount[i] = questRecord[29 + i * 2].Get<uint16>();
|
RewardItemIdCount[i] = questRecord[28 + i * 2].Get<uint16>();
|
||||||
|
|
||||||
if (RewardItemId[i])
|
if (RewardItemId[i])
|
||||||
++_rewItemsCount;
|
++_rewItemsCount;
|
||||||
@@ -70,8 +69,8 @@ Quest::Quest(Field* questRecord)
|
|||||||
|
|
||||||
for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
|
for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
|
||||||
{
|
{
|
||||||
RewardChoiceItemId[i] = questRecord[36 + i * 2].Get<uint32>();
|
RewardChoiceItemId[i] = questRecord[35 + i * 2].Get<uint32>();
|
||||||
RewardChoiceItemCount[i] = questRecord[37 + i * 2].Get<uint16>();
|
RewardChoiceItemCount[i] = questRecord[36 + i * 2].Get<uint16>();
|
||||||
|
|
||||||
if (RewardChoiceItemId[i])
|
if (RewardChoiceItemId[i])
|
||||||
++_rewChoiceItemsCount;
|
++_rewChoiceItemsCount;
|
||||||
@@ -79,26 +78,26 @@ Quest::Quest(Field* questRecord)
|
|||||||
|
|
||||||
for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
|
for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
|
||||||
{
|
{
|
||||||
RewardFactionId[i] = questRecord[48 + i * 3].Get<uint16>();
|
RewardFactionId[i] = questRecord[47 + i * 3].Get<uint16>();
|
||||||
RewardFactionValueId[i] = questRecord[49 + i * 3].Get<int32>();
|
RewardFactionValueId[i] = questRecord[48 + i * 3].Get<int32>();
|
||||||
RewardFactionValueIdOverride[i] = questRecord[50 + i * 3].Get<int32>();
|
RewardFactionValueIdOverride[i] = questRecord[49 + i * 3].Get<int32>();
|
||||||
}
|
}
|
||||||
|
|
||||||
POIContinent = questRecord[63].Get<uint16>();
|
POIContinent = questRecord[62].Get<uint16>();
|
||||||
POIx = questRecord[64].Get<float>();
|
POIx = questRecord[63].Get<float>();
|
||||||
POIy = questRecord[65].Get<float>();
|
POIy = questRecord[64].Get<float>();
|
||||||
POIPriority = questRecord[66].Get<uint32>();
|
POIPriority = questRecord[65].Get<uint32>();
|
||||||
Title = questRecord[67].Get<std::string>();
|
Title = questRecord[66].Get<std::string>();
|
||||||
Objectives = questRecord[68].Get<std::string>();
|
Objectives = questRecord[67].Get<std::string>();
|
||||||
Details = questRecord[69].Get<std::string>();
|
Details = questRecord[68].Get<std::string>();
|
||||||
AreaDescription = questRecord[70].Get<std::string>();
|
AreaDescription = questRecord[69].Get<std::string>();
|
||||||
CompletedText = questRecord[71].Get<std::string>();
|
CompletedText = questRecord[70].Get<std::string>();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||||
{
|
{
|
||||||
RequiredNpcOrGo[i] = questRecord[72 + i].Get<int32>();
|
RequiredNpcOrGo[i] = questRecord[71 + i].Get<int32>();
|
||||||
RequiredNpcOrGoCount[i] = questRecord[76 + i].Get<uint16>();
|
RequiredNpcOrGoCount[i] = questRecord[75 + i].Get<uint16>();
|
||||||
ObjectiveText[i] = questRecord[101 + i].Get<std::string>();
|
ObjectiveText[i] = questRecord[100 + i].Get<std::string>();
|
||||||
|
|
||||||
if (RequiredNpcOrGo[i])
|
if (RequiredNpcOrGo[i])
|
||||||
++_reqCreatureOrGOcount;
|
++_reqCreatureOrGOcount;
|
||||||
@@ -106,14 +105,14 @@ Quest::Quest(Field* questRecord)
|
|||||||
|
|
||||||
for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
|
for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
|
||||||
{
|
{
|
||||||
ItemDrop[i] = questRecord[80 + i].Get<uint32>();
|
ItemDrop[i] = questRecord[79 + i].Get<uint32>();
|
||||||
ItemDropQuantity[i] = questRecord[84 + i].Get<uint16>();
|
ItemDropQuantity[i] = questRecord[83 + i].Get<uint16>();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
|
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
|
||||||
{
|
{
|
||||||
RequiredItemId[i] = questRecord[88 + i].Get<uint32>();
|
RequiredItemId[i] = questRecord[87 + i].Get<uint32>();
|
||||||
RequiredItemCount[i] = questRecord[94 + i].Get<uint16>();
|
RequiredItemCount[i] = questRecord[93 + i].Get<uint16>();
|
||||||
|
|
||||||
if (RequiredItemId[i])
|
if (RequiredItemId[i])
|
||||||
++_reqItemsCount;
|
++_reqItemsCount;
|
||||||
@@ -252,15 +251,19 @@ int32 Quest::GetRewOrReqMoney(uint8 playerLevel) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return static_cast<int32>(rewardedMoney * sWorld->getRate(RATE_REWARD_BONUS_MONEY));
|
return static_cast<int32>(rewardedMoney * sWorld->getRate(RATE_REWARD_QUEST_MONEY));
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 Quest::GetRewMoneyMaxLevel() const
|
uint32 Quest::GetRewMoneyMaxLevel() const
|
||||||
{
|
{
|
||||||
if (HasFlag(QUEST_FLAGS_NO_MONEY_FROM_XP))
|
uint32 rewMoney = 0;
|
||||||
return 0;
|
|
||||||
|
|
||||||
return static_cast<int32>(RewardBonusMoney * sWorld->getRate(RATE_REWARD_BONUS_MONEY));
|
if (HasFlag(QUEST_FLAGS_NO_MONEY_FROM_XP))
|
||||||
|
return rewMoney;
|
||||||
|
|
||||||
|
rewMoney = (XPValue(sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)) * (6 * COPPER));
|
||||||
|
// https://wowpedia.fandom.com/wiki/Quest?oldid=1035002 Formula is XP gained * 6c
|
||||||
|
return static_cast<int32>(rewMoney * sWorld->getRate(RATE_REWARD_BONUS_MONEY));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Quest::IsAutoAccept() const
|
bool Quest::IsAutoAccept() const
|
||||||
|
|||||||
@@ -371,7 +371,6 @@ protected:
|
|||||||
float RewardKillHonor;
|
float RewardKillHonor;
|
||||||
int32 RewardMoney;
|
int32 RewardMoney;
|
||||||
uint32 RewardMoneyDifficulty;
|
uint32 RewardMoneyDifficulty;
|
||||||
uint32 RewardBonusMoney;
|
|
||||||
uint32 RewardDisplaySpell;
|
uint32 RewardDisplaySpell;
|
||||||
int32 RewardSpell;
|
int32 RewardSpell;
|
||||||
uint32 POIContinent;
|
uint32 POIContinent;
|
||||||
|
|||||||
@@ -460,6 +460,7 @@ enum Rates
|
|||||||
RATE_BUYVALUE_ITEM_ARTIFACT,
|
RATE_BUYVALUE_ITEM_ARTIFACT,
|
||||||
RATE_BUYVALUE_ITEM_HEIRLOOM,
|
RATE_BUYVALUE_ITEM_HEIRLOOM,
|
||||||
RATE_DROP_MONEY,
|
RATE_DROP_MONEY,
|
||||||
|
RATE_REWARD_QUEST_MONEY,
|
||||||
RATE_REWARD_BONUS_MONEY,
|
RATE_REWARD_BONUS_MONEY,
|
||||||
RATE_XP_KILL,
|
RATE_XP_KILL,
|
||||||
RATE_XP_BG_KILL_AV,
|
RATE_XP_BG_KILL_AV,
|
||||||
|
|||||||
@@ -494,6 +494,7 @@ void World::LoadConfigSettings(bool reload)
|
|||||||
_rate_values[RATE_DROP_ITEM_GROUP_AMOUNT] = sConfigMgr->GetOption<float>("Rate.Drop.Item.GroupAmount", 1.0f);
|
_rate_values[RATE_DROP_ITEM_GROUP_AMOUNT] = sConfigMgr->GetOption<float>("Rate.Drop.Item.GroupAmount", 1.0f);
|
||||||
_rate_values[RATE_DROP_MONEY] = sConfigMgr->GetOption<float>("Rate.Drop.Money", 1.0f);
|
_rate_values[RATE_DROP_MONEY] = sConfigMgr->GetOption<float>("Rate.Drop.Money", 1.0f);
|
||||||
|
|
||||||
|
_rate_values[RATE_REWARD_QUEST_MONEY] = sConfigMgr->GetOption<float>("Rate.RewardQuestMoney", 1.0f);
|
||||||
_rate_values[RATE_REWARD_BONUS_MONEY] = sConfigMgr->GetOption<float>("Rate.RewardBonusMoney", 1.0f);
|
_rate_values[RATE_REWARD_BONUS_MONEY] = sConfigMgr->GetOption<float>("Rate.RewardBonusMoney", 1.0f);
|
||||||
_rate_values[RATE_XP_KILL] = sConfigMgr->GetOption<float>("Rate.XP.Kill", 1.0f);
|
_rate_values[RATE_XP_KILL] = sConfigMgr->GetOption<float>("Rate.XP.Kill", 1.0f);
|
||||||
_rate_values[RATE_XP_BG_KILL_AV] = sConfigMgr->GetOption<float>("Rate.XP.BattlegroundKillAV", 1.0f);
|
_rate_values[RATE_XP_BG_KILL_AV] = sConfigMgr->GetOption<float>("Rate.XP.BattlegroundKillAV", 1.0f);
|
||||||
|
|||||||
Reference in New Issue
Block a user