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); } }
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; } }
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; }
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]); } } }
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}"); } }
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??? } }
private static InventoryOrb GetOrbFromType(InventoryOrbCollection inventory, EInventoryOrbType orbType) { return(inventory.GetItem((int)orbType)); }
public ItemIdentifier(EInventoryOrbType orbType, EOrbSlot orbSlot) { LootType = LootType.Orb; ItemId = (int)orbType; SubItemId = (int)orbSlot; }
static int GetOrbKey(EInventoryOrbType orbType, EOrbSlot orbSlot) => ((int)orbType * 10) + (int)orbSlot;
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); }
internal static bool HasOrb(this GameSave gameSave, EInventoryOrbType orbType) => gameSave.Inventory.OrbInventory.Inventory.ContainsKey((int)orbType);
internal static bool HasMeleeOrb(this GameSave gameSave, EInventoryOrbType orbType) => gameSave.DataKeyBools.ContainsKey(MeleeOrbPrefixKey + (int)orbType);