1 using Microsoft.Xna.Framework;
3 using System.Collections.Generic;
49 Rarity = mod.GetNullModifierRarity();
174 public override void Load(Item item, TagCompound tag)
177 if (!item.IsModifierRollableItem())
181 else if (tag.ContainsKey(
"SaveVersion"))
183 int saveVersion = tag.GetInt(
"SaveVersion");
184 if (saveVersion < 14)
190 Rarity = ModifierRarityIO.
Load(item, tag.GetCompound(
"ModifierRarity"));
191 Modifiers = ModifierPoolIO.
Load(item, tag.GetCompound(
"ModifierPool"));
200 public override TagCompound
Save(Item item)
202 TagCompound tag =
new TagCompound
205 {
"SaveVersion", SAVE_VERSION},
208 {
"ModifierRarity", ModifierRarityIO.Save(item,
Rarity)},
209 {
"ModifierPool", ModifierPoolIO.Save(item,
Modifiers)}
218 public override void NetReceive(Item item, BinaryReader reader)
220 bool hasPool = reader.ReadBoolean();
235 public override void NetSend(Item item, BinaryWriter writer)
238 writer.Write(hasPool);
243 ModifierPoolIO.NetSend(
Modifiers, item, writer);
313 float defColorVal = Main.mouseTextColor / 255f;
314 int alphaColor = Main.mouseTextColor;
316 if (cpStat == 0f && rStat != 0f)
321 color =
new Color((byte)(120f * defColorVal), (byte)(190f * defColorVal), (byte)(120f * defColorVal), alphaColor);
322 return "+" + rStat.ToString(CultureInfo.InvariantCulture);
325 color =
new Color((byte)(190f * defColorVal), (byte)(120f * defColorVal), (byte)(120f * defColorVal), alphaColor);
326 return rStat.ToString(CultureInfo.InvariantCulture);
329 double diffStat = rStat - cpStat;
330 diffStat = diffStat / cpStat * 100.0;
331 diffStat = Math.Round(diffStat);
337 color =
new Color((byte)(120f * defColorVal), (byte)(190f * defColorVal), (byte)(120f * defColorVal), alphaColor);
338 return "+" + diffStat.ToString(CultureInfo.InvariantCulture);
341 color =
new Color((byte)(190f * defColorVal), (byte)(120f * defColorVal), (byte)(120f * defColorVal), alphaColor);
342 return diffStat.ToString(CultureInfo.InvariantCulture);
361 var vanillaTooltips = tooltips.Where(x => x.mod.Equals(
"Terraria")).ToArray();
362 var baseItem =
new Item();
363 baseItem.netDefaults(item.netID);
370 var prefixItem = baseItem.Clone();
371 prefixItem.Prefix(item.prefix);
375 foreach (var tooltipLine
in vanillaTooltips)
377 double outNumber = 0d;
378 string newTooltipLine = tooltipLine.text;
379 Color? newColor = tooltipLine.overrideColor;
380 string tooltipEndText =
381 new string(tooltipLine.text
383 .TakeWhile(x => !
char.IsDigit(x))
393 if (tooltipLine.Name.Equals(
"PrefixDamage"))
395 newTooltipLine = baseItem.damage > 0
399 else if (tooltipLine.Name.Equals(
"PrefixSpeed"))
401 newTooltipLine = baseItem.useAnimation <= 0
402 ?
GetPrefixNormString(baseItem.useAnimation, prefixItem.useAnimation, ref outNumber, ref newColor)
403 :
GetPrefixNormString(prefixItem.useAnimation, baseItem.useAnimation, ref outNumber, ref newColor);
405 else if (tooltipLine.Name.Equals(
"PrefixCritChance"))
407 outNumber = prefixItem.crit - baseItem.crit;
408 float defColorVal = Main.mouseTextColor / 255f;
409 int alphaColor = Main.mouseTextColor;
413 newTooltipLine +=
"+";
414 newColor =
new Color((byte)(120f * defColorVal), (byte)(190f * defColorVal), (byte)(120f * defColorVal), alphaColor);
418 newColor =
new Color((byte)(190f * defColorVal), (byte)(120f * defColorVal), (byte)(120f * defColorVal), alphaColor);
421 newTooltipLine += outNumber.ToString(CultureInfo.InvariantCulture);
423 else if (tooltipLine.Name.Equals(
"PrefixUseMana"))
425 if (baseItem.mana != 0)
427 float defColorVal = Main.mouseTextColor / 255f;
428 int alphaColor = Main.mouseTextColor;
429 newTooltipLine =
GetPrefixNormString(baseItem.mana, prefixItem.mana, ref outNumber, ref newColor);
430 newColor = prefixItem.mana < baseItem.mana
431 ?
new Color((byte)(120f * defColorVal), (byte)(190f * defColorVal), (byte)(120f * defColorVal), alphaColor)
432 :
new Color((byte)(190f * defColorVal), (byte)(120f * defColorVal), (byte)(120f * defColorVal), alphaColor);
435 else if (tooltipLine.Name.Equals(
"PrefixSize"))
437 newTooltipLine = baseItem.scale > 0
441 else if (tooltipLine.Name.Equals(
"PrefixShootSpeed"))
443 newTooltipLine = baseItem.shootSpeed > 0
444 ?
GetPrefixNormString(baseItem.shootSpeed, prefixItem.shootSpeed, ref outNumber, ref newColor)
445 :
GetPrefixNormString(prefixItem.shootSpeed, baseItem.shootSpeed, ref outNumber, ref newColor);
447 else if (tooltipLine.Name.Equals(
"PrefixKnockback"))
449 newTooltipLine = baseItem.knockBack > 0
450 ?
GetPrefixNormString(baseItem.knockBack, prefixItem.knockBack, ref outNumber, ref newColor)
451 :
GetPrefixNormString(prefixItem.knockBack, baseItem.knockBack, ref outNumber, ref newColor);
458 int ttlI = tooltips.FindIndex(x => x.mod.Equals(tooltipLine.mod) && x.Name.Equals(tooltipLine.Name));
466 tooltips.RemoveAt(ttlI);
470 tooltips[ttlI].text = $
"{newTooltipLine}{tooltipEndText}";
471 tooltips[ttlI].overrideColor = newColor;
478 $
"A problem occurred during modification of the item's tooltip." +
479 $
"\nItem in question: {item.AffixName()}",
485 int i = tooltips.FindIndex(x => x.mod ==
"Terraria" && x.Name ==
"ItemName");
488 var namelayer = tooltips[i];
492 namelayer.text = $
"{Rarity.ItemPrefix} {namelayer.text}";
497 namelayer.text = $
"{namelayer.text} {Rarity.ItemSuffix}";
505 tooltips[i] = namelayer;
510 bool isVanityIgnored = cheatedItemHackGlobalItem.
ShouldBeIgnored(item, Main.LocalPlayer);
511 Color? inactiveColor = isVanityIgnored ? (Color?)Color.DarkSlateGray : null;
517 tooltips.Insert(i,
new TooltipLine(mod,
"Loot: Modifier:Rarity", $
"[{Rarity.RarityName}]{(isVanityIgnored ? " [IGNORED]
" : "")}")
519 overrideColor = inactiveColor ??
Rarity.
Color * Main.inventoryScale
523 i = tooltips.Count - 1;
525 foreach (var modifier
in pool.Modifiers)
527 foreach (var tt
in modifier.GetTooltip().Build())
529 tooltips.Insert(++i,
new TooltipLine(mod, $
"Loot: Modifier:Line:{i}", $
"{modifier.GetFormattedUniqueName()} {tt.Text}".TrimStart())
531 overrideColor = inactiveColor ?? (tt.Color ?? Color.White) * Main.inventoryScale
538 var ttl =
new TooltipLine(mod,
"Loot: Modifier:Sealed",
"Modifiers cannot be changed")
540 overrideColor = inactiveColor ?? Color.Cyan
542 tooltips.Insert(++i, ttl);
545 foreach (var e
in pool.Modifiers)
547 e.ModifyTooltips(item, tooltips);
static void UpdateGraphicsEntities(List< Modifier > modifiers, Item item)
virtual void NetReceive(Item item, BinaryReader reader)
Allows the modder to do custom NetReceive
This class is responsible for handling ShaderEntity and GlowmaskEntity that come from the Modifiers o...
virtual void NetSend(Item item, BinaryWriter writer)
Allows modder to do custom NetSend here
override bool CloneNewInstances
string GetPrefixNormString(float cpStat, float rStat, ref double num, ref Color?color)
override TagCompound Save(Item item)
Can detect if an item was activated via cheats
Defines an item that may be modified by modifiers from mods
virtual void Load(Item item, TagCompound tag)
Allows modder to do custom loading here Use the given TC to pull data you saved using Save(Item...
override void Load(Item item, TagCompound tag)
Defines the rarity of a modifier
virtual void Load(Item item, TagCompound tag)
Allows modder to do custom loading here Use the given TagCompound to pull data you saved using Save(I...
override void ModifyTooltips(Item item, List< TooltipLine > tooltips)
Will modify vanilla tooltips to add additional information for the affected item's modifiers ...
static List< Modifier > GetActivePool(Item item)
readonly List< Modifier > Modifiers
override bool NeedsSaving(Item item)
static LootModItem GetInfo(Item item)
virtual string ItemSuffix
virtual string ItemPrefix
static CheatedItemHackGlobalItem GetInfo(Item item)
bool IsActivated
Keeps track of if the particular item was activated ('delegated') Specific usecase see CursedEffect a...
FiniteModifierPool Modifiers
bool ShouldBeIgnored(Item item, Player player)
override bool InstancePerEntity
override void NetReceive(Item item, BinaryReader reader)
override GlobalItem Clone(Item item, Item itemClone)
Attempts to roll new modifiers Has a set chance to hit a predefined pool of modifiers ...
Defines a "Null" rarity which represents no rarity safely Cannot be rolled normally ...
virtual void NetReceive(Item item, BinaryReader reader)
Allows the modder to do custom NetReceive
virtual Color OverrideNameColor
override void NetSend(Item item, BinaryWriter writer)