diff options
| author | Shauren <shauren.trinity@gmail.com> | 2015-10-25 13:20:28 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2015-10-25 13:20:28 +0100 |
| commit | b09e63e9debfab49e635a591339294dd96b09d95 (patch) | |
| tree | 5450c7996291b9f544f3830f06c50ef358a3af65 /src/server/game/Entities | |
| parent | 2cce998e905bed0873fbf0b3da981857c139e5d5 (diff) | |
Core/Conditions: Optimizations part 3 removed copying condition containers all over the place
Diffstat (limited to 'src/server/game/Entities')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 39 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 8 |
2 files changed, 19 insertions, 28 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 99ddc49641c..21b7b4b84a9 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15047,8 +15047,7 @@ bool Player::SatisfyQuestStatus(Quest const* qInfo, bool msg) bool Player::SatisfyQuestConditions(Quest const* qInfo, bool msg) { - ConditionContainer conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_QUEST_ACCEPT, qInfo->GetQuestId()); - if (!sConditionMgr->IsObjectMeetToConditions(this, conditions)) + if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_QUEST_ACCEPT, qInfo->GetQuestId(), this)) { if (msg) { @@ -15449,8 +15448,7 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object* questgiver) if (!quest) continue; - ConditionContainer conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId()); - if (!sConditionMgr->IsObjectMeetToConditions(this, conditions)) + if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId(), this)) continue; QuestStatus status = GetQuestStatus(questId); @@ -15477,8 +15475,7 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object* questgiver) if (!quest) continue; - ConditionContainer conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId()); - if (!sConditionMgr->IsObjectMeetToConditions(this, conditions)) + if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId(), this)) continue; QuestStatus status = GetQuestStatus(questId); @@ -20373,8 +20370,7 @@ void Player::VehicleSpellInitialize() continue; } - ConditionContainer conditions = sConditionMgr->GetConditionsForVehicleSpell(vehicle->GetEntry(), spellId); - if (!sConditionMgr->IsObjectMeetToConditions(this, vehicle, conditions)) + if (!sConditionMgr->IsObjectMeetingVehicleSpellConditions(vehicle->GetEntry(), spellId, this, vehicle)) { TC_LOG_DEBUG("condition", "VehicleSpellInitialize: conditions not met for Vehicle entry %u spell %u", vehicle->ToCreature()->GetEntry(), spellId); data << uint16(0) << uint8(0) << uint8(i+8); @@ -21365,8 +21361,7 @@ bool Player::BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uin return false; } - ConditionContainer conditions = sConditionMgr->GetConditionsForNpcVendorEvent(creature->GetEntry(), item); - if (!sConditionMgr->IsObjectMeetToConditions(this, creature, conditions)) + if (!sConditionMgr->IsObjectMeetingVendorItemConditions(creature->GetEntry(), item, this, creature)) { TC_LOG_DEBUG("condition", "BuyItemFromVendor: conditions not met for creature entry %u item %u", creature->GetEntry(), item); SendBuyError(BUY_ERR_CANT_FIND_ITEM, creature, item, 0); @@ -23305,16 +23300,18 @@ void Player::UpdateForQuestWorldObjects() { //! This code doesn't look right, but it was logically converted to condition system to do the exact //! same thing it did before. It definitely needs to be overlooked for intended functionality. - ConditionContainer conds = sConditionMgr->GetConditionsForSpellClickEvent(obj->GetEntry(), _itr->second.spellId); - bool buildUpdateBlock = false; - for (ConditionContainer::const_iterator jtr = conds.begin(); jtr != conds.end() && !buildUpdateBlock; ++jtr) - if ((*jtr)->ConditionType == CONDITION_QUESTREWARDED || (*jtr)->ConditionType == CONDITION_QUESTTAKEN) - buildUpdateBlock = true; - - if (buildUpdateBlock) + if (ConditionContainer const* conds = sConditionMgr->GetConditionsForSpellClickEvent(obj->GetEntry(), _itr->second.spellId)) { - obj->BuildValuesUpdateBlockForPlayer(&udata, this); - break; + bool buildUpdateBlock = false; + for (ConditionContainer::const_iterator jtr = conds->begin(); jtr != conds->end() && !buildUpdateBlock; ++jtr) + if ((*jtr)->ConditionType == CONDITION_QUESTREWARDED || (*jtr)->ConditionType == CONDITION_QUESTTAKEN) + buildUpdateBlock = true; + + if (buildUpdateBlock) + { + obj->BuildValuesUpdateBlockForPlayer(&udata, this); + break; + } } } } @@ -25075,9 +25072,7 @@ bool Player::CanSeeSpellClickOn(Creature const* c) const if (!itr->second.IsFitToRequirements(this, c)) return false; - ConditionContainer conds = sConditionMgr->GetConditionsForSpellClickEvent(c->GetEntry(), itr->second.spellId); - ConditionSourceInfo info = ConditionSourceInfo(const_cast<Player*>(this), const_cast<Creature*>(c)); - if (sConditionMgr->IsObjectMeetToConditions(info, conds)) + if (sConditionMgr->IsObjectMeetingSpellClickConditions(c->GetEntry(), itr->second.spellId, const_cast<Player*>(this), const_cast<Creature*>(c))) return true; } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index f14d6a73226..16fa3cd7f06 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -12303,9 +12303,7 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u continue; // do checks using conditions table - ConditionContainer conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_SPELL_PROC, spellProto->Id); - ConditionSourceInfo condInfo = ConditionSourceInfo(eventInfo.GetActor(), eventInfo.GetActionTarget()); - if (!sConditionMgr->IsObjectMeetToConditions(condInfo, conditions)) + if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_SPELL_PROC, spellProto->Id, eventInfo.GetActor(), eventInfo.GetActionTarget())) continue; // AuraScript Hook @@ -15210,9 +15208,7 @@ bool Unit::HandleSpellClick(Unit* clicker, int8 seatId) continue; //! Check database conditions - ConditionContainer conds = sConditionMgr->GetConditionsForSpellClickEvent(spellClickEntry, itr->second.spellId); - ConditionSourceInfo info = ConditionSourceInfo(clicker, this); - if (!sConditionMgr->IsObjectMeetToConditions(info, conds)) + if (!sConditionMgr->IsObjectMeetingSpellClickConditions(spellClickEntry, itr->second.spellId, clicker, this)) continue; Unit* caster = (itr->second.castFlags & NPC_CLICK_CAST_CASTER_CLICKER) ? clicker : this; |
