public static List <TNPC> generateNPCList() { List <TNPC> tocreate = new List <TNPC>(); List <NPCDefinition> broken = BrokenNPCs.getBrokenNPCs(); for (int i = 0; i < NPCLoader.NPCCount; i++) { NPC npc = new NPC(); npc.SetDefaults(i); TNPC mem = new TNPC(); mem.Name = new string(npc.FullName.ToCharArray().Where(c => !char.IsWhiteSpace(c)).ToArray()); mem.ID = npc.type; mem.Price = npc.lifeMax + (npc.defense * 2) + (npc.damage * damagepricemultiplier); if (npc.modNPC != null) { mem.Mod = npc.modNPC.mod.ToString(); } else { mem.Mod = "Vanilla"; } if (mem.Price <= 0) { mem.Price = 99999; } NPCDefinition totest = new NPCDefinition(npc.type); if (!broken.Contains(totest)) { tocreate.Add(mem); } } return(tocreate); }
public ShopPackDefinition(NPCDefinition neededBoss, string name, int price, List <ShopPackItemDefinition> items) { this.NeededBossKill = neededBoss; this.Name = name; this.Price = price; this.Items = items; }
//////////////// protected override void ReceiveOnClient() { var mymod = RewardsMod.Instance; var myworld = ModContent.GetInstance <RewardsWorld>(); KillData data = myworld.Logic.GetPlayerData(Main.LocalPlayer); if (data == null) { throw new ModHelpersException("No player data for " + Main.LocalPlayer.name); } NPC npc = new NPC(); npc.SetDefaults(this.NpcType); npc.boss = this.IsBoss; bool isGrind, isExpired; float reward = data.RecordKill(npc, out isGrind, out isExpired); if (mymod.SettingsConfig.DebugModeKillInfo) { int kills = data.KilledNpcs.ContainsKey(npc.type) ? data.KilledNpcs[npc.type] : -1; var npcDef = new NPCDefinition(npc.type); bool needsBoss = mymod.PointsConfig.NpcRewardRequiredAsBoss.Contains(npcDef); string msg = "ReceiveOnClient npc: " + npc.TypeName + " (" + npc.type + ")" + ", #: " + kills + ", isGrind: " + isGrind + ", isExpired: " + isExpired + ", reward: " + reward + ", needsBoss:" + needsBoss + " (is? " + npc.boss + ")"; Main.NewText(msg); LogHelpers.Log(" " + msg); } data.AddRewardForPlayer(Main.LocalPlayer, isGrind, isExpired, reward); }
public void RewardKill_Host(Player toPlayer, NPC npc) { var mymod = RewardsMod.Instance; bool isGrind, isExpired; float reward = this.CalculateKillReward(npc, out isGrind, out isExpired); if (mymod.SettingsConfig.DebugModeKillInfo) { int kills = this.KilledNpcs.ContainsKey(npc.type) ? this.KilledNpcs[npc.type] : -1; var npcDef = new NPCDefinition(npc.type); bool needsBoss = mymod.PointsConfig.NpcRewardRequiredAsBoss.Contains(npcDef); string msg = "RewardKill_SyncsFromHost to: " + toPlayer.name + ", npc: " + npc.TypeName + " (" + npc.type + ")" + ", #: " + kills + ", isGrind: " + isGrind + ", reward: " + reward + ", needsBoss:" + needsBoss + " (is? " + npc.boss + ")"; Main.NewText(msg); LogHelpers.Log(" " + msg); } float finalReward = this.AddRewardForPlayer(toPlayer, isGrind, isExpired, reward); if (Main.netMode == 2) { if (finalReward > 0) // <- Careful! Any uses for 0 reward packets? { KillRewardProtocol.SendRewardToClient(toPlayer.whoAmI, -1, npc); } } }
public static bool CanEnrage(NPC npc) { var config = EnragedConfig.Instance; var wl = config.Get <HashSet <NPCDefinition> >(nameof(config.NpcWhitelist)); var def = new NPCDefinition(npc.type); return(wl.Contains(def)); }
public override void SetupShop(int type, Chest shop, ref int nextSlot) { var config = RuinedItemsConfig.Instance; NPCDefinition npcDef = config.Get <NPCDefinition>(nameof(config.MagitechScrapSoldByWhom)); if (npcDef?.Type == type) { var scrapItem = new Item(); scrapItem.SetDefaults(ModContent.ItemType <MagitechScrapItem>()); shop.item[nextSlot++] = scrapItem; } }
public override void NPCLoot(NPC npc) { var mymod = (StarvationMod)this.mod; var npcDef = new NPCDefinition(npc.type); if (mymod.Config.TupperwareDropsNpcIdsAndChances.ContainsKey(npcDef)) { if (Main.rand.NextFloat() < mymod.Config.TupperwareDropsNpcIdsAndChances[npcDef]) { ItemHelpers.CreateItem(npc.Center, ModContent.ItemType <TupperwareItem>(), 1, TupperwareItem.Width, TupperwareItem.Height); } } }
public RewardsPointsConfig() { var wofDef = new NPCDefinition(NPCID.WallofFlesh); var planteraDef = new NPCDefinition(NPCID.Plantera); var golemDef = new NPCDefinition(NPCID.Golem); var moonlordDef = new NPCDefinition(NPCID.MoonLordCore); //NPCID.MoonLordHead? this.NpcRewardsOnKill = new Dictionary <NPCDefinition, NPCKillRewardValue> { { new NPCDefinition(NPCID.KingSlime), new NPCKillRewardValue(10) }, { new NPCDefinition(NPCID.EyeofCthulhu), new NPCKillRewardValue(10) }, { new NPCDefinition(NPCID.EaterofWorldsHead), new NPCKillRewardValue(25) }, { new NPCDefinition(NPCID.BrainofCthulhu), new NPCKillRewardValue(25) }, { new NPCDefinition(NPCID.QueenBee), new NPCKillRewardValue(20) }, { new NPCDefinition(NPCID.SkeletronHead), new NPCKillRewardValue(30) }, { new NPCDefinition(NPCID.WallofFlesh), new NPCKillRewardValue(50) }, { new NPCDefinition(NPCID.TheDestroyer), new NPCKillRewardValue(50) }, { new NPCDefinition(NPCID.Retinazer), new NPCKillRewardValue(50 / 2) }, { new NPCDefinition(NPCID.Spazmatism), new NPCKillRewardValue(50 / 2) }, { new NPCDefinition(NPCID.SkeletronPrime), new NPCKillRewardValue(50) }, { new NPCDefinition(NPCID.Plantera), new NPCKillRewardValue(100) }, { new NPCDefinition(NPCID.Golem), new NPCKillRewardValue(100) }, { new NPCDefinition(NPCID.DukeFishron), new NPCKillRewardValue(100) }, { new NPCDefinition(NPCID.CultistBoss), new NPCKillRewardValue(50) }, { new NPCDefinition(NPCID.DD2Betsy), new NPCKillRewardValue(100) }, { new NPCDefinition(NPCID.LunarTowerSolar), new NPCKillRewardValue(35) }, { new NPCDefinition(NPCID.LunarTowerVortex), new NPCKillRewardValue(35) }, { new NPCDefinition(NPCID.LunarTowerNebula), new NPCKillRewardValue(35) }, { new NPCDefinition(NPCID.LunarTowerStardust), new NPCKillRewardValue(35) }, { moonlordDef, new NPCKillRewardValue(250) } }; this.NpcRewardRequiredAsBoss = new HashSet <NPCDefinition> { new NPCDefinition(NPCID.EaterofWorldsHead) }; this.NpcRewardNotGivenAfterNpcKilled = new Dictionary <NPCDefinition, NPCDefinition> { { new NPCDefinition(NPCID.KingSlime), wofDef }, { new NPCDefinition(NPCID.EyeofCthulhu), wofDef }, { new NPCDefinition(NPCID.EaterofWorldsHead), wofDef }, { new NPCDefinition(NPCID.BrainofCthulhu), wofDef }, { new NPCDefinition(NPCID.QueenBee), wofDef }, { new NPCDefinition(NPCID.SkeletronHead), wofDef }, { new NPCDefinition(NPCID.WallofFlesh), planteraDef }, { new NPCDefinition(NPCID.TheDestroyer), golemDef }, { new NPCDefinition(NPCID.Retinazer), golemDef }, { new NPCDefinition(NPCID.Spazmatism), golemDef }, { new NPCDefinition(NPCID.SkeletronPrime), golemDef }, { new NPCDefinition(NPCID.Plantera), moonlordDef }, { new NPCDefinition(NPCID.Golem), moonlordDef } }; }
private int CalculateNpcKillReward(NPC npc, ref bool isGrind, ref bool isExpired) { var mymod = RewardsMod.Instance; var npcDef = new NPCDefinition(npc.type); int points = 0; bool needsBoss = mymod.PointsConfig.NpcRewardRequiredAsBoss.Contains(npcDef); bool canReward = !needsBoss || (needsBoss && npc.boss); isGrind = false; isExpired = false; if (mymod.PointsConfig.NpcRewardsOnKill.ContainsKey(npcDef)) { if (canReward) { points = mymod.PointsConfig.NpcRewardsOnKill[npcDef].PP; } } if (mymod.PointsConfig.NpcRewardNotGivenAfterNpcKilled.ContainsKey(npcDef)) { NPCDefinition blockingNpcDef = mymod.PointsConfig.NpcRewardNotGivenAfterNpcKilled[npcDef]; int blockingNpcType = blockingNpcDef.Type; if (this.KilledNpcs.ContainsKey(blockingNpcType) && this.KilledNpcs[blockingNpcType] > 0) { isExpired = true; } } if (this.KilledNpcs.ContainsKey(npc.type) && this.KilledNpcs[npc.type] > 0) { isGrind = canReward; } else { /*if( mymod.Config.NpcRewardPrediction ) { * Mod boss_list_mod = ModLoader.GetMod( "BossChecklist" ); * if( boss_list_mod != null && boss_list_mod.Version >= new Version(0, 1, 5, 3) ) { * var boss_info = (Tuple<float, int, bool>)boss_list_mod.Call( "GetBossState", name ); * * if( boss_info != null && boss_info.Item2 == 0 ) { * points = this.EstimateKillReward( mymod, npc, boss_info.Item1 ); * } * } * }*/ } return(points); }
public static void SetNpcLootBlacklistEntry(NPCDefinition npcDef, bool localOnly) { if (!LoadLibraries.IsWorldLoaded()) { throw new ModLibsException("World not loaded"); } var myworld = ModContent.GetInstance <NihilismWorld>(); myworld.Logic.DataAccess.SetNpcLootBlacklistEntry(npcDef); if (!localOnly) { myworld.Logic.SyncDataChanges(); } }
public void SelectNPC(int index, bool update_rotation = false, bool force = false) { NPCDefinition item = NPCDefinition.GetNPC(index); properties.SelectedObject = item; name_label.Text = item.Name + " (" + item.ID + ")"; if (force || last_npc != index) { model_viewer.SelectedModel = item.GetModel(0, 0, null); } else { model_viewer.SetModel(item.GetModel(0, 0, null), false); } last_npc = index; }
public static EntityDefinition GetEntDef(HologramMode mode, string rawDef) { switch (mode) { case HologramMode.NPC: return(NPCDefinition.FromString(rawDef)); case HologramMode.Item: return(ItemDefinition.FromString(rawDef)); case HologramMode.Projectile: return(ProjectileDefinition.FromString(rawDef)); default: throw new NotImplementedException("No such mode.."); } }
//// private bool AutoInitializeElementOfSpecificNPC(NPC npc) { var config = ElementsConfig.Instance; var npcDef = new NPCDefinition(npc.type); if (!config.AutoAssignedAnyNPC.ContainsKey(npcDef)) { return(false); } ElementDefinition elemDef = ElementDefinition.PickDefinitionForNPC(config.AutoAssignedAnyNPC[npcDef]); if (elemDef != null) { this.Elements.Add(elemDef); } return(true); }
//////////////// public float RecordKill(NPC npc, out bool isGrind, out bool isExpired) { var mymod = RewardsMod.Instance; float reward = this.CalculateKillReward(npc, out isGrind, out isExpired); var npcDef = new NPCDefinition(npc.type); bool needsBoss = mymod.PointsConfig.NpcRewardRequiredAsBoss.Contains(npcDef); bool canReward = !needsBoss || (needsBoss && npc.boss); if (canReward) { if (this.KilledNpcs.ContainsKey(npc.type)) { this.KilledNpcs[npc.type]++; } else { this.KilledNpcs[npc.type] = 1; } } return(reward); }
//////////////// public StarvationConfig() { this.TupperwareSellsFromMerchantByNpc = new NPCDefinition(NPCID.SkeletonMerchant); this.PerItemWellFedTickDurations[new ItemDefinition(ItemID.CookedMarshmallow)] = new IntTickSetting { Ticks = 5 * 60 * 60 }; // 5 minutes this.PerItemWellFedTickDurations[new ItemDefinition(ItemID.BowlofSoup)] = new IntTickSetting { Ticks = 45 * 60 * 60 }; // 45 minutes this.PerItemWellFedTickDurations[new ItemDefinition(ItemID.PumpkinPie)] = new IntTickSetting { Ticks = 25 * 60 * 60 }; // 25 minutes this.PerItemWellFedTickDurations[new ItemDefinition(ItemID.CookedFish)] = new IntTickSetting { Ticks = 15 * 60 * 60 }; // 15 minutes this.PerItemWellFedTickDurations[new ItemDefinition(ItemID.CookedShrimp)] = new IntTickSetting { Ticks = 15 * 60 * 60 }; // 15 minutes this.PerItemWellFedTickDurations[new ItemDefinition(ItemID.Sashimi)] = new IntTickSetting { Ticks = 15 * 60 * 60 }; // 15 minutes this.PerItemWellFedTickDurations[new ItemDefinition(ItemID.GrubSoup)] = new IntTickSetting { Ticks = 120 * 60 * 60 }; // 120 minutes this.PerItemWellFedTickDurations[new ItemDefinition(ItemID.GingerbreadCookie)] = new IntTickSetting { Ticks = 5 * 60 * 60 }; // 5 minutes this.PerItemWellFedTickDurations[new ItemDefinition(ItemID.SugarCookie)] = new IntTickSetting { Ticks = 5 * 60 * 60 }; // 5 minutes this.PerItemWellFedTickDurations[new ItemDefinition(ItemID.ChristmasPudding)] = new IntTickSetting { Ticks = 5 * 60 * 60 }; // 5 minutes this.TupperwareDropsNpcIdsAndChances[new NPCDefinition(NPCID.Skeleton)] = 0.35f; }
public void UnsetNpcLootWhitelistEntry(NPCDefinition npcDef) { this.Filters.NpcLootWhitelist.Remove(npcDef); }
public void UnsetNpcLootBlacklist2Entry(NPCDefinition npcDef) { this.Filters.NpcLootBlacklist2.Remove(npcDef); }
public void SetNpcBlacklistEntry(NPCDefinition npcDef) { this.Filters.NpcBlacklist.Add(npcDef); }
public static void BuyNPCCommand(Viewer viewer, int NPCType, int count) { if (count > 100) { //just to prevent... a lot of things. count = 100; } NPC npc = new NPC(); npc.SetDefaults(NPCType); double cost = 0; NPCDefinition test = new NPCDefinition(NPCType); if (TConfig.whitelistmodeNPC && !TConfig.BannedNPC.Contains(test) || !TConfig.whitelistmodeNPC && TConfig.BannedNPC.Contains(test) || TConfig.disableNPC || TConfig.disablebosses && npc.boss || TConfig.disabletownies && npc.townNPC) { return; } cost = twitchtestmod.GetNPCprice(npc.type) * count; if (Calls.removecoins(viewer, Convert.ToDouble(cost))) { //if multiplayerclient, we can't spawn it ourselfes. so give it to the server. if (Main.netMode == NetmodeID.MultiplayerClient) { MainNetworking.NPCAddToQueue(NPCType, count, viewer.Name); Calls.sendmessage("@" + viewer.Name + " Your " + count + " " + npc.FullName + "(s) will be spawned"); return; } if (npc.townNPC) { for (int i = 0; i < Main.npc.Length; i++) { NPC anpc = Main.npc[i]; if (npc.type == anpc.type) { npc.Teleport(Main.player[Main.myPlayer].position, 1); return; } } } Random xrandomizer = new Random(); int posx = (int)Main.player[Main.myPlayer].position.X; int posy = (int)Main.player[Main.myPlayer].position.Y; if (posy < 700) { posy = posy + 700; } else { posy = posy - 400; } for (int i = 0; i < count; i++) { posx = (int)Main.player[Main.myPlayer].position.X; posx = posx + xrandomizer.Next(-800, 800); if (posx < 0) { posx = 0; } //NPC.NewNPC(posx, posy, NPCType); //Main.npc[NPC.NewNPC(posx, posy, NPCType)].netUpdate = true; NPC.NewNPC(posx, posy, NPCType); } if (TConfig.ChatBuyAlert) { Main.NewText(viewer.Name + " has bought " + count + " " + npc.FullName, Color.Red); } Calls.sendmessage("@" + viewer.Name + " Your " + count + " " + npc.FullName + "(s) have/has been spawned"); } else { Calls.sendmessage("@" + viewer.Name + " you don't have enough Coins for this NPC - it costs " + cost); } }
public void SetNpcLootWhitelistEntry(NPCDefinition npcDef) { this.Filters.NpcLootWhitelist.Add(npcDef); }
public void SetNpcLootBlacklist2Entry(NPCDefinition npcDef) { this.Filters.NpcLootBlacklist2.Add(npcDef); }
public RewardsShopConfig() { var wofDef = new NPCDefinition(NPCID.WallofFlesh); var planteraDef = new NPCDefinition(NPCID.Plantera); var golemDef = new NPCDefinition(NPCID.Golem); var moonlordDef = new NPCDefinition(NPCID.MoonLordCore); //NPCID.MoonLordHead? this.ShopLoadout = new List <ShopPackDefinition> { new ShopPackDefinition(null, "Iron Age Pack", 5, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.IronBar), 99) }), new ShopPackDefinition(null, "Money Purse", 10, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.GoldCoin), 99) }), new ShopPackDefinition(null, "Nature Watcher's Pack", 10, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.FlowerBoots), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.Binoculars), 1) }), new ShopPackDefinition(null, "Bindings Pack", 10, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.BandofRegeneration), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.BandofStarpower), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.CelestialMagnet), 1) }), new ShopPackDefinition(null, "Traveler's Pack", 25, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.Aglet), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.IceSkates), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.TigerClimbingGear), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.WaterWalkingBoots), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.HandWarmer), 1) }), new ShopPackDefinition(null, "Rough Traveler's Pack", 25, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.AnkletoftheWind), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.FeralClaws), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.JellyfishDivingGear), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.LavaCharm), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.MagmaStone), 1) }), new ShopPackDefinition(null, "Ground Hater's Pack", 25, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.SandstorminaBottle), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.ShinyRedBalloon), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.LuckyHorseshoe), 1) }), new ShopPackDefinition(null, "Stoicist's Pack", 20, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.CobaltShield), 1) }), new ShopPackDefinition(null, "Alucard's Pack", 35, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.Arkhalis), 1) }), new ShopPackDefinition(null, "Gizmo Pack", 25, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.Toolbox), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.ArchitectGizmoPack), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.ActuationAccessory), 1) }), new ShopPackDefinition(null, "Information Monger's Pack", 25, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.GPS), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.GoblinTech), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.REK), 1) }), new ShopPackDefinition(null, "Fisherman's Pack", 50, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.AnglerTackleBag), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.FishFinder), 1) }), // Hard mode only: new ShopPackDefinition(wofDef, "Mimic's Lament Pack", 35, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.MagicDagger), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.TitanGlove), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.PhilosophersStone), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.CrossNecklace), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.StarCloak), 1) }), new ShopPackDefinition(wofDef, "Gangster's Pack", 35, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.Uzi), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.RifleScope), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.EndlessMusketPouch), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.GangstaHat), 1) }), new ShopPackDefinition(wofDef, "Avenger Pack", 25, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.AvengerEmblem), 1) }), new ShopPackDefinition(wofDef, "Life Pack", 150, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.AnkhCharm), 1) }), new ShopPackDefinition(wofDef, "Lucky Pack", 150, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.CoinRing), 1) }), new ShopPackDefinition(wofDef, "Dimensionalist's Pack", 200, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.RodofDiscord), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.TeleportationPotion), 30) }), // Post-plantera: new ShopPackDefinition(planteraDef, "Whack Pack", 50, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.TheAxe), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.Bananarang), 10), new ShopPackItemDefinition(new ItemDefinition(ItemID.SlapHand), 1) }), // Post-golem: new ShopPackDefinition(golemDef, "Golem Eye Pack", 25, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.EyeoftheGolem), 1) }), new ShopPackDefinition(golemDef, "Defender's Pack", 150, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.CelestialShell), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.PaladinsShield), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.FrozenTurtleShell), 1) }), // Post-moonlord: new ShopPackDefinition(moonlordDef, "Eldritch Pack", 500, new List <ShopPackItemDefinition> { new ShopPackItemDefinition(new ItemDefinition(ItemID.Meowmere), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.Terrarian), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.StarWrath), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.SDMG), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.FireworksLauncher), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.LastPrism), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.LunarFlareBook), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.RainbowCrystalStaff), 1), new ShopPackItemDefinition(new ItemDefinition(ItemID.MoonlordTurretStaff), 1) }) }; }