1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-08-13 19:54:17 +02:00
This commit is contained in:
SoundSSGood
2023-06-06 14:37:48 +03:00
parent ee8c8dca7b
commit f6c2d5cba7
5 changed files with 21 additions and 9 deletions

View File

@@ -225,8 +225,8 @@ void CArtifactsOfHeroBase::updateWornSlots()
void CArtifactsOfHeroBase::updateBackpackSlots() void CArtifactsOfHeroBase::updateBackpackSlots()
{ {
for(auto artPlace : backpack) if(curHero->artifactsInBackpack.size() <= backpack.size() && backpackPos != 0)
updateSlot(artPlace->slot); backpackPos = 0;
scrollBackpackForArtSet(0, *curHero); scrollBackpackForArtSet(0, *curHero);
} }

View File

@@ -924,6 +924,16 @@ void CCombinedArtifactInstance::addAsConstituent(CArtifactInstance * art, const
attachTo(*art); attachTo(*art);
} }
void CCombinedArtifactInstance::removeFrom(ArtifactLocation al)
{
CArtifactInstance::removeFrom(al);
for(auto & part : constituentsInfo)
{
if(part.slot != ArtifactPosition::PRE_FIRST)
part.slot = ArtifactPosition::PRE_FIRST;
}
}
void CCombinedArtifactInstance::deserializationFix() void CCombinedArtifactInstance::deserializationFix()
{ {
for(ConstituentInfo &ci : constituentsInfo) for(ConstituentInfo &ci : constituentsInfo)
@@ -1092,7 +1102,8 @@ void CArtifactSet::putArtifact(ArtifactPosition slot, CArtifactInstance * art)
const CArtifactInstance * mainPart = nullptr; const CArtifactInstance * mainPart = nullptr;
auto & parts = dynamic_cast<CCombinedArtifactInstance*>(art)->constituentsInfo; auto & parts = dynamic_cast<CCombinedArtifactInstance*>(art)->constituentsInfo;
for(const auto & part : parts) for(const auto & part : parts)
if(vstd::contains(part.art->artType->possibleSlots.at(bearerType()), slot)) if(vstd::contains(part.art->artType->possibleSlots.at(bearerType()), slot)
&& (part.slot == ArtifactPosition::PRE_FIRST))
{ {
mainPart = part.art; mainPart = part.art;
break; break;

View File

@@ -162,9 +162,9 @@ public:
/// of itself, additionally truth is returned for constituents of combined arts /// of itself, additionally truth is returned for constituents of combined arts
virtual bool isPart(const CArtifactInstance *supposedPart) const; virtual bool isPart(const CArtifactInstance *supposedPart) const;
void putAt(ArtifactLocation al); virtual void putAt(ArtifactLocation al);
void removeFrom(ArtifactLocation al); virtual void removeFrom(ArtifactLocation al);
void move(const ArtifactLocation & src,const ArtifactLocation & dst); virtual void move(const ArtifactLocation & src, const ArtifactLocation & dst);
template <typename Handler> void serialize(Handler &h, const int version) template <typename Handler> void serialize(Handler &h, const int version)
{ {
@@ -198,6 +198,7 @@ public:
bool isPart(const CArtifactInstance *supposedPart) const override; bool isPart(const CArtifactInstance *supposedPart) const override;
void createConstituents(); void createConstituents();
void addAsConstituent(CArtifactInstance * art, const ArtifactPosition & slot); void addAsConstituent(CArtifactInstance * art, const ArtifactPosition & slot);
void removeFrom(ArtifactLocation al) override;
CCombinedArtifactInstance() = default; CCombinedArtifactInstance() = default;

View File

@@ -1941,13 +1941,14 @@ void AssembledArtifact::applyGs(CGameState *gs)
if(!vstd::contains(combinedArt->artType->possibleSlots[artSet->bearerType()], al.slot) if(!vstd::contains(combinedArt->artType->possibleSlots[artSet->bearerType()], al.slot)
&& vstd::contains(combinedArt->artType->possibleSlots[artSet->bearerType()], pos)) && vstd::contains(combinedArt->artType->possibleSlots[artSet->bearerType()], pos))
al.slot = pos; al.slot = pos;
if(al.slot == pos)
pos = ArtifactPosition::PRE_FIRST;
} }
else else
{ {
al.slot = std::min(al.slot, pos); al.slot = std::min(al.slot, pos);
}
if(al.slot == pos)
pos = ArtifactPosition::PRE_FIRST; pos = ArtifactPosition::PRE_FIRST;
}
combinedArt->addAsConstituent(constituentInstance, pos); combinedArt->addAsConstituent(constituentInstance, pos);
} }

View File

@@ -1031,7 +1031,6 @@ std::string CGHeroInstance::getBiographyTextID() const
void CGHeroInstance::putArtifact(ArtifactPosition pos, CArtifactInstance *art) void CGHeroInstance::putArtifact(ArtifactPosition pos, CArtifactInstance *art)
{ {
assert(!getArt(pos));
assert(art->artType->canBePutAt(this, pos)); assert(art->artType->canBePutAt(this, pos));
CArtifactSet::putArtifact(pos, art); CArtifactSet::putArtifact(pos, art);