Beispiel #1
0
        public override void ActivateLocally(Character _targetCharacter, object[] _infos)
        {
            if (SummonManager.FindWeakestSummon(_targetCharacter.UID) is Character summonChar &&
                summonChar.isActiveAndEnabled)
            {
                // change blast position to the summon's position
                _infos[0] = summonChar.transform.position;
                base.ActivateLocally(_targetCharacter, _infos);

                // kill the summon
                summonChar.Stats.ReceiveDamage(999f);

                // fix for cooldown not working on this skill for some reason
                var skill = this.ParentItem as Skill;
                skill.m_lastActivationTime           = Time.time;
                skill.m_lastReceivedCooldownProgress = -1;

                // plague aura interaction
                if (PlagueAuraProximityCondition.IsInsidePlagueAura(summonChar.transform.position))
                {
                    // if you're inside a plague aura, detonate resets your Summon cooldown.
                    if (this.OwnerCharacter?.Inventory?.SkillKnowledge?.GetItemFromItemID(8890103) is Skill summonSkill)
                    {
                        summonSkill.ResetCoolDown();
                    }
                }
            }
        }
Beispiel #2
0
    private bool CheckSummonAvaliability(SummonData data, Unit unit, FieldBlock block)
    {
        //check id
        if (data.m_Block.m_PlayerID != m_ID)
        {
            return(false);
        }

        //check position
        if (!SummonManager.CheckPosition(unit, block))
        {
            GameMessage.Instance.Display("That Spirit can't be summoned on that position.");
            return(false);
        }


        //check unique
        if (!CheckUniqueUnit(unit.m_Data))
        {
            GameMessage.Instance.Display("There can only be one Unique Spirit on Battlefield.");
            return(false);
        }

        Debug.Log("Test Mark");

        //check cost
        if (!PlayerManager.Instance.test && !SummonManager.CheckCost(unit, m_Mana))
        {
            GameMessage.Instance.Display("You don't have enough Mana");
            return(false);
        }

        return(true);
    }
Beispiel #3
0
    void Start()
    {
        GameObject f = GameObject.Find("LeapControllerBlockHand");

        summonManager           = f.GetComponent <SummonManager>();
        summonManager.summonTwo = false;
    }
    public static void Summon(UnitData data, FieldBlock block, UnitData data1, UnitData data2)
    {
        PlayerID id = PlayerID.Player1;

        if (data1.m_Owner != null)
        {
            id = data1.m_Owner.m_PlayerID;
            data1.m_Owner.m_Destroy.Destroy();
        }
        else
        {
            Debug.LogError("Spirit doesn't exist");
        }

        if (data2.m_Owner != null)
        {
            id = data1.m_Owner.m_PlayerID;
            data2.m_Owner.m_Destroy.Destroy();
        }
        else
        {
            Debug.LogError("Spirit doesn't exist");
        }

        CostMana(id, data);

        SummonManager.Summon(data, block, id);
    }
        public override void ActivateLocally(Character _affectedCharacter, object[] _infos)
        {
            // SL.Log("summoning necromancer summon...");

            bool armyOfDeathLearned = _affectedCharacter.Inventory.SkillKnowledge.IsItemLearned(8890108);

            int maxSummons = armyOfDeathLearned
                                ? NecromancerMod.settings.Summon_MaxSummons_WithArmyOfDeath
                                : NecromancerMod.settings.Summon_MaxSummons_NoArmyOfDeath;

            int amtToSummon = armyOfDeathLearned
                                ? NecromancerMod.settings.Summon_Summoned_Per_Cast_withArmyOfDeath
                                : 1;

            if (SummonManager.SummonedCharacters.ContainsKey(_affectedCharacter.UID))
            {
                int summoned  = SummonManager.SummonedCharacters[_affectedCharacter.UID].Count;
                int toDestroy = summoned - maxSummons + amtToSummon - 1;

                while (toDestroy >= 0)
                {
                    if (SummonManager.FindWeakestSummon(_affectedCharacter.UID) is Character summon)
                    {
                        CustomCharacters.DestroyCharacterRPC(summon);
                        SummonManager.OnSummonDeath(summon);
                    }

                    toDestroy--;
                }
            }

            // custom health cost for casting
            _affectedCharacter.Stats.UseBurntHealth = NecromancerMod.settings.Summon_BurnsHealth;
            float healthcost = NecromancerMod.settings.Summon_HealthCost * _affectedCharacter.Stats.MaxHealth;

            _affectedCharacter.Stats.ReceiveDamage(healthcost);
            _affectedCharacter.Stats.UseBurntHealth = true;

            // only host should do this
            if (!PhotonNetwork.isNonMasterClientInRoom)
            {
                bool insidePlagueAura = PlagueAuraProximityCondition.IsInsidePlagueAura(_affectedCharacter.transform.position);

                var template = insidePlagueAura ? SummonManager.Ghost : SummonManager.Skeleton;
                this.SLCharacter_UID = template.UID;

                CustomCharacters.Templates.TryGetValue(this.SLCharacter_UID, out charTemplate);

                this.ExtraRpcData = _affectedCharacter.UID.ToString();

                for (int i = 0; i < amtToSummon; i++)
                {
                    base.ActivateLocally(_affectedCharacter, _infos);
                }
            }
        }
