| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- /*
- * Reward.h, part of VCMI engine
- *
- * Authors: listed in file AUTHORS in main folder
- *
- * License: GNU General Public License v2.0 or later
- * Full text of license available in license.txt file, in main folder
- *
- */
- #pragma once
- #include "../mapObjects/CGHeroInstance.h"
- VCMI_LIB_NAMESPACE_BEGIN
- namespace Rewardable
- {
- struct Reward;
- using RewardsList = std::vector<std::shared_ptr<Rewardable::Reward>>;
- /// Reward that can be granted to a hero
- /// NOTE: eventually should replace seer hut rewards and events/pandoras
- struct DLL_LINKAGE Reward
- {
- /// resources that will be given to player
- TResources resources;
- /// received experience
- si32 heroExperience;
- /// received levels (converted into XP during grant)
- si32 heroLevel;
- /// mana given to/taken from hero, fixed value
- si32 manaDiff;
- /// if giving mana points puts hero above mana pool, any overflow will be multiplied by specified percentage
- si32 manaOverflowFactor;
- /// fixed value, in form of percentage from max
- si32 manaPercentage;
- /// movement points, only for current day. Bonuses should be used to grant MP on any other day
- si32 movePoints;
- /// fixed value, in form of percentage from max
- si32 movePercentage;
- /// list of bonuses, e.g. morale/luck
- std::vector<Bonus> bonuses;
- /// skills that hero may receive or lose
- std::vector<si32> primary;
- std::map<SecondarySkill, si32> secondary;
- /// creatures that will be changed in hero's army
- std::map<CreatureID, CreatureID> creaturesChange;
- /// objects that hero may receive
- std::vector<ArtifactID> artifacts;
- std::vector<SpellID> spells;
- std::vector<CStackBasicDescriptor> creatures;
-
- /// actions that hero may execute and object caster. Pair of spellID and school level
- std::pair<SpellID, int> spellCast;
- /// list of components that will be added to reward description. First entry in list will override displayed component
- std::vector<Component> extraComponents;
- /// if set to true, object will be removed after granting reward
- bool removeObject;
- /// Generates list of components that describes reward for a specific hero
- virtual void loadComponents(std::vector<Component> & comps,
- const CGHeroInstance * h) const;
-
- Component getDisplayedComponent(const CGHeroInstance * h) const;
- si32 calculateManaPoints(const CGHeroInstance * h) const;
- Reward() :
- heroExperience(0),
- heroLevel(0),
- manaDiff(0),
- manaPercentage(-1),
- movePoints(0),
- movePercentage(-1),
- primary(4, 0),
- removeObject(false),
- spellCast(SpellID::NONE, SecSkillLevel::NONE)
- {}
- template <typename Handler> void serialize(Handler &h, const int version)
- {
- h & resources;
- h & extraComponents;
- h & removeObject;
- h & manaPercentage;
- h & movePercentage;
- h & heroExperience;
- h & heroLevel;
- h & manaDiff;
- h & manaOverflowFactor;
- h & movePoints;
- h & primary;
- h & secondary;
- h & bonuses;
- h & artifacts;
- h & spells;
- h & creatures;
- h & creaturesChange;
- if(version >= 821)
- h & spellCast;
- }
- };
- }
- VCMI_LIB_NAMESPACE_END
|