mirror of
https://github.com/mangosfour/server.git
synced 2025-12-15 10:37:02 +00:00
[7737] Implement ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE.
Zone dependent achievement criteria required DB support. Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
parent
b22b603c0e
commit
dba73b611d
6 changed files with 62 additions and 24 deletions
|
|
@ -78,8 +78,9 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria)
|
|||
|
||||
switch(criteria->requiredType)
|
||||
{
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2:
|
||||
break;
|
||||
default:
|
||||
sLog.outErrorDb( "Table `achievement_criteria_data` have data for not supported criteria type (Entry: %u Type: %u), ignore.", criteria->ID, criteria->requiredType);
|
||||
|
|
@ -861,6 +862,30 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
|||
if(GetPlayer()->HasSpell(achievementCriteria->learn_spell.spellID))
|
||||
SetCriteriaProgress(achievementCriteria, 1);
|
||||
break;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE:
|
||||
{
|
||||
// miscvalue1=loot_type (note: 0 = LOOT_CORSPE and then it ignored)
|
||||
// miscvalue2=count of item loot
|
||||
if (!miscvalue1 || !miscvalue2)
|
||||
continue;
|
||||
if (miscvalue1 != achievementCriteria->loot_type.lootType)
|
||||
continue;
|
||||
|
||||
// zone specific
|
||||
if(achievementCriteria->loot_type.lootTypeCount==1)
|
||||
{
|
||||
// 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, miscvalue2, PROGRESS_ACCUMULATE);
|
||||
break;
|
||||
}
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM:
|
||||
// speedup for non-login case
|
||||
if(miscvalue1 && achievementCriteria->own_item.itemID != miscvalue1)
|
||||
|
|
@ -1142,7 +1167,6 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
|||
case ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_QUEST_ABANDONED:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_FLIGHT_PATHS_TAKEN:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_ACCEPTED_SUMMONINGS:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_TOTAL:
|
||||
break; // Not implemented yet :(
|
||||
|
|
@ -1232,6 +1256,8 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve
|
|||
return progress->counter >= achievementCriteria->cast_spell.castCount;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL:
|
||||
return progress->counter >= 1;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE:
|
||||
return progress->counter >= achievementCriteria->loot_type.lootTypeCount;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM:
|
||||
return progress->counter >= achievementCriteria->own_item.itemCount;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM:
|
||||
|
|
@ -1672,18 +1698,22 @@ void AchievementGlobalMgr::LoadAchievementCriteriaData()
|
|||
|
||||
switch(criteria->requiredType)
|
||||
{
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2:
|
||||
if(!GetCriteriaDataSet(criteria))
|
||||
sLog.outErrorDb( "Table `achievement_criteria_data` not have expected data for for criteria (Entry: %u Type: %u).", criteria->ID, criteria->requiredType);
|
||||
break;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE: // need skip generic cases
|
||||
if(criteria->do_emote.count && !GetCriteriaDataSet(criteria))
|
||||
sLog.outErrorDb( "Table `achievement_criteria_data` not have expected data for for criteria (Entry: %u Type: %u).", criteria->ID, criteria->requiredType);
|
||||
if(criteria->do_emote.count==0)
|
||||
continue;
|
||||
break;
|
||||
default: // unexpected case processed in IsValid check
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2: // any cases
|
||||
break;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE: // need skip generic cases
|
||||
if(criteria->loot_type.lootTypeCount!=1)
|
||||
continue;
|
||||
break;
|
||||
default: // type not use DB data, ignore
|
||||
continue;
|
||||
}
|
||||
|
||||
if(!GetCriteriaDataSet(criteria))
|
||||
sLog.outErrorDb( "Table `achievement_criteria_data` not have expected data for for criteria (Entry: %u Type: %u).", criteria->ID, criteria->requiredType);
|
||||
}
|
||||
|
||||
sLog.outString();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue