Beispiel #1
0
        internal static void CalculateLoot(NPC npc, Player player)
        {
            ModItem itembag = null;

            player.active = true;

            if (npc.type == NPCID.KingSlime)
            {
                NPC.downedSlimeKing = false;
            }
            if (npc.type == NPCID.EyeofCthulhu)
            {
                NPC.downedBoss1 = false;
            }
            if (npc.type == NPCID.EaterofWorldsHead)
            {
                NPC.downedBoss2 = false;
            }
            if (npc.type == NPCID.BrainofCthulhu)
            {
                NPC.downedBoss2 = false;
            }
            if (npc.type == NPCID.QueenBee)
            {
                NPC.downedQueenBee = false;
            }
            if (npc.type == NPCID.SkeletronHead)
            {
                NPC.downedBoss3 = false;
            }
            if (npc.type == NPCID.WallofFlesh)
            {
                Main.hardMode = false;
            }
            if (npc.type == NPCID.TheDestroyer)
            {
                NPC.downedMechBoss1 = false;
            }
            if (npc.type == NPCID.Retinazer)
            {
                NPC.downedMechBoss2 = false;
            }
            if (npc.type == NPCID.Spazmatism)
            {
                NPC.downedMechBoss2 = false;
            }
            if (npc.type == NPCID.SkeletronPrime)
            {
                NPC.downedMechBoss3 = false;
            }
            if (npc.type == NPCID.Plantera)
            {
                NPC.downedPlantBoss = false;
            }
            if (npc.type == NPCID.Golem)
            {
                NPC.downedGolemBoss = false;
            }
            if (npc.type == NPCID.DukeFishron)
            {
                NPC.downedFishron = false;
            }
            if (npc.type == NPCID.CultistBoss)
            {
                NPC.downedAncientCultist = false;
            }
            if (npc.type == NPCID.MoonLordCore)
            {
                NPC.downedMoonlord = false;
            }

            if (npc.type == 564 || npc.type == 565 || npc.type == 576 || npc.type == 577)
            {
                DD2Event.Ongoing = true;
            }

            if (npc.type == 345 || npc.type == 346 || npc.type == 344)
            {
                Main.dayTime = false; Main.snowMoon = true;
            }

            if (npc.type == 54 || npc.type == 55 || npc.type == 56 || npc.type == 325 || npc.type == 326 || npc.type == 327 || npc.type == 315 || (npc.type >= 305 && npc.type <= 314))
            {
                Main.dayTime = false; Main.pumpkinMoon = true;
            }

            if (npc.type == 489 || npc.type == 490 || npc.type == 109)
            {
                Main.dayTime = false; Main.bloodMoon = true;
            }

            if (ModLoader.GetMod("CalamityMod") != null)
            {
                if (npc.type == ModLoader.GetMod("CalamityMod").NPCType("Yharon"))
                {
                    npc.modNPC.npc.ai[0]    = 25f;
                    npc.modNPC.npc.ai[2]    = 190;
                    npc.modNPC.npc.timeLeft = 6;
                }
            }

            npc.Center = new Microsoft.Xna.Framework.Vector2(1000, 1000);
            int iterationsWithNoChange = 0;

            var realRandom = Main.rand;
            var fakeRandom = new LootUnifiedRandom();

            for (int i = 0; i < 500; i++)
            {
                if (npc.type == NPCID.KingSlime)
                {
                    player.OpenBossBag(3318);
                }
                if (npc.type == NPCID.EyeofCthulhu)
                {
                    player.OpenBossBag(3319);
                }
                if (npc.type == NPCID.EaterofWorldsHead)
                {
                    player.OpenBossBag(3320);
                }
                if (npc.type == NPCID.BrainofCthulhu)
                {
                    player.OpenBossBag(3321);
                }
                if (npc.type == NPCID.QueenBee)
                {
                    player.OpenBossBag(3322);
                }
                if (npc.type == NPCID.SkeletronHead)
                {
                    player.OpenBossBag(3323);
                }
                if (npc.type == NPCID.WallofFlesh)
                {
                    player.OpenBossBag(3324);
                }
                if (npc.type == NPCID.TheDestroyer)
                {
                    player.OpenBossBag(3325);
                }
                if (npc.type == NPCID.Retinazer)
                {
                    player.OpenBossBag(3326);
                }
                if (npc.type == NPCID.Spazmatism)
                {
                    player.OpenBossBag(3326);
                }
                if (npc.type == NPCID.SkeletronPrime)
                {
                    player.OpenBossBag(3327);
                }
                if (npc.type == NPCID.Plantera)
                {
                    player.OpenBossBag(3328);
                }
                if (npc.type == NPCID.Golem)
                {
                    player.OpenBossBag(3329);
                }
                if (npc.type == NPCID.DukeFishron)
                {
                    player.OpenBossBag(3330);
                }
                if (npc.type == NPCID.CultistBoss)
                {
                    player.OpenBossBag(3331);
                }
                if (npc.type == NPCID.MoonLordCore)
                {
                    player.OpenBossBag(3332);
                }
                if (npc.type == NPCID.DD2Betsy)
                {
                    player.OpenBossBag(3860);
                }
                foreach (var item in Main.item)
                {
                    if (item.active)
                    {
                        //if (ignoreItemIDS.Contains(item.type))  // npc.value = 0;
                        //	continue;
                        loots.Add(item.type);                         // hmm, Item.NewItem reverseLookup?
                        item.active = false;
                        //if (iterationsWithNoChange > 150)
                        //	Debug.WriteLine($"{i}: {iterationsWithNoChange} {item.Name}");
                    }
                    else
                    {
                        break;
                    }
                }
            }

            for (int i = 0; i < MaxNumberLootExperiments; i++)
            {
                if (i == 0)
                {
                    Main.rand = fakeRandom;
                }
                if (i == 50)
                {
                    Main.rand = realRandom;
                }

                if (i == 0 && npc.type == 22)
                {
                    npc.GivenName = "Andrew";
                }
                if (i == 1 && npc.type == 22)
                {
                    npc.GivenName = "Cerberus";
                }

                try
                {
                    LootUnifiedRandom.loop = i;
                    npc.NPCLoot();
                }
                catch
                {
                }
                npc.active = false;
                bool anyNew = false;
                //if(Main.item[400].active || Main.item[399].active)
                //{
                //	Console.WriteLine();
                //}

                foreach (var item in Main.item)
                {
                    if (item.active)
                    {
                        //if (ignoreItemIDS.Contains(item.type))  // npc.value = 0;
                        //	continue;
                        ModItem item2 = ItemLoader.GetItem(item.type);
                        if (item2 != null && item2.CanRightClick())
                        {
                            itembag = item2;
                        }
                        loots.Add(item.type);                         // hmm, Item.NewItem reverseLookup?
                        item.active = false;
                        anyNew      = true;
                        //if (iterationsWithNoChange > 150)
                        //	Debug.WriteLine($"{i}: {iterationsWithNoChange} {item.Name}");
                    }
                    else
                    {
                        break;
                    }
                }

                if (anyNew)
                {
                    iterationsWithNoChange = 0;
                }
                else
                {
                    iterationsWithNoChange++;
                }

                if (iterationsWithNoChange > 250)
                {
                    break;
                }
            }


            Main.snowMoon    = false;
            Main.pumpkinMoon = false;
            Main.bloodMoon   = false;
            DD2Event.Ongoing = false;

            if (npc.type == NPCID.KingSlime)
            {
                NPC.downedSlimeKing = true;
            }
            if (npc.type == NPCID.EyeofCthulhu)
            {
                NPC.downedBoss1 = true;
            }
            if (npc.type == NPCID.EaterofWorldsHead)
            {
                NPC.downedBoss2 = true;
            }
            if (npc.type == NPCID.BrainofCthulhu)
            {
                NPC.downedBoss2 = true;
            }
            if (npc.type == NPCID.QueenBee)
            {
                NPC.downedQueenBee = true;
            }
            if (npc.type == NPCID.SkeletronHead)
            {
                NPC.downedBoss3 = true;
            }
            if (npc.type == NPCID.WallofFlesh)
            {
                Main.hardMode = true;
            }
            if (npc.type == NPCID.TheDestroyer)
            {
                NPC.downedMechBoss1 = true;
            }
            if (npc.type == NPCID.Retinazer)
            {
                NPC.downedMechBoss2 = true;
            }
            if (npc.type == NPCID.Spazmatism)
            {
                NPC.downedMechBoss2 = true;
            }
            if (npc.type == NPCID.SkeletronPrime)
            {
                NPC.downedMechBoss3 = true;
            }
            if (npc.type == NPCID.Plantera)
            {
                NPC.downedPlantBoss = true;
            }
            if (npc.type == NPCID.Golem)
            {
                NPC.downedGolemBoss = true;
            }
            if (npc.type == NPCID.DukeFishron)
            {
                NPC.downedFishron = true;
            }
            if (npc.type == NPCID.CultistBoss)
            {
                NPC.downedAncientCultist = true;
            }
            if (npc.type == NPCID.MoonLordCore)
            {
                NPC.downedMoonlord = true;
            }

            for (int i = 0; i < 500; i++)
            {
                if (itembag != null && itembag.BossBagNPC > 0)
                {
                    itembag.OpenBossBag(player);
                    itembag.RightClick(player);
                }
                foreach (var item in Main.item)
                {
                    if (item.active)
                    {
                        //if (ignoreItemIDS.Contains(item.type))  // npc.value = 0;
                        //	continue;
                        loots.Add(item.type);                                 // hmm, Item.NewItem reverseLookup?
                        item.active = false;
                        //if (iterationsWithNoChange > 150)
                        //	Debug.WriteLine($"{i}: {iterationsWithNoChange} {item.Name}");
                    }
                    else
                    {
                        break;
                    }
                }
            }
            //}
        }