Ejemplo n.º 1
0
        public override IEnumerator ApplyEffect(CardEffectState cardEffectState, CardEffectParams cardEffectParams)
        {
            ProviderManager.TryGetProvider <RoomManager>(out RoomManager roomManager);
            CharacterState target = roomManager.GetPyreRoom().GetPyreHeart();

            if (cardEffectParams.saveManager.PreviewMode)
            {
                yield break;
            }

            StatusEffectStackData statusEffectStack = GetStatusEffectStack(cardEffectState);

            if (statusEffectStack == null)
            {
                yield break;
            }
            int intInRange = cardEffectState.GetIntInRange();

            CharacterState.AddStatusEffectParams addStatusEffectParams = default(CharacterState.AddStatusEffectParams);
            addStatusEffectParams.sourceRelicState = cardEffectParams.sourceRelic;
            addStatusEffectParams.sourceCardState  = cardEffectParams.playedCard;
            addStatusEffectParams.cardManager      = cardEffectParams.cardManager;
            addStatusEffectParams.sourceIsHero     = (cardEffectState.GetSourceTeamType() == Team.Type.Heroes);
            CharacterState.AddStatusEffectParams addStatusEffectParams2 = addStatusEffectParams;

            RngId         rngId = cardEffectParams.saveManager.PreviewMode ? RngId.BattleTest : RngId.Battle;
            PlayerManager playerManager;

            ProviderManager.TryGetProvider <PlayerManager>(out playerManager);

            target.AddStatusEffect(statusEffectStack.statusId, playerManager.GetEnergy(), addStatusEffectParams2);
        }
Ejemplo n.º 2
0
        public override IEnumerator ApplyEffect(CardEffectState cardEffectState, CardEffectParams cardEffectParams)
        {
            StatusEffectStackData statusEffectStack = GetStatusEffectStack(cardEffectState);

            if (statusEffectStack == null)
            {
                yield break;
            }
            if (statusEffectStack.statusId == Burnout)
            {
                if (cardEffectParams.targets[0].IsMiniboss() || cardEffectParams.targets[0].IsOuterTrainBoss())
                {
                    yield break;
                }
            }
            CharacterState.AddStatusEffectParams addStatusEffectParams = default(CharacterState.AddStatusEffectParams);
            addStatusEffectParams.sourceRelicState = cardEffectParams.sourceRelic;
            addStatusEffectParams.sourceCardState  = cardEffectParams.playedCard;
            addStatusEffectParams.cardManager      = cardEffectParams.cardManager;
            addStatusEffectParams.sourceIsHero     = (cardEffectState.GetSourceTeamType() == Team.Type.Heroes);
            CharacterState.AddStatusEffectParams addStatusEffectParams2 = addStatusEffectParams;
            for (int num = cardEffectParams.targets.Count - 1; num >= 0; num--)
            {
                CharacterState characterState = cardEffectParams.targets[num];
                int            count          = statusEffectStack.count;
                characterState.AddStatusEffect(statusEffectStack.statusId, count, addStatusEffectParams2);
            }
        }
        public int GetStatusEffectStacksToAdd(StatusEffectStackData statusEffectStackData, CharacterState onCharacter)
        {
            if (!canApply || (onCharacter == null) || statusEffectStackData == null || statusEffectStackData.statusId == null)
            {
                return(0);
            }

            ProviderManager.TryGetProvider <StatusEffectManager>(out StatusEffectManager statusManager);
            var status = statusManager.GetStatusEffectDataById(statusEffectStackData.statusId);

            if (status == null)
            {
                return(0);
            }

            bool validBuff   = status.GetDisplayCategory() == StatusEffectData.DisplayCategory.Positive || statusEffectStackData.statusId == Armor || statusEffectStackData.statusId == Burnout;
            bool validDebuff = status.GetDisplayCategory() == StatusEffectData.DisplayCategory.Negative;

            if (validBuff && onCharacter.GetTeamType() != Team.Type.Monsters)
            {
                return(0);
            }
            if (validDebuff && onCharacter.GetTeamType() == Team.Type.Monsters)
            {
                return(0);
            }
            if (!validBuff && !validDebuff)
            {
                return(0);
            }

            lastStatus = statusEffectStackData.statusId;
            return(1);
        }
Ejemplo n.º 4
0
        public override bool TestEffect(CardEffectState cardEffectState, CardEffectParams cardEffectParams)
        {
            StatusEffectStackData statusEffectStack = GetStatusEffectStack(cardEffectState);

            if (statusEffectStack == null)
            {
                return(false);
            }
            if (cardEffectState.GetTargetMode() != TargetMode.DropTargetCharacter)
            {
                return(true);
            }
            if (cardEffectParams.targets.Count <= 0)
            {
                return(false);
            }
            if (cardEffectParams.statusEffectManager.GetStatusEffectDataById(statusEffectStack.statusId).IsStackable())
            {
                return(true);
            }
            ProviderManager.TryGetProvider <RoomManager>(out RoomManager roomManager);
            CharacterState target = roomManager.GetPyreRoom().GetPyreHeart();

            if (!target.HasStatusEffect(statusEffectStack.statusId))
            {
                return(true);
            }
            return(false);
        }
