diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index b24bc8ad2..3915a7703 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -169,6 +169,22 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria) return false; } return true; + case ACHIEVEMENT_CRITERIA_DATA_TYPE_T_LEVEL: + if(level.minlevel < 0 || level.minlevel > STRONG_MAX_LEVEL) + { + sLog.outErrorDb( "Table `achievement_criteria_data` (Entry: %u Type: %u) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_T_LEVEL (%u) have wrong minlevel in value1 (%u), ignore.", + criteria->ID, criteria->requiredType,dataType,level.minlevel); + return false; + } + return true; + case ACHIEVEMENT_CRITERIA_DATA_TYPE_T_GENDER: + if(gender.gender > GENDER_NONE) + { + sLog.outErrorDb( "Table `achievement_criteria_data` (Entry: %u Type: %u) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_T_GENDER (%u) have wrong gender in value1 (%u), ignore.", + criteria->ID, criteria->requiredType,dataType,gender.gender); + return false; + } + return true; default: sLog.outErrorDb( "Table `achievement_criteria_data` (Entry: %u Type: %u) have data for not supported data type (%u), ignore.", criteria->ID, criteria->requiredType,dataType); return false; @@ -217,8 +233,15 @@ bool AchievementCriteriaData::Meets(Player const* source, Unit const* target, ui return target && target->HasAura(aura.spell_id,aura.effect_idx); case ACHIEVEMENT_CRITERIA_DATA_TYPE_VALUE: return miscvalue1 >= value.minvalue; + case ACHIEVEMENT_CRITERIA_DATA_TYPE_T_LEVEL: + if (!target) + return false; + return target->getLevel() >= level.minlevel; + case ACHIEVEMENT_CRITERIA_DATA_TYPE_T_GENDER: + if (!target) + return false; + return target->getGender() == gender.gender; } - return false; } diff --git a/src/game/AchievementMgr.h b/src/game/AchievementMgr.h index 14ca857ab..5976c4411 100644 --- a/src/game/AchievementMgr.h +++ b/src/game/AchievementMgr.h @@ -51,9 +51,11 @@ enum AchievementCriteriaDataType ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AREA = 6, // area id 0 ACHIEVEMENT_CRITERIA_DATA_TYPE_T_AURA = 7, // spell_id effect_idx ACHIEVEMENT_CRITERIA_DATA_TYPE_VALUE = 8, // minvalue value provided with achievement update must be not less that limit + ACHIEVEMENT_CRITERIA_DATA_TYPE_T_LEVEL = 9, // minlevel minlevel of target + ACHIEVEMENT_CRITERIA_DATA_TYPE_T_GENDER = 10,// gender 0=male; 1=female }; -#define MAX_ACHIEVEMENT_CRITERIA_DATA_TYPE 9 // maximum value in AchievementCriteriaDataType enum +#define MAX_ACHIEVEMENT_CRITERIA_DATA_TYPE 11 // maximum value in AchievementCriteriaDataType enum class Player; class Unit; @@ -101,6 +103,16 @@ struct AchievementCriteriaData { uint32 minvalue; } value; + // ACHIEVEMENT_CRITERIA_DATA_TYPE_T_LEVEL + struct + { + uint32 minlevel; + } level; + // ACHIEVEMENT_CRITERIA_DATA_TYPE_T_GENDER + struct + { + uint32 gender; + } gender; // ... struct { diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 2c684fd27..0aea1968f 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "7973" + #define REVISION_NR "7974" #endif // __REVISION_NR_H__