private int CalculateAppeal(AppealType targetAppeal, IIdol idol, bool isSupportMember, bool encore = false) { if (idol == null) { return(0); } var rate = 1.0; if (!isSupportMember) { if (EnableRoomEffect) { rate += 0.1; } rate += GetAppealUpRate(idol, Unit?.Center, Guest, targetAppeal); rate += GetAppealUpRate(idol, Guest, Guest, targetAppeal); } if (GrooveBurst != null) { if (encore) { if (Song != null && Song.Type.HasFlag(idol.Category)) { rate += 0.3; } } else if (GrooveType.HasFlag(idol.Category)) { rate += 0.3; } if (GrooveBurst.Value.HasFlag(targetAppeal)) { rate += 1.5; } } else if (Song != null && Song.Type.HasFlag(idol.Category)) { rate += 0.3; } return((int)Math.Ceiling(Math.Round((int)idol.GetType().GetProperty(targetAppeal.ToString()).GetValue(idol) * rate * (isSupportMember ? 0.5 : 1), 3))); }