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); } } }
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); } }