소스 검색

Correctly iterate over allowed spells set (was vector originally)

Ivan Savenko 1 년 전
부모
커밋
76bb32536f
2개의 변경된 파일5개의 추가작업 그리고 10개의 파일을 삭제
  1. 4 4
      lib/IGameCallback.cpp
  2. 1 6
      lib/rmg/RmgMap.cpp

+ 4 - 4
lib/IGameCallback.cpp

@@ -158,17 +158,17 @@ void CPrivilegedInfoCallback::pickAllowedArtsSet(std::vector<const CArtifact *>
 
 void CPrivilegedInfoCallback::getAllowedSpells(std::vector<SpellID> & out, std::optional<ui16> level)
 {
-	for (ui32 i = 0; i < gs->map->allowedSpells.size(); i++) //spellh size appears to be greater (?)
+	for (auto const & spellID : gs->map->allowedSpells)
 	{
-		const spells::Spell * spell = SpellID(i).toSpell();
+		const auto * spell = spellID.toEntity(VLC);
 
-		if (!isAllowed(spell->getId()))
+		if (!isAllowed(spellID))
 			continue;
 
 		if (level.has_value() && spell->getLevel() != level)
 			continue;
 
-		out.push_back(spell->getId());
+		out.push_back(spellID);
 	}
 }
 

+ 1 - 6
lib/rmg/RmgMap.cpp

@@ -368,12 +368,7 @@ ui32 RmgMap::getTotalZoneCount() const
 bool RmgMap::isAllowedSpell(const SpellID & sid) const
 {
 	assert(sid.getNum() >= 0);
-	if (sid.getNum() < mapInstance->allowedSpells.size())
-	{
-		return mapInstance->allowedSpells.count(sid);
-	}
-	else
-		return false;
+	return mapInstance->allowedSpells.count(sid);
 }
 
 void RmgMap::dump(bool zoneId) const