public UpgradeEntry RollEntryFromSubList(UpgradeEntry[] list, NetworkRandom nr, int min, DateTime date, ref string log, float linkRerollChance) { UpgradeEntry r = null; CalculateLimit(list, date); float rand = nr.Float(min < 0 ? 0f : list[min].RandomLimit, 1f); for (int i = 0; i < list.Length; i++) { UpgradeEntry u = list[i]; if (rand <= u.RandomLimit && CheckUpgradeCond(u, date)) { r = u; break; } } log += $" -> {r.ID} ({rand}, {min}, {list[0].Name})"; if (r.ListLink && nr.Float(0f, 1f) <= linkRerollChance) { UpgradeEntry li = RollEntryFromMatchingSubList(r.ID, nr, date, ref log, linkRerollChance); if (li != null) { r = li; } } return(r); }