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(); } }