Esempio n. 1
0
        private static void CombatDirectorOnPrepareNewMonsterWave(On.RoR2.CombatDirector.orig_PrepareNewMonsterWave orig, CombatDirector self, DirectorCard monsterCard)
        {
            //NOTE: We're completely rewriting this method, so we don't call back to the orig

            self.SetFieldValue("currentMonsterCard", monsterCard);
            ChosenAffix[self] = null;
            if (!((CharacterSpawnCard)monsterCard.spawnCard).noElites)
            {
                var eliteSelection = new WeightedSelection <EliteAffixCard>();

                foreach (var card in Cards)
                {
                    var weight = card.GetSpawnWeight(monsterCard);
                    if (weight > 0 && card.isAvailable())
                    {
                        var cost = monsterCard.cost * card.costMultiplier;
                        if (cost <= self.monsterCredit)
                        {
                            eliteSelection.AddChoice(card, weight);
                        }
                    }
                }

                if (eliteSelection.Count > 0)
                {
                    var rng  = self.GetFieldValue <Xoroshiro128Plus>("rng");
                    var card = eliteSelection.Evaluate(rng.nextNormalizedFloat);
                    ChosenAffix[self] = card;
                }
            }

            self.lastAttemptedMonsterCard = monsterCard;
            self.SetFieldValue("spawnCountInCurrentWave", 0);
        }
Esempio n. 2
0
 internal static void CombatDirector_SetNextSpawnAsBoss(On.RoR2.CombatDirector.orig_SetNextSpawnAsBoss orig, CombatDirector self)
 {
     orig(self);
     var selected = CurrentRun.nextBoss;
     selected.spawnCard.directorCreditCost = (int)((self.monsterCredit / CurrentRun.nextBossCount) / Spawners.GetTierDef(CurrentRun.nextBossElite).costMultiplier);
     self.OverrideCurrentMonsterCard(selected);
     self.SetFieldValue<CombatDirector.EliteTierDef>("currentActiveEliteTier", Spawners.GetTierDef(CurrentRun.nextBossElite));
     self.SetFieldValue<EliteIndex>("currentActiveEliteIndex", CurrentRun.nextBossElite);
     Log.Message($"{selected.spawnCard.name} cost has been set to {selected.cost} for {CurrentRun.nextBossCount} {CurrentRun.nextBossElite} bosses with available credit: {self.monsterCredit}",Log.LogLevel.Info);
     CurrentRun.nextBossCount = 1;
     CurrentRun.nextBossElite = EliteIndex.None;
     On.RoR2.CombatDirector.SetNextSpawnAsBoss -= CombatDirector_SetNextSpawnAsBoss;
 }
Esempio n. 3
0
        internal static void CombatDirector_SetNextSpawnAsBoss(On.RoR2.CombatDirector.orig_SetNextSpawnAsBoss orig, CombatDirector self)
        {
            orig(self);
            self.monsterCredit *= 100;
            var selected = DebugToolkit.nextBoss;

            //todo: fix this line.
            // selected.cost = (int)((self.monsterCredit / DebugToolkit.nextBossCount) / DebugToolkit.GetTierDef(DebugToolkit.nextBossElite).costMultiplier);
            self.OverrideCurrentMonsterCard(selected);
            self.SetFieldValue <CombatDirector.EliteTierDef>("currentActiveEliteTier", DebugToolkit.GetTierDef(DebugToolkit.nextBossElite));
            self.SetFieldValue <EliteIndex>("currentActiveEliteIndex", DebugToolkit.nextBossElite);
            Log.Message($"{selected.spawnCard.name} cost has been set to {selected.cost} for {DebugToolkit.nextBossCount} {DebugToolkit.nextBossElite.ToString()} bosses with available credit: {self.monsterCredit}", Log.LogLevel.Info);
            DebugToolkit.nextBossCount = 1;
            DebugToolkit.nextBossElite = EliteIndex.None;
            On.RoR2.CombatDirector.SetNextSpawnAsBoss -= CombatDirector_SetNextSpawnAsBoss;
        }
Esempio n. 4
0
        private static void CombatDirector_SetNextSpawnAsBoss(On.RoR2.CombatDirector.orig_SetNextSpawnAsBoss orig, CombatDirector self)
        {
            orig(self);

            if (RoR2Cheats.nextBossSet)
            {
                self.monsterCredit *= 100;
                var selected = RoR2Cheats.nextBoss;
                selected.cost = (int)((self.monsterCredit / RoR2Cheats.nextBossCount) / RoR2Cheats.GetTierDef(RoR2Cheats.nextBossElite).costMultiplier);
                self.OverrideCurrentMonsterCard(selected);
                self.SetFieldValue <CombatDirector.EliteTierDef>("currentActiveEliteTier", RoR2Cheats.GetTierDef(RoR2Cheats.nextBossElite));
                self.SetFieldValue <EliteIndex>("currentActiveEliteIndex", RoR2Cheats.nextBossElite);
                Log.Message($"{selected.spawnCard.name} cost has been set to {selected.cost} for {RoR2Cheats.nextBossCount} {RoR2Cheats.nextBossElite.ToString()} bosses with available credit: {self.monsterCredit}");
                RoR2Cheats.ResetNextBoss();
                return;
            }
        }