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:
parent
c45cd1f4c2
commit
ce5b7c73be
@ -51,7 +51,7 @@ void CGPandoraBox::onHeroVisit(const CGHeroInstance * h) const
|
||||
|
||||
void CGPandoraBox::giveContentsUpToExp(const CGHeroInstance *h) const
|
||||
{
|
||||
cb->removeAfterVisit(this);
|
||||
afterSuccessfulVisit();
|
||||
|
||||
InfoWindow iw;
|
||||
iw.player = h->getOwner();
|
||||
@ -331,6 +331,11 @@ void CGPandoraBox::heroLevelUpDone(const CGHeroInstance *hero) const
|
||||
giveContentsAfterExp(hero);
|
||||
}
|
||||
|
||||
void CGPandoraBox::afterSuccessfulVisit() const
|
||||
{
|
||||
cb->removeAfterVisit(this);
|
||||
}
|
||||
|
||||
void CGEvent::onHeroVisit( const CGHeroInstance * h ) const
|
||||
{
|
||||
if(!(availableFor & (1 << h->tempOwner.getNum())))
|
||||
@ -362,3 +367,13 @@ void CGEvent::activated( const CGHeroInstance * h ) const
|
||||
giveContentsUpToExp(h);
|
||||
}
|
||||
}
|
||||
|
||||
void CGEvent::afterSuccessfulVisit() const
|
||||
{
|
||||
if(removeAfterVisit)
|
||||
{
|
||||
cb->removeAfterVisit(this);
|
||||
}
|
||||
else if(hasGuardians)
|
||||
hasGuardians = false;
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ class DLL_LINKAGE CGPandoraBox : public CArmedInstance
|
||||
{
|
||||
public:
|
||||
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:
|
||||
ui32 gainedExp;
|
||||
@ -54,6 +54,7 @@ protected:
|
||||
private:
|
||||
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;
|
||||
virtual void afterSuccessfulVisit() const;
|
||||
};
|
||||
|
||||
class DLL_LINKAGE CGEvent : public CGPandoraBox //event objects
|
||||
@ -74,4 +75,5 @@ public:
|
||||
void onHeroVisit(const CGHeroInstance * h) const override;
|
||||
private:
|
||||
void activated(const CGHeroInstance * h) const;
|
||||
void afterSuccessfulVisit() const override;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user