private static string PointsView(Option artefact)
        {
            if (artefact.Runic > 0)
            {
                List <string> points = new List <string>();

                Dictionary <int, Option> runicVersions = artefact.AllRunicVersions();

                foreach (Option runic in runicVersions.Values)
                {
                    points.Add(runic.Points.ToString());
                }

                return(String.Format(" {0} pts", String.Join("/", points.ToArray())));
            }
            else
            {
                return(String.Format(" {0} pts", artefact.Points));
            }
        }
        public static void ArmyGridDropArtefact(int id, int unitID)
        {
            Option prevRunicItem          = null;
            double prevRunicPointsPenalty = 0;

            Unit   unit     = Army.Data.Units[unitID];
            Option artefact = ArmyBook.Data.Artefact[id];

            if (artefact.Runic > 0)
            {
                Dictionary <int, Option> versions = artefact.AllRunicVersions();

                Option currentItem = unit.GetCurrentRunicItemByName(artefact.Name);

                if ((currentItem != null) && (currentItem.Runic >= versions.Count))
                {
                    return;
                }

                else if (currentItem != null)
                {
                    prevRunicItem          = currentItem;
                    prevRunicPointsPenalty = currentItem.Points;

                    id = versions[currentItem.Runic + 1].ID;
                }

                if (Army.Checks.IsRunicCombinationAlreadyExist(unit, ArmyBook.Data.Artefact[id]))
                {
                    Error("No more than one item may carry the same combination of runes");
                    return;
                }
            }

            if (artefact.Virtue)
            {
                artefact.Points = Army.Params.GetVirtuePoints(id);
            }

            if (!Interface.Checks.EnoughPointsForAddArtefact(id, prevRunicPointsPenalty))
            {
                Error("Not enough points add an item");
            }

            else if (!Interface.Checks.EnoughUnitPointsForAddArtefact(id, unit, pointsPenalty: prevRunicPointsPenalty))
            {
                Error(String.Format("Not enough magic item {0} to add an item", (unit.MagicItemCount > 0 ? "slots" : "points")));
            }

            else if (!Army.Checks.IsArmyUnitsPointsPercentOk(unit.Type, artefact.Points))
            {
                Error("For this type, a point cost limit has been reached");
            }

            else if (artefact.TypeUnitIncrese && Army.Checks.IsArmyFullForTypeIcrease(unit))
            {
                Error("Cant upgrade unit type: the army already has many such units");
            }

            else
            {
                if (prevRunicItem != null)
                {
                    unit.Options.Remove(prevRunicItem);
                }

                if ((ArmyBook.Data.Artefact[id].TypeUnitIncrese) && (unit.Type == Unit.UnitType.Core))
                {
                    unit.Type = Unit.UnitType.Special;
                }

                else if ((ArmyBook.Data.Artefact[id].TypeUnitIncrese) && (unit.Type == Unit.UnitType.Special))
                {
                    unit.Type = Unit.UnitType.Rare;
                }

                unit.AddAmmunition(id);
                Interface.Reload.ReloadArmyData();
                Interface.UnitDetails.UpdateUnitDescription(unitID, unit);

                bool multiple = artefact.Multiple || artefact.Virtue || (artefact.Runic > 0);
                bool honours  = artefact.Honours && (artefact.Points > 0);

                if (!multiple && !honours && (artefact.Type != Option.OptionType.Powers))
                {
                    Interface.Mod.SetArtefactAlreadyUsed(id, true);
                }

                Army.Mod.ChangeGeneralIfNeed();
            }
        }