private void PerformAnimalLookup(string query, int quantity) { PawnKindDef kindDef = DefDatabase <PawnKindDef> .AllDefs.FirstOrDefault( i => i.RaceProps.Animal && (i.label.ToToolkit().EqualsIgnoreCase(query.ToToolkit()) || i.defName.ToToolkit().EqualsIgnoreCase(query.ToToolkit())) ); if (kindDef == null) { return; } ThingItem item = Data.Items.FirstOrDefault(i => i.DefName.EqualsIgnoreCase(kindDef.defName)); if (item == null || item.Cost <= 0) { return; } if (!PurchaseHelper.TryMultiply(item.Cost, quantity, out int result)) { MessageHelper.ReplyToUser(_invoker, "TKUtils.Overflowed".Localize()); return; } NotifyLookupComplete("TKUtils.Price.Limited".LocalizeKeyed(kindDef.defName.CapitalizeFirst(), result.ToString("N0"))); }
private void PerformItemLookup([NotNull] string query, int quantity) { var worker = ArgWorker.CreateInstance(query); if (!worker.TryGetNextAsItem(out ArgWorker.ItemProxy item) || !item.IsValid() || item.Thing?.Cost <= 0) { return; } if (item.TryGetError(out string error)) { MessageHelper.ReplyToUser(_invoker, error); return; } int price = item.Quality.HasValue ? item.Thing !.GetItemPrice(item.Stuff, item.Quality.Value) : item.Thing !.GetItemPrice(item.Stuff); if (!PurchaseHelper.TryMultiply(price, quantity, out int total)) { MessageHelper.ReplyToUser(_invoker, "TKUtils.Overflowed".Localize()); return; } NotifyLookupComplete("TKUtils.Price.Limited".LocalizeKeyed(item.AsString().CapitalizeFirst(), total.ToString("N0"))); }
public override bool CanHappen(string msg, [NotNull] Viewer viewer) { if (!PurchaseHelper.TryGetPawn(viewer.username, out _pawn)) { MessageHelper.ReplyToUser(viewer.username, "TKUtils.NoPawn".Localize()); return(false); } var worker = ArgWorker.CreateInstance(CommandFilter.Parse(msg).Skip(2)); if (!worker.TryGetNextAsItem(out ArgWorker.ItemProxy item) || !item.IsValid()) { MessageHelper.ReplyToUser(viewer.username, "TKUtils.InvalidItemQuery".LocalizeKeyed(item?.Thing?.Name ?? worker.GetLast())); return(false); } _buyableItem = item.Thing; if (item.TryGetError(out string error)) { MessageHelper.ReplyToUser(viewer.username, error); return(false); } if (!worker.TryGetNextAsInt(out _amount, 1, viewer.GetMaximumPurchaseAmount(_buyableItem.Cost))) { _amount = 1; } if (!PurchaseHelper.TryMultiply(_buyableItem.Cost, _amount, out int cost)) { MessageHelper.ReplyToUser(viewer.username, "TKUtils.Overflowed".Localize()); return(false); } if (!viewer.CanAfford(cost)) { MessageHelper.ReplyToUser(viewer.username, "TKUtils.InsufficientBalance".LocalizeKeyed(cost.ToString("N0"), viewer.GetViewerCoins().ToString("N0"))); return(false); } List <ResearchProjectDef> prerequisites = item.Thing.Thing.GetUnfinishedPrerequisites(); if (BuyItemSettings.mustResearchFirst && prerequisites.Count > 0) { MessageHelper.ReplyToUser( viewer.username, "TKUtils.ResearchRequired".LocalizeKeyed(item.Thing.Thing.LabelCap.RawText, prerequisites.Select(p => p.LabelCap.RawText).SectionJoin()) ); return(false); } foreach (IUsabilityHandler h in CompatRegistry.AllUsabilityHandlers) { if (!h.IsUsable(item.Thing.Thing)) { continue; } _handler = h; break; } if (_handler == null || item.Thing.ItemData?.IsUsable != true) { MessageHelper.ReplyToUser(viewer.username, "TKUtils.DisabledItem".Localize()); return(false); } _buyableItem = item !.Thing; return(true); }