diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 9874aece3..dda243d7e 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -7383,8 +7383,12 @@ bool PlayerCondition::Meets(Player const * player) const return player->HasItemCount(value1, value2); case CONDITION_ITEM_EQUIPPED: return player->HasItemOrGemWithIdEquipped(value1,1); - case CONDITION_ZONEID: - return player->GetZoneId() == value1; + case CONDITION_AREAID: + { + uint32 zone, area; + player->GetZoneAndAreaId(zone,area); + return (zone == value1 || area == value1) == (value2 == 0); + } case CONDITION_REPUTATION_RANK: { FactionEntry const* faction = sFactionStore.LookupEntry(value1); @@ -7404,7 +7408,7 @@ bool PlayerCondition::Meets(Player const * player) const { Unit::AuraMap const& auras = player->GetAuras(); for(Unit::AuraMap::const_iterator itr = auras.begin(); itr != auras.end(); ++itr) - if((itr->second->GetSpellProto()->Attributes & 0x1000010) && itr->second->GetSpellProto()->SpellVisual[0]==3580) + if ((itr->second->GetSpellProto()->Attributes & 0x1000010) && itr->second->GetSpellProto()->SpellVisual[0]==3580) return true; return false; } @@ -7470,7 +7474,7 @@ bool PlayerCondition::Meets(Player const * player) const // Verification of condition values validity bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 value2) { - if( condition >= MAX_CONDITION) // Wrong condition type + if (condition >= MAX_CONDITION) // Wrong condition type { sLog.outErrorDb("Condition has bad type of %u, skipped ", condition ); return false; @@ -7480,14 +7484,15 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val { case CONDITION_AURA: { - if(!sSpellStore.LookupEntry(value1)) + if (!sSpellStore.LookupEntry(value1)) { - sLog.outErrorDb("Aura condition requires to have non existing spell (Id: %d), skipped", value1); + sLog.outErrorDb("Aura condition (%u) requires to have non existing spell (Id: %d), skipped", condition, value1); return false; } - if(value2 >= MAX_EFFECT_INDEX) + if (value2 >= MAX_EFFECT_INDEX) { - sLog.outErrorDb("Aura condition requires to have non existing effect index (%u) (must be 0..%u), skipped", value2, MAX_EFFECT_INDEX-1); + sLog.outErrorDb("Aura condition (%u) requires to have non existing effect index (%u) (must be 0..%u), skipped", + condition, value2, MAX_EFFECT_INDEX-1); return false; } break; @@ -7496,15 +7501,15 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val case CONDITION_NOITEM: { ItemPrototype const *proto = ObjectMgr::GetItemPrototype(value1); - if(!proto) + if (!proto) { - sLog.outErrorDb("Item condition requires to have non existing item (%u), skipped", value1); + sLog.outErrorDb("Item condition (%u) requires to have non existing item (%u), skipped", condition, value1); return false; } - if(value2 < 1) + if (value2 < 1) { - sLog.outErrorDb("Item condition useless with count < 1, skipped"); + sLog.outErrorDb("Item condition (%u) useless with count < 1, skipped", condition); return false; } break; @@ -7512,24 +7517,25 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val case CONDITION_ITEM_EQUIPPED: { ItemPrototype const *proto = ObjectMgr::GetItemPrototype(value1); - if(!proto) + if (!proto) { - sLog.outErrorDb("ItemEquipped condition requires to have non existing item (%u) equipped, skipped", value1); + sLog.outErrorDb("ItemEquipped condition (%u) requires to have non existing item (%u) equipped, skipped", condition, value1); return false; } break; } - case CONDITION_ZONEID: + case CONDITION_AREAID: { AreaTableEntry const* areaEntry = GetAreaEntryByAreaID(value1); - if(!areaEntry) + if (!areaEntry) { - sLog.outErrorDb("Zone condition requires to be in non existing area (%u), skipped", value1); + sLog.outErrorDb("Zone condition (%u) requires to be in non existing area (%u), skipped", condition, value1); return false; } - if(areaEntry->zone != 0) + + if (value2 > 1) { - sLog.outErrorDb("Zone condition requires to be in area (%u) which is a subzone but zone expected, skipped", value1); + sLog.outErrorDb("Zone condition (%u) has invalid argument %u (must be 0..1), skipped", condition, value2); return false; } break; @@ -7537,9 +7543,9 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val case CONDITION_REPUTATION_RANK: { FactionEntry const* factionEntry = sFactionStore.LookupEntry(value1); - if(!factionEntry) + if (!factionEntry) { - sLog.outErrorDb("Reputation condition requires to have reputation non existing faction (%u), skipped", value1); + sLog.outErrorDb("Reputation condition (%u) requires to have reputation non existing faction (%u), skipped", condition, value1); return false; } break; @@ -7548,7 +7554,7 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val { if (value1 != ALLIANCE && value1 != HORDE) { - sLog.outErrorDb("Team condition specifies unknown team (%u), skipped", value1); + sLog.outErrorDb("Team condition (%u) specifies unknown team (%u), skipped", condition, value1); return false; } break; @@ -7558,12 +7564,12 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val SkillLineEntry const *pSkill = sSkillLineStore.LookupEntry(value1); if (!pSkill) { - sLog.outErrorDb("Skill condition specifies non-existing skill (%u), skipped", value1); + sLog.outErrorDb("Skill condition (%u) specifies non-existing skill (%u), skipped", condition, value1); return false; } if (value2 < 1 || value2 > sWorld.GetConfigMaxSkillValue() ) { - sLog.outErrorDb("Skill condition specifies invalid skill value (%u), skipped", value2); + sLog.outErrorDb("Skill condition (%u) specifies invalid skill value (%u), skipped", condition, value2); return false; } break; @@ -7575,31 +7581,32 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val Quest const *Quest = sObjectMgr.GetQuestTemplate(value1); if (!Quest) { - sLog.outErrorDb("Quest condition specifies non-existing quest (%u), skipped", value1); + sLog.outErrorDb("Quest condition (%u) specifies non-existing quest (%u), skipped", condition, value1); return false; } - if(value2) - sLog.outErrorDb("Quest condition has useless data in value2 (%u)!", value2); + + if (value2) + sLog.outErrorDb("Quest condition (%u) has useless data in value2 (%u)!", condition, value2); break; } case CONDITION_AD_COMMISSION_AURA: { - if(value1) - sLog.outErrorDb("Quest condition has useless data in value1 (%u)!", value1); - if(value2) - sLog.outErrorDb("Quest condition has useless data in value2 (%u)!", value2); + if (value1) + sLog.outErrorDb("Quest condition (%u) has useless data in value1 (%u)!", condition, value1); + if (value2) + sLog.outErrorDb("Quest condition (%u) has useless data in value2 (%u)!", condition, value2); break; } case CONDITION_NO_AURA: { - if(!sSpellStore.LookupEntry(value1)) + if (!sSpellStore.LookupEntry(value1)) { - sLog.outErrorDb("Aura condition requires to have non existing spell (Id: %d), skipped", value1); + sLog.outErrorDb("Aura condition (%u) requires to have non existing spell (Id: %d), skipped", condition, value1); return false; } - if(value2 > MAX_EFFECT_INDEX) + if (value2 > MAX_EFFECT_INDEX) { - sLog.outErrorDb("Aura condition requires to have non existing effect index (%u) (must be 0..%u), skipped", value2, MAX_EFFECT_INDEX-1); + sLog.outErrorDb("Aura condition (%u) requires to have non existing effect index (%u) (must be 0..%u), skipped", condition, value2, MAX_EFFECT_INDEX-1); return false; } break; @@ -7607,9 +7614,9 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val case CONDITION_ACTIVE_EVENT: { GameEventMgr::GameEventDataMap const& events = sGameEventMgr.GetEventMap(); - if(value1 >=events.size() || !events[value1].isValid()) + if (value1 >=events.size() || !events[value1].isValid()) { - sLog.outErrorDb("Active event condition requires existed event id (%u), skipped", value1); + sLog.outErrorDb("Active event (%u) condition requires existed event id (%u), skipped", condition, value1); return false; } break; @@ -7618,7 +7625,7 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val { if (!value1 && !value2) { - sLog.outErrorDb("Area flag condition has both values like 0, skipped"); + sLog.outErrorDb("Area flag (%u) condition has both values like 0, skipped", condition); return false; } break; @@ -7627,19 +7634,19 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val { if (!value1 && !value2) { - sLog.outErrorDb("Race_class condition has both values like 0, skipped"); + sLog.outErrorDb("Race_class condition (%u) has both values like 0, skipped", condition); return false; } if (value1 && !(value1 & RACEMASK_ALL_PLAYABLE)) { - sLog.outErrorDb("Race_class condition has invalid player class %u, skipped", value1); + sLog.outErrorDb("Race_class condition (%u) has invalid player class %u, skipped", condition, value1); return false; } if (value2 && !(value2 & CLASSMASK_ALL_PLAYABLE)) { - sLog.outErrorDb("Race_class condition has invalid race mask %u, skipped", value2); + sLog.outErrorDb("Race_class condition (%u) has invalid race mask %u, skipped", condition, value2); return false; } break; @@ -7648,13 +7655,13 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val { if (!value1 || value1 > sWorld.getConfig(CONFIG_UINT32_MAX_PLAYER_LEVEL)) { - sLog.outErrorDb("Level condition has invalid level %u, skipped", value1); + sLog.outErrorDb("Level condition (%u) has invalid level %u, skipped", condition, value1); return false; } if (value2 > 2) { - sLog.outErrorDb("Level condition has invalid argument %u (must be 0..2), skipped", value2); + sLog.outErrorDb("Level condition (%u) has invalid argument %u (must be 0..2), skipped", condition, value2); return false; } @@ -7662,15 +7669,15 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val } case CONDITION_SPELL: { - if(!sSpellStore.LookupEntry(value1)) + if (!sSpellStore.LookupEntry(value1)) { - sLog.outErrorDb("Spell condition requires to have non existing spell (Id: %d), skipped", value1); + sLog.outErrorDb("Spell condition (%u) requires to have non existing spell (Id: %d), skipped", condition, value1); return false; } if (value2 > 1) { - sLog.outErrorDb("Spell condition has invalid argument %u (must be 0..1), skipped", value2); + sLog.outErrorDb("Spell condition (%u) has invalid argument %u (must be 0..1), skipped", condition, value2); return false; } @@ -7681,7 +7688,7 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val MapEntry const* mapEntry = sMapStore.LookupEntry(value1); if (!mapEntry || !mapEntry->IsDungeon()) { - sLog.outErrorDb("Instance script condition has not existed map id %u as first arg, skipped", value1); + sLog.outErrorDb("Instance script condition (%u) has not existed map id %u as first arg, skipped", condition, value1); return false; } diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index 7e51ba98e..c34ed115f 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -302,7 +302,7 @@ enum ConditionType CONDITION_AURA = 1, // spell_id effindex CONDITION_ITEM = 2, // item_id count CONDITION_ITEM_EQUIPPED = 3, // item_id 0 - CONDITION_ZONEID = 4, // zone_id 0 + CONDITION_AREAID = 4, // area_id 0, 1 (0: in (sub)area, 1: not in (sub)area) CONDITION_REPUTATION_RANK = 5, // faction_id min_rank CONDITION_TEAM = 6, // player_team 0, (469 - Alliance 67 - Horde) CONDITION_SKILL = 7, // skill_id skill_value diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 9e9c1e875..e3ab05ca3 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 "10104" + #define REVISION_NR "10105" #endif // __REVISION_NR_H__