Scriptname _00E_FS_DreameaterSC extends activemagiceffect  
{Dreameater bonus damage}

;=====================================================================================
;              							 EVENTS                   					 
;=====================================================================================

event OnEffectStart(Actor akTarget, Actor akCaster)
	if SKSE.GetVersion()
		fMagnitude = GetMagnitude()
	endif
endevent

Event OnEffectFinish(Actor akTarget, Actor akCaster)
	if ! fMagnitude
		fMagnitude = akTarget.GetActorValue(sActorValue)
	endif
	
	akTarget.RestoreActorValue(sActorValue, fMagnitude)
	
	if akTarget.IsDead()
		return
	endif
	
	Float fBonusDamage = fMagnitude * akCaster.GetActorValue("Illusion") / 3.0
	If fBonusDamage < fMagnitude
		fBonusDamage = fMagnitude
	EndIf
	
	; Sneak bonus
	If IsExtraDamageApplicable(akTarget, akCaster)
		Float fStealthModifier = Game.GetGameSettingFloat("fCombatSneakBowMult")
		If akCaster.HasPerk(_00E_Class_Infiltrator_P03_B_HeartShot)
			fStealthModifier = fStealthModifier * _00E_Class_Infiltrator_P03_B_HeartShot.GetNthEntryValue(0, 0)
		EndIf
		If akCaster == PlayerREF
			_00E_FS_FakeStealthMsg.Show(fStealthModifier)
			UISneakAttackM.Play(akCaster)
		EndIf
		fBonusDamage = fBonusDamage * fStealthModifier
	EndIf
	
	; Target's magic resistance
	Float fMagicResist = akTarget.GetActorValue("MagicResist")
	If fMagicResist > 0
		fBonusDamage = fBonusDamage * (100.0 - fMagicResist) / 100.0
	EndIf
	
	akTarget.DamageActorValue("Health", fBonusDamage)

	If akTarget.HasMagicEffect(_00E_FS_PsychosisWeaknessVisualME)
		akTarget.DispelSpell(_00E_FS_PsychosisWeaknessSP)
		akTarget.DispelSpell(_00E_FS_PsychosisWeaknessSP_NoSlow)
	EndIf
EndEvent

Bool Function IsExtraDamageApplicable(Actor akTarget, Actor akCaster)
	If akTarget.HasMagicEffect(_00E_FS_PsychosisWeaknessVisualME)
		Return True
	EndIf

	If akCaster.IsDetectedBy(akTarget) == False
		akTarget.GetCombatState()
		If akTarget.GetCombatState() != 1
			Return True
		EndIf
	EndIf

	Return False
EndFunction

;=====================================================================================
;              							 PROPERTIES                  					 
;=====================================================================================

float fMagnitude
String Property sActorValue = "FavorActive" Auto

Actor Property PlayerREF Auto

MagicEffect Property _00E_FS_PsychosisWeaknessVisualME Auto

Spell Property _00E_FS_PsychosisWeaknessSP Auto
Spell Property _00E_FS_PsychosisWeaknessSP_NoSlow Auto

Perk Property _00E_Class_Infiltrator_P03_B_HeartShot Auto ; 2.5

Message Property _00E_FS_FakeStealthMsg Auto

Sound Property UISneakAttackM Auto