Scriptname _00E_Phasmalist_Transmute extends activemagiceffect Actor Caster Actor Target int SoundHandler Message Property _00E_Levelsystem_sEnemyHasToBeDead Auto Actor Property PlayerREF Auto Perk Property _00E_Class_Phasmalist_P08c_Talent_Transmute Auto Perk Property _00E_Class_Phasmalist_P08c_Talent_Transmute2 Auto Perk Property _00E_Class_Phasmalist_P08c_Talent_Transmute3 Auto Shout Property _00E_Phasmalist_A2_TransmuteShout Auto Sound Property MAGMystisicmSoulTrapActiveLP Auto VisualEffect Property _00E_Phasmalist_TransmuteDrainVisual Auto Explosion Property _00E_Phasmalist_TransmuteExp Auto Keyword Property actorTypeUndead Auto Activator Property _00E_Phasmalist_TransmutePile Auto Ingredient Property undeadLoot Auto SoulGem Property normalLoot Auto Event OnEffectStart(Actor akTarget, Actor akCaster) If !akTarget.IsDead() _00E_Levelsystem_sEnemyHasToBeDead.Show() (PlayerREF as _00E_Game_TalentControlSC).SetTalentRecoveryTime(_00E_Phasmalist_A2_TransmuteShout, 0) Return Else Target = akTarget Caster = akCaster akTarget.ApplyHavokImpulse(0.0, 0.0, 100.0, 10.0) Self.PlayVictimAndPlayerFX() Utility.Wait(1.5) akTarget.SetCriticalStage(akTarget.CritStage_DisintegrateStart) Self.GetItems() Utility.Wait(1.5) Self.ExplodeVictim() akTarget.SetCriticalStage(akTarget.CritStage_DisintegrateEnd) EndIf EndEvent Function PlayVictimAndPlayerFX() ;TODO: play shaders SoundHandler = MAGMystisicmSoulTrapActiveLP.Play(Caster) _00E_Phasmalist_TransmuteDrainVisual.Play(Target, akFacingObject = Caster) _00E_Phasmalist_TransmuteDrainVisual.Play(Caster, akFacingObject = Target) EndFunction Function ExplodeVictim() Game.ShakeCamera(afStrength = 0.2) Sound.StopInstance(SoundHandler) Target.placeAtMe(_00E_Phasmalist_TransmuteExp) Target.AttachAshPile(_00E_Phasmalist_TransmutePile) Target.SetAlpha(0.0, true) ;stop shader _00E_Phasmalist_TransmuteDrainVisual.Stop(Target) _00E_Phasmalist_TransmuteDrainVisual.Stop(Caster) Target.InterruptCast() Target.DispelAllSpells() Target.Kill(Caster) EndFunction Function GetItems() if Target.HasKeyword(actorTypeUndead) Caster.AddItem(undeadLoot) else Caster.AddItem(normalLoot) Endif Endfunction int Function GetTalentLevel() return _00E_TalentLibrary.GetPlayerTalentLevel(_00E_Class_Phasmalist_P08c_Talent_Transmute, _00E_Class_Phasmalist_P08c_Talent_Transmute2, _00E_Class_Phasmalist_P08c_Talent_Transmute3) EndFunction