[10105] Condition CONDITION_ZONEID (4) extanded way work.

* Condition CONDITION_ZONEID renamed CONDITION_AREAID and now work also with subzone area ids
* Second arg of condition cna be 0 or 1 now in in case 1 check "not in area" case
* Also all condition related error output include condition id.
This commit is contained in:
VladimirMangos 2010-06-25 14:48:11 +04:00
parent 11372496e5
commit e203a235ba
3 changed files with 56 additions and 49 deletions

View file

@ -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);
@ -7482,12 +7486,13 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val
{
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)
{
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;
@ -7498,13 +7503,13 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val
ItemPrototype const *proto = ObjectMgr::GetItemPrototype(value1);
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)
{
sLog.outErrorDb("Item condition useless with count < 1, skipped");
sLog.outErrorDb("Item condition (%u) useless with count < 1, skipped", condition);
return false;
}
break;
@ -7514,22 +7519,23 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val
ItemPrototype const *proto = ObjectMgr::GetItemPrototype(value1);
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)
{
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;
@ -7539,7 +7545,7 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val
FactionEntry const* factionEntry = sFactionStore.LookupEntry(value1);
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);
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);
sLog.outErrorDb("Quest condition (%u) has useless data in value1 (%u)!", condition, value1);
if (value2)
sLog.outErrorDb("Quest condition has useless data in value2 (%u)!", value2);
sLog.outErrorDb("Quest condition (%u) has useless data in value2 (%u)!", condition, value2);
break;
}
case CONDITION_NO_AURA:
{
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)
{
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;
@ -7609,7 +7616,7 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val
GameEventMgr::GameEventDataMap const& events = sGameEventMgr.GetEventMap();
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;
}
@ -7664,13 +7671,13 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val
{
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;
}

View file

@ -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

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__
#define __REVISION_NR_H__
#define REVISION_NR "10104"
#define REVISION_NR "10105"
#endif // __REVISION_NR_H__