Ejemplo n.º 5
0
 public void Setup()
 {
     _primaryEnchantedTargets = new Dictionary <CharacterState, EnchantedState>();
     _previewEnchantedTargets = new Dictionary <CharacterState, EnchantedState>();
     statusEffect             = new StatusEffectStackData {
         count = 1, statusId = "pyreboost"
     };
 }
Ejemplo n.º 6
0
        public static void GetTooltipsStatusList(CardEffectData cardEffectData, ref List <string> outStatusIdList)
        {
            StatusEffectStackData statusEffectStack = GetStatusEffectStack(cardEffectData);

            if (statusEffectStack != null)
            {
                outStatusIdList.Add(statusEffectStack.statusId);
            }
        }
        static void Prefix(ref CardData setCardData)
        {
            if (!triggered && setCardData.GetName() == "Frozen Lance")
            {
                triggered = true;

                // Add piercing to Frozen Lance's trait list
                var piercingTrait = new CardTraitData();
                piercingTrait.Setup("CardTraitIgnoreArmor");
                setCardData.GetTraits().Add(piercingTrait);

                // Instantiate a new card effect. We're going to use it to add 327 frostbite to Frozen Lance.
                var frostbiteEffect = new CardEffectData();

                // Tell the game that this card effect should add a status effect to the target(s)
                var prop = typeof(CardEffectData).GetField("effectStateName", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                prop.SetValue(frostbiteEffect, "CardEffectAddStatusEffect");

                // Set targeting mode to be the same one used by Flash Freeze: Last Targeted Characters
                prop = typeof(CardEffectData).GetField("targetMode", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                prop.SetValue(frostbiteEffect, TargetMode.LastTargetedCharacters);

                // This field can't be null, or the game crashes with a NullPointerException
                // Seems like all the other null fields are fine, though, at least at a glance
                prop = typeof(CardEffectData).GetField("targetModeStatusEffectsFilter", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                prop.SetValue(frostbiteEffect, new String[0]);

                // Create the Frostbite status and add it to the effect's status array
                StatusEffectStackData frostbiteStatus = new StatusEffectStackData();
                frostbiteStatus.statusId = "poison";
                frostbiteStatus.count    = 327;
                prop = typeof(CardEffectData).GetField("paramStatusEffects", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                prop.SetValue(frostbiteEffect, new StatusEffectStackData[] { frostbiteStatus });

                // Add the Frostbite effect to Frozen Lance's card effect list
                setCardData.GetEffects().Add(frostbiteEffect);

                // Remove the override description key, so we can replace the card's description with our own
                prop = typeof(CardData).GetField("overrideDescriptionKey", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                prop.SetValue(setCardData, "");

                // Set a custom card description
                var customDescTrait = new CardTraitDataBuilder
                {
                    TraitStateName = "CardTraitCustomDescription",
                    ParamStr       = "<size=50%><br><br></size>Deal [effect0.power] damage to the front enemy unit and apply [frostbite] [effect1.status0.power]"
                }.Build();
                setCardData.GetTraits().Add(customDescTrait);

                // Set Frozen Lance's damage to 4967
                prop = typeof(CardEffectData).GetField("paramInt", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                prop.SetValue(setCardData.GetEffects()[0], 4967);
            }
        }
        public static StatusEffectStackData[] AddStatusEffect(string statusEffectID, int stackCount, StatusEffectStackData[] oldStatuses)
        {
            var statusEffectData = new StatusEffectStackData
            {
                statusId = statusEffectID,
                count    = stackCount
            };
            var newStatuses = new StatusEffectStackData[oldStatuses.Length + 1];
            int i;

            for (i = 0; i < oldStatuses.Length; i++)
            {
                newStatuses[i] = oldStatuses[i];
            }
            newStatuses[i] = statusEffectData;
            return(newStatuses);
        }
Ejemplo n.º 9
0
        public static void Modify()
        {
            string frozenLanceID   = VanillaCardIDs.FrozenLance;
            var    frozenLanceData = CustomCardManager.GetCardDataByID(frozenLanceID);

            // Add piercing to Frozen Lance's trait list
            var    piercingTrait     = new CardTraitData();
            string piercingTraitName = VanillaCardTraitTypes.CardTraitIgnoreArmor.AssemblyQualifiedName;

            piercingTrait.Setup(piercingTraitName);
            frozenLanceData.GetTraits().Add(piercingTrait);

            // Set Frozen Lance's damage to 12
            var frozenLanceDamageEffect = frozenLanceData.GetEffects()[0];

            Traverse.Create(frozenLanceDamageEffect).Field("paramInt").SetValue(12);

            // Instantiate the Frostbite CardEffect
            var frostbiteEffect = new CardEffectData();

            // Set its effect type
            string addStatusEffectName = VanillaCardEffectTypes.CardEffectAddStatusEffect.AssemblyQualifiedName;

            Traverse.Create(frostbiteEffect).Field("effectStateName").SetValue(addStatusEffectName);

            // Set targeting mode to be the same one used by Flash Freeze: Last Targeted Characters
            Traverse.Create(frostbiteEffect).Field("targetMode").SetValue(TargetMode.LastTargetedCharacters);

            // This field can't be null, or the game crashes with a NullPointerException
            // All the other null fields are fine, though
            Traverse.Create(frostbiteEffect).Field("targetModeStatusEffectsFilter").SetValue(new string[0]);

            // Create the Frostbite status and add it to the effect's status array
            StatusEffectStackData frostbiteStatus = new StatusEffectStackData();

            frostbiteStatus.statusId = VanillaStatusEffectIDs.Frostbite;
            frostbiteStatus.count    = 327;
            var paramStatusEffects = new StatusEffectStackData[] { frostbiteStatus };

            Traverse.Create(frostbiteEffect).Field("paramStatusEffects").SetValue(paramStatusEffects);

            // Add the Frostbite effect to Frozen Lance's card effect list
            frozenLanceData.GetEffects().Add(frostbiteEffect);
        }
Ejemplo n.º 10
0
        public override bool TestEffect(CardEffectState cardEffectState, CardEffectParams cardEffectParams)
        {
            StatusEffectStackData statusEffectStack = GetStatusEffectStack(cardEffectState);

            if (cardEffectParams.targets.Count <= 0)
            {
                return(false);
            }
            if (statusEffectStack.statusId == Burnout)
            {
                if (cardEffectParams.targets[0].IsMiniboss() || cardEffectParams.targets[0].IsOuterTrainBoss())
                {
                    return(false);
                }
            }
            if (statusEffectStack == null)
            {
                return(false);
            }
            if (cardEffectState.GetTargetMode() != TargetMode.DropTargetCharacter)
            {
                return(true);
            }
            if (cardEffectParams.statusEffectManager.GetStatusEffectDataById(statusEffectStack.statusId).IsStackable())
            {
                return(true);
            }
            foreach (CharacterState target in cardEffectParams.targets)
            {
                if (!target.HasStatusEffect(statusEffectStack.statusId))
                {
                    return(true);
                }
            }
            return(false);
        }
Ejemplo n.º 11
0
        public static StatusEffectStackData GetStatusEffectStack(CardEffectState cardEffectState)
        {
            ClassData             otherClass;
            bool                  exiled = false;
            StatusEffectStackData statusEffectStackData;

            var mainClass = ProviderManager.SaveManager.GetMainClass();
            var subClass  = ProviderManager.SaveManager.GetSubClass();

            if (mainClass == DiscipleClan.clanRef)
            {
                otherClass = subClass;
                exiled     = ProviderManager.SaveManager.GetSubChampionIndex() != 0;
            }
            else
            {
                otherClass = mainClass;
                exiled     = ProviderManager.SaveManager.GetMainChampionIndex() != 0;
            }

            int Param = cardEffectState.GetParamInt();

            if (otherClass == null)
            {
                return(null);
            }
            switch (otherClass.GetID())
            {
            case Hellhorned:
                if (!exiled)
                {
                    statusEffectStackData = new StatusEffectStackData {
                        statusId = Rage, count = Param
                    }
                }
                ;
                else
                {
                    statusEffectStackData = new StatusEffectStackData {
                        statusId = Armor, count = Param * 2
                    }
                };
                break;

            case Awoken:
                if (!exiled)
                {
                    statusEffectStackData = new StatusEffectStackData {
                        statusId = Spikes, count = Param
                    }
                }
                ;
                else
                {
                    statusEffectStackData = new StatusEffectStackData {
                        statusId = Regen, count = Param
                    }
                };
                break;

            case Stygian:
                if (!exiled)
                {
                    statusEffectStackData = new StatusEffectStackData {
                        statusId = SpellWeakness, count = Param / 2
                    }
                }
                ;
                else
                {
                    statusEffectStackData = new StatusEffectStackData {
                        statusId = Frostbite, count = Param
                    }
                };
                break;

            case Umbra:
                if (!exiled)
                {
                    statusEffectStackData = new StatusEffectStackData {
                        statusId = DamageShield, count = Param / 2
                    }
                }
                ;
                else
                {
                    statusEffectStackData = new StatusEffectStackData {
                        statusId = Lifesteal, count = Param / 2
                    }
                };
                break;

            case MeltingRemnant:
                if (!exiled)
                {
                    statusEffectStackData = new StatusEffectStackData {
                        statusId = Burnout, count = Param + 1
                    }
                }
                ;
                else
                {
                    statusEffectStackData = new StatusEffectStackData {
                        statusId = Stealth, count = Param / 2
                    }
                };
                break;

            default:
                statusEffectStackData = new StatusEffectStackData {
                    statusId = "gravity", count = Param / 2
                };
                break;
            }

            return(statusEffectStackData);
        }
 public int GetModifiedStatusEffectStacksFromMultiplier(StatusEffectStackData statusEffectStackData, CharacterState onCharacter)
 {
     return(statusEffectStackData.count);
 }