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
|
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;
|
||||||
|
}
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user