1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-12 02:28:11 +02:00

end of battle art assembling fix

This commit is contained in:
SoundSSGood 2023-01-02 16:19:45 +02:00 committed by Ivan Savenko
parent 3e1e41ef59
commit d5cef0c069
3 changed files with 20 additions and 11 deletions

View File

@ -272,15 +272,18 @@ void EraseArtifact::applyCl(CClient *cl)
callInterfaceIfPresent(cl, al.owningPlayer(), &IGameEventsReceiver::artifactRemoved, al);
}
void MoveArtifact::applyCl(CClient *cl)
void MoveArtifact::applyCl(CClient * cl)
{
callInterfaceIfPresent(cl, src.owningPlayer(), &IGameEventsReceiver::artifactMoved, src, dst);
callInterfaceIfPresent(cl, src.owningPlayer(), &IGameEventsReceiver::artifactPossibleAssembling, dst);
if(src.owningPlayer() != dst.owningPlayer())
auto moveArtifact = [this, cl](PlayerColor player) -> void
{
callInterfaceIfPresent(cl, dst.owningPlayer(), &IGameEventsReceiver::artifactMoved, src, dst);
callInterfaceIfPresent(cl, dst.owningPlayer(), &IGameEventsReceiver::artifactPossibleAssembling, dst);
}
callInterfaceIfPresent(cl, player, &IGameEventsReceiver::artifactMoved, src, dst);
if(askAssemble)
callInterfaceIfPresent(cl, player, &IGameEventsReceiver::artifactPossibleAssembling, dst);
};
moveArtifact(src.owningPlayer());
if(src.owningPlayer() != dst.owningPlayer())
moveArtifact(dst.owningPlayer());
}
void BulkMoveArtifacts::applyCl(CClient * cl)

View File

@ -994,10 +994,12 @@ struct EraseArtifact : CArtifactOperationPack
struct MoveArtifact : CArtifactOperationPack
{
MoveArtifact() {}
MoveArtifact(ArtifactLocation * src, ArtifactLocation * dst)
: src(*src), dst(*dst) {}
MoveArtifact()
: askAssemble(true) {}
MoveArtifact(ArtifactLocation * src, ArtifactLocation * dst, bool askAssemble = true)
: src(*src), dst(*dst), askAssemble(askAssemble){}
ArtifactLocation src, dst;
bool askAssemble;
void applyCl(CClient *cl);
DLL_LINKAGE void applyGs(CGameState *gs);
@ -1006,6 +1008,7 @@ struct MoveArtifact : CArtifactOperationPack
{
h & src;
h & dst;
h & askAssemble;
}
};

View File

@ -756,7 +756,10 @@ void CGameHandler::endBattle(int3 tile, const CGHeroInstance * heroAttacker, con
auto sendMoveArtifact = [&](const CArtifactInstance *art, MoveArtifact *ma)
{
arts.push_back(art);
ma->dst = ArtifactLocation(finishingBattle->winnerHero, art->firstAvailableSlot(finishingBattle->winnerHero));
auto slot = art->firstAvailableSlot(finishingBattle->winnerHero);
ma->dst = ArtifactLocation(finishingBattle->winnerHero, slot);
if(ArtifactUtils::isSlotBackpack(slot))
ma->askAssemble = false;
sendAndApply(ma);
};