Core/Quests: Fixed order of RewardChoiceItems and reputation reward.

Port From (https://github.com/TrinityCore/TrinityCore/commit/35bf146969db69f596a3247ae490e27131a8e0a3)
This commit is contained in:
hondacrx
2020-08-22 14:52:42 -04:00
parent 10a73d8002
commit 0d8743a1b5
+36 -36
View File
@@ -938,8 +938,8 @@ namespace Game.Entities
//should work fine, cause far teleport will be executed in Update() //should work fine, cause far teleport will be executed in Update()
SetCanDelayTeleport(true); SetCanDelayTeleport(true);
uint quest_id = quest.Id; uint questId = quest.Id;
QuestStatus oldStatus = GetQuestStatus(quest_id); QuestStatus oldStatus = GetQuestStatus(questId);
foreach (QuestObjective obj in quest.Objectives) foreach (QuestObjective obj in quest.Objectives)
{ {
@@ -966,8 +966,27 @@ namespace Game.Entities
} }
} }
RemoveTimedQuest(quest_id); RemoveTimedQuest(questId);
if (quest.GetRewItemsCount() > 0)
{
for (uint i = 0; i < quest.GetRewItemsCount(); ++i)
{
uint itemId = quest.RewardItemId[i];
if (itemId != 0)
{
List<ItemPosCount> dest = new List<ItemPosCount>();
if (CanStoreNewItem(ItemConst.NullBag, ItemConst.NullSlot, dest, itemId, quest.RewardItemCount[i]) == InventoryResult.Ok)
{
Item item = StoreNewItem(dest, itemId, true, ItemEnchantmentManager.GenerateItemRandomBonusListId(itemId));
SendNewItem(item, quest.RewardItemCount[i], true, false);
}
else if (quest.IsDFQuest())
SendItemRetrievalMail(itemId, quest.RewardItemCount[i], ItemContext.QuestReward);
}
}
}
ItemTemplate rewardProto = Global.ObjectMgr.GetItemTemplate(reward); ItemTemplate rewardProto = Global.ObjectMgr.GetItemTemplate(reward);
if (rewardProto != null && quest.GetRewChoiceItemsCount() != 0) if (rewardProto != null && quest.GetRewChoiceItemsCount() != 0)
{ {
@@ -989,25 +1008,6 @@ namespace Game.Entities
if (rewardProto != null && quest.PackageID != 0) if (rewardProto != null && quest.PackageID != 0)
RewardQuestPackage(quest.PackageID, reward); RewardQuestPackage(quest.PackageID, reward);
if (quest.GetRewItemsCount() > 0)
{
for (uint i = 0; i < quest.GetRewItemsCount(); ++i)
{
uint itemId = quest.RewardItemId[i];
if (itemId != 0)
{
List<ItemPosCount> dest = new List<ItemPosCount>();
if (CanStoreNewItem(ItemConst.NullBag, ItemConst.NullSlot, dest, itemId, quest.RewardItemCount[i]) == InventoryResult.Ok)
{
Item item = StoreNewItem(dest, itemId, true, ItemEnchantmentManager.GenerateItemRandomBonusListId(itemId));
SendNewItem(item, quest.RewardItemCount[i], true, false);
}
else if (quest.IsDFQuest())
SendItemRetrievalMail(itemId, quest.RewardItemCount[i], ItemContext.QuestReward);
}
}
}
for (byte i = 0; i < SharedConst.QuestRewardCurrencyCount; ++i) for (byte i = 0; i < SharedConst.QuestRewardCurrencyCount; ++i)
{ {
if (quest.RewardCurrencyId[i] != 0) if (quest.RewardCurrencyId[i] != 0)
@@ -1018,9 +1018,7 @@ namespace Game.Entities
if (skill != 0) if (skill != 0)
UpdateSkillPro(skill, 1000, quest.RewardSkillPoints); UpdateSkillPro(skill, 1000, quest.RewardSkillPoints);
RewardReputation(quest); ushort log_slot = FindQuestSlot(questId);
ushort log_slot = FindQuestSlot(quest_id);
if (log_slot < SharedConst.MaxQuestLogSize) if (log_slot < SharedConst.MaxQuestLogSize)
SetQuestSlot(log_slot, 0); SetQuestSlot(log_slot, 0);
@@ -1071,26 +1069,28 @@ namespace Game.Entities
if (quest.IsDaily() || quest.IsDFQuest()) if (quest.IsDaily() || quest.IsDFQuest())
{ {
SetDailyQuestStatus(quest_id); SetDailyQuestStatus(questId);
if (quest.IsDaily()) if (quest.IsDaily())
{ {
UpdateCriteria(CriteriaTypes.CompleteDailyQuest, quest_id); UpdateCriteria(CriteriaTypes.CompleteDailyQuest, questId);
UpdateCriteria(CriteriaTypes.CompleteDailyQuestDaily, quest_id); UpdateCriteria(CriteriaTypes.CompleteDailyQuestDaily, questId);
} }
} }
else if (quest.IsWeekly()) else if (quest.IsWeekly())
SetWeeklyQuestStatus(quest_id); SetWeeklyQuestStatus(questId);
else if (quest.IsMonthly()) else if (quest.IsMonthly())
SetMonthlyQuestStatus(quest_id); SetMonthlyQuestStatus(questId);
else if (quest.IsSeasonal()) else if (quest.IsSeasonal())
SetSeasonalQuestStatus(quest_id); SetSeasonalQuestStatus(questId);
RemoveActiveQuest(quest_id, false); RemoveActiveQuest(questId, false);
if (quest.CanIncreaseRewardedQuestCounters()) if (quest.CanIncreaseRewardedQuestCounters())
SetRewardedQuest(quest_id); SetRewardedQuest(questId);
SendQuestReward(quest, questGiver?.ToCreature(), XP, !announce); SendQuestReward(quest, questGiver?.ToCreature(), XP, !announce);
RewardReputation(quest);
// cast spells after mark quest complete (some spells have quest completed state requirements in spell_area data) // cast spells after mark quest complete (some spells have quest completed state requirements in spell_area data)
if (quest.RewardSpell > 0) if (quest.RewardSpell > 0)
{ {
@@ -1134,7 +1134,7 @@ namespace Game.Entities
// make full db save // make full db save
SaveToDB(false); SaveToDB(false);
uint questBit = Global.DB2Mgr.GetQuestUniqueBitFlag(quest_id); uint questBit = Global.DB2Mgr.GetQuestUniqueBitFlag(questId);
if (questBit != 0) if (questBit != 0)
SetQuestCompletedBit(questBit, true); SetQuestCompletedBit(questBit, true);
@@ -1144,13 +1144,13 @@ namespace Game.Entities
UpdatePvPState(); UpdatePvPState();
} }
SendQuestUpdate(quest_id); SendQuestUpdate(questId);
SendQuestGiverStatusMultiple(); SendQuestGiverStatusMultiple();
//lets remove flag for delayed teleports //lets remove flag for delayed teleports
SetCanDelayTeleport(false); SetCanDelayTeleport(false);
Global.ScriptMgr.OnQuestStatusChange(this, quest_id); Global.ScriptMgr.OnQuestStatusChange(this, questId);
Global.ScriptMgr.OnQuestStatusChange(this, quest, oldStatus, QuestStatus.Rewarded); Global.ScriptMgr.OnQuestStatusChange(this, quest, oldStatus, QuestStatus.Rewarded);
} }