mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 02:25:38 +01:00
Core/Db/Conditions: Don't use ConditionValue3 as a reference id for template conditions - ConditionTypeOrReference serves this purpose.
This commit is contained in:
@@ -37,7 +37,6 @@ bool Condition::Meets(WorldObject* object, WorldObject* invoker)
|
||||
sLog->outDebug(LOG_FILTER_CONDITIONSYS, "Condition object not found");
|
||||
return false;
|
||||
}
|
||||
uint32 refId = mConditionValue3;//value 3 can be a 'quick' reference
|
||||
bool condMeets = false;
|
||||
bool sendErrorMsg = false;
|
||||
switch (mConditionType)
|
||||
@@ -49,7 +48,6 @@ bool Condition::Meets(WorldObject* object, WorldObject* invoker)
|
||||
{
|
||||
if (Unit* unit = object->ToUnit())
|
||||
{
|
||||
refId = 0;
|
||||
if (!mConditionValue3)
|
||||
condMeets = unit->HasAuraEffect(mConditionValue1, mConditionValue2);
|
||||
else if (Player* player = unit->ToPlayer())
|
||||
@@ -207,8 +205,7 @@ bool Condition::Meets(WorldObject* object, WorldObject* invoker)
|
||||
break;
|
||||
case CONDITION_ITEM_TARGET:
|
||||
{
|
||||
condMeets = true;//handled in Item::IsTargetValidForItemUse
|
||||
refId = 0;//cant have references for now
|
||||
condMeets = true; //handled in Item::IsTargetValidForItemUse
|
||||
break;
|
||||
}
|
||||
case CONDITION_SPELL:
|
||||
@@ -271,7 +268,6 @@ bool Condition::Meets(WorldObject* object, WorldObject* invoker)
|
||||
}
|
||||
default:
|
||||
condMeets = false;
|
||||
refId = 0;
|
||||
break;
|
||||
}
|
||||
switch (mSourceType)
|
||||
@@ -287,15 +283,6 @@ bool Condition::Meets(WorldObject* object, WorldObject* invoker)
|
||||
if (mNegativeCondition)
|
||||
condMeets = !condMeets;
|
||||
|
||||
bool refMeets = false;
|
||||
if (condMeets && refId)//only have to check references if 'this' is met
|
||||
{
|
||||
ConditionList ref = sConditionMgr->GetConditionReferences(refId);
|
||||
refMeets = sConditionMgr->IsObjectMeetToConditions(object, ref, invoker);
|
||||
}
|
||||
else
|
||||
refMeets = true;
|
||||
|
||||
if (Player* player = object->ToPlayer())
|
||||
if (sendErrorMsg && ErrorTextd && (!condMeets || !refMeets))//send special error from DB
|
||||
player->m_ConditionErrorMsgId = ErrorTextd;
|
||||
@@ -1156,6 +1143,8 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
sLog->outErrorDb("Item condition has 0 set for item count in value2 (%u), skipped", cond->mConditionValue2);
|
||||
return false;
|
||||
}
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("Item condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_ITEM_EQUIPPED:
|
||||
@@ -1169,6 +1158,8 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
|
||||
if (cond->mConditionValue2)
|
||||
sLog->outErrorDb("ItemEquipped condition has useless data in value2 (%u)!", cond->mConditionValue2);
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("ItemEquipped condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_ZONEID:
|
||||
@@ -1176,18 +1167,20 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
AreaTableEntry const* areaEntry = GetAreaEntryByAreaID(cond->mConditionValue1);
|
||||
if (!areaEntry)
|
||||
{
|
||||
sLog->outErrorDb("Zone condition has non existing area (%u), skipped", cond->mConditionValue1);
|
||||
sLog->outErrorDb("ZoneID condition has non existing area (%u), skipped", cond->mConditionValue1);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (areaEntry->zone != 0)
|
||||
{
|
||||
sLog->outErrorDb("Zone condition requires to be in area (%u) which is a subzone but zone expected, skipped", cond->mConditionValue1);
|
||||
sLog->outErrorDb("ZoneID condition requires to be in area (%u) which is a subzone but zone expected, skipped", cond->mConditionValue1);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (cond->mConditionValue2)
|
||||
sLog->outErrorDb("Zone condition has useless data in value2 (%u)!", cond->mConditionValue2);
|
||||
sLog->outErrorDb("ZoneID condition has useless data in value2 (%u)!", cond->mConditionValue2);
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("ZoneID condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_REPUTATION_RANK:
|
||||
@@ -1198,6 +1191,8 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
sLog->outErrorDb("Reputation condition has non existing faction (%u), skipped", cond->mConditionValue1);
|
||||
return false;
|
||||
}
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("Reputation condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_TEAM:
|
||||
@@ -1210,6 +1205,8 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
|
||||
if (cond->mConditionValue2)
|
||||
sLog->outErrorDb("Team condition has useless data in value2 (%u)!", cond->mConditionValue2);
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("Team condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_SKILL:
|
||||
@@ -1226,6 +1223,8 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
sLog->outErrorDb("Skill condition specifies invalid skill value (%u), skipped", cond->mConditionValue2);
|
||||
return false;
|
||||
}
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("Skill condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_QUESTREWARDED:
|
||||
@@ -1241,21 +1240,25 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
|
||||
if (cond->mConditionValue2 > 1)
|
||||
sLog->outErrorDb("Quest condition has useless data in value2 (%u)!", cond->mConditionValue2);
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("Quest condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_NO_AURA:
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(cond->mConditionValue1))
|
||||
{
|
||||
sLog->outErrorDb("Aura condition has non existing spell (Id: %d), skipped", cond->mConditionValue1);
|
||||
sLog->outErrorDb("NoAura condition has non existing spell (Id: %d), skipped", cond->mConditionValue1);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (cond->mConditionValue2 > 2)
|
||||
{
|
||||
sLog->outErrorDb("Aura condition has non existing effect index (%u) in value2 (must be 0..2), skipped", cond->mConditionValue2);
|
||||
sLog->outErrorDb("NoAura condition has non existing effect index (%u) in value2 (must be 0..2), skipped", cond->mConditionValue2);
|
||||
return false;
|
||||
}
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("NoAura condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_ACTIVE_EVENT:
|
||||
@@ -1263,12 +1266,14 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
GameEventMgr::GameEventDataMap const& events = sGameEventMgr->GetEventMap();
|
||||
if (cond->mConditionValue1 >=events.size() || !events[cond->mConditionValue1].isValid())
|
||||
{
|
||||
sLog->outErrorDb("Active event condition has non existing event id (%u), skipped", cond->mConditionValue1);
|
||||
sLog->outErrorDb("ActiveEvent condition has non existing event id (%u), skipped", cond->mConditionValue1);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (cond->mConditionValue2)
|
||||
sLog->outErrorDb("Active event condition has useless data in value2 (%u)!", cond->mConditionValue2);
|
||||
sLog->outErrorDb("ActiveEvent condition has useless data in value2 (%u)!", cond->mConditionValue2);
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("ActiveEvent condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_ACHIEVEMENT:
|
||||
@@ -1276,12 +1281,14 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
AchievementEntry const* achievement = GetAchievementStore()->LookupEntry(cond->mConditionValue1);
|
||||
if (!achievement)
|
||||
{
|
||||
sLog->outErrorDb("Achivemen condition has non existing achivement id (%u), skipped", cond->mConditionValue1);
|
||||
sLog->outErrorDb("Achivement condition has non existing achivement id (%u), skipped", cond->mConditionValue1);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (cond->mConditionValue2)
|
||||
sLog->outErrorDb("Achivemen condition has useless data in value2 (%u)!", cond->mConditionValue2);
|
||||
sLog->outErrorDb("Achivement condition has useless data in value2 (%u)!", cond->mConditionValue2);
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("Achivement condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_CLASS:
|
||||
@@ -1294,6 +1301,8 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
|
||||
if (cond->mConditionValue2)
|
||||
sLog->outErrorDb("Class condition has useless data in value2 (%u)!", cond->mConditionValue2);
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("Class condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_RACE:
|
||||
@@ -1306,6 +1315,8 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
|
||||
if (cond->mConditionValue2)
|
||||
sLog->outErrorDb("Race condition has useless data in value2 (%u)!", cond->mConditionValue2);
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("Race condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_SPELL_SCRIPT_TARGET:
|
||||
@@ -1358,6 +1369,8 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
|
||||
if (cond->mConditionValue2)
|
||||
sLog->outErrorDb("CreatureTarget condition has useless data in value2 (%u)!", cond->mConditionValue2);
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("CreatureTarget condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_TARGET_HEALTH_BELOW_PCT:
|
||||
@@ -1370,6 +1383,8 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
|
||||
if (cond->mConditionValue2)
|
||||
sLog->outErrorDb("TargetHealthBelowPct condition has useless data in value2 (%u)!", cond->mConditionValue2);
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("TargetHealthBelowPct condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_TARGET_RANGE:
|
||||
@@ -1379,6 +1394,8 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
sLog->outErrorDb("TargetRange condition has max distance closer then min distance, skipped");
|
||||
return false;
|
||||
}
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("TargetRange condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_MAPID:
|
||||
@@ -1392,6 +1409,8 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
|
||||
if (cond->mConditionValue2)
|
||||
sLog->outErrorDb("Map condition has useless data in value2 (%u)!", cond->mConditionValue2);
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("Map condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_ITEM_TARGET:
|
||||
@@ -1422,6 +1441,8 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
|
||||
if (cond->mConditionValue2)
|
||||
sLog->outErrorDb("Spell condition has useless data in value2 (%u)!", cond->mConditionValue2);
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("Spell condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_NOITEM:
|
||||
@@ -1432,6 +1453,8 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
sLog->outErrorDb("NoItem condition has non existing item (%u), skipped", cond->mConditionValue1);
|
||||
return false;
|
||||
}
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("NoItem condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_LEVEL:
|
||||
@@ -1441,6 +1464,8 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
sLog->outErrorDb("Level condition has invalid option (%u), skipped", cond->mConditionValue2);
|
||||
return false;
|
||||
}
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("Level condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_DRUNKENSTATE:
|
||||
@@ -1450,6 +1475,13 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
sLog->outErrorDb("DrunkState condition has invalid state (%u), skipped", cond->mConditionValue1);
|
||||
return false;
|
||||
}
|
||||
if (cond->mConditionValue2)
|
||||
{
|
||||
sLog->outErrorDb("DrunkState condition has useless data in value2 (%u)!", cond->mConditionValue3);
|
||||
return false;
|
||||
}
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("DrunkState condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_NEAR_CREATURE:
|
||||
@@ -1459,6 +1491,8 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
sLog->outErrorDb("NearCreature condition has non existing creature template entry (%u), skipped", cond->mConditionValue1);
|
||||
return false;
|
||||
}
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("NearCreature condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_NEAR_GAMEOBJECT:
|
||||
@@ -1468,6 +1502,8 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
|
||||
sLog->outErrorDb("NearGameObject condition has non existing gameobject template entry (%u), skipped", cond->mConditionValue1);
|
||||
return false;
|
||||
}
|
||||
if (cond->mConditionValue3)
|
||||
sLog->outErrorDb("NearGameObject condition has useless data in value3 (%u)!", cond->mConditionValue3);
|
||||
break;
|
||||
}
|
||||
case CONDITION_AREAID:
|
||||
|
||||
@@ -30,35 +30,35 @@ enum ConditionType
|
||||
{ // value1 value2 value3
|
||||
CONDITION_NONE = 0, // 0 0 0 always true
|
||||
CONDITION_AURA = 1, // spell_id effindex use target? true if player (or target, if value3) has aura of spell_id with effect effindex
|
||||
CONDITION_ITEM = 2, // item_id count +referenceID true if has #count of item_ids
|
||||
CONDITION_ITEM_EQUIPPED = 3, // item_id 0 +referenceID true if has item_id equipped
|
||||
CONDITION_ZONEID = 4, // zone_id 0 +referenceID true if in zone_id
|
||||
CONDITION_REPUTATION_RANK = 5, // faction_id min_rank +referenceID true if has min_rank for faction_id
|
||||
CONDITION_TEAM = 6, // player_team 0, +referenceID 469 - Alliance, 67 - Horde)
|
||||
CONDITION_SKILL = 7, // skill_id skill_value +referenceID true if has skill_value for skill_id
|
||||
CONDITION_QUESTREWARDED = 8, // quest_id 0 +referenceID true if quest_id was rewarded before
|
||||
CONDITION_QUESTTAKEN = 9, // quest_id 0, +referenceID true while quest active
|
||||
CONDITION_DRUNKENSTATE = 10, // DrunkenState 0, +referenceID true if player is drunk enough
|
||||
CONDITION_NO_AURA = 11, // spell_id effindex +referenceID true if does not have aura of spell_id with effect effindex
|
||||
CONDITION_ACTIVE_EVENT = 12, // event_id 0 +referenceID true if event is active
|
||||
CONDITION_INSTANCE_DATA = 13, // entry data +referenceID true if data is set in current instance
|
||||
CONDITION_QUEST_NONE = 14, // quest_id 0 +referenceID true if doesn't have quest saved
|
||||
CONDITION_CLASS = 15, // class 0 +referenceID true if player's class is equal to class
|
||||
CONDITION_RACE = 16, // race 0 +referenceID true if player's race is equal to race
|
||||
CONDITION_ACHIEVEMENT = 17, // achievement_id 0 +referenceID true if achievement is complete
|
||||
CONDITION_SPELL_SCRIPT_TARGET = 18, // SpellScriptTargetType, TargetEntry, 0
|
||||
CONDITION_CREATURE_TARGET = 19, // creature entry 0 +referenceID true if current target is creature with value1 entry
|
||||
CONDITION_TARGET_HEALTH_BELOW_PCT = 20, // 0-100 0 +referenceID true if target's health is below value1 percent, false if over or no target
|
||||
CONDITION_TARGET_RANGE = 21, // minDistance maxDist +referenceID true if target is closer then minDist and further then maxDist or if max is 0 then max dist is infinit
|
||||
CONDITION_MAPID = 22, // map_id 0 +referenceID true if in map_id
|
||||
CONDITION_AREAID = 23, // area_id 0 +referenceID true if in area_id
|
||||
CONDITION_ITEM = 2, // item_id count 0 true if has #count of item_ids
|
||||
CONDITION_ITEM_EQUIPPED = 3, // item_id 0 0 true if has item_id equipped
|
||||
CONDITION_ZONEID = 4, // zone_id 0 0 true if in zone_id
|
||||
CONDITION_REPUTATION_RANK = 5, // faction_id min_rank 0 true if has min_rank for faction_id
|
||||
CONDITION_TEAM = 6, // player_team 0, 0 469 - Alliance, 67 - Horde)
|
||||
CONDITION_SKILL = 7, // skill_id skill_value 0 true if has skill_value for skill_id
|
||||
CONDITION_QUESTREWARDED = 8, // quest_id 0 0 true if quest_id was rewarded before
|
||||
CONDITION_QUESTTAKEN = 9, // quest_id 0, 0 true while quest active
|
||||
CONDITION_DRUNKENSTATE = 10, // DrunkenState 0, 0 true if player is drunk enough
|
||||
CONDITION_NO_AURA = 11, // spell_id effindex 0 true if does not have aura of spell_id with effect effindex
|
||||
CONDITION_ACTIVE_EVENT = 12, // event_id 0 0 true if event is active
|
||||
CONDITION_INSTANCE_DATA = 13, // entry data 0 true if data is set in current instance
|
||||
CONDITION_QUEST_NONE = 14, // quest_id 0 0 true if doesn't have quest saved
|
||||
CONDITION_CLASS = 15, // class 0 0 true if player's class is equal to class
|
||||
CONDITION_RACE = 16, // race 0 0 true if player's race is equal to race
|
||||
CONDITION_ACHIEVEMENT = 17, // achievement_id 0 0 true if achievement is complete
|
||||
CONDITION_SPELL_SCRIPT_TARGET = 18, // SpellScriptTargetType, TargetEntry, 0
|
||||
CONDITION_CREATURE_TARGET = 19, // creature entry 0 0 true if current target is creature with value1 entry
|
||||
CONDITION_TARGET_HEALTH_BELOW_PCT = 20, // 0-100 0 0 true if target's health is below value1 percent, false if over or no target
|
||||
CONDITION_TARGET_RANGE = 21, // minDistance maxDist 0 true if target is closer then minDist and further then maxDist or if max is 0 then max dist is infinit
|
||||
CONDITION_MAPID = 22, // map_id 0 0 true if in map_id
|
||||
CONDITION_AREAID = 23, // area_id 0 0 true if in area_id
|
||||
CONDITION_ITEM_TARGET = 24, // ItemRequiredTargetType, TargetEntry, 0
|
||||
CONDITION_SPELL = 25, // spell_id bool +referenceID bool 1 for true 0 for false
|
||||
CONDITION_NOITEM = 26, // item_id bank +referenceID true if player does not have any of the item (if 'bank' is set it searches in bank slots too)
|
||||
CONDITION_LEVEL = 27, // level opt +referenceID true if player's level is equal to param1 (param2 can modify the statement)
|
||||
CONDITION_QUEST_COMPLETE = 28, // quest_id 0 +referenceID true if player has quest_id with all objectives complete, but not yet rewarded
|
||||
CONDITION_NEAR_CREATURE = 29, // creature entry distance +referenceID true if there is a creature of entry in range
|
||||
CONDITION_NEAR_GAMEOBJECT = 30, // gameobject entry distance +referenceID true if there is a gameobject of entry in range
|
||||
CONDITION_SPELL = 25, // spell_id bool 0 bool 1 for true 0 for false
|
||||
CONDITION_NOITEM = 26, // item_id bank 0 true if player does not have any of the item (if 'bank' is set it searches in bank slots too)
|
||||
CONDITION_LEVEL = 27, // level opt 0 true if player's level is equal to param1 (param2 can modify the statement)
|
||||
CONDITION_QUEST_COMPLETE = 28, // quest_id 0 0 true if player has quest_id with all objectives complete, but not yet rewarded
|
||||
CONDITION_NEAR_CREATURE = 29, // creature entry distance 0 true if there is a creature of entry in range
|
||||
CONDITION_NEAR_GAMEOBJECT = 30, // gameobject entry distance 0 true if there is a gameobject of entry in range
|
||||
CONDITION_MAX = 31 // MAX
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user