public override int OnSelectPlace(long cardId, int player, CardLocation location, int available) { if (location == CardLocation.SpellZone) { if (cardId == CardId.KnightmarePhoenix || cardId == CardId.CrystronNeedlefiber) { ClientCard b = Bot.MonsterZone.GetFirstMatchingCard(card => card.Id == CardId.BorreloadSavageDragon); int zone = (1 << (b?.Sequence ?? 0)) & available; if (zone > 0) { return(zone); } } if ((available & Zones.z0) > 0) { return(Zones.z0); } if ((available & Zones.z1) > 0) { return(Zones.z1); } if ((available & Zones.z2) > 0) { return(Zones.z2); } if ((available & Zones.z3) > 0) { return(Zones.z3); } if ((available & Zones.z4) > 0) { return(Zones.z4); } } if (location == CardLocation.MonsterZone) { if (cardId == CardId.SheorcustDingirsu) { ClientCard l = Bot.MonsterZone.GetFirstMatchingCard(card => card.Id == CardId.ThePhantomKnightsofRustyBardiche); int zones = (l?.GetLinkedZones() ?? 0) & available; if ((zones & Zones.z4) > 0) { return(Zones.z4); } if ((zones & Zones.z3) > 0) { return(Zones.z3); } if ((zones & Zones.z2) > 0) { return(Zones.z2); } if ((zones & Zones.z1) > 0) { return(Zones.z1); } if ((zones & Zones.z0) > 0) { return(Zones.z0); } } if (cardId == CardId.GalateaTheOrcustAutomaton) { int zones = Bot.GetLinkedZones() & available; if ((zones & Zones.z0) > 0) { return(Zones.z0); } if ((zones & Zones.z2) > 0) { return(Zones.z2); } if ((zones & Zones.z1) > 0) { return(Zones.z1); } if ((zones & Zones.z3) > 0) { return(Zones.z3); } if ((zones & Zones.z4) > 0) { return(Zones.z4); } } if (cardId == CardId.KnightmarePhoenix) { if ((Enemy.MonsterZone[5]?.HasLinkMarker(CardLinkMarker.Top) ?? false) && (available & Zones.z3) > 0) { return(Zones.z3); } if ((Enemy.MonsterZone[6]?.HasLinkMarker(CardLinkMarker.Top) ?? false) && (available & Zones.z1) > 0) { return(Zones.z1); } } if ((available & Zones.z6) > 0) { return(Zones.z6); } if ((available & Zones.z5) > 0) { return(Zones.z5); } if ((available & Zones.z1) > 0) { return(Zones.z1); } if ((available & Zones.z3) > 0) { return(Zones.z3); } if ((available & Zones.z0) > 0) { return(Zones.z0); } if ((available & Zones.z4) > 0) { return(Zones.z4); } if ((available & Zones.z2) > 0) { return(Zones.z2); } } return(0); }