[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);
@ -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;
}