mirror of
https://github.com/vcmi/vcmi.git
synced 2025-06-15 00:05:02 +02:00
It is now possible to configure what exactly will be reset in object
This commit is contained in:
@ -102,7 +102,7 @@ std::vector<ui32> CRewardableObject::getAvailableRewards(const CGHeroInstance *
|
||||
|
||||
for(size_t i=0; i<info.size(); i++)
|
||||
{
|
||||
const CVisitInfo & visit = info[i];
|
||||
const CRewardVisitInfo & visit = info[i];
|
||||
|
||||
if((visit.numOfGrantsAllowed == 0 || visit.numOfGrantsPerformed < visit.numOfGrantsAllowed) // reward has unlimited uses or some are still available
|
||||
&& visit.limiter.heroAllowed(hero))
|
||||
@ -114,7 +114,7 @@ std::vector<ui32> CRewardableObject::getAvailableRewards(const CGHeroInstance *
|
||||
return ret;
|
||||
}
|
||||
|
||||
CVisitInfo CRewardableObject::getVisitInfo(int index, const CGHeroInstance *) const
|
||||
CRewardVisitInfo CRewardableObject::getVisitInfo(int index, const CGHeroInstance *) const
|
||||
{
|
||||
return info[index];
|
||||
}
|
||||
@ -250,7 +250,7 @@ void CRewardableObject::grantReward(ui32 rewardID, const CGHeroInstance * hero)
|
||||
grantRewardBeforeLevelup(getVisitInfo(rewardID, hero), hero);
|
||||
}
|
||||
|
||||
void CRewardableObject::grantRewardBeforeLevelup(const CVisitInfo & info, const CGHeroInstance * hero) const
|
||||
void CRewardableObject::grantRewardBeforeLevelup(const CRewardVisitInfo & info, const CGHeroInstance * hero) const
|
||||
{
|
||||
assert(hero);
|
||||
assert(hero->tempOwner.isValidPlayer());
|
||||
@ -287,7 +287,7 @@ void CRewardableObject::grantRewardBeforeLevelup(const CVisitInfo & info, const
|
||||
}
|
||||
}
|
||||
|
||||
void CRewardableObject::grantRewardAfterLevelup(const CVisitInfo & info, const CGHeroInstance * hero) const
|
||||
void CRewardableObject::grantRewardAfterLevelup(const CRewardVisitInfo & info, const CGHeroInstance * hero) const
|
||||
{
|
||||
if(info.reward.manaDiff || info.reward.manaPercentage >= 0)
|
||||
{
|
||||
@ -392,7 +392,7 @@ CRewardableObject::EVisitMode CRewardableObject::getVisitMode() const
|
||||
|
||||
ui16 CRewardableObject::getResetDuration() const
|
||||
{
|
||||
return resetDuration;
|
||||
return resetParameters.period;
|
||||
}
|
||||
|
||||
void CRewardInfo::loadComponents(std::vector<Component> & comps,
|
||||
@ -468,7 +468,10 @@ void CRewardableObject::setPropertyDer(ui8 what, ui32 val)
|
||||
{
|
||||
switch (what)
|
||||
{
|
||||
case ObjProperty::REWARD_RESET:
|
||||
case ObjProperty::REWARD_RANDOMIZE:
|
||||
initObj(cb->gameState()->getRandomGenerator());
|
||||
break;
|
||||
case ObjProperty::REWARDS_CLEAR_GRANTS:
|
||||
for (auto & visit : info)
|
||||
visit.numOfGrantsPerformed = 0;
|
||||
break;
|
||||
@ -479,15 +482,27 @@ void CRewardableObject::setPropertyDer(ui8 what, ui32 val)
|
||||
}
|
||||
}
|
||||
|
||||
void CRewardableObject::triggerRewardReset() const
|
||||
void CRewardableObject::triggerReset() const
|
||||
{
|
||||
cb->setObjProperty(id, ObjProperty::REWARD_RESET, 0);
|
||||
if (resetParameters.rewards)
|
||||
{
|
||||
cb->setObjProperty(id, ObjProperty::REWARD_RANDOMIZE, 0);
|
||||
}
|
||||
if (resetParameters.grants)
|
||||
{
|
||||
cb->setObjProperty(id, ObjProperty::REWARDS_CLEAR_GRANTS, 0);
|
||||
}
|
||||
if (resetParameters.visitors)
|
||||
{
|
||||
ChangeObjectVisitors cov(ChangeObjectVisitors::VISITOR_CLEAR, id);
|
||||
cb->sendAndApply(&cov);
|
||||
}
|
||||
}
|
||||
|
||||
void CRewardableObject::newTurn(CRandomGenerator & rand) const
|
||||
{
|
||||
if (resetDuration != 0 && cb->getDate(Date::DAY) > 1 && (cb->getDate(Date::DAY) % resetDuration) == 1)
|
||||
triggerRewardReset();
|
||||
if (resetParameters.period != 0 && cb->getDate(Date::DAY) > 1 && (cb->getDate(Date::DAY) % resetParameters.period) == 1)
|
||||
triggerReset();
|
||||
}
|
||||
|
||||
void CRewardableObject::initObj(CRandomGenerator & rand)
|
||||
@ -499,7 +514,6 @@ CRewardableObject::CRewardableObject():
|
||||
selectMode(0),
|
||||
visitMode(0),
|
||||
selectedReward(0),
|
||||
resetDuration(0),
|
||||
canRefuse(false)
|
||||
{}
|
||||
|
||||
|
Reference in New Issue
Block a user