Scriptname MQGreybeardAbsorbScript extends Quest  
{script allowing Greybeard absorb}

import Game
import utility


; for Greybeard effect
VisualEffect Property FXGreybeardAbsorbEffect Auto
EffectShader Property GreybeardPowerAbsorbFXS Auto
EffectShader Property GreybeardPlayerPowerAbsorbFXS Auto
sound property NPCDragonDeathSequenceWind auto
sound property NPCDragonDeathSequenceExplosion auto

; for dragon effect
VisualEffect Property DragonAbsorbEffect Auto
VisualEffect Property DragonAbsorbManEffect Auto
EffectShader Property DragonPowerAbsorbFXS Auto

ObjectReference Property KnockAreaEffectMarker  Auto  

; use this for Greybeards
function AbsorbEffect(Actor target, int stageToSet = 0)

       ;Play art and fx shaders on player and targeted grybeard
       FXGreybeardAbsorbEffect.Play(target, 7, GetPlayer())
       GreybeardPowerAbsorbFXS.Play(target)
	GreybeardPlayerPowerAbsorbFXS.Play(GetPlayer())

	;Wait for the art to play
	;Wait(7.0)
	; INSTEAD - break up the 7 seconds:

	; damage target to simulate absorption
	float damage = target.GetActorValue("health")/5		; use 3 if bleedout looks good
	target.DamageActorValue("health", damage)
;	KnockAreaEffectMarker.Moveto(target)
;	KnockAreaEffectMarker.KnockAreaEffect(0.2, 5)
	target.PlayIdle(BracedPainIdle)

	; Sounds for when the wispy particles being to fly at the player.
	NPCDragonDeathSequenceWind.play(target) 
	NPCDragonDeathSequenceExplosion.play(target) 

	wait(2)
	target.DamageActorValue("health", damage)
;	KnockAreaEffectMarker.Moveto(target)
;	KnockAreaEffectMarker.KnockAreaEffect(0.5, 5)
;	target.PlayIdle(BracedPainIdle)


	wait(2)
	target.DamageActorValue("health", damage)
;	KnockAreaEffectMarker.Moveto(target)
;	KnockAreaEffectMarker.KnockAreaEffect(0.8, 5)
;	target.PlayIdle(BracedPainIdle)

	wait(2)
	target.DamageActorValue("health", damage)
;	KnockAreaEffectMarker.Moveto(target)
;	KnockAreaEffectMarker.KnockAreaEffect(1.0, 5)
;	target.PlayIdle(BracedPainIdle)


	Wait(1.0)

	;remove magic shaders
	GreybeardPowerAbsorbFXS.Stop(target)
	GreybeardPlayerPowerAbsorbFXS.Stop(GetPlayer())

	; set stage when finished
	if stageToSet > 0
		setstage(stageToSet)
	endif

endFunction

; use this for Paarthurnax
function DragonAbsorbEffect(Actor target, int stageToSet = 0)

	;display dragon absorb effect art. One part on dragon one part on player.
	DragonAbsorbEffect.Play(target, 8, GetPlayer())
	DragonAbsorbManEffect.Play(GetPlayer(), 8, target)
	
	; Sounds for when the wispy particles being to fly at the player.
	NPCDragonDeathSequenceWind.play(target) 
	NPCDragonDeathSequenceExplosion.play(target) 
	
	wait(0.1)
		
	; On man power absorb effect shader.
	DragonPowerAbsorbFXS.Play(GetPlayer())
	
	wait(2)
	
	wait(4)

	;Stop fx shader on player showing power absorb.	
	DragonPowerAbsorbFXS.Stop(GetPlayer())
	
	wait(4)
	
	; Get rid of art attached to dragon and player showing streaming magic.
	DragonAbsorbEffect.Stop(target)
	DragonAbsorbManEffect.Stop(GetPlayer())

	; set stage when finished
	if stageToSet > 0
		setstage(stageToSet)
	endif

endFunction
Idle Property BracedPainIdle  Auto