Ejemplo n.º 1
0
        public static void RandomizeOrb(string orbTypeName, OrbDamageOdds orbOdds, Random random)
        {
            EInventoryOrbType orbType = (EInventoryOrbType)Enum.Parse(typeof(EInventoryOrbType), orbTypeName);
            var options = GetOrbDamageOptions(orbType);
            int newDamage;

            switch (orbOdds.GetModifier(random))
            {
            case OrbDamageOdds.OrbDamageModifier.Minus:
                newDamage = options.MinValue;
                OverrideOrbNames(orbType, "(-)");
                break;

            case OrbDamageOdds.OrbDamageModifier.Plus:
                newDamage = options.MaxValue;
                OverrideOrbNames(orbType, "(+)");
                break;

            default:
                newDamage = options.MidValue;
                break;
            }
            if (!OrbDamageLookup.ContainsKey((int)orbType))
            {
                OrbDamageLookup.Add((int)orbType, newDamage);
            }
        }
Ejemplo n.º 2
0
        internal static void AddOrb(this GameSave gameSave, EInventoryOrbType orbType, EOrbSlot orbSlot)
        {
            var orbCollection = gameSave.Inventory.OrbInventory.Inventory;
            var orbTypeKey    = (int)orbType;
            var newOrb        = new InventoryOrb(orbType);

            if (!orbCollection.ContainsKey(orbTypeKey))
            {
                orbCollection.Add(orbTypeKey, newOrb);
            }

            switch (orbSlot)
            {
            case EOrbSlot.Melee:
                gameSave.DataKeyBools[MeleeOrbPrefixKey + orbTypeKey] = true;
                break;

            case EOrbSlot.Spell:
                orbCollection[orbTypeKey].IsSpellUnlocked = true;
                break;

            case EOrbSlot.Passive:
                orbCollection[orbTypeKey].IsPassiveUnlocked = true;
                break;

            case EOrbSlot.All:
                gameSave.DataKeyBools.Add(MeleeOrbPrefixKey + orbTypeKey, true);
                orbCollection[orbTypeKey].IsSpellUnlocked   = true;
                orbCollection[orbTypeKey].IsPassiveUnlocked = true;
                break;
            }
        }
Ejemplo n.º 3
0
		public ItemInfo Get(EInventoryOrbType orbType, EOrbSlot orbSlot)
		{
			var orb = GetOrAdd(orbItems, GetOrbKey(orbType, orbSlot), () => CreateNew(new ItemIdentifier(orbType, orbSlot)));

			return progressiveItems.TryGetValue(orb, out var progressiveItem)
				? progressiveItem
				: orb;
		}
Ejemplo n.º 4
0
        public static void PopulateOrbLookups(GameSave save, string setting, Dictionary <string, OrbDamageOdds> overrides)
        {
            OrbDamageLookup.Clear();
            Dictionary <string, OrbDamageOdds> orbOdds = GetOrbOdds(setting, overrides);
            var random = new Random((int)save.GetSeed().Value.Id);

            foreach (KeyValuePair <string, OrbDamageOdds> odds in orbOdds)
            {
                EInventoryOrbType orbType = (EInventoryOrbType)Enum.Parse(typeof(EInventoryOrbType), odds.Key);
                RandomizeOrb(odds.Key, odds.Value, random);
                var orbInventory = save.Inventory.OrbInventory.Inventory;
                if (orbInventory.ContainsKey((int)orbType))
                {
                    SetOrbBaseDamage(orbInventory[(int)orbType]);
                }
            }
        }
Ejemplo n.º 5
0
        public static void OverrideOrbNames(EInventoryOrbType orbType, string suffix)
        {
            var    Localizer       = TimeSpinnerGame.Localizer;
            string locKey          = $"inv_orb_{orbType}";
            string spellLocKey     = $"{locKey}_spell";
            string ringLocKey      = $"{locKey}_passive";
            string actualOrbName   = new InventoryOrb(orbType).Name;
            string actualSpellName = new InventoryOrb(orbType).AsDynamic().SpellName;
            string actualRingName  = new InventoryOrb(orbType).AsDynamic().PassiveName;

            if (!actualOrbName.EndsWith(suffix))
            {
                Localizer.OverrideKey(locKey, $"{actualOrbName} {suffix}");
            }
            if (!actualSpellName.EndsWith(suffix))
            {
                Localizer.OverrideKey(spellLocKey, $"{actualSpellName} {suffix}");
            }
            if (!actualRingName.EndsWith(suffix))
            {
                Localizer.OverrideKey(ringLocKey, $"{actualRingName} {suffix}");
            }
        }
