Beispiel #1
0
s8 Skill::GetLuckModifiers(u8 level, std::string* strs = NULL)
{
    Secondary skill(Secondary::LUCK, level);

    if(skill.GetValues() && strs)
    {
        strs->append(skill.GetName());
        StringAppendModifiers(*strs, skill.GetValues());
        strs->append("\n");
    }

    return skill.GetValues();
}
int ArtifactsModifiersResult(int type, const u8* arts, u32 size, const HeroBase & base, std::string* strs)
{
    int result = 0;

    for(u32 ii = 0; ii < size; ++ii)
    {
	    const Artifact art(arts[ii]);

    	    if(art.isValid())
    	    {
		int acount = base.HasArtifact(art);
		if(acount)
		{
		    s32 mod = art.ExtraValue();

		    switch(art())
		    {
			case Artifact::SWORD_BREAKER:		if(type == MDF_ATTACK) mod = 1; break;
			// power
			case Artifact::BROACH_SHIELDING:	if(type == MDF_POWER) mod = -2; break;
			// morale/luck
			case Artifact::BATTLE_GARB:		if(type == MDF_MORALE || type == MDF_LUCK) mod = 10; break;
			case Artifact::MASTHEAD:		if(type == MDF_MORALE || type == MDF_LUCK) mod = base.Modes(Heroes::SHIPMASTER) ? art.ExtraValue() : 0; break;
			// morale
			case Artifact::FIZBIN_MISFORTUNE:	if(type == MDF_MORALE) mod = -art.ExtraValue(); break;
			default: break;
		    }

    		    result += mod * acount;

    		    if(strs && mod)
    		    {
        		strs->append(art.GetName());
			StringAppendModifiers(*strs, mod);
        		strs->append("\n");
		    }
		}
	    }
    }

    return result;
}