private double GetSkillTriggerProbability(OwnedIdol idol, IIdol center, IIdol guestCenter, Song song)
{
if (idol == null || idol.Skill == null)
{
return 0;
}
var rate = idol.Skill.EstimateProbability(idol.SkillLevel);
if (center != null && center.CenterEffect is CenterEffect.SkillTriggerProbabilityUp)
{
var e = center.CenterEffect as CenterEffect.SkillTriggerProbabilityUp;
rate *= 1+(e.Targets.HasFlag(idol.Category) ? e.Rate : 0);
}
if (guestCenter != null && guestCenter.CenterEffect is CenterEffect.SkillTriggerProbabilityUp)
{
var e = guestCenter.CenterEffect as CenterEffect.SkillTriggerProbabilityUp;
rate *= 1+(e.Targets.HasFlag(idol.Category) ? e.Rate : 0);
}
if (song != null && song.Type.HasFlag(idol.Category))
{
rate *= 1.3;
}
return Math.Min(rate, 1.0);
}