1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-26 22:57:00 +02:00

Add description for bonuses from hero specialty

This commit is contained in:
godric3 2018-10-29 21:33:13 +01:00
parent c8ba3de821
commit f9ac46576b
4 changed files with 13 additions and 4 deletions

View File

@ -564,11 +564,12 @@ std::vector<std::shared_ptr<Bonus>> SpecialtyInfoToBonuses(const SSpecialtyInfo
} }
// convert deprecated format // convert deprecated format
std::vector<std::shared_ptr<Bonus>> SpecialtyBonusToBonuses(const SSpecialtyBonus & spec) std::vector<std::shared_ptr<Bonus>> SpecialtyBonusToBonuses(const SSpecialtyBonus & spec, int sid)
{ {
std::vector<std::shared_ptr<Bonus>> result; std::vector<std::shared_ptr<Bonus>> result;
for(std::shared_ptr<Bonus> oldBonus : spec.bonuses) for(std::shared_ptr<Bonus> oldBonus : spec.bonuses)
{ {
oldBonus->sid = sid;
if(oldBonus->type == Bonus::SPECIAL_SPELL_LEV || oldBonus->type == Bonus::SPECIAL_BLESS_DAMAGE) if(oldBonus->type == Bonus::SPECIAL_SPELL_LEV || oldBonus->type == Bonus::SPECIAL_BLESS_DAMAGE)
{ {
// these bonuses used to auto-scale with hero level // these bonuses used to auto-scale with hero level
@ -860,6 +861,11 @@ void CHeroHandler::afterLoadFinalization()
{ {
for(ConstTransitivePtr<CHero> hero : heroes) for(ConstTransitivePtr<CHero> hero : heroes)
{ {
for(auto bonus : hero->specialty)
{
bonus->sid = hero->ID.getNum();
}
if(hero->specDeprecated.size() > 0 || hero->specialtyDeprecated.size() > 0) if(hero->specDeprecated.size() > 0 || hero->specialtyDeprecated.size() > 0)
{ {
logMod->debug("Converting specialty format for hero %s(%s)", hero->identifier, VLC->townh->encodeFaction(hero->heroClass->faction)); logMod->debug("Converting specialty format for hero %s(%s)", hero->identifier, VLC->townh->encodeFaction(hero->heroClass->faction));
@ -871,7 +877,7 @@ void CHeroHandler::afterLoadFinalization()
} }
for(const SSpecialtyBonus & spec : hero->specialtyDeprecated) for(const SSpecialtyBonus & spec : hero->specialtyDeprecated)
{ {
for(std::shared_ptr<Bonus> b : SpecialtyBonusToBonuses(spec)) for(std::shared_ptr<Bonus> b : SpecialtyBonusToBonuses(spec, hero->ID.getNum()))
convertedBonuses.push_back(b); convertedBonuses.push_back(b);
} }
hero->specDeprecated.clear(); hero->specDeprecated.clear();

View File

@ -135,7 +135,7 @@ public:
// convert deprecated format // convert deprecated format
std::vector<std::shared_ptr<Bonus>> SpecialtyInfoToBonuses(const SSpecialtyInfo & spec, int sid); std::vector<std::shared_ptr<Bonus>> SpecialtyInfoToBonuses(const SSpecialtyInfo & spec, int sid);
std::vector<std::shared_ptr<Bonus>> SpecialtyBonusToBonuses(const SSpecialtyBonus & spec); std::vector<std::shared_ptr<Bonus>> SpecialtyBonusToBonuses(const SSpecialtyBonus & spec, int sid);
class DLL_LINKAGE CHeroClass class DLL_LINKAGE CHeroClass
{ {

View File

@ -1250,6 +1250,9 @@ std::string Bonus::Description() const
case SECONDARY_SKILL: case SECONDARY_SKILL:
str << VLC->skillh->skillName(sid); str << VLC->skillh->skillName(sid);
break; break;
case HERO_SPECIAL:
str << VLC->heroh->heroes[sid]->name;
break;
default: default:
//todo: handle all possible sources //todo: handle all possible sources
str << "Unknown"; str << "Unknown";

View File

@ -552,7 +552,7 @@ void CGHeroInstance::recreateSpecialtyBonuses(std::vector<HeroSpecial *> & speci
for(HeroSpecial * hs : specialtyDeprecated) for(HeroSpecial * hs : specialtyDeprecated)
{ {
for(std::shared_ptr<Bonus> b : SpecialtyBonusToBonuses(HeroSpecialToSpecialtyBonus(*hs))) for(std::shared_ptr<Bonus> b : SpecialtyBonusToBonuses(HeroSpecialToSpecialtyBonus(*hs), type->ID.getNum()))
addNewBonus(b); addNewBonus(b);
} }
} }