1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-24 22:14:36 +02:00

CGEvent: avoid permanent event removal after visit. Fix issue 2339

This commit is contained in:
ArseniyShestakov 2015-11-28 23:03:26 +03:00
parent c45cd1f4c2
commit ce5b7c73be
2 changed files with 19 additions and 2 deletions

View File

@ -51,7 +51,7 @@ void CGPandoraBox::onHeroVisit(const CGHeroInstance * h) const
void CGPandoraBox::giveContentsUpToExp(const CGHeroInstance *h) const void CGPandoraBox::giveContentsUpToExp(const CGHeroInstance *h) const
{ {
cb->removeAfterVisit(this); afterSuccessfulVisit();
InfoWindow iw; InfoWindow iw;
iw.player = h->getOwner(); iw.player = h->getOwner();
@ -331,6 +331,11 @@ void CGPandoraBox::heroLevelUpDone(const CGHeroInstance *hero) const
giveContentsAfterExp(hero); giveContentsAfterExp(hero);
} }
void CGPandoraBox::afterSuccessfulVisit() const
{
cb->removeAfterVisit(this);
}
void CGEvent::onHeroVisit( const CGHeroInstance * h ) const void CGEvent::onHeroVisit( const CGHeroInstance * h ) const
{ {
if(!(availableFor & (1 << h->tempOwner.getNum()))) if(!(availableFor & (1 << h->tempOwner.getNum())))
@ -362,3 +367,13 @@ void CGEvent::activated( const CGHeroInstance * h ) const
giveContentsUpToExp(h); giveContentsUpToExp(h);
} }
} }
void CGEvent::afterSuccessfulVisit() const
{
if(removeAfterVisit)
{
cb->removeAfterVisit(this);
}
else if(hasGuardians)
hasGuardians = false;
}

View File

@ -20,7 +20,7 @@ class DLL_LINKAGE CGPandoraBox : public CArmedInstance
{ {
public: public:
std::string message; std::string message;
bool hasGuardians; //helper - after battle even though we have no stacks, allows us to know that there was battle mutable bool hasGuardians; //helper - after battle even though we have no stacks, allows us to know that there was battle
//gained things: //gained things:
ui32 gainedExp; ui32 gainedExp;
@ -54,6 +54,7 @@ protected:
private: private:
void getText( InfoWindow &iw, bool &afterBattle, int val, int negative, int positive, const CGHeroInstance * h ) const; void getText( InfoWindow &iw, bool &afterBattle, int val, int negative, int positive, const CGHeroInstance * h ) const;
void getText( InfoWindow &iw, bool &afterBattle, int text, const CGHeroInstance * h ) const; void getText( InfoWindow &iw, bool &afterBattle, int text, const CGHeroInstance * h ) const;
virtual void afterSuccessfulVisit() const;
}; };
class DLL_LINKAGE CGEvent : public CGPandoraBox //event objects class DLL_LINKAGE CGEvent : public CGPandoraBox //event objects
@ -74,4 +75,5 @@ public:
void onHeroVisit(const CGHeroInstance * h) const override; void onHeroVisit(const CGHeroInstance * h) const override;
private: private:
void activated(const CGHeroInstance * h) const; void activated(const CGHeroInstance * h) const;
void afterSuccessfulVisit() const override;
}; };