1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-26 03:52:01 +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); 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); auto moveArtifact = [this, cl](PlayerColor player) -> void
callInterfaceIfPresent(cl, src.owningPlayer(), &IGameEventsReceiver::artifactPossibleAssembling, dst);
if(src.owningPlayer() != dst.owningPlayer())
{ {
callInterfaceIfPresent(cl, dst.owningPlayer(), &IGameEventsReceiver::artifactMoved, src, dst); callInterfaceIfPresent(cl, player, &IGameEventsReceiver::artifactMoved, src, dst);
callInterfaceIfPresent(cl, dst.owningPlayer(), &IGameEventsReceiver::artifactPossibleAssembling, 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) void BulkMoveArtifacts::applyCl(CClient * cl)

View File

@ -994,10 +994,12 @@ struct EraseArtifact : CArtifactOperationPack
struct MoveArtifact : CArtifactOperationPack struct MoveArtifact : CArtifactOperationPack
{ {
MoveArtifact() {} MoveArtifact()
MoveArtifact(ArtifactLocation * src, ArtifactLocation * dst) : askAssemble(true) {}
: src(*src), dst(*dst) {} MoveArtifact(ArtifactLocation * src, ArtifactLocation * dst, bool askAssemble = true)
: src(*src), dst(*dst), askAssemble(askAssemble){}
ArtifactLocation src, dst; ArtifactLocation src, dst;
bool askAssemble;
void applyCl(CClient *cl); void applyCl(CClient *cl);
DLL_LINKAGE void applyGs(CGameState *gs); DLL_LINKAGE void applyGs(CGameState *gs);
@ -1006,6 +1008,7 @@ struct MoveArtifact : CArtifactOperationPack
{ {
h & src; h & src;
h & dst; 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) auto sendMoveArtifact = [&](const CArtifactInstance *art, MoveArtifact *ma)
{ {
arts.push_back(art); 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); sendAndApply(ma);
}; };