public ActionResult DoSpecialAction(int position, IArmy myArmy, IArmy enemyArmy, Random random = null) { if (random == null) { random = new Random(); } double probability = random.NextDouble(); //для лечения сгенерированная вероятность должна принадлежать промежутку [0, HealingProbability) if (probability >= MagicProbability) { return(ActionResult.Empty); } List <ICanBeCloned> availibleForCloning = GetAvailibleForCloning(position, myArmy); if (availibleForCloning.Count == 0) { return(ActionResult.Empty); } IUnit unitForCloning = (IUnit)availibleForCloning[random.Next(0, availibleForCloning.Count)]; myArmy.AddUnit(unitForCloning, position + 1); return(new ActionResult(this, unitForCloning, ActionResultType.Cloning)); }