public class VampiirStrength : VampiirAbility
{
public VampiirStrength(DBAbility dba, int level)
: base(dba, level, eProperty.Strength)
{
}
public override int GetAmountForLevel(int level)
{
//(+3 strength every level starting level 6),
return level < 6 ? 0 : (level - 5) * 3;
}
}
protected virtual List<Ability> GetAbilitiesForLiving(GameLiving living, int level)
{
// Select only Enabled and Max Level Abilities
List<Ability> abs = SkillBase.GetSpecAbilityList(KeyName, living is GamePlayer ? ((GamePlayer)living).CharacterClass.ID : 0);
// Get order of first appearing skills
IOrderedEnumerable<Ability> order = abs.GroupBy(item => item.KeyName)
.Select(ins => ins.OrderBy(it => it.SpecLevelRequirement).First())
.Where(item => item.SpecLevelRequirement <= level)
.OrderBy(item => item.SpecLevelRequirement)
.ThenBy(item => item.ID);
// Get best of skills
List<Ability> best = abs.Where(item => item.SpecLevelRequirement <= level)
.GroupBy(item => item.KeyName)
.Select(ins => ins.OrderByDescending(it => it.SpecLevelRequirement).First()).ToList();
List<Ability> results = new List<Ability>();
// make some kind of "Join" between the order of appearance and the best abilities.
foreach (Ability ab in order)
{
for (int r = 0 ; r < best.Count ; r++)
{
if (best[r].KeyName == ab.KeyName)
{
// WHRIA
if (best[r].KeyName.Contains("Vampiir Dex")
|| best[r].KeyName.Contains("Vampiir Qui")
|| best[r].KeyName.Contains("Vampiir Str")
|| best[r].KeyName.Contains("Vampiir Con")
)
{
best[r].Level = living.Level;
}
// END
results.Add(best[r]);
best.RemoveAt(r);
break;
}
}
}
return results;
}
Users browsing this forum: No registered users and 1 guest