Ejemplo n.º 6
0
        private static OrbDamageRange GetOrbDamageOptions(EInventoryOrbType orbType)
        {
            switch (orbType)
            {
            case EInventoryOrbType.Blue: return(new OrbDamageRange {
                    MinValue = 1, MidValue = 4, MaxValue = 8
                });

            case EInventoryOrbType.Blade: return(new OrbDamageRange {
                    MinValue = 1, MidValue = 7, MaxValue = 12
                });

            case EInventoryOrbType.Flame: return(new OrbDamageRange {
                    MinValue = 2, MidValue = 6, MaxValue = 16
                });

            case EInventoryOrbType.Pink: return(new OrbDamageRange {
                    MinValue = 2, MidValue = 6, MaxValue = 30
                });

            case EInventoryOrbType.Iron: return(new OrbDamageRange {
                    MinValue = 2, MidValue = 10, MaxValue = 20
                });

            case EInventoryOrbType.Ice: return(new OrbDamageRange {
                    MinValue = 1, MidValue = 4, MaxValue = 12
                });

            case EInventoryOrbType.Wind: return(new OrbDamageRange {
                    MinValue = 1, MidValue = 3, MaxValue = 8
                });

            case EInventoryOrbType.Gun: return(new OrbDamageRange {
                    MinValue = 3, MidValue = 9, MaxValue = 30
                });

            case EInventoryOrbType.Umbra: return(new OrbDamageRange {
                    MinValue = 1, MidValue = 4, MaxValue = 10
                });

            case EInventoryOrbType.Empire: return(new OrbDamageRange {
                    MinValue = 2, MidValue = 10, MaxValue = 20
                });

            case EInventoryOrbType.Eye: return(new OrbDamageRange {
                    MinValue = 1, MidValue = 3, MaxValue = 8
                });

            case EInventoryOrbType.Blood: return(new OrbDamageRange {
                    MinValue = 1, MidValue = 3, MaxValue = 8
                });

            case EInventoryOrbType.Book: return(new OrbDamageRange {
                    MinValue = 1, MidValue = 6, MaxValue = 12
                });

            case EInventoryOrbType.Moon: return(new OrbDamageRange {
                    MinValue = 1, MidValue = 3, MaxValue = 8
                });

            case EInventoryOrbType.Nether: return(new OrbDamageRange {
                    MinValue = 1, MidValue = 6, MaxValue = 12
                });

            case EInventoryOrbType.Barrier: return(new OrbDamageRange {
                    MinValue = 2, MidValue = 8, MaxValue = 20
                });

            default: return(new OrbDamageRange {
                    MinValue = 6, MidValue = 6, MaxValue = 6
                });                                                                                              //MONSKE??? But I thought you were dead???
            }
        }
Ejemplo n.º 7
0
 private static InventoryOrb GetOrbFromType(InventoryOrbCollection inventory, EInventoryOrbType orbType)
 {
     return(inventory.GetItem((int)orbType));
 }
Ejemplo n.º 8
0
 public ItemIdentifier(EInventoryOrbType orbType, EOrbSlot orbSlot)
 {
     LootType  = LootType.Orb;
     ItemId    = (int)orbType;
     SubItemId = (int)orbSlot;
 }
Ejemplo n.º 9
0
		static int GetOrbKey(EInventoryOrbType orbType, EOrbSlot orbSlot) => ((int)orbType * 10) + (int)orbSlot;
Ejemplo n.º 10
0
        internal static bool HasSpell(this GameSave gameSave, EInventoryOrbType orbType)
        {
            var orbCollection = gameSave.Inventory.OrbInventory.Inventory;

            return(orbCollection.TryGetValue((int)orbType, out var orb) && orb.IsSpellUnlocked);
        }
Ejemplo n.º 11
0
 internal static bool HasOrb(this GameSave gameSave, EInventoryOrbType orbType) =>
 gameSave.Inventory.OrbInventory.Inventory.ContainsKey((int)orbType);
Ejemplo n.º 12
0
 internal static bool HasMeleeOrb(this GameSave gameSave, EInventoryOrbType orbType) =>
 gameSave.DataKeyBools.ContainsKey(MeleeOrbPrefixKey + (int)orbType);