Core/Conditions: Sync CONDITION_QUEST_OBJECTIVE_PROGRESS implementation

Port From (https://github.com/TrinityCore/TrinityCore/commit/3d3d255a47725398fd4d011a1a01eee141691ec4)
This commit is contained in:
hondacrx
2021-12-22 20:30:31 -05:00
parent ca64ca25f6
commit 97730e14ad
4 changed files with 16 additions and 6 deletions
+1 -1
View File
@@ -67,7 +67,7 @@ namespace Framework.Constants
PetType = 45, // mask 0 0 true if player has a pet of given type(s)
Taxi = 46, // 0 0 0 true if player is on taxi
Queststate = 47, // quest_id state_mask 0 true if player is in any of the provided quest states for the quest (1 = not taken, 2 = completed, 8 = in progress, 32 = failed, 64 = rewarded)
ObjectiveComplete = 48, // ID 0 0 true if player has ID objective complete, but quest not yet rewarded
ObjectiveProgress = 48, // ID 0 0 true if player has ID objective complete, but quest not yet rewarded
DifficultyId = 49, // Difficulty 0 0 true is map has difficulty id
Gamemaster = 50, // canBeGM 0 0 true if player is gamemaster (or can be gamemaster)
ObjectEntryGuid = 51, // TypeID entry guid true if object is type TypeID and the entry is 0 or matches entry of the object or matches guid of the object
+3 -3
View File
@@ -357,7 +357,7 @@ namespace Game.Conditions
}
break;
}
case ConditionTypes.ObjectiveComplete:
case ConditionTypes.ObjectiveProgress:
{
if (player)
{
@@ -373,7 +373,7 @@ namespace Game.Conditions
if (slot >= SharedConst.MaxQuestLogSize)
break;
condMeets = (!player.GetQuestRewardStatus(questObj.QuestID) && player.IsQuestObjectiveComplete(slot, quest, questObj));
condMeets = player.GetQuestSlotObjectiveData(slot, questObj) == ConditionValue3;
}
break;
}
@@ -502,7 +502,7 @@ namespace Game.Conditions
mask |= GridMapTypeMask.AreaTrigger;
break;
case ConditionTypes.DailyQuestDone:
case ConditionTypes.ObjectiveComplete:
case ConditionTypes.ObjectiveProgress:
mask |= GridMapTypeMask.Player;
break;
default:
+8 -2
View File
@@ -1625,7 +1625,7 @@ namespace Game
}
break;
}
case ConditionTypes.ObjectiveComplete:
case ConditionTypes.ObjectiveProgress:
{
QuestObjective obj = Global.ObjectMgr.GetQuestObjective(cond.ConditionValue1);
if (obj == null)
@@ -1633,6 +1633,12 @@ namespace Game
Log.outError(LogFilter.Sql, "{0} points to non-existing quest objective ({1}), skipped.", cond.ToString(true), cond.ConditionValue1);
return false;
}
int limit = obj.IsStoringFlag() ? 1 : obj.Amount;
if (cond.ConditionValue3 > limit)
{
Log.outError(LogFilter.Sql, $"{cond.ToString(true)} has quest objective count {cond.ConditionValue3} in value3, but quest objective {cond.ConditionValue1} has a maximum objective count of {limit}, skipped.");
return false;
}
break;
}
case ConditionTypes.PetType:
@@ -2573,7 +2579,7 @@ namespace Game
new ConditionTypeInfo("Pet type", true, false, false),
new ConditionTypeInfo("On Taxi", false,false, false),
new ConditionTypeInfo("Quest state mask", true, true, false),
new ConditionTypeInfo("Objective Complete", true, false, false),
new ConditionTypeInfo("Quest objective progress", true, false, true),
new ConditionTypeInfo("Map Difficulty", true, false, false),
new ConditionTypeInfo("Is Gamemaster", true, false, false),
new ConditionTypeInfo("Object Entry or Guid", true, true, true),
@@ -0,0 +1,4 @@
UPDATE `conditions` SET `ConditionValue3`=1 WHERE `ConditionTypeOrReference`=48 AND `ConditionValue1`=395159;
UPDATE `conditions` SET `ConditionValue3`=1 WHERE `ConditionTypeOrReference`=48 AND `ConditionValue1`=395215;
UPDATE `conditions` SET `ConditionValue3`=1 WHERE `ConditionTypeOrReference`=48 AND `ConditionValue1`=406783;
UPDATE `conditions` SET `ConditionValue3`=1 WHERE `ConditionTypeOrReference`=48 AND `ConditionValue1`=406784;