From bd3eca6904b9a88fc17c1e9ec2f2b4ead956d352 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Sun, 30 Nov 2008 05:17:34 +0300 Subject: [PATCH] Add and use function for more fast way to get areflag by area id. --- src/game/AchievementMgr.cpp | 10 ++++------ src/shared/Database/DBCStores.cpp | 13 +++++++++++-- src/shared/Database/DBCStores.h | 1 + 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index ddc32653f..e7dc6f3a1 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -542,14 +542,12 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui if(!worldOverlayEntry) break; - AreaTableEntry const* areaTableEntry = GetAreaEntryByAreaID(worldOverlayEntry->areatableID); - - if(!areaTableEntry) + int32 exploreFlag = GetAreaFlagByAreaID(worldOverlayEntry->areatableID); + if(exploreFlag < 0) break; - uint32 exploreFlag = areaTableEntry->exploreFlag; - uint32 playerIndexOffset = exploreFlag / 32; - uint32 mask = 1<< (exploreFlag % 32); + uint32 playerIndexOffset = uint32(exploreFlag) / 32; + uint32 mask = 1<< (uint32(exploreFlag) % 32); if(GetPlayer()->GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + playerIndexOffset) & mask) SetCriteriaProgress(achievementCriteria, 1); diff --git a/src/shared/Database/DBCStores.cpp b/src/shared/Database/DBCStores.cpp index 72b152e22..d70862eb4 100644 --- a/src/shared/Database/DBCStores.cpp +++ b/src/shared/Database/DBCStores.cpp @@ -524,13 +524,22 @@ uint32 GetTalentSpellCost(uint32 spellId) return 0; } -AreaTableEntry const* GetAreaEntryByAreaID(uint32 area_id) +int32 GetAreaFlagByAreaID(uint32 area_id) { AreaFlagByAreaID::iterator i = sAreaFlagByAreaID.find(area_id); 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 sAreaStore.LookupEntry(i->second); + return sAreaStore.LookupEntry(areaflag ); } AreaTableEntry const* GetAreaEntryByAreaFlagAndMap(uint32 area_flag,uint32 map_id) diff --git a/src/shared/Database/DBCStores.h b/src/shared/Database/DBCStores.h index 4650e51ad..022ce7bbd 100644 --- a/src/shared/Database/DBCStores.h +++ b/src/shared/Database/DBCStores.h @@ -33,6 +33,7 @@ char* GetPetName(uint32 petfamily, uint32 dbclang); uint32 GetTalentSpellCost(uint32 spellId); TalentSpellPos const* GetTalentSpellPos(uint32 spellId); +int32 GetAreaFlagByAreaID(uint32 area_id); // -1 if not found AreaTableEntry const* GetAreaEntryByAreaID(uint32 area_id); AreaTableEntry const* GetAreaEntryByAreaFlagAndMap(uint32 area_flag,uint32 map_id); uint32 GetAreaFlagByMapId(uint32 mapid);