Core/Quests: Fixed order of RewardChoiceItems and reputation reward.
Port From (https://github.com/TrinityCore/TrinityCore/commit/35bf146969db69f596a3247ae490e27131a8e0a3)
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user