Преглед изворни кода

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
Ivan Savenko пре 5 месеци
родитељ
комит
45a587bc5b

+ 16 - 0
lib/networkPacks/NetPacksLib.cpp

@@ -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

+ 2 - 0
lib/networkPacks/PacksForClient.h

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

+ 4 - 0
lib/networkPacks/PacksForClientBattle.h

@@ -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;