Core/Achievements: Several criteria fixes

Port From (https://github.com/TrinityCore/TrinityCore/commit/bca465a5694101c476dc01aeafa95dfb3531e427)
This commit is contained in:
hondacrx
2021-08-22 23:12:19 -04:00
parent 1f6a2b3516
commit 607f891fa8
5 changed files with 48 additions and 35 deletions
@@ -526,7 +526,7 @@ namespace Framework.Constants
GainReputation = 46,
GainExaltedReputation = 47,
VisitBarberShop = 48,
EquipEpicItem = 49,
EquipItemInSlot = 49,
RollNeedOnLoot = 50, /// Todo Itemlevel Is Mentioned In Text But Not Present In Dbc
RollGreedOnLoot = 51,
HkClass = 52,
@@ -567,8 +567,8 @@ namespace Framework.Constants
GainReveredReputation = 87,
GainHonoredReputation = 88,
KnownFactions = 89,
LootEpicItem = 90,
ReceiveEpicItem = 91,
LootAnyItem = 90,
ObtainAnyItem = 91,
SendEventScenario = 92,
RollNeed = 93,
RollGreed = 94,
@@ -669,9 +669,10 @@ namespace Framework.Constants
OwnHeirlooms = 189,
ArtifactPowerEarned = 190,
ArtifactTraitsUnlocked = 191,
OwnItemModifiedAppearance = 192,
HonorLevelReached = 194,
PrestigeReached = 195,
// 196 - CRITERIA_TYPE_REACH_LEVEL_2 or something
ActivelyReachLevel = 196,
// 197 - Order Hall Advancement related
OrderHallTalentLearned = 198,
AppearanceUnlockedBySlot = 199,
@@ -684,6 +685,7 @@ namespace Framework.Constants
GainParagonReputation = 206,
EarnHonorXp = 207,
RelicTalentUnlocked = 211,
ExpansionLevel = 212,
ReachAccountHonorLevel = 213,
HeartOfAzerothArtifactPowerEarned = 214,
HeartOfAzerothLevelReached = 215,
+33 -23
View File
@@ -106,8 +106,8 @@ namespace Game.Achievements
case CriteriaTypes.QuestAbandoned:
case CriteriaTypes.FlightPathsTaken:
case CriteriaTypes.AcceptedSummonings:
case CriteriaTypes.LootEpicItem:
case CriteriaTypes.ReceiveEpicItem:
case CriteriaTypes.LootAnyItem:
case CriteriaTypes.ObtainAnyItem:
case CriteriaTypes.Death:
case CriteriaTypes.CompleteDailyQuest:
case CriteriaTypes.CompleteBattleground:
@@ -139,7 +139,6 @@ namespace Game.Achievements
case CriteriaTypes.OnLogin:
case CriteriaTypes.PlaceGarrisonBuilding:
case CriteriaTypes.UpgradeGarrisonBuilding:
case CriteriaTypes.OwnBattlePetCount:
case CriteriaTypes.HonorLevelReached:
case CriteriaTypes.PrestigeReached:
case CriteriaTypes.CompleteQuestAccumulate:
@@ -258,11 +257,12 @@ namespace Game.Achievements
case CriteriaTypes.LearnSpell:
case CriteriaTypes.ExploreArea:
case CriteriaTypes.VisitBarberShop:
case CriteriaTypes.EquipEpicItem:
case CriteriaTypes.EquipItemInSlot:
case CriteriaTypes.EquipItem:
case CriteriaTypes.CompleteAchievement:
case CriteriaTypes.RecruitGarrisonFollower:
case CriteriaTypes.OwnBattlePet:
case CriteriaTypes.ActivelyReachLevel:
SetCriteriaProgress(criteria, 1, referencePlayer);
break;
case CriteriaTypes.BuyBankSlot:
@@ -352,6 +352,9 @@ namespace Game.Achievements
}
break;
}
case CriteriaTypes.OwnBattlePetCount:
SetCriteriaProgress(criteria, referencePlayer.GetSession().GetBattlePetMgr().GetPetUniqueSpeciesCount(), referencePlayer);
break;
case CriteriaTypes.ReachGuildLevel:
SetCriteriaProgress(criteria, miscValue1, referencePlayer);
break;
@@ -447,6 +450,8 @@ namespace Game.Achievements
case CriteriaTypes.MythicKeystoneCompleted:
case CriteriaTypes.ApplyConduit:
case CriteriaTypes.ConvertItemsToCurrency:
case CriteriaTypes.ExpansionLevel:
case CriteriaTypes.OwnItemModifiedAppearance:
break; // Not implemented yet :(
}
@@ -794,7 +799,7 @@ namespace Game.Achievements
case CriteriaTypes.GainReputation:
case CriteriaTypes.GainExaltedReputation:
case CriteriaTypes.VisitBarberShop:
case CriteriaTypes.EquipEpicItem:
case CriteriaTypes.EquipItemInSlot:
case CriteriaTypes.RollNeedOnLoot:
case CriteriaTypes.RollGreedOnLoot:
case CriteriaTypes.HkClass:
@@ -835,6 +840,7 @@ namespace Game.Achievements
case CriteriaTypes.OwnBattlePet:
case CriteriaTypes.HonorLevelReached:
case CriteriaTypes.PrestigeReached:
case CriteriaTypes.ActivelyReachLevel:
case CriteriaTypes.TransmogSetUnlocked:
return progress.Counter >= 1;
case CriteriaTypes.LearnSkillLevel:
@@ -939,11 +945,13 @@ namespace Game.Achievements
case CriteriaTypes.HighestHitDealt:
case CriteriaTypes.HighestHitReceived:
case CriteriaTypes.HonorableKill:
case CriteriaTypes.LootAnyItem:
case CriteriaTypes.LootMoney:
case CriteriaTypes.LoseDuel:
case CriteriaTypes.MoneyFromQuestReward:
case CriteriaTypes.MoneyFromVendors:
case CriteriaTypes.NumberOfTalentResets:
case CriteriaTypes.ObtainAnyItem:
case CriteriaTypes.QuestAbandoned:
case CriteriaTypes.ReachGuildLevel:
case CriteriaTypes.RollGreed:
@@ -974,6 +982,7 @@ namespace Game.Achievements
case CriteriaTypes.KnownFactions:
case CriteriaTypes.ReachLevel:
case CriteriaTypes.OnLogin:
case CriteriaTypes.OwnBattlePetCount:
break;
case CriteriaTypes.CompleteAchievement:
if (!RequiredAchievementSatisfied(criteria.Entry.Asset))
@@ -1118,8 +1127,9 @@ namespace Game.Achievements
if (miscValue1 != 0 && miscValue1 != criteria.Entry.Asset)
return false;
break;
case CriteriaTypes.EquipEpicItem:
// miscValue1 = itemSlot miscValue2 = itemid
case CriteriaTypes.EquipItemInSlot:
case CriteriaTypes.AppearanceUnlockedBySlot:
// miscValue1 = EquipmentSlot miscValue2 = itemid | itemModifiedAppearanceId
if (miscValue2 == 0 || miscValue1 != criteria.Entry.Asset)
return false;
break;
@@ -1164,16 +1174,6 @@ namespace Game.Achievements
if (miscValue1 != 0 && miscValue1 != criteria.Entry.Asset)
return false;
break;
case CriteriaTypes.LootEpicItem:
case CriteriaTypes.ReceiveEpicItem:
{
if (miscValue1 == 0)
return false;
ItemTemplate proto = Global.ObjectMgr.GetItemTemplate((uint)miscValue1);
if (proto == null || proto.GetQuality() < ItemQuality.Epic)
return false;
break;
}
case CriteriaTypes.HkClass:
if (miscValue1 == 0 || miscValue1 != criteria.Entry.Asset)
return false;
@@ -1187,6 +1187,7 @@ namespace Game.Achievements
return false;
break;
case CriteriaTypes.HonorableKillAtArea:
case CriteriaTypes.TravelledToArea:
if (miscValue1 == 0 || miscValue1 != criteria.Entry.Asset)
return false;
break;
@@ -1202,13 +1203,22 @@ namespace Game.Achievements
case CriteriaTypes.HighestTeamRating:
return false;
case CriteriaTypes.PlaceGarrisonBuilding:
case CriteriaTypes.ConstructGarrisonBuilding:
if (miscValue1 != criteria.Entry.Asset)
return false;
break;
case CriteriaTypes.TravelledToArea:
case CriteriaTypes.RecruitGarrisonFollower:
if (miscValue1 != criteria.Entry.Asset)
return false;
break;
case CriteriaTypes.TransmogSetUnlocked:
if (miscValue1 != criteria.Entry.Asset)
return false;
break;
case CriteriaTypes.ActivelyReachLevel:
if (miscValue1 == 0 || miscValue1 != criteria.Entry.Asset)
return false;
break;
default:
break;
}
@@ -3860,7 +3870,7 @@ namespace Game.Achievements
case CriteriaTypes.LootItem:
case CriteriaTypes.ExploreArea:
case CriteriaTypes.GainReputation:
case CriteriaTypes.EquipEpicItem:
case CriteriaTypes.EquipItemInSlot:
case CriteriaTypes.HkClass:
case CriteriaTypes.HkRace:
case CriteriaTypes.DoEmote:
@@ -4089,7 +4099,7 @@ namespace Game.Achievements
case CriteriaTypes.CastSpell2:
case CriteriaTypes.BeSpellTarget:
case CriteriaTypes.BeSpellTarget2:
case CriteriaTypes.EquipEpicItem:
case CriteriaTypes.EquipItemInSlot:
case CriteriaTypes.RollNeedOnLoot:
case CriteriaTypes.RollGreedOnLoot:
case CriteriaTypes.BgObjectiveCapture:
@@ -4099,8 +4109,8 @@ namespace Game.Achievements
case CriteriaTypes.GetKillingBlows:
case CriteriaTypes.ReachLevel:
case CriteriaTypes.OnLogin:
case CriteriaTypes.LootEpicItem:
case CriteriaTypes.ReceiveEpicItem:
case CriteriaTypes.LootAnyItem:
case CriteriaTypes.ObtainAnyItem:
break;
default:
if (DataType != CriteriaDataType.Script)
@@ -4402,7 +4412,7 @@ namespace Game.Achievements
{
Criteria entry = Global.CriteriaMgr.GetCriteria(criteriaId);
uint itemId = entry.Entry.Type == CriteriaTypes.EquipEpicItem ? miscValue2 : miscValue1;
uint itemId = entry.Entry.Type == CriteriaTypes.EquipItemInSlot ? miscValue2 : miscValue1;
ItemTemplate itemTemplate = Global.ObjectMgr.GetItemTemplate(itemId);
if (itemTemplate == null)
return false;
+6 -6
View File
@@ -1268,7 +1268,7 @@ namespace Game.Entities
if (item != null)
{
ItemAddedQuestCheck(itemId, count);
UpdateCriteria(CriteriaTypes.ReceiveEpicItem, itemId, count);
UpdateCriteria(CriteriaTypes.ObtainAnyItem, itemId, count);
UpdateCriteria(CriteriaTypes.OwnItem, itemId, 1);
item.AddItemFlag(ItemFieldFlags.NewItem);
@@ -1539,7 +1539,7 @@ namespace Game.Entities
if (pItem != null)
{
ItemAddedQuestCheck(item, 1);
UpdateCriteria(CriteriaTypes.ReceiveEpicItem, item, 1);
UpdateCriteria(CriteriaTypes.ObtainAnyItem, item, 1);
return EquipItem(pos, pItem, update);
}
@@ -1648,7 +1648,7 @@ namespace Game.Entities
// only for full equip instead adding to stack
UpdateCriteria(CriteriaTypes.EquipItem, pItem.GetEntry());
UpdateCriteria(CriteriaTypes.EquipEpicItem, slot, pItem.GetEntry());
UpdateCriteria(CriteriaTypes.EquipItemInSlot, slot, pItem.GetEntry());
UpdateAverageItemLevelEquipped();
@@ -1776,7 +1776,7 @@ namespace Game.Entities
CheckTitanGripPenalty();
UpdateCriteria(CriteriaTypes.EquipItem, pItem.GetEntry());
UpdateCriteria(CriteriaTypes.EquipEpicItem, slot, pItem.GetEntry());
UpdateCriteria(CriteriaTypes.EquipItemInSlot, slot, pItem.GetEntry());
}
}
public void SendEquipError(InventoryResult msg, Item item1 = null, Item item2 = null, uint itemId = 0)
@@ -4236,7 +4236,7 @@ namespace Game.Entities
{
// update quest counters
ItemAddedQuestCheck(pItem.GetEntry(), pItem.GetCount());
UpdateCriteria(CriteriaTypes.ReceiveEpicItem, pItem.GetEntry(), pItem.GetCount());
UpdateCriteria(CriteriaTypes.ObtainAnyItem, pItem.GetEntry(), pItem.GetCount());
// store item
Item pLastItem = StoreItem(dest, pItem, update);
@@ -5934,7 +5934,7 @@ namespace Game.Entities
SendNewItem(newitem, item.count, false, false, true);
UpdateCriteria(CriteriaTypes.LootItem, item.itemid, item.count);
UpdateCriteria(CriteriaTypes.LootType, item.itemid, item.count, (ulong)loot.loot_type);
UpdateCriteria(CriteriaTypes.LootEpicItem, item.itemid, item.count);
UpdateCriteria(CriteriaTypes.LootAnyItem, item.itemid, item.count);
}
else
aeResult.Add(newitem, item.count, loot.loot_type);
+1
View File
@@ -5259,6 +5259,7 @@ namespace Game.Entities
}
UpdateCriteria(CriteriaTypes.ReachLevel);
UpdateCriteria(CriteriaTypes.ActivelyReachLevel, level);
PushQuests();
+2 -2
View File
@@ -106,7 +106,7 @@ namespace Game
player.SendNewItem(resultValue.item, resultValue.count, false, false, true);
player.UpdateCriteria(CriteriaTypes.LootItem, resultValue.item.GetEntry(), resultValue.count);
player.UpdateCriteria(CriteriaTypes.LootType, resultValue.item.GetEntry(), resultValue.count, (ulong)resultValue.lootType);
player.UpdateCriteria(CriteriaTypes.LootEpicItem, resultValue.item.GetEntry(), resultValue.count);
player.UpdateCriteria(CriteriaTypes.LootAnyItem, resultValue.item.GetEntry(), resultValue.count);
}
}
}
@@ -553,7 +553,7 @@ namespace Game
target.SendNewItem(resultValue.item, resultValue.count, false, false, true);
target.UpdateCriteria(CriteriaTypes.LootItem, resultValue.item.GetEntry(), resultValue.count);
target.UpdateCriteria(CriteriaTypes.LootType, resultValue.item.GetEntry(), resultValue.count, (ulong)resultValue.lootType);
target.UpdateCriteria(CriteriaTypes.LootEpicItem, resultValue.item.GetEntry(), resultValue.count);
target.UpdateCriteria(CriteriaTypes.LootAnyItem, resultValue.item.GetEntry(), resultValue.count);
}
}