public override void OpenBossBag(Player player) { player.QuickSpawnItem(ItemType <SoulofContamination>(), Main.rand.Next(20, 25)); // 污染之魂 player.TryGettingDevArmor(); // 开发者盔甲 player.QuickSpawnItem(ItemType <BottleofStorm>()); // 专家饰品 var dropChooser = new WeightedRandom <int>(); dropChooser.Add(ItemType <ContaminatedLongbow>()); dropChooser.Add(ItemType <ContaminatedCurrent>()); dropChooser.Add(ItemType <WaterElementalStaff>()); int choice = dropChooser; player.QuickSpawnItem(choice); dropChooser.Clear(); if (Main.rand.NextFloat() < .666) // 2/3掉落 { dropChooser.Add(ItemType <HelmetofContamination>()); dropChooser.Add(ItemType <HeadgearofContamination>()); dropChooser.Add(ItemType <CrownofContamination>()); dropChooser.Add(ItemType <MaskofContamination>()); choice = dropChooser; player.QuickSpawnItem(choice); } if (Main.rand.NextFloat() < .666) // 2/3掉落 { player.QuickSpawnItem(ItemType <BreastplateofContamination>()); } if (Main.rand.NextFloat() < .666) // 2/3掉落 { player.QuickSpawnItem(ItemType <GreavesofContamination>()); } }
void prepare() { mGroupsHaveDepth = false; m_RepeatingGroups.MakePositive(); m_RepeatingGroups.Clamp(0, GroupCount - 1); // Groups if (mGroupBag == null) { mGroupBag = new WeightedRandom <int>(); } else { mGroupBag.Clear(); } if (RepeatingOrder == CurvyRepeatingOrderEnum.Random) { for (int g = FirstRepeating; g <= LastRepeating; g++) { mGroupBag.Add(g, (int)(Groups[g].Weight * 10)); } } // Prepare Groups & ItemBags for (int g = 0; g < Groups.Count; g++) { Groups[g].PrepareINTERNAL(); mGroupsHaveDepth = mGroupsHaveDepth || (getMinGroupDepth(Groups[g]) > 0); } }
public override void OpenBossBag(Player player) { player.TryGettingDevArmor(); if (Main.rand.NextBool(7)) { // Mask //player.QuickSpawnItem(mod.ItemType(" ")); } int[] drops = { mod.ItemType("GoldenGun"), mod.ItemType("SunPowerSeed"), mod.ItemType("BeskarBar") }; var dropChooser = new WeightedRandom <int>(); for (int i = 0; i < drops.Length; ++i) { dropChooser.Add(drops[i], 1); } int choice = dropChooser; if (choice == mod.ItemType("BeskarBar")) { player.QuickSpawnItem(choice, Main.rand.Next(5, 10)); } else { player.QuickSpawnItem(choice); } dropChooser.Clear(); for (int i = 0; i < drops.Length; ++i) { if (drops[i] != choice) { dropChooser.Add(drops[i], 1); } } int choice2 = dropChooser; player.QuickSpawnItem(choice2); // Guaranteed drops player.QuickSpawnItem(ItemID.GoldCoin, Main.rand.Next(30, 50)); player.QuickSpawnItem(mod.ItemType("BeskarOre"), Main.rand.Next(15, 20)); // Expert //player.QuickSpawnItem(mod.ItemType("SunPowerSeed")); //if (player.GetModPlayer<EGGPlayer>().serums < EGGPlayer.maxSerums) { player.QuickSpawnItem(mod.ItemType("SerumResearch")); //} }
/*public override void FindFrame(int frameHeight) * { * npc.frameCounter += 1; * npc.frameCounter %= 20; * int frame = (int)(npc.frameCounter / 2.0); * if(frame >= Main.npcFrameCount[npc.type]) * { * frame = 0; * } * npc.frame.Y = frame * frameHeight; * }*/ public override void NPCLoot() { if (Main.expertMode) { npc.DropBossBags(); } else { if (Main.rand.NextBool(7)) { // Mask //player.QuickSpawnItem(mod.ItemType(" ")); } int[] drops = { mod.ItemType("GoldenGun"), mod.ItemType("SunPowerSeed"), mod.ItemType("BeskarBar") }; var dropChooser = new WeightedRandom <int>(); for (int i = 0; i < drops.Length; ++i) { dropChooser.Add(drops[i], 1); } int choice = dropChooser; player.QuickSpawnItem(choice); dropChooser.Clear(); for (int i = 0; i < drops.Length; ++i) { if (drops[i] != choice) { dropChooser.Add(drops[i], 1); } } int choice2 = dropChooser; player.QuickSpawnItem(choice2); player.QuickSpawnItem(ItemID.GoldCoin, Main.rand.Next(15, 20)); player.QuickSpawnItem(mod.ItemType("BeskarOre"), Main.rand.Next(15, 20)); } SpawnOre(); if (!EGGWorld.downedSunGod) { EGGWorld.downedSunGod = true; if (Main.netMode == NetmodeID.Server) { NetMessage.SendData(MessageID.WorldData); // Immediately inform clients of new world state. } } }
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); } } }
protected override void OnStart() { if (Main.netMode == NetmodeID.MultiplayerClient) { return; } rand.Clear(); Part.Clear(); Started = true; TwitchChat.Instance.Irc.ChannelMessage += Handle; TwitchChat.Send(StartString + " Quick write \"boss\" in chat!"); TwitchChat.Post(StartString, Color.White); }
public override void NPCLoot() { if (Main.expertMode) { npc.DropBossBags(); } else { Item.NewItem(npc.getRect(), ItemType <SoulofContamination>(), Main.rand.Next(17, 22)); var dropChooser = new WeightedRandom <int>(); dropChooser.Add(ItemType <ContaminatedLongbow>()); dropChooser.Add(ItemType <ContaminatedCurrent>()); dropChooser.Add(ItemType <WaterElementalStaff>()); int choice = dropChooser; Item.NewItem(npc.getRect(), choice); dropChooser.Clear(); if (Main.rand.NextFloat() < .666) // 2/3掉落 { dropChooser.Add(ItemType <HelmetofContamination>()); dropChooser.Add(ItemType <HeadgearofContamination>()); dropChooser.Add(ItemType <CrownofContamination>()); dropChooser.Add(ItemType <MaskofContamination>()); choice = dropChooser; Item.NewItem(npc.getRect(), choice); } if (Main.rand.NextFloat() < .666) // 2/3掉落 { Item.NewItem(npc.getRect(), ItemType <BreastplateofContamination>()); } if (Main.rand.NextFloat() < .666) // 2/3掉落 { Item.NewItem(npc.getRect(), ItemType <GreavesofContamination>()); } } }
internal void PrepareINTERNAL() { m_RepeatingItems.MakePositive(); m_RepeatingItems.Clamp(0, ItemCount - 1); if (mItemBag == null) { mItemBag = new WeightedRandom <int>(); } else { mItemBag.Clear(); } if (Items.Count == 0) { return; } if (RepeatingOrder == CurvyRepeatingOrderEnum.Random) { for (int i = FirstRepeating; i <= LastRepeating; i++) { mItemBag.Add(i, (int)(Items[i].Weight * 10)); } } }
{ //I'd like to burn this in a fire someday. public override bool PreOpenVanillaBag(string context, Player player, int arg) { switch (context) { case "present": { PresentOpenerConfig config = new PresentOpenerConfig(); if (!config.presentmenu.DisablePresentConfig) { WeightedRandom <int> presentrandom = new WeightedRandom <int>(); //This is a form of randomness made by Terraria, useful for avoiding long If/Else chains like I have previously done. if (Main.hardMode) { presentrandom.Add(ItemID.SnowGlobe, 1f / 5f * config.presentmenu.SnowGlobeScale); //And no, I can't just use a switch statement here, as much as I had liked to. Since these scale based on the configs, the values aren't static. } presentrandom.Add(ItemID.Coal, 1f / 30f * config.presentmenu.CoalScale); presentrandom.Add(ItemID.DogWhistle, 1f / 419f * config.presentmenu.WhistleScale); presentrandom.Add(ItemID.RedRyder, 1f / 156f * config.presentmenu.PresentRareItemScale); presentrandom.Add(ItemID.CandyCaneSword, 1f / 156f * config.presentmenu.PresentRareItemScale); presentrandom.Add(ItemID.CnadyCanePickaxe, 1f / 159f * config.presentmenu.PresentRareItemScale); presentrandom.Add(ItemID.CandyCaneHook, 1f / 159f * config.presentmenu.PresentRareItemScale); presentrandom.Add(ItemID.FruitcakeChakram, 1f / 160f * config.presentmenu.PresentRareItemScale); presentrandom.Add(ItemID.HandWarmer, 1f / 161f * config.presentmenu.PresentRareItemScale); presentrandom.Add(ItemID.Toolbox, 1f / 323f * config.presentmenu.ToolboxScale); presentrandom.Add(ItemID.ReindeerAntlers, 1f / 43f * config.presentmenu.AntlersScale); presentrandom.Add(ItemID.Holly, 1f / 11f * config.presentmenu.HollyScale); presentrandom.Add(ItemID.MrsClauseHat, 1f / 92f * config.presentmenu.VanityScale); presentrandom.Add(ItemID.ParkaHood, 1f / 92f * config.presentmenu.VanityScale); presentrandom.Add(ItemID.TreeMask, 1f / 92f * config.presentmenu.VanityScale); presentrandom.Add(ItemID.SnowHat, 1f / 92f * config.presentmenu.VanityScale); presentrandom.Add(ItemID.UglySweater, 1f / 92f * config.presentmenu.VanityScale); presentrandom.Add(ItemID.ChristmasPudding, 1f / 28f * config.presentmenu.FoodScale); presentrandom.Add(ItemID.SugarCookie, 1f / 28f * config.presentmenu.FoodScale); presentrandom.Add(ItemID.GingerbreadCookie, 1f / 28f * config.presentmenu.FoodScale); presentrandom.Add(ItemID.Eggnog, 1f / 12f * config.presentmenu.EggnogScale); presentrandom.Add(ItemID.StarAnise, 1f / 16f * config.presentmenu.StarAniseScale); presentrandom.Add(ItemID.PineTreeBlock, 1f / 6f * config.presentmenu.BlockScale); presentrandom.Add(ItemID.CandyCaneBlock, 1f / 6f * config.presentmenu.BlockScale); presentrandom.Add(ItemID.GreenCandyCaneBlock, 1f / 6f * config.presentmenu.BlockScale); Mod ThoriumMod = ModLoader.GetMod("ThoriumMod"); if (ThoriumMod != null && config.moddedmenu.DisableModdedConfigs == false) { presentrandom.Add(ThoriumMod.ItemType("Mistletoe"), 1f / 10f * config.moddedmenu.ThoriumMistleScale); } if (presentrandom != null) { switch (presentrandom) { case ItemID.RedRyder: player.QuickSpawnItem(presentrandom); player.QuickSpawnItem(ItemID.MusketBall, Main.rand.Next(30, 61)); break; case ItemID.MrsClauseHat: player.QuickSpawnItem(ItemID.MrsClauseHat); player.QuickSpawnItem(ItemID.MrsClauseShirt); player.QuickSpawnItem(ItemID.MrsClauseHeels); break; case ItemID.ParkaHood: player.QuickSpawnItem(ItemID.ParkaHood); player.QuickSpawnItem(ItemID.ParkaCoat); player.QuickSpawnItem(ItemID.ParkaPants); break; case ItemID.TreeMask: player.QuickSpawnItem(ItemID.TreeMask); player.QuickSpawnItem(ItemID.TreeShirt); player.QuickSpawnItem(ItemID.TreeTrunks); break; case ItemID.Eggnog: player.QuickSpawnItem(ItemID.Eggnog, Main.rand.Next(1, 4)); break; case ItemID.StarAnise: player.QuickSpawnItem(ItemID.StarAnise, Main.rand.Next(20, 41)); break; case ItemID.PineTreeBlock: player.QuickSpawnItem(ItemID.PineTreeBlock, Main.rand.Next(20, 50)); break; case ItemID.CandyCaneBlock: player.QuickSpawnItem(ItemID.CandyCaneBlock, Main.rand.Next(20, 50)); break; case ItemID.GreenCandyCaneBlock: player.QuickSpawnItem(ItemID.GreenCandyCaneBlock, Main.rand.Next(20, 50)); break; default: player.QuickSpawnItem(presentrandom); break; } presentrandom.Clear(); } return(false); } else { return(true); } } case "goodieBag": { PresentOpenerConfig config = new PresentOpenerConfig(); if (!config.goodiemenu.DisableGoodieConfig) { WeightedRandom <int> goodierandom = new WeightedRandom <int>(); goodierandom.Add(ItemID.UnluckyYarn, 19f / 150f * config.goodiemenu.GoodieRareItemScale); goodierandom.Add(ItemID.BatHook, 19f / 150f * config.goodiemenu.GoodieRareItemScale); goodierandom.Add(ItemID.MorbidCuriosity, 19f / 50f * config.goodiemenu.PaintingScale); goodierandom.Add(ItemID.BitterHarvest, 19f / 50f * config.goodiemenu.PaintingScale); goodierandom.Add(ItemID.BloodMoonCountess, 19f / 50f * config.goodiemenu.PaintingScale); goodierandom.Add(ItemID.HallowsEve, 19f / 50f * config.goodiemenu.PaintingScale); goodierandom.Add(ItemID.JackingSkeletron, 19f / 50f * config.goodiemenu.PaintingScale); goodierandom.Add(ItemID.CatEars, 1f * config.goodiemenu.CostumeScale); goodierandom.Add(ItemID.CatMask, 1f * config.goodiemenu.CostumeScale); goodierandom.Add(ItemID.CreeperMask, 1f * config.goodiemenu.CostumeScale); goodierandom.Add(ItemID.PumpkinMask, 1f * config.goodiemenu.CostumeScale); goodierandom.Add(ItemID.SpaceCreatureMask, 1f * config.goodiemenu.CostumeScale); goodierandom.Add(ItemID.KarateTortoiseMask, 1f * config.goodiemenu.CostumeScale); goodierandom.Add(ItemID.FoxMask, 1f * config.goodiemenu.CostumeScale); goodierandom.Add(ItemID.WitchHat, 1f * config.goodiemenu.CostumeScale); goodierandom.Add(ItemID.VampireMask, 1f * config.goodiemenu.CostumeScale); goodierandom.Add(ItemID.LeprechaunHat, 1f * config.goodiemenu.CostumeScale); goodierandom.Add(ItemID.RobotMask, 1f * config.goodiemenu.CostumeScale); goodierandom.Add(ItemID.PrincessHat, 1f * config.goodiemenu.CostumeScale); goodierandom.Add(ItemID.TreasureHunterShirt, 1f * config.goodiemenu.CostumeScale); goodierandom.Add(ItemID.WolfMask, 1f * config.goodiemenu.CostumeScale); goodierandom.Add(ItemID.UnicornMask, 1f * config.goodiemenu.CostumeScale); goodierandom.Add(ItemID.ReaperHood, 1f * config.goodiemenu.CostumeScale); goodierandom.Add(ItemID.PixieShirt, 1f * config.goodiemenu.CostumeScale); goodierandom.Add(ItemID.BrideofFrankensteinMask, 1f * config.goodiemenu.CostumeScale); goodierandom.Add(ItemID.GhostMask, 1f * config.goodiemenu.CostumeScale); Mod SpiritMod = ModLoader.GetMod("SpiritMod"); if (SpiritMod != null && config.moddedmenu.DisableModdedConfigs == false) { WeightedRandom <int> MaskRandom = new WeightedRandom <int>(); MaskRandom.Add(SpiritMod.ItemType("MaskHulk")); MaskRandom.Add(SpiritMod.ItemType("MaskIggy")); MaskRandom.Add(SpiritMod.ItemType("MaskSvante")); MaskRandom.Add(SpiritMod.ItemType("MaskLeemyy")); MaskRandom.Add(SpiritMod.ItemType("MaskSchmo")); MaskRandom.Add(SpiritMod.ItemType("MaskLordCake")); MaskRandom.Add(SpiritMod.ItemType("MaskYuyutsu")); MaskRandom.Add(SpiritMod.ItemType("MaskVladimier")); MaskRandom.Add(SpiritMod.ItemType("MaskGraydee")); MaskRandom.Add(SpiritMod.ItemType("MaskBlaze")); MaskRandom.Add(SpiritMod.ItemType("MaskKachow")); if (Main.rand.Next(25) <= 5f * config.moddedmenu.SpiritDevMaskScale) { player.QuickSpawnItem(MaskRandom); } WeightedRandom <int> candyrandom = new WeightedRandom <int>(); candyrandom.Add(SpiritMod.ItemType("Taffy"), 1f / 8f * config.moddedmenu.SpiritCandyScale); candyrandom.Add(SpiritMod.ItemType("Candy"), 7f / 25f * config.moddedmenu.SpiritCandyScale); candyrandom.Add(SpiritMod.ItemType("ChocolateBar"), 12f / 25f * config.moddedmenu.SpiritCandyScale); candyrandom.Add(SpiritMod.ItemType("HealthCandy"), 29f / 50f * config.moddedmenu.SpiritCandyScale); candyrandom.Add(SpiritMod.ItemType("ManaCandy"), 17f / 25f * config.moddedmenu.SpiritCandyScale); candyrandom.Add(SpiritMod.ItemType("Lollipop"), 39f / 50f * config.moddedmenu.SpiritCandyScale); candyrandom.Add(SpiritMod.ItemType("Apple"), 100f / 83f * config.moddedmenu.AppleScale); candyrandom.Add(SpiritMod.ItemType("MysteryCandy"), 25f / 24f * config.moddedmenu.MysteryCandyScale); candyrandom.Add(SpiritMod.ItemType("GoldCandy"), 3f / 100f); player.QuickSpawnItem(candyrandom); } if (goodierandom != null) { switch (goodierandom) { case ItemID.RottenEgg: player.QuickSpawnItem(goodierandom, Main.rand.Next(10, 41)); break; case ItemID.CatMask: player.QuickSpawnItem(ItemID.CatMask); player.QuickSpawnItem(ItemID.CatShirt); player.QuickSpawnItem(ItemID.CatPants); break; case ItemID.CreeperMask: player.QuickSpawnItem(ItemID.CreeperMask); player.QuickSpawnItem(ItemID.CreeperShirt); player.QuickSpawnItem(ItemID.CreeperPants); break; case ItemID.PumpkinMask: player.QuickSpawnItem(ItemID.PumpkinMask); player.QuickSpawnItem(ItemID.PumpkinShirt); player.QuickSpawnItem(ItemID.PumpkinPants); break; case ItemID.SpaceCreatureMask: player.QuickSpawnItem(ItemID.SpaceCreatureMask); player.QuickSpawnItem(ItemID.SpaceCreatureShirt); player.QuickSpawnItem(ItemID.SpaceCreaturePants); break; case ItemID.KarateTortoiseMask: player.QuickSpawnItem(ItemID.KarateTortoiseMask); player.QuickSpawnItem(ItemID.KarateTortoiseShirt); player.QuickSpawnItem(ItemID.KarateTortoisePants); break; case ItemID.FoxMask: player.QuickSpawnItem(ItemID.FoxMask); player.QuickSpawnItem(ItemID.FoxShirt); player.QuickSpawnItem(ItemID.FoxPants); break; case ItemID.WitchHat: player.QuickSpawnItem(ItemID.WitchHat); player.QuickSpawnItem(ItemID.WitchDress); player.QuickSpawnItem(ItemID.WitchBoots); break; case ItemID.VampireMask: player.QuickSpawnItem(ItemID.VampireMask); player.QuickSpawnItem(ItemID.VampireShirt); player.QuickSpawnItem(ItemID.VampirePants); break; case ItemID.LeprechaunHat: player.QuickSpawnItem(ItemID.LeprechaunHat); player.QuickSpawnItem(ItemID.LeprechaunShirt); player.QuickSpawnItem(ItemID.LeprechaunPants); break; case ItemID.RobotMask: player.QuickSpawnItem(ItemID.RobotMask); player.QuickSpawnItem(ItemID.RobotShirt); player.QuickSpawnItem(ItemID.RobotPants); break; case ItemID.PrincessHat: player.QuickSpawnItem(ItemID.PrincessHat); player.QuickSpawnItem(ItemID.PrincessDressNew); break; case ItemID.TreasureHunterShirt: player.QuickSpawnItem(ItemID.TreasureHunterShirt); player.QuickSpawnItem(ItemID.TreasureHunterPants); break; case ItemID.WolfMask: player.QuickSpawnItem(ItemID.WolfMask); player.QuickSpawnItem(ItemID.WolfShirt); player.QuickSpawnItem(ItemID.WolfPants); break; case ItemID.UnicornMask: player.QuickSpawnItem(ItemID.UnicornMask); player.QuickSpawnItem(ItemID.UnicornShirt); player.QuickSpawnItem(ItemID.UnicornPants); break; case ItemID.ReaperHood: player.QuickSpawnItem(ItemID.ReaperHood); player.QuickSpawnItem(ItemID.ReaperRobe); break; case ItemID.PixieShirt: player.QuickSpawnItem(ItemID.PixieShirt); player.QuickSpawnItem(ItemID.PixiePants); break; case ItemID.BrideofFrankensteinMask: player.QuickSpawnItem(ItemID.BrideofFrankensteinMask); player.QuickSpawnItem(ItemID.BrideofFrankensteinDress); break; case ItemID.GhostMask: player.QuickSpawnItem(ItemID.GhostMask); player.QuickSpawnItem(ItemID.GhostShirt); break; default: player.QuickSpawnItem(goodierandom); break; } goodierandom.Clear(); } return(false); } else { return(true); } } default: return(true); } }
public override void AI() { Player owner = Main.player[projectile.owner]; projectile.extraUpdates = 0; if (owner != null && owner.active && owner.SGAPly().liquidGambling > 0) { projectile.extraUpdates = 3; } if (loots == null) { WeightedRandom <LootBoxContents> WR = new WeightedRandom <LootBoxContents>(); loots = new List <LootBoxContents>(); for (int i = 0; i < maxItems; i += 1) { FillLootBox(WR); ExtraItem(WR); WR.Clear(); WR.needsRefresh = true; } } projectile.localAI[0] += Math.Max(0f, ((projectile.timeLeft - (slowDownRate)) / (float)slowDownRate) * speed); if (projectile.localAI[0] > loots.Count) { projectile.localAI[0] = 0f; } if (lastitem != (int)projectile.localAI[0]) { lastitem = (int)projectile.localAI[0]; TickEffect(); } Player player = Main.player[projectile.owner]; if (player != null && player.active) { projectile.scale = Math.Min(projectile.scale + (1f / 60f), Math.Min(1f, projectile.timeLeft / 60f)); if (player.dead) { projectile.Kill(); } else { if (projectile.timeLeft == 200 && Main.netMode != NetmodeID.Server) { LootBoxContents itemtype = loots[(int)projectile.localAI[0]]; player.QuickSpawnItem(itemtype.intid, itemtype.ammount); AwardItem(itemtype.intid); } Vector2 mousePos = Main.MouseWorld; if (projectile.owner == Main.myPlayer) { Vector2 diff = mousePos - player.Center; diff.Normalize(); projectile.direction = Main.MouseWorld.X > player.position.X ? 1 : -1; projectile.netUpdate = true; } projectile.velocity = default(Vector2); projectile.Center = (player.Center); } } else { projectile.Kill(); } }