aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game/AchievementMgr.cpp12
-rw-r--r--src/game/AchievementMgr.h8
-rw-r--r--src/game/Player.h2
3 files changed, 20 insertions, 2 deletions
diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp
index 7080c5dcd0b..52674bd67e1 100644
--- a/src/game/AchievementMgr.cpp
+++ b/src/game/AchievementMgr.cpp
@@ -209,7 +209,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;
@@ -277,6 +285,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 4931ca302f6..fdcb4cc688e 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 6b2712b0aa9..0ca82c7116b 100644
--- a/src/game/Player.h
+++ b/src/game/Player.h
@@ -374,6 +374,8 @@ enum DrunkenState
DRUNKEN_SMASHED = 3
};
+#define MAX_DRUNKEN 4
+
enum PlayerFlags
{
PLAYER_FLAGS_GROUP_LEADER = 0x00000001,