public override void ModifyTooltips(Item item, List <TooltipLine> tooltips) { var config = LockedAbilitiesConfig.Instance; TooltipLine tip; if (item.wingSlot != -1) { if (config.Get <bool>(nameof(config.WingsRequirePixieDust))) { tip = new TooltipLine(this.mod, "LockedAbiltiesWingFuel", "Wings require pixie dust to use."); tip.overrideColor = Color.Yellow; tooltips.Add(tip); } } else { switch (item.type) { case ItemID.RocketBoots: case ItemID.SpectreBoots: case ItemID.LightningBoots: case ItemID.FrostsparkBoots: if (config.Get <bool>(nameof(config.RocketBootsRequireGels))) { tip = new TooltipLine(this.mod, "LockedAbiltiesRocketFuel", "Rocket boots require gels to use."); tip.overrideColor = Color.Yellow; tooltips.Add(tip); } break; case ItemID.CloudinaBottle: case ItemID.CloudinaBalloon: case ItemID.BlizzardinaBottle: case ItemID.BlizzardinaBalloon: case ItemID.SandstorminaBottle: case ItemID.SandstorminaBalloon: case ItemID.FartInABalloon: case ItemID.FartinaJar: case ItemID.BalloonHorseshoeFart: case ItemID.TsunamiInABottle: int chainAmt = config.Get <int>(nameof(config.GrappleRequiresChainAmount)); if (chainAmt > 0 && ItemAttributeLibraries.IsGrapple(item)) { tip = new TooltipLine(this.mod, "LockedAbilitiesGrappleChainAmmo", "Consumes " + chainAmt + " chain(s) per use"); ItemInformationAttributeLibraries.ApplyTooltipAt(tooltips, tip); } if (config.Get <bool>(nameof(config.DoubleJumpsRequireGels))) { tip = new TooltipLine(this.mod, "LockedAbiltiesJumpFuel", "Double jump items require gels to use."); tip.overrideColor = Color.Yellow; tooltips.Add(tip); } break; } } }
/// <summary> /// Loosely assesses player's relative level of power. Factors include appraisals of inventory items, player's defense, /// and player's life. /// </summary> /// <param name="player"></param> /// <returns></returns> public static float LooselyAssessPower(Player player) { float armorCount = 0, miscCount = 0; float hotbarTech = 0, armorTech = 0, miscTech = 0; for (int i = 0; i < PlayerLibraries.InventoryHotbarSize; i++) { Item item = player.inventory[i]; if (item == null || item.IsAir || !ItemAttributeLibraries.IsGameplayRelevant(item)) { continue; } float tech = ItemAttributeLibraries.LooselyAppraise(item); hotbarTech = hotbarTech > tech ? hotbarTech : tech; } int maxArmorSlot = 8 + player.extraAccessorySlots; for (int i = 0; i < maxArmorSlot; i++) { Item item = player.inventory[i]; if (item == null || item.IsAir || !ItemAttributeLibraries.IsGameplayRelevant(item)) { continue; } armorTech += ItemAttributeLibraries.LooselyAppraise(item); armorCount += 1; } for (int i = 0; i < player.miscEquips.Length; i++) { Item item = player.miscEquips[i]; if (item == null || item.IsAir || !ItemAttributeLibraries.IsGameplayRelevant(item)) { continue; } miscTech += ItemAttributeLibraries.LooselyAppraise(item); miscCount += 1; } float techFactor = armorTech / (armorCount * ItemRarityAttributeLibraries.HighestVanillaRarity); techFactor += miscTech / (miscCount * ItemRarityAttributeLibraries.HighestVanillaRarity); techFactor += hotbarTech + hotbarTech; techFactor /= 4; float defenseFactor = 1f + ((float)player.statDefense * 0.01f); float addedVitality = (float)player.statLifeMax / 20f; float vitalityFactor = addedVitality * defenseFactor; return((techFactor + techFactor + vitalityFactor) / 3f); }
public override bool OnPickup(Item item, Player player) { if (ItemAttributeLibraries.IsGrapple(item)) { InboxAPIMirrorsLibraries.SetMessage( "GrappletechGrappleChanges", "Grappletech: Grappling hooks must now be used on only wood objects.", false ); } return(base.OnPickup(item, player)); }
public bool EnablesMiscItem(Player player, int slot, Item item) { if (!LockedAbilitiesConfig.Instance.Get <bool>(nameof(LockedAbilitiesConfig.GrappleHarnessEnabled))) { return(false); } if (ItemAttributeLibraries.IsGrapple(item)) { return(true); } return(false); }
//////////////// /// <summary> /// Gets the player's grappling item. /// </summary> /// <param name="player"></param> /// <returns></returns> public static Item GetGrappleItem(Player player) { if (ItemAttributeLibraries.IsGrapple(player.miscEquips[4])) { return(player.miscEquips[4]); } for (int i = 0; i < PlayerItemLibraries.VanillaInventorySize; i++) { if (Main.projHook[player.inventory[i].shoot]) { return(player.inventory[i]); } } return(null); }
public override void ModifyTooltips(Item item, List <TooltipLine> tooltips) { if (!ItemAttributeLibraries.IsGrapple(item)) { return; } var config = GrappletechConfig.Instance; if (!config.Get <bool>(nameof(config.GrappleableWoodAndPlatforms))) { return; } string modName = "[c/FFFF88:" + GrappletechMod.Instance.DisplayName + "] - "; string text = "Only works on wood and platforms"; TooltipLine tip = new TooltipLine(this.mod, "Grappletech", modName + text); ItemInformationAttributeLibraries.ApplyTooltipAt(tooltips, tip); }
public override bool PreOpenVanillaBag(string context, Player player, int arg) { var mymod = (NihilismMod)this.mod; var myworld = ModContent.GetInstance <NihilismWorld>(); if (myworld.Logic == null) { LogLibraries.WarnOnce("Logic not loaded."); return(base.PreOpenVanillaBag(context, player, arg)); } if (!myworld.Logic.AreItemFiltersEnabled()) { return(base.PreOpenVanillaBag(context, player, arg)); } IList <Item> containerInvIndexes = player.inventory .SafeWhere((item) => { if (item == null || item.IsAir) { return(false); } if (ItemAttributeLibraries.GetVanillaContainerContext(item) != context) { return(false); } if (arg != 0) { return(item.type == arg); } return(true); }) .ToList(); if (containerInvIndexes.Count == 0) { LogLibraries.Alert("Unknown bag of context " + context + ", " + arg); return(base.PreOpenVanillaBag(context, player, arg)); // Shouldn't happen? } Item containerItem = containerInvIndexes.FirstOrDefault(); bool isAir = containerItem?.IsAir ?? true; if (isAir) { int containerType = arg != 0 ? arg : ItemCommonGroupsLibraries.GetVanillaContainerItemTypes(context)[0]; containerItem = new Item(); containerItem.SetDefaults(containerType, true); } bool _; bool canOpen = myworld.Logic.DataAccess.IsItemEnabled(containerItem, out _, out _); if (!canOpen) { if (containerInvIndexes.Count > 1 || isAir) { Main.NewText("Due to a tModLoader bug, opening blacklisted bags and boxes will sometimes consume the item. Sorry. :(", Color.Red); } return(false); } return(base.PreOpenVanillaBag(context, player, arg)); }