diff --git a/data/sql/updates/pending_db_world/drop-column.sql b/data/sql/updates/pending_db_world/drop-column.sql new file mode 100644 index 000000000..9e9606362 --- /dev/null +++ b/data/sql/updates/pending_db_world/drop-column.sql @@ -0,0 +1 @@ +ALTER TABLE `quest_template` DROP COLUMN `RewardBonusMoney`; diff --git a/src/server/apps/worldserver/worldserver.conf.dist b/src/server/apps/worldserver/worldserver.conf.dist index 5ec0e74ee..6ec3e9c9f 100644 --- a/src/server/apps/worldserver/worldserver.conf.dist +++ b/src/server/apps/worldserver/worldserver.conf.dist @@ -2740,10 +2740,17 @@ Quests.IgnoreAutoAccept = 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 # 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 Rate.RewardBonusMoney = 1 diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 484c76c37..3c001d792 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -4413,27 +4413,27 @@ void ObjectMgr::LoadQuests() "ID, QuestType, QuestLevel, MinLevel, QuestSortID, QuestInfoID, SuggestedGroupNum, TimeAllowed, AllowableRaces," // 9 10 11 12 "RequiredFactionId1, RequiredFactionId2, RequiredFactionValue1, RequiredFactionValue2, " - // 13 14 15 16 17 18 19 20 21 - "RewardNextQuest, RewardXPDifficulty, RewardMoney, RewardMoneyDifficulty, RewardBonusMoney, RewardDisplaySpell, RewardSpell, RewardHonor, RewardKillHonor, " - // 22 23 24 25 26 27 + // 13 14 15 16 17 18 19 20 + "RewardNextQuest, RewardXPDifficulty, RewardMoney, RewardMoneyDifficulty, RewardDisplaySpell, RewardSpell, RewardHonor, RewardKillHonor, " + // 21 22 23 24 25 26 "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, " - // 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, " - // 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," - // 62 64 65 66 + // 61 63 64 65 "POIContinent, POIx, POIy, POIPriority, " - // 67 68 69 70 71 + // 66 67 68 69 70 "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, " - // 80 81 82 83 84 85 86 87 + // 79 80 81 82 83 84 85 86 "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, " - // 100 101 102 103 104 + // 99 100 101 102 103 "Unknown0, ObjectiveText1, ObjectiveText2, ObjectiveText3, ObjectiveText4" " FROM quest_template"); if (!result) diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index f77b722cf..a4cf35b85 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -47,22 +47,21 @@ Quest::Quest(Field* questRecord) RewardXPDifficulty = questRecord[14].Get(); RewardMoney = questRecord[15].Get(); RewardMoneyDifficulty = questRecord[16].Get(); - RewardBonusMoney = questRecord[17].Get(); - RewardDisplaySpell = questRecord[18].Get(); - RewardSpell = questRecord[19].Get(); - RewardHonor = questRecord[20].Get(); - RewardKillHonor = questRecord[21].Get(); - StartItem = questRecord[22].Get(); - Flags = questRecord[23].Get(); - RewardTitleId = questRecord[24].Get(); - RequiredPlayerKills = questRecord[25].Get(); - RewardTalents = questRecord[26].Get(); - RewardArenaPoints = questRecord[27].Get(); + RewardDisplaySpell = questRecord[17].Get(); + RewardSpell = questRecord[18].Get(); + RewardHonor = questRecord[19].Get(); + RewardKillHonor = questRecord[20].Get(); + StartItem = questRecord[21].Get(); + Flags = questRecord[22].Get(); + RewardTitleId = questRecord[23].Get(); + RequiredPlayerKills = questRecord[24].Get(); + RewardTalents = questRecord[25].Get(); + RewardArenaPoints = questRecord[26].Get(); for (int i = 0; i < QUEST_REWARDS_COUNT; ++i) { - RewardItemId[i] = questRecord[28 + i * 2].Get(); - RewardItemIdCount[i] = questRecord[29 + i * 2].Get(); + RewardItemId[i] = questRecord[27 + i * 2].Get(); + RewardItemIdCount[i] = questRecord[28 + i * 2].Get(); if (RewardItemId[i]) ++_rewItemsCount; @@ -70,8 +69,8 @@ Quest::Quest(Field* questRecord) for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) { - RewardChoiceItemId[i] = questRecord[36 + i * 2].Get(); - RewardChoiceItemCount[i] = questRecord[37 + i * 2].Get(); + RewardChoiceItemId[i] = questRecord[35 + i * 2].Get(); + RewardChoiceItemCount[i] = questRecord[36 + i * 2].Get(); if (RewardChoiceItemId[i]) ++_rewChoiceItemsCount; @@ -79,26 +78,26 @@ Quest::Quest(Field* questRecord) for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) { - RewardFactionId[i] = questRecord[48 + i * 3].Get(); - RewardFactionValueId[i] = questRecord[49 + i * 3].Get(); - RewardFactionValueIdOverride[i] = questRecord[50 + i * 3].Get(); + RewardFactionId[i] = questRecord[47 + i * 3].Get(); + RewardFactionValueId[i] = questRecord[48 + i * 3].Get(); + RewardFactionValueIdOverride[i] = questRecord[49 + i * 3].Get(); } - POIContinent = questRecord[63].Get(); - POIx = questRecord[64].Get(); - POIy = questRecord[65].Get(); - POIPriority = questRecord[66].Get(); - Title = questRecord[67].Get(); - Objectives = questRecord[68].Get(); - Details = questRecord[69].Get(); - AreaDescription = questRecord[70].Get(); - CompletedText = questRecord[71].Get(); + POIContinent = questRecord[62].Get(); + POIx = questRecord[63].Get(); + POIy = questRecord[64].Get(); + POIPriority = questRecord[65].Get(); + Title = questRecord[66].Get(); + Objectives = questRecord[67].Get(); + Details = questRecord[68].Get(); + AreaDescription = questRecord[69].Get(); + CompletedText = questRecord[70].Get(); for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) { - RequiredNpcOrGo[i] = questRecord[72 + i].Get(); - RequiredNpcOrGoCount[i] = questRecord[76 + i].Get(); - ObjectiveText[i] = questRecord[101 + i].Get(); + RequiredNpcOrGo[i] = questRecord[71 + i].Get(); + RequiredNpcOrGoCount[i] = questRecord[75 + i].Get(); + ObjectiveText[i] = questRecord[100 + i].Get(); if (RequiredNpcOrGo[i]) ++_reqCreatureOrGOcount; @@ -106,14 +105,14 @@ Quest::Quest(Field* questRecord) for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i) { - ItemDrop[i] = questRecord[80 + i].Get(); - ItemDropQuantity[i] = questRecord[84 + i].Get(); + ItemDrop[i] = questRecord[79 + i].Get(); + ItemDropQuantity[i] = questRecord[83 + i].Get(); } for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i) { - RequiredItemId[i] = questRecord[88 + i].Get(); - RequiredItemCount[i] = questRecord[94 + i].Get(); + RequiredItemId[i] = questRecord[87 + i].Get(); + RequiredItemCount[i] = questRecord[93 + i].Get(); if (RequiredItemId[i]) ++_reqItemsCount; @@ -252,15 +251,19 @@ int32 Quest::GetRewOrReqMoney(uint8 playerLevel) const } } - return static_cast(rewardedMoney * sWorld->getRate(RATE_REWARD_BONUS_MONEY)); + return static_cast(rewardedMoney * sWorld->getRate(RATE_REWARD_QUEST_MONEY)); } uint32 Quest::GetRewMoneyMaxLevel() const { - if (HasFlag(QUEST_FLAGS_NO_MONEY_FROM_XP)) - return 0; + uint32 rewMoney = 0; - return static_cast(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(rewMoney * sWorld->getRate(RATE_REWARD_BONUS_MONEY)); } bool Quest::IsAutoAccept() const diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h index 734151b5e..e2f62c3ff 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -371,7 +371,6 @@ protected: float RewardKillHonor; int32 RewardMoney; uint32 RewardMoneyDifficulty; - uint32 RewardBonusMoney; uint32 RewardDisplaySpell; int32 RewardSpell; uint32 POIContinent; diff --git a/src/server/game/World/IWorld.h b/src/server/game/World/IWorld.h index 227bba687..db5284d9b 100644 --- a/src/server/game/World/IWorld.h +++ b/src/server/game/World/IWorld.h @@ -460,6 +460,7 @@ enum Rates RATE_BUYVALUE_ITEM_ARTIFACT, RATE_BUYVALUE_ITEM_HEIRLOOM, RATE_DROP_MONEY, + RATE_REWARD_QUEST_MONEY, RATE_REWARD_BONUS_MONEY, RATE_XP_KILL, RATE_XP_BG_KILL_AV, diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 68a8e5075..312d76226 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -494,6 +494,7 @@ void World::LoadConfigSettings(bool reload) _rate_values[RATE_DROP_ITEM_GROUP_AMOUNT] = sConfigMgr->GetOption("Rate.Drop.Item.GroupAmount", 1.0f); _rate_values[RATE_DROP_MONEY] = sConfigMgr->GetOption("Rate.Drop.Money", 1.0f); + _rate_values[RATE_REWARD_QUEST_MONEY] = sConfigMgr->GetOption("Rate.RewardQuestMoney", 1.0f); _rate_values[RATE_REWARD_BONUS_MONEY] = sConfigMgr->GetOption("Rate.RewardBonusMoney", 1.0f); _rate_values[RATE_XP_KILL] = sConfigMgr->GetOption("Rate.XP.Kill", 1.0f); _rate_values[RATE_XP_BG_KILL_AV] = sConfigMgr->GetOption("Rate.XP.BattlegroundKillAV", 1.0f);