[7974] Added two more achievement_criteria for achievement_criteria_data (T_LEVEL, T_GENDER)

Its required for implementing new cases of 110 achievement criteria in 3.1.x.
Ofc, this required DB support.

(cherry picked from commit f06f38ba5f355885ff36d6b7e35ce56a2fad5cd7)

Signed-off-by: VladimirMangos <vladimir@getmangos.com>
(cherry picked from commit 5347c3718b3e4c5d79e68a6d4581c449f0294af3)

Patch author name fixed.

Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
DerDyddye 2009-06-04 22:32:14 +02:00 committed by VladimirMangos
parent 4668323c83
commit 1f7a7a6518
3 changed files with 38 additions and 3 deletions

View file

@ -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;
}

View file

@ -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
{

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__
#define __REVISION_NR_H__
#define REVISION_NR "7973"
#define REVISION_NR "7974"
#endif // __REVISION_NR_H__