Core/Conditions: Allow using guid (negative value) in SAI conditions

This commit is contained in:
Subv2112
2012-01-31 09:50:02 -05:00
parent 9d64dc1799
commit 29f8e4309e
2 changed files with 8 additions and 8 deletions
+5 -5
View File
@@ -344,17 +344,17 @@ ConditionList ConditionMgr::GetConditionsForVehicleSpell(uint32 creatureID, uint
return cond; return cond;
} }
ConditionList ConditionMgr::GetConditionsForSmartEvent(uint32 entry, uint32 eventId, uint32 sourceType) ConditionList ConditionMgr::GetConditionsForSmartEvent(int32 entryOrGuid, uint32 eventId, uint32 sourceType)
{ {
ConditionList cond; ConditionList cond;
SmartEventConditionContainer::const_iterator itr = SmartEventConditionStore.find(std::make_pair(entry, sourceType)); SmartEventConditionContainer::const_iterator itr = SmartEventConditionStore.find(std::make_pair(entryOrGuid, sourceType));
if (itr != SmartEventConditionStore.end()) if (itr != SmartEventConditionStore.end())
{ {
ConditionTypeContainer::const_iterator i = (*itr).second.find(eventId + 1); ConditionTypeContainer::const_iterator i = (*itr).second.find(eventId + 1);
if (i != (*itr).second.end()) if (i != (*itr).second.end())
{ {
cond = (*i).second; cond = (*i).second;
sLog->outDebug(LOG_FILTER_CONDITIONSYS, "GetConditionsForSmartEvent: found conditions for Smart Event entry %u event_id %u", entry, eventId); sLog->outDebug(LOG_FILTER_CONDITIONSYS, "GetConditionsForSmartEvent: found conditions for Smart Event entry or guid %d event_id %u", entryOrGuid, eventId);
} }
} }
return cond; return cond;
@@ -410,7 +410,7 @@ void ConditionMgr::LoadConditions(bool isReload)
Condition* cond = new Condition(); Condition* cond = new Condition();
int32 iSourceTypeOrReferenceId = fields[0].GetInt32(); int32 iSourceTypeOrReferenceId = fields[0].GetInt32();
cond->mSourceGroup = fields[1].GetUInt32(); cond->mSourceGroup = fields[1].GetUInt32();
cond->mSourceEntry = fields[2].GetUInt32(); cond->mSourceEntry = fields[2].GetInt32();
cond->mSourceId = fields[3].GetUInt32(); cond->mSourceId = fields[3].GetUInt32();
cond->mElseGroup = fields[4].GetUInt32(); cond->mElseGroup = fields[4].GetUInt32();
int32 iConditionTypeOrReference = fields[5].GetInt32(); int32 iConditionTypeOrReference = fields[5].GetInt32();
@@ -553,7 +553,7 @@ void ConditionMgr::LoadConditions(bool isReload)
case CONDITION_SOURCE_TYPE_SMART_EVENT: case CONDITION_SOURCE_TYPE_SMART_EVENT:
{ {
// If the entry does not exist, create a new list // If the entry does not exist, create a new list
std::pair<uint32, uint32> key = std::make_pair(cond->mSourceEntry, cond->mSourceId); std::pair<int32, uint32> key = std::make_pair(cond->mSourceEntry, cond->mSourceId);
if (SmartEventConditionStore.find(key) == SmartEventConditionStore.end()) if (SmartEventConditionStore.find(key) == SmartEventConditionStore.end())
{ {
ConditionTypeContainer cmap; ConditionTypeContainer cmap;
+3 -3
View File
@@ -104,7 +104,7 @@ struct Condition
{ {
ConditionSourceType mSourceType; //SourceTypeOrReferenceId ConditionSourceType mSourceType; //SourceTypeOrReferenceId
uint32 mSourceGroup; uint32 mSourceGroup;
uint32 mSourceEntry; int32 mSourceEntry;
uint32 mSourceId; // So far, only used in CONDITION_SOURCE_TYPE_SMART_EVENT uint32 mSourceId; // So far, only used in CONDITION_SOURCE_TYPE_SMART_EVENT
uint32 mElseGroup; uint32 mElseGroup;
ConditionType mConditionType; //ConditionTypeOrReference ConditionType mConditionType; //ConditionTypeOrReference
@@ -138,7 +138,7 @@ typedef std::list<Condition*> ConditionList;
typedef std::map<uint32, ConditionList> ConditionTypeContainer; typedef std::map<uint32, ConditionList> ConditionTypeContainer;
typedef std::map<ConditionSourceType, ConditionTypeContainer> ConditionContainer; typedef std::map<ConditionSourceType, ConditionTypeContainer> ConditionContainer;
typedef std::map<uint32, ConditionTypeContainer> VehicleSpellConditionContainer; typedef std::map<uint32, ConditionTypeContainer> VehicleSpellConditionContainer;
typedef std::map<std::pair<uint32, uint32 /*SAI source_type*/>, ConditionTypeContainer> SmartEventConditionContainer; typedef std::map<std::pair<int32, uint32 /*SAI source_type*/>, ConditionTypeContainer> SmartEventConditionContainer;
typedef std::map<uint32, ConditionList> ConditionReferenceContainer;//only used for references typedef std::map<uint32, ConditionList> ConditionReferenceContainer;//only used for references
@@ -157,7 +157,7 @@ class ConditionMgr
bool IsPlayerMeetToConditions(Player* player, ConditionList const& conditions, Unit* invoker = NULL); bool IsPlayerMeetToConditions(Player* player, ConditionList const& conditions, Unit* invoker = NULL);
ConditionList GetConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry); ConditionList GetConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry);
ConditionList GetConditionsForSmartEvent(uint32 entry, uint32 eventId, uint32 sourceType); ConditionList GetConditionsForSmartEvent(int32 entryOrGuid, uint32 eventId, uint32 sourceType);
ConditionList GetConditionsForVehicleSpell(uint32 creatureID, uint32 spellID); ConditionList GetConditionsForVehicleSpell(uint32 creatureID, uint32 spellID);
private: private: