mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-21 09:44:45 +01:00
Core/Criteria: Add all values of CriteriaFailEvent
This commit is contained in:
@@ -350,15 +350,15 @@ void PlayerAchievementMgr::SaveToDB(CharacterDatabaseTransaction& trans)
|
||||
}
|
||||
}
|
||||
|
||||
void PlayerAchievementMgr::ResetCriteria(CriteriaCondition condition, int32 failAsset, bool evenIfCriteriaComplete)
|
||||
void PlayerAchievementMgr::ResetCriteria(CriteriaFailEvent failEvent, int32 failAsset, bool evenIfCriteriaComplete)
|
||||
{
|
||||
TC_LOG_DEBUG("criteria.achievement", "PlayerAchievementMgr::ResetCriteria(%u, %d, %s)", condition, failAsset, evenIfCriteriaComplete ? "true" : "false");
|
||||
TC_LOG_DEBUG("criteria.achievement", "PlayerAchievementMgr::ResetCriteria(%u, %d, %s)", uint32(failEvent), failAsset, evenIfCriteriaComplete ? "true" : "false");
|
||||
|
||||
// disable for gamemasters with GM-mode enabled
|
||||
if (_owner->IsGameMaster())
|
||||
return;
|
||||
|
||||
if (CriteriaList const* achievementCriteriaList = sCriteriaMgr->GetCriteriaByFailEvent(condition, failAsset))
|
||||
if (CriteriaList const* achievementCriteriaList = sCriteriaMgr->GetCriteriaByFailEvent(failEvent, failAsset))
|
||||
{
|
||||
for (Criteria const* achievementCriteria : *achievementCriteriaList)
|
||||
{
|
||||
|
||||
@@ -83,7 +83,7 @@ public:
|
||||
void LoadFromDB(PreparedQueryResult achievementResult, PreparedQueryResult criteriaResult);
|
||||
void SaveToDB(CharacterDatabaseTransaction& trans);
|
||||
|
||||
void ResetCriteria(CriteriaCondition condition, int32 failAsset, bool evenIfCriteriaComplete = false);
|
||||
void ResetCriteria(CriteriaFailEvent failEvent, int32 failAsset, bool evenIfCriteriaComplete = false);
|
||||
|
||||
void SendAllData(Player const* receiver) const override;
|
||||
void SendAchievementInfo(Player* receiver, uint32 achievementId = 0) const;
|
||||
|
||||
@@ -1292,13 +1292,13 @@ bool CriteriaHandler::ConditionsSatisfied(Criteria const* criteria, Player* refe
|
||||
if (!criteria->Entry->FailEvent)
|
||||
return true;
|
||||
|
||||
switch (criteria->Entry->FailEvent)
|
||||
switch (CriteriaFailEvent(criteria->Entry->FailEvent))
|
||||
{
|
||||
case CRITERIA_CONDITION_BG_MAP:
|
||||
case CriteriaFailEvent::LeaveBattleground:
|
||||
if (!referencePlayer->InBattleground())
|
||||
return false;
|
||||
break;
|
||||
case CRITERIA_CONDITION_NOT_IN_GROUP:
|
||||
case CriteriaFailEvent::ModifyPartyStatus:
|
||||
if (referencePlayer->GetGroup())
|
||||
return false;
|
||||
break;
|
||||
@@ -1536,7 +1536,7 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis
|
||||
if (!miscValue1)
|
||||
return false;
|
||||
|
||||
if (criteria->Entry->FailEvent == CRITERIA_CONDITION_BG_MAP)
|
||||
if (CriteriaFailEvent(criteria->Entry->FailEvent) == CriteriaFailEvent::LeaveBattleground)
|
||||
{
|
||||
if (!referencePlayer->InBattleground())
|
||||
return false;
|
||||
@@ -3448,8 +3448,8 @@ void CriteriaMgr::LoadCriteriaList()
|
||||
criteriaEntry->Type + 1, CRITERIA_TYPE_TOTAL);
|
||||
ASSERT(criteriaEntry->StartEvent < CRITERIA_TIMED_TYPE_MAX, "CRITERIA_TYPE_TOTAL must be greater than or equal to %u but is currently equal to %u",
|
||||
criteriaEntry->StartEvent + 1, CRITERIA_TIMED_TYPE_MAX);
|
||||
ASSERT(criteriaEntry->FailEvent < CRITERIA_CONDITION_MAX, "CRITERIA_CONDITION_MAX must be greater than or equal to %u but is currently equal to %u",
|
||||
criteriaEntry->FailEvent + 1, CRITERIA_CONDITION_MAX);
|
||||
ASSERT(criteriaEntry->FailEvent < uint8(CriteriaFailEvent::Count), "CriteriaFailEvent::Count must be greater than or equal to %u but is currently equal to %u",
|
||||
criteriaEntry->FailEvent + 1, uint32(CriteriaFailEvent::Count));
|
||||
|
||||
auto treeItr = _criteriaTreeByCriteria.find(criteriaEntry->ID);
|
||||
if (treeItr == _criteriaTreeByCriteria.end())
|
||||
|
||||
@@ -350,10 +350,10 @@ public:
|
||||
return _criteriasByTimedType[type];
|
||||
}
|
||||
|
||||
CriteriaList const* GetCriteriaByFailEvent(CriteriaCondition condition, int32 asset)
|
||||
CriteriaList const* GetCriteriaByFailEvent(CriteriaFailEvent condition, int32 asset)
|
||||
{
|
||||
auto itr = _criteriasByFailEvent[condition].find(asset);
|
||||
return itr != _criteriasByFailEvent[condition].end() ? &itr->second : nullptr;
|
||||
auto itr = _criteriasByFailEvent[size_t(condition)].find(asset);
|
||||
return itr != _criteriasByFailEvent[size_t(condition)].end() ? &itr->second : nullptr;
|
||||
}
|
||||
|
||||
CriteriaDataSet const* GetCriteriaDataSet(Criteria const* Criteria) const
|
||||
@@ -413,7 +413,7 @@ private:
|
||||
CriteriaList _questObjectiveCriteriasByType[CRITERIA_TYPE_TOTAL];
|
||||
|
||||
CriteriaList _criteriasByTimedType[CRITERIA_TIMED_TYPE_MAX];
|
||||
std::unordered_map<int32, CriteriaList> _criteriasByFailEvent[CRITERIA_CONDITION_MAX];
|
||||
std::unordered_map<int32, CriteriaList> _criteriasByFailEvent[size_t(CriteriaFailEvent::Count)];
|
||||
};
|
||||
|
||||
#define sCriteriaMgr CriteriaMgr::Instance()
|
||||
|
||||
@@ -274,7 +274,7 @@ void Arena::EndBattleground(uint32 winner)
|
||||
loserArenaTeam->MemberLost(player, winnerMatchmakerRating, loserMatchmakerChange);
|
||||
|
||||
// Arena lost => reset the win_rated_arena having the "no_lose" condition
|
||||
player->ResetCriteria(CRITERIA_CONDITION_NO_LOSE, 0);
|
||||
player->ResetCriteria(CriteriaFailEvent::LoseRankedArenaMatchWithTeamSize, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -966,7 +966,7 @@ void Battleground::RemovePlayerAtLeave(ObjectGuid guid, bool Transport, bool Sen
|
||||
player->SetBGTeam(0);
|
||||
|
||||
// remove all criterias on bg leave
|
||||
player->ResetCriteria(CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
|
||||
player->ResetCriteria(CriteriaFailEvent::LeaveBattleground, GetMapId(), true);
|
||||
|
||||
if (Transport)
|
||||
player->TeleportToBGEntryPoint();
|
||||
@@ -1116,7 +1116,7 @@ void Battleground::AddPlayer(Player* player)
|
||||
}
|
||||
|
||||
// reset all map criterias on map enter
|
||||
player->ResetCriteria(CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
|
||||
player->ResetCriteria(CriteriaFailEvent::LeaveBattleground, GetMapId(), true);
|
||||
|
||||
// setup BG group membership
|
||||
PlayerAddedToBGCheckIfBGIsRunning(player);
|
||||
|
||||
@@ -244,24 +244,6 @@ enum class CorruptionEffectsFlag
|
||||
|
||||
DEFINE_ENUM_FLAG(CorruptionEffectsFlag);
|
||||
|
||||
enum CriteriaCondition
|
||||
{
|
||||
CRITERIA_CONDITION_NONE = 0,
|
||||
CRITERIA_CONDITION_NO_DEATH = 1, // reset progress on death
|
||||
CRITERIA_CONDITION_UNK2 = 2, // only used in "Complete a daily quest every day for five consecutive days"
|
||||
CRITERIA_CONDITION_BG_MAP = 3, // requires you to be on specific map, reset at change
|
||||
CRITERIA_CONDITION_NO_LOSE = 4, // only used in "Win 10 arenas without losing"
|
||||
CRITERIA_CONDITION_REMOVE_AURA = 5, // reset when this aura is removed
|
||||
CRITERIA_CONDITION_CAST_SPELL = 8, // reset when casting this spell
|
||||
CRITERIA_CONDITION_NO_SPELL_HIT = 9, // requires the player not to be hit by specific spell
|
||||
CRITERIA_CONDITION_NOT_IN_GROUP = 10, // requires the player not to be in group
|
||||
CRITERIA_CONDITION_LOSE_PET_BATTLE = 11, // reset when losing pet battle
|
||||
CRITERIA_CONDITION_UNK13 = 13, // unk
|
||||
CRITERIA_CONDITION_EVENT = 14,
|
||||
|
||||
CRITERIA_CONDITION_MAX
|
||||
};
|
||||
|
||||
enum CriteriaAdditionalCondition
|
||||
{
|
||||
CRITERIA_ADDITIONAL_CONDITION_SOURCE_DRUNK_VALUE = 1,
|
||||
@@ -577,6 +559,27 @@ enum CriteriaAdditionalCondition
|
||||
CRITERIA_ADDITIONAL_CONDITION_SOURCE_FLYING = 311,
|
||||
};
|
||||
|
||||
enum class CriteriaFailEvent : uint8
|
||||
{
|
||||
None = 0,
|
||||
Death = 1, // Death
|
||||
Hours24WithoutCompletingDailyQuest = 2, // 24 hours without completing a daily quest
|
||||
LeaveBattleground = 3, // Leave a battleground
|
||||
LoseRankedArenaMatchWithTeamSize = 4, // Lose a ranked arena match with team size {#Team Size}
|
||||
LoseAura = 5, // Lose aura "{Spell}"
|
||||
GainAura = 6, // Gain aura "{Spell}"
|
||||
GainAuraEffect = 7, // Gain aura effect "{SpellAuraNames.EnumID}"
|
||||
CastSpell = 8, // Cast spell "{Spell}"
|
||||
BeSpellTarget = 9, // Have spell "{Spell}" cast on you
|
||||
ModifyPartyStatus = 10, // Modify your party status
|
||||
LosePetBattle = 11, // Lose a pet battle
|
||||
BattlePetDies = 12, // Battle pet dies
|
||||
DailyQuestsCleared = 13, // Daily quests cleared
|
||||
SendEvent = 14, // Send event "{GameEvents}" (player-sent/instance only)
|
||||
|
||||
Count
|
||||
};
|
||||
|
||||
enum CriteriaFlags
|
||||
{
|
||||
CRITERIA_FLAG_SHOW_PROGRESS_BAR = 0x00000001, // Show progress as bar
|
||||
|
||||
@@ -1264,7 +1264,7 @@ void Player::setDeathState(DeathState s)
|
||||
UpdateCriteria(CRITERIA_TYPE_DEATH_IN_DUNGEON, 1);
|
||||
|
||||
// reset all death criterias
|
||||
ResetCriteria(CRITERIA_CONDITION_NO_DEATH, 0);
|
||||
ResetCriteria(CriteriaFailEvent::Death, 0);
|
||||
}
|
||||
|
||||
Unit::setDeathState(s);
|
||||
@@ -26523,7 +26523,7 @@ void Player::RemoveCriteriaTimer(CriteriaTimedTypes type, uint32 entry)
|
||||
m_achievementMgr->RemoveCriteriaTimer(type, entry);
|
||||
}
|
||||
|
||||
void Player::ResetCriteria(CriteriaCondition condition, int32 failAsset, bool evenIfCriteriaComplete /* = false*/)
|
||||
void Player::ResetCriteria(CriteriaFailEvent condition, int32 failAsset, bool evenIfCriteriaComplete /* = false*/)
|
||||
{
|
||||
m_achievementMgr->ResetCriteria(condition, failAsset, evenIfCriteriaComplete);
|
||||
m_questObjectiveCriteriaMgr->ResetCriteria(condition, failAsset, evenIfCriteriaComplete);
|
||||
|
||||
@@ -2480,7 +2480,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
|
||||
uint32 GetAchievementPoints() const;
|
||||
bool HasAchieved(uint32 achievementId) const;
|
||||
void ResetAchievements();
|
||||
void ResetCriteria(CriteriaCondition condition, int32 failAsset, bool evenIfCriteriaComplete = false);
|
||||
void ResetCriteria(CriteriaFailEvent condition, int32 failAsset, bool evenIfCriteriaComplete = false);
|
||||
void UpdateCriteria(CriteriaTypes type, uint64 miscValue1 = 0, uint64 miscValue2 = 0, uint64 miscValue3 = 0, Unit* unit = nullptr);
|
||||
void StartCriteriaTimer(CriteriaTimedTypes type, uint32 entry, uint32 timeLost = 0);
|
||||
void RemoveCriteriaTimer(CriteriaTimedTypes type, uint32 entry);
|
||||
|
||||
@@ -164,15 +164,15 @@ void QuestObjectiveCriteriaMgr::SaveToDB(CharacterDatabaseTransaction& trans)
|
||||
}
|
||||
}
|
||||
|
||||
void QuestObjectiveCriteriaMgr::ResetCriteria(CriteriaCondition condition, int32 failAsset, bool evenIfCriteriaComplete)
|
||||
void QuestObjectiveCriteriaMgr::ResetCriteria(CriteriaFailEvent failEvent, int32 failAsset, bool evenIfCriteriaComplete)
|
||||
{
|
||||
TC_LOG_DEBUG("criteria.quest", "QuestObjectiveCriteriaMgr::ResetCriteria(%u, %d, %s)", condition, failAsset, evenIfCriteriaComplete ? "true" : "false");
|
||||
TC_LOG_DEBUG("criteria.quest", "QuestObjectiveCriteriaMgr::ResetCriteria(%u, %d, %s)", uint32(failEvent), failAsset, evenIfCriteriaComplete ? "true" : "false");
|
||||
|
||||
// disable for gamemasters with GM-mode enabled
|
||||
if (_owner->IsGameMaster())
|
||||
return;
|
||||
|
||||
if (CriteriaList const* playerCriteriaList = sCriteriaMgr->GetCriteriaByFailEvent(condition, failAsset))
|
||||
if (CriteriaList const* playerCriteriaList = sCriteriaMgr->GetCriteriaByFailEvent(failEvent, failAsset))
|
||||
{
|
||||
for (Criteria const* playerCriteria : *playerCriteriaList)
|
||||
{
|
||||
|
||||
@@ -34,7 +34,7 @@ public:
|
||||
void LoadFromDB(PreparedQueryResult objectiveResult, PreparedQueryResult criteriaResult);
|
||||
void SaveToDB(CharacterDatabaseTransaction& trans);
|
||||
|
||||
void ResetCriteria(CriteriaCondition condition, int32 failAsset, bool evenIfCriteriaComplete = false);
|
||||
void ResetCriteria(CriteriaFailEvent failEvent, int32 failAsset, bool evenIfCriteriaComplete = false);
|
||||
void ResetCriteriaTree(uint32 criteriaTreeId);
|
||||
|
||||
void SendAllData(Player const* receiver) const override;
|
||||
|
||||
@@ -1358,7 +1358,7 @@ class spell_algalon_supermassive_fail : public SpellScriptLoader
|
||||
if (!GetHitPlayer())
|
||||
return;
|
||||
|
||||
GetHitPlayer()->ResetCriteria(CRITERIA_CONDITION_NO_SPELL_HIT, GetSpellInfo()->Id, true);
|
||||
GetHitPlayer()->ResetCriteria(CriteriaFailEvent::BeSpellTarget, GetSpellInfo()->Id, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
|
||||
Reference in New Issue
Block a user