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:
parent
3e1e41ef59
commit
d5cef0c069
@ -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)
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user