From 94ddbdcc98278f25886b42acee9950c29090f552 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Sat, 23 May 2009 19:35:17 +0400 Subject: [PATCH] [7882] For achievement criterias data check ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_DEAD include target's team check. --- src/game/AchievementMgr.cpp | 11 ++++++++++- src/game/AchievementMgr.h | 7 ++++++- src/shared/revision_nr.h | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index 8f66ce7e3..8014061cf 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -128,6 +128,12 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria) } return true; case ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_DEAD: + if(player_dead.own_team_flag > 1) + { + sLog.outErrorDb( "Table `achievement_criteria_data` (Entry: %u Type: %u) for data type %s (%u) have wrong boolean value1 (%u).", + criteria->ID, criteria->requiredType,dataType,player_dead.own_team_flag); + return false; + } return true; case ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AURA: case ACHIEVEMENT_CRITERIA_DATA_TYPE_T_AURA: @@ -193,7 +199,10 @@ bool AchievementCriteriaData::Meets(Player const* source, Unit const* target) co return false; return target->GetHealth()*100 <= health.percent*target->GetMaxHealth(); case ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_DEAD: - return target && target->GetTypeId() == TYPEID_PLAYER && !target->isAlive() && ((Player*)target)->GetDeathTimer() != 0; + if (!target || target->GetTypeId() != TYPEID_PLAYER || target->isAlive() || ((Player*)target)->GetDeathTimer() == 0) + return false; + // flag set == must be same team, not set == different team + return (((Player*)target)->GetTeam() == source->GetTeam()) == (player_dead.own_team_flag != 0); case ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AURA: return source->HasAura(aura.spell_id,aura.effect_idx); case ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AREA: diff --git a/src/game/AchievementMgr.h b/src/game/AchievementMgr.h index e4e32e20a..0749beb16 100644 --- a/src/game/AchievementMgr.h +++ b/src/game/AchievementMgr.h @@ -46,7 +46,7 @@ enum AchievementCriteriaDataType ACHIEVEMENT_CRITERIA_DATA_TYPE_T_CREATURE = 1, // creature_id 0 ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_CLASS_RACE = 2, // class_id race_id ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_LESS_HEALTH= 3, // health_percent 0 - ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_DEAD = 4, // 0 0 not corpse (not released body) + ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_DEAD = 4, // own_team 0 not corpse (not released body), own_team==false if enemy team expected ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AURA = 5, // spell_id effect_idx ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AREA = 6, // area id 0 ACHIEVEMENT_CRITERIA_DATA_TYPE_T_AURA = 7, // spell_id effect_idx @@ -78,6 +78,11 @@ struct AchievementCriteriaData { uint32 percent; } health; + // ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_DEAD + struct + { + uint32 own_team_flag; + } player_dead; // ACHIEVEMENT_CRITERIA_DATA_TYPE_T_AURA // ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AURA struct diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 74eaf9964..32f21e079 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 "7881" + #define REVISION_NR "7882" #endif // __REVISION_NR_H__ -- 2.11.4.GIT