public static List <Player> FindTuxiTargets(TrustedAI ai, Player player, int max) { List <Player> result = new List <Player>(); List <Player> enemies = ai.GetEnemies(player); ai.SortByHandcards(ref enemies, false); Room room = ai.Room; Player zhugeliang = ai.FindPlayerBySkill("kongcheng"); if (zhugeliang != null && ai.IsFriend(zhugeliang) && zhugeliang.HandcardNum == 1 && ai.GetEnemisBySeat(zhugeliang) > 0 && zhugeliang != player) { if (ai.IsWeak(zhugeliang)) { result.Add(zhugeliang); } else { List <int> ids = ai.GetKnownCards(zhugeliang); if (ids.Count == 1) { int id = ids[0]; if (!ai.IsCard(id, Jink.ClassName, zhugeliang) && !!ai.IsCard(id, Peach.ClassName, zhugeliang) && !ai.IsCard(id, Analeptic.ClassName, zhugeliang)) { result.Add(zhugeliang); } } } } foreach (Player p in enemies) { if (result.Contains(p) || !RoomLogic.CanGetCard(room, player, p, "h")) { continue; } List <int> ids = ai.GetKnownCards(p); foreach (int id in ids) { WrappedCard card = room.GetCard(id); if (card.Name == Peach.ClassName || card.Name == Nullification.ClassName || card.Name.Contains(Nullification.ClassName)) { result.Add(p); break; } } if (result.Count >= max) { break; } } if (result.Count < max) { foreach (Player p in enemies) { if (result.Contains(p) || !RoomLogic.CanGetCard(room, player, p, "h")) { continue; } if (ai.HasSkill("jijiu|qingnang|leiji|jieyin|beige|kanpo|liuli|qiaobian|zhiheng|guidao|tianxiang|lijian", p)) { result.Add(p); } if (result.Count >= max) { break; } } } if (result.Count < max) { foreach (Player p in enemies) { if (result.Contains(p) || !RoomLogic.CanGetCard(room, player, p, "h")) { continue; } int x = p.HandcardNum; bool good = true; if (x == 1 && ai.NeedKongcheng(p)) { good = false; } if (x >= 2 && ai.HasSkill("tuntian", p)) { good = false; } if (good) { result.Add(p); } if (result.Count >= max) { break; } } } return(result); }