diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index a2a6527a4..495949171 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -207,7 +207,15 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria) if(team.team != ALLIANCE && team.team != HORDE) { sLog.outErrorDb( "Table `achievement_criteria_data` (Entry: %u Type: %u) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_T_TEAM (%u) have unknown team in value1 (%u), ignore.", - criteria->ID, criteria->requiredType,dataType,gender.gender); + criteria->ID, criteria->requiredType,dataType,team.team); + return false; + } + return true; + case ACHIEVEMENT_CRITERIA_DATA_TYPE_S_DRUNK: + if(drunk.state >= MAX_DRUNKEN) + { + sLog.outErrorDb( "Table `achievement_criteria_data` (Entry: %u Type: %u) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_S_DRUNK (%u) have unknown drunken state in value1 (%u), ignore.", + criteria->ID, criteria->requiredType,dataType,drunk.state); return false; } return true; @@ -275,6 +283,8 @@ bool AchievementCriteriaData::Meets(Player const* source, Unit const* target, ui if (!target || target->GetTypeId() != TYPEID_PLAYER) return false; return ((Player*)target)->GetTeam() == team.team; + case ACHIEVEMENT_CRITERIA_DATA_TYPE_S_DRUNK: + return Player::GetDrunkenstateByValue(source->GetDrunkValue()) >= drunk.state; } return false; } diff --git a/src/game/AchievementMgr.h b/src/game/AchievementMgr.h index c5dec8c6d..5217cc9ad 100644 --- a/src/game/AchievementMgr.h +++ b/src/game/AchievementMgr.h @@ -57,9 +57,10 @@ enum AchievementCriteriaDataType ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_DIFFICULTY = 12,// difficulty normal/heroic difficulty for current event map ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_PLAYER_COUNT = 13,// count "with less than %u people in the zone" ACHIEVEMENT_CRITERIA_DATA_TYPE_T_TEAM = 14,// team HORDE(67), ALLIANCE(469) + ACHIEVEMENT_CRITERIA_DATA_TYPE_S_DRUNK = 15,// drunken_state 0 (enum DrunkenState) of player }; -#define MAX_ACHIEVEMENT_CRITERIA_DATA_TYPE 15 // maximum value in AchievementCriteriaDataType enum +#define MAX_ACHIEVEMENT_CRITERIA_DATA_TYPE 16 // maximum value in AchievementCriteriaDataType enum class Player; class Unit; @@ -134,6 +135,11 @@ struct AchievementCriteriaData { uint32 team; } team; + // ACHIEVEMENT_CRITERIA_DATA_TYPE_S_DRUNK = 15 + struct + { + uint32 state; + } drunk; // ... struct { diff --git a/src/game/Player.h b/src/game/Player.h index a4dcb371a..cf31c419e 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -371,6 +371,8 @@ enum DrunkenState DRUNKEN_SMASHED = 3 }; +#define MAX_DRUNKEN 4 + enum PlayerFlags { PLAYER_FLAGS_GROUP_LEADER = 0x00000001, diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 18b858dfb..fa9700512 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 "8001" + #define REVISION_NR "8002" #endif // __REVISION_NR_H__