diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/AchievementMgr.cpp | 12 | ||||
-rw-r--r-- | src/game/AchievementMgr.h | 10 | ||||
-rw-r--r-- | src/game/Item.cpp | 6 |
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: |