aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormegamage <none@none>2009-06-07 20:52:00 -0500
committermegamage <none@none>2009-06-07 20:52:00 -0500
commit5a2745caacb0f26f3c78db433d4226a3116538da (patch)
treec352fa7da309db0a11d0153ba58196c984028663
parent9ef844d23d183c951d53e21c8cbe091f1133386b (diff)
[7974] Added two more achievement_criteria for `achievement_criteria_data` (T_LEVEL, T_GENDER) Author: DerDyddye
Its required for implementing new cases of 110 achievement criteria in 3.1.x. Ofc, this required DB support. --HG-- branch : trunk
-rw-r--r--src/game/AchievementMgr.cpp25
-rw-r--r--src/game/AchievementMgr.h14
2 files changed, 37 insertions, 2 deletions
diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp
index c6ffd223e98..c2f46fff39f 100644
--- a/src/game/AchievementMgr.cpp
+++ b/src/game/AchievementMgr.cpp
@@ -171,6 +171,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;
@@ -219,8 +235,15 @@ bool AchievementCriteriaData::Meets(Player const* source, Unit const* target, ui
return target && target->HasAuraEffect(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 3dd87737960..ce901613622 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
{