Beispiel #6
0
        public override bool CheckIsValid(Character _affectedCharacter)
        {
            var targetSummon = SummonManager.FindWeakestSummon(_affectedCharacter.UID);

            if (targetSummon && targetSummon.GetComponentInChildren <Character>() is Character c && c.Inventory.HasEquipped(RequiredSummonEquipment))
            {
                return(true);
            }

            return(false);
        }
Beispiel #7
0
    public virtual void Init(PlayerID id)
    {
        m_ID = id;

        CardCollection deck = GameData.Instance.GetDeck(m_ID);

        m_Deck.Init(m_Hand, deck, m_ID);

        m_Mana = Instantiate(m_Mana);
        manaDisplay.Init(m_Mana);

        //summon warrior
        SummonManager.SummonWarrior(m_ID, deck.m_Warrior);
    }
    public override void TakeEffect(AbilityInfo[] info)
    {
        base.TakeEffect(info);

        TargetInfo info1 = GetAbilityInfo <TargetInfo>();

        if (info1 == null)
        {
            return;
        }

        foreach (FieldBlock block in info1.m_Blocks)
        {
            if (block.m_Unit == null)
            {
                SummonManager.Summon(m_Unit, block, block.m_PlayerID);
            }
        }
    }
Beispiel #9
0
        public static bool Prefix(Skill __instance, bool _tryingToActivate, ref bool __result)
        {
            if (_tryingToActivate)
            {
                var self = __instance;

                // custom check for Life Ritual and Death Ritual (requires a summoned skeleton)
                if (self.ItemID == 8890105 || self.ItemID == 8890106)
                {
                    if (!SummonManager.FindWeakestSummon(self.OwnerCharacter.UID))
                    {
                        self.OwnerCharacter.CharacterUI.ShowInfoNotification("You need a Summon to do that!");
                        __result = false;
                        return(false);
                    }
                }
            }

            return(true);
        }
Beispiel #10
0
            public static void Do(AIMove.UnitOption option)
            {
                Debug.Log("AI Summon Unit");

                UnitData data = option.data;

                if(AIView.Instance.EmptyFront != null && data.CanBeFrontline)
                {
                    int cost = data.GetStat(UnitStatsProperty.Cost);
                    AIView.Instance.AI.m_Mana.Cost(cost);

                    SummonManager.Summon(data.m_Owner, AIView.Instance.EmptyFront);
                }
                else if (AIView.Instance.EmptyBack != null && data.CanBeBackline)
                {
                    int cost = data.GetStat(UnitStatsProperty.Cost);
                    AIView.Instance.AI.m_Mana.Cost(cost);

                    SummonManager.Summon(data.m_Owner, AIView.Instance.EmptyBack);
                }
            }
Beispiel #11
0
    protected virtual void TrySummon(GameEventData eventData)
    {
        SummonData data = eventData.CastDataType <SummonData>();

        if (data == null)
        {
            return;
        }

        Unit       unit  = data.m_Unit;
        FieldBlock block = data.m_Block;

        if (!CheckSummonAvaliability(data, unit, block))
        {
            return;
        }

        int cost = unit.m_Data.GetStat(UnitStatsProperty.Cost);

        m_Mana.Cost(cost);

        SummonManager.Summon(unit, block);
    }
Beispiel #12
0
        public override void ActivateLocally(Character _affectedCharacter, object[] _infos)
        {
            if (SummonManager.FindWeakestSummon(_affectedCharacter.UID) is Character summonChar)
            {
                bool insideSigil = PlagueAuraProximityCondition.IsInsidePlagueAura(_affectedCharacter.transform.position);

                float healSummon = insideSigil ? 0.66f : 0.33f;

                // restores HP to the summon
                summonChar.Stats.AffectHealth(summonChar.ActiveMaxHealth * healSummon);

                // add status effects
                summonChar.StatusEffectMngr.AddStatusEffect(ResourcesPrefabManager.Instance.GetStatusEffectPrefab("Rage"), null);
                summonChar.StatusEffectMngr.AddStatusEffect(ResourcesPrefabManager.Instance.GetStatusEffectPrefab("Possessed"), null);
                summonChar.StatusEffectMngr.AddStatusEffect(ResourcesPrefabManager.Instance.GetStatusEffectPrefab("Speed Up"), null);

                if (insideSigil)
                {
                    // add decay imbue
                    summonChar.CurrentWeapon.AddImbueEffect(ResourcesPrefabManager.Instance.GetEffectPreset(211) as ImbueEffectPreset, 180f);
                }
            }
        }