1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-23 22:37:55 +02:00

Fix events on .vmap's not activating on hero visit

This commit is contained in:
Ivan Savenko
2025-07-07 12:41:45 +03:00
parent d03d096aee
commit 4fc63427b9
2 changed files with 18 additions and 6 deletions

View File

@@ -275,6 +275,12 @@ void CGPandoraBox::serializeJsonOptions(JsonSerializeFormat & handler)
} }
} }
CGEvent::CGEvent(IGameInfoCallback * cb)
: CGPandoraBox(cb)
, availableFor(PlayerColor::ALL_PLAYERS().begin(), PlayerColor::ALL_PLAYERS().end())
{
}
void CGEvent::init() void CGEvent::init()
{ {
blockVisit = false; blockVisit = false;
@@ -333,7 +339,8 @@ void CGEvent::serializeJsonOptions(JsonSerializeFormat & handler)
handler.serializeBool("aIActivable", computerActivate, false); handler.serializeBool("aIActivable", computerActivate, false);
handler.serializeBool("humanActivable", humanActivate, true); handler.serializeBool("humanActivable", humanActivate, true);
handler.serializeBool("removeAfterVisit", removeAfterVisit, false); handler.serializeBool("removeAfterVisit", removeAfterVisit, false);
handler.serializeIdArray("availableFor", availableFor); if (handler.saving || !handler.getCurrent()["availableFor"].isNull())
handler.serializeIdArray("availableFor", availableFor); // else - keep default value
} }
VCMI_LIB_NAMESPACE_END VCMI_LIB_NAMESPACE_END

View File

@@ -43,12 +43,17 @@ protected:
class DLL_LINKAGE CGEvent : public CGPandoraBox //event objects class DLL_LINKAGE CGEvent : public CGPandoraBox //event objects
{ {
public: public:
using CGPandoraBox::CGPandoraBox; CGEvent(IGameInfoCallback *cb);
bool removeAfterVisit = false; //true if event is removed after occurring //players whom this event is available for
std::set<PlayerColor> availableFor; //players whom this event is available for std::set<PlayerColor> availableFor;
bool computerActivate = false; //true if computer player can activate this event
bool humanActivate = false; //true if human player can activate this event //true if event is removed after occurring
bool removeAfterVisit = false;
//true if computer player can activate this event
bool computerActivate = false;
//true if human player can activate this event
bool humanActivate = false;
template <typename Handler> void serialize(Handler &h) template <typename Handler> void serialize(Handler &h)
{ {