Add and use function for more fast way to get areflag by area id.

This commit is contained in:
VladimirMangos 2008-11-30 05:17:34 +03:00
parent 333146baaf
commit bd3eca6904
3 changed files with 16 additions and 8 deletions

View file

@ -542,14 +542,12 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
if(!worldOverlayEntry) if(!worldOverlayEntry)
break; break;
AreaTableEntry const* areaTableEntry = GetAreaEntryByAreaID(worldOverlayEntry->areatableID); int32 exploreFlag = GetAreaFlagByAreaID(worldOverlayEntry->areatableID);
if(exploreFlag < 0)
if(!areaTableEntry)
break; break;
uint32 exploreFlag = areaTableEntry->exploreFlag; uint32 playerIndexOffset = uint32(exploreFlag) / 32;
uint32 playerIndexOffset = exploreFlag / 32; uint32 mask = 1<< (uint32(exploreFlag) % 32);
uint32 mask = 1<< (exploreFlag % 32);
if(GetPlayer()->GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + playerIndexOffset) & mask) if(GetPlayer()->GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + playerIndexOffset) & mask)
SetCriteriaProgress(achievementCriteria, 1); SetCriteriaProgress(achievementCriteria, 1);

View file

@ -524,13 +524,22 @@ uint32 GetTalentSpellCost(uint32 spellId)
return 0; return 0;
} }
AreaTableEntry const* GetAreaEntryByAreaID(uint32 area_id) int32 GetAreaFlagByAreaID(uint32 area_id)
{ {
AreaFlagByAreaID::iterator i = sAreaFlagByAreaID.find(area_id); AreaFlagByAreaID::iterator i = sAreaFlagByAreaID.find(area_id);
if(i == sAreaFlagByAreaID.end()) if(i == sAreaFlagByAreaID.end())
return -1;
return i->second;
}
AreaTableEntry const* GetAreaEntryByAreaID(uint32 area_id)
{
int32 areaflag = GetAreaFlagByAreaID(area_id);
if(areaflag < 0)
return NULL; return NULL;
return sAreaStore.LookupEntry(i->second); return sAreaStore.LookupEntry(areaflag );
} }
AreaTableEntry const* GetAreaEntryByAreaFlagAndMap(uint32 area_flag,uint32 map_id) AreaTableEntry const* GetAreaEntryByAreaFlagAndMap(uint32 area_flag,uint32 map_id)

View file

@ -33,6 +33,7 @@ char* GetPetName(uint32 petfamily, uint32 dbclang);
uint32 GetTalentSpellCost(uint32 spellId); uint32 GetTalentSpellCost(uint32 spellId);
TalentSpellPos const* GetTalentSpellPos(uint32 spellId); TalentSpellPos const* GetTalentSpellPos(uint32 spellId);
int32 GetAreaFlagByAreaID(uint32 area_id); // -1 if not found
AreaTableEntry const* GetAreaEntryByAreaID(uint32 area_id); AreaTableEntry const* GetAreaEntryByAreaID(uint32 area_id);
AreaTableEntry const* GetAreaEntryByAreaFlagAndMap(uint32 area_flag,uint32 map_id); AreaTableEntry const* GetAreaEntryByAreaFlagAndMap(uint32 area_flag,uint32 map_id);
uint32 GetAreaFlagByMapId(uint32 mapid); uint32 GetAreaFlagByMapId(uint32 mapid);