diff options
| author | n0n4m3 <none@none> | 2010-01-16 19:41:04 +0300 |
|---|---|---|
| committer | n0n4m3 <none@none> | 2010-01-16 19:41:04 +0300 |
| commit | a29727e4238d0a02dab80fb7489af59848c21a03 (patch) | |
| tree | 31ed989e94573cf52b6783567b7ba0a07e2f2d07 /src | |
| parent | 1557f9db9b0e0e2bc5567a5ba2620b6d563f2a8f (diff) | |
Fixed problem with not setAchievementCriteriaDataSet::criteria_id, Add achievement creteria requirements forACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET*, by GriffonHeart.
--HG--
branch : trunk
Diffstat (limited to 'src')
| -rw-r--r-- | src/game/AchievementMgr.cpp | 14 | ||||
| -rw-r--r-- | src/game/AchievementMgr.h | 2 |
2 files changed, 15 insertions, 1 deletions
diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index 7a905055de1..17818f9dfa3 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -93,6 +93,8 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria) case ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL: case ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE: case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2: + case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET: + case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2: break; default: sLog.outErrorDb( "Table `achievement_criteria_data` have data for not supported criteria type (Entry: %u Type: %u), ignore.", criteria->ID, criteria->requiredType); @@ -1033,10 +1035,21 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui } case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET: case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2: + { if (!miscvalue1 || miscvalue1 != achievementCriteria->be_spell_target.spellID) continue; + + // those requirements couldn't be found in the dbc + AchievementCriteriaDataSet const* data = achievementmgr.GetCriteriaDataSet(achievementCriteria); + if(!data) + continue; + + if(!data->Meets(GetPlayer(),unit)) + continue; + SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE); break; + } case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL: case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2: { @@ -1962,6 +1975,7 @@ void AchievementGlobalMgr::LoadAchievementCriteriaData() // this will allocate empty data set storage AchievementCriteriaDataSet& dataSet = m_criteriaDataMap[criteria_id]; + dataSet.SetCriteriaId(criteria_id); if (data.dataType == ACHIEVEMENT_CRITERIA_DATA_TYPE_DISABLED) ++disabled_count; diff --git a/src/game/AchievementMgr.h b/src/game/AchievementMgr.h index 947bfb00305..4e7ce2495a0 100644 --- a/src/game/AchievementMgr.h +++ b/src/game/AchievementMgr.h @@ -181,10 +181,10 @@ struct AchievementCriteriaData struct AchievementCriteriaDataSet { AchievementCriteriaDataSet() : criteria_id(0) {} - explicit AchievementCriteriaDataSet(uint32 id) : criteria_id(id) {} typedef std::vector<AchievementCriteriaData> Storage; void Add(AchievementCriteriaData const& data) { storage.push_back(data); } bool Meets(Player const* source, Unit const* target, uint32 miscvalue = 0) const; + void SetCriteriaId(uint32 id) {criteria_id = id;} private: uint32 criteria_id; Storage storage; |
