aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Conditions/ConditionMgr.cpp
diff options
context:
space:
mode:
authorQAston <qaston@gmail.com>2012-02-10 12:44:07 +0100
committerQAston <qaston@gmail.com>2012-02-10 12:46:01 +0100
commita7fc2586e765a39371d49bf3f2b0b81d9c9df69a (patch)
tree0d71b337b4a63c9b858467dc13cc8ee5131615e5 /src/server/game/Conditions/ConditionMgr.cpp
parent03b27179318f7371d47808589f10131aa0887bd5 (diff)
Core/Db/Conditions: Add NegativeCondition column to conditions table which allows to check whenever player does not meet condition specified by ConditionTypeOrReference column (ConditionTypeOrReference and ConditionValue3 set to reference id are not affected by the change)
Diffstat (limited to 'src/server/game/Conditions/ConditionMgr.cpp')
-rwxr-xr-xsrc/server/game/Conditions/ConditionMgr.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index 8562c66c29f..b05643529ec 100755
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -215,11 +215,14 @@ bool Condition::Meets(Player* player, Unit* invoker)
break;
}
+ 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->IsPlayerMeetToConditions(player, ref);
+ refMeets = sConditionMgr->IsPlayerMeetToConditions(player, ref, invoker);
}
else
refMeets = true;
@@ -391,7 +394,7 @@ void ConditionMgr::LoadConditions(bool isReload)
}
QueryResult result = WorldDatabase.Query("SELECT SourceTypeOrReferenceId, SourceGroup, SourceEntry, SourceId, ElseGroup, ConditionTypeOrReference, "
- " ConditionValue1, ConditionValue2, ConditionValue3, ErrorTextId, ScriptName FROM conditions");
+ " ConditionValue1, ConditionValue2, ConditionValue3, ErrorTextId, ScriptName, NegateCondition FROM conditions");
if (!result)
{
@@ -419,6 +422,7 @@ void ConditionMgr::LoadConditions(bool isReload)
cond->mConditionValue3 = fields[8].GetUInt32();
cond->ErrorTextd = fields[9].GetUInt32();
cond->mScriptId = sObjectMgr->GetScriptId(fields[10].GetCString());
+ cond->mNegativeCondition = fields[11].GetUInt8();
if (iConditionTypeOrReference >= 0)
cond->mConditionType = ConditionType(iConditionTypeOrReference);
@@ -443,6 +447,8 @@ void ConditionMgr::LoadConditions(bool isReload)
sLog->outErrorDb("Condition %s %i has useless data in value2 (%u)!", rowType, iSourceTypeOrReferenceId, cond->mConditionValue2);
if (cond->mConditionValue3)
sLog->outErrorDb("Condition %s %i has useless data in value3 (%u)!", rowType, iSourceTypeOrReferenceId, cond->mConditionValue3);
+ if (cond->mNegativeCondition)
+ sLog->outErrorDb("Condition %s %i has useless data in NegativeCondition (%u)!", rowType, iSourceTypeOrReferenceId, cond->mNegativeCondition);
if (cond->mSourceGroup && iSourceTypeOrReferenceId < 0)
sLog->outErrorDb("Condition %s %i has useless data in SourceGroup (%u)!", rowType, iSourceTypeOrReferenceId, cond->mSourceGroup);
if (cond->mSourceEntry && iSourceTypeOrReferenceId < 0)