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

Merge pull request #5764 from IvanSavenko/stack_experience_bonus

Implement STACK_EXPERIENCE_GAIN_PERCENT bonus
This commit is contained in:
Ivan Savenko
2025-06-04 21:09:38 +03:00
committed by GitHub
24 changed files with 167 additions and 65 deletions

View File

@@ -48,13 +48,30 @@ void GameStatePackVisitor::visitSetResources(SetResources & pack)
gs.getPlayerState(pack.player)->resources.positive();
}
void GameStatePackVisitor::visitSetPrimSkill(SetPrimSkill & pack)
void GameStatePackVisitor::visitSetPrimarySkill(SetPrimarySkill & pack)
{
CGHeroInstance * hero = gs.getHero(pack.id);
assert(hero);
hero->setPrimarySkill(pack.which, pack.val, pack.mode);
}
void GameStatePackVisitor::visitSetHeroExperience(SetHeroExperience & pack)
{
CGHeroInstance * hero = gs.getHero(pack.id);
assert(hero);
hero->setExperience(pack.val, pack.mode);
}
void GameStatePackVisitor::visitGiveStackExperience(GiveStackExperience & pack)
{
auto * army = gs.getArmyInstance(pack.id);
for (const auto & slot : pack.val)
army->getStackPtr(slot.first)->giveAverageStackExperience(slot.second);
army->nodeHasChanged();
}
void GameStatePackVisitor::visitSetSecSkill(SetSecSkill & pack)
{
CGHeroInstance *hero = gs.getHero(pack.id);
@@ -1233,15 +1250,6 @@ void GameStatePackVisitor::visitBattleResultAccepted(BattleResultAccepted & pack
attackerHero->removeBonusesRecursive(Bonus::OneBattle);
if(const auto defenderHero = gs.getHero(pack.heroResult[BattleSide::DEFENDER].heroID))
defenderHero->removeBonusesRecursive(Bonus::OneBattle);
if(gs.getSettings().getBoolean(EGameSettings::MODULE_STACK_EXPERIENCE))
{
if(const auto attackerArmy = gs.getArmyInstance(pack.heroResult[BattleSide::ATTACKER].armyID))
attackerArmy->giveAverageStackExperience(pack.heroResult[BattleSide::ATTACKER].exp);
if(const auto defenderArmy = gs.getArmyInstance(pack.heroResult[BattleSide::DEFENDER].armyID))
defenderArmy->giveAverageStackExperience(pack.heroResult[BattleSide::DEFENDER].exp);
}
}
void GameStatePackVisitor::visitBattleStackMoved(BattleStackMoved & pack)

View File

@@ -27,7 +27,9 @@ public:
}
void visitSetResources(SetResources & pack) override;
void visitSetPrimSkill(SetPrimSkill & pack) override;
void visitSetPrimarySkill(SetPrimarySkill & pack) override;
void visitSetHeroExperience(SetHeroExperience & pack) override;
void visitGiveStackExperience(GiveStackExperience & pack) override;
void visitSetSecSkill(SetSecSkill & pack) override;
void visitHeroVisitCastle(HeroVisitCastle & pack) override;
void visitSetMana(SetMana & pack) override;