1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-06-19 00:17:56 +02:00

Fix game not awarding stack experience after combat

- Added missing `visitTyped` overloads.
- Throw runtime error if `visitTyped` is called on raw CPack, to avoid
such silent errors in future
This commit is contained in:
Ivan Savenko
2025-05-17 18:03:44 +03:00
parent 630f911cc9
commit 45a587bc5b
3 changed files with 22 additions and 0 deletions

View File

@ -36,6 +36,7 @@ void CPack::visitBasic(ICPackVisitor & visitor)
void CPack::visitTyped(ICPackVisitor & visitor)
{
throw std::runtime_error(std::string("CPack::visitTyped called for class ") + typeid(*this).name());
}
void CPackForClient::visitBasic(ICPackVisitor & visitor)
@ -812,4 +813,19 @@ void CatapultAttack::visitTyped(ICPackVisitor & visitor)
visitor.visitCatapultAttack(*this);
}
void BattleResultAccepted::visitTyped(ICPackVisitor & visitor)
{
visitor.visitBattleResultAccepted(*this);
}
void BattleCancelled::visitTyped(ICPackVisitor & visitor)
{
visitor.visitBattleCancelled(*this);
}
void TurnTimeUpdate::visitTyped(ICPackVisitor & visitor)
{
visitor.visitTurnTimeUpdate(*this);
}
VCMI_LIB_NAMESPACE_END

View File

@ -130,6 +130,8 @@ struct DLL_LINKAGE TurnTimeUpdate : public CPackForClient
PlayerColor player;
TurnTimerInfo turnTimer;
void visitTyped(ICPackVisitor & visitor) override;
template <typename Handler> void serialize(Handler & h)
{
h & player;

View File

@ -76,6 +76,8 @@ struct DLL_LINKAGE BattleCancelled: public CPackForClient
{
BattleID battleID = BattleID::NONE;
void visitTyped(ICPackVisitor & visitor) override;
template <typename Handler> void serialize(Handler & h)
{
h & battleID;
@ -104,6 +106,8 @@ struct DLL_LINKAGE BattleResultAccepted : public CPackForClient
BattleSide winnerSide;
std::vector<BulkMoveArtifacts> artifacts;
void visitTyped(ICPackVisitor & visitor) override;
template <typename Handler> void serialize(Handler & h)
{
h & battleID;