/// <summary> /// Loads pawns from the given partial data. /// </summary> /// <param name="partialData">A collection of partial data to load</param> public static void LoadPawnPartial([NotNull] IEnumerable <PawnKindItem> partialData) { var builder = new StringBuilder(); foreach (PawnKindItem partial in partialData) { PawnKindItem existing = PawnKinds.Find(i => i.DefName.Equals(partial.DefName)); if (existing == null) { if (partial.ColonistKindDef == null) { builder.Append($" - {partial.Data?.Mod ?? "UNKNOWN"}:{partial.DefName}\n"); continue; } PawnKinds.Add(partial); continue; } existing.Name = partial.Name; existing.Cost = partial.Cost; existing.Enabled = partial.Enabled; existing.Data = partial.Data; } }
public override bool CanHappen(string msg, [NotNull] Viewer viewer) { if (CommandBase.GetOrFindPawn(viewer.username) != null) { MessageHelper.ReplyToUser(viewer.username, "TKUtils.HasPawn".Localize()); return(false); } _map = Helper.AnyPlayerMap; if (_map == null) { MessageHelper.ReplyToUser(viewer.username, "TKUtils.NoMap".Localize()); return(false); } if (!CellFinder.TryFindRandomEdgeCellWith(p => _map.reachability.CanReachColony(p) && !p.Fogged(_map), _map, CellFinder.EdgeRoadChance_Neutral, out _loc)) { TkUtils.Logger.Warn("No reachable location to spawn a viewer pawn!"); return(false); } GetDefaultKind(); if (!TkSettings.PurchasePawnKinds) { return(CanPurchaseRace(viewer, _pawnKindItem)); } var worker = ArgWorker.CreateInstance(CommandFilter.Parse(msg).Skip(2)); if (!worker.TryGetNextAsPawn(out PawnKindItem temp) || _pawnKindItem?.ColonistKindDef == null) { if (worker.GetLast().NullOrEmpty()) { return(CanPurchaseRace(viewer, _pawnKindItem !)); } MessageHelper.ReplyToUser(viewer.username, "TKUtils.InvalidKindQuery".LocalizeKeyed(worker.GetLast())); return(false); } _pawnKindItem = temp; _kindDef = _pawnKindItem.ColonistKindDef; if (_kindDef.RaceProps.Humanlike) { return(CanPurchaseRace(viewer, _pawnKindItem)); } MessageHelper.ReplyToUser(viewer.username, "TKUtils.BuyPawn.Humanlike".Localize()); return(false); }
public PawnKindItem GetNextAsPawn(Action <string> errorCallback) { PawnKindItem pawn = GetNextAsPawn(); if (pawn == null) { errorCallback.Invoke(_lastArgument); } return(pawn); }
public static bool TryGetPawnKind(string input, out PawnKindItem kind) { if (input.StartsWith("$")) { input = input.Substring(1); kind = PawnKinds.Find(t => string.Equals(t.DefName, input)); } else { kind = PawnKinds.Find(t => string.Equals(t.Name.ToToolkit(), input.ToToolkit(), StringComparison.InvariantCultureIgnoreCase)); } return(kind != null); }
private void GetDefaultKind() { if (Data.TryGetPawnKind($"${RimWorld.PawnKindDefOf.Colonist.race.defName}", out PawnKindItem human) && (human !.Enabled || !TkSettings.PurchasePawnKinds)) { _kindDef = RimWorld.PawnKindDefOf.Colonist; _pawnKindItem = human; return; } PawnKindItem randomKind = Data.PawnKinds.FirstOrDefault(k => k.Enabled); if (randomKind == null) { TkUtils.Logger.Warn("Could not get next enabled race!"); return; } _kindDef = randomKind.ColonistKindDef; _pawnKindItem = randomKind; }
public bool TryGetNextAsPawn(out PawnKindItem pawn) { pawn = GetNextAsPawn(); return(!(pawn is null)); }