Skip to content

Commit fb3f758

Browse files
authored
Merge f5d86a9 into b5d14f3
2 parents b5d14f3 + f5d86a9 commit fb3f758

1 file changed

Lines changed: 12 additions & 1 deletion

File tree

src/game/Server/DBCStores.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -664,6 +664,12 @@ AreaTableEntry const* GetAreaEntryByAreaID(uint32 area_id)
664664
AreaTableEntry const* GetAreaEntryByAreaFlagAndMap(uint32 area_flag, uint32 map_id)
665665
{
666666
// 1.12.1 areatable have duplicates for areaflag
667+
static std::map<uint64, AreaTableEntry const*> cache;
668+
uint64 cacheKey = (static_cast<uint64>(area_flag) << 32) | static_cast<uint64>(map_id);
669+
auto it = cache.find(cacheKey);
670+
if (it != cache.end())
671+
return it->second;
672+
667673
AreaTableEntry const* aEntry = NULL;
668674
for (uint32 i = 0 ; i <= sAreaStore.GetNumRows() ; i++)
669675
{
@@ -676,6 +682,7 @@ AreaTableEntry const* GetAreaEntryByAreaFlagAndMap(uint32 area_flag, uint32 map_
676682
// area_flag found but it lets test map_id too
677683
if (AreaEntry->mapid == map_id)
678684
{
685+
cache[cacheKey] = AreaEntry;
679686
return AreaEntry; // area_flag and map_id are ok so we can return value
680687
}
681688
// not same map_id so we store this entry and continue searching another better one
@@ -687,14 +694,18 @@ AreaTableEntry const* GetAreaEntryByAreaFlagAndMap(uint32 area_flag, uint32 map_
687694

688695
if (aEntry)
689696
{
697+
cache[cacheKey] = aEntry;
690698
return aEntry; // return last entry found if exist (not same map_id but it seem ok in some places)
691699
}
692700

693701
if (MapEntry const* mapEntry = sMapStore.LookupEntry(map_id))
694702
{
695-
return GetAreaEntryByAreaID(mapEntry->linked_zone);
703+
AreaTableEntry const* result = GetAreaEntryByAreaID(mapEntry->linked_zone);
704+
cache[cacheKey] = result;
705+
return result;
696706
}
697707

708+
cache[cacheKey] = NULL;
698709
return NULL;
699710
}
700711

0 commit comments

Comments
 (0)