示例#1
0
        public static void DoMagicAttack(Attack baseAttack)
        {
            Debug.Log("Staff attack triggered");
            var anim = baseAttack.GetCharacter().gameObject.GetComponent <CastingAnimations>();

            if (!anim.IsLocked && baseAttack.UseAmmo())
            {
                var  runeName = baseAttack.GetAmmoItem()?.m_shared?.m_name;
                Rune rune     = RuneDB.Instance.GetRune(runeName);
                if (rune != null)
                {
                    RuneEffect runeAttack       = rune.Effect;
                    float      magicSkillFactor = baseAttack.GetCharacter().GetSkillFactor(MagicSkill.MagicSkillDef.m_skill);
                    foreach (var statusEffect in baseAttack.GetCharacter().GetSEMan().GetStatusEffects())
                    {
                        if (statusEffect is RuneEffects.IndexRuneEffect.ISE_MagicBuff magicBuff)
                        {
                            magicBuff.ModifyMagic(ref magicSkillFactor);
                        }
                    }
                    runeAttack._Effectiveness = 1 + magicSkillFactor;

                    runeAttack.Precast(baseAttack);

                    anim.OnComplete = () => CompleteMagicAttack(baseAttack, runeAttack, runeName);
                    anim.Play(runeAttack.speed);
                }
            }
        }
示例#2
0
 public static void CompleteMagicAttack(Attack baseAttack, RuneEffect runeAttack, string runeName)
 {
     try
     {
         runeAttack.DoMagicAttack(baseAttack);
         ((Player)baseAttack.GetCharacter()).RaiseSkill(MagicSkill.MagicSkillDef.m_skill, 1);
     }
     catch (Exception ex)
     {
         baseAttack.GetCharacter().PickupPrefab(RuneDB.Instance.GetRune(runeName).prefab);
         baseAttack.GetCharacter().Message(MessageHud.MessageType.TopLeft, ex.Message);
         Debug.LogWarning(ex);
     }
 }