Пример #1
0
        public override void ModifyTooltips(Item item, List <TooltipLine> tooltips)
        {
            if (item.IsValid() && item.Enchantable())
            {
                TooltipHack.FixTooltips(item, tooltips);

                try
                {
                    VitriBuff data = GetData(item).buff;
                    if (data != null)
                    {
                        int name = tooltips.FindIndex(a => a.mod == "Terraria" && a.Name == "ItemName");

                        if (name != -1)
                        {
                            tooltips.Insert(++name, new TooltipLine(Vitrium.Instance, "V:I:Bufftip", data.Name)
                            {
                                overrideColor = Terraria.ID.Colors.RarityPurple
                            });
                        }
                    }
                }
                catch (Exception e)
                {
                    Main.NewTextMultiline(e.ToString());
                }
            }
        }
Пример #2
0
        public static void AddBuff(this Player player, string buffname, int duration = 2)
        {
            buffname = buffname.ToLower();
            int id = VPlayer.GetData(player).GlobalID;

            if (AllPlayerBuffers.TryGetValue(id, out Dictionary <string, int> map))
            {
                if (!map.ContainsKey(buffname))
                {
                    int       vanilla = TranslateVanilla(buffname);
                    VitriBuff vitri   = TranslateVitri(buffname);

                    if ((vanilla != -1 && !player.buffImmune[vanilla])
                        ||
                        (vitri != null && !player.buffImmune[vitri.Type]))
                    {
                        map.Add(buffname, duration);
                    }
                }

                return;
            }

            throw new KeyNotFoundException($"Error in BuffCache.AddBuff: '{player.name}' was not given a buff cache!");
        }
Пример #3
0
        private static void LoadVitriBuffs()
        {
            Type[] types = Mod.Code.GetTypes();

            foreach (Type type in types)
            {
                if (!type.IsAbstract && type.IsSubclassOf(typeof(VitriBuff)))
                {
                    VitriBuff buff = TranslateVitri(type.Name);
                    string    name = type.Name.ToLower();
                    if (!VitriumBuffs.ContainsKey(name))
                    {
                        Vitrium.Logger.Debug(name);
                        VitriumBuffs.Add(name, buff.Type);
                    }
                }
            }

            Vitrium.Logger.Debug("");

            foreach (string name in VitriumBuffs.Keys)
            {
                Vitrium.Logger.Debug(TranslateVitri(name).Name);
            }
        }
Пример #4
0
        public override void PostUpdate()
        {
            if (Main.mouseItem != mouse)
            {
                mouse = Main.mouseItem;                 // cache mouse item
            }

            if (player.selectedItem != selected)
            {
                selected = player.selectedItem;                 // cache selected item
            }

            if (mouse != null && mouse.IsValid() && mouse.Enchantable() && (mouse.IsWeapon() || mouse.IsTool()))
            {
                VitriBuff data = VItem.GetData(mouse).buff;

                if (data != null)
                {
                    player.AddBuff(data.GetType().Name);
                }
            }
            else if (player.inventory[selected] != null &&
                     player.inventory[selected].IsValid() &&
                     player.inventory[selected].Enchantable() &&
                     (player.inventory[selected].IsWeapon() || player.inventory[selected].IsTool()))
            {
                VitriBuff data = VItem.GetData(player.inventory[selected]).buff;

                if (data != null)
                {
                    player.AddBuff(data.GetType().Name);
                }
            }

            if (equips.Length < 8 + player.extraAccessorySlots)
            {
                Array.Resize(ref equips, 8 + player.extraAccessorySlots);                 // account for dark heart and similar items
            }

            for (int i = 0; i < 8 + player.extraAccessorySlots; i++)
            {
                if (equips[i] != player.armor[i])
                {
                    equips[i] = player.armor[i];                     // cache player armor and accessories that aren't vanity or dyes
                    //Main.NewText($"Equipped {equips[i]?.Name}");
                }

                if (equips[i] != null && equips[i].IsValid() && equips[i].Enchantable())
                {
                    VitriBuff data = VItem.GetData(equips[i]).buff;

                    if (data != null)
                    {
                        player.AddBuff(data.GetType().Name);
                    }
                }
            }
        }
Пример #5
0
 public override void UpdateInventory(Item item, Player player)
 {
     if (!item.IsValid() || (item.IsValid() && !item.Enchantable()))
     {
         Hash = null;
         buff = null;
         return;
     }
 }
Пример #6
0
        public override bool PreAI(Projectile projectile)
        {
            if (projectile.minion && buff == null)
            {
                buff = VItem.GetData(Main.player[projectile.owner].inventory[Main.player[projectile.owner].selectedItem]).buff;
            }

            return(base.PreAI(projectile));
        }
Пример #7
0
        public override void NetReceive(Item item, BinaryReader reader)
        {
            Hash = reader.ReadString();
            if (Hash == "NULL")
            {
                Hash = null;
            }

            string buffname = reader.ReadString();

            buff = buffname == "NULL" ? null : (VitriBuff)Vitrium.Instance.GetBuff(buffname);
            buff?.NetReceive(item, reader);
        }
Пример #8
0
        public static void BuildWeightedBuffsFor(Item item)
        {
            WeightedBuffs.Clear();
            foreach (string name in VitriumBuffs.Keys)
            {
                VitriBuff buff = TranslateVitri(name);

                if (buff.IApplicableTo(item))
                {
                    WeightedBuffs.Add(buff, buff.Weight);
                    WeightedBuffs.Add(null, buff.Weight * 0.25d);
                }
            }
        }
Пример #9
0
        public VitriBuff[] NewBuffs(Item item)
        {
            VitriBuff[] ret = new VitriBuff[3];
            int         i   = 0;
            int         j   = 0;

            while (j < 3)
            {
                ret[i] = BuffCache.GetRandomBuff(item);
                if (ret[i] != null)
                {
                    i++;
                }
                j++;
            }
            return(ret);
        }
Пример #10
0
        public static VitriBuff TranslateVitri(string name)
        {
            name = name.ToLower();
            VitriBuff ret = null;

            if (VitriumBuffs.TryGetValue(name, out int id))
            {
                ret = (VitriBuff)ModContent.GetModBuff(id);
            }

            if (ret == null)
            {
                ret = (VitriBuff)Mod.GetBuff(name);
            }

            return(ret);
        }
Пример #11
0
 public override void Load(Item item, TagCompound tag)
 {
     Hash = tag.GetString("ItemHash");
     buff = (VitriBuff)Vitrium.Instance.GetBuff(tag.GetString("ItemBuff"));
     buff?.Load(item, tag);
 }
Пример #12
0
 public void Clone(VItem item)
 {
     Hash = item.Hash;
     buff = item.buff;
 }