diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 582cf9b40..2322d3fbf 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -7253,6 +7253,10 @@ bool PlayerCondition::Meets(Player const * player) const } return false; } + case CONDITION_RACE_CLASS: + if ((!value1 || (player->getRaceMask() & value1)) && (!value2 || (player->getClassMask() & value2))) + return true; + return false; default: return false; } @@ -7406,6 +7410,27 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val } break; } + case CONDITION_RACE_CLASS: + { + if (!value1 && !value2) + { + sLog.outErrorDb("Race_class condition has both values like 0, skipped"); + return false; + } + + if (value1 && !(value1 & RACEMASK_ALL_PLAYABLE)) + { + sLog.outErrorDb("Race_class condition has invalid player class %u, skipped", value1); + return false; + } + + if (value2 && !(value2 & CLASSMASK_ALL_PLAYABLE)) + { + sLog.outErrorDb("Race_class condition has invalid race mask %u, skipped", value2); + return false; + } + break; + } case CONDITION_NONE: break; } diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index 83f268b9d..0286236be 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -283,11 +283,12 @@ enum ConditionType CONDITION_QUESTTAKEN = 9, // quest_id 0, for condition true while quest active. CONDITION_AD_COMMISSION_AURA = 10, // 0 0, for condition true while one from AD commission aura active CONDITION_NO_AURA = 11, // spell_id effindex - CONDITION_ACTIVE_EVENT = 12, // event_id - CONDITION_AREA_FLAG = 13 // area_flag area_flag_not + CONDITION_ACTIVE_EVENT = 12, // event_id 0 + CONDITION_AREA_FLAG = 13, // area_flag area_flag_not + CONDITION_RACE_CLASS = 14, // race_mask class_mask }; -#define MAX_CONDITION 14 // maximum value in ConditionType enum +#define MAX_CONDITION 15 // maximum value in ConditionType enum struct PlayerCondition { diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index c130a1a95..f7d1e89b5 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 "8975" + #define REVISION_NR "8976" #endif // __REVISION_NR_H__