aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/AchievementMgr.cpp12
-rw-r--r--src/game/AchievementMgr.h10
-rw-r--r--src/game/Item.cpp6
3 files changed, 26 insertions, 2 deletions
diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp
index 75588c7094a..7080c5dcd0b 100644
--- a/src/game/AchievementMgr.cpp
+++ b/src/game/AchievementMgr.cpp
@@ -205,6 +205,14 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria)
return false;
}
return true;
+ case ACHIEVEMENT_CRITERIA_DATA_TYPE_T_TEAM:
+ 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);
+ 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;
@@ -265,6 +273,10 @@ bool AchievementCriteriaData::Meets(Player const* source, Unit const* target, ui
return source->GetMap()->GetSpawnMode()==difficalty.difficalty;
case ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_PLAYER_COUNT:
return source->GetMap()->GetPlayersCountExceptGMs() <= map_players.maxcount;
+ case ACHIEVEMENT_CRITERIA_DATA_TYPE_T_TEAM:
+ if (!target || target->GetTypeId() != TYPEID_PLAYER)
+ return false;
+ return ((Player*)target)->GetTeam() == team.team;
}
return false;
}
diff --git a/src/game/AchievementMgr.h b/src/game/AchievementMgr.h
index 5cf5fe46a60..4931ca302f6 100644
--- a/src/game/AchievementMgr.h
+++ b/src/game/AchievementMgr.h
@@ -53,12 +53,13 @@ enum AchievementCriteriaDataType
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
- ACHIEVEMENT_CRITERIA_DATA_TYPE_DISABLED = 11,// used to prevent achievement createria complete if not all requirement implemented and listed in table
+ ACHIEVEMENT_CRITERIA_DATA_TYPE_DISABLED = 11,// used to prevent achievement creteria complete if not all requirement implemented and listed in table
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)
};
-#define MAX_ACHIEVEMENT_CRITERIA_DATA_TYPE 14 // maximum value in AchievementCriteriaDataType enum
+#define MAX_ACHIEVEMENT_CRITERIA_DATA_TYPE 15 // maximum value in AchievementCriteriaDataType enum
class Player;
class Unit;
@@ -128,6 +129,11 @@ struct AchievementCriteriaData
{
uint32 maxcount;
} map_players;
+ // ACHIEVEMENT_CRITERIA_DATA_TYPE_T_TEAM = 14
+ struct
+ {
+ uint32 team;
+ } team;
// ...
struct
{
diff --git a/src/game/Item.cpp b/src/game/Item.cpp
index 06268f2fef7..3be555cbaba 100644
--- a/src/game/Item.cpp
+++ b/src/game/Item.cpp
@@ -1002,6 +1002,12 @@ bool Item::IsBindedNotWith( Player const* player ) const
bool ItemRequiredTarget::IsFitToRequirements( Unit* pUnitTarget ) const
{
+ if(pUnitTarget->GetTypeId() != TYPEID_UNIT)
+ return false;
+
+ if(pUnitTarget->GetEntry() != m_uiTargetEntry)
+ return false;
+
switch(m_uiType)
{
case ITEM_TARGET_TYPE_CREATURE: