Scriptname _00E_OverstrainSC extends activemagiceffect ;===================================================================================== ; EVENTS ;===================================================================================== Event OnEffectStart(Actor akTarget, Actor akCaster) If akTarget.HasMagicEffect(_00E_FS_Overstrain_TimerME) _00E_FS_OverstrainImmunity.Show() Else akTargetREF = akTarget akCasterREF = akCaster bAwardXP = (akCasterREF == None || (akCasterREF.GetFactionRank(EPFaction) >= 0) || akCasterREF.HasEffectKeyword(BlameSpellKeyword)) if SKSE.GetVersion() fMagnitude = GetMagnitude() endif fDamageMagnitude = fMagnitude * akCasterREF.GetActorValue("Illusion") / 5 EndIf EndEvent Event OnSpellCast(Form akSpell) CastStun() EndEvent Event OnDying(Actor akKiller) _00E_EPOnDeath akVictim = ((akTargetREF as ObjectReference) as _00E_EPOnDeath) If iStunStage >= 2 && bAwardXP && akVictim akVictim.HasBlameSpell = true EndIf EndEvent ;===================================================================================== ; FUNCTIONS ;===================================================================================== Function CastStun() If iStunStage > 0 || akTargetREF == None Return EndIf iStunStage = 1 akTargetREF.PlaceAtMe(_00E_FS_OverstrainEXP) _00E_Ability_StaggerSelfSpell.RemoteCast(akTargetREF, akCasterREF, akTargetREF) iStunStage = 2 if SKSE.GetVersion() _00E_FS_OverstrainDMGSP.SetNthEffectMagnitude(0, fDamageMagnitude) _00E_FS_OverstrainDMGSP.Cast(akTargetREF, akTargetREF) else ; taper magnitude = effect magnitude * Taper Weight * Taper Duration / (Taper Curve + 1) ; does not match SKSE damage, needs improvement akTargetREF.DamageActorValue("Health", fDamageMagnitude + fDamageMagnitude * 0.3 * 1.0 / (2.0 + 1)) endif IllusionNegativeFXS.Play(akTargetREF) MAGIllusionReleaseAimedSDM.Play(akTargetREF) IllusionDark01Imod.Apply() _00E_FS_OverstrainImmunitySP.Cast(akTargetREF, akTargetREF) Self.Dispel() EndFunction ;===================================================================================== ; PROPERTIES ;===================================================================================== Actor akTargetREF Actor akCasterREF Bool bAwardXP Int iStunStage float fDamageMagnitude Spell Property _00E_Ability_StaggerSelfSpell Auto Spell Property _00E_FS_OverstrainDMGSP Auto Spell Property _00E_FS_OverstrainImmunitySP Auto Sound Property MAGIllusionReleaseAimedSDM Auto EffectShader Property IllusionNegativeFXS Auto MagicEffect Property _00E_FS_Overstrain_TimerME Auto Message Property _00E_FS_OverstrainImmunity Auto Explosion Property _00E_FS_OverstrainEXP Auto ImageSpaceModifier Property IllusionDark01Imod Auto Keyword Property BlameSpellKeyword Auto Faction Property EPFaction Auto Float Property fMagnitude = 7.0 Auto