private void SetBossValues(ushort bossId, ushort experience, ushort gella)
        {
            var boss = EnemyCollection.GetMappedObject(bossId);

            boss.Xp    = experience;
            boss.Gella = gella;
        }
        private void DebuffSoloFights()
        {
            var ceciliaSoloFight = EnemyCollection.GetMappedObject(CeciliaSoloFightId);

            ceciliaSoloFight.Atp      = (ushort)(ceciliaSoloFight.Atp / 2);
            ceciliaSoloFight.Sor      = (ushort)(ceciliaSoloFight.Sor / 2);
            ceciliaSoloFight.Xp       = 20000;
            ceciliaSoloFight.Gella    = 20000;
            ceciliaSoloFight.DropId   = 124; //Necronomicon
            ceciliaSoloFight.DropRate = 100;

            var jackSoloFight = EnemyCollection.GetMappedObject(JackSoloFightId);

            jackSoloFight.Atp      = (ushort)(jackSoloFight.Atp / 2);
            jackSoloFight.Sor      = (ushort)(jackSoloFight.Sor / 2);
            jackSoloFight.Xp       = 20000;
            jackSoloFight.Gella    = 20000;
            jackSoloFight.DropId   = 59; //Juggernaut
            jackSoloFight.DropRate = 100;
        }
        private void AssignThreeOrbs()
        {
            var wingsBossId = BossOrbTierList.TieredBossIds[0][Agent.Rng.Next(0, BossOrbTierList.TieredBossIds[0].Count)];

            WingsArea = BossOrbTierList.IdToAreaName[wingsBossId];
            var armsBossId = BossOrbTierList.TieredBossIds[1][Agent.Rng.Next(0, BossOrbTierList.TieredBossIds[1].Count)];

            ArmsArea = BossOrbTierList.IdToAreaName[armsBossId];
            var fakeEyeBossId = BossOrbTierList.TieredBossIds[2][Agent.Rng.Next(0, BossOrbTierList.TieredBossIds[2].Count)];

            FakeEyeArea = BossOrbTierList.IdToAreaName[fakeEyeBossId];
            RealEyeArea = FakeEyeArea;

            var realEyeBossId = 0;

            while (RealEyeArea.Equals(FakeEyeArea))
            {
                realEyeBossId = BossOrbTierList.TieredBossIds[2][Agent.Rng.Next(0, BossOrbTierList.TieredBossIds[2].Count)];
                RealEyeArea   = BossOrbTierList.IdToAreaName[realEyeBossId];
            }

            var wingsBoss = EnemyCollection.GetMappedObject(wingsBossId);

            wingsBoss.DropId   = Wings;
            wingsBoss.DropRate = 100;

            var armsBoss = EnemyCollection.GetMappedObject(armsBossId);

            armsBoss.DropId   = Arms;
            armsBoss.DropRate = 100;

            var fakeEyeBoss = EnemyCollection.GetMappedObject(fakeEyeBossId);

            fakeEyeBoss.DropId   = FakeEye;
            fakeEyeBoss.DropRate = 100;

            var realEyeBoss = EnemyCollection.GetMappedObject(realEyeBossId);

            realEyeBoss.DropId   = RealEye;
            realEyeBoss.DropRate = 100;
        }
        private void ScaleEnemies(int oldTier, int newTier, int oldBossId, int newBossId)
        {
            if (newTier == oldTier)
            {
                return;
            }
            var oldBoss = EnemyCollection.GetMappedObject(oldBossId);
            var newBoss = EnemyCollection.GetMappedObject(newBossId);

            if (oldTier > newTier)
            {
                ScaleDownEnemy(oldBoss, newTier, oldTier);
                ScaleUpEnemy(newBoss, newTier, oldTier);
            }
            else
            {
                ScaleUpEnemy(oldBoss, oldTier, newTier);
                ScaleDownEnemy(newBoss, oldTier, newTier);
            }
            EnemyTierList.SwapTiers(oldBossId, newBossId);
        }
 private void AssignItemDrops()
 {
     foreach (var id in BossOrbTierList.TieredBossIds[0])
     {
         var boss = EnemyCollection.GetMappedObject(id);
         if (boss.DropId == Wings)
         {
             continue;
         }
         var potentialItemIds = new List <int>();
         potentialItemIds.AddRange(ItemTierList.TieredItemList[5]);
         potentialItemIds.AddRange(ItemTierList.TieredItemList[6]);
         potentialItemIds.AddRange(ItemTierList.TieredItemList[7]);
         var item = ItemCollection.GetMappedObject(0);
         while (item.EquipSlot == ItemMasks.EquipSlot.None)
         {
             item = ItemCollection.GetMappedObject(potentialItemIds[Agent.Rng.Next(0, potentialItemIds.Count)]);
         }
         boss.DropId   = (byte)item.Id;
         boss.DropRate = 100;
     }
     foreach (var id in BossOrbTierList.TieredBossIds[1])
     {
         var boss = EnemyCollection.GetMappedObject(id);
         if (boss.DropId == Arms)
         {
             continue;
         }
         var potentialItemIds = new List <int>();
         potentialItemIds.AddRange(ItemTierList.TieredItemList[8]);
         potentialItemIds.AddRange(ItemTierList.TieredItemList[9]);
         potentialItemIds.AddRange(ItemTierList.TieredItemList[10]);
         var item = ItemCollection.GetMappedObject(0);
         while (item.EquipSlot == ItemMasks.EquipSlot.None)
         {
             item = ItemCollection.GetMappedObject(potentialItemIds[Agent.Rng.Next(0, potentialItemIds.Count)]);
         }
         boss.DropId   = (byte)item.Id;
         boss.DropRate = 100;
     }
     foreach (var id in BossOrbTierList.TieredBossIds[2])
     {
         var boss = EnemyCollection.GetMappedObject(id);
         if (boss.DropId == RealEye || boss.DropId == FakeEye)
         {
             continue;
         }
         var potentialItemIds = new List <int>();
         potentialItemIds.AddRange(ItemTierList.TieredItemList[11]);
         potentialItemIds.AddRange(ItemTierList.TieredItemList[12]);
         potentialItemIds.AddRange(ItemTierList.TieredItemList[13]);
         potentialItemIds.AddRange(ItemTierList.TieredItemList[14]);
         var item = ItemCollection.GetMappedObject(0);
         while (item.EquipSlot == ItemMasks.EquipSlot.None)
         {
             item = ItemCollection.GetMappedObject(potentialItemIds[Agent.Rng.Next(0, potentialItemIds.Count)]);
         }
         boss.DropId   = (byte)item.Id;
         boss.DropRate = 100;
     }
 }
        public void ShuffleBossOrder()
        {
            var toSwap  = new List <Tuple <int, int> >();
            var swapped = new HashSet <int>();

            foreach (var bossId in EnemyTierList.BossIds)
            {
                //determine new tier rank
                var  swapBossId   = bossId;
                byte newTier      = 0;
                byte originalTier = 0;
                while (swapBossId == bossId)
                {
                    originalTier = EnemyTierList.GetBossTier(bossId);
                    newTier      = RandomFunctions.GenerateGaussianByte(Agent.Rng, originalTier, Agent.Probabilities.BossShuffleStandardDeviation, (byte)(EnemyTierList.TieredBossIds.Count - 1));
                    if (newTier < 0)
                    {
                        newTier = 0;
                    }
                    //determine what boss to swap with based on new rank
                    var randNum = Agent.Rng.Next(0, EnemyTierList.TieredBossIds[newTier].Count);
                    swapBossId = EnemyTierList.TieredBossIds[newTier][randNum];
                }
                swapped.Add(bossId);
                swapped.Add(swapBossId);
                ScaleEnemies(originalTier, newTier, bossId, swapBossId);
                toSwap.Add(new Tuple <int, int>(bossId, swapBossId));
            }
            EnemyCollection.WriteObjects(Agent.GeneralConfiguration.TempFile);

            foreach (var t in toSwap)
            {
                EnemyCollection.SwapMappedObjects(Agent.GeneralConfiguration.TempFile, EnemyCollection.GetMappedObject(t.Item1), EnemyCollection.GetMappedObject(t.Item2));
            }

            /*
             * foreach (var t in toSwap)
             * {
             *  var bossA = EnemyCollection.GetMappedObject(t.Item1);
             *  var bossB = EnemyCollection.GetMappedObject(t.Item2);
             *  bossA.WriteByte((byte)t.Item2, EnemyOffsets.Id);
             *  bossB.WriteByte((byte)t.Item1, EnemyOffsets.Id);
             * }*/
        }