mirror of
https://github.com/vcmi/vcmi.git
synced 2025-08-10 22:31:40 +02:00
Implemented giving bonuses to commanders
This commit is contained in:
@@ -72,6 +72,7 @@ Rewardable::Configuration CRewardableConstructor::generateConfiguration(IGameCal
|
||||
for(auto & rewardInfo : result.info)
|
||||
{
|
||||
assignBonuses(rewardInfo.reward.heroBonuses, objectID);
|
||||
assignBonuses(rewardInfo.reward.commanderBonuses, objectID);
|
||||
assignBonuses(rewardInfo.reward.playerBonuses, objectID);
|
||||
}
|
||||
|
||||
|
@@ -102,6 +102,7 @@ Rewardable::Configuration TownRewardableBuildingInstance::generateConfiguration(
|
||||
for(auto & rewardInfo : result.info)
|
||||
{
|
||||
assignBonuses(rewardInfo.reward.heroBonuses);
|
||||
assignBonuses(rewardInfo.reward.commanderBonuses);
|
||||
assignBonuses(rewardInfo.reward.playerBonuses);
|
||||
}
|
||||
return result;
|
||||
|
@@ -1014,6 +1014,9 @@ void GiveBonus::applyGs(CGameState *gs)
|
||||
case ETarget::OBJECT:
|
||||
cbsn = dynamic_cast<CBonusSystemNode*>(gs->getObjInstance(id.as<ObjectInstanceID>()));
|
||||
break;
|
||||
case ETarget::HERO_COMMANDER:
|
||||
cbsn = gs->getHero(id.as<ObjectInstanceID>())->getCommander();
|
||||
break;
|
||||
case ETarget::PLAYER:
|
||||
cbsn = gs->getPlayerState(id.as<PlayerColor>());
|
||||
break;
|
||||
|
@@ -409,8 +409,14 @@ struct DLL_LINKAGE SetAvailableHero : public CPackForClient
|
||||
struct DLL_LINKAGE GiveBonus : public CPackForClient
|
||||
{
|
||||
using VariantType = VariantIdentifier<ObjectInstanceID, PlayerColor, BattleID>;
|
||||
enum class ETarget : int8_t { OBJECT, PLAYER, BATTLE };
|
||||
|
||||
enum class ETarget : int8_t
|
||||
{
|
||||
OBJECT,
|
||||
PLAYER,
|
||||
BATTLE,
|
||||
HERO_COMMANDER
|
||||
};
|
||||
|
||||
explicit GiveBonus(ETarget Who = ETarget::OBJECT)
|
||||
:who(Who)
|
||||
{
|
||||
|
@@ -175,6 +175,7 @@ void Rewardable::Info::configureReward(Rewardable::Configuration & object, vstd:
|
||||
|
||||
reward.removeObject = source["removeObject"].Bool();
|
||||
reward.heroBonuses = randomizer.loadBonuses(source["bonuses"]);
|
||||
reward.commanderBonuses = randomizer.loadBonuses(source["commanderBonuses"]);
|
||||
reward.playerBonuses = randomizer.loadBonuses(source["playerBonuses"]);
|
||||
|
||||
reward.guards = randomizer.loadCreatures(source["guards"], rng, variables);
|
||||
|
@@ -157,6 +157,15 @@ void Rewardable::Interface::grantRewardAfterLevelup(const Rewardable::VisitInfo
|
||||
cb->giveHeroBonus(&gb);
|
||||
}
|
||||
|
||||
if (hero->getCommander())
|
||||
{
|
||||
for(const Bonus & bonus : info.reward.commanderBonuses)
|
||||
{
|
||||
GiveBonus gb(GiveBonus::ETarget::HERO_COMMANDER, hero->id, bonus);
|
||||
cb->giveHeroBonus(&gb);
|
||||
}
|
||||
}
|
||||
|
||||
for(const Bonus & bonus : info.reward.playerBonuses)
|
||||
{
|
||||
GiveBonus gb(GiveBonus::ETarget::PLAYER, hero->getOwner(), bonus);
|
||||
|
@@ -87,6 +87,7 @@ struct DLL_LINKAGE Reward final
|
||||
|
||||
/// list of bonuses, e.g. morale/luck
|
||||
std::vector<Bonus> heroBonuses;
|
||||
std::vector<Bonus> commanderBonuses;
|
||||
std::vector<Bonus> playerBonuses;
|
||||
|
||||
/// skills that hero may receive or lose
|
||||
@@ -147,6 +148,7 @@ struct DLL_LINKAGE Reward final
|
||||
if (h.version >= Handler::Version::REWARDABLE_EXTENSIONS)
|
||||
{
|
||||
h & playerBonuses;
|
||||
h & commanderBonuses;
|
||||
}
|
||||
h & grantedArtifacts;
|
||||
if (h.version >= Handler::Version::REWARDABLE_EXTENSIONS)
|
||||
|
Reference in New Issue
Block a user