diff options
| -rw-r--r-- | sql/updates/world/2012_02_10_00_world_conditions.sql | 1 | ||||
| -rwxr-xr-x | src/server/game/Conditions/ConditionMgr.cpp | 10 | ||||
| -rwxr-xr-x | src/server/game/Conditions/ConditionMgr.h | 2 |
3 files changed, 11 insertions, 2 deletions
diff --git a/sql/updates/world/2012_02_10_00_world_conditions.sql b/sql/updates/world/2012_02_10_00_world_conditions.sql new file mode 100644 index 00000000000..508011609cf --- /dev/null +++ b/sql/updates/world/2012_02_10_00_world_conditions.sql @@ -0,0 +1 @@ +ALTER TABLE `conditions` ADD COLUMN `NegativeCondition` tinyint(3) UNSIGNED NOT NULL default '0' AFTER `ConditionValue3`; 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) diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index 1641642dd86..4e371997d73 100755 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -114,6 +114,7 @@ struct Condition uint32 ErrorTextd; uint32 mReferenceId; uint32 mScriptId; + bool mNegativeCondition; Condition() { @@ -128,6 +129,7 @@ struct Condition mReferenceId = 0; ErrorTextd = 0; mScriptId = 0; + mNegativeCondition = false; } bool Meets(Player* player, Unit* invoker = NULL); |
