mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
[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:
parent
11372496e5
commit
e203a235ba
3 changed files with 56 additions and 49 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue