public override string GetCurrentEffectText(CardStatistics cardStats, SaveManager saveManager, RelicManager relicManager)
        {
            int extraDamage = GetExtraDamage(GetCard());

            if (cardStats == null)
            {
                if (extraDamage > 0)
                {
                    return(string.Format("CardTraitScalingAddDamage_ExtraDamage_XCostOutsideBattle_CardText".Localize(), extraDamage, "tempUpgradeHighlight"));
                }
                return(string.Empty);
            }
            int baseDamage = GetBaseDamage(GetCard());

            if (extraDamage > 0)
            {
                if (!CardStatistics.GetTrackedValueIsValidOutsideBattle(base.StatValueData.trackedValue) && !cardStats.GetIsInActiveBattle())
                {
                    return(string.Format("CardTraitScalingAddDamage_ExtraDamage_XCostOutsideBattle_CardText".Localize(), extraDamage, "tempUpgradeHighlight"));
                }
                return(string.Format("CardTraitScalingAddDamage_ExtraDamage_CardText".Localize(new LocalizedInteger(baseDamage, baseDamage + extraDamage)), extraDamage, "tempUpgradeHighlight"));
            }
            if (!cardStats.GetStatValueShouldDisplayOnCardNow(base.StatValueData))
            {
                return(string.Empty);
            }
            return("CardTraitScalingAddDamage_CurrentScaling_CardText".Localize(new LocalizedIntegers(baseDamage)));
        }
コード例 #2
0
        public static IEnumerator RestartBattleCoroutine(BattleHud battleHud)
        {
            // Get managers from battleHud private fields
            CombatManager    combatManager    = Traverse.Create(battleHud).Field("combatManager").GetValue <CombatManager>();
            GameStateManager gameStateManager = Traverse.Create(combatManager).Field("gameStateManager").GetValue <GameStateManager>();
            SaveManager      saveManager      = Traverse.Create(combatManager).Field("saveManager").GetValue <SaveManager>();
            ScreenManager    screenManager    = Traverse.Create(battleHud).Field("screenManager").GetValue <ScreenManager>();
            CardManager      cardManager      = Traverse.Create(battleHud).Field("cardManager").GetValue <CardManager>();
            CardStatistics   cardStatistics   = Traverse.Create(cardManager).Field("cardStatistics").GetValue <CardStatistics>();

            // Get the current type of run that you're playing
            RunType runType   = Traverse.Create(saveManager).Field("activeRunType").GetValue <RunType>();
            string  sharecode = Traverse.Create(saveManager).Field("activeSharecode").GetValue <string>();

            // Return to the main menu
            // Note: Copied from PauseDialog.ReturnToMainMenu()
            gameStateManager.LeaveGame();
            screenManager.ReturnToMainMenu();
            cardStatistics.ResetAllStats();

            // Wait until the main menu is loaded
            yield return(new WaitUntil(() => SceneManager.GetActiveScene().name == "main_menu" && SceneManager.GetActiveScene().isLoaded));

            yield return(null);

            yield return(null);

            yield return(null);

            // Resume your battle from the main menu
            gameStateManager.ContinueRun(runType, sharecode);
        }
コード例 #3
0
        public override string GetCurrentEffectText(CardStatistics cardStatistics, SaveManager saveManager, RelicManager relicManager)
        {
            int baseDamage  = GetTotalPyreDamage();
            int extraDamage = GetExtraDamage(GetCard());

            // The card text must be different if we're in combat or out of it
            if (cardStatistics != null && cardStatistics.GetIsInActiveBattle())
            {
                // In combat
                if (extraDamage > 0)
                {
                    return(string.Format("Pyreboost_CardText_InsideCombat_WithUpgrades".Localize(), extraDamage, "tempUpgradeHighlight", baseDamage));
                }
                else
                {
                    return(string.Format("Pyreboost_CardText_InsideCombat_NoUpgrades".Localize(), baseDamage));
                }
            }

            // Out of combat
            if (extraDamage > 0)
            {
                return(string.Format(("Pyreboost_CardText_OutsideCombat").Localize(), extraDamage, "tempUpgradeHighlight"));
            }

            return(string.Empty);
        }
コード例 #4
0
 public override string GetCurrentEffectText(CardStatistics cardStatistics, SaveManager saveManager, RelicManager relicManager)
 {
     //if (cardStatistics.GetStatValueShouldDisplayOnCardNow(base.StatValueData))
     //{
     //	return string.Format("CardTraitScalingUpgradeUnitAttack_CurrentScaling_CardText".Localize(), GetMultiplier(cardStatistics));
     //}
     return(string.Empty);
 }
コード例 #5
0
 public int GetCardStatistic(CardStatistics statistic)
 {
     if (_avatarCardStatistics == null)
     {
         InitCardStatistics();
     }
     return(_avatarCardStatistics[statistic]);
 }
 public override string GetCurrentEffectText(CardStatistics cardStatistics, SaveManager saveManager, RelicManager relicManager)
 {
     if (cardStatistics != null && cardStatistics.GetStatValueShouldDisplayOnCardNow(base.StatValueData))
     {
         return("CardTraitScalingReturnConsumedCards_CurrentScaling_CardText".Localize(new LocalizedIntegers(GetAdditionalCardCount(cardStatistics))));
     }
     return(string.Empty);
 }
コード例 #7
0
 public void SetCardStatistic(CardStatistics statistic, int value)
 {
     if (_avatarCardStatistics.ContainsKey(statistic))
     {
         _avatarCardStatistics[statistic] = value;
         ReinitProjectileStatistics();
     }
     else
     {
         _avatarCardStatistics.Add(statistic, value);
     }
 }
        public override int OnApplyingDamage(ApplyingDamageParameters damageParams)
        {
            CardStatistics cardStatistics = damageParams.combatManager.GetCardManager().GetCardStatistics();
            int            baseDamage     = GetBaseDamage(damageParams.damageSourceCard);
            int            extraDamage    = GetExtraDamage(damageParams.damageSourceCard);
            CharacterState attacker       = damageParams.attacker;

            if (attacker != null)
            {
                attacker.SetAttackDamage(attacker.GetAttackDamage() + baseDamage + extraDamage);
            }
            return(baseDamage + extraDamage);
        }
コード例 #9
0
        private int GetMultiplier(CardStatistics cardStatistics)
        {
            CardStatistics.StatValueData statValueData = default(CardStatistics.StatValueData);
            statValueData.cardState      = GetCard();
            statValueData.trackedValue   = GetParamTrackedValue();
            statValueData.entryDuration  = GetParamEntryDuration();
            statValueData.cardTypeTarget = GetParamCardType();
            statValueData.paramSubtype   = GetParamSubtype();
            CardStatistics.StatValueData statValueData2 = statValueData;
            int statValue = cardStatistics.GetStatValue(statValueData2);

            return(statValue);
        }
コード例 #10
0
 public override int GetModifiedCost(int cost, CardState thisCard, CardStatistics cardStats, MonsterManager monsterManager)
 {
     return(GetParamInt());
 }
コード例 #11
0
        static void Postfix(ref string __result, CardTraitScalingReturnConsumedCards __instance, CardStatistics cardStatistics)
        {
            if (cardStatistics != null)
            {
                if (!ProviderManager.TryGetProvider <CardManager>(out CardManager cardManager))
                {
                    return;
                }
                if (!ProviderManager.TryGetProvider <PlayerManager>(out PlayerManager playerManager))
                {
                    return;
                }
                ;

                if (cardManager.GetExhaustedPile() == null)
                {
                    return;
                }

                __result = "CardTraitScalingReturnConsumedCards_CurrentScaling_CardText".Localize(new LocalizedIntegers(UnityEngine.Mathf.Min(playerManager.GetEnergy(), cardManager.GetExhaustedPile().FindAll(x => !x.GetDebugName().Contains("Rewind")).Count)));
            }
        }
        private int GetAdditionalCardCount(CardStatistics cardStatistics)
        {
            int statValue = cardStatistics.GetStatValue(base.StatValueData);

            return(GetParamInt() * statValue);
        }
コード例 #13
0
        public Decision Decide_Hard()
        {
            Decision decision = new Decision();

            decision.found = false;

            for (int i = 0; i < Properties.Settings.Default.nbrPlayers; i++)
            {
                if ((i != player.indexPlayer) && (Game.Instance.players[i].isActive))
                {
                    for (int c = 0; c < 16; c++)
                    {
                        statistics0[i, c] = new CardStatistics();
                    }

                    for (int c = 0; c < 5; c++)
                    {
                        statistics0[i, c].card = Card.Garde;
                    }
                    for (int c = 5; c < 7; c++)
                    {
                        statistics0[i, c].card = Card.Pretre;
                    }
                    for (int c = 7; c < 9; c++)
                    {
                        statistics0[i, c].card = Card.Baron;
                    }
                    for (int c = 9; c < 11; c++)
                    {
                        statistics0[i, c].card = Card.Servante;
                    }
                    for (int c = 11; c < 13; c++)
                    {
                        statistics0[i, c].card = Card.Prince;
                    }
                    statistics0[i, 13].card = Card.Roi;
                    statistics0[i, 14].card = Card.Comtesse;
                    statistics0[i, 15].card = Card.Princesse;

                    if (seen[i] != Card.Unknown)
                    {
                        //we know the card

                        for (int c = 0; c < 16; c++)
                        {
                            statistics0[i, c].canBe = false;
                        }

                        CanBe(i, seen[i]);
                    }
                    else
                    {
                        //exclude cards of other players & removed cards
                        for (int j = 0; j < Properties.Settings.Default.nbrPlayers; j++)
                        {
                            if ((i != j) && Game.Instance.players[j].isActive)
                            {
                                if (seen[j] != Card.Unknown)
                                {
                                    CannotBe(i, seen[j]);
                                }
                            }

                            foreach (LoveLetter.Card card in Game.Instance.players[j].deadCard)
                            {
                                CannotBe(i, (Card)card.value);
                            }

                            foreach (LoveLetter.Card card in Game.Instance.removedCards)
                            {
                                CannotBe(i, (Card)card.value);
                            }
                        }
                    }

                    for (int j = 1; j < 9; j++)
                    {
                        statistics1[i, j] = 0;
                    }

                    for (int j = 0; j < 16; j++)
                    {
                        if (statistics0[i, j].canBe)
                        {
                            statistics1[i, (int)statistics0[i, j].card]++;
                        }
                    }
                }
            }

            if (Have(Card.Prince) && (PlayerLikelyWith(Card.Princesse) != -1)) //Si l'IA a un prince et qu'un autre joueur a une princesse, on peut éliminer ce joueur
            {
                decision.chosenCard  = Hand(Card.Prince);
                decision.guessPlayer = PlayerLikelyWith(Card.Princesse);
                decision.guessCard   = (int)Card.Princesse;
                decision.found       = true;
            }
            else if (Have(Card.Baron) && (PlayerLikelyWithBelow(Other(Card.Baron)) != -1)) //Si l'IA a un baron et qu'un joueur a une carte inférieure à notre autre carte
            {
                decision.chosenCard  = Hand(Card.Baron);
                decision.guessPlayer = PlayerLikelyWithBelow(Other(Card.Baron));
                decision.found       = true;
            }

            if (!decision.found)
            {
                if (Have(Card.Garde))
                {
                    Tuple <int, Card> target = PlayerWithMostLikelyCardThatIsntGuard();
                    if (target.Item1 != -1)
                    {
                        decision.chosenCard  = Hand(Card.Garde);
                        decision.guessPlayer = target.Item1;
                        decision.guessCard   = (int)target.Item2;
                        decision.found       = true;
                    }
                }
            }

            return(decision);
        }
コード例 #14
0
        static bool Prefix(RelicEffectBase __instance, ref StringBuilder stringBuilder, CardStatistics cardStatistics)
        {
            RelicEffectRewind relicEffect;

            if ((relicEffect = __instance as RelicEffectRewind) != null)
            {
                // When we find our relic type, we overwrite this entire method to bypass CardStatistics which can't track our custom relic triggers correctly
                string countDisplayString = relicEffect._counter.ToString() + "/1";
                if (!string.IsNullOrWhiteSpace(countDisplayString))
                {
                    if (stringBuilder.Length > 0)
                    {
                        stringBuilder.Append(", ");
                    }
                    stringBuilder.Append(countDisplayString);
                }
                return(false);
            }
            return(true);
        }
コード例 #15
0
 public override void OnTrigger(CardStatistics cardStatistics)
 {
     // We override this for this relic to handle the manual counting we do for when the effect has triggered (for the UI)
     // Don't run the base class's implementation with this RelicEffect
 }