mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
Merge pull request #3303 from IvanSavenko/artifact_randomization_fix
Remove allowed artifacts list from arthandler
This commit is contained in:
commit
afff10aab0
@ -625,7 +625,7 @@ void CArtHandler::makeItCommanderArt(CArtifact * a, bool onlyCommander)
|
||||
a->possibleSlots[ArtBearer::COMMANDER].push_back(ArtifactPosition(slot));
|
||||
}
|
||||
|
||||
bool CArtHandler::legalArtifact(const ArtifactID & id)
|
||||
bool CArtHandler::legalArtifact(const ArtifactID & id) const
|
||||
{
|
||||
auto art = id.toArtifact();
|
||||
//assert ( (!art->constituents) || art->constituents->size() ); //artifacts is not combined or has some components
|
||||
@ -648,18 +648,6 @@ bool CArtHandler::legalArtifact(const ArtifactID & id)
|
||||
return false;
|
||||
}
|
||||
|
||||
void CArtHandler::initAllowedArtifactsList(const std::set<ArtifactID> & allowed)
|
||||
{
|
||||
allowedArtifacts.clear();
|
||||
|
||||
for (ArtifactID i : allowed)
|
||||
{
|
||||
if (legalArtifact(ArtifactID(i)))
|
||||
allowedArtifacts.push_back(i.toArtifact());
|
||||
//keep im mind that artifact can be worn by more than one type of bearer
|
||||
}
|
||||
}
|
||||
|
||||
std::set<ArtifactID> CArtHandler::getDefaultAllowed() const
|
||||
{
|
||||
std::set<ArtifactID> allowedArtifacts;
|
||||
|
@ -141,15 +141,11 @@ public:
|
||||
class DLL_LINKAGE CArtHandler : public CHandlerBase<ArtifactID, Artifact, CArtifact, ArtifactService>
|
||||
{
|
||||
public:
|
||||
/// List of artifacts allowed on the map
|
||||
std::vector<const CArtifact *> allowedArtifacts;
|
||||
|
||||
void addBonuses(CArtifact *art, const JsonNode &bonusList);
|
||||
|
||||
static CArtifact::EartClass stringToClass(const std::string & className); //TODO: rework EartClass to make this a constructor
|
||||
|
||||
bool legalArtifact(const ArtifactID & id);
|
||||
void initAllowedArtifactsList(const std::set<ArtifactID> & allowed);
|
||||
bool legalArtifact(const ArtifactID & id) const;
|
||||
static void makeItCreatureArt(CArtifact * a, bool onlyCreature = true);
|
||||
static void makeItCommanderArt(CArtifact * a, bool onlyCommander = true);
|
||||
|
||||
|
@ -384,8 +384,9 @@ namespace JsonRandom
|
||||
ArtifactID loadArtifact(const JsonNode & value, CRandomGenerator & rng, const Variables & variables)
|
||||
{
|
||||
std::set<ArtifactID> allowedArts;
|
||||
for (auto const * artifact : VLC->arth->allowedArtifacts)
|
||||
allowedArts.insert(artifact->getId());
|
||||
for(const auto & artifact : VLC->arth->objects)
|
||||
if (IObjectInterface::cb->isAllowed(artifact->getId()) && VLC->arth->legalArtifact(artifact->getId()))
|
||||
allowedArts.insert(artifact->getId());
|
||||
|
||||
std::set<ArtifactID> potentialPicks = filterKeys(value, allowedArts, variables);
|
||||
|
||||
|
@ -195,7 +195,6 @@ void CGameState::init(const IMapService * mapService, StartInfo * si, Load::Prog
|
||||
logGlobal->error("Wrong mode: %d", static_cast<int>(scenarioOps->mode));
|
||||
return;
|
||||
}
|
||||
VLC->arth->initAllowedArtifactsList(map->allowedArtifact);
|
||||
logGlobal->info("Map loaded!");
|
||||
|
||||
checkMapChecksum();
|
||||
@ -1947,8 +1946,13 @@ ArtifactID CGameState::pickRandomArtifact(CRandomGenerator & rand, int flags, st
|
||||
std::set<ArtifactID> potentialPicks;
|
||||
|
||||
// Select artifacts that satisfy provided criterias
|
||||
for (auto const * artifact : VLC->arth->allowedArtifacts)
|
||||
for (auto const & artifactID : map->allowedArtifact)
|
||||
{
|
||||
if (!VLC->arth->legalArtifact(artifactID))
|
||||
continue;
|
||||
|
||||
auto const * artifact = artifactID.toArtifact();
|
||||
|
||||
assert(artifact->aClass != CArtifact::ART_SPECIAL); // should be filtered out when allowedArtifacts is initialized
|
||||
|
||||
if ((flags & CArtifact::ART_TREASURE) == 0 && artifact->aClass == CArtifact::ART_TREASURE)
|
||||
|
Loading…
Reference in New Issue
Block a user