Example #1
0
        /// <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;
            }
        }
Example #2
0
        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);
        }
Example #3
0
        public PawnKindItem GetNextAsPawn(Action <string> errorCallback)
        {
            PawnKindItem pawn = GetNextAsPawn();

            if (pawn == null)
            {
                errorCallback.Invoke(_lastArgument);
            }

            return(pawn);
        }
Example #4
0
        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);
        }
Example #5
0
        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;
        }
Example #6
0
        public bool TryGetNextAsPawn(out PawnKindItem pawn)
        {
            pawn = GetNextAsPawn();

            return(!(pawn is null));